arbre 1.2.1 → 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 (46) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -0
  3. data/README.md +1 -1
  4. data/lib/arbre/context.rb +2 -1
  5. data/lib/arbre/element.rb +2 -1
  6. data/lib/arbre/version.rb +1 -1
  7. metadata +35 -46
  8. data/.gitignore +0 -10
  9. data/.rubocop.yml +0 -15
  10. data/.travis.yml +0 -16
  11. data/Gemfile +0 -25
  12. data/Gemfile.lock +0 -224
  13. data/Rakefile +0 -21
  14. data/arbre.gemspec +0 -24
  15. data/spec/arbre/integration/html_spec.rb +0 -249
  16. data/spec/arbre/unit/component_spec.rb +0 -44
  17. data/spec/arbre/unit/context_spec.rb +0 -35
  18. data/spec/arbre/unit/element_finder_methods_spec.rb +0 -116
  19. data/spec/arbre/unit/element_spec.rb +0 -271
  20. data/spec/arbre/unit/html/class_list_spec.rb +0 -16
  21. data/spec/arbre/unit/html/tag_attributes_spec.rb +0 -62
  22. data/spec/arbre/unit/html/tag_spec.rb +0 -115
  23. data/spec/arbre/unit/html/text_node_spec.rb +0 -5
  24. data/spec/changelog_spec.rb +0 -27
  25. data/spec/rails/integration/forms_spec.rb +0 -105
  26. data/spec/rails/integration/rendering_spec.rb +0 -99
  27. data/spec/rails/rails_spec_helper.rb +0 -42
  28. data/spec/rails/stub_app/config/database.yml +0 -3
  29. data/spec/rails/stub_app/config/routes.rb +0 -3
  30. data/spec/rails/stub_app/db/schema.rb +0 -3
  31. data/spec/rails/stub_app/log/.gitignore +0 -1
  32. data/spec/rails/stub_app/public/favicon.ico +0 -0
  33. data/spec/rails/support/mock_person.rb +0 -15
  34. data/spec/rails/templates/arbre/_partial.arb +0 -1
  35. data/spec/rails/templates/arbre/_partial_with_assignment.arb +0 -1
  36. data/spec/rails/templates/arbre/empty.arb +0 -0
  37. data/spec/rails/templates/arbre/page_with_arb_partial_and_assignment.arb +0 -3
  38. data/spec/rails/templates/arbre/page_with_assignment.arb +0 -1
  39. data/spec/rails/templates/arbre/page_with_erb_partial.arb +0 -3
  40. data/spec/rails/templates/arbre/page_with_partial.arb +0 -3
  41. data/spec/rails/templates/arbre/simple_page.arb +0 -8
  42. data/spec/rails/templates/erb/_partial.erb +0 -1
  43. data/spec/spec_helper.rb +0 -7
  44. data/spec/support/bundle.rb +0 -4
  45. data/tasks/lint.rake +0 -69
  46. data/tasks/release.rake +0 -6
@@ -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
@@ -1,16 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Arbre::HTML::ClassList do
4
-
5
- describe ".build_from_string" do
6
-
7
- it "should build a new list from a string of classes" do
8
- list = Arbre::HTML::ClassList.build_from_string("first second")
9
- expect(list.size).to eq(2)
10
-
11
- expect(list).to match_array(%w{first second})
12
- end
13
-
14
- end
15
-
16
- end
@@ -1,62 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Arbre::HTML::Tag, "Attributes" do
4
-
5
- let(:tag){ Arbre::HTML::Tag.new }
6
-
7
- describe "attributes" do
8
-
9
- before { tag.build id: "my_id" }
10
-
11
- it "should have an attributes hash" do
12
- expect(tag.attributes).to eq({id: "my_id"})
13
- end
14
-
15
- it "should render the attributes to html" do
16
- expect(tag.to_s).to eq "<tag id=\"my_id\"></tag>\n"
17
- end
18
-
19
- it "shouldn't render attributes that are empty" do
20
- tag.class_list # initializes an empty ClassList
21
- tag.set_attribute :foo, ''
22
- tag.set_attribute :bar, nil
23
-
24
- expect(tag.to_s).to eq "<tag id=\"my_id\"></tag>\n"
25
- end
26
-
27
- it "should get an attribute value" do
28
- expect(tag.attr(:id)).to eq("my_id")
29
- end
30
-
31
- describe "#has_attribute?" do
32
- context "when the attribute exists" do
33
- it "should return true" do
34
- expect(tag.has_attribute?(:id)).to eq(true)
35
- end
36
- end
37
-
38
- context "when the attribute does not exist" do
39
- it "should return false" do
40
- expect(tag.has_attribute?(:class)).to eq(false)
41
- end
42
- end
43
- end
44
-
45
- it "should remove an attribute" do
46
- expect(tag.attributes).to eq({id: "my_id"})
47
- expect(tag.remove_attribute(:id)).to eq("my_id")
48
- expect(tag.attributes).to eq({})
49
- end
50
- end
51
-
52
- describe "rendering attributes" do
53
- it "should html safe the attribute values" do
54
- tag.set_attribute(:class, '">bad things!')
55
- expect(tag.to_s).to eq "<tag class=\"&quot;&gt;bad things!\"></tag>\n"
56
- end
57
- it "should should escape the attribute names" do
58
- tag.set_attribute(">bad", "things")
59
- expect(tag.to_s).to eq "<tag &gt;bad=\"things\"></tag>\n"
60
- end
61
- end
62
- end
@@ -1,115 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Arbre::HTML::Tag do
4
-
5
- let(:tag){ Arbre::HTML::Tag.new }
6
-
7
- describe "building a new tag" do
8
- before { tag.build "Hello World", id: "my_id" }
9
-
10
- it "should set the contents to a string" do
11
- expect(tag.content).to eq("Hello World")
12
- end
13
-
14
- it "should set the hash of options to the attributes" do
15
- expect(tag.attributes).to eq({ id: "my_id" })
16
- end
17
- end
18
-
19
- describe "creating a tag 'for' an object" do
20
- let(:model_name){ double(singular: "resource_class")}
21
- let(:resource_class){ double(model_name: model_name) }
22
- let(:resource){ double(class: resource_class, to_key: ['5'])}
23
-
24
- before do
25
- tag.build for: resource
26
- end
27
- it "should set the id to the type and id" do
28
- expect(tag.id).to eq("resource_class_5")
29
- end
30
-
31
- it "should add a class name" do
32
- expect(tag.class_list).to include("resource_class")
33
- end
34
-
35
-
36
- describe "for an object that doesn't have a model_name" do
37
- let(:resource_class){ double(name: 'ResourceClass') }
38
-
39
- before do
40
- tag.build for: resource
41
- end
42
-
43
- it "should set the id to the type and id" do
44
- expect(tag.id).to eq("resource_class_5")
45
- end
46
-
47
- it "should add a class name" do
48
- expect(tag.class_list).to include("resource_class")
49
- end
50
- end
51
-
52
- describe "with a default_id_for_prefix" do
53
-
54
- let(:tag) do
55
- Class.new(Arbre::HTML::Tag) do
56
- def default_id_for_prefix
57
- "a_prefix"
58
- end
59
- end.new
60
- end
61
-
62
- it "should set the id to the type and id" do
63
- expect(tag.id).to eq("a_prefix_resource_class_5")
64
- end
65
-
66
- end
67
- end
68
-
69
- describe "creating a tag with a for attribute" do
70
- it "sets the `for` attribute when a string is given" do
71
- tag.build for: "email"
72
- expect(tag.attributes[:for]).to eq "email"
73
- end
74
-
75
- it "sets the `for` attribute when a symbol is given" do
76
- tag.build for: :email
77
- expect(tag.attributes[:for]).to eq :email
78
- end
79
- end
80
-
81
- describe "css class names" do
82
-
83
- it "should add a class" do
84
- tag.add_class "hello_world"
85
- expect(tag.class_names).to eq("hello_world")
86
- end
87
-
88
- it "should remove_class" do
89
- tag.add_class "hello_world"
90
- expect(tag.class_names).to eq("hello_world")
91
- tag.remove_class "hello_world"
92
- expect(tag.class_names).to eq("")
93
- end
94
-
95
- it "should not add a class if it already exists" do
96
- tag.add_class "hello_world"
97
- tag.add_class "hello_world"
98
- expect(tag.class_names).to eq("hello_world")
99
- end
100
-
101
- it "should seperate classes with space" do
102
- tag.add_class "hello world"
103
- expect(tag.class_list.size).to eq(2)
104
- end
105
-
106
- it "should create a class list from a string" do
107
- tag = Arbre::HTML::Tag.new
108
- tag.build(class: "first-class")
109
- tag.add_class "second-class"
110
- expect(tag.class_list.size).to eq(2)
111
- end
112
-
113
- end
114
-
115
- end