module XMLable::Mixins::Instantiable

Instantiable module contains the logic to initialize the new elements

Public Class Methods

new(items = nil, node = nil, handler = nil) click to toggle source

@param [Object] items initial params @param [Nokogiri::XML::Node] node @param [XMLable::Handlers::Base] handler

Calls superclass method
# File lib/xmlable/mixins/instantiable.rb, line 12
def initialize(items = nil, node = nil, handler = nil)
  super(node, handler)
  __initialize_with(items) if items
end

Public Instance Methods

__initialize_with(value) click to toggle source

Initialize object with given value

@param [Object] value

# File lib/xmlable/mixins/instantiable.rb, line 22
def __initialize_with(value)
  if value.is_a?(Hash)
    value.each do |key, val|
      if respond_to?(:__overwrite_content) && __content_methods.include?(key.to_s)
        next __overwrite_content(val)
      end

      h = key?(key)
      case h
      when Handlers::Attribute then __attribute_object_initialize(h, val)
      when Handlers::Root then __root_object_initialize(h, val)
      when Handlers::Element then __element_object_initialize(h, val)
      else raise h.inspect
      end
    end
  else
    case __handler
    when Handlers::Attribute then __overwrite_value(value)
    when Handlers::Element then __overwrite_content(value)
    else raise h.inspect
    end
  end
end