class Protip::Resource::Associations::BelongsToAssociation
Attributes
association_name[R]
id_field[R]
resource_class[R]
Public Class Methods
default_class_name(association_name)
click to toggle source
# File lib/protip/resource/associations/belongs_to_association.rb, line 56 def default_class_name(association_name) association_name.to_s.classify end
default_id_field(association_name)
click to toggle source
# File lib/protip/resource/associations/belongs_to_association.rb, line 53 def default_id_field(association_name) "#{association_name}_id".to_sym end
new(resource_class, association_name, id_field: nil, class_name: nil)
click to toggle source
# File lib/protip/resource/associations/belongs_to_association.rb, line 14 def initialize(resource_class, association_name, id_field: nil, class_name: nil) # The resource type that houses the association @resource_class = resource_class # The name for generating accessor methods @association_name = association_name # The field that holds the ID for the association @id_field = (id_field || self.class.default_id_field(association_name)).to_sym @class_name = (class_name || self.class.default_class_name(association_name)).to_s end
Public Instance Methods
associated_resource_class()
click to toggle source
# File lib/protip/resource/associations/belongs_to_association.rb, line 27 def associated_resource_class @associated_resource_class ||= @class_name.constantize end
read(resource)
click to toggle source
# File lib/protip/resource/associations/belongs_to_association.rb, line 31 def read(resource) id = resource.public_send(@id_field) if id == nil nil else associated_resource_class.find id end end
write(resource, value)
click to toggle source
# File lib/protip/resource/associations/belongs_to_association.rb, line 40 def write(resource, value) if value != nil unless value.is_a?(associated_resource_class) raise ArgumentError.new("Cannot assign #{value.class} to #{resource_class}##{@id_field}") end unless value.persisted? raise "Cannot assign non-persisted resource to association #{resource_class}##{association_name}" end end resource.public_send(:"#{@id_field}=", value.try(:id)) end