Class: Versionomy::Schema::Wrapper
- Inherits:
-
Object
- Object
- Versionomy::Schema::Wrapper
- Defined in:
- lib/versionomy/schema/wrapper.rb
Overview
Schemas are generally referenced through an object of this class.
Instance Method Summary collapse
-
#==(obj_) ⇒ Object
Returns true if this schema is compatible with the other schema.
-
#===(obj_) ⇒ Object
If the RHS is a schema, returns true if the schemas are equivalent.
-
#aliases ⇒ Object
Returns a hash of field name aliases.
-
#canonical_name(name_) ⇒ Object
Return the canonical field name given a name, or nil if the name is not recognized.
-
#eql?(obj_) ⇒ Boolean
Returns true if this schema is equivalent to the other schema.
-
#field_named(name_, include_aliases_ = false) ⇒ Object
Return the field with the given name, or nil if the given name is not found in this schema.
-
#hash ⇒ Object
:nodoc:.
-
#initialize(field_, modules_ = [], aliases_ = {}) ⇒ Wrapper
constructor
Create a new schema wrapper object given a root field.
-
#inspect ⇒ Object
:nodoc:.
-
#modules ⇒ Object
Returns an array of modules that should be included in values that use this schema.
-
#names ⇒ Object
Returns an array of names present in this schema, in no particular order.
-
#root_field ⇒ Object
Returns the root (most significant) field in this schema.
-
#to_s ⇒ Object
:nodoc:.
Constructor Details
#initialize(field_, modules_ = [], aliases_ = {}) ⇒ Wrapper
Create a new schema wrapper object given a root field. This is a low-level method. Usually you should call Versionomy::Schema#create instead.
75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/versionomy/schema/wrapper.rb', line 75 def initialize(field_, modules_=[], aliases_={}) @root_field = field_ @names = @root_field._descendants_by_name @modules = modules_ @aliases = {} aliases_.each do |k_,v_| k_ = k_.to_sym v_ = v_.to_sym if @names.include?(v_) && !@names.include?(k_) @aliases[k_] = v_ end end end |
Instance Method Details
#==(obj_) ⇒ Object
Returns true if this schema is compatible with the other schema. Two schemas are compatible if their root fields are the same-- which means that the entire field tree is the same. They may, however, include different value modules. Note that this is different from the definition of eql?.
117 118 119 |
# File 'lib/versionomy/schema/wrapper.rb', line 117 def ==(obj_) eql?(obj_) end |
#===(obj_) ⇒ Object
If the RHS is a schema, returns true if the schemas are equivalent. If the RHS is a value, returns true if the value uses this schema.
125 126 127 128 129 130 131 |
# File 'lib/versionomy/schema/wrapper.rb', line 125 def ===(obj_) if obj_.kind_of?(Value) obj_.schema == self else obj_ == self end end |
#aliases ⇒ Object
Returns a hash of field name aliases.
185 186 187 |
# File 'lib/versionomy/schema/wrapper.rb', line 185 def aliases @aliases.dup end |
#canonical_name(name_) ⇒ Object
Return the canonical field name given a name, or nil if the name is not recognized.
149 150 151 152 153 |
# File 'lib/versionomy/schema/wrapper.rb', line 149 def canonical_name(name_) name_ = name_.to_sym name_ = @aliases[name_] || name_ @names.include?(name_) ? name_ : nil end |
#eql?(obj_) ⇒ Boolean
Returns true if this schema is equivalent to the other schema. Two schemas are equivalent if their root fields are the same-- which means that the entire field tree is the same-- and they include the same value modules. Note that this is different from the definition of ==.
105 106 107 108 |
# File 'lib/versionomy/schema/wrapper.rb', line 105 def eql?(obj_) return false unless obj_.kind_of?(Schema::Wrapper) return @root_field == obj_.root_field && @modules == obj_.modules && @aliases == obj_.aliases end |
#field_named(name_, include_aliases_ = false) ⇒ Object
Return the field with the given name, or nil if the given name is not found in this schema. If include_aliases_ is set to true, this also supports lookup by alias.
160 161 162 163 164 |
# File 'lib/versionomy/schema/wrapper.rb', line 160 def field_named(name_, include_aliases_=false) name_ = name_.to_sym name_ = @aliases[name_] || name_ if include_aliases_ @names[name_] end |
#hash ⇒ Object
:nodoc:
134 135 136 |
# File 'lib/versionomy/schema/wrapper.rb', line 134 def hash # :nodoc: @hash ||= @root_field.hash ^ @modules.hash end |
#inspect ⇒ Object
:nodoc:
90 91 92 |
# File 'lib/versionomy/schema/wrapper.rb', line 90 def inspect # :nodoc: "#<#{self.class}:0x#{object_id.to_s(16)} root=#{@root_field.inspect}>" end |
#modules ⇒ Object
Returns an array of modules that should be included in values that use this schema.
178 179 180 |
# File 'lib/versionomy/schema/wrapper.rb', line 178 def modules @modules.dup end |
#names ⇒ Object
Returns an array of names present in this schema, in no particular order. Does not include aliases.
170 171 172 |
# File 'lib/versionomy/schema/wrapper.rb', line 170 def names @names.keys end |
#root_field ⇒ Object
Returns the root (most significant) field in this schema.
141 142 143 |
# File 'lib/versionomy/schema/wrapper.rb', line 141 def root_field @root_field end |
#to_s ⇒ Object
:nodoc:
94 95 96 |
# File 'lib/versionomy/schema/wrapper.rb', line 94 def to_s # :nodoc: inspect end |