fig_magic 0.1
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 +17 -0
- data/.idea/.name +1 -0
- data/.idea/.rakeTasks +7 -0
- data/.idea/FigMagic.iml +33 -0
- data/.idea/atlassian-ide-plugin.xml +5 -0
- data/.idea/encodings.xml +6 -0
- data/.idea/misc.xml +14 -0
- data/.idea/modules.xml +8 -0
- data/.idea/workspace.xml +776 -0
- data/.rspec +2 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/ChangeLog +2 -0
- data/Gemfile +12 -0
- data/Guardfile +16 -0
- data/LICENSE +22 -0
- data/README.md +145 -0
- data/Rakefile +25 -0
- data/config/data/default.yml +3 -0
- data/config/data/user.yml +3 -0
- data/config/environments/default.yml +1 -0
- data/config/yaml/sample.yml +1 -0
- data/config/yaml/test_config.yml +14 -0
- data/cucumber.yml +2 -0
- data/features/data_magic.feature +124 -0
- data/features/defaults.feature +8 -0
- data/features/fig_newton.feature +85 -0
- data/features/step_definitions/data_magic_steps.rb +164 -0
- data/features/step_definitions/fig_newton_steps.rb +95 -0
- data/features/support/env.rb +9 -0
- data/features/yaml/another.yml +9 -0
- data/features/yaml/example.yml +56 -0
- data/fig_magic.gemspec +25 -0
- data/lib/fig_magic/core_ext/fixnum.rb +11 -0
- data/lib/fig_magic/core_ext/string.rb +5 -0
- data/lib/fig_magic/date_translation.rb +73 -0
- data/lib/fig_magic/missing.rb +35 -0
- data/lib/fig_magic/node.rb +15 -0
- data/lib/fig_magic/standard_translation.rb +316 -0
- data/lib/fig_magic/translation.rb +14 -0
- data/lib/fig_magic/version.rb +3 -0
- data/lib/fig_magic.rb +93 -0
- data/spec/lib/data_magic_spec.rb +60 -0
- data/spec/lib/translation_spec.rb +312 -0
- data/spec/spec_helper.rb +30 -0
- metadata +158 -0
@@ -0,0 +1,95 @@
|
|
1
|
+
Given (/^I have read the configuration file$/) do
|
2
|
+
FigMagic.yml_directory = 'config/yaml'
|
3
|
+
FigMagic.load 'test_config.yml'
|
4
|
+
end
|
5
|
+
|
6
|
+
When (/^I have read the default file from the default directory$/) do
|
7
|
+
FigMagic.yml = nil
|
8
|
+
end
|
9
|
+
|
10
|
+
When (/^I ask for the value for "([^\"]*)"$/) do |key|
|
11
|
+
@value = FigMagic.send key
|
12
|
+
end
|
13
|
+
|
14
|
+
Then (/^I should see "([^\"]*)"$/) do |value|
|
15
|
+
expect(@value).to eql value
|
16
|
+
end
|
17
|
+
|
18
|
+
Then (/^I should see (\d+)$/) do |value|
|
19
|
+
expect(@value).to eql value.to_i
|
20
|
+
end
|
21
|
+
|
22
|
+
Then (/^I should see true$/) do
|
23
|
+
expect(@value).to be true
|
24
|
+
end
|
25
|
+
|
26
|
+
Then (/^I should see false$/) do
|
27
|
+
expect(@value).to be false
|
28
|
+
end
|
29
|
+
|
30
|
+
When (/^I ask for a value that does not exist named "([^\"]*)"$/) do |non_existing|
|
31
|
+
@does_not_exist = non_existing
|
32
|
+
end
|
33
|
+
|
34
|
+
Then (/^I should raise a NoMethodError exception$/) do
|
35
|
+
expect{ FigMagic.send(@does_not_exist) }.to raise_error(NoMethodError)
|
36
|
+
end
|
37
|
+
|
38
|
+
Then (/^I should have a node$/) do
|
39
|
+
expect(@value).to be_an_instance_of FigMagic::Node
|
40
|
+
end
|
41
|
+
|
42
|
+
Then (/^the "([^\"]*)" value for the node should be "([^\"]*)"$/) do |key, value|
|
43
|
+
expect(@value.send(key)).to eql value
|
44
|
+
end
|
45
|
+
|
46
|
+
When (/^I ask for the node value for "([^\"]*)"$/) do |key|
|
47
|
+
@value = @value.send(key)
|
48
|
+
end
|
49
|
+
|
50
|
+
Given (/^I have an environment variable named "([^\"]*)" set to "([^\"]*)"$/) do |env_name, filename|
|
51
|
+
FigMagic.yml = nil
|
52
|
+
ENV[env_name] = filename
|
53
|
+
FigMagic.yml_directory = 'config/yaml'
|
54
|
+
FigMagic.instance_variable_set(:@yml, nil)
|
55
|
+
end
|
56
|
+
|
57
|
+
Then (/^the hash of values should look like:$/) do |table|
|
58
|
+
expect(table.transpose.hashes.first).to eql @value.to_hash
|
59
|
+
end
|
60
|
+
|
61
|
+
Given (/^I have a yml file that is named after the hostname$/) do
|
62
|
+
FigMagic.yml = nil
|
63
|
+
FigMagic.yml_directory = 'config/yaml'
|
64
|
+
@hostname = Socket.gethostname
|
65
|
+
File.open("config/yaml/#{@hostname}.yml", 'w') {|file| file.write("from_the_hostname_file: read from the hostname file\n")}
|
66
|
+
end
|
67
|
+
|
68
|
+
Then (/^I should remove the file$/) do
|
69
|
+
File.delete("config/yaml/#{@hostname}.yml")
|
70
|
+
end
|
71
|
+
|
72
|
+
When (/^I ask for a value that does not exist named "(.+)" that has a default value "(.+)"$/) do |key, value|
|
73
|
+
@value = FigMagic.send key, value
|
74
|
+
end
|
75
|
+
|
76
|
+
When (/^I ask for a value that does not exist named "(.+)" that has a default block returning "(.+)"$/) do |key, value|
|
77
|
+
@value = FigMagic.send(key) {
|
78
|
+
value
|
79
|
+
}
|
80
|
+
end
|
81
|
+
|
82
|
+
When (/^I ask for a value that does not exist named "(.+)" that has a default lambda returning "(.+)"$/) do |key, value|
|
83
|
+
mylambda = lambda {|property| @lambda_property = property; return value}
|
84
|
+
@value = FigMagic.send key, &mylambda
|
85
|
+
end
|
86
|
+
|
87
|
+
When (/^I ask for a value that does not exist named "(.+)" that has a default proc returning "(.+)"$/) do |key, value|
|
88
|
+
myproc = Proc.new {value}
|
89
|
+
@value = FigMagic.send(key, &myproc)
|
90
|
+
end
|
91
|
+
|
92
|
+
Then (/^the lambda should be passed the property "(.+)"$/) do |expected_property|
|
93
|
+
expect(@lambda_property).to eq(expected_property)
|
94
|
+
end
|
95
|
+
|
@@ -0,0 +1,56 @@
|
|
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
|
+
title: ~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
|
+
|
50
|
+
dynamic:
|
51
|
+
blah: ~blah
|
52
|
+
|
53
|
+
other:
|
54
|
+
name: Cheezy
|
55
|
+
address: 123 Main Street
|
56
|
+
email: cheezy@example.com
|
data/fig_magic.gemspec
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/fig_magic/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.name = "fig_magic"
|
6
|
+
gem.version = FigMagic::VERSION
|
7
|
+
gem.platform = Gem::Platform::RUBY
|
8
|
+
gem.authors = ["Justin Commu"]
|
9
|
+
gem.email = ["jcommu@gmail.com"]
|
10
|
+
gem.license = 'MIT'
|
11
|
+
gem.homepage = "http://github.com/dingokiller/fig_magic"
|
12
|
+
gem.summary = %q{Combines FigNewton & DataMagic into a single gem & namespace}
|
13
|
+
gem.description = %q{Provides datasets to application stored in YAML files}
|
14
|
+
|
15
|
+
gem.files = `git ls-files`.split("\n")
|
16
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
|
+
gem.require_paths = ["lib"]
|
19
|
+
|
20
|
+
gem.add_dependency 'faker', '>= 1.1.2'
|
21
|
+
gem.add_dependency 'yml_reader', '>= 0.5'
|
22
|
+
|
23
|
+
gem.add_development_dependency 'rspec', '>= 2.12.0'
|
24
|
+
gem.add_development_dependency 'cucumber', '>= 1.2.0'
|
25
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
module FigMagic
|
2
|
+
module DateTranslation
|
3
|
+
#
|
4
|
+
# return today's date
|
5
|
+
#
|
6
|
+
# @param String the format to use for the date. Default is %D
|
7
|
+
#
|
8
|
+
# See http://ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/Date.html#method-i-strftime
|
9
|
+
# for details of the formats
|
10
|
+
#
|
11
|
+
def today(format = '%D')
|
12
|
+
Date.today.strftime(format)
|
13
|
+
end
|
14
|
+
alias_method :dm_today, :today
|
15
|
+
|
16
|
+
#
|
17
|
+
# return tomorrow's date
|
18
|
+
#
|
19
|
+
# @param String the format to use for the date. Default is %D
|
20
|
+
#
|
21
|
+
# See http://ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/Date.html#method-i-strftime
|
22
|
+
# for details of the formats
|
23
|
+
#
|
24
|
+
def tomorrow(format = '%D')
|
25
|
+
tomorrow = Date.today + 1
|
26
|
+
tomorrow.strftime(format)
|
27
|
+
end
|
28
|
+
alias_method :dm_tomorrow, :tomorrow
|
29
|
+
|
30
|
+
#
|
31
|
+
# return yesterday's date
|
32
|
+
#
|
33
|
+
# @param String the format to use for the date. Default is %D
|
34
|
+
#
|
35
|
+
# See http://ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/Date.html#method-i-strftime
|
36
|
+
# for details of the formats
|
37
|
+
#
|
38
|
+
def yesterday(format = '%D')
|
39
|
+
yesterday = Date.today - 1
|
40
|
+
yesterday.strftime(format)
|
41
|
+
end
|
42
|
+
alias_method :dm_yesterday, :yesterday
|
43
|
+
|
44
|
+
#
|
45
|
+
# return a month
|
46
|
+
#
|
47
|
+
def month
|
48
|
+
randomize(Date::MONTHNAMES[1..-1])
|
49
|
+
end
|
50
|
+
alias_method :dm_month, :month
|
51
|
+
|
52
|
+
#
|
53
|
+
# return a month abbreviation
|
54
|
+
#
|
55
|
+
def month_abbr
|
56
|
+
randomize(Date::ABBR_MONTHNAMES[1..-1])
|
57
|
+
end
|
58
|
+
alias_method :dm_month_abbr, :month_abbr
|
59
|
+
|
60
|
+
#
|
61
|
+
# return a day of the week
|
62
|
+
#
|
63
|
+
def day_of_week
|
64
|
+
randomize(Date::DAYNAMES)
|
65
|
+
end
|
66
|
+
alias_method :dm_day_of_week, :day_of_week
|
67
|
+
|
68
|
+
def day_of_week_abbr
|
69
|
+
randomize(Date::ABBR_DAYNAMES)
|
70
|
+
end
|
71
|
+
alias_method :dm_day_of_week_abbr, :day_of_week_abbr
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'socket'
|
3
|
+
|
4
|
+
module FigNewton
|
5
|
+
module Missing
|
6
|
+
def method_missing(*args, &block)
|
7
|
+
read_file unless @yml
|
8
|
+
m = args.first
|
9
|
+
value = @yml[m.to_s]
|
10
|
+
value = args[1] if value.nil?
|
11
|
+
value = block.call(m.to_s) if value.nil? and block
|
12
|
+
super if value.nil?
|
13
|
+
value = FigNewton::Node.new(value) unless type_known? value
|
14
|
+
value
|
15
|
+
end
|
16
|
+
|
17
|
+
def read_file
|
18
|
+
@yml = nil
|
19
|
+
@yml = YAML.load_file "#{yml_directory}/#{ENV['FIG_NEWTON_FILE']}" if ENV['FIG_NEWTON_FILE']
|
20
|
+
unless @yml
|
21
|
+
hostname = Socket.gethostname
|
22
|
+
hostfile = "#{yml_directory}/#{hostname}.yml"
|
23
|
+
@yml = YAML.load_file hostfile if File.exist? hostfile
|
24
|
+
end
|
25
|
+
FigNewton.load('default.yml') if @yml.nil?
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def type_known?(value)
|
31
|
+
known_types = [String, Integer, TrueClass, FalseClass]
|
32
|
+
known_types.any? { |type| value.kind_of? type }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,316 @@
|
|
1
|
+
module FigMagic
|
2
|
+
module StandardTranslation
|
3
|
+
|
4
|
+
attr_reader :parent
|
5
|
+
|
6
|
+
#
|
7
|
+
# return a random name (first and last)
|
8
|
+
#
|
9
|
+
def full_name
|
10
|
+
Faker::Name.name
|
11
|
+
end
|
12
|
+
alias_method :dm_full_name, :full_name
|
13
|
+
|
14
|
+
#
|
15
|
+
# return a random first name
|
16
|
+
#
|
17
|
+
def first_name
|
18
|
+
Faker::Name.first_name
|
19
|
+
end
|
20
|
+
alias_method :dm_first_name, :first_name
|
21
|
+
|
22
|
+
#
|
23
|
+
# return a random last name
|
24
|
+
#
|
25
|
+
def last_name
|
26
|
+
Faker::Name.last_name
|
27
|
+
end
|
28
|
+
alias_method :dm_last_name, :last_name
|
29
|
+
|
30
|
+
#
|
31
|
+
# return a random name prefix
|
32
|
+
#
|
33
|
+
def name_prefix
|
34
|
+
Faker::Name.prefix
|
35
|
+
end
|
36
|
+
alias_method :dm_name_prefix, :name_prefix
|
37
|
+
|
38
|
+
#
|
39
|
+
# return a random name suffix
|
40
|
+
#
|
41
|
+
def name_suffix
|
42
|
+
Faker::Name.suffix
|
43
|
+
end
|
44
|
+
alias_method :dm_name_suffix, :name_suffix
|
45
|
+
|
46
|
+
#
|
47
|
+
# return a random title
|
48
|
+
#
|
49
|
+
def title
|
50
|
+
Faker::Name.title
|
51
|
+
end
|
52
|
+
alias_method :dm_title, :title
|
53
|
+
|
54
|
+
#
|
55
|
+
# return a random street address
|
56
|
+
#
|
57
|
+
def street_address(include_secondary=false)
|
58
|
+
Faker::Address.street_address(include_secondary)
|
59
|
+
end
|
60
|
+
alias_method :dm_street_address, :street_address
|
61
|
+
|
62
|
+
#
|
63
|
+
# return a random secondary address
|
64
|
+
#
|
65
|
+
def secondary_address
|
66
|
+
Faker::Address.secondary_address
|
67
|
+
end
|
68
|
+
alias_method :dm_secondary_address, :secondary_address
|
69
|
+
|
70
|
+
#
|
71
|
+
# return a random city
|
72
|
+
#
|
73
|
+
def city
|
74
|
+
Faker::Address.city
|
75
|
+
end
|
76
|
+
alias_method :dm_city, :city
|
77
|
+
|
78
|
+
#
|
79
|
+
# return a random state
|
80
|
+
#
|
81
|
+
def state
|
82
|
+
Faker::Address.state
|
83
|
+
end
|
84
|
+
alias_method :dm_state, :state
|
85
|
+
|
86
|
+
#
|
87
|
+
# return a random state abbreviation
|
88
|
+
#
|
89
|
+
def state_abbr
|
90
|
+
Faker::Address.state_abbr
|
91
|
+
end
|
92
|
+
alias_method :dm_state_abbr, :state_abbr
|
93
|
+
|
94
|
+
#
|
95
|
+
# return a random 5 or 9 digit zip code
|
96
|
+
#
|
97
|
+
def zip_code
|
98
|
+
Faker::Address.zip
|
99
|
+
end
|
100
|
+
alias_method :dm_zip_code, :zip_code
|
101
|
+
|
102
|
+
#
|
103
|
+
# return a random country
|
104
|
+
#
|
105
|
+
def country
|
106
|
+
Faker::Address.country
|
107
|
+
end
|
108
|
+
alias_method :dm_country, :country
|
109
|
+
|
110
|
+
|
111
|
+
#
|
112
|
+
# return a random company name
|
113
|
+
#
|
114
|
+
def company_name
|
115
|
+
Faker::Company.name
|
116
|
+
end
|
117
|
+
alias_method :dm_company_name, :company_name
|
118
|
+
|
119
|
+
#
|
120
|
+
# return a random catch phrase
|
121
|
+
#
|
122
|
+
def catch_phrase
|
123
|
+
Faker::Company.catch_phrase
|
124
|
+
end
|
125
|
+
alias_method :dm_catch_phrase, :catch_phrase
|
126
|
+
|
127
|
+
#
|
128
|
+
# return a credit card number
|
129
|
+
#
|
130
|
+
def credit_card_number
|
131
|
+
Faker::Business.credit_card_number
|
132
|
+
end
|
133
|
+
alias_method :dm_credit_card_number, :credit_card_number
|
134
|
+
|
135
|
+
#
|
136
|
+
# return a credit card type
|
137
|
+
#
|
138
|
+
def credit_card_type
|
139
|
+
Faker::Business.credit_card_type
|
140
|
+
end
|
141
|
+
alias_method :dm_credit_card_type, :credit_card_type
|
142
|
+
|
143
|
+
#
|
144
|
+
# return random words - default is 3 words
|
145
|
+
#
|
146
|
+
def words(number = 3)
|
147
|
+
Faker::Lorem.words(number).join(' ')
|
148
|
+
end
|
149
|
+
alias_method :dm_words, :words
|
150
|
+
|
151
|
+
#
|
152
|
+
# return a random sentence - default minimum word count is 4
|
153
|
+
#
|
154
|
+
def sentence(min_word_count = 4)
|
155
|
+
Faker::Lorem.sentence(min_word_count)
|
156
|
+
end
|
157
|
+
alias_method :dm_sentence, :sentence
|
158
|
+
|
159
|
+
#
|
160
|
+
# return random sentences - default is 3 sentences
|
161
|
+
#
|
162
|
+
def sentences(sentence_count = 3)
|
163
|
+
Faker::Lorem.sentences(sentence_count).join(' ')
|
164
|
+
end
|
165
|
+
alias_method :dm_sentences, :sentences
|
166
|
+
|
167
|
+
#
|
168
|
+
# return random paragraphs - default is 3 paragraphs
|
169
|
+
#
|
170
|
+
def paragraphs(paragraph_count = 3)
|
171
|
+
Faker::Lorem.paragraphs(paragraph_count).join('\n\n')
|
172
|
+
end
|
173
|
+
alias_method :dm_paragraphs, :paragraphs
|
174
|
+
|
175
|
+
#
|
176
|
+
# return random characters - default is 255 characters
|
177
|
+
#
|
178
|
+
def characters(character_count = 255)
|
179
|
+
Faker::Lorem.characters(character_count)
|
180
|
+
end
|
181
|
+
alias_method :dm_characters, :characters
|
182
|
+
|
183
|
+
#
|
184
|
+
# return a random email address
|
185
|
+
#
|
186
|
+
def email_address(name=nil)
|
187
|
+
Faker::Internet.email(name)
|
188
|
+
end
|
189
|
+
alias_method :dm_email_address, :email_address
|
190
|
+
|
191
|
+
#
|
192
|
+
# return a random domain name
|
193
|
+
#
|
194
|
+
def domain_name
|
195
|
+
Faker::Internet.domain_name
|
196
|
+
end
|
197
|
+
alias_method :dm_domain_name, :domain_name
|
198
|
+
|
199
|
+
#
|
200
|
+
# return a random url
|
201
|
+
#
|
202
|
+
def url
|
203
|
+
Faker::Internet.url
|
204
|
+
end
|
205
|
+
alias_method :dm_url, :url
|
206
|
+
|
207
|
+
#
|
208
|
+
# return a random user name
|
209
|
+
#
|
210
|
+
def user_name
|
211
|
+
Faker::Internet.user_name
|
212
|
+
end
|
213
|
+
alias_method :dm_user_name, :user_name
|
214
|
+
|
215
|
+
#
|
216
|
+
# return a random phone number
|
217
|
+
#
|
218
|
+
def phone_number
|
219
|
+
value = Faker::PhoneNumber.phone_number
|
220
|
+
remove_extension(value)
|
221
|
+
end
|
222
|
+
alias_method :dm_phone_number, :phone_number
|
223
|
+
|
224
|
+
#
|
225
|
+
# return a random cell number
|
226
|
+
#
|
227
|
+
def cell_phone
|
228
|
+
value = Faker::PhoneNumber.cell_phone
|
229
|
+
remove_extension(value)
|
230
|
+
end
|
231
|
+
alias_method :dm_cell_phone, :cell_phone
|
232
|
+
|
233
|
+
#
|
234
|
+
# return a random value from an array or range
|
235
|
+
#
|
236
|
+
def randomize(value)
|
237
|
+
case value
|
238
|
+
when Array then value[rand(value.size)]
|
239
|
+
when Range then rand((value.last+1) - value.first) + value.first
|
240
|
+
else value
|
241
|
+
end
|
242
|
+
end
|
243
|
+
alias_method :dm_randomize, :randomize
|
244
|
+
|
245
|
+
#
|
246
|
+
# return an element from the array. The first request will return
|
247
|
+
# the first element, the second request will return the second,
|
248
|
+
# and so forth.
|
249
|
+
#
|
250
|
+
def sequential(value)
|
251
|
+
index = index_variable_for(value)
|
252
|
+
index = (index ? index + 1 : 0)
|
253
|
+
index = 0 if index == value.length
|
254
|
+
set_index_variable(value, index)
|
255
|
+
value[index]
|
256
|
+
end
|
257
|
+
|
258
|
+
#
|
259
|
+
# return a value based on a mast
|
260
|
+
# The # character will be replaced with a number
|
261
|
+
# The A character will be replaced with an upper case letter
|
262
|
+
# The a character will be replaced with a lower case letter
|
263
|
+
#
|
264
|
+
def mask(value)
|
265
|
+
result = ''
|
266
|
+
value.each_char do |ch|
|
267
|
+
case ch
|
268
|
+
when '#' then result += randomize(0..9).to_s
|
269
|
+
when 'A' then result += ('A'..'Z').to_a[rand(26)]
|
270
|
+
when 'a' then result += ('a'..'z').to_a[rand(26)]
|
271
|
+
else result += ch
|
272
|
+
end
|
273
|
+
end
|
274
|
+
result
|
275
|
+
end
|
276
|
+
alias_method :dm_mask, :mask
|
277
|
+
|
278
|
+
|
279
|
+
|
280
|
+
private
|
281
|
+
|
282
|
+
def set_index_variable(ary, value)
|
283
|
+
index_hash[index_name(ary)] = value
|
284
|
+
end
|
285
|
+
|
286
|
+
def index_variable_for(ary)
|
287
|
+
value = index_hash[index_name(ary)]
|
288
|
+
index_hash[index_name(ary)] = -1 unless value
|
289
|
+
index_hash[index_name(ary)]
|
290
|
+
end
|
291
|
+
|
292
|
+
def index_name(ary)
|
293
|
+
"#{ary[0]}#{ary[1]}_index".gsub(' ', '_').downcase
|
294
|
+
end
|
295
|
+
|
296
|
+
def index_hash
|
297
|
+
dh = data_hash[parent]
|
298
|
+
data_hash[parent] = {} unless dh
|
299
|
+
data_hash[parent]
|
300
|
+
end
|
301
|
+
|
302
|
+
def data_hash
|
303
|
+
$fig_magic_data_hash ||= {}
|
304
|
+
end
|
305
|
+
|
306
|
+
def process(value)
|
307
|
+
eval value
|
308
|
+
end
|
309
|
+
|
310
|
+
def remove_extension(phone)
|
311
|
+
index = phone.index('x')
|
312
|
+
phone = phone[0, (index-1)] if index
|
313
|
+
phone
|
314
|
+
end
|
315
|
+
end
|
316
|
+
end
|