Sha256: 24e9159ad6940f5629cbe5ed2d3e8eb6ef084d63cbb797a621593cdbdd2991f6
Contents?: true
Size: 1.4 KB
Versions: 2
Compression:
Stored size: 1.4 KB
Contents
require_relative 'hashish' require 'yaml' require 'erb' module FixtureOverlord FormattingError = Class.new(StandardError) def self.read_fixture(yaml_file, key) ReadFixture.new(yaml_file).read(key) end class ReadFixture def initialize(file) @file = file end def read(key = nil) hash = read_file hash = hash[key.to_s] unless key.nil? Hashish[hash].symbolize_keys end private # CREDIT: The next three methods are almost identitical to those within Rails' # ActiveRecord FixtureSet::File # # https://github.com/rails/rails/blob/master/activerecord/lib/active_record/fixture_set/file.rb # def read_file begin data = ::YAML.load(render) rescue ::ArgumentError, ::Psych::SyntaxError => error raise FormattingError, "a YAML error ocurred parsing #{@file}.\nThe error was:\n #{error.class}: #{error}", error.backtrace end validate(data) end def validate(data) unless valid_data?(data) raise FormattingError, "fixture is not a Hash or YAML::Omap." end raise FormattingError unless data.all? { |name, row| ::Hash === row } data end def render erb_render( IO.read(@file) ) end def erb_render(content) ::ERB.new(content).result end def valid_data?(data) ::Hash === data || ::YAML::Omap === data end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
fixture_overlord-0.1.9 | lib/fixture_overlord/read_fixture.rb |
fixture_overlord-0.1.8 | lib/fixture_overlord/read_fixture.rb |