erector 0.7.2 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.txt +17 -3
- data/VERSION.yml +2 -2
- data/bin/erector +1 -1
- data/lib/erector.rb +22 -2
- data/lib/erector/after_initialize.rb +34 -0
- data/lib/erector/caching.rb +93 -0
- data/lib/erector/convenience.rb +58 -0
- data/lib/erector/dependencies.rb +24 -0
- data/lib/erector/dependency.rb +21 -0
- data/lib/erector/{erect.rb → erect/erect.rb} +14 -4
- data/lib/erector/{erected.rb → erect/erected.rb} +6 -4
- data/lib/erector/{indenting.rb → erect/indenting.rb} +0 -0
- data/lib/erector/{rhtml.treetop → erect/rhtml.treetop} +51 -11
- data/lib/erector/errors.rb +12 -0
- data/lib/erector/extensions/hash.rb +21 -0
- data/lib/erector/externals.rb +88 -24
- data/lib/erector/html.rb +352 -0
- data/lib/erector/inline.rb +5 -5
- data/lib/erector/jquery.rb +36 -0
- data/lib/erector/mixin.rb +3 -5
- data/lib/erector/needs.rb +94 -0
- data/lib/erector/output.rb +117 -0
- data/lib/erector/rails.rb +2 -2
- data/lib/erector/rails/extensions/action_controller.rb +5 -3
- data/lib/erector/rails/extensions/rails_helpers.rb +159 -0
- data/lib/erector/rails/extensions/rails_widget.rb +98 -56
- data/lib/erector/rails/rails_form_builder.rb +8 -4
- data/lib/erector/rails/rails_version.rb +2 -2
- data/lib/erector/rails/template_handlers/ert_handler.rb +1 -1
- data/lib/erector/rails/template_handlers/rb_handler.rb +42 -1
- data/lib/erector/raw_string.rb +2 -2
- data/lib/erector/sass.rb +22 -0
- data/lib/erector/widget.rb +100 -653
- data/lib/erector/widgets.rb +1 -0
- data/lib/erector/widgets/external_renderer.rb +51 -0
- data/lib/erector/widgets/page.rb +45 -63
- data/lib/erector/widgets/table.rb +9 -1
- data/spec/erect/erect_rails_spec.rb +19 -17
- data/spec/erect/erect_spec.rb +11 -1
- data/spec/erect/erected_spec.rb +76 -5
- data/spec/erect/rhtml_parser_spec.rb +11 -1
- data/spec/erector/caching_spec.rb +267 -0
- data/spec/erector/convenience_spec.rb +258 -0
- data/spec/erector/dependency_spec.rb +46 -0
- data/spec/erector/externals_spec.rb +233 -0
- data/spec/erector/html_spec.rb +508 -0
- data/spec/erector/indentation_spec.rb +84 -24
- data/spec/erector/inline_spec.rb +19 -8
- data/spec/erector/jquery_spec.rb +35 -0
- data/spec/erector/mixin_spec.rb +1 -1
- data/spec/erector/needs_spec.rb +120 -0
- data/spec/erector/output_spec.rb +199 -0
- data/spec/erector/sample-file.txt +1 -0
- data/spec/erector/sass_spec.rb +33 -0
- data/spec/erector/widget_spec.rb +113 -932
- data/spec/erector/widgets/field_table_spec.rb +6 -6
- data/spec/erector/widgets/form_spec.rb +3 -3
- data/spec/erector/widgets/page_spec.rb +52 -6
- data/spec/erector/widgets/table_spec.rb +4 -4
- data/spec/spec_helper.rb +70 -29
- metadata +56 -19
- data/lib/erector/rails/extensions/rails_widget/rails_helpers.rb +0 -137
- data/spec/core_spec_suite.rb +0 -3
- data/spec/erector/external_spec.rb +0 -110
- data/spec/rails_spec_suite.rb +0 -3
- data/spec/spec.opts +0 -1
- data/spec/spec_suite.rb +0 -40
@@ -1,137 +0,0 @@
|
|
1
|
-
module Erector
|
2
|
-
module Rails
|
3
|
-
module Helpers
|
4
|
-
include ActionController::UrlWriter
|
5
|
-
|
6
|
-
# parent returning raw text whose first parameter is HTML escaped
|
7
|
-
ESCAPED_HELPERS = [
|
8
|
-
:link_to,
|
9
|
-
:link_to_remote,
|
10
|
-
:mail_to,
|
11
|
-
:button_to,
|
12
|
-
:submit_tag,
|
13
|
-
]
|
14
|
-
ESCAPED_HELPERS.each do |method_name|
|
15
|
-
start_line = __LINE__ + 2
|
16
|
-
method_def =<<-METHOD_DEF
|
17
|
-
def #{method_name}(link_text, *args, &block)
|
18
|
-
rawtext(parent.#{method_name}(h(link_text), *args, &block))
|
19
|
-
end
|
20
|
-
METHOD_DEF
|
21
|
-
eval(method_def, binding, __FILE__, start_line)
|
22
|
-
end
|
23
|
-
|
24
|
-
# return text, take block
|
25
|
-
RAW_HELPERS = [
|
26
|
-
:link_to_function,
|
27
|
-
:text_field_tag,
|
28
|
-
:password_field_tag,
|
29
|
-
:check_box_tag,
|
30
|
-
:error_messages_for,
|
31
|
-
:submit_tag,
|
32
|
-
:file_field,
|
33
|
-
:image_tag,
|
34
|
-
:javascript_include_tag,
|
35
|
-
:stylesheet_link_tag,
|
36
|
-
:sortable_element,
|
37
|
-
:sortable_element_js,
|
38
|
-
:text_field_with_auto_complete
|
39
|
-
]
|
40
|
-
RAW_HELPERS.each do |method_name|
|
41
|
-
start_line = __LINE__ + 2
|
42
|
-
method_def =<<-METHOD_DEF
|
43
|
-
def #{method_name}(*args, &block)
|
44
|
-
rawtext parent.#{method_name}(*args, &block)
|
45
|
-
end
|
46
|
-
METHOD_DEF
|
47
|
-
eval(method_def, binding, __FILE__, start_line)
|
48
|
-
end
|
49
|
-
|
50
|
-
CAPTURED_HELPERS_WITHOUT_CONCAT = [
|
51
|
-
:render
|
52
|
-
]
|
53
|
-
CAPTURED_HELPERS_WITHOUT_CONCAT.each do |method_name|
|
54
|
-
start_line = __LINE__ + 2
|
55
|
-
method_def =<<-METHOD_DEF
|
56
|
-
def #{method_name}(*args, &block)
|
57
|
-
captured = parent.capture do
|
58
|
-
parent.concat(parent.#{method_name}(*args, &block))
|
59
|
-
parent.output_buffer.to_s
|
60
|
-
end
|
61
|
-
rawtext(captured)
|
62
|
-
end
|
63
|
-
METHOD_DEF
|
64
|
-
eval(method_def, binding, __FILE__, start_line)
|
65
|
-
end
|
66
|
-
|
67
|
-
CAPTURED_HELPERS_WITH_CONCAT = [
|
68
|
-
:form_tag
|
69
|
-
]
|
70
|
-
CAPTURED_HELPERS_WITH_CONCAT.each do |method_name|
|
71
|
-
start_line = __LINE__ + 2
|
72
|
-
method_def =<<-METHOD_DEF
|
73
|
-
def #{method_name}(*args, &block)
|
74
|
-
captured = parent.capture do
|
75
|
-
parent.#{method_name}(*args, &block)
|
76
|
-
parent.output_buffer.to_s
|
77
|
-
end
|
78
|
-
rawtext(captured)
|
79
|
-
end
|
80
|
-
METHOD_DEF
|
81
|
-
eval(method_def, binding, __FILE__, start_line)
|
82
|
-
end
|
83
|
-
|
84
|
-
def form_for(record_or_name_or_array, *args, &proc)
|
85
|
-
options = args.extract_options!
|
86
|
-
options[:builder] ||= ::Erector::RailsFormBuilder
|
87
|
-
args.push(options)
|
88
|
-
parent.form_for(record_or_name_or_array, *args, &proc)
|
89
|
-
end
|
90
|
-
|
91
|
-
def fields_for(record_or_name_or_array, *args, &proc)
|
92
|
-
options = args.extract_options!
|
93
|
-
options[:builder] ||= ::Erector::RailsFormBuilder
|
94
|
-
args.push(options)
|
95
|
-
parent.fields_for(record_or_name_or_array, *args, &proc)
|
96
|
-
end
|
97
|
-
|
98
|
-
def javascript_include_merged(key)
|
99
|
-
parent.javascript_include_merged(key)
|
100
|
-
end
|
101
|
-
|
102
|
-
def stylesheet_link_merged(key)
|
103
|
-
parent.stylesheet_link_merged(key)
|
104
|
-
end
|
105
|
-
|
106
|
-
def flash
|
107
|
-
parent.controller.send(:flash)
|
108
|
-
end
|
109
|
-
|
110
|
-
def session
|
111
|
-
parent.controller.session
|
112
|
-
end
|
113
|
-
|
114
|
-
def controller
|
115
|
-
parent.controller
|
116
|
-
end
|
117
|
-
|
118
|
-
def cycle(*args)
|
119
|
-
parent.cycle(*args)
|
120
|
-
end
|
121
|
-
|
122
|
-
def simple_format(string)
|
123
|
-
p raw(string.to_s.html_escape.gsub(/\r\n?/, "\n").gsub(/\n/, "<br/>\n"))
|
124
|
-
end
|
125
|
-
|
126
|
-
def time_ago_in_words(*args)
|
127
|
-
parent.time_ago_in_words(*args)
|
128
|
-
end
|
129
|
-
|
130
|
-
def pluralize(*args)
|
131
|
-
parent.pluralize(*args)
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
Erector::Widget.send :include, Helpers
|
136
|
-
end
|
137
|
-
end
|
data/spec/core_spec_suite.rb
DELETED
@@ -1,110 +0,0 @@
|
|
1
|
-
require File.expand_path("#{File.dirname(__FILE__)}/../spec_helper")
|
2
|
-
require 'benchmark'
|
3
|
-
require 'active_support' # for Symbol#to_proc
|
4
|
-
|
5
|
-
describe Erector::External do
|
6
|
-
it "can be constructed with type, klass, text" do
|
7
|
-
x = Erector::External.new(:foo, Object, "abc")
|
8
|
-
x.type.should == :foo
|
9
|
-
x.klass.should == Object
|
10
|
-
x.text.should == "abc"
|
11
|
-
x.options.should == {}
|
12
|
-
end
|
13
|
-
|
14
|
-
it "can be constructed with type, klass, text, and options" do
|
15
|
-
x = Erector::External.new(:foo, Object, "abc", {:bar => 7})
|
16
|
-
x.options.should == {:bar => 7}
|
17
|
-
end
|
18
|
-
|
19
|
-
it "is equal to an identical external" do
|
20
|
-
x = Erector::External.new(:foo, Object, "abc", {:bar => 7})
|
21
|
-
y = Erector::External.new(:foo, Object, "abc", {:bar => 7})
|
22
|
-
x.should == y
|
23
|
-
[x].should include(y)
|
24
|
-
end
|
25
|
-
|
26
|
-
it "is equal to an identical external with a different class" do
|
27
|
-
class_x = Class.new
|
28
|
-
class_y = Class.new
|
29
|
-
x = Erector::External.new(:foo, class_x, "abc", {:bar => 7})
|
30
|
-
y = Erector::External.new(:foo, class_y, "abc", {:bar => 7})
|
31
|
-
x.should == y
|
32
|
-
[x].should include(y)
|
33
|
-
end
|
34
|
-
|
35
|
-
it "is not equal to an identical external with a different options" do
|
36
|
-
class_x = Class.new
|
37
|
-
x = Erector::External.new(:foo, class_x, "abc")
|
38
|
-
y = Erector::External.new(:foo, class_x, "abc", {:bar => 7})
|
39
|
-
x.should_not == y
|
40
|
-
[x].should_not include(y)
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
44
|
-
|
45
|
-
describe "external declarations" do
|
46
|
-
class HotSauce < Erector::Widget
|
47
|
-
external :css, "/css/tapatio.css", :media => "print"
|
48
|
-
external :css, "/css/salsa_picante.css"
|
49
|
-
external :js, "/lib/jquery.js"
|
50
|
-
external :js, "/lib/picante.js"
|
51
|
-
end
|
52
|
-
|
53
|
-
class SourCream < Erector::Widget
|
54
|
-
external :css, "/css/sourcream.css"
|
55
|
-
external :js, "/lib/jquery.js"
|
56
|
-
external :js, "/lib/dairy.js"
|
57
|
-
end
|
58
|
-
|
59
|
-
it "can be fetched via the type" do
|
60
|
-
Erector::Widget.externals(:css).map(&:text).should == [
|
61
|
-
"/css/tapatio.css",
|
62
|
-
"/css/salsa_picante.css",
|
63
|
-
"/css/sourcream.css",
|
64
|
-
]
|
65
|
-
end
|
66
|
-
|
67
|
-
it "can be filtered via the class" do
|
68
|
-
Erector::Widget.externals(:css, HotSauce).map(&:text).should == [
|
69
|
-
"/css/tapatio.css",
|
70
|
-
"/css/salsa_picante.css",
|
71
|
-
]
|
72
|
-
Erector::Widget.externals(:css, SourCream).map(&:text).should == [
|
73
|
-
"/css/sourcream.css",
|
74
|
-
]
|
75
|
-
end
|
76
|
-
|
77
|
-
it "retains the options" do
|
78
|
-
Erector::Widget.externals(:css, HotSauce).map(&:options).should == [
|
79
|
-
{:media => "print"},
|
80
|
-
{}
|
81
|
-
]
|
82
|
-
end
|
83
|
-
|
84
|
-
it "removes duplicates" do
|
85
|
-
Erector::Widget.externals(:js).map(&:text).should == [
|
86
|
-
"/lib/jquery.js",
|
87
|
-
"/lib/picante.js",
|
88
|
-
"/lib/dairy.js",
|
89
|
-
]
|
90
|
-
end
|
91
|
-
|
92
|
-
|
93
|
-
class Taco < Erector::Widget
|
94
|
-
external :filling, "beef"
|
95
|
-
external :filling, "beef", :media => "print"
|
96
|
-
end
|
97
|
-
|
98
|
-
it "considers options when removing duplicates" do
|
99
|
-
Erector::Widget.externals(:filling).map(&:text).should == ["beef", "beef"]
|
100
|
-
end
|
101
|
-
|
102
|
-
it "works with strings or symbols" do
|
103
|
-
Erector::Widget.externals("js").map(&:text).should == [
|
104
|
-
"/lib/jquery.js",
|
105
|
-
"/lib/picante.js",
|
106
|
-
"/lib/dairy.js",
|
107
|
-
]
|
108
|
-
end
|
109
|
-
|
110
|
-
end
|
data/spec/rails_spec_suite.rb
DELETED
data/spec/spec.opts
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
--backtrace
|
data/spec/spec_suite.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
class SpecSuite
|
2
|
-
class << self
|
3
|
-
def all
|
4
|
-
system("ruby #{dir}/core_spec_suite.rb") || raise("Core Spec Suite failed")
|
5
|
-
|
6
|
-
require "#{dir}/../lib/erector/rails/rails_version"
|
7
|
-
|
8
|
-
rails_version = Erector::Rails::RAILS_VERSION
|
9
|
-
puts "Running rails_spec_suite for Rails version #{rails_version}"
|
10
|
-
|
11
|
-
system("ruby #{dir}/rails_spec_suite.rb") || raise("Failed for version #{rails_version}")
|
12
|
-
end
|
13
|
-
|
14
|
-
def core
|
15
|
-
run Dir["#{dir}/{erect,erector}/**/*_spec.rb"] - ["#{dir}/erect/erect_rails_spec.rb"]
|
16
|
-
end
|
17
|
-
|
18
|
-
def rails
|
19
|
-
run ["#{dir}/erect/erect_rails_spec.rb"]
|
20
|
-
Dir.chdir("#{dir}/rails_root") do
|
21
|
-
run Dir["spec/**/*_spec.rb"]
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def run(files)
|
26
|
-
files.each do |file|
|
27
|
-
require file
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
protected
|
32
|
-
def dir
|
33
|
-
File.dirname(__FILE__)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
if $0 == __FILE__
|
39
|
-
SpecSuite.all
|
40
|
-
end
|