Sha256: d0d8645fd9b49f171af8ae2ab16628f6ab5f0d75b30ea6fad82619025b20a688
Contents?: true
Size: 1.46 KB
Versions: 1
Compression:
Stored size: 1.46 KB
Contents
module Husky class Entity class << self def wrap(items) items.map { |item| build(item) } end def build(data = nil) instance = allocate instance.construct(data) instance end def attr_required(*args) @@required = [] args.each do |arg| self.class_eval("def #{arg};@#{arg};end") unless respond_to? arg @@required << arg end end end attr_reader :data def construct(data) if data.nil? # do nothing elsif data.is_a? Hash data.each_pair do |key, value| instance_variable_set("@#{key}", value) (class << self; self; end).class_eval do attr_reader key.to_sym end end else @data = data end end def set_basic_attributes_from_hash(hash) hash.each_pair do |key, value| unless value.respond_to? :each instance_variable_set("@#{key}", value) end end hash.each_pair do |key, value| unless value.respond_to? :each self.class.send(:define_method, key) do instance_variable_get("@#{key}") end end end end def valid? @@required.all? { |attr| !self.send(attr).nil? } end def method_missing(method, *args, &block) raise "#{method} called on @data, but @data is nil." if data.nil? data.send(method, *args, &block) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
husky-0.5.14 | lib/husky/entity.rb |