new_data_magic 1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|