centric_data_magic 1.2.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,175 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TestClass
4
+ include DataMagic
5
+ end
6
+
7
+ Given(%r{^I have read the yaml file from features/yaml$}) do
8
+ DataMagic.yml_directory = 'features/yaml'
9
+ DataMagic.load 'example.yml'
10
+ end
11
+
12
+ Given(/^I have read the default yaml file from the default location$/) do
13
+ end
14
+
15
+ When(/^I ask for the data for "(.+)"$/) do |key|
16
+ TestClass.instance_variable_set '@private_firstsecond_index', 0
17
+ @tc = TestClass.new
18
+ @data = @tc.data_for key
19
+ end
20
+
21
+ Then(/^the value for "(.+)" should be "(.+)"$/) do |key, value|
22
+ expect(@data[key]).to eql value
23
+ end
24
+
25
+ Then(/^the value for "(.+)" should be (true|false)$/) do |key, value|
26
+ expect(@data[key].to_s).to eql value
27
+ end
28
+
29
+ Then(/^the value for "(.+)" should be (\d+) word|words long$/) do |key, length|
30
+ expect(@data[key].split(' ').size).to eql length.to_i
31
+ end
32
+
33
+ Then(/^the value for "(.+)" should have a minimum of (\d+) word|wordss$/) do |key, length|
34
+ expect(@data[key].split(' ').size).to be >= length.to_i
35
+ end
36
+
37
+ Then(/^the value for "(.*?)" should be (\d+) characters long$/) do |key, length|
38
+ expect(@data[key].length).to eql length.to_i
39
+ end
40
+
41
+ Then(/^the value for "(.+)" should exist$/) do |key|
42
+ expect(@data[key]).not_to be_nil
43
+ end
44
+
45
+ When(/^I load the file "(.+)"$/) do |file_name|
46
+ DataMagic.load file_name
47
+ end
48
+
49
+ Then(/^the value for "(.*?)" should be either "(.*?)", "(.*?)", or "(.*?)"$/) do |key, vala, valb, valc|
50
+ expect([vala, valb, valc]).to include @data[key]
51
+ end
52
+
53
+ Then(/^the value for "(.*?)" should be between (\d+) and (\d+)$/) do |key, low, high|
54
+ value = @data[key]
55
+ expect(value).to be >= low.to_i
56
+ expect(value).to be <= high.to_i
57
+ end
58
+
59
+ Then(/^the value for "(.*?)" should begin with (\d+) numbers$/) do |key, num|
60
+ value = @data[key]
61
+ expect(value[0, num.to_i].is_integer).to be true
62
+ end
63
+
64
+ Then(/^the value for "(.*?)" should have (\d+) upper case letters after a dash$/) do |key, num|
65
+ value = @data[key]
66
+ expect(value[4, num.to_i].upcase).to eql value[4, 3]
67
+ end
68
+
69
+ Then(/^the value for "(.*?)" should end with (\d+) lower case letters$/) do |key, num|
70
+ value = @data[key]
71
+ expect(value[-1 * num.to_i, num.to_i].downcase).to eql value[-3, 3]
72
+ end
73
+
74
+ Then(/^the value for "(.*?)" should include "(.*?)"$/) do |key, value|
75
+ expect(@data[key]).to include value
76
+ end
77
+
78
+ Then(/^the value for "(.*?)" should be today's date$/) do |key|
79
+ expect(@data[key]).to eql Date.today.strftime('%D')
80
+ end
81
+
82
+ Then(/^the value for "(.*?)" should be tomorrow's date$/) do |key|
83
+ tomorrow = Date.today + 1
84
+ expect(@data[key]).to eql tomorrow.strftime('%D')
85
+ end
86
+
87
+ Then(/^the value for "(.*?)" should be yesterday's date$/) do |key|
88
+ yesterday = Date.today - 1
89
+ expect(@data[key]).to eql yesterday.strftime('%D')
90
+ end
91
+
92
+ Then(/^the value for "(.*?)" should be five days from today$/) do |key|
93
+ the_day = Date.today + 5
94
+ expect(@data[key]).to eql the_day.strftime('%D')
95
+ end
96
+
97
+ Then(/^the value for "(.*?)" should be five days ago$/) do |key|
98
+ the_day = Date.today - 5
99
+ expect(@data[key]).to eql the_day.strftime('%D')
100
+ end
101
+
102
+ Then(/^the value for "(.*?)" should be a valid month$/) do |key|
103
+ months = %w[January February March April May June July August September October November December]
104
+ expect(months).to include @data[key]
105
+ end
106
+
107
+ Then(/^the value for "(.*?)" should be a valid month abbreviation$/) do |key|
108
+ months = %w[Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec]
109
+ expect(months).to include @data[key]
110
+ end
111
+
112
+ Then(/^the value for "(.*?)" should be a valid day$/) do |key|
113
+ days = %w[Sunday Monday Tuesday Wednesday Thursday Friday Saturday]
114
+ expect(days).to include @data[key]
115
+ end
116
+
117
+ Then(/^the value for "(.*?)" should be a valid day abbreviation$/) do |key|
118
+ days = %w[Sun Mon Tue Wed Thu Fri Sat]
119
+ expect(days).to include @data[key]
120
+ end
121
+
122
+ When(/^I add the blah translator$/) do
123
+ module Blah
124
+ def blah
125
+ 'foobar'
126
+ end
127
+ end
128
+ DataMagic.add_translator(Blah)
129
+
130
+ class TranslatorAdded
131
+ include DataMagic
132
+ end
133
+ ta = TranslatorAdded.new
134
+ @data = ta.data_for 'dynamic'
135
+ end
136
+
137
+ Then(/^the (?:first|second|third) value for the sequential data should be "(.*?)"$/) do |value|
138
+ expect(@data['ordered']).to eql value
139
+ end
140
+
141
+ When(/^I ask for the data again$/) do
142
+ @data = @tc.data_for 'dm'
143
+ end
144
+
145
+ Then(/^the nested value for this is_nested should be "(.*?)"$/) do |value|
146
+ expect(@data['this']['is_nested']).to eql value
147
+ end
148
+
149
+ Then(/^the nested hash should include (.*?)$/) do |value|
150
+ expect(@data.keys).to include value
151
+ end
152
+
153
+ Then(/^the value for "(.*?)" should be a phone number$/) do |value|
154
+ phone = @data[value]
155
+ if phone.split(' ').length == 2
156
+ expect(phone).to include '('
157
+ expect(phone).to include ')'
158
+ else
159
+ expect(phone.split(' ').length).to eql 1
160
+ end
161
+ end
162
+
163
+ Then(/^I should be able to call the (.+) translator$/) do |method|
164
+ value = DataMagic.send method
165
+ expect(value).not_to be_empty
166
+ end
167
+
168
+ And(/^the value for "([^"]*)" should not mach (.*)$/) do |key, value|
169
+ expect(@data[key]).not_to eql value
170
+ end
171
+
172
+ Given(/^overwrite @data with (.*)$/) do |hash|
173
+ # This is a bit dangerous but quick way to make all steps to work with nested data
174
+ @data = @data['this'][hash]
175
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '../../', 'lib'))
4
+
5
+ require 'rspec/expectations'
6
+ require 'data_magic'
7
+
8
+ Before do
9
+ DataMagic.yml_directory = nil
10
+ DataMagic.yml = nil
11
+ end
@@ -0,0 +1,9 @@
1
+ other_file:
2
+ name: Sneezy
3
+ address: 555 Easy Money Drive
4
+ email: sneezy@example.com
5
+
6
+ more_info:
7
+ name: Wheezy
8
+ address: 999 Alergy Ave
9
+ email: wheezy@example.com
@@ -0,0 +1,65 @@
1
+ dm:
2
+ value1: this is value 1
3
+ value2: this is value 2
4
+ full_name: ~full_name
5
+ first_name: ~first_name
6
+ last_name: ~last_name
7
+ name_prefix: ~name_prefix
8
+ name_suffix: ~name_suffix
9
+ street: ~street_address
10
+ street_plus: ~street_address(true)
11
+ city: ~city
12
+ state: ~state
13
+ state_ab: ~state_abbr
14
+ zip: ~zip_code
15
+ country: ~country
16
+ second_address: ~secondary_address
17
+ company: ~company_name
18
+ email: ~email_address
19
+ email_plus: ~email_address('buddy')
20
+ domain_name: ~domain_name
21
+ url: ~url
22
+ user_name: ~user_name
23
+ phone: ~phone_number
24
+ cell: ~cell_phone
25
+ catch_phrase: ~catch_phrase
26
+ words: ~words
27
+ sentence: ~sentence
28
+ sentences: ~sentences
29
+ paragraphs: ~paragraphs
30
+ characters: ~characters
31
+ bool_true: true
32
+ bool_false: false
33
+ random: ~randomize ['Tom', 'Dick', 'Harry']
34
+ ordered: ~sequential ['first', 'second', 'third']
35
+ range: ~randomize 1..5
36
+ mask: ~mask "###-AAA_aaa"
37
+ job_title: ~job_title
38
+ today: ~today
39
+ tomorrow: ~tomorrow
40
+ yesterday: ~yesterday
41
+ 5daysfromtoday: ~5.days_from_today
42
+ 5daysago: ~5.days_ago
43
+ some_month: ~month
44
+ month_abbr: ~month_abbr
45
+ some_day: ~day_of_week
46
+ day_abbr: ~day_of_week_abbr
47
+ this:
48
+ is_nested: Nested Value
49
+ translate_nested:
50
+ full_name: ~full_name
51
+ first_name: ~first_name
52
+ color_hex: ~color_hex
53
+ color_name: ~color_name
54
+ number: ~number(digits = 10, true)
55
+ decimal: ~decimal(before_decimal = 5, after_decimal = 3)
56
+ merge: ~merge(separator = '--', [first_name, last_name, number(3)])
57
+ date_between: ~date_between(from = '01/01/2021', to = '31/12/2021', format = '%d/%m/%y')
58
+
59
+ dynamic:
60
+ blah: ~blah
61
+
62
+ other:
63
+ name: Cheezy
64
+ address: 123 Main Street
65
+ email: cheezy@example.com
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Hash
4
+ def deep_copy
5
+ Marshal.load(Marshal.dump(self))
6
+ end
7
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Integer
4
+ def days_from_today(format = '%D')
5
+ the_day = Date.today + self
6
+ the_day.strftime(format)
7
+ end
8
+
9
+ def days_ago(format = '%D')
10
+ the_day = Date.today - self
11
+ the_day.strftime(format)
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ class String
4
+ def is_integer
5
+ true if Integer(self)
6
+ rescue StandardError
7
+ false
8
+ end
9
+ end
@@ -0,0 +1,100 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DataMagic
4
+ module DateTranslation
5
+ #
6
+ # return today's date
7
+ #
8
+ # @param String the format to use for the date. Default is %D
9
+ #
10
+ # See http://ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/Date.html#method-i-strftime
11
+ # for details of the formats
12
+ #
13
+ def today(format = '%D')
14
+ Date.today.strftime(format)
15
+ end
16
+ alias dm_today today
17
+
18
+ #
19
+ # return tomorrow's date
20
+ #
21
+ # @param String the format to use for the date. Default is %D
22
+ #
23
+ # See http://ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/Date.html#method-i-strftime
24
+ # for details of the formats
25
+ #
26
+ def tomorrow(format = '%D')
27
+ tomorrow = Date.today + 1
28
+ tomorrow.strftime(format)
29
+ end
30
+ alias dm_tomorrow tomorrow
31
+
32
+ #
33
+ # return yesterday's date
34
+ #
35
+ # @param String the format to use for the date. Default is %D
36
+ #
37
+ # See http://ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/Date.html#method-i-strftime
38
+ # for details of the formats
39
+ #
40
+ def yesterday(format = '%D')
41
+ yesterday = Date.today - 1
42
+ yesterday.strftime(format)
43
+ end
44
+ alias dm_yesterday yesterday
45
+
46
+ #
47
+ # return a month
48
+ #
49
+ def month
50
+ randomize(Date::MONTHNAMES[1..-1])
51
+ end
52
+ alias dm_month month
53
+
54
+ #
55
+ # return a month abbreviation
56
+ #
57
+ def month_abbr
58
+ randomize(Date::ABBR_MONTHNAMES[1..-1])
59
+ end
60
+ alias dm_month_abbr month_abbr
61
+
62
+ #
63
+ # return a day of the week
64
+ #
65
+ def day_of_week
66
+ randomize(Date::DAYNAMES)
67
+ end
68
+ alias dm_day_of_week day_of_week
69
+
70
+ def day_of_week_abbr
71
+ randomize(Date::ABBR_DAYNAMES)
72
+ end
73
+ alias dm_day_of_week_abbr day_of_week_abbr
74
+
75
+ ##################################################################
76
+ # #
77
+ # NEW TRANSLATOR STARTS HERE #
78
+ # #
79
+ ##################################################################
80
+
81
+ #
82
+ # return random date within the range
83
+ #
84
+ def date_between(from = nil, to = nil, format = '%D')
85
+ raise ArgumentError, 'Invalid date format' if from.to_s.empty? || to.to_s.empty?
86
+
87
+ start_date = from.nil? ? Date.today.strftime(format) : Date.strptime(from, format)
88
+ end_date = to.nil? ? Date.today.strftime(format) : Date.strptime(to, format)
89
+
90
+ Faker::Date.between(from: start_date, to: end_date).strftime(format)
91
+ end
92
+ alias dm_date_between date_between
93
+
94
+ ##################################################################
95
+ # #
96
+ # NEW TRANSLATOR ENDS HERE #
97
+ # #
98
+ ##################################################################
99
+ end
100
+ end