module DataMagic
Constants
- VERSION
Attributes
yml[RW]
parent[R]
Public Class Methods
included(cls)
click to toggle source
# File lib/data_magic.rb, line 27 def self.included(cls) @parent = cls translators.each do |translator| Translation.send :include, translator end end
load_for_scenario(scenario, fixture_folder = DataMagic.yml_directory)
click to toggle source
Given a scenario, load any fixture it needs. Fixture tags should be in the form of @datamagic_FIXTUREFILE
# 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)
click to toggle source
# File lib/data_magic.rb, line 23 def self.locale=(value) Faker::Config.locale = value end
Private Class Methods
add_translator(translator)
click to toggle source
# File lib/data_magic.rb, line 106 def add_translator(translator) translators << translator end
default_directory()
click to toggle source
# File lib/data_magic.rb, line 102 def default_directory 'config/data' end
fixture_files_on(scenario)
click to toggle source
# File lib/data_magic.rb, line 93 def self.fixture_files_on(scenario) # tags for cuke 2, source_tags for cuke 1 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
load_fixture_and_merge_with(fixture_name, base_hash, fixture_folder = DEFAULT_FIXTURE_FOLDER)
click to toggle source
Load a fixture and merge it with an existing hash
# 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
translators()
click to toggle source
# File lib/data_magic.rb, line 110 def translators @translators ||= [] end
Public Instance Methods
data_for(key, additional = {})
click to toggle source
# 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
Private Instance Methods
prep_data(data)
click to toggle source
# 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()
click to toggle source
# File lib/data_magic.rb, line 61 def the_file ENV['DATA_MAGIC_FILE'] || 'default.yml' end
translate(value)
click to toggle source
# 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()
click to toggle source
# File lib/data_magic.rb, line 83 def translation @translation ||= Translation.new parent end