Module: Card::Set::Format::AbstractFormat

Includes:
Basket, HamlViews
Defined in:
lib/card/set/format/abstract_format.rb

Overview

All Format modules are extended with this module in order to support the basic format API, including view, layout, and basket definitions

Instance Method Summary collapse

Methods included from HamlViews

#each_template_path, #haml_block_locals, #haml_template_path, #haml_template_proc, #haml_to_html, #haml_view_block, #template_location, #try_haml_template_path, #with_template_path

Methods included from Basket

#abstract_basket, #add_to_basket, #basket

Instance Method Details

#async_view?(args) ⇒ Boolean

Returns:

  • (Boolean)


79
80
81
# File 'lib/card/set/format/abstract_format.rb', line 79

def async_view? args
  args.first.is_a?(Hash) && args.first[:async]
end

#before(view, &block) ⇒ Object



15
16
17
# File 'lib/card/set/format/abstract_format.rb', line 15

def before view, &block
  define_method "_before_#{view}", &block
end

#define_async_view_method(view, &block) ⇒ Object



46
47
48
49
50
51
52
# File 'lib/card/set/format/abstract_format.rb', line 46

def define_async_view_method view, &block
  view_content = "#{view}_async_content"
  define_standard_view_method view_content, &block
  define_standard_view_method view do
    %(<card-view-placeholder data-url="#{path view: view_content}" />)
  end
end

#define_standard_view_method(view, &block) ⇒ Object



41
42
43
44
# File 'lib/card/set/format/abstract_format.rb', line 41

def define_standard_view_method view, &block
  views[self][view] = block
  define_method "_view_#{view}", &block
end

#extract_view_cache_rules(view, cache_rule) ⇒ Object



60
61
62
63
64
# File 'lib/card/set/format/abstract_format.rb', line 60

def extract_view_cache_rules view, cache_rule
  return unless cache_rule
  methodname = Card::Format.view_cache_setting_method view
  define_method(methodname) { cache_rule }
end

#haml_view?(args) ⇒ Boolean

Returns:

  • (Boolean)


71
72
73
# File 'lib/card/set/format/abstract_format.rb', line 71

def haml_view? args
  args.first.is_a?(Hash) && args.first[:template] == :haml
end

#interpret_view_opts(view, opts) ⇒ Object



54
55
56
57
58
# File 'lib/card/set/format/abstract_format.rb', line 54

def interpret_view_opts view, opts
  return unless opts.present?
  Card::Format.interpret_view_opts view, opts
  extract_view_cache_rules view, opts.delete(:cache)
end

#lookup_alias_block(view, args) ⇒ Object



83
84
85
86
87
88
89
90
91
# File 'lib/card/set/format/abstract_format.rb', line 83

def lookup_alias_block view, args
  opts = args[0].is_a?(Hash) ? args.shift : { view: args.shift }
  opts[:mod] ||= self
  opts[:view] ||= view
  views[opts[:mod]][opts[:view]] || begin
    raise "cannot find #{opts[:view]} view in #{opts[:mod]}; " \
          "failed to alias #{view} in #{self}"
  end
end

#set_moduleObject

remove the format part of the module name



98
99
100
# File 'lib/card/set/format/abstract_format.rb', line 98

def set_module
  Card.const_get name.split("::")[0..-2].join("::")
end

#source_locationObject



93
94
95
# File 'lib/card/set/format/abstract_format.rb', line 93

def source_location
  set_module.source_location
end

#view(view, *args, &block) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/card/set/format/abstract_format.rb', line 19

def view view, *args, &block
  # view = view.to_viewname.key.to_sym
  interpret_view_opts view, args[0] if block_given?
  view_method_block = view_block(view, args, &block)
  if async_view? args
    # This case makes only sense for HtmlFormat
    # but I don't see an easy way to override class methods for a specific
    # format. All formats are extended with this general module. So
    # a HtmlFormat.view method would be overridden by AbstractFormat.view
    # We need something like AbstractHtmlFormat for that.
    define_async_view_method view, &view_method_block
  else
    define_standard_view_method view, &view_method_block
  end
end

#view_block(view, args, &block) ⇒ Object



66
67
68
69
# File 'lib/card/set/format/abstract_format.rb', line 66

def view_block view, args, &block
  return haml_view_block(view, wrap_with_slot?(args), &block) if haml_view?(args)
  block_given? ? block : lookup_alias_block(view, args)
end

#view_for_override(viewname) ⇒ Object



35
36
37
38
39
# File 'lib/card/set/format/abstract_format.rb', line 35

def view_for_override viewname
  view viewname do
    "override '#{viewname}' view"
  end
end

#wrap_with_slot?(args) ⇒ Boolean

Returns:

  • (Boolean)


75
76
77
# File 'lib/card/set/format/abstract_format.rb', line 75

def wrap_with_slot? args
  args.first.is_a?(Hash) && args.first[:slot]
end