Module: XMLable::Mixins::RootStorage

Defined in:
lib/xmlable/mixins/root_storage.rb

Overview

RootStorage module contains the logic to manage with XML root element

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args, &block) ⇒ Object



30
31
32
33
34
# File 'lib/xmlable/mixins/root_storage.rb', line 30

def method_missing(name, *args, &block)
  return super unless key?(name)
  return root unless name.to_s.end_with?('=')
  self.root = args.first
end

Class Method Details

.included(base) ⇒ Object



7
8
9
# File 'lib/xmlable/mixins/root_storage.rb', line 7

def self.included(base)
  base.send(:extend, ClassMethods)
end

Instance Method Details

#[](key) ⇒ Object

Get root object by key

Parameters:

  • key (String)


103
104
105
# File 'lib/xmlable/mixins/root_storage.rb', line 103

def [](key)
  root if key?(key)
end

#[]=(key, val) ⇒ Object

Set root object value

Parameters:



113
114
115
# File 'lib/xmlable/mixins/root_storage.rb', line 113

def []=(key, val)
  self.root = val if key?(key)
end

#__empty?Boolean

Is the current object empty?

Returns:

  • (Boolean)


41
42
43
44
# File 'lib/xmlable/mixins/root_storage.rb', line 41

def __empty?
  return false unless super
  __empty(root)
end

#__root_handlerXMLable::Handlers::Root, XMLable::Handlers::RootNone

Cureent root object’s handler



122
123
124
# File 'lib/xmlable/mixins/root_storage.rb', line 122

def __root_handler
  self.class.__root_handler
end

#__root_object_initialize(h, value) ⇒ Object

Initialize root object with params

Parameters:



71
72
73
74
75
76
# File 'lib/xmlable/mixins/root_storage.rb', line 71

def __root_object_initialize(h, value)
  return self.root = value unless value.is_a?(Hash)
  value.each do |key, val|
    root[key].__initialize_with(val)
  end
end

#__set_root(node) ⇒ Object

Set XML root element

Parameters:

  • node (Nokogiri::XML::Element, nil)


16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/xmlable/mixins/root_storage.rb', line 16

def __set_root(node)
  unless node.is_a?(Nokogiri::XML::Element)
    node = Nokogiri::XML::Element.new(__root_handler.tag.to_s, @__node)
    @__node.root = node
  end
  node.instance_variable_set(:@__handler, __root_handler)
  @root = __root_handler.from_xml_element(node)
  if __root_handler.namespace_prefix
    node.namespace = node.namespace_scopes.find do |n|
      n.prefix == __root_handler.namespace_prefix
    end
  end
end

#key?(key) ⇒ Boolean

Does this object has root object with given key?

Returns:

  • (Boolean)


92
93
94
95
96
# File 'lib/xmlable/mixins/root_storage.rb', line 92

def key?(key)
  names = ['root', __root_handler.method_name]
  return __root_handler if names.include?(key.to_s)
  super
end

#rootXMLable::Mixins::Object

Get root object



51
52
53
54
# File 'lib/xmlable/mixins/root_storage.rb', line 51

def root
  __set_root(nil) unless instance_variable_defined?(:@root)
  @root
end

#root!Object

Get unwraped root object’s value

Returns:



61
62
63
# File 'lib/xmlable/mixins/root_storage.rb', line 61

def root!
  root.__object
end

#root=(val) ⇒ Object

Set root object content

Parameters:



83
84
85
# File 'lib/xmlable/mixins/root_storage.rb', line 83

def root=(val)
  @root.__overwrite_content(val)
end