Class: ROXML::Definition
- Inherits:
-
Object
- Object
- ROXML::Definition
- Defined in:
- lib/roxml/definition.rb
Overview
:nodoc:
Instance Attribute Summary collapse
-
#accessor ⇒ Object
readonly
Returns the value of attribute accessor.
-
#attr_name ⇒ Object
readonly
Returns the value of attribute attr_name.
-
#blocks ⇒ Object
readonly
Returns the value of attribute blocks.
-
#hash ⇒ Object
readonly
Returns the value of attribute hash.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#namespace ⇒ Object
readonly
Returns the value of attribute namespace.
-
#sought_type ⇒ Object
readonly
Returns the value of attribute sought_type.
-
#to_xml ⇒ Object
readonly
Returns the value of attribute to_xml.
-
#wrapper ⇒ Object
readonly
Returns the value of attribute wrapper.
Instance Method Summary collapse
- #content? ⇒ Boolean
- #default ⇒ Object
- #hash? ⇒ Boolean
-
#initialize(sym, opts = {}, &block) ⇒ Definition
constructor
A new instance of Definition.
- #instance_variable_name ⇒ Object
- #name? ⇒ Boolean
- #setter ⇒ Object
- #to_ref(inst) ⇒ Object
Constructor Details
#initialize(sym, opts = {}, &block) ⇒ Definition
Returns a new instance of Definition.
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/roxml/definition.rb', line 21 def initialize(sym, opts = {}, &block) opts.assert_valid_keys(:from, :in, :as, :namespace, :else, :required, :frozen, :cdata, :to_xml) @default = opts.delete(:else) @to_xml = opts.delete(:to_xml) @name_explicit = opts.has_key?(:from) && opts[:from].is_a?(String) @cdata = opts.delete(:cdata) @required = opts.delete(:required) @frozen = opts.delete(:frozen) @wrapper = opts.delete(:in) @namespace = opts.delete(:namespace) @accessor = sym.to_s opts[:as] ||= if @accessor.ends_with?('?') :bool elsif @accessor.ends_with?('_on') Date elsif @accessor.ends_with?('_at') DateTime end @array = opts[:as].is_a?(Array) @blocks = collect_blocks(block, opts[:as]) @sought_type = extract_type(opts[:as]) if @sought_type.respond_to?(:roxml_tag_name) opts[:from] ||= @sought_type.roxml_tag_name end if opts[:from] == :content opts[:from] = '.' elsif opts[:from] == :name opts[:from] = '*' elsif opts[:from] == :attr @sought_type = :attr opts[:from] = nil elsif opts[:from] == :namespace opts[:from] = '*' @sought_type = :namespace elsif opts[:from].to_s.starts_with?('@') @sought_type = :attr opts[:from] = opts[:from].sub('@', '') end @name = @attr_name = accessor.to_s.chomp('?') @name = @name.singularize if hash? || array? @name = (opts[:from] || @name).to_s if hash? && (hash.key.name? || hash.value.name?) @name = '*' end raise ContradictoryNamespaces if @name.include?(':') && (@namespace.present? || @namespace == false) raise ArgumentError, "Can't specify both :else default and :required" if required? && @default end |
Instance Attribute Details
#accessor ⇒ Object (readonly)
Returns the value of attribute accessor.
18 19 20 |
# File 'lib/roxml/definition.rb', line 18 def accessor @accessor end |
#attr_name ⇒ Object (readonly)
Returns the value of attribute attr_name.
18 19 20 |
# File 'lib/roxml/definition.rb', line 18 def attr_name @attr_name end |
#blocks ⇒ Object (readonly)
Returns the value of attribute blocks.
18 19 20 |
# File 'lib/roxml/definition.rb', line 18 def blocks @blocks end |
#hash ⇒ Object (readonly)
Returns the value of attribute hash.
18 19 20 |
# File 'lib/roxml/definition.rb', line 18 def hash @hash end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
18 19 20 |
# File 'lib/roxml/definition.rb', line 18 def name @name end |
#namespace ⇒ Object (readonly)
Returns the value of attribute namespace.
18 19 20 |
# File 'lib/roxml/definition.rb', line 18 def namespace @namespace end |
#sought_type ⇒ Object (readonly)
Returns the value of attribute sought_type.
18 19 20 |
# File 'lib/roxml/definition.rb', line 18 def sought_type @sought_type end |
#to_xml ⇒ Object (readonly)
Returns the value of attribute to_xml.
18 19 20 |
# File 'lib/roxml/definition.rb', line 18 def to_xml @to_xml end |
#wrapper ⇒ Object (readonly)
Returns the value of attribute wrapper.
18 19 20 |
# File 'lib/roxml/definition.rb', line 18 def wrapper @wrapper end |
Instance Method Details
#content? ⇒ Boolean
100 101 102 |
# File 'lib/roxml/definition.rb', line 100 def content? @name == '.' end |
#default ⇒ Object
104 105 106 107 108 109 110 |
# File 'lib/roxml/definition.rb', line 104 def default if @default.nil? @default = [] if array? @default = {} if hash? end @default.duplicable? ? @default.dup : @default end |
#hash? ⇒ Boolean
92 93 94 |
# File 'lib/roxml/definition.rb', line 92 def hash? @sought_type.is_a?(HashDefinition) end |
#instance_variable_name ⇒ Object
77 78 79 |
# File 'lib/roxml/definition.rb', line 77 def instance_variable_name :"@#{attr_name}" end |
#name? ⇒ Boolean
96 97 98 |
# File 'lib/roxml/definition.rb', line 96 def name? @name == '*' end |
#setter ⇒ Object
81 82 83 |
# File 'lib/roxml/definition.rb', line 81 def setter :"#{attr_name}=" end |
#to_ref(inst) ⇒ Object
112 113 114 115 116 117 118 119 120 121 |
# File 'lib/roxml/definition.rb', line 112 def to_ref(inst) case sought_type when :attr then XMLAttributeRef when :text then XMLTextRef when :namespace then XMLNameSpaceRef when HashDefinition then XMLHashRef when Symbol then raise ArgumentError, "Invalid type argument #{sought_type}" else XMLObjectRef end.new(self, inst) end |