new_data_magic 1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.DS_Store +0 -0
- data/.gitignore +20 -0
- data/.rspec +2 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +6 -0
- data/ChangeLog +142 -0
- data/Gemfile +14 -0
- data/Guardfile +18 -0
- data/LICENSE +22 -0
- data/README.md +42 -0
- data/Rakefile +27 -0
- data/config/data/default.yml +3 -0
- data/config/data/user.yml +3 -0
- data/cucumber.yml +2 -0
- data/features/data_magic.feature +134 -0
- data/features/defaults.feature +8 -0
- data/features/step_definitions/data_magic_steps.rb +175 -0
- data/features/support/env.rb +11 -0
- data/features/yaml/another.yml +9 -0
- data/features/yaml/example.yml +65 -0
- data/lib/data_magic/core_ext/hash.rb +7 -0
- data/lib/data_magic/core_ext/integer.rb +13 -0
- data/lib/data_magic/core_ext/string.rb +9 -0
- data/lib/data_magic/date_translation.rb +100 -0
- data/lib/data_magic/standard_translation.rb +370 -0
- data/lib/data_magic/translation.rb +15 -0
- data/lib/data_magic/version.rb +5 -0
- data/lib/data_magic.rb +114 -0
- data/new_data_magic.gemspec +28 -0
- data/spec/lib/data_magic_spec.rb +113 -0
- data/spec/lib/translation_spec.rb +326 -0
- data/spec/spec_helper.rb +30 -0
- metadata +143 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 8f5dc75eb29b8be63fd7c58614169a929af267c62fd71ee17522a4608b5c55b6
|
4
|
+
data.tar.gz: f973f4e29a9a0c074a9f57e132fa271d2bf53901a2e7165fb0dccff854b4dd42
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9741ab6ea9632ae0752e4818a573c2706179f58579ea085528300dc9c6101e5447ea14b81d70ba1d2783e4594fbccbedb85bc0e4804031f665b0e2a36ad4ea99
|
7
|
+
data.tar.gz: 32ff1d495db9d306865139790e71cb4fc9862c79a3e970f80ff38e0e90a642979b8917cff98f4d38fd7c46e99eade369aa660c93a39bd9b7c8c6fd914f39e6d9
|
data/.DS_Store
ADDED
Binary file
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
data_magic
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.5.1
|
data/ChangeLog
ADDED
@@ -0,0 +1,142 @@
|
|
1
|
+
== Version 1.2 / 2017-09-23
|
2
|
+
* Enhancements
|
3
|
+
* Data is translated each time a request is made for data (Thanks Vveliev)
|
4
|
+
* Array handling and translation (Thanks Vveliev)
|
5
|
+
|
6
|
+
== Version 1.1 / 2016-08-03
|
7
|
+
* Fixes
|
8
|
+
* Update so it works well on Ruby 2.4 (thanks Robert MacCracken)
|
9
|
+
|
10
|
+
=== Version 1.0 / 2016-11-23
|
11
|
+
* Enhancements
|
12
|
+
* Allow merged to be a Hash of Hashes and find key that matches (thanks Donavan Stanley)
|
13
|
+
* Allow you to specify file to load with tag when using Cucumber (thanks Donavan Stanley)
|
14
|
+
|
15
|
+
=== Version 0.22 / 2015-12-2
|
16
|
+
* Enhancements
|
17
|
+
* Better handling for nexted hash translation (thanks vveliev)
|
18
|
+
|
19
|
+
=== Version 0.21 / 2015-4-12
|
20
|
+
* Enhancements
|
21
|
+
* Added support for locale
|
22
|
+
* Added credit_card_number translator
|
23
|
+
* Added credit_card_type translator
|
24
|
+
|
25
|
+
=== Version 0.20 / 2014-9-21
|
26
|
+
* Enhancements
|
27
|
+
* Added the ability to nest entries under headings
|
28
|
+
* Added the ability to call the translation methods directlry on DataMagic module
|
29
|
+
|
30
|
+
=== Version 0.19 / 2014-6-1
|
31
|
+
* Enhancements
|
32
|
+
* Can now include ERB in the yml file due to update in yml_reader
|
33
|
+
|
34
|
+
=== Version 0.18 / 2014-3-2
|
35
|
+
* Enhancements
|
36
|
+
* Can now set the file to be used by setting a DATA_MAGIC_FILE environment file
|
37
|
+
* Fixes
|
38
|
+
* Only forcing available locales if it is available
|
39
|
+
|
40
|
+
=== Version 0.17 / 2014-1-22
|
41
|
+
* Fixes
|
42
|
+
* Eliminated the deprecation message from I18n
|
43
|
+
|
44
|
+
=== Version 0.16.1 / 2013-9-1
|
45
|
+
* Fixes
|
46
|
+
* Removed pry require
|
47
|
+
|
48
|
+
=== Version 0.16 / 2013-8-31
|
49
|
+
* Enhancements
|
50
|
+
* Ability to support namespaces which will load a file with same name as namespace (Thanks Ben Cullen-Kerney)
|
51
|
+
|
52
|
+
=== Version 0.15.2 / 2013-7-17
|
53
|
+
* Fixes
|
54
|
+
* Display better message when key is not found (Thanks Guillaume Malette)
|
55
|
+
* Properly handling numeric values (Thanks Guillaume Malette)
|
56
|
+
|
57
|
+
=== Version 0.15.1 / 2013-7-11
|
58
|
+
* Fixes
|
59
|
+
* Fixed error when using sequential with entries that have spaces
|
60
|
+
|
61
|
+
=== Version 0.15 / 2013-7-10
|
62
|
+
* Enhancements
|
63
|
+
* Added sequential translator
|
64
|
+
|
65
|
+
=== Version 0.14 / 2013-2-14
|
66
|
+
* Enhancements
|
67
|
+
* Added months_abbr translator
|
68
|
+
* Added day_of_week translator
|
69
|
+
* Added day_of_week_abbr translator
|
70
|
+
* Changed so translator methods are not call after mixing with class
|
71
|
+
|
72
|
+
=== Version 0.13 / 2013-2-7
|
73
|
+
* Enhancements
|
74
|
+
* Added add_translator method to DataMagic to allow custom translators to be added
|
75
|
+
* Added months translator
|
76
|
+
* Added dm_* aliases for all generators
|
77
|
+
|
78
|
+
=== Version 0.12 / 2012-12-28
|
79
|
+
* Enhancements
|
80
|
+
* Added today translator
|
81
|
+
* Added tomorrow translator
|
82
|
+
* Added yesterday translator
|
83
|
+
* Added days_from_today to Fixnum to provide translator
|
84
|
+
* Added days_ago to Fixnum to provide translator
|
85
|
+
|
86
|
+
=== Version 0.11 / 2012-12-22
|
87
|
+
* Enhancements
|
88
|
+
* Added title translator
|
89
|
+
* Added ability for street_address translator to also include secondary address
|
90
|
+
* Added ability for email_address to accept the name portion of the value
|
91
|
+
* Added url translator
|
92
|
+
* Added cell_phone translator
|
93
|
+
* Changed phone_number translator so it does not return an extension
|
94
|
+
|
95
|
+
=== Version 0.10 / 2012-12-8
|
96
|
+
* Enhancements
|
97
|
+
* Added randomize translator to return random selection from Array or Range
|
98
|
+
* Added mask translator which accepts a mask. Will replace # with number, A with upper case letter, and a with lower case letter
|
99
|
+
|
100
|
+
=== Version 0.9 / 2012-8-18
|
101
|
+
* Enhancements
|
102
|
+
* Added name_prefix translator
|
103
|
+
* Added name_suffix translator
|
104
|
+
* Added domain_name translator
|
105
|
+
* Added user_name translator
|
106
|
+
* Added characters translator
|
107
|
+
|
108
|
+
=== Version 0.8 / 2012-6-9
|
109
|
+
* Enhancements
|
110
|
+
* Made yml writable
|
111
|
+
* Updated yml_reader dependency to version 0.2
|
112
|
+
|
113
|
+
=== Version 0.7 / 2012-5-17
|
114
|
+
* Enhancements
|
115
|
+
* Refactored to use yml_reader to remove duplication
|
116
|
+
* Changed default directory from 'config' to 'config/data'
|
117
|
+
* Fixes
|
118
|
+
* Removed unused classes after refactoring
|
119
|
+
|
120
|
+
=== Version 0.6 / 2012-5-4
|
121
|
+
* Fixes
|
122
|
+
* Minor fix so it works properly with ruby 1.8.7
|
123
|
+
|
124
|
+
=== Version 0.5 / 2012-3-24
|
125
|
+
* Enhancements
|
126
|
+
* Added ability to use symbol for the key in the data_for method
|
127
|
+
|
128
|
+
=== Version 0.4 / 2012-2-27
|
129
|
+
* Enhancements
|
130
|
+
* Support for boolean types (thanks jonbettinger)
|
131
|
+
|
132
|
+
=== Version 0.3 / 2012-2-5
|
133
|
+
* Added additional data merge to #data_for
|
134
|
+
|
135
|
+
=== Version 0.2 / 2012-1-26
|
136
|
+
* Defaulted yaml file to 'default.yaml'
|
137
|
+
* Cloned hash so data can be reused
|
138
|
+
* Renamed #name translation method to #full_name
|
139
|
+
* Renamed #email translation method to #email_address
|
140
|
+
|
141
|
+
=== Version 0.1 / 2012-1-21
|
142
|
+
Initial Release
|
data/Gemfile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
source 'http://rubygems.org'
|
4
|
+
|
5
|
+
gem 'byebug'
|
6
|
+
gem 'fuubar'
|
7
|
+
gem 'growl'
|
8
|
+
gem 'guard-cucumber'
|
9
|
+
gem 'guard-rspec'
|
10
|
+
gem 'rake'
|
11
|
+
gem 'rb-fsevent', require: false if RUBY_PLATFORM =~ /darwin/i
|
12
|
+
|
13
|
+
# Specify your gem's dependencies in new_data_magic.gemspec
|
14
|
+
gemspec
|
data/Guardfile
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# A sample Guardfile
|
4
|
+
# More info at https://github.com/guard/guard#readme
|
5
|
+
|
6
|
+
guard 'rspec', cmd: 'rspec --color --format Fuubar' do
|
7
|
+
watch(%r{^spec/.+_spec\.rb$})
|
8
|
+
watch(%r{^lib/(.+)\.rb$}) { 'spec' }
|
9
|
+
watch('spec/spec_helper.rb') { 'spec' }
|
10
|
+
end
|
11
|
+
|
12
|
+
guard 'cucumber', notification: true, cli: '--profile focus' do
|
13
|
+
watch(%r{^features/.+\.feature$})
|
14
|
+
watch(%r{^features/support/.+$}) { 'features' }
|
15
|
+
watch(%r{^features/step_definitions/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'features' }
|
16
|
+
watch(%r{^lib/.+\.rb$}) { 'features' }
|
17
|
+
watch(%r{^features/yaml/.+$}) { 'features' }
|
18
|
+
end
|
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2012 Jeffrey S. Morgan
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# data_magic (updated version)
|
2
|
+
|
3
|
+
This gem is ported from the original data_magic gem -> [here](https://github.com/cheezy/data_magic). Please read the original documentation first.
|
4
|
+
I created this to make sure the gem stays updated with its dependencies. (The original gem seems to be unmaintained)
|
5
|
+
|
6
|
+
## How to Use
|
7
|
+
Requirement:
|
8
|
+
* Ruby >= 2.5.1
|
9
|
+
* Faker >= 1.9
|
10
|
+
|
11
|
+
Update your Gemfile to
|
12
|
+
|
13
|
+
````ruby
|
14
|
+
gem 'data_magic', git: 'https://github.com/firstlutfi/data_magic.git', branch: 'master'
|
15
|
+
````
|
16
|
+
Then run
|
17
|
+
````ruby
|
18
|
+
bundle install
|
19
|
+
````
|
20
|
+
Any other configuration is exactly same as the original gem.
|
21
|
+
|
22
|
+
NOTE:
|
23
|
+
If you have previously used older version of Faker, I suggest you to install [rubocop-faker](https://github.com/koic/rubocop-faker) to automatically update from positional arguments to named arguments.
|
24
|
+
|
25
|
+
## New & Updated Generator
|
26
|
+
|
27
|
+
Here is a list of the new and updated methods:
|
28
|
+
|
29
|
+
| new methods added | updated methods | replaced methods |
|
30
|
+
| --- | --- | --- |
|
31
|
+
| color_hex | job_title<sup>1</sup> | title |
|
32
|
+
| color_name |
|
33
|
+
| number(digits=5, leading_zero=true) |
|
34
|
+
| decimal(before_decimal=5, after_decimal=3) |
|
35
|
+
| merge(separator='_', [first_name, city, number(digits=3)]) |
|
36
|
+
| date_between(from='01/01/2021', to='31/01/2021', format='%d/%m/%Y') |
|
37
|
+
|
38
|
+
<sup>1</sup> In newer version of Faker, Faker::Name.title is changed to Faker::Job.title
|
39
|
+
|
40
|
+
## Copyright
|
41
|
+
|
42
|
+
Copyright (c) 2012-2021 [Jeffrey S. Morgan](https://github.com/cheezy/data_magic). See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'bundler/gem_tasks'
|
5
|
+
|
6
|
+
require 'rspec/core/rake_task'
|
7
|
+
require 'cucumber'
|
8
|
+
require 'cucumber/rake/task'
|
9
|
+
|
10
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
11
|
+
spec.ruby_opts = '-I lib:spec'
|
12
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
13
|
+
end
|
14
|
+
task :spec
|
15
|
+
|
16
|
+
Cucumber::Rake::Task.new(:features, 'Run features') do |t|
|
17
|
+
t.profile = 'default'
|
18
|
+
end
|
19
|
+
|
20
|
+
desc 'Run all specs and cukes'
|
21
|
+
task test: %w[spec features]
|
22
|
+
|
23
|
+
task :lib do
|
24
|
+
$LOAD_PATH.unshift(File.expand_path('lib', File.dirname(__FILE__)))
|
25
|
+
end
|
26
|
+
|
27
|
+
task default: :test
|
data/cucumber.yml
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
Feature: Functionality of the data_magic gem
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I have read the yaml file from features/yaml
|
5
|
+
When I ask for the data for "dm"
|
6
|
+
|
7
|
+
Scenario: Getting basic data from the yaml
|
8
|
+
Then the value for "value1" should be "this is value 1"
|
9
|
+
And the value for "value2" should be "this is value 2"
|
10
|
+
|
11
|
+
Scenario: Getting names from the yaml
|
12
|
+
Then the value for "full_name" should have a minimum of 2 words
|
13
|
+
And the value for "first_name" should be 1 word long
|
14
|
+
And the value for "last_name" should be 1 word long
|
15
|
+
And the value for "name_prefix" should be 1 word long
|
16
|
+
And the value for "name_suffix" should be 1 word long
|
17
|
+
And the value for "job_title" should have a minimum of 1 words
|
18
|
+
|
19
|
+
Scenario: Getting addresses from the yaml
|
20
|
+
Then the value for "street" should have a minimum of 2 words
|
21
|
+
And the value for "street_plus" should have a minimum of 4 words
|
22
|
+
And the value for "city" should have a minimum of 1 word
|
23
|
+
And the value for "state" should have a minimum of 1 word
|
24
|
+
And the value for "state_ab" should be 1 word long
|
25
|
+
And the value for "zip" should be 1 word long
|
26
|
+
And the value for "country" should have a minimum of 1 word
|
27
|
+
And the value for "second_address" should have a minimum of 1 words
|
28
|
+
|
29
|
+
Scenario: Getting a company name from the yaml
|
30
|
+
Then the value for "company" should have a minimum of 1 word
|
31
|
+
|
32
|
+
Scenario: Getting an email address from the yaml
|
33
|
+
Then the value for "email" should be 1 word long
|
34
|
+
And the value for "email_plus" should include "buddy"
|
35
|
+
And the value for "domain_name" should be 1 word long
|
36
|
+
And the value for "user_name" should be 1 word long
|
37
|
+
And the value for "url" should include "http://"
|
38
|
+
|
39
|
+
Scenario: Getting a phone number
|
40
|
+
Then the value for "phone" should be a phone number
|
41
|
+
And the value for "cell" should be a phone number
|
42
|
+
|
43
|
+
Scenario: Random phrases
|
44
|
+
Then the value for "catch_phrase" should exist
|
45
|
+
And the value for "words" should exist
|
46
|
+
And the value for "sentence" should exist
|
47
|
+
And the value for "sentences" should exist
|
48
|
+
And the value for "paragraphs" should exist
|
49
|
+
And the value for "characters" should be 255 characters long
|
50
|
+
|
51
|
+
Scenario: Boolean values
|
52
|
+
Then the value for "bool_true" should be true
|
53
|
+
And the value for "bool_false" should be false
|
54
|
+
|
55
|
+
Scenario: Reading multiple data segments
|
56
|
+
When I ask for the data for "other"
|
57
|
+
Then the value for "name" should be "Cheezy"
|
58
|
+
And the value for "address" should be "123 Main Street"
|
59
|
+
And the value for "email" should be "cheezy@example.com"
|
60
|
+
|
61
|
+
Scenario: Reading from multiple yml files
|
62
|
+
When I load the file "another.yml"
|
63
|
+
And I ask for the data for "other_file"
|
64
|
+
Then the value for "name" should be "Sneezy"
|
65
|
+
And the value for "address" should be "555 Easy Money Drive"
|
66
|
+
And the value for "email" should be "sneezy@example.com"
|
67
|
+
|
68
|
+
Scenario: Reading multiple entries from same file
|
69
|
+
When I load the file "another.yml"
|
70
|
+
And I ask for the data for "other_file"
|
71
|
+
Then the value for "name" should be "Sneezy"
|
72
|
+
When I ask for the data for "more_info"
|
73
|
+
Then the value for "name" should be "Wheezy"
|
74
|
+
And the value for "address" should be "999 Alergy Ave"
|
75
|
+
And the value for "email" should be "wheezy@example.com"
|
76
|
+
|
77
|
+
Scenario: Returning a randomly selected value from an array
|
78
|
+
Then the value for "random" should be either "Tom", "Dick", or "Harry"
|
79
|
+
And the value for "range" should be between 1 and 5
|
80
|
+
|
81
|
+
Scenario: Returning a sequential value from an array
|
82
|
+
Then the first value for the sequential data should be "first"
|
83
|
+
When I ask for the data again
|
84
|
+
Then the second value for the sequential data should be "second"
|
85
|
+
When I ask for the data again
|
86
|
+
Then the third value for the sequential data should be "third"
|
87
|
+
|
88
|
+
Scenario: Returning a value based on a mask
|
89
|
+
Then the value for "mask" should begin with 3 numbers
|
90
|
+
And the value for "mask" should have 3 upper case letters after a dash
|
91
|
+
And the value for "mask" should end with 3 lower case letters
|
92
|
+
|
93
|
+
Scenario: Returning dates
|
94
|
+
Then the value for "today" should be today's date
|
95
|
+
And the value for "tomorrow" should be tomorrow's date
|
96
|
+
And the value for "yesterday" should be yesterday's date
|
97
|
+
|
98
|
+
Scenario: Specifying number of days from today
|
99
|
+
Then the value for "5daysfromtoday" should be five days from today
|
100
|
+
And the value for "5daysago" should be five days ago
|
101
|
+
|
102
|
+
Scenario: Getting a random month name
|
103
|
+
Then the value for "some_month" should be a valid month
|
104
|
+
|
105
|
+
Scenario: Getting a random month abbreviation
|
106
|
+
Then the value for "month_abbr" should be a valid month abbreviation
|
107
|
+
|
108
|
+
Scenario: Getting a random day name
|
109
|
+
Then the value for "some_day" should be a valid day
|
110
|
+
|
111
|
+
Scenario: Getting a random day abbreviation
|
112
|
+
Then the value for "day_abbr" should be a valid day abbreviation
|
113
|
+
|
114
|
+
Scenario: It should allow one to add new translator methods
|
115
|
+
When I add the blah translator
|
116
|
+
Then the value for "blah" should be "foobar"
|
117
|
+
|
118
|
+
Scenario: Getting values from nested entries
|
119
|
+
Then the nested value for this is_nested should be "Nested Value"
|
120
|
+
|
121
|
+
Scenario Outline: Translate values from nested hahs
|
122
|
+
Given overwrite @data with translate_nested
|
123
|
+
Then the nested hash should include <key>
|
124
|
+
And the value for "<key>" should <validate>
|
125
|
+
And the value for "<key>" should not mach <negative_validate>
|
126
|
+
Examples:
|
127
|
+
| key | validate | negative_validate |
|
128
|
+
| full_name | have a minimum of 2 words | ~full_name |
|
129
|
+
| first_name | be 1 word long | ~first_name |
|
130
|
+
|
131
|
+
Scenario: Should be able to call the translator methods on DataMagic module
|
132
|
+
Then I should be able to call the full_name translator
|
133
|
+
And I should be able to call the state translator
|
134
|
+
And I should be able to call the today translator
|
@@ -0,0 +1,8 @@
|
|
1
|
+
Feature: Default file and directory functionality of the data_magic gem
|
2
|
+
|
3
|
+
Scenario: Using the default file and directory
|
4
|
+
Given I have read the default yaml file from the default location
|
5
|
+
When I ask for the data for "dm"
|
6
|
+
Then the value for "value1" should be "this is value 1"
|
7
|
+
And the value for "value2" should be "this is value 2"
|
8
|
+
|
@@ -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
|