Class: JSONRPC2::JsonObjectType

Inherits:
Object
  • Object
show all
Defined in:
lib/jsonrpc2/types.rb

Overview

Description of JSON object

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#fieldsObject

Returns the value of attribute fields.



139
140
141
# File 'lib/jsonrpc2/types.rb', line 139

def fields
  @fields
end

#nameObject

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, options={}; field(name, 'Boolean', desc, options); 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, options={})
  @fields << { :name => name, :type => type, :desc => desc, :required => @required }.merge(options)
end

#integer(name, desc, options = {}) ⇒ Object

Shortcut to define integer field



161
# File 'lib/jsonrpc2/types.rb', line 161

def integer name, desc, options={}; field(name, 'Integer', desc, options); end

#number(name, desc, options = {}) ⇒ Object

Shortcut to define number field



159
# File 'lib/jsonrpc2/types.rb', line 159

def number  name, desc, options={}; field(name, 'Number',  desc, options); 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, options={}; field(name, 'String',  desc, options); end

#valid_object?(interface, object, subset = false) ⇒ Boolean

Check that #object Hash is valid version of this type

Returns:

  • (Boolean)


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