Class: RspecApiDocumentation::OpenApi::Node
- Inherits:
-
Object
- Object
- RspecApiDocumentation::OpenApi::Node
show all
- Defined in:
- lib/rspec_api_documentation/open_api/node.rb
Direct Known Subclasses
Contact, Example, Header, Headers, Info, License, Operation, Parameter, Path, Paths, Response, Responses, Root, Schema, SecurityDefinitions, SecuritySchema, Tag
Constant Summary
collapse
- CHILD_CLASS =
this is used to define class of incoming option attribute If false
then do not create new setting If true
then create new setting with raw passed value If RspecApiDocumentation::OpenApi::Node then create new setting and wrap it in this class
false
Instance Attribute Summary collapse
-
#hide ⇒ Object
This attribute allow us to hide some of children through configuration file.
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(opts = {}) ⇒ Node
Returns a new instance of Node.
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
# File 'lib/rspec_api_documentation/open_api/node.rb', line 33
def initialize(opts = {})
return unless opts
opts.each do |name, value|
if name.to_s == 'hide'
self.hide = value
elsif self.class::CHILD_CLASS
add_setting name, :value => self.class::CHILD_CLASS === true ? value : self.class::CHILD_CLASS.new(value)
elsif setting_exist?(name.to_sym)
schema = setting_schema(name)
converted =
case
when schema.is_a?(Array) && schema[0] <= Node then value.map { |v| v.is_a?(schema[0]) ? v : schema[0].new(v) }
when schema <= Node then value.is_a?(schema) ? value : schema.new(value)
else
value
end
assign_setting(name, converted)
else
public_send("#{name}=", value) if respond_to?("#{name}=")
end
end
end
|
Instance Attribute Details
#hide ⇒ Object
This attribute allow us to hide some of children through configuration file
11
12
13
|
# File 'lib/rspec_api_documentation/open_api/node.rb', line 11
def hide
@hide
end
|
Class Method Details
.add_setting(name, opts = {}) ⇒ Object
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
# File 'lib/rspec_api_documentation/open_api/node.rb', line 13
def self.add_setting(name, opts = {})
class_settings << name
define_method("#{name}_schema") { opts[:schema] || NilClass }
define_method("#{name}=") { |value| settings[name] = value }
define_method("#{name}") do
if settings.has_key?(name)
settings[name]
elsif !opts[:default].nil?
if opts[:default].respond_to?(:call)
opts[:default].call(self)
else
opts[:default]
end
elsif opts[:required]
raise "setting: #{name} required in #{self}"
end
end
end
|
Instance Method Details
#add_setting(name, opts = {}) ⇒ Object
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
# File 'lib/rspec_api_documentation/open_api/node.rb', line 64
def add_setting(name, opts = {})
return false if setting_exist?(name)
instance_settings << name
settings[name] = opts[:value] if opts[:value]
define_singleton_method("#{name}_schema") { opts[:schema] || NilClass }
define_singleton_method("#{name}=") { |value| settings[name] = value }
define_singleton_method("#{name}") do
if settings.has_key?(name)
settings[name]
elsif !opts[:default].nil?
if opts[:default].respond_to?(:call)
opts[:default].call(self)
else
opts[:default]
end
elsif opts[:required]
raise "setting: #{name} required in #{self}"
end
end
end
|
#as_json ⇒ Object
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
# File 'lib/rspec_api_documentation/open_api/node.rb', line 88
def as_json
existing_settings.inject({}) do |hash, name|
value = setting(name)
case
when value.is_a?(Node)
hash[name] = value.as_json unless value.hide
when value.is_a?(Array) && value[0].is_a?(Node)
tmp = value.select { |v| !v.hide }.map { |v| v.as_json }
hash[name] = tmp unless tmp.empty?
else
hash[name] = value
end unless value.nil?
hash
end
end
|
#assign_setting(name, value) ⇒ Object
57
|
# File 'lib/rspec_api_documentation/open_api/node.rb', line 57
def assign_setting(name, value); public_send("#{name}=", value) unless value.nil? end
|
#existing_settings ⇒ Object
62
|
# File 'lib/rspec_api_documentation/open_api/node.rb', line 62
def existing_settings; self.class.class_settings + instance_settings end
|
#safe_assign_setting(name, value) ⇒ Object
58
|
# File 'lib/rspec_api_documentation/open_api/node.rb', line 58
def safe_assign_setting(name, value); assign_setting(name, value) unless settings.has_key?(name) end
|
#setting(name) ⇒ Object
59
|
# File 'lib/rspec_api_documentation/open_api/node.rb', line 59
def setting(name); public_send(name) end
|
#setting_exist?(name) ⇒ Boolean
61
|
# File 'lib/rspec_api_documentation/open_api/node.rb', line 61
def setting_exist?(name); existing_settings.include?(name) end
|
#setting_schema(name) ⇒ Object
60
|
# File 'lib/rspec_api_documentation/open_api/node.rb', line 60
def setting_schema(name); public_send("#{name}_schema") end
|