arbre 1.0.3 → 1.3.0

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 (54) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +51 -2
  3. data/README.md +25 -92
  4. data/docs/Gemfile +2 -0
  5. data/docs/_config.yml +7 -0
  6. data/docs/_includes/footer.html +8 -0
  7. data/docs/_includes/google-analytics.html +16 -0
  8. data/docs/_includes/head.html +7 -0
  9. data/docs/_includes/toc.html +12 -0
  10. data/docs/_includes/top-menu.html +8 -0
  11. data/docs/_layouts/default.html +21 -0
  12. data/docs/index.md +106 -0
  13. data/docs/stylesheets/main.css +1152 -0
  14. data/lib/arbre/context.rb +3 -2
  15. data/lib/arbre/element.rb +4 -2
  16. data/lib/arbre/element/builder_methods.rb +4 -5
  17. data/lib/arbre/html/tag.rb +4 -1
  18. data/lib/arbre/rails/template_handler.rb +4 -2
  19. data/lib/arbre/version.rb +1 -1
  20. metadata +46 -73
  21. data/.gitignore +0 -10
  22. data/.travis.yml +0 -4
  23. data/Gemfile +0 -16
  24. data/Rakefile +0 -18
  25. data/arbre.gemspec +0 -22
  26. data/spec/arbre/integration/html_spec.rb +0 -250
  27. data/spec/arbre/unit/component_spec.rb +0 -44
  28. data/spec/arbre/unit/context_spec.rb +0 -35
  29. data/spec/arbre/unit/element_finder_methods_spec.rb +0 -116
  30. data/spec/arbre/unit/element_spec.rb +0 -271
  31. data/spec/arbre/unit/html/class_list_spec.rb +0 -16
  32. data/spec/arbre/unit/html/tag_attributes_spec.rb +0 -62
  33. data/spec/arbre/unit/html/tag_spec.rb +0 -103
  34. data/spec/arbre/unit/html/text_node_spec.rb +0 -5
  35. data/spec/rails/integration/forms_spec.rb +0 -105
  36. data/spec/rails/integration/rendering_spec.rb +0 -83
  37. data/spec/rails/rails_spec_helper.rb +0 -46
  38. data/spec/rails/stub_app/config/database.yml +0 -3
  39. data/spec/rails/stub_app/config/routes.rb +0 -3
  40. data/spec/rails/stub_app/db/schema.rb +0 -3
  41. data/spec/rails/stub_app/log/.gitignore +0 -1
  42. data/spec/rails/stub_app/public/favicon.ico +0 -0
  43. data/spec/rails/support/mock_person.rb +0 -15
  44. data/spec/rails/templates/arbre/_partial.arb +0 -1
  45. data/spec/rails/templates/arbre/_partial_with_assignment.arb +0 -1
  46. data/spec/rails/templates/arbre/empty.arb +0 -0
  47. data/spec/rails/templates/arbre/page_with_arb_partial_and_assignment.arb +0 -3
  48. data/spec/rails/templates/arbre/page_with_assignment.arb +0 -1
  49. data/spec/rails/templates/arbre/page_with_erb_partial.arb +0 -3
  50. data/spec/rails/templates/arbre/page_with_partial.arb +0 -3
  51. data/spec/rails/templates/arbre/simple_page.arb +0 -8
  52. data/spec/rails/templates/erb/_partial.erb +0 -1
  53. data/spec/spec_helper.rb +0 -7
  54. data/spec/support/bundle.rb +0 -4
@@ -1,44 +0,0 @@
1
- require 'spec_helper'
2
-
3
- # A mock subclass to play with
4
- class MockComponent < Arbre::Component
5
-
6
- builder_method :mock_component
7
-
8
- def build
9
- h2 "Hello World"
10
- end
11
-
12
- end
13
-
14
- describe Arbre::Component do
15
-
16
- let(:assigns) { {} }
17
- let(:helpers) { nil }
18
-
19
- let(:component_class){ MockComponent }
20
- let(:component){ component_class.new }
21
-
22
- it "should be a subclass of an html div" do
23
- expect(Arbre::Component.ancestors).to include(Arbre::HTML::Div)
24
- end
25
-
26
- it "should render to a div, even as a subclass" do
27
- expect(component.tag_name).to eq('div')
28
- end
29
-
30
- it "should add a class by default" do
31
- expect(component.class_list).to include("mock_component")
32
- end
33
-
34
- it "should render the object using the builder method name" do
35
- comp = expect(arbre {
36
- mock_component
37
- }.to_s).to eq <<-HTML
38
- <div class="mock_component">
39
- <h2>Hello World</h2>
40
- </div>
41
- HTML
42
- end
43
-
44
- end
@@ -1,35 +0,0 @@
1
- # coding: utf-8
2
- require 'spec_helper'
3
-
4
- describe Arbre::Context do
5
-
6
- let(:context) do
7
- Arbre::Context.new do
8
- h1 "札幌市北区" # Add some HTML to the context
9
- end
10
- end
11
-
12
- it "should not increment the indent_level" do
13
- expect(context.indent_level).to eq(-1)
14
- end
15
-
16
- it "should return a bytesize" do
17
- expect(context.bytesize).to eq(25)
18
- end
19
-
20
- it "should return a length" do
21
- expect(context.length).to eq(25)
22
- end
23
-
24
- it "should delegate missing methods to the html string" do
25
- expect(context).to respond_to(:index)
26
- expect(context.index('<')).to eq(0)
27
- end
28
-
29
- it "should use a cached version of the HTML for method delegation" do
30
- expect(context).to receive(:to_s).once.and_return("<h1>札幌市北区</h1>")
31
- expect(context.index('<')).to eq(0)
32
- expect(context.index('<')).to eq(0)
33
- end
34
-
35
- end
@@ -1,116 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Arbre::Element, "Finder Methods" do
4
- let(:assigns){ {} }
5
- let(:helpers){ {} }
6
-
7
- describe "finding elements by tag name" do
8
-
9
- it "should return 0 when no elements exist" do
10
- expect(arbre {
11
- div
12
- }.get_elements_by_tag_name("li").size).to eq(0)
13
- end
14
-
15
- it "should return a child element" do
16
- html = arbre do
17
- ul
18
- li
19
- ul
20
- end
21
- elements = html.get_elements_by_tag_name("li")
22
- expect(elements.size).to eq(1)
23
- expect(elements[0]).to be_instance_of(Arbre::HTML::Li)
24
- end
25
-
26
- it "should return multple child elements" do
27
- html = arbre do
28
- ul
29
- li
30
- ul
31
- li
32
- end
33
- elements = html.get_elements_by_tag_name("li")
34
- expect(elements.size).to eq(2)
35
- expect(elements[0]).to be_instance_of(Arbre::HTML::Li)
36
- expect(elements[1]).to be_instance_of(Arbre::HTML::Li)
37
- end
38
-
39
- it "should return children's child elements" do
40
- html = arbre do
41
- ul
42
- li do
43
- li
44
- end
45
- end
46
- elements = html.get_elements_by_tag_name("li")
47
- expect(elements.size).to eq(2)
48
- expect(elements[0]).to be_instance_of(Arbre::HTML::Li)
49
- expect(elements[1]).to be_instance_of(Arbre::HTML::Li)
50
- expect(elements[1].parent).to eq(elements[0])
51
- end
52
- end
53
-
54
- #TODO: describe "finding an element by id"
55
-
56
- describe "finding an element by a class name" do
57
-
58
- it "should return 0 when no elements exist" do
59
- expect(arbre {
60
- div
61
- }.get_elements_by_class_name("my_class").size).to eq(0)
62
- end
63
-
64
- it "should allow text nodes on tree" do
65
- expect(arbre {
66
- text_node "text"
67
- }.get_elements_by_class_name("my_class").size).to eq(0)
68
- end
69
-
70
- it "should return a child element" do
71
- html = arbre do
72
- div class: "some_class"
73
- div class: "my_class"
74
- end
75
- elements = html.get_elements_by_class_name("my_class")
76
- expect(elements.size).to eq(1)
77
- expect(elements[0]).to be_instance_of(Arbre::HTML::Div)
78
- end
79
-
80
- it "should return multple child elements" do
81
- html = arbre do
82
- div class: "some_class"
83
- div class: "my_class"
84
- div class: "my_class"
85
- end
86
- elements = html.get_elements_by_class_name("my_class")
87
- expect(elements.size).to eq(2)
88
- expect(elements[0]).to be_instance_of(Arbre::HTML::Div)
89
- expect(elements[1]).to be_instance_of(Arbre::HTML::Div)
90
- end
91
-
92
- it "should return elements that match one of several classes" do
93
- html = arbre do
94
- div class: "some_class this_class"
95
- div class: "some_class"
96
- div class: "other_class"
97
-
98
- end
99
- elements = html.get_elements_by_class_name("this_class")
100
- expect(elements.size).to eq(1)
101
- expect(elements[0]).to be_instance_of(Arbre::HTML::Div)
102
- end
103
-
104
- it "should return a grandchild element" do
105
- html = arbre do
106
- div class: "some_class" do
107
- div class: "my_class"
108
- end
109
- end
110
- elements = html.get_elements_by_class_name("my_class")
111
- expect(elements.size).to eq(1)
112
- expect(elements[0]).to be_instance_of(Arbre::HTML::Div)
113
- end
114
-
115
- end
116
- end
@@ -1,271 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Arbre::Element do
4
-
5
- let(:element){ Arbre::Element.new }
6
-
7
- context "when initialized" do
8
-
9
- it "should have no children" do
10
- expect(element.children).to be_empty
11
- end
12
-
13
- it "should have no parent" do
14
- expect(element.parent).to be_nil
15
- end
16
-
17
- it "should respond to the HTML builder methods" do
18
- expect(element).to respond_to(:span)
19
- end
20
-
21
- it "should have a set of local assigns" do
22
- context = Arbre::Context.new hello: "World"
23
- element = Arbre::Element.new(context)
24
- expect(element.assigns[:hello]).to eq("World")
25
- end
26
-
27
- it "should have an empty hash with no local assigns" do
28
- expect(element.assigns).to eq({})
29
- end
30
-
31
- end
32
-
33
- describe "passing in a helper object" do
34
-
35
- let(:helper) do
36
- Class.new do
37
- def helper_method
38
- "helper method"
39
- end
40
- end
41
- end
42
-
43
- let(:element){ Arbre::Element.new(Arbre::Context.new(nil, helper.new)) }
44
-
45
- it "should call methods on the helper object and return TextNode objects" do
46
- expect(element.helper_method).to eq("helper method")
47
- end
48
-
49
- it "should raise a NoMethodError if not found" do
50
- expect {
51
- element.a_method_that_doesnt_exist
52
- }.to raise_error(NoMethodError)
53
- end
54
-
55
- end
56
-
57
- describe "passing in assigns" do
58
- let(:post){ double }
59
- let(:assigns){ {post: post} }
60
-
61
- it "should be accessible via a method call" do
62
- element = Arbre::Element.new(Arbre::Context.new(assigns))
63
- expect(element.post).to eq(post)
64
- end
65
-
66
- end
67
-
68
- it "to_a.flatten should not infinitely recurse" do
69
- Timeout.timeout(1) do
70
- element.to_a.flatten
71
- end
72
- end
73
-
74
- describe "adding a child" do
75
-
76
- let(:child){ Arbre::Element.new }
77
-
78
- before do
79
- element.add_child child
80
- end
81
-
82
- it "should add the child to the parent" do
83
- expect(element.children.first).to eq(child)
84
- end
85
-
86
- it "should set the parent of the child" do
87
- expect(child.parent).to eq(element)
88
- end
89
-
90
- context "when the child is nil" do
91
-
92
- let(:child){ nil }
93
-
94
- it "should not add the child" do
95
- expect(element.children).to be_empty
96
- end
97
-
98
- end
99
-
100
- context "when the child is a string" do
101
-
102
- let(:child){ "Hello World" }
103
-
104
- it "should add as a TextNode" do
105
- expect(element.children.first).to be_instance_of(Arbre::HTML::TextNode)
106
- expect(element.children.first.to_s).to eq("Hello World")
107
- end
108
-
109
- end
110
- end
111
-
112
- describe "setting the content" do
113
-
114
- context "when a string" do
115
-
116
- before do
117
- element.add_child "Hello World"
118
- element.content = "Goodbye"
119
- end
120
-
121
- it "should clear the existing children" do
122
- expect(element.children.size).to eq(1)
123
- end
124
-
125
- it "should add the string as a child" do
126
- expect(element.children.first.to_s).to eq("Goodbye")
127
- end
128
-
129
- it "should html escape the string" do
130
- string = "Goodbye <br />"
131
- element.content = string
132
- expect(element.content.to_s).to eq("Goodbye &lt;br /&gt;")
133
- end
134
- end
135
-
136
- context "when an element" do
137
- let(:content_element){ Arbre::Element.new }
138
-
139
- before do
140
- element.content = content_element
141
- end
142
-
143
- it "should set the content tag" do
144
- expect(element.children.first).to eq(content_element)
145
- end
146
-
147
- it "should set the tags parent" do
148
- expect(content_element.parent).to eq(element)
149
- end
150
- end
151
-
152
- context "when an array of tags" do
153
- let(:first){ Arbre::Element.new }
154
- let(:second){ Arbre::Element.new }
155
-
156
- before do
157
- element.content = [first, second]
158
- end
159
-
160
- it "should set the content tag" do
161
- expect(element.children.first).to eq(first)
162
- end
163
-
164
- it "should set the tags parent" do
165
- expect(element.children.first.parent).to eq(element)
166
- end
167
- end
168
-
169
- end
170
-
171
- describe "rendering to html" do
172
-
173
- before { @separator = $, }
174
- after { $, = @separator }
175
- let(:collection){ element + "hello world" }
176
-
177
- it "should render the children collection" do
178
- expect(element.children).to receive(:to_s).and_return("content")
179
- expect(element.to_s).to eq("content")
180
- end
181
-
182
- it "should render collection when is set the default separator" do
183
- $, = "_"
184
- expect(collection.to_s).to eq("hello world")
185
- end
186
-
187
- it "should render collection when is not set the default separator" do
188
- expect(collection.to_s).to eq("hello world")
189
- end
190
-
191
- end
192
-
193
- describe "adding elements together" do
194
-
195
- context "when both elements are tags" do
196
- let(:first){ Arbre::Element.new }
197
- let(:second){ Arbre::Element.new }
198
- let(:collection){ first + second }
199
-
200
- it "should return an instance of Collection" do
201
- expect(collection).to be_an_instance_of(Arbre::ElementCollection)
202
- end
203
-
204
- it "should return the elements in the collection" do
205
- expect(collection.size).to eq(2)
206
- expect(collection.first).to eq(first)
207
- expect(collection[1]).to eq(second)
208
- end
209
- end
210
-
211
- context "when the left is a collection and the right is a tag" do
212
- let(:first){ Arbre::Element.new }
213
- let(:second){ Arbre::Element.new }
214
- let(:third){ Arbre::Element.new }
215
- let(:collection){ Arbre::ElementCollection.new([first, second]) + third}
216
-
217
- it "should return an instance of Collection" do
218
- expect(collection).to be_an_instance_of(Arbre::ElementCollection)
219
- end
220
-
221
- it "should return the elements in the collection flattened" do
222
- expect(collection.size).to eq(3)
223
- expect(collection[0]).to eq(first)
224
- expect(collection[1]).to eq(second)
225
- expect(collection[2]).to eq(third)
226
- end
227
- end
228
-
229
- context "when the right is a collection and the left is a tag" do
230
- let(:first){ Arbre::Element.new }
231
- let(:second){ Arbre::Element.new }
232
- let(:third){ Arbre::Element.new }
233
- let(:collection){ first + Arbre::ElementCollection.new([second,third]) }
234
-
235
- it "should return an instance of Collection" do
236
- expect(collection).to be_an_instance_of(Arbre::ElementCollection)
237
- end
238
-
239
- it "should return the elements in the collection flattened" do
240
- expect(collection.size).to eq(3)
241
- expect(collection[0]).to eq(first)
242
- expect(collection[1]).to eq(second)
243
- expect(collection[2]).to eq(third)
244
- end
245
- end
246
-
247
- context "when the left is a tag and the right is a string" do
248
- let(:element){ Arbre::Element.new }
249
- let(:collection){ element + "Hello World"}
250
-
251
- it "should return an instance of Collection" do
252
- expect(collection).to be_an_instance_of(Arbre::ElementCollection)
253
- end
254
-
255
- it "should return the elements in the collection" do
256
- expect(collection.size).to eq(2)
257
- expect(collection[0]).to eq(element)
258
- expect(collection[1]).to be_an_instance_of(Arbre::HTML::TextNode)
259
- end
260
- end
261
-
262
- context "when the left is a string and the right is a tag" do
263
- let(:collection){ "hello World" + Arbre::Element.new}
264
-
265
- it "should return a string" do
266
- expect(collection.strip.chomp).to eq("hello World")
267
- end
268
- end
269
- end
270
-
271
- end