Sha256: b4e9953af635e78be1803305b9f9ba8e71a22443ed2f1763d9f4855f57e30f2a

Contents?: true

Size: 1.88 KB

Versions: 32

Compression:

Stored size: 1.88 KB

Contents

module ActiveGraph::Shared
  # MassAssignment allows you to bulk set and update attributes
  #
  # Including MassAssignment into your model gives it a set of mass assignment
  # methods, similar to those found in ActiveRecord.
  #
  # @example Usage
  #   class Person
  #     include ActiveGraph::Shared::MassAssignment
  #   end
  #
  # Originally part of ActiveAttr, https://github.com/cgriego/active_attr
  module MassAssignment
    extend ActiveSupport::Concern
    # Mass update a model's attributes
    #
    # @example Assigning a hash
    #   person.assign_attributes(:first_name => "Chris", :last_name => "Griego")
    #   person.first_name #=> "Chris"
    #   person.last_name #=> "Griego"
    #
    # @param [Hash{#to_s => Object}, #each] new_attributes Attributes used to
    #   populate the model
    def assign_attributes(new_attributes = nil)
      return unless new_attributes.present?
      new_attributes.each do |name, value|
        writer = :"#{name}="
        if respond_to?(writer)
          send(writer, value)
        else
          add_undeclared_property(name, value)
        end
      end
    end

    def add_undeclared_property(_, _); end

    # Mass update a model's attributes
    #
    # @example Assigning a hash
    #   person.attributes = { :first_name => "Chris", :last_name => "Griego" }
    #   person.first_name #=> "Chris"
    #   person.last_name #=> "Griego"
    #
    # @param (see #assign_attributes)
    def attributes=(new_attributes)
      assign_attributes(new_attributes)
    end

    # Initialize a model with a set of attributes
    #
    # @example Initializing with a hash
    #   person = Person.new(:first_name => "Chris", :last_name => "Griego")
    #   person.first_name #=> "Chris"
    #   person.last_name #=> "Griego"
    #
    # @param (see #assign_attributes)
    def initialize(attributes = nil)
      assign_attributes(attributes)
      super()
    end
  end
end

Version data entries

32 entries across 32 versions & 1 rubygems

Version Path
activegraph-12.0.0.beta.5 lib/active_graph/shared/mass_assignment.rb
activegraph-12.0.0.beta.4 lib/active_graph/shared/mass_assignment.rb
activegraph-11.5.0.beta.3 lib/active_graph/shared/mass_assignment.rb
activegraph-12.0.0.beta.3 lib/active_graph/shared/mass_assignment.rb
activegraph-12.0.0.beta.2 lib/active_graph/shared/mass_assignment.rb
activegraph-11.5.0.beta.2 lib/active_graph/shared/mass_assignment.rb
activegraph-12.0.0.beta.1 lib/active_graph/shared/mass_assignment.rb
activegraph-11.5.0.beta.1 lib/active_graph/shared/mass_assignment.rb
activegraph-11.5.0.alpha.1 lib/active_graph/shared/mass_assignment.rb
activegraph-11.4.0 lib/active_graph/shared/mass_assignment.rb
activegraph-11.3.1 lib/active_graph/shared/mass_assignment.rb
activegraph-11.3.0 lib/active_graph/shared/mass_assignment.rb
activegraph-11.2.0 lib/active_graph/shared/mass_assignment.rb
activegraph-11.1.0 lib/active_graph/shared/mass_assignment.rb
activegraph-11.1.0.beta.1 lib/active_graph/shared/mass_assignment.rb
activegraph-11.1.0.alpha.4 lib/active_graph/shared/mass_assignment.rb
activegraph-11.1.0.alpha.3 lib/active_graph/shared/mass_assignment.rb
activegraph-11.1.0.alpha.2 lib/active_graph/shared/mass_assignment.rb
activegraph-11.1.0.alpha.1 lib/active_graph/shared/mass_assignment.rb
activegraph-10.2.0.beta.1 lib/active_graph/shared/mass_assignment.rb