Module: PaynetEasy::PaynetEasyApi::Util::PropertyAccessor

Defined in:
lib/paynet_easy/paynet_easy_api/util/property_accessor.rb

Class Method Summary collapse

Class Method Details

.get_value(object, property_path, fail_on_error = true) ⇒ Object|NilClass

Get property value by property path.

Parameters:

  • object (Object)

    Object with data

  • property_path (String)

    Path to property

  • fail_on_error (TrueClass|FalseClass) (defaults to: true)

    Throw exception if error occurred or not

Returns:

  • (Object|NilClass)


10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/paynet_easy/paynet_easy_api/util/property_accessor.rb', line 10

def self.get_value(object, property_path, fail_on_error = true)
  if !property_path.include? '.'
    if object.respond_to? property_path
      return object.send property_path
    elsif fail_on_error
      raise RuntimeError, "Expected object with method '#{property_path}'"
    else
      return
    end
  end

  first_property, path_rest = property_path.split '.', 2
  first_object = object.send first_property

  if first_object
    return self.get_value first_object, path_rest, fail_on_error
  elsif fail_on_error
    raise RuntimeError, "Object expected for property path '#{first_property}'"
  end
end

.set_value(object, property_path, value, fail_on_error = true) ⇒ Object|NilClass

Set property value by property path.

Parameters:

  • object (Object)

    Object with data

  • property_path (String)

    Path to property

  • value (Object)

    Value to set

  • fail_on_error (TrueClass|FalseClass) (defaults to: true)

    Throw exception if error occurred or not

Returns:

  • (Object|NilClass)


39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/paynet_easy/paynet_easy_api/util/property_accessor.rb', line 39

def self.set_value(object, property_path, value, fail_on_error = true)
  if !property_path.include? '.'
    if object.respond_to? "#{property_path}="
      return object.send "#{property_path}=", value
    elsif fail_on_error
      raise RuntimeError, "Expected object with method '#{property_path}='"
    else
      return
    end
  end

  first_property, path_rest = property_path.split '.', 2
  first_object = object.send(first_property)

  if first_object
    return self.set_value first_object, path_rest, value, fail_on_error
  elsif fail_on_error
    raise RuntimeError, "Object expected for property path '#{first_property}'"
  end
end