Module: DataMagic
- Extended by:
- DateTranslation, StandardTranslation, YmlReader
- Defined in:
- lib/data_magic.rb,
lib/data_magic/version.rb,
lib/data_magic/translation.rb,
lib/data_magic/date_translation.rb,
lib/data_magic/standard_translation.rb
Defined Under Namespace
Modules: DateTranslation, StandardTranslation
Classes: Translation
Constant Summary
collapse
- VERSION =
'1.2'
Class Attribute Summary collapse
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
catch_phrase, cell_phone, characters, city, color_hex, color_name, company_name, country, credit_card_number, credit_card_type, decimal, domain_name, email_address, first_name, full_name, job_title, last_name, mask, merge, name_prefix, name_suffix, number, paragraphs, phone_number, randomize, secondary_address, sentence, sentences, sequential, state, state_abbr, street_address, url, user_name, words, zip_code
date_between, day_of_week, day_of_week_abbr, month, month_abbr, today, tomorrow, yesterday
Class Attribute Details
.yml ⇒ Object
Returns the value of attribute yml.
100
101
102
|
# File 'lib/data_magic.rb', line 100
def yml
@yml
end
|
Instance Attribute Details
#parent ⇒ Object
Returns the value of attribute parent.
19
20
21
|
# File 'lib/data_magic.rb', line 19
def parent
@parent
end
|
Class Method Details
.add_translator(translator) ⇒ Object
106
107
108
|
# File 'lib/data_magic.rb', line 106
def add_translator(translator)
translators << translator
end
|
.default_directory ⇒ Object
102
103
104
|
# File 'lib/data_magic.rb', line 102
def default_directory
'config/data'
end
|
.fixture_files_on(scenario) ⇒ Object
93
94
95
96
97
|
# File 'lib/data_magic.rb', line 93
def self.fixture_files_on(scenario)
tags = scenario.send(scenario.respond_to?(:tags) ? :tags : :source_tags)
tags.map(&:name).select { |t| t =~ /@datamagic_/ }.map { |t| t.gsub('@datamagic_', '').to_sym }
end
|
.included(cls) ⇒ Object
27
28
29
30
31
32
|
# File 'lib/data_magic.rb', line 27
def self.included(cls)
@parent = cls
translators.each do |translator|
Translation.send :include, translator
end
end
|
.load_fixture_and_merge_with(fixture_name, base_hash, fixture_folder = DEFAULT_FIXTURE_FOLDER) ⇒ Object
Load a fixture and merge it with an existing hash
88
89
90
91
|
# File 'lib/data_magic.rb', line 88
def self.load_fixture_and_merge_with(fixture_name, base_hash, fixture_folder = DEFAULT_FIXTURE_FOLDER)
new_hash = load_fixture(fixture_name, fixture_folder)
base_hash.deep_merge new_hash
end
|
.load_for_scenario(scenario, fixture_folder = DataMagic.yml_directory) ⇒ Object
Given a scenario, load any fixture it needs. Fixture tags should be in the form of @datamagic_FIXTUREFILE
50
51
52
53
54
55
56
57
|
# File 'lib/data_magic.rb', line 50
def self.load_for_scenario(scenario, fixture_folder = DataMagic.yml_directory)
orig_yml_directory = DataMagic.yml_directory
DataMagic.yml_directory = fixture_folder
fixture_files = fixture_files_on(scenario)
DataMagic.load "#{fixture_files.last}.yml" if fixture_files.count.positive?
DataMagic.yml_directory = orig_yml_directory
end
|
.locale=(value) ⇒ Object
23
24
25
|
# File 'lib/data_magic.rb', line 23
def self.locale=(value)
Faker::Config.locale = value
end
|
.translators ⇒ Object
110
111
112
|
# File 'lib/data_magic.rb', line 110
def translators
@translators ||= []
end
|
Instance Method Details
#data_for(key, additional = {}) ⇒ Object
34
35
36
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/data_magic.rb', line 34
def data_for(key, additional = {})
if key.is_a?(String) && key.match(%r{/})
filename, record = key.split('/')
DataMagic.load("#{filename}.yml")
else
record = key.to_s
DataMagic.load(the_file) unless DataMagic.yml
end
data = DataMagic.yml[record]
raise ArgumentError, "Undefined key #{key}" unless data
prep_data(data.merge(additional.key?(record) ? additional[record] : additional).deep_copy)
end
|
#prep_data(data) ⇒ Object
65
66
67
68
69
70
71
72
73
74
75
|
# File 'lib/data_magic.rb', line 65
def prep_data(data)
case data
when Hash
data.each { |key, value| data[key] = prep_data(value) }
when Array
data.each_with_index { |value, i| data[i] = prep_data(value) }
when String
return translate(data[1..-1]) if data[0, 1] == '~'
end
data
end
|
#the_file ⇒ Object
61
62
63
|
# File 'lib/data_magic.rb', line 61
def the_file
ENV['DATA_MAGIC_FILE'] || 'default.yml'
end
|
#translate(value) ⇒ Object
77
78
79
80
81
|
# File 'lib/data_magic.rb', line 77
def translate(value)
translation.send :process, value
rescue StandardError => e
raise "Failed to translate: #{value}\n Reason: #{e.message}\n"
end
|
#translation ⇒ Object
83
84
85
|
# File 'lib/data_magic.rb', line 83
def translation
@translation ||= Translation.new parent
end
|