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

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#normalized_optionsHash (readonly)

  • @normalized_options are determined upon initialization and do not change after that.

Returns:

  • (Hash)

    options



12
13
14
# File 'lib/card/view/options/voo_api.rb', line 12

def normalized_options
  @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
    live_options[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|
    live_options[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

#itemsHash

"items", the option used to configure views of each of a list of cards, is currently the only Hash option (thus this accessor override)

Returns:

  • (Hash)


42
43
44
# File 'lib/card/view/options/voo_api.rb', line 42

def items
  live_options[: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 normalize_special_options! 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_optionsHash

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.

Returns:

  • (Hash)


52
53
54
55
56
# File 'lib/card/view/options/voo_api.rb', line 52

def slot_options
  normalized_options.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