hobo 0.6.2 → 0.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. data/bin/hobo +21 -22
  2. data/hobo_files/plugin/CHANGES.txt +429 -4
  3. data/hobo_files/plugin/Rakefile +2 -2
  4. data/hobo_files/plugin/generators/hobo_front_controller/templates/index.dryml +6 -5
  5. data/hobo_files/plugin/generators/hobo_front_controller/templates/search.dryml +2 -2
  6. data/hobo_files/plugin/generators/hobo_migration/hobo_migration_generator.rb +20 -15
  7. data/hobo_files/plugin/generators/hobo_model/templates/model.rb +1 -0
  8. data/hobo_files/plugin/generators/hobo_model_controller/templates/controller.rb +2 -0
  9. data/hobo_files/plugin/generators/hobo_rapid/templates/hobo_base.css +1 -2
  10. data/hobo_files/plugin/generators/hobo_rapid/templates/hobo_rapid.css +4 -3
  11. data/hobo_files/plugin/generators/hobo_rapid/templates/hobo_rapid.js +94 -12
  12. data/hobo_files/plugin/generators/hobo_rapid/templates/lowpro.js +5 -183
  13. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/stylesheets/application.css +1 -1
  14. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/views/application.dryml +23 -1
  15. data/hobo_files/plugin/generators/hobo_user_controller/templates/controller.rb +2 -0
  16. data/hobo_files/plugin/generators/hobo_user_model/templates/model.rb +3 -1
  17. data/hobo_files/plugin/init.rb +18 -7
  18. data/hobo_files/plugin/lib/active_record/has_many_association.rb +2 -2
  19. data/hobo_files/plugin/lib/extensions.rb +56 -12
  20. data/hobo_files/plugin/lib/hobo.rb +25 -88
  21. data/hobo_files/plugin/lib/hobo/composite_model.rb +2 -0
  22. data/hobo_files/plugin/lib/hobo/controller.rb +40 -20
  23. data/hobo_files/plugin/lib/hobo/dryml.rb +122 -106
  24. data/hobo_files/plugin/lib/hobo/dryml/dryml_builder.rb +2 -1
  25. data/hobo_files/plugin/lib/hobo/dryml/part_context.rb +3 -2
  26. data/hobo_files/plugin/lib/hobo/dryml/taglib.rb +19 -3
  27. data/hobo_files/plugin/lib/hobo/dryml/template.rb +40 -25
  28. data/hobo_files/plugin/lib/hobo/dryml/template_environment.rb +41 -20
  29. data/hobo_files/plugin/lib/hobo/email_address.rb +4 -1
  30. data/hobo_files/plugin/lib/hobo/enum_string.rb +50 -0
  31. data/hobo_files/plugin/lib/hobo/field_declaration_dsl.rb +36 -0
  32. data/hobo_files/plugin/lib/hobo/field_spec.rb +4 -7
  33. data/hobo_files/plugin/lib/hobo/hobo_helper.rb +47 -44
  34. data/hobo_files/plugin/lib/hobo/html_string.rb +2 -0
  35. data/hobo_files/plugin/lib/hobo/markdown_string.rb +2 -0
  36. data/hobo_files/plugin/lib/hobo/model.rb +158 -89
  37. data/hobo_files/plugin/lib/hobo/model_controller.rb +422 -376
  38. data/hobo_files/plugin/lib/hobo/model_queries.rb +1 -1
  39. data/hobo_files/plugin/lib/hobo/model_router.rb +174 -0
  40. data/hobo_files/plugin/lib/hobo/password_string.rb +2 -0
  41. data/hobo_files/plugin/lib/hobo/percentage.rb +14 -0
  42. data/hobo_files/plugin/lib/hobo/plugins.rb +4 -4
  43. data/hobo_files/plugin/lib/hobo/rapid_helper.rb +10 -2
  44. data/hobo_files/plugin/lib/hobo/text.rb +3 -3
  45. data/hobo_files/plugin/lib/hobo/textile_string.rb +2 -0
  46. data/hobo_files/plugin/lib/hobo/undefined.rb +3 -2
  47. data/hobo_files/plugin/lib/hobo/{authenticated_user.rb → user.rb} +10 -3
  48. data/hobo_files/plugin/lib/hobo/user_controller.rb +27 -23
  49. data/hobo_files/plugin/tags/core.dryml +8 -2
  50. data/hobo_files/plugin/tags/rapid.dryml +52 -40
  51. data/hobo_files/plugin/tags/rapid_document_tags.dryml +15 -11
  52. data/hobo_files/plugin/tags/rapid_editing.dryml +41 -9
  53. data/hobo_files/plugin/tags/rapid_forms.dryml +136 -36
  54. data/hobo_files/plugin/tags/rapid_navigation.dryml +2 -2
  55. data/hobo_files/plugin/tags/rapid_pages.dryml +204 -221
  56. data/hobo_files/plugin/tags/rapid_plus.dryml +8 -6
  57. data/hobo_files/plugin/tags/rapid_support.dryml +2 -3
  58. metadata +44 -42
  59. data/hobo_files/plugin/lib/hobo/define_tags.rb +0 -56
  60. data/hobo_files/plugin/lib/hobo/http_parameters.rb +0 -225
@@ -1,143 +1,159 @@
1
- module Hobo::Dryml
1
+ module Hobo
2
2
 
3
- class DrymlSyntaxError < RuntimeError; end
4
-
5
- class DrymlException < Exception
6
- def initialize(message, path=nil, line_num=nil)
7
- if path && line_num
8
- super(message + " -- at #{path}:#{line_num}")
9
- else
10
- super(message)
3
+ module Dryml
4
+
5
+ class DrymlSyntaxError < RuntimeError; end
6
+
7
+ class DrymlException < Exception
8
+ def initialize(message, path=nil, line_num=nil)
9
+ if path && line_num
10
+ super(message + " -- at #{path}:#{line_num}")
11
+ else
12
+ super(message)
13
+ end
11
14
  end
12
15
  end
13
- end
14
-
15
- class AttributeExtensionString < String;
16
- def drop_prefix; self[2..-1]; end
17
- end
18
-
19
- TagDef = Struct.new "TagDef", :name, :attrs, :proc
20
-
21
- RESERVED_WORDS = %w{if for while do class else elsif unless case when module in}
22
-
23
- EMPTY_PAGE = "[tag-page]"
16
+
17
+ class AttributeExtensionString < String;
18
+ def drop_prefix; self[2..-1]; end
19
+ end
24
20
 
25
- APPLICATION_TAGLIB = "taglibs/application"
26
- CORE_TAGLIB = "plugins/hobo/tags/core"
21
+ TagDef = Struct.new "TagDef", :name, :attrs, :proc
27
22
 
28
- @renderer_classes = {}
29
- @tag_page_renderer_classes = {}
23
+ RESERVED_WORDS = %w{if for while do class else elsif unless case when module in}
30
24
 
31
- class << self
25
+ EMPTY_PAGE = "[tag-page]"
32
26
 
33
- attr_accessor :last_if
27
+ APPLICATION_TAGLIB = "taglibs/application"
28
+ CORE_TAGLIB = "plugins/hobo/tags/core"
34
29
 
35
- def clear_cache
36
- @renderer_classes = {}
37
- @tag_page_renderer_classes = {}
38
- end
30
+ DEFAULT_IMPORTS = [Hobo::HoboHelper, ApplicationHelper]
39
31
 
40
- def render_tag(view, tag, options={})
41
- renderer = empty_page_renderer(view)
42
- renderer.render_tag(tag, options)
43
- end
32
+ @renderer_classes = {}
33
+ @tag_page_renderer_classes = {}
44
34
 
35
+ class << self
45
36
 
46
- def empty_page_renderer(view)
47
- page_renderer(view, [], EMPTY_PAGE)
48
- end
37
+ attr_accessor :last_if
38
+
39
+ def clear_cache
40
+ @renderer_classes = {}
41
+ @tag_page_renderer_classes = {}
42
+ end
43
+
44
+ def render_tag(view, tag, options={})
45
+ renderer = empty_page_renderer(view)
46
+ renderer.render_tag(tag, options)
47
+ end
49
48
 
50
49
 
51
- def page_renderer(view, local_names=[], page=nil)
52
- if RAILS_ENV == "development"
53
- clear_cache
54
- Taglib.clear_cache
50
+ def empty_page_renderer(view)
51
+ controller_name = view.controller.class.name.underscore.sub(/_controller$/, "")
52
+ page_renderer(view, [], "#{controller_name}/#{EMPTY_PAGE}")
55
53
  end
56
54
 
57
- prepare_view!(view)
58
- included_taglibs = if view.controller.class.respond_to? :included_taglibs
59
- view.controller.class.included_taglibs
60
- else
61
- []
62
- end
63
-
64
- if page == EMPTY_PAGE
65
- @tag_page_renderer_classes[view.controller.class.name] ||= make_renderer_class("", EMPTY_PAGE, local_names,
66
- [Hobo::HoboHelper, ApplicationHelper], included_taglibs)
67
- @tag_page_renderer_classes[view.controller.class.name].new(page, view)
68
- else
55
+
56
+ def page_renderer(view, local_names=[], page=nil)
57
+ if RAILS_ENV == "development"
58
+ clear_cache
59
+ Taglib.clear_cache
60
+ end
69
61
  page ||= view.instance_variable_get('@hobo_template_path')
70
- template_path = "app/views/" + page + ".dryml"
71
- src_file = File.new(File.join(RAILS_ROOT, template_path))
72
- renderer_class = @renderer_classes[page]
73
-
74
- # do we need to recompile?
75
- if (!renderer_class or # nothing cached?
76
- (local_names - renderer_class.compiled_local_names).any? or # any new local names?
77
- renderer_class.load_time < src_file.mtime) # cache out of date?
78
- renderer_class = make_renderer_class(src_file.read, template_path, local_names,
79
- default_imports_for_view(view), included_taglibs)
80
- renderer_class.load_time = src_file.mtime
81
- @renderer_classes[page] = renderer_class
62
+
63
+ prepare_view!(view)
64
+ included_taglibs = ([subsite_taglib(page)] + controller_taglibs(page)).compact
65
+
66
+ if page.ends_with?(EMPTY_PAGE)
67
+ controller_class = controller_class_for(page)
68
+ @tag_page_renderer_classes[controller_class.name] ||=
69
+ make_renderer_class("", page, local_names, DEFAULT_IMPORTS, included_taglibs)
70
+ @tag_page_renderer_classes[controller_class.name].new(page, view)
71
+ else
72
+ template_path = "app/views/" + page + ".dryml"
73
+ src_file = File.new(File.join(RAILS_ROOT, template_path))
74
+ renderer_class = @renderer_classes[page]
75
+
76
+ # do we need to recompile?
77
+ if (!renderer_class or # nothing cached?
78
+ (local_names - renderer_class.compiled_local_names).any? or # any new local names?
79
+ renderer_class.load_time < src_file.mtime) # cache out of date?
80
+ renderer_class = make_renderer_class(src_file.read, template_path, local_names,
81
+ DEFAULT_IMPORTS, included_taglibs)
82
+ renderer_class.load_time = src_file.mtime
83
+ @renderer_classes[page] = renderer_class
84
+ end
85
+ renderer_class.new(page, view)
86
+ end
87
+ end
88
+
89
+
90
+ def controller_class_for(page)
91
+ controller, view = Controller.controller_and_view_for(page)
92
+ "#{controller.camelize}Controller".constantize
93
+ end
94
+
95
+
96
+ def controller_taglibs(page)
97
+ controller_class = controller_class_for(page)
98
+ (controller_class.respond_to?(:included_taglibs) && controller_class.included_taglibs) || []
99
+ end
100
+
101
+
102
+ def subsite_taglib(page)
103
+ parts = page.split("/")
104
+ if parts.length == 3
105
+ subsite = parts.first
106
+ "taglibs/#{subsite}" if File.exists?("#{RAILS_ROOT}/app/views/taglibs/#{subsite}.dryml")
82
107
  end
83
- renderer_class.new(page, view)
84
108
  end
85
- end
86
109
 
87
110
 
88
- def prepare_view!(view)
89
- # Not sure why this isn't done for me...
90
- # There's probably a button to press round here somewhere
91
- for var in %w(@flash @cookies @action_name @_session @_request @request_origin
111
+ def prepare_view!(view)
112
+ # Not sure why this isn't done for me...
113
+ # There's probably a button to press round here somewhere
114
+ for var in %w(@flash @cookies @action_name @_session @_request @request_origin
92
115
  @template @request @ignore_missing_templates @_headers @variables_added
93
116
  @_flash @response @template_class
94
117
  @_cookies @before_filter_chain_aborted @url
95
118
  @_response @template_root @headers @_params @params @session)
96
- unless @view.instance_variables.include?(var)
97
- view.instance_variable_set(var, view.controller.instance_variable_get(var))
119
+ unless @view.instance_variables.include?(var)
120
+ view.instance_variable_set(var, view.controller.instance_variable_get(var))
121
+ end
98
122
  end
99
123
  end
100
124
 
101
- end
102
-
103
-
104
- def default_imports_for_view(view)
105
- imports = [Hobo::HoboHelper, ApplicationHelper]
106
- controller_helper = view.controller.class.name.sub(/Controller$/, "Helper")
107
- imports << controller_helper.constantize if Object.const_defined? controller_helper
108
- imports
109
- end
110
-
111
-
112
- def make_renderer_class(template_src, template_path, locals, imports, included_taglibs=[])
113
- renderer_class = Class.new(TemplateEnvironment)
114
- compile_renderer_class(renderer_class, template_src, template_path, locals, imports, included_taglibs)
115
- renderer_class
116
- end
125
+
126
+ def make_renderer_class(template_src, template_path, locals, imports, included_taglibs=[])
127
+ renderer_class = Class.new(TemplateEnvironment)
128
+ compile_renderer_class(renderer_class, template_src, template_path, locals, imports, included_taglibs)
129
+ renderer_class
130
+ end
117
131
 
118
-
119
- def compile_renderer_class(renderer_class, template_src, template_path, locals, imports, included_taglibs=[])
120
- template = Template.new(template_src, renderer_class, template_path)
121
- imports.each {|m| template.import_module(m)}
132
+
133
+ def compile_renderer_class(renderer_class, template_src, template_path, locals, imports, included_taglibs=[])
134
+ template = Template.new(template_src, renderer_class, template_path)
135
+ imports.each {|m| template.import_module(m)}
122
136
 
123
- taglibs = [CORE_TAGLIB, APPLICATION_TAGLIB] + included_taglibs
137
+ taglibs = [CORE_TAGLIB, APPLICATION_TAGLIB] + included_taglibs
124
138
 
125
- # the sum of all the names we've seen so far - eventually we'll be ready for all of 'em
126
- all_local_names = renderer_class.compiled_local_names | locals
139
+ # the sum of all the names we've seen so far - eventually we'll be ready for all of 'em
140
+ all_local_names = renderer_class.compiled_local_names | locals
127
141
 
128
- template.compile(all_local_names, taglibs)
129
- end
142
+ template.compile(all_local_names, taglibs)
143
+ end
130
144
 
131
-
132
- def unreserve(word)
133
- word = word.to_s
134
- if RESERVED_WORDS.include?(word)
135
- word + "_"
136
- else
137
- word
145
+
146
+ def unreserve(word)
147
+ word = word.to_s
148
+ if RESERVED_WORDS.include?(word)
149
+ word + "_"
150
+ else
151
+ word
152
+ end
138
153
  end
154
+
139
155
  end
140
-
156
+
141
157
  end
142
158
 
143
159
  end
@@ -94,7 +94,8 @@ module Hobo::Dryml
94
94
  @environment.send(:alias_method, instruction[:new], instruction[:old])
95
95
 
96
96
  else
97
- raise RuntimeError.new("DRYML: Unknown build instruction :#{instruction[:type]}, building #{template_path}")
97
+ raise RuntimeError.new("DRYML: Unknown build instruction :#{instruction[:type]}, " +
98
+ "building #{template_path}")
98
99
  end
99
100
  end
100
101
  @last_build_time = Time.now
@@ -20,7 +20,7 @@ module Hobo
20
20
 
21
21
  contexts.map do |dom_id, context|
22
22
  code = context.marshal(session).split("\n").map{|line| "'#{line}\\n'"}.join(" +\n ")
23
- "hoboParts.#{dom_id} = (#{code})\n"
23
+ "hoboParts.#{dom_id} = (#{code});\n"
24
24
  end.join
25
25
  end
26
26
 
@@ -28,7 +28,7 @@ module Hobo
28
28
  def initialize(part_name, this_id, locals)
29
29
  @part_name = part_name
30
30
  @this_id = this_id
31
- @locals = locals.map {|l| pre_marshal(l) }
31
+ @locals = locals.map { |l| pre_marshal(l) }
32
32
  end
33
33
 
34
34
 
@@ -66,6 +66,7 @@ module Hobo
66
66
  raise TamperedWithPartContext unless digest == generate_digest(data, session)
67
67
 
68
68
  part_name, this_id, locals = Marshal.load(Base64.decode64(data))
69
+ RAILS_DEFAULT_LOGGER.info("Call part: #{part_name}. this-id = #{this_id}, locals = #{locals.inspect}")
69
70
 
70
71
  [part_name, restore_part_this(this_id, this), restore_locals(locals)]
71
72
  end
@@ -37,13 +37,29 @@ module Hobo::Dryml
37
37
 
38
38
  def load
39
39
  @module = Module.new do
40
+
40
41
  @tag_attrs = {}
41
- def self._register_tag_attrs(tag_name, attrs)
42
- @tag_attrs[tag_name] = attrs
43
- end
42
+ @tag_aliases = {}
43
+
44
44
  class << self
45
+
46
+ def included(base)
47
+ @tag_aliases.each do |tag, feature|
48
+ base.send(:alias_tag_chain, tag, feature)
49
+ end
50
+ end
51
+
52
+ def _register_tag_attrs(tag, attrs)
53
+ @tag_attrs[tag] = attrs
54
+ end
45
55
  attr_reader :tag_attrs
56
+
57
+ def _alias_tag_chain(tag, feature)
58
+ @tag_aliases[tag] = feature
59
+ end
60
+
46
61
  end
62
+
47
63
  end
48
64
  @file.rewind
49
65
  template = Template.new(@file.read, @module, @file.path)
@@ -9,7 +9,11 @@ module Hobo::Dryml
9
9
 
10
10
  CODE_ATTRIBUTE_CHAR = "&"
11
11
 
12
- SPECIAL_ATTRIBUTES = %w(param merge_attrs for_type if unless repeat part restore)
12
+ SPECIAL_ATTRIBUTES = %w(param merge merge_params merge_attrs
13
+ for_type
14
+ if unless repeat
15
+ part part_locals
16
+ restore)
13
17
 
14
18
  @build_cache = {}
15
19
 
@@ -39,7 +43,7 @@ module Hobo::Dryml
39
43
  def compile(local_names=[], auto_taglibs=[])
40
44
  now = Time.now
41
45
 
42
- unless @template_path == EMPTY_PAGE
46
+ unless @template_path.ends_with?(EMPTY_PAGE)
43
47
  filename = RAILS_ROOT + (@template_path.starts_with?("/") ? @template_path : "/" + @template_path)
44
48
  mtime = File.stat(filename).mtime rescue nil
45
49
  end
@@ -230,7 +234,7 @@ module Hobo::Dryml
230
234
  require_attribute(el, "tag", DRYML_NAME_RX)
231
235
  require_attribute(el, "attrs", /^\s*#{DRYML_NAME}(\s*,\s*#{DRYML_NAME})*\s*$/, true)
232
236
  require_attribute(el, "alias_of", DRYML_NAME_RX, true)
233
- require_attribute(el, "alias_current_as", DRYML_NAME_RX, true)
237
+ require_attribute(el, "extend_with", DRYML_NAME_RX, true)
234
238
 
235
239
  unsafe_name = el.attributes["tag"]
236
240
  name = Hobo::Dryml.unreserve(unsafe_name)
@@ -254,26 +258,28 @@ module Hobo::Dryml
254
258
  @def_name = @def_name ? "#{@def_name}_#{unsafe_name}" : unsafe_name
255
259
 
256
260
  alias_of = el.attributes['alias_of']
257
- alias_current = el.attributes['alias_current_as']
261
+ extend_with = el.attributes['extend_with']
258
262
 
259
- dryml_exception("def cannot have both alias_of and alias_current_as", el) if alias_of && alias_current
263
+ dryml_exception("def cannot have both alias_of and extend_with", el) if alias_of && extend_with
260
264
  dryml_exception("def with alias_of must be empty", el) if alias_of and el.size > 0
261
265
 
262
- if alias_of || alias_current
263
- old_name = alias_current ? name : alias_of
264
- new_name = alias_current ? alias_current : name
265
-
266
- @builder.add_build_instruction(:alias_method, :new => new_name.to_sym, :old => old_name.to_sym)
267
- end
266
+
267
+ @builder.add_build_instruction(:alias_method,
268
+ :new => name.to_sym, :old => alias_of.to_sym) if alias_of
268
269
 
269
270
  res = if alias_of
270
271
  "<% #{tag_newlines(el)} %>"
271
272
  else
272
- src = if template_name?(name)
273
- template_method(name, el)
274
- else
275
- tag_method(name, el)
276
- end
273
+ src = ""
274
+ if extend_with
275
+ src << "<% _alias_tag_chain :#{name}, :#{extend_with} %>"
276
+ name = extended_name(name, extend_with)
277
+ end
278
+ src << if template_name?(name)
279
+ template_method(name, el)
280
+ else
281
+ tag_method(name, el)
282
+ end
277
283
  src << "<% _register_tag_attrs(:#{name}, #{declared_attributes(el).inspect}) %>"
278
284
 
279
285
  logger.debug(restore_erb_scriptlets(src)) if el.attributes["debug_source"]
@@ -289,8 +295,17 @@ module Hobo::Dryml
289
295
  end
290
296
 
291
297
 
298
+ def extended_name(name, feature)
299
+ if template_name?(name)
300
+ "#{name}With#{feature.camelize}"
301
+ else
302
+ "#{name}_with_#{feature}"
303
+ end
304
+ end
305
+
306
+
292
307
  def template_call?(el)
293
- template_name?(el.name)
308
+ template_name?(el.dryml_name)
294
309
  end
295
310
 
296
311
 
@@ -386,7 +401,7 @@ module Hobo::Dryml
386
401
 
387
402
  part_locals = el.attributes["part_locals"]
388
403
 
389
- part_src = "<% def #{part_name}_part(#{part_locals}) #{tag_newlines(el)}; new_context do %>" +
404
+ part_src = "<% def #{part_name}_part(#{part_locals._?.gsub('@', '')}) #{tag_newlines(el)}; new_context do %>" +
390
405
  content +
391
406
  "<% end; end %>"
392
407
  @builder.add_part(part_name, restore_erb_scriptlets(part_src), element_line_num(el))
@@ -408,9 +423,9 @@ module Hobo::Dryml
408
423
 
409
424
  res = param_name == "&true" ? el.dryml_name : param_name
410
425
 
411
- dryml_exception("param name for a template call must be capitalised", el) if
426
+ dryml_exception("param '#{res}' is for a template call must be capitalised", el) if
412
427
  res && template_call?(el) && !template_name?(res)
413
- dryml_exception("param name for a block-tag call must not be capitalised", el) if
428
+ dryml_exception("param '#{res}' is for a block-tag call and must not be capitalised", el) if
414
429
  res && !template_call?(el) && template_name?(res)
415
430
 
416
431
  res
@@ -456,7 +471,7 @@ module Hobo::Dryml
456
471
  to_call = if is_param_default_call
457
472
  # The tag is available in a local variable
458
473
  # holding a proc
459
- el.dryml_name
474
+ name
460
475
  elsif (call_type = polymorphic_call_type(el))
461
476
  "find_polymorphic_template(:#{name}, #{call_type})"
462
477
  else
@@ -501,9 +516,9 @@ module Hobo::Dryml
501
516
  param_name = get_param_name(e)
502
517
  if param_name
503
518
  if template_call?(e)
504
- ":#{e.name} => merge_template_parameter_procs(#{template_proc(e)}, all_parameters[:#{param_name}]), "
519
+ ":#{e.name} => merge_template_parameter(#{template_proc(e)}, all_parameters[:#{param_name}]), "
505
520
  else
506
- ":#{e.name} => merge_option_procs(#{template_proc(e)}, all_parameters[:#{param_name}]), "
521
+ ":#{e.name} => merge_block_tag_parameter(#{template_proc(e)}, all_parameters[:#{param_name}]), "
507
522
  end
508
523
  else
509
524
  ":#{e.name} => #{template_proc(e)}, "
@@ -580,7 +595,7 @@ module Hobo::Dryml
580
595
  to_call = if is_param_default_call
581
596
  # The tag is available in a local variable
582
597
  # holding a proc
583
- el.dryml_name
598
+ name
584
599
  elsif (call_type = polymorphic_call_type(el))
585
600
  "find_polymorphic_tag(:#{name}, #{call_type})"
586
601
  else
@@ -644,7 +659,7 @@ module Hobo::Dryml
644
659
  else
645
660
  dryml_exception("invalid merge_attrs", el)
646
661
  end
647
- "{#{items}}.merge((#{extra_attributes}) || {})"
662
+ "merge_attrs({#{items}},(#{extra_attributes}) || {})"
648
663
  else
649
664
  "{#{items}}"
650
665
  end