class RspecApiDocumentation::OpenApi::Node
Constants
- CHILD_CLASS
this is used to define class of incoming option attribute If
false
then do not create new setting Iftrue
then create new setting with raw passed value IfRspecApiDocumentation::OpenApi::Node
then create new setting and wrap it in this class
Attributes
hide[RW]
This attribute allow us to hide some of children through configuration file
Public Class Methods
add_setting(name, opts = {})
click to toggle source
# 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
new(opts = {})
click to toggle source
# 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
Private Class Methods
class_settings()
click to toggle source
# File lib/rspec_api_documentation/open_api/node.rb, line 109 def self.class_settings; @class_settings ||= [] end
Public Instance Methods
add_setting(name, opts = {})
click to toggle source
# 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()
click to toggle source
# 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)
click to toggle source
# 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()
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# File lib/rspec_api_documentation/open_api/node.rb, line 59 def setting(name); public_send(name) end
setting_exist?(name)
click to toggle source
# File lib/rspec_api_documentation/open_api/node.rb, line 61 def setting_exist?(name); existing_settings.include?(name) end
setting_schema(name)
click to toggle source
# File lib/rspec_api_documentation/open_api/node.rb, line 60 def setting_schema(name); public_send("#{name}_schema") end
Private Instance Methods
instance_settings()
click to toggle source
# File lib/rspec_api_documentation/open_api/node.rb, line 108 def instance_settings; @instance_settings ||= [] end
settings()
click to toggle source
# File lib/rspec_api_documentation/open_api/node.rb, line 107 def settings; @settings ||= {} end