hobo 0.7.3 → 0.7.4

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 (46) hide show
  1. data/bin/hobo +1 -1
  2. data/hobo_files/plugin/CHANGES.txt +302 -0
  3. data/hobo_files/plugin/generators/hobo_front_controller/templates/index.dryml +2 -9
  4. data/hobo_files/plugin/generators/hobo_model/templates/model.rb +1 -1
  5. data/hobo_files/plugin/generators/hobo_model_resource/hobo_model_resource_generator.rb +0 -2
  6. data/hobo_files/plugin/generators/hobo_rapid/templates/hobo-rapid.js +76 -46
  7. data/hobo_files/plugin/generators/hobo_rapid/templates/lowpro.js +25 -18
  8. data/hobo_files/plugin/generators/hobo_rapid/templates/themes/clean/public/stylesheets/application.css +29 -11
  9. data/hobo_files/plugin/generators/hobo_user_model/templates/model.rb +2 -2
  10. data/hobo_files/plugin/init.rb +0 -1
  11. data/hobo_files/plugin/lib/active_record/has_many_association.rb +3 -0
  12. data/hobo_files/plugin/lib/hobo.rb +12 -8
  13. data/hobo_files/plugin/lib/hobo/bundle.rb +1 -1
  14. data/hobo_files/plugin/lib/hobo/dryml/dryml_builder.rb +1 -1
  15. data/hobo_files/plugin/lib/hobo/dryml/parser/attribute.rb +41 -0
  16. data/hobo_files/plugin/lib/hobo/dryml/parser/base_parser.rb +253 -0
  17. data/hobo_files/plugin/lib/hobo/dryml/parser/document.rb +26 -0
  18. data/hobo_files/plugin/lib/hobo/dryml/parser/element.rb +27 -0
  19. data/hobo_files/plugin/lib/hobo/dryml/parser/elements.rb +45 -0
  20. data/hobo_files/plugin/lib/hobo/dryml/parser/source.rb +58 -0
  21. data/hobo_files/plugin/lib/hobo/dryml/parser/text.rb +13 -0
  22. data/hobo_files/plugin/lib/hobo/dryml/parser/tree_parser.rb +67 -0
  23. data/hobo_files/plugin/lib/hobo/dryml/scoped_variables.rb +10 -5
  24. data/hobo_files/plugin/lib/hobo/dryml/template.rb +48 -27
  25. data/hobo_files/plugin/lib/hobo/dryml/template_environment.rb +28 -13
  26. data/hobo_files/plugin/lib/hobo/hobo_helper.rb +3 -1
  27. data/hobo_files/plugin/lib/hobo/model.rb +70 -10
  28. data/hobo_files/plugin/lib/hobo/model_controller.rb +49 -34
  29. data/hobo_files/plugin/lib/hobo/model_router.rb +10 -2
  30. data/hobo_files/plugin/lib/hobo/rapid_helper.rb +1 -0
  31. data/hobo_files/plugin/lib/hobo/scopes.rb +15 -0
  32. data/hobo_files/plugin/lib/hobo/scopes/apply_scopes.rb +23 -0
  33. data/hobo_files/plugin/lib/hobo/scopes/association_proxy_extensions.rb +4 -2
  34. data/hobo_files/plugin/lib/hobo/scopes/automatic_scopes.rb +34 -7
  35. data/hobo_files/plugin/lib/hobo/scopes/defined_scope_proxy_extender.rb +3 -1
  36. data/hobo_files/plugin/lib/hobo/scopes/scoped_proxy.rb +1 -5
  37. data/hobo_files/plugin/taglibs/rapid.dryml +33 -24
  38. data/hobo_files/plugin/taglibs/rapid_editing.dryml +6 -5
  39. data/hobo_files/plugin/taglibs/rapid_forms.dryml +37 -31
  40. data/hobo_files/plugin/taglibs/rapid_generics.dryml +68 -27
  41. data/hobo_files/plugin/taglibs/rapid_navigation.dryml +5 -8
  42. data/hobo_files/plugin/taglibs/rapid_pages.dryml +71 -47
  43. data/hobo_files/plugin/taglibs/rapid_plus.dryml +4 -5
  44. data/hobo_files/plugin/taglibs/rapid_support.dryml +11 -4
  45. metadata +23 -6
  46. data/hobo_files/plugin/lib/rexml.rb +0 -443
@@ -0,0 +1,26 @@
1
+ module Hobo::Dryml::Parser
2
+
3
+ class Document < REXML::Document
4
+
5
+ attr_accessor :default_attribute_value
6
+
7
+ def initialize(source=nil, context={})
8
+ super(nil, context)
9
+ @elements = Hobo::Dryml::Parser::Elements.new(self)
10
+ if source.kind_of? Document
11
+ @context = source.context
12
+ super source
13
+ else
14
+ build( source )
15
+ end
16
+ end
17
+
18
+
19
+ private
20
+ def build( source )
21
+ Hobo::Dryml::Parser::TreeParser.new( source, self ).parse
22
+ end
23
+
24
+ end
25
+
26
+ end
@@ -0,0 +1,27 @@
1
+ module Hobo::Dryml::Parser
2
+
3
+ class Element < REXML::Element
4
+
5
+ def initialize(*args)
6
+ super
7
+ @elements = Hobo::Dryml::Parser::Elements.new(self)
8
+ end
9
+
10
+ def dryml_name
11
+ expanded_name.sub(/:.*/, "")
12
+ end
13
+
14
+ attr_accessor :start_tag_source, :source_offset
15
+
16
+ attr_writer :has_end_tag
17
+ def has_end_tag?
18
+ @has_end_tag
19
+ end
20
+
21
+ def parameter_tag?
22
+ expanded_name =~ /:$/
23
+ end
24
+
25
+ end
26
+
27
+ end
@@ -0,0 +1,45 @@
1
+ module Hobo::Dryml::Parser
2
+
3
+ class Element < REXML::Element
4
+
5
+ def initialize(*args)
6
+ super
7
+ @elements = Hobo::Dryml::Parser::Elements.new(self)
8
+ end
9
+
10
+ def dryml_name
11
+ expanded_name.sub(/:.*/, "")
12
+ end
13
+
14
+ attr_accessor :start_tag_source, :source_offset
15
+
16
+ attr_writer :has_end_tag
17
+ def has_end_tag?
18
+ @has_end_tag
19
+ end
20
+
21
+ def parameter_tag?
22
+ expanded_name =~ /:$/
23
+ end
24
+
25
+ end
26
+
27
+ class Elements < REXML::Elements
28
+
29
+ # Override to ensure DRYML elements are created
30
+ def add(element=nil)
31
+ rv = nil
32
+ if element.nil?
33
+ Hobo::Dryml::Parser::Element.new("", self, @element.context)
34
+ elsif not element.kind_of?(Element)
35
+ Hobo::Dryml::Parser::Element.new(element, self, @element.context)
36
+ else
37
+ @element << element
38
+ element.context = @element.context
39
+ element
40
+ end
41
+ end
42
+
43
+ end
44
+
45
+ end
@@ -0,0 +1,58 @@
1
+ module Hobo::Dryml::Parser
2
+
3
+ # A REXML source that keeps track of where in the buffer it is
4
+ class Source < REXML::Source
5
+
6
+ def initialize(src)
7
+ super(src)
8
+ @buffer_offset = 0
9
+ end
10
+
11
+ attr_reader :last_match_offset
12
+
13
+ def remember_match(m)
14
+ if m
15
+ @last_match = m
16
+ @last_match_offset = @buffer_offset + m.begin(0)
17
+ @orig[@last_match_offset..@last_match_offset+m[0].length] == @buffer[m.begin(0)..m.end(0)]
18
+ end
19
+ m
20
+ end
21
+
22
+ def advance_buffer(md)
23
+ @buffer = md.post_match
24
+ @buffer_offset += md.end(0)
25
+ end
26
+
27
+ def scan(pattern, cons=false)
28
+ raise '!'
29
+ return nil if @buffer.nil?
30
+ rv = @buffer.scan(pattern)
31
+ if cons and rv.size > 0
32
+ advance_buffer(Regexp.last_match)
33
+ end
34
+ rv
35
+ end
36
+
37
+ def consume(pattern)
38
+ md = remember_match(pattern.match(@buffer))
39
+ if md
40
+ advance_buffer(md)
41
+ @buffer
42
+ end
43
+ end
44
+
45
+ def match(pattern, cons=false)
46
+ md = remember_match(pattern.match(@buffer))
47
+ advance_buffer(md) if cons and md
48
+ return md
49
+ end
50
+
51
+ def current_line
52
+ pos = last_match_offset || 0
53
+ [0, 0, @orig[0..pos].count("\n") + 1]
54
+ end
55
+
56
+ end
57
+
58
+ end
@@ -0,0 +1,13 @@
1
+ module Hobo::Dryml::Parser
2
+
3
+ class Text < REXML::Text
4
+
5
+ def parent=(parent)
6
+ # Bypass immediate super
7
+ REXML::Child.instance_method(:parent=).bind(self).call(parent)
8
+ Text.check(@string, /</, nil) if @raw and @parent && Text.respond_to?(:check)
9
+ end
10
+
11
+ end
12
+
13
+ end
@@ -0,0 +1,67 @@
1
+ module Hobo::Dryml::Parser
2
+
3
+ class TreeParser < REXML::Parsers::TreeParser
4
+ def initialize( source, build_context = Document.new )
5
+ @build_context = build_context
6
+ @parser = Hobo::Dryml::Parser::BaseParser.new(source)
7
+ end
8
+
9
+
10
+ def parse
11
+ tag_stack = []
12
+ in_doctype = false
13
+ entities = nil
14
+ begin
15
+ while true
16
+ event = @parser.pull
17
+ #STDERR.puts "TREEPARSER GOT #{event.inspect}"
18
+ case event[0]
19
+ when :end_document
20
+ unless tag_stack.empty?
21
+ #raise ParseException.new("No close tag for #{tag_stack.inspect}")
22
+ raise ParseException.new("No close tag for #{@build_context.xpath}")
23
+ end
24
+ return
25
+ when :start_element
26
+ tag_stack.push(event[1])
27
+ el = @build_context = @build_context.add_element( event[1] )
28
+ event[2].each do |key, value|
29
+ el.attributes[key]=Hobo::Dryml::Parser::Attribute.new(key,value,self)
30
+ end
31
+ @build_context.start_tag_source = event[3]
32
+ @build_context.source_offset = event[4]
33
+ when :end_element
34
+ tag_stack.pop
35
+ @build_context.has_end_tag = event[2]
36
+ @build_context = @build_context.parent
37
+ when :text
38
+ if not in_doctype
39
+ if @build_context[-1].instance_of? Text
40
+ @build_context[-1] << event[1]
41
+ else
42
+ @build_context.add(
43
+ Hobo::Dryml::Parser::Text.new(event[1], @build_context.whitespace, nil, true)
44
+ ) unless (
45
+ @build_context.ignore_whitespace_nodes and
46
+ event[1].strip.size==0
47
+ )
48
+ end
49
+ end
50
+ when :comment
51
+ c = REXML::Comment.new( event[1] )
52
+ @build_context.add( c )
53
+ when :cdata
54
+ c = REXML::CData.new( event[1] )
55
+ @build_context.add( c )
56
+ when :processing_instruction
57
+ @build_context.add( Instruction.new( event[1], event[2] ) )
58
+ end
59
+ end
60
+ rescue REXML::Validation::ValidationException
61
+ raise
62
+ rescue
63
+ raise REXML::ParseException.new( $!.message, @parser.source, @parser, $! )
64
+ end
65
+ end
66
+ end
67
+ end
@@ -7,14 +7,12 @@ module Hobo::Dryml
7
7
  end
8
8
 
9
9
  def [](key)
10
- @scopes.reverse_each do |s|
11
- return s[key] if s.has_key?(key)
12
- end
13
- nil
10
+ s = scope_with_key(key) and s[key]
14
11
  end
15
12
 
16
13
  def []=(key, val)
17
- @scopes.last[key] = val
14
+ s = scope_with_key(key) || @scopes.last
15
+ s[key] = val
18
16
  end
19
17
 
20
18
  def new_scope
@@ -24,6 +22,13 @@ module Hobo::Dryml
24
22
  res
25
23
  end
26
24
 
25
+ def scope_with_key(key)
26
+ @scopes.reverse_each do |s|
27
+ return s if s.has_key?(key)
28
+ end
29
+ nil
30
+ end
31
+
27
32
  def method_missing(name, *args)
28
33
  if name.to_s =~ /=$/
29
34
  self[name.to_s[0..-2].to_sym] = args.first
@@ -19,6 +19,8 @@ module Hobo::Dryml
19
19
  if unless repeat
20
20
  part part-locals
21
21
  restore)
22
+
23
+ VALID_PARAMETER_TAG_ATTRIBUTES = %w(param replace)
22
24
 
23
25
  @build_cache = {}
24
26
 
@@ -99,7 +101,7 @@ module Hobo::Dryml
99
101
 
100
102
  @xmlsrc = "<dryml_page>" + src + "</dryml_page>"
101
103
  begin
102
- @doc = REXML::Document.new(RexSource.new(@xmlsrc), :dryml_mode => true)
104
+ @doc = Hobo::Dryml::Parser::Document.new(Hobo::Dryml::Parser::Source.new(@xmlsrc))
103
105
  rescue REXML::ParseException => e
104
106
  raise DrymlSyntaxError, "File: #{@template_path}\n#{e}"
105
107
  end
@@ -253,7 +255,9 @@ module Hobo::Dryml
253
255
  if (for_type = el.attributes['for'])
254
256
  type_name = if defined?(HoboFields) && for_type =~ /^[a-z]/
255
257
  # It's a symbolic type name - look up the Ruby type name
256
- HoboFields.to_class(for_type).name
258
+ klass = HoboFields.to_class(for_type)
259
+ dryml_exception("No such type in polymorphic tag definition: '#{for_type}'", el) unless klass
260
+ klass.name
257
261
  elsif for_type =~ /^_.*_$/
258
262
  rename_class(for_type)
259
263
  else
@@ -581,50 +585,51 @@ module Hobo::Dryml
581
585
 
582
586
 
583
587
  def parameter_tag_hash_item(el, metadata_name)
584
- if el.name =~ /^before-/
585
- before_parameter_tag_hash_item(el, metadata_name)
586
- elsif el.name =~ /^after-/
587
- after_parameter_tag_hash_item(el, metadata_name)
588
- elsif el.name =~ /^prepend-/
589
- prepend_parameter_tag_hash_item(el, metadata_name)
590
- elsif el.name =~ /^append-/
591
- append_parameter_tag_hash_item(el, metadata_name)
592
- elsif (param_name = get_param_name(el))
593
- ":#{ruby_name el.name} => merge_tag_parameter(#{param_proc(el, metadata_name)}, all_parameters[:#{param_name}])"
588
+ name = el.name.dup
589
+ if name.sub!(/^before-/, "")
590
+ before_parameter_tag_hash_item(name, el, metadata_name)
591
+ elsif name.sub!(/^after-/, "")
592
+ after_parameter_tag_hash_item(name, el, metadata_name)
593
+ elsif name.sub!(/^prepend-/, "")
594
+ prepend_parameter_tag_hash_item(name, el, metadata_name)
595
+ elsif name.sub!(/^append-/, "")
596
+ append_parameter_tag_hash_item(name, el, metadata_name)
594
597
  else
595
- ":#{ruby_name el.name} => #{param_proc(el, metadata_name)}"
598
+ hash_key = ruby_name name
599
+ hash_key += "_replacement" if el.attribute("replace")
600
+ if (param_name = get_param_name(el))
601
+ ":#{hash_key} => merge_tag_parameter(#{param_proc(el, metadata_name)}, all_parameters[:#{param_name}])"
602
+ else
603
+ ":#{hash_key} => #{param_proc(el, metadata_name)}"
604
+ end
596
605
  end
597
606
  end
598
607
 
599
608
 
600
- def before_parameter_tag_hash_item(el, metadata_name)
609
+ def before_parameter_tag_hash_item(name, el, metadata_name)
601
610
  param_name = get_param_name(el)
602
611
  dryml_exception("param declaration not allowed on 'before' parameters", el) if param_name
603
- name = el.name.sub(/^before-/, "")
604
612
  content = children_to_erb(el) + "<% _output(#{param_restore_local_name(name)}.call({}, {})) %>"
605
- ":#{ruby_name name} => #{replace_parameter_proc(el, metadata_name, content)}"
613
+ ":#{ruby_name name}_replacement => #{replace_parameter_proc(el, metadata_name, content)}"
606
614
  end
607
615
 
608
616
 
609
- def after_parameter_tag_hash_item(el, metadata_name)
617
+ def after_parameter_tag_hash_item(name, el, metadata_name)
610
618
  param_name = get_param_name(el)
611
619
  dryml_exception("param declaration not allowed on 'after' parameters", el) if param_name
612
- name = el.name.sub(/^after-/, "")
613
620
  content = "<% _output(#{param_restore_local_name(name)}.call({}, {})) %>" + children_to_erb(el)
614
- ":#{ruby_name name} => #{replace_parameter_proc(el, metadata_name, content)}"
621
+ ":#{ruby_name name}_replacement => #{replace_parameter_proc(el, metadata_name, content)}"
615
622
  end
616
623
 
617
624
 
618
- def append_parameter_tag_hash_item(el, metadata_name)
619
- name = el.name.sub(/^append-/, "")
625
+ def append_parameter_tag_hash_item(name, el, metadata_name)
620
626
  ":#{ruby_name name} => proc { [{}, { :default => proc { |#{param_content_local_name(name)}| new_context { %>" +
621
627
  param_content_element(name) + children_to_erb(el) +
622
628
  "<% } } } ] }"
623
629
  end
624
630
 
625
631
 
626
- def prepend_parameter_tag_hash_item(el, metadata_name)
627
- name = el.name.sub(/^prepend-/, "")
632
+ def prepend_parameter_tag_hash_item(name, el, metadata_name)
628
633
  ":#{ruby_name name} => proc { [{}, { :default => proc { |#{param_content_local_name(name)}| new_context { %>" +
629
634
  children_to_erb(el) + param_content_element(name) +
630
635
  "<% } } } ] }"
@@ -660,8 +665,14 @@ module Hobo::Dryml
660
665
 
661
666
  replace_parameter_proc(el, metadata_name)
662
667
  else
663
- attributes = el.attributes.map do
664
- |name, value| ":#{ruby_name name} => #{attribute_to_ruby(value, el)}" unless name.in?(SPECIAL_ATTRIBUTES)
668
+ attributes = el.attributes.map do |name, value|
669
+ if name.in?(VALID_PARAMETER_TAG_ATTRIBUTES)
670
+ # just ignore
671
+ elsif name.in?(SPECIAL_ATTRIBUTES)
672
+ dryml_exception("attribute '#{name}' is not allowed on parameter tags (<#{el.name}:>)", el)
673
+ else
674
+ ":#{ruby_name name} => #{attribute_to_ruby(value, el)}"
675
+ end
665
676
  end.compact
666
677
 
667
678
  nested_parameters_hash = parameter_tags_hash(el, metadata_name)
@@ -693,6 +704,11 @@ module Hobo::Dryml
693
704
  end
694
705
 
695
706
 
707
+ def field_shorthand_element?(el)
708
+ el.expanded_name =~ /:./
709
+ end
710
+
711
+
696
712
  def tag_attributes(el)
697
713
  attributes = el.attributes
698
714
  items = attributes.map do |n,v|
@@ -704,7 +720,7 @@ module Hobo::Dryml
704
720
  end.compact
705
721
 
706
722
  # if there's a ':' el.name is just the part after the ':'
707
- items << ":field => \"#{ruby_name el.name}\"" if el.expanded_name =~ /:./
723
+ items << ":field => \"#{ruby_name el.name}\"" if field_shorthand_element?(el)
708
724
 
709
725
  items = items.join(", ")
710
726
 
@@ -765,7 +781,7 @@ module Hobo::Dryml
765
781
 
766
782
 
767
783
  def static_element_to_erb(el)
768
- if %w(part merge-attrs if unless repeat).any? {|x| el.attributes[x]}
784
+ if promote_static_tag_to_method_call?(el)
769
785
  static_tag_to_method_call(el)
770
786
  else
771
787
  start_tag_src = el.start_tag_source.gsub(REXML::CData::START, "").gsub(REXML::CData::STOP, "")
@@ -784,6 +800,11 @@ module Hobo::Dryml
784
800
  end
785
801
 
786
802
 
803
+ def promote_static_tag_to_method_call?(el)
804
+ %w(part merge-attrs if unless repeat).any? {|x| el.attributes[x]}
805
+ end
806
+
807
+
787
808
  def apply_control_attributes(expression, el)
788
809
  controls = %w(if unless repeat).map_hash { |x| el.attributes[x] }.compact
789
810
 
@@ -49,14 +49,17 @@ module Hobo::Dryml
49
49
  end
50
50
  end
51
51
 
52
- attr_accessor
53
52
 
54
53
  for attr in [:erb_binding, :part_contexts, :view_name,
55
- :this, :this_parent, :this_field,
54
+ :this, :this_parent, :this_field, :this_key,
56
55
  :form_field_path, :form_this, :form_field_names]
57
56
  class_eval "def #{attr}; @_#{attr}; end"
58
57
  end
59
58
 
59
+ def this_key=(key)
60
+ @_this_key = key
61
+ end
62
+
60
63
 
61
64
  # The type of this, or when this is nil, the type that would be expected in the current field
62
65
  def this_type
@@ -87,7 +90,8 @@ module Hobo::Dryml
87
90
 
88
91
 
89
92
  def this_field_reflection
90
- this_parent && this_field && this_parent.class.respond_to?(:reflections) && this_parent.class.reflections[this_field.to_sym]
93
+ this.try.proxy_reflection ||
94
+ (this_parent && this_field && this_parent.class.respond_to?(:reflections) && this_parent.class.reflections[this_field.to_sym])
91
95
  end
92
96
 
93
97
 
@@ -179,15 +183,17 @@ module Hobo::Dryml
179
183
 
180
184
 
181
185
  def find_polymorphic_tag(name, call_type=nil)
182
- call_type ||= (this.is_a?(Array) && this.respond_to?(:member_class) && this.try.member_class) || this_type
186
+ call_type ||= (this.is_a?(Array) && this.respond_to?(:member_class) && this.member_class) || this_type
183
187
 
184
188
  while true
185
- if call_type == ActiveRecord::Base || call_type == Object
186
- return name
187
- elsif respond_to?(poly_name = "#{name}__for_#{call_type.name.to_s.underscore.gsub('/', '__')}")
189
+ if respond_to?(poly_name = "#{name}__for_#{call_type.name.to_s.underscore.gsub('/', '__')}")
188
190
  return poly_name
189
191
  else
190
- call_type = call_type.superclass
192
+ if call_type == ActiveRecord::Base || call_type == Object
193
+ return name
194
+ else
195
+ call_type = call_type.superclass
196
+ end
191
197
  end
192
198
  end
193
199
  end
@@ -315,13 +321,14 @@ module Hobo::Dryml
315
321
 
316
322
  def call_tag_parameter(the_tag, attributes, parameters, caller_parameters, param_name)
317
323
  overriding_proc = caller_parameters[param_name]
324
+ replacing_proc = caller_parameters[:"#{param_name}_replacement"]
318
325
 
319
326
  if param_name == :default && overriding_proc
320
327
  # :default content is handled specially
321
328
 
322
329
  call_tag_parameter_with_default_content(the_tag, attributes, parameters[:default], overriding_proc)
323
-
324
- elsif overriding_proc && overriding_proc.arity == 1
330
+
331
+ elsif replacing_proc
325
332
  # The caller is replacing this parameter. Don't call the tag
326
333
  # at all, just the overriding proc, but pass the restorable
327
334
  # tag as a parameter to the overriding proc
@@ -330,9 +337,17 @@ module Hobo::Dryml
330
337
  # Call the replaced tag with the attributes and parameters
331
338
  # as given in the original tag definition, and with the
332
339
  # specialisation given on the 'restore' call
340
+
341
+ if overriding_proc
342
+ overriding_attributes, overriding_parameters = overriding_proc.call
343
+ restore_attrs = overriding_attributes.merge(restore_attrs)
344
+ restore_params = overriding_parameters.merge(restore_params)
345
+ end
346
+
333
347
  override_and_call_tag(the_tag, attributes, parameters, restore_attrs, restore_params)
334
348
  end
335
- overriding_proc.call(tag_restore)
349
+ replacing_proc.call(tag_restore)
350
+
336
351
 
337
352
  else
338
353
  overriding_attributes, overriding_parameters = overriding_proc._?.call
@@ -423,7 +438,7 @@ module Hobo::Dryml
423
438
  end
424
439
 
425
440
 
426
- def part_contexts_storage_tag
441
+ def part_contexts_javascripts
427
442
  storage = part_contexts_storage
428
443
  storage.blank? ? "" : "<script>\n#{storage}</script>\n"
429
444
  end
@@ -437,7 +452,7 @@ module Hobo::Dryml
437
452
  def render_tag(tag_name, attributes)
438
453
  method_name = tag_name.gsub('-', '_')
439
454
  if respond_to?(method_name)
440
- res = (send(method_name, attributes) + part_contexts_storage_tag).strip
455
+ res = (send(method_name, attributes) + part_contexts_javascripts).strip
441
456
 
442
457
  # TODO: Temporary hack to get the dryml metadata comments in the right place
443
458
  if RAILS_ENV == "development"