From bf99a219b05d137a3df8c1acd6065a724398b488 Mon Sep 17 00:00:00 2001 From: Dan Kubb Date: Sat, 5 Apr 2008 00:19:32 -0700 Subject: [PATCH] Updated code to use Property#instance_variable_name when possible * Removed unecessary String#ensure_starts_with and String#ensure_ends_with --- lib/data_mapper/adapters/data_objects_adapter.rb | 6 +++--- lib/data_mapper/property.rb | 4 ++-- lib/data_mapper/resource.rb | 9 +++++---- spec/resource_spec.rb | 2 +- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/lib/data_mapper/adapters/data_objects_adapter.rb b/lib/data_mapper/adapters/data_objects_adapter.rb index 8e198350..830047e9 100644 --- a/lib/data_mapper/adapters/data_objects_adapter.rb +++ b/lib/data_mapper/adapters/data_objects_adapter.rb @@ -69,7 +69,7 @@ def create_with_returning? # Methods dealing with a single instance object def create(repository, instance) properties = instance.dirty_attributes - values = properties.map { |property| instance.instance_variable_get(property.name.to_s.ensure_starts_with('@')) } + values = properties.map { |property| instance.instance_variable_get(property.instance_variable_name) } sql = send(create_with_returning? ? :create_statement_with_returning : :create_statement, instance.class, properties) @@ -117,7 +117,7 @@ def read(repository, resource, key) def update(repository, instance) properties = instance.dirty_attributes - values = properties.map { |property| instance.instance_variable_get(property.name.to_s.ensure_starts_with('@')) } + values = properties.map { |property| instance.instance_variable_get(property.instance_variable_name) } sql = update_statement(instance.class, properties) parameters = (values + instance.key) @@ -138,7 +138,7 @@ def delete(repository, instance) connection = create_connection command = connection.create_command(delete_statement(instance.class)) - key = instance.class.key(name).map { |property| instance.instance_variable_get(property.name.to_s.ensure_starts_with('@')) } + key = instance.class.key(name).map { |property| instance.instance_variable_get(property.instance_variable_name) } affected_rows = command.execute_non_query(*key).to_i close_connection(connection) diff --git a/lib/data_mapper/property.rb b/lib/data_mapper/property.rb index 9f32926f..288980ef 100644 --- a/lib/data_mapper/property.rb +++ b/lib/data_mapper/property.rb @@ -225,7 +225,7 @@ def initialize(target, name, type, options) @instance_variable_name = "@#{@name}" - @getter = @type.is_a?(TrueClass) ? @name.to_s.ensure_ends_with('?').to_sym : @name + @getter = @type.is_a?(TrueClass) ? "#{@name}?".to_sym : @name # if it has a lazy key it is lazy. :lazy is now an array of contexts not bool @@ -280,7 +280,7 @@ def #{name} if type == TrueClass @target.class_eval <<-EOS, __FILE__, __LINE__ #{reader_visibility} - alias #{name.to_s.ensure_ends_with('?')} #{name} + alias #{name}? #{name} EOS end rescue SyntaxError diff --git a/lib/data_mapper/resource.rb b/lib/data_mapper/resource.rb index a2178f1d..93a4c914 100644 --- a/lib/data_mapper/resource.rb +++ b/lib/data_mapper/resource.rb @@ -37,10 +37,10 @@ def self.dependencies attr_accessor :loaded_set def [](name) - ivar_name = "@#{name}" property = self.class.properties(repository.name)[name] + ivar_name = property.instance_variable_name - unless new_record? || attribute_loaded?(name) + unless new_record? || instance_variable_defined?(ivar_name) lazy_load(name) end @@ -49,8 +49,8 @@ def [](name) end def []=(name, value) - ivar_name = "@#{name}" property = self.class.properties(repository.name)[name] + ivar_name = property.instance_variable_name if property && property.lock? instance_variable_set("@shadow_#{name}", instance_variable_get(ivar_name)) @@ -98,7 +98,8 @@ def destroy end def attribute_loaded?(name) - instance_variable_defined?("@#{name}") + property = self.class.properties(repository.name)[name] + instance_variable_defined?(property.instance_variable_name) end def dirty_attributes diff --git a/spec/resource_spec.rb b/spec/resource_spec.rb index 692a7eca..8142db32 100644 --- a/spec/resource_spec.rb +++ b/spec/resource_spec.rb @@ -100,7 +100,7 @@ class Planet # This means #attribute_loaded?'s implementation could be very # similar (if not identical) to: # def attribute_loaded?(name) - # instance_variables.include?(name.to_s.ensure_starts_with('@')) + # instance_variable_defined?("@#{name}") # end mars.attribute_loaded?(:name).should be_true mars.attribute_dirty?(:name).should be_true