Module: Grape::DSL::Settings
- Extended by:
- ActiveSupport::Concern
- Included in:
- Configuration::ClassMethods, Desc, InsideRoute, Logger, Endpoint
- Defined in:
- lib/grape/dsl/settings.rb
Overview
Keeps track of settings (implemented as key-value pairs, grouped by types), in two contexts: top-level settings which apply globally no matter where they’re defined, and inheritable settings which apply only in the current scope and scopes nested under it.
Instance Attribute Summary collapse
-
#inheritable_setting ⇒ Object
Fetch our current inheritable settings, which are inherited by nested scopes but not shared across siblings.
-
#top_level_setting ⇒ Object
Fetch our top-level settings, which apply to all endpoints in the API.
Instance Method Summary collapse
-
#api_class_setting(key, value = nil) ⇒ Object
Either the old value, if it wasn’t nil, or the given value.
-
#get_or_set(type, key, value) ⇒ Object
Either the old value, if it wasn’t nil, or the given value.
-
#global_setting(key, value = nil) ⇒ Object
Either the old value, if it wasn’t nil, or the given value.
-
#namespace_end ⇒ Object
Set the inheritable settings pointer back up by one level.
-
#namespace_inheritable(key, value = nil) ⇒ Object
Either the old value, if it wasn’t nil, or the given value.
- #namespace_inheritable_to_nil(key) ⇒ Object
- #namespace_reverse_stackable(key, value = nil) ⇒ Object
- #namespace_reverse_stackable_with_hash(key) ⇒ Object
-
#namespace_setting(key, value = nil) ⇒ Object
Either the old value, if it wasn’t nil, or the given value.
-
#namespace_stackable(key, value = nil) ⇒ Object
Either the old value, if it wasn’t nil, or the given value.
- #namespace_stackable_with_hash(key) ⇒ Object
-
#namespace_start ⇒ Object
Fork our inheritable settings to a new instance, copied from our parent’s, but separate so we won’t modify it.
-
#route_end ⇒ Object
Stop defining settings for the current route and clear them for the next, within a namespace.
-
#route_setting(key, value = nil) ⇒ Object
Either the old value, if it wasn’t nil, or the given value.
- #unset(type, key) ⇒ Object
- #unset_api_class_setting(key) ⇒ Object
- #unset_global_setting(key) ⇒ Object
- #unset_namespace_inheritable(key) ⇒ Object
- #unset_namespace_setting(key) ⇒ Object
- #unset_namespace_stackable(key) ⇒ Object
- #unset_route_setting(key) ⇒ Object
-
#within_namespace(&_block) ⇒ Object
Execute the block within a context where our inheritable settings are forked to a new copy (see #namespace_start).
Instance Attribute Details
#inheritable_setting ⇒ Object
Fetch our current inheritable settings, which are inherited by nested scopes but not shared across siblings.
21 22 23 |
# File 'lib/grape/dsl/settings.rb', line 21 def inheritable_setting @inheritable_setting ||= Grape::Util::InheritableSetting.new.tap { |new_settings| new_settings.inherit_from top_level_setting } end |
#top_level_setting ⇒ Object
Fetch our top-level settings, which apply to all endpoints in the API.
15 16 17 |
# File 'lib/grape/dsl/settings.rb', line 15 def top_level_setting @top_level_setting ||= build_top_level_setting end |
Instance Method Details
#api_class_setting(key, value = nil) ⇒ Object
Returns either the old value, if it wasn’t nil, or the given value.
125 126 127 |
# File 'lib/grape/dsl/settings.rb', line 125 def api_class_setting(key, value = nil) get_or_set :api_class, key, value end |
#get_or_set(type, key, value) ⇒ Object
Returns either the old value, if it wasn’t nil, or the given value.
36 37 38 39 40 41 42 43 |
# File 'lib/grape/dsl/settings.rb', line 36 def get_or_set(type, key, value) setting = inheritable_setting.send(type) if value.nil? setting[key] else setting[key] = value end end |
#global_setting(key, value = nil) ⇒ Object
Returns either the old value, if it wasn’t nil, or the given value.
48 49 50 |
# File 'lib/grape/dsl/settings.rb', line 48 def global_setting(key, value = nil) get_or_set :global, key, value end |
#namespace_end ⇒ Object
Set the inheritable settings pointer back up by one level.
142 143 144 145 |
# File 'lib/grape/dsl/settings.rb', line 142 def namespace_end route_end @inheritable_setting = inheritable_setting.parent end |
#namespace_inheritable(key, value = nil) ⇒ Object
Returns either the old value, if it wasn’t nil, or the given value.
78 79 80 |
# File 'lib/grape/dsl/settings.rb', line 78 def namespace_inheritable(key, value = nil) get_or_set :namespace_inheritable, key, value end |
#namespace_inheritable_to_nil(key) ⇒ Object
88 89 90 |
# File 'lib/grape/dsl/settings.rb', line 88 def namespace_inheritable_to_nil(key) inheritable_setting.namespace_inheritable[key] = nil end |
#namespace_reverse_stackable(key, value = nil) ⇒ Object
97 98 99 |
# File 'lib/grape/dsl/settings.rb', line 97 def namespace_reverse_stackable(key, value = nil) get_or_set :namespace_reverse_stackable, key, value end |
#namespace_reverse_stackable_with_hash(key) ⇒ Object
107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/grape/dsl/settings.rb', line 107 def namespace_reverse_stackable_with_hash(key) settings = get_or_set :namespace_reverse_stackable, key, nil return if settings.blank? result = {} settings.each do |setting| setting.each do |field, value| result[field] ||= value end end result end |
#namespace_setting(key, value = nil) ⇒ Object
Returns either the old value, if it wasn’t nil, or the given value.
68 69 70 |
# File 'lib/grape/dsl/settings.rb', line 68 def namespace_setting(key, value = nil) get_or_set :namespace, key, value end |
#namespace_stackable(key, value = nil) ⇒ Object
Returns either the old value, if it wasn’t nil, or the given value.
93 94 95 |
# File 'lib/grape/dsl/settings.rb', line 93 def namespace_stackable(key, value = nil) get_or_set :namespace_stackable, key, value end |
#namespace_stackable_with_hash(key) ⇒ Object
101 102 103 104 105 |
# File 'lib/grape/dsl/settings.rb', line 101 def namespace_stackable_with_hash(key) settings = get_or_set :namespace_stackable, key, nil return if settings.blank? settings.each_with_object({}) { |value, result| result.deep_merge!(value) } end |
#namespace_start ⇒ Object
Fork our inheritable settings to a new instance, copied from our parent’s, but separate so we won’t modify it. Every call to this method should have an answering call to #namespace_end.
137 138 139 |
# File 'lib/grape/dsl/settings.rb', line 137 def namespace_start @inheritable_setting = Grape::Util::InheritableSetting.new.tap { |new_settings| new_settings.inherit_from inheritable_setting } end |
#route_end ⇒ Object
Stop defining settings for the current route and clear them for the next, within a namespace.
149 150 151 |
# File 'lib/grape/dsl/settings.rb', line 149 def route_end inheritable_setting.route_end end |
#route_setting(key, value = nil) ⇒ Object
Returns either the old value, if it wasn’t nil, or the given value.
58 59 60 |
# File 'lib/grape/dsl/settings.rb', line 58 def route_setting(key, value = nil) get_or_set :route, key, value end |
#unset(type, key) ⇒ Object
27 28 29 30 |
# File 'lib/grape/dsl/settings.rb', line 27 def unset(type, key) setting = inheritable_setting.send(type) setting.delete key end |
#unset_api_class_setting(key) ⇒ Object
130 131 132 |
# File 'lib/grape/dsl/settings.rb', line 130 def unset_api_class_setting(key) unset :api_class, key end |
#unset_global_setting(key) ⇒ Object
53 54 55 |
# File 'lib/grape/dsl/settings.rb', line 53 def unset_global_setting(key) unset :global, key end |
#unset_namespace_inheritable(key) ⇒ Object
83 84 85 |
# File 'lib/grape/dsl/settings.rb', line 83 def unset_namespace_inheritable(key) unset :namespace_inheritable, key end |
#unset_namespace_setting(key) ⇒ Object
73 74 75 |
# File 'lib/grape/dsl/settings.rb', line 73 def unset_namespace_setting(key) unset :namespace, key end |
#unset_namespace_stackable(key) ⇒ Object
120 121 122 |
# File 'lib/grape/dsl/settings.rb', line 120 def unset_namespace_stackable(key) unset :namespace_stackable, key end |
#unset_route_setting(key) ⇒ Object
63 64 65 |
# File 'lib/grape/dsl/settings.rb', line 63 def unset_route_setting(key) unset :route, key end |
#within_namespace(&_block) ⇒ Object
Execute the block within a context where our inheritable settings are forked to a new copy (see #namespace_start).
155 156 157 158 159 160 161 162 163 164 |
# File 'lib/grape/dsl/settings.rb', line 155 def within_namespace(&_block) namespace_start result = yield if block_given? namespace_end reset_validations! result end |