Sha256: 5f0af55996409708af624e40daae4c301d767ef498499adc6b415e1144dc6e6a

Contents?: true

Size: 1.31 KB

Versions: 10

Compression:

Stored size: 1.31 KB

Contents

module PassiveRecord
  module InstanceMethods
    def update(attrs={})
      self.class.before_update_hooks.each do |hook|
        hook.run(self)
      end

      attrs.each do |k,v|
        send("#{k}=", v)
      end

      self.class.after_update_hooks.each do |hook|
        hook.run(self)
      end

      self
    end

    def destroy
      self.class.before_destroy_hooks.each do |hook|
        hook.run(self)
      end

      self.class.destroy(self.id)

      self.class.after_destroy_hooks.each do |hook|
        hook.run(self)
      end
    end

    # from http://stackoverflow.com/a/8417341/90042
    def to_h
      Hash[
        attribute_names.
        map do |name| [
          name.to_s.gsub("@","").to_sym,  # key
          (instance_variable_get(name) rescue send(name))] # val
        end
      ]
    end

    protected
    def attribute_names
      attr_names = instance_variables
      attr_names += self.class.associations_id_syms
      attr_names += members rescue []
      attr_names.reject! { |name| name.to_s.start_with?("@_") || name.match(/join_model/) }
      attr_names - blacklisted_attribute_names
    end

    def blacklisted_attribute_names
      []
    end

    private

    def relata
      @_relata ||= self.class.associations&.map do |assn|
        assn.to_relation(self)
      end || []
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
passive_record-0.3.22 lib/passive_record/instance_methods.rb
passive_record-0.3.21 lib/passive_record/instance_methods.rb
passive_record-0.3.20 lib/passive_record/instance_methods.rb
passive_record-0.3.19 lib/passive_record/instance_methods.rb
passive_record-0.3.18 lib/passive_record/instance_methods.rb
passive_record-0.3.17 lib/passive_record/instance_methods.rb
passive_record-0.3.16 lib/passive_record/instance_methods.rb
passive_record-0.3.15 lib/passive_record/instance_methods.rb
passive_record-0.3.14 lib/passive_record/instance_methods.rb
passive_record-0.3.13 lib/passive_record/instance_methods.rb