lib/things/reference/record.rb in things-client-0.1.0 vs lib/things/reference/record.rb in things-client-0.2.0
- old
+ new
@@ -19,20 +19,20 @@
def self.properties(*args)
@_properties = [] if !@_properties
if args
@_properties += args
@_properties.each do |property|
- attr_writer(property) if !instance_methods.include?(property.to_s)
+ attr_writer(property) if !instance_methods.include?(property.to_s+'=')
if !instance_methods.include?(property.to_s )
class_eval <<-"eval"
def #{property}
- if !@#{property}
- fetched = @reference.#{property}.get rescue nil
- @#{property} = fetched if fetched and fetched != :missing_value
- else
- @#{property}
+ return @#{property} if @#{property}
+ fetched = @reference.#{property}.get rescue nil
+ if fetched.is_a?(Appscript::Reference)
+ fetched = fetched.identify.build(fetched)
end
+ @#{property} = fetched if fetched and fetched != :missing_value
end
eval
end
end
end
@@ -56,15 +56,27 @@
# If a todo is new, it will be created. If not, it will be updated
def save
if new?
properties = {}
(self.class.properties - [:id_]).each do |property|
- properties[property] = self.send(property) if self.send(property)
+ if value = self.send(property)
+ properties[property] = value.respond_to?(:reference) ? value.reference : value
+ end
end
- self.reference = Things::App.instance.make(:new => self.class.identifier, :with_properties => properties)
+ # only set name in make, then set the rest of the properties
+ name = properties.delete(:name)
+ self.reference = Things::App.instance.make(:new => self.class.identifier, :with_properties => { :name => name })
+ properties.each_pair { |name, property| self.reference.send(name).set(property) }
else
(self.class.properties - [:id_]).each do |property|
- self.reference.send(property).set(self.send(property)) if self.send(property)
+ if value = self.send(property)
+ self.reference.send(property).set(value.respond_to?(:reference) ? value.reference : value)
+ else
+ begin
+ self.reference.send(property).delete
+ rescue
+ end
+ end
end
end
self
end
\ No newline at end of file