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.
136 137 138 139 |
# File 'lib/jsonrpc2/types.rb', line 136 def initialize(name, fields) @name, @fields = name, fields @required = true end |
Instance Attribute Details
#fields ⇒ Object
Returns the value of attribute fields.
135 136 137 |
# File 'lib/jsonrpc2/types.rb', line 135 def fields @fields end |
#name ⇒ Object
Returns the value of attribute name.
135 136 137 |
# File 'lib/jsonrpc2/types.rb', line 135 def name @name end |
Instance Method Details
#boolean(name, desc, options = {}) ⇒ Object
Shortcut to define boolean field
159 |
# File 'lib/jsonrpc2/types.rb', line 159 def boolean name, desc, ={}; field(name, 'Boolean', desc, ); end |
#field(name, type, desc, options = {}) ⇒ Object
Add field of #name and #type to type description
149 150 151 |
# File 'lib/jsonrpc2/types.rb', line 149 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
157 |
# File 'lib/jsonrpc2/types.rb', line 157 def integer name, desc, ={}; field(name, 'Integer', desc, ); end |
#number(name, desc, options = {}) ⇒ Object
Shortcut to define number field
155 |
# File 'lib/jsonrpc2/types.rb', line 155 def number name, desc, ={}; field(name, 'Number', desc, ); end |
#optional(&block) ⇒ Object
Make fields defined in block optional by default
162 163 164 165 166 167 168 169 170 |
# File 'lib/jsonrpc2/types.rb', line 162 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
173 174 175 176 177 178 179 180 181 |
# File 'lib/jsonrpc2/types.rb', line 173 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
153 |
# File 'lib/jsonrpc2/types.rb', line 153 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
142 143 144 145 146 |
# File 'lib/jsonrpc2/types.rb', line 142 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 |