Module: SimplyStored::Couch::HasOne
- Included in:
- ClassMethods
- Defined in:
- lib/simply_stored/couch/has_one.rb
Defined Under Namespace
Classes: Property
Instance Method Summary collapse
- #define_has_one_getter(name) ⇒ Object
- #define_has_one_setter(name) ⇒ Object
- #has_one(name, options = {}) ⇒ Object
Instance Method Details
#define_has_one_getter(name) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/simply_stored/couch/has_one.rb', line 33 def define_has_one_getter(name) define_method(name) do |*args| = args.first && args.first.is_a?(Hash) && args.first if .assert_valid_keys(:force_reload, :with_deleted) forced_reload = [:force_reload] with_deleted = [:with_deleted] else forced_reload = false with_deleted = false end if forced_reload || instance_variable_get("@#{name}").nil? instance_variable_set("@#{name}", find_one_associated(name, self.class, :with_deleted => with_deleted)) end instance_variable_get("@#{name}") end end |
#define_has_one_setter(name) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/simply_stored/couch/has_one.rb', line 8 def define_has_one_setter(name) define_method("#{name}=") do |value| klass = self.class.get_class_from_name(name) raise ArgumentError, "expected #{klass} got #{value.class}" unless value.nil? || value.is_a?(klass) old_value = send("#{name}", :force_reload => true) if value.nil? instance_variable_set("@#{name}", nil) else instance_variable_set("@#{name}", value) value.send("#{self.class.foreign_key}=", id) value.save end if old_value if self.class._find_property(name).[:dependent] == :destroy old_value.destroy else old_value.send("#{self.class.foreign_property}=", nil) old_value.save end end old_value end end |
#has_one(name, options = {}) ⇒ Object
4 5 6 |
# File 'lib/simply_stored/couch/has_one.rb', line 4 def has_one(name, = {}) property name, .merge(:class => SimplyStored::Couch::HasOne::Property) end |