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

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

Overview

All Format modules are extended with this module in order to support the basic format API (ok, view definitions. It's just view definitions.) No longer just view definitions. Also basket definitions now.

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



148
149
150
# File 'lib/card/set/format.rb', line 148

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

#before(view, &block) ⇒ Object



90
91
92
# File 'lib/card/set/format.rb', line 90

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

#define_async_view_method(view, &block) ⇒ Object



115
116
117
118
119
120
121
# File 'lib/card/set/format.rb', line 115

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



110
111
112
113
# File 'lib/card/set/format.rb', line 110

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



129
130
131
132
133
# File 'lib/card/set/format.rb', line 129

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



140
141
142
# File 'lib/card/set/format.rb', line 140

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

#interpret_view_opts(view, opts) ⇒ Object



123
124
125
126
127
# File 'lib/card/set/format.rb', line 123

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



152
153
154
155
156
157
158
159
160
# File 'lib/card/set/format.rb', line 152

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



167
168
169
# File 'lib/card/set/format.rb', line 167

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

#source_locationObject



162
163
164
# File 'lib/card/set/format.rb', line 162

def source_location
  set_module.source_location
end

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



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/card/set/format.rb', line 94

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



135
136
137
138
# File 'lib/card/set/format.rb', line 135

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

#wrap_with_slot?(args) ⇒ Boolean



144
145
146
# File 'lib/card/set/format.rb', line 144

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