class Grape::Util::InheritableSetting
and inheritable values (see InheritableValues and StackableValues).
A branchable, inheritable settings object which can store both stackable
def self.global
def self.global @global ||= {} end
def self.reset_global!
- Note: - only for testing
Other tags:
- Api: - private
def self.reset_global! @global = {} end
def global
def global self.class.global end
def inherit_from(parent)
-
parent(InheritableSetting) --
def inherit_from(parent) return if parent.nil? self.parent = parent namespace_inheritable.inherited_values = parent.namespace_inheritable namespace_stackable.inherited_values = parent.namespace_stackable namespace_reverse_stackable.inherited_values = parent.namespace_reverse_stackable self.route = parent.route.merge(route) point_in_time_copies.map { |cloned_one| cloned_one.inherit_from parent } end
def initialize
instance can then be set to inherit from an existing instance (see
Instantiate a new settings instance, with blank values. The fresh
def initialize self.route = {} self.api_class = {} self.namespace = InheritableValues.new # only inheritable from a parent when # used with a mount, or should every API::Class be a separate namespace by default? self.namespace_inheritable = InheritableValues.new self.namespace_stackable = StackableValues.new self.namespace_reverse_stackable = ReverseStackableValues.new self.point_in_time_copies = [] self.parent = nil end
def point_in_time_copy
changed via #inherit_from, it will copy that inheritence to any copies
all our values. Note that, should this instance's parent be set or
Create a point-in-time copy of this settings instance, with clones of
def point_in_time_copy self.class.new.tap do |new_setting| point_in_time_copies << new_setting new_setting.point_in_time_copies = [] new_setting.namespace = namespace.clone new_setting.namespace_inheritable = namespace_inheritable.clone new_setting.namespace_stackable = namespace_stackable.clone new_setting.namespace_reverse_stackable = namespace_reverse_stackable.clone new_setting.route = route.clone new_setting.api_class = api_class new_setting.inherit_from(parent) end end
def route_end
- Api: - private
def route_end @route = {} end
def to_hash
def to_hash { global: global.clone, route: route.clone, namespace: namespace.to_hash, namespace_inheritable: namespace_inheritable.to_hash, namespace_stackable: namespace_stackable.to_hash, namespace_reverse_stackable: namespace_reverse_stackable.to_hash } end