Class: JSONRPC2::JsonObjectType
- Inherits:
-
Object
- Object
- JSONRPC2::JsonObjectType
- Defined in:
- lib/jsonrpc2/types.rb
Overview
Description of JSON object
Instance Attribute Summary collapse
-
#fields ⇒ Object
Returns the value of attribute fields.
-
#name ⇒ Object
Returns the value of attribute name.
Instance Method Summary collapse
-
#boolean(name, desc, options = {}) ⇒ Object
Shortcut to define boolean field.
-
#field(name, type, desc, options = {}) ⇒ Object
Add field of #name and #type to type description.
-
#initialize(name, fields) ⇒ JsonObjectType
constructor
A new instance of JsonObjectType.
-
#integer(name, desc, options = {}) ⇒ Object
Shortcut to define integer field.
-
#number(name, desc, options = {}) ⇒ Object
Shortcut to define number field.
-
#optional(&block) ⇒ Object
Make fields defined in block optional by default.
-
#required(&block) ⇒ Object
Make fields defined in block required by default.
-
#string(name, desc, options = {}) ⇒ Object
Shortcut to define string field.
-
#valid_object?(interface, object, subset = false) ⇒ Boolean
Check that #object Hash is valid version of this type.
Constructor Details
#initialize(name, fields) ⇒ JsonObjectType
Returns a new instance of JsonObjectType.
140 141 142 143 |
# File 'lib/jsonrpc2/types.rb', line 140 def initialize(name, fields) @name, @fields = name, fields @required = true end |
Instance Attribute Details
#fields ⇒ Object
Returns the value of attribute fields.
139 140 141 |
# File 'lib/jsonrpc2/types.rb', line 139 def fields @fields end |
#name ⇒ Object
Returns the value of attribute name.
139 140 141 |
# File 'lib/jsonrpc2/types.rb', line 139 def name @name end |
Instance Method Details
#boolean(name, desc, options = {}) ⇒ Object
Shortcut to define boolean field
163 |
# File 'lib/jsonrpc2/types.rb', line 163 def boolean name, desc, ={}; field(name, 'Boolean', desc, ); end |
#field(name, type, desc, options = {}) ⇒ Object
Add field of #name and #type to type description
153 154 155 |
# File 'lib/jsonrpc2/types.rb', line 153 def field(name, type, desc, ={}) @fields << { :name => name, :type => type, :desc => desc, :required => @required }.merge() end |
#integer(name, desc, options = {}) ⇒ Object
Shortcut to define integer field
161 |
# File 'lib/jsonrpc2/types.rb', line 161 def integer name, desc, ={}; field(name, 'Integer', desc, ); end |
#number(name, desc, options = {}) ⇒ Object
Shortcut to define number field
159 |
# File 'lib/jsonrpc2/types.rb', line 159 def number name, desc, ={}; field(name, 'Number', desc, ); end |
#optional(&block) ⇒ Object
Make fields defined in block optional by default
166 167 168 169 170 171 172 173 174 |
# File 'lib/jsonrpc2/types.rb', line 166 def optional(&block) old_required = @required begin @required = false yield(self) ensure @required = old_required end end |
#required(&block) ⇒ Object
Make fields defined in block required by default
177 178 179 180 181 182 183 184 185 |
# File 'lib/jsonrpc2/types.rb', line 177 def required(&block) old_required = @required begin @required = true yield(self) ensure @required = old_required end end |
#string(name, desc, options = {}) ⇒ Object
Shortcut to define string field
157 |
# File 'lib/jsonrpc2/types.rb', line 157 def string name, desc, ={}; field(name, 'String', desc, ); end |
#valid_object?(interface, object, subset = false) ⇒ Boolean
Check that #object Hash is valid version of this type
146 147 148 149 150 |
# File 'lib/jsonrpc2/types.rb', line 146 def valid_object?(interface, object, subset = false) object.keys.all? { |key| fields.any? { |field| field[:name] == key } } && fields.all? { |field| (object.keys.include?(field[:name]) && Types.valid?(interface, field[:type], object[field[:name]])) || subset || (! field[:required]) } end |