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.



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

#fieldsObject

Returns the value of attribute fields.



135
136
137
# File 'lib/jsonrpc2/types.rb', line 135

def fields
  @fields
end

#nameObject

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

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

Shortcut to define integer field



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

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

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

Shortcut to define number field



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

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


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