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
31
32
# File 'lib/card/view/options/voo_api.rb', line 26

def define_getter option_key
  define_method option_key do
    norm_method = "normalize_#{option_key}"
    value = live_options[option_key]
    try(norm_method, value) || value
  end
end

.define_setter(option_key) ⇒ Object



34
35
36
37
38
# File 'lib/card/view/options/voo_api.rb', line 34

def define_setter option_key
  define_method "#{option_key}=" do |value|
    live_options[option_key] = 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)


44
45
46
# File 'lib/card/view/options/voo_api.rb', line 44

def items
  live_options[:items] ||= {}
end

#normalize_cache(value) ⇒ Object



76
77
78
# File 'lib/card/view/options/voo_api.rb', line 76

def normalize_cache value
  value&.to_sym
end

#normalize_editor(value) ⇒ Object

ACCESSOR_HELPERS methods that follow the normalize_#key pattern are called by accessors (arguably that should be done during normalization!)



72
73
74
# File 'lib/card/view/options/voo_api.rb', line 72

def normalize_editor value
  value&.to_sym
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)


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

def slot_options
  normalized_options.merge(view: requested_view).select do |k, _v|
    Options.all_keys.include? k
  end
end