Method: Kernel#assign

Defined in:
lib/core/facets/kernel/assign.rb

#assign(data = nil, value = NA) ⇒ Object

Assign via writer using arguments, hash or associative array.

Using name-value arguments:

object = Object.new

object.assign(:a, 1)
object.assign(:b, 2)

Using a hash:

object.assign(:a => 1, :b => 2)

Use an associative array:

object.assign([[:a, 1], [:b, 2]])

These are all equivalent to:

object.a = 1 if object.respond_to?(:a=)
object.b = 2 if object.respond_to?(:b=)

Using an associative array instead of a hash guarantees order of assignment for older versions of Ruby (< 1.8.7).

TODO: Should this be called #set instead? Consider Module#set in this question, and also #set_from as the alias of #assign_from.



33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/core/facets/kernel/assign.rb', line 33

def assign(data=nil, value=NA)
  return self unless data

  if value==NA
    data.each do |(k,v)|
      __send__("#{k}=", v) if respond_to?("#{k}=")
    end
  else
    __send__("#{data}=", value) if respond_to?("#{data}=")
  end
  self
end