module Dynamord::ClassMethods

Public Instance Methods

configure_dependent(name, dep) click to toggle source

Connection methods from dynamoid to active_record

# File lib/dynamord.rb, line 12
def configure_dependent(name, dep)
    if dep
        case dep
            when :destroy, :delete_all
                after_destroy { |record| record.send(name.to_sym).destroy_all ? true : false }
            when :nullify
                after_destroy { |record| record.send(name.to_sym).update_attributes("#{name}".to_sym => nil) ? true : false}
            when :restrict_with_exception, :restrict_with_error
                before_destroy { |record| raise Dynamoid::Errors::RecordNotDestroyed.new(record); false }
        end
    end
end
dynamoid_has_many(name, options = {}) click to toggle source
# File lib/dynamord.rb, line 116
def dynamoid_has_many(name, options = {})
    configure_dependent(name, options[:dependent])
    self.has_many name, options
end
dynamoid_has_one(name, options = {}) click to toggle source

def dynamoid_has_one_belongs_to(name, options = {})

before_create do |record|
    object_class = options[:class] || name.to_s.titleize.delete(' ').constantize
    begin
        if object_class.where(:id => record.send("#{name}_ids").first).count < 1
            true
        end
    rescue
        true
    end
    false
end
self.belongs_to name, options

end

# File lib/dynamord.rb, line 134
def dynamoid_has_one(name, options = {})
    configure_dependent(name, options[:dependent])
    self.has_many name, options
end
from_active_record_belongs_to(name, options = {}) click to toggle source

Connection methods from active_record to dynamoid

# File lib/dynamord.rb, line 92
def from_active_record_belongs_to(name, options = {})
    object_class = options[:class] || name.to_s.titleize.delete(' ').constantize
    if options[:optional]
        validates "#{name}_id".to_sym, presence: true
    end
    self.instance_eval do
        define_method(name) do |reload = false|
            if reload
                self.instance_variable_set("@#{name}", nil)
            end

            if self.instance_variable_get("@#{name}").blank?
                self.instance_variable_set("@#{name}", object_class.where(:id => self.send("#{name}_id")).first)
            end

            self.instance_variable_get("@#{name}")
        end
        define_method("#{name}=") do |new_instance|
            self.send("#{name}_id=", new_instance.id)
            self.instance_variable_set("@#{name}", nil)
            # self.save
        end
    end
end
from_active_record_has_many(name, options = {}) click to toggle source
# File lib/dynamord.rb, line 138
def from_active_record_has_many(name, options = {})
    plural_name = name.to_s.pluralize
    foreign_key = options[:foreign_key] || "#{self.name.underscore}_id".to_sym
    object_class = options[:class] || name.to_s.singularize.titleize.delete(' ').constantize
    configure_dependent(name, options[:dependent])
    self.instance_eval do
        define_method(plural_name) do |reload = false|
            if reload
                self.instance_variable_set("@#{name}", nil)
            end

            if self.instance_variable_get("@#{name}").blank?
                self.instance_variable_set("@#{name}", object_class.where(foreign_key => self.id))
            end

            self.instance_variable_get("@#{name}")
        end
    end
end
from_active_record_has_one(name, options = {}) click to toggle source
# File lib/dynamord.rb, line 158
def from_active_record_has_one(name, options = {})
    foreign_key = options[:foreign_key] || "#{self.name.underscore}_id"
    object_class = options[:class] || name.to_s.titleize.delete(' ').constantize
    configure_dependent(name, options[:dependent])
    self.instance_eval do
        define_method(name) do |reload = false|
            if reload
                self.instance_variable_set("@#{name}", nil)
            end

            if self.instance_variable_get("@#{name}").blank?
                self.instance_variable_set("@#{name}", object_class.where(foreign_key => self.id))
            end

            self.instance_variable_get("@#{name}")
        end
    end
end
to_active_record_belongs_to(name, options = {}) click to toggle source
# File lib/dynamord.rb, line 24
def to_active_record_belongs_to(name, options = {})
    field "#{name}_id".to_sym, :integer
    if options[:optional]
        validates "#{name}_id".to_sym, presence: true
    end
    object_class = options[:class] || name.to_s.titleize.delete(' ').constantize
    self.instance_eval do
        define_method(name) do |reload = false|
            if reload
                self.instance_variable_set("@#{name}", nil)
            end

            if self.instance_variable_get("@#{name}").blank?
                self.instance_variable_set("@#{name}", object_class.where(object_class.primary_key => self.send("#{name}_id")).first)
            end

            self.instance_variable_get("@#{name}")
        end
        define_method("#{name}=") do |new_instance|
            self.send("#{name}_id=", new_instance.id)
            self.instance_variable_set("@#{name}", nil)
            # self.save
        end
    end
end
to_active_record_has_many(name, options = {}) click to toggle source
# File lib/dynamord.rb, line 50
def to_active_record_has_many(name, options = {})
    plural_name = name.to_s.pluralize
    foreign_key = options[:foreign_key] || "#{self.name.underscore}_id"
    object_class = options[:class] || name.to_s.singularize.titleize.delete(' ').constantize
    configure_dependent(name, options[:dependent])
    self.instance_eval do
        define_method(plural_name) do |reload = false|
            if reload
                self.instance_variable_set("@#{name}", nil)
            end

            if self.instance_variable_get("@#{name}").blank?
                self.instance_variable_set("@#{name}", object_class.where(foreign_key => self.id.to_s))
            end

            self.instance_variable_get("@#{name}")
        end
    end
end
to_active_record_has_one(name, options = {}) click to toggle source
# File lib/dynamord.rb, line 70
def to_active_record_has_one(name, options = {})
    foreign_key = options[:foreign_key] || "#{self.name.underscore}_id"
    object_class = options[:class] || name.to_s.titleize.delete(' ').constantize
    configure_dependent(name, options[:dependent])
    self.instance_eval do
        define_method(name) do |reload = false|
            if reload
                self.instance_variable_set("@#{name}", nil)
            end

            if self.instance_variable_get("@#{name}").blank?
                self.instance_variable_set("@#{name}", object_class.where(foreign_key => self.id.to_s).first)
            end

            self.instance_variable_get("@#{name}")
        end
    end
end