data_extensions.rb

  1# frozen_string_literal: true
  2
  3require "regexp-examples"
  4
  5class Rantly
  6	module Data
  7		module Extensions
  8			REGEXP_EXAMPLES_OPTS = {
  9				max_group_results: 10,
 10				max_repeater_variance: 10
 11			}.freeze
 12
 13			# @see https://github.com/mnestorov/regex-patterns
 14			# @return [String]
 15			FRENCH_PHONE = /\+33[1-9]\d{8}/.freeze
 16			# @return [String]
 17			GERMAN_PHONE = /\+49[1-9]\d{3,12}/.freeze
 18			# @return [String]
 19			UK_PHONE = /\+44[1-9]\d{9,10}/.freeze
 20			# @return [String]
 21			SPANISH_PHONE = /\+34[6-9]\d{8}/.freeze
 22			# @return [String]
 23			ITALIAN_PHONE = /\+39[0-9]{9,10}/.freeze
 24
 25			# @return [String]
 26			def french_phone
 27				FRENCH_PHONE.random_example(**REGEXP_EXAMPLES_OPTS)
 28			end
 29
 30			# @return [String]
 31			def german_phone
 32				GERMAN_PHONE.random_example(**REGEXP_EXAMPLES_OPTS)
 33			end
 34
 35			# @return [String]
 36			def uk_phone
 37				UK_PHONE.random_example(**REGEXP_EXAMPLES_OPTS)
 38			end
 39
 40			# @return [String]
 41			def spanish_phone
 42				SPANISH_PHONE.random_example(**REGEXP_EXAMPLES_OPTS)
 43			end
 44
 45			# @return [String]
 46			def italian_phone
 47				ITALIAN_PHONE.random_example(**REGEXP_EXAMPLES_OPTS)
 48			end
 49
 50			# @return [String]
 51			def non_nanp_phone
 52				send(
 53					choose(
 54						:french_phone, :german_phone, :uk_phone,
 55						:spanish_phone, :italian_phone
 56					)
 57				)
 58			end
 59
 60			# @note https://stackoverflow.com/questions/6478875/regular-expression-matching-e-164-formatted-phone-numbers
 61			# @return [String]
 62			def nanpa_phone
 63				"+1" +
 64					sized(1) { string(/[2-9]/) } +
 65					sized(2) { string(/[0-9]/) } +
 66					sized(1) { string(/[2-9]/) } +
 67					sized(6) { string(/[0-9]/) }
 68			end
 69
 70			# @note https://stackoverflow.com/questions/4894198/how-to-generate-a-random-date-in-ruby
 71			# @return [String]
 72			def iso8601(from = 0.0, to = Time.now)
 73				value { Time.at(from + float * (to.to_f - from.to_f)).iso8601 }
 74			end
 75
 76			# @return [String]
 77			def bare_jid
 78				local = sized(range(3, 12)) { string(:alnum) }
 79				domain = sized(range(3, 8)) { string(:lower) }
 80				"#{local}@#{domain}.example.com"
 81			end
 82
 83			# @return [String]
 84			def bw_message_id
 85				sized(range(6, 19)) { string(:alnum) }
 86			end
 87
 88			# @return [String]
 89			def shortcode
 90				range(10000, 999999).to_s
 91			end
 92
 93			# @return [Array<String>]
 94			HTTP_ESCAPABLE = " &=?/+@#".chars.freeze
 95
 96			# @return [String]
 97			def maybe_http_escapable_string
 98				base = sized(range(3, 8)) { string(:alnum) }
 99				choose(
100					base,
101					base + choose(*HTTP_ESCAPABLE) +
102						sized(range(1, 5)) { string(:alnum) }
103				)
104			end
105
106			# @return [String]
107			def media_url
108				user_id = sized(range(3, 10)) { string(:alnum) }
109				name = sized(range(3, 12)) { string(:alnum) }
110				ext = choose(".jpg", ".png", ".gif", ".mp4", ".pdf", ".smil", ".txt", ".xml")
111				"https://messaging.bandwidth.com/api/v2/users/#{user_id}/media/#{name}#{ext}"
112			end
113		end
114	end
115
116	include Data::Extensions
117end