dryml 1.4.0.pre8 → 2.0.0.pre1
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.
- data/VERSION +1 -1
- data/dryml.gemspec +1 -1
- data/lib/dryml/dryml_builder.rb +1 -1
- data/lib/dryml/dryml_generator.rb +0 -12
- data/lib/dryml/part_context.rb +3 -2
- data/lib/dryml/template.rb +64 -20
- data/lib/dryml/template_environment.rb +1 -1
- metadata +6 -6
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
2.0.0.pre1
|
data/dryml.gemspec
CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.summary = "The Don't Repeat Yourself Markup Language"
|
12
12
|
s.description = "The Don't Repeat Yourself Markup Language"
|
13
13
|
|
14
|
-
s.add_runtime_dependency('actionpack', ["~> 3.
|
14
|
+
s.add_runtime_dependency('actionpack', ["~> 3.2.0"])
|
15
15
|
s.add_runtime_dependency('hobo_support', ["= #{version}"])
|
16
16
|
s.add_development_dependency('rubydoctest', [">= 1.1.3"])
|
17
17
|
s.add_development_dependency('cucumber', '~> 1.1.0')
|
data/lib/dryml/dryml_builder.rb
CHANGED
@@ -100,7 +100,7 @@ module Dryml
|
|
100
100
|
end
|
101
101
|
|
102
102
|
def erb_process(erb_src)
|
103
|
-
trim_mode = ActionView::
|
103
|
+
trim_mode = ActionView::Template::Handlers::ERB.erb_trim_mode
|
104
104
|
erb = Erubis.new(erb_src, :trim_mode => trim_mode)
|
105
105
|
res = erb.src
|
106
106
|
if res.respond_to? :force_encoding
|
@@ -174,18 +174,6 @@ require 'fileutils'
|
|
174
174
|
end
|
175
175
|
|
176
176
|
|
177
|
-
def linkable?(*args)
|
178
|
-
options = args.extract_options!
|
179
|
-
options[:subsite] = subsite
|
180
|
-
klass, action = if args.length == 1
|
181
|
-
[model, args.first]
|
182
|
-
else
|
183
|
-
args
|
184
|
-
end
|
185
|
-
Hobo::Routes.linkable?(klass, action, options)
|
186
|
-
end
|
187
|
-
|
188
|
-
|
189
177
|
def sortable_collection?(collection, model=self.model)
|
190
178
|
# There's no perfect way to detect for this, given that acts_as_list
|
191
179
|
# does not provide any metadata to reflect on, but if the :order
|
data/lib/dryml/part_context.rb
CHANGED
@@ -56,7 +56,9 @@
|
|
56
56
|
def marshal(session)
|
57
57
|
context = [@part_name, @this_id, @locals]
|
58
58
|
context << form_field_path if form_field_path
|
59
|
-
|
59
|
+
# http://stackoverflow.com/questions/2620975/strange-n-in-base64-encoded-string-in-ruby
|
60
|
+
# data = Base64.encode64(Marshal.dump(context)).strip
|
61
|
+
data = Base64.strict_encode64(Marshal.dump(context)).strip
|
60
62
|
digest = generate_digest(data, session)
|
61
63
|
"#{data}--#{digest}"
|
62
64
|
end
|
@@ -65,7 +67,6 @@
|
|
65
67
|
# Unmarshal part context to a hash and verify its integrity.
|
66
68
|
def unmarshal(client_store, page_this, session)
|
67
69
|
data, digest = CGI.unescape(client_store).strip.split('--')
|
68
|
-
|
69
70
|
raise TamperedWithPartContext unless digest == generate_digest(data, session)
|
70
71
|
|
71
72
|
context = Marshal.load(Base64.decode64(data))
|
data/lib/dryml/template.rb
CHANGED
@@ -14,6 +14,8 @@ module Dryml
|
|
14
14
|
|
15
15
|
CODE_ATTRIBUTE_CHAR = "&"
|
16
16
|
|
17
|
+
NO_METADATA_TAGS = %w(doctype if else unless repeat do with name type-name)
|
18
|
+
|
17
19
|
SPECIAL_ATTRIBUTES = %w(param merge merge-params merge-attrs
|
18
20
|
for-type
|
19
21
|
if unless repeat
|
@@ -397,9 +399,38 @@ module Dryml
|
|
397
399
|
|
398
400
|
"#{start} " +
|
399
401
|
# reproduce any line breaks in the start-tag so that line numbers are preserved
|
400
|
-
tag_newlines(el) + "%>" +
|
402
|
+
tag_newlines(el) + "%>" +
|
403
|
+
wrap_tag_method_body_with_metadata(children_to_erb(el)) +
|
404
|
+
"<% output_buffer; end"
|
405
|
+
end
|
406
|
+
|
407
|
+
# this function is now basically just a hook for DrymlFireMarker
|
408
|
+
def wrap_source_with_metadata(content, kind, name, *args)
|
409
|
+
content
|
410
|
+
end
|
411
|
+
|
412
|
+
def wrap_tag_method_body_with_metadata(content)
|
413
|
+
name = @def_element.attributes['tag']
|
414
|
+
for_ = @def_element.attributes['for']
|
415
|
+
name += " for #{for_}" if for_
|
416
|
+
wrap_source_with_metadata(content, "def", name, element_line_num(@def_element))
|
401
417
|
end
|
402
418
|
|
419
|
+
|
420
|
+
def wrap_tag_call_with_metadata(el, content)
|
421
|
+
name = el.expanded_name
|
422
|
+
param = el.attributes['param']
|
423
|
+
|
424
|
+
if param == "&true"
|
425
|
+
name += " param"
|
426
|
+
elsif param
|
427
|
+
name += " param='#{param}'"
|
428
|
+
end
|
429
|
+
|
430
|
+
wrap_source_with_metadata(content, "call", name, element_line_num(el))
|
431
|
+
end
|
432
|
+
|
433
|
+
|
403
434
|
def param_content_local_name(name)
|
404
435
|
"_#{ruby_name name}__default_content"
|
405
436
|
end
|
@@ -574,7 +605,8 @@ module Dryml
|
|
574
605
|
end
|
575
606
|
|
576
607
|
call = apply_control_attributes(call, el)
|
577
|
-
maybe_make_part_call(el, "<% concat(#{call}) %>")
|
608
|
+
call = maybe_make_part_call(el, "<% concat(#{call}) %>")
|
609
|
+
wrap_tag_call_with_metadata(el, call)
|
578
610
|
end
|
579
611
|
|
580
612
|
|
@@ -588,6 +620,8 @@ module Dryml
|
|
588
620
|
def parameter_tags_hash(el, containing_tag_name=nil)
|
589
621
|
call_type = nil
|
590
622
|
|
623
|
+
metadata_name = containing_tag_name || el.expanded_name
|
624
|
+
|
591
625
|
param_items = el.map do |node|
|
592
626
|
case node
|
593
627
|
when REXML::Text
|
@@ -612,7 +646,7 @@ module Dryml
|
|
612
646
|
end
|
613
647
|
|
614
648
|
if is_parameter_tag
|
615
|
-
parameter_tag_hash_item(e) + ", "
|
649
|
+
parameter_tag_hash_item(e, metadata_name) + ", "
|
616
650
|
end
|
617
651
|
end
|
618
652
|
end.join
|
@@ -648,52 +682,52 @@ module Dryml
|
|
648
682
|
end
|
649
683
|
|
650
684
|
|
651
|
-
def parameter_tag_hash_item(el)
|
685
|
+
def parameter_tag_hash_item(el, metadata_name)
|
652
686
|
name = el.name.dup
|
653
687
|
if name.sub!(/^before-/, "")
|
654
|
-
before_parameter_tag_hash_item(name, el)
|
688
|
+
before_parameter_tag_hash_item(name, el, metadata_name)
|
655
689
|
elsif name.sub!(/^after-/, "")
|
656
|
-
after_parameter_tag_hash_item(name, el)
|
690
|
+
after_parameter_tag_hash_item(name, el, metadata_name)
|
657
691
|
elsif name.sub!(/^prepend-/, "")
|
658
|
-
prepend_parameter_tag_hash_item(name, el)
|
692
|
+
prepend_parameter_tag_hash_item(name, el, metadata_name)
|
659
693
|
elsif name.sub!(/^append-/, "")
|
660
|
-
append_parameter_tag_hash_item(name, el)
|
694
|
+
append_parameter_tag_hash_item(name, el, metadata_name)
|
661
695
|
else
|
662
696
|
hash_key = ruby_name name
|
663
697
|
hash_key += "_replacement" if el.attribute("replace")
|
664
698
|
if (param_name = get_param_name(el))
|
665
|
-
":#{hash_key} => merge_tag_parameter(#{param_proc(el)}, all_parameters[:#{param_name}])"
|
699
|
+
":#{hash_key} => merge_tag_parameter(#{param_proc(el, metadata_name)}, all_parameters[:#{param_name}])"
|
666
700
|
else
|
667
|
-
":#{hash_key} => #{param_proc(el)}"
|
701
|
+
":#{hash_key} => #{param_proc(el, metadata_name)}"
|
668
702
|
end
|
669
703
|
end
|
670
704
|
end
|
671
705
|
|
672
706
|
|
673
|
-
def before_parameter_tag_hash_item(name, el)
|
707
|
+
def before_parameter_tag_hash_item(name, el, metadata_name)
|
674
708
|
param_name = get_param_name(el)
|
675
709
|
dryml_exception("param declaration not allowed on 'before' parameters", el) if param_name
|
676
710
|
content = children_to_erb(el) + "<% concat(#{param_restore_local_name(name)}.call({}, {})) %>"
|
677
|
-
":#{ruby_name name}_replacement => #{replace_parameter_proc(el, content)}"
|
711
|
+
":#{ruby_name name}_replacement => #{replace_parameter_proc(el, metadata_name, content)}"
|
678
712
|
end
|
679
713
|
|
680
714
|
|
681
|
-
def after_parameter_tag_hash_item(name, el)
|
715
|
+
def after_parameter_tag_hash_item(name, el, metadata_name)
|
682
716
|
param_name = get_param_name(el)
|
683
717
|
dryml_exception("param declaration not allowed on 'after' parameters", el) if param_name
|
684
718
|
content = "<% concat(#{param_restore_local_name(name)}.call({}, {})) %>" + children_to_erb(el)
|
685
|
-
":#{ruby_name name}_replacement => #{replace_parameter_proc(el, content)}"
|
719
|
+
":#{ruby_name name}_replacement => #{replace_parameter_proc(el, metadata_name, content)}"
|
686
720
|
end
|
687
721
|
|
688
722
|
|
689
|
-
def append_parameter_tag_hash_item(name, el)
|
723
|
+
def append_parameter_tag_hash_item(name, el, metadata_name)
|
690
724
|
":#{ruby_name name} => proc { [{}, { :default => proc { |#{param_content_local_name(name)}| new_context { %>" +
|
691
725
|
param_content_element(name) + children_to_erb(el) +
|
692
726
|
"<% ; output_buffer } } } ] }"
|
693
727
|
end
|
694
728
|
|
695
729
|
|
696
|
-
def prepend_parameter_tag_hash_item(name, el)
|
730
|
+
def prepend_parameter_tag_hash_item(name, el, metadata_name)
|
697
731
|
":#{ruby_name name} => proc { [{}, { :default => proc { |#{param_content_local_name(name)}| new_context { %>" +
|
698
732
|
children_to_erb(el) + param_content_element(name) +
|
699
733
|
"<% ; output_buffer } } } ] }"
|
@@ -702,6 +736,8 @@ module Dryml
|
|
702
736
|
|
703
737
|
def default_param_proc(el, containing_param_name=nil)
|
704
738
|
content = children_to_erb(el)
|
739
|
+
content = wrap_source_with_metadata(content, "param", containing_param_name,
|
740
|
+
element_line_num(el)) if containing_param_name
|
705
741
|
"proc { |#{param_content_local_name(el.dryml_name)}| new_context { %>#{content}<% ; output_buffer } #{tag_newlines(el)}}"
|
706
742
|
end
|
707
743
|
|
@@ -711,14 +747,21 @@ module Dryml
|
|
711
747
|
end
|
712
748
|
|
713
749
|
|
714
|
-
def
|
750
|
+
def wrap_replace_parameter(el, name)
|
751
|
+
wrap_source_with_metadata(children_to_erb(el), "replace", name, element_line_num(el))
|
752
|
+
end
|
753
|
+
|
754
|
+
|
755
|
+
def param_proc(el, metadata_name_suffix)
|
756
|
+
metadata_name = "#{el.name} < #{metadata_name_suffix}"
|
757
|
+
|
715
758
|
nl = tag_newlines(el)
|
716
759
|
|
717
760
|
if (repl = el.attribute("replace"))
|
718
761
|
dryml_exception("replace attribute must not have a value", el) if repl.has_rhs?
|
719
762
|
dryml_exception("replace parameters must not have attributes", el) if el.attributes.length > 1
|
720
763
|
|
721
|
-
replace_parameter_proc(el, children_to_erb(el))
|
764
|
+
replace_parameter_proc(el, metadata_name, children_to_erb(el))
|
722
765
|
else
|
723
766
|
attributes = el.attributes.dup
|
724
767
|
# Providing one of 'with' or 'field' but not the other should cancel out the other
|
@@ -734,13 +777,14 @@ module Dryml
|
|
734
777
|
end
|
735
778
|
end.compact
|
736
779
|
|
737
|
-
nested_parameters_hash = parameter_tags_hash(el)
|
780
|
+
nested_parameters_hash = parameter_tags_hash(el, metadata_name)
|
738
781
|
"proc { [{#{attribute_items * ', '}}, #{nested_parameters_hash}] #{nl}}"
|
739
782
|
end
|
740
783
|
end
|
741
784
|
|
742
785
|
|
743
|
-
def replace_parameter_proc(el, content=nil)
|
786
|
+
def replace_parameter_proc(el, metadata_name, content=nil)
|
787
|
+
content ||= wrap_replace_parameter(el, metadata_name)
|
744
788
|
param_name = el.dryml_name.sub(/^(before|after|append|prepend)-/, "")
|
745
789
|
"proc { |#{param_restore_local_name(param_name)}| new_context { %>#{content}<% ; output_buffer } #{tag_newlines(el)}}"
|
746
790
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dryml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0.pre1
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-09-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: actionpack
|
@@ -18,7 +18,7 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 3.
|
21
|
+
version: 3.2.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 3.
|
29
|
+
version: 3.2.0
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: hobo_support
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -34,7 +34,7 @@ dependencies:
|
|
34
34
|
requirements:
|
35
35
|
- - '='
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version:
|
37
|
+
version: 2.0.0.pre1
|
38
38
|
type: :runtime
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -42,7 +42,7 @@ dependencies:
|
|
42
42
|
requirements:
|
43
43
|
- - '='
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
45
|
+
version: 2.0.0.pre1
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
47
|
name: rubydoctest
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|