Module: Filebase::Model::Mixins::ClassMethods
- Defined in:
- lib/filebase/model.rb
Instance Attribute Summary collapse
-
#db ⇒ Object
Returns the value of attribute db.
Instance Method Summary collapse
- #[](key) ⇒ Object
- #all ⇒ Object
- #create(assigns) ⇒ Object
- #delete(object) ⇒ Object
- #find(key) ⇒ Object
- #has_many(name, options = {}) ⇒ Object
- #has_one(name, options = {}) ⇒ Object
- #save(object) ⇒ Object
Instance Attribute Details
#db ⇒ Object
Returns the value of attribute db.
25 26 27 |
# File 'lib/filebase/model.rb', line 25 def db @db end |
Instance Method Details
#[](key) ⇒ Object
29 |
# File 'lib/filebase/model.rb', line 29 def []( key ) ; find( key ) ; end |
#all ⇒ Object
27 |
# File 'lib/filebase/model.rb', line 27 def all ; db.all.map { |attrs| new( attrs ) } ; end |
#create(assigns) ⇒ Object
26 |
# File 'lib/filebase/model.rb', line 26 def create( assigns ) ; save( new( assigns ) ) ; end |
#delete(object) ⇒ Object
34 35 36 37 |
# File 'lib/filebase/model.rb', line 34 def delete( object ) raise( Filebase::Error.new, 'attempted to delete an object with nil key' ) if object.key.nil? or object.key.empty? db.delete( object.key ) end |
#find(key) ⇒ Object
28 |
# File 'lib/filebase/model.rb', line 28 def find( key ) ; attrs = db.find( key ); new( attrs ) if attrs ; end |
#has_many(name, options = {}) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/filebase/model.rb', line 51 def has_many( name, = {} ) module_eval do define_method( name ) do @has_many ||= {} [:class] ||= Object.module_eval( name.to_s.camel_case ) @has_many[name] ||= ( get( name ) || [] ).uniq.map { |key| [:class].find( key ) } end # when we save, make sure to pick up any changes to the array (class<<self;self;end).module_eval do old_save = instance_method(:save) define_method :save do |object| object.set( name, object.send( name ).map{ |x| x.key }.uniq ) old_save.bind(self).call(object) end end end end |
#has_one(name, options = {}) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/filebase/model.rb', line 38 def has_one( name, = {} ) module_eval do define_method name do @has_one ||= {} [:class] ||= Object.module_eval( name.to_s.gsub(/(_)(\w)/) { $2.upcase }.gsub(/^([a-z])/) { $1.upcase } ) @has_one[name] ||= [:class].find( get( name ) ) end define_method( name.to_s + '=' ) do | val | @has_one ||= {}; @has_one[name] = nil set( name, String === val ? val : val.key ) end end end |