Module: Card::View::Options::VooApi
- Included in:
- Card::View::Options
- Defined in:
- lib/card/view/options/voo_api.rb
Overview
The methods of the VooApi module allow developers to read and write options dynamically.
Instance Attribute Summary collapse
-
#normalized_options ⇒ Hash
readonly
- @normalized_options are determined upon initialization and do not change after that.
Class Method Summary collapse
Instance Method Summary collapse
-
#items ⇒ Hash
"items", the option used to configure views of each of a list of cards, is currently the only Hash option (thus this accessor override).
- #normalize_cache(value) ⇒ Object
- #normalize_editor(value) ⇒ Object
-
#normalize_special_options!(opts) ⇒ Object
ACCESSOR_HELPERS methods that follow the normalize_#key pattern are called by accessors (arguably that should be done during normalization!).
- #normalize_wrap(value) ⇒ Object
-
#slot_options ⇒ Hash
options to be used in data attributes of card slots (normalized options with standard keys) FIXME: what we really want is options as they were when render was called.
- #special_option_value(option_key, value) ⇒ Object
Instance Attribute Details
#normalized_options ⇒ Hash (readonly)
- @normalized_options are determined upon initialization and do not change after that.
12 13 14 |
# File 'lib/card/view/options/voo_api.rb', line 12 def @normalized_options end |
Class Method Details
.define_getter(option_key) ⇒ Object
26 27 28 29 30 |
# File 'lib/card/view/options/voo_api.rb', line 26 def define_getter option_key define_method option_key do [option_key] end end |
.define_setter(option_key) ⇒ Object
32 33 34 35 36 |
# File 'lib/card/view/options/voo_api.rb', line 32 def define_setter option_key define_method "#{option_key}=" do |value| [option_key] = special_option_value(option_key, value) || value end end |
.included(base) ⇒ Object
15 16 17 18 19 20 21 22 23 24 |
# File 'lib/card/view/options/voo_api.rb', line 15 def included base # Developers can also set most options directly via accessors, # eg voo.title = "King" # :view, :show, and :hide have non-standard access (see #accessible_keys) base.accessible_keys.each do |option_key| define_getter option_key unless option_key == :items define_setter option_key end end |
Instance Method Details
#items ⇒ Hash
"items", the option used to configure views of each of a list of cards, is currently the only Hash option (thus this accessor override)
42 43 44 |
# File 'lib/card/view/options/voo_api.rb', line 42 def items [:items] ||= {} end |
#normalize_cache(value) ⇒ Object
85 86 87 |
# File 'lib/card/view/options/voo_api.rb', line 85 def normalize_cache value value&.to_sym end |
#normalize_editor(value) ⇒ Object
81 82 83 |
# File 'lib/card/view/options/voo_api.rb', line 81 def normalize_editor value value&.to_sym end |
#normalize_special_options!(opts) ⇒ Object
ACCESSOR_HELPERS methods that follow the normalize_#key pattern are called by accessors (arguably that should be done during normalization!)
70 71 72 73 74 75 |
# File 'lib/card/view/options/voo_api.rb', line 70 def opts opts.each do |option_key, value| new_value = special_option_value option_key, value opts[option_key] = new_value if new_value end end |
#normalize_wrap(value) ⇒ Object
89 90 91 92 |
# File 'lib/card/view/options/voo_api.rb', line 89 def normalize_wrap value value = value.split(",").map(&:strip) if value.is_a? String Array.wrap(value).compact.flatten end |
#slot_options ⇒ Hash
options to be used in data attributes of card slots (normalized options with standard keys) FIXME: what we really want is options as they were when render was called. normalized is wrong because it can get changed before render. live is wrong because they can get changed after. current solution is a compromise.
52 53 54 55 56 |
# File 'lib/card/view/options/voo_api.rb', line 52 def .merge(view: requested_view).select do |k, _v| Options.all_keys.include? k end end |
#special_option_value(option_key, value) ⇒ Object
77 78 79 |
# File 'lib/card/view/options/voo_api.rb', line 77 def special_option_value option_key, value try "normalize_#{option_key}", value end |