Sha256: ebbb3fc56988f19c528f7b61e5d421e50890985e834426ca9dde7083a3f61865
Contents?: true
Size: 1.19 KB
Versions: 3
Compression:
Stored size: 1.19 KB
Contents
require 'yaml' require 'activesupport' class ActiveYAML @instances = [] def initialize(h) @h = h end def self.inherited(p) data = YAML.load_file("#{RAILS_ROOT}/db/yaml/#{p.name.underscore}.yml") p.extend(Enumerable) p.class_eval do @instances = [] fields = [] for id, entry in data entry.merge!({'id' => id}) @instances << self.new(entry) for key, value in entry unless fields.include? key fields << key eval "def #{key}; @h[\"#{key}\"]; end" class_eval "def self.find_by_#{key}(x); @instances.find { |i| i.#{key} == x }; end" class_eval "def self.find_all_by_#{key}(x); @instances.find_all { |i| i.#{key} == x }; end" end end end class_eval "def self.find(id); find_by_id(id) or raise ActiveRecord::RecordNotFound; end" class_eval "def self.first; @instances.first; end" class_eval "def self.last; @instances.last; end" class_eval "def self.each; @instances.each { |b| yield b }; end" s = "#{p.to_s}(#{fields.join(', ')})" class_eval "def self.to_s; \"#{s}\"; end" def self.find_all @instances end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
ascheink-active_yaml-0.0.4 | lib/active_yaml.rb |
ascheink-active_yaml-0.0.5 | lib/active_yaml.rb |
ascheink-active_yaml-0.0.6 | lib/active_yaml.rb |