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
data/Rakefile DELETED
@@ -1,21 +0,0 @@
1
- require 'bundler'
2
- Bundler::GemHelper.install_tasks
3
-
4
- require 'rspec/core/rake_task'
5
- RSpec::Core::RakeTask.new(:spec)
6
-
7
- import 'tasks/lint.rake'
8
- import 'tasks/release.rake'
9
-
10
- task default: [:spec, :lint]
11
-
12
- task :console do
13
- require 'irb'
14
- require 'irb/completion'
15
-
16
- require 'pry'
17
- require 'arbre'
18
-
19
- ARGV.clear
20
- IRB.start
21
- end
@@ -1,24 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "arbre/version"
4
-
5
- Gem::Specification.new do |s|
6
- s.name = "arbre"
7
- s.version = Arbre::VERSION
8
- s.platform = Gem::Platform::RUBY
9
- s.authors = ["Greg Bell"]
10
- s.email = ["gregdbell@gmail.com"]
11
- s.homepage = ""
12
- s.summary = %q{An Object Oriented DOM Tree in Ruby}
13
- s.description = %q{An Object Oriented DOM Tree in Ruby}
14
- s.license = "MIT"
15
-
16
- s.files = `git ls-files`.split("\n")
17
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
- s.require_paths = ["lib"]
20
-
21
- s.required_ruby_version = '>= 2.3'
22
-
23
- s.add_dependency("activesupport", ">= 3.0.0")
24
- end
@@ -1,249 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Arbre do
4
-
5
- let(:helpers){ nil }
6
- let(:assigns){ {} }
7
-
8
- it "should render a single element" do
9
- expect(arbre {
10
- span "Hello World"
11
- }.to_s).to eq("<span>Hello World</span>\n")
12
- end
13
-
14
- it "should render a child element" do
15
- expect(arbre {
16
- span do
17
- span "Hello World"
18
- end
19
- }.to_s).to eq <<~HTML
20
- <span>
21
- <span>Hello World</span>
22
- </span>
23
- HTML
24
- end
25
-
26
- it "should render an unordered list" do
27
- expect(arbre {
28
- ul do
29
- li "First"
30
- li "Second"
31
- li "Third"
32
- end
33
- }.to_s).to eq <<~HTML
34
- <ul>
35
- <li>First</li>
36
- <li>Second</li>
37
- <li>Third</li>
38
- </ul>
39
- HTML
40
- end
41
-
42
- it "should allow local variables inside the tags" do
43
- expect(arbre {
44
- first = "First"
45
- second = "Second"
46
- ul do
47
- li first
48
- li second
49
- end
50
- }.to_s).to eq <<~HTML
51
- <ul>
52
- <li>First</li>
53
- <li>Second</li>
54
- </ul>
55
- HTML
56
- end
57
-
58
- it "should add children and nested" do
59
- expect(arbre {
60
- div do
61
- ul
62
- li do
63
- li
64
- end
65
- end
66
- }.to_s).to eq <<~HTML
67
- <div>
68
- <ul></ul>
69
- <li>
70
- <li></li>
71
- </li>
72
- </div>
73
- HTML
74
- end
75
-
76
-
77
- it "should pass the element in to the block if asked for" do
78
- expect(arbre {
79
- div do |d|
80
- d.ul do
81
- li
82
- end
83
- end
84
- }.to_s).to eq <<~HTML
85
- <div>
86
- <ul>
87
- <li></li>
88
- </ul>
89
- </div>
90
- HTML
91
- end
92
-
93
-
94
- it "should move content tags between parents" do
95
- expect(arbre {
96
- div do
97
- span(ul(li))
98
- end
99
- }.to_s).to eq <<~HTML
100
- <div>
101
- <span>
102
- <ul>
103
- <li></li>
104
- </ul>
105
- </span>
106
- </div>
107
- HTML
108
- end
109
-
110
- it "should add content to the parent if the element is passed into block" do
111
- expect(arbre {
112
- div do |d|
113
- d.id = "my-tag"
114
- ul do
115
- li
116
- end
117
- end
118
- }.to_s).to eq <<~HTML
119
- <div id="my-tag">
120
- <ul>
121
- <li></li>
122
- </ul>
123
- </div>
124
- HTML
125
- end
126
-
127
- it "should have the parent set on it" do
128
- list, item = nil
129
- arbre {
130
- list = ul do
131
- li "Hello"
132
- item = li "World"
133
- end
134
- }
135
- expect(item.parent).to eq list
136
- end
137
-
138
- it "should set a string content return value with no children" do
139
- expect(arbre {
140
- li do
141
- "Hello World"
142
- end
143
- }.to_s).to eq <<~HTML
144
- <li>Hello World</li>
145
- HTML
146
- end
147
-
148
- it "should turn string return values into text nodes" do
149
- node = nil
150
- arbre {
151
- list = li do
152
- "Hello World"
153
- end
154
- node = list.children.first
155
- }
156
- expect(node).to be_a Arbre::HTML::TextNode
157
- end
158
-
159
- it "should not render blank arrays" do
160
- expect(arbre {
161
- tbody do
162
- []
163
- end
164
- }.to_s).to eq <<~HTML
165
- <tbody></tbody>
166
- HTML
167
- end
168
-
169
- describe "self-closing nodes" do
170
-
171
- it "should not self-close script tags" do
172
- expect(arbre {
173
- script type: 'text/javascript'
174
- }.to_s).to eq("<script type=\"text/javascript\"></script>\n")
175
- end
176
-
177
- it "should self-close meta tags" do
178
- expect(arbre {
179
- meta content: "text/html; charset=utf-8"
180
- }.to_s).to eq("<meta content=\"text/html; charset=utf-8\"/>\n")
181
- end
182
-
183
- it "should self-close link tags" do
184
- expect(arbre {
185
- link rel: "stylesheet"
186
- }.to_s).to eq("<link rel=\"stylesheet\"/>\n")
187
- end
188
-
189
- Arbre::HTML::Tag::SELF_CLOSING_ELEMENTS.each do |tag|
190
- it "should self-close #{tag} tags" do
191
- expect(arbre {
192
- send(tag)
193
- }.to_s).to eq("<#{tag}/>\n")
194
- end
195
- end
196
-
197
- end
198
-
199
- describe "html safe" do
200
-
201
- it "should escape the contents" do
202
- expect(arbre {
203
- span("<br />")
204
- }.to_s).to eq <<~HTML
205
- <span>&lt;br /&gt;</span>
206
- HTML
207
- end
208
-
209
- it "should return html safe strings" do
210
- expect(arbre {
211
- span("<br />")
212
- }.to_s).to be_html_safe
213
- end
214
-
215
- it "should not escape html passed in" do
216
- expect(arbre {
217
- span(span("<br />"))
218
- }.to_s).to eq <<~HTML
219
- <span>
220
- <span>&lt;br /&gt;</span>
221
- </span>
222
- HTML
223
- end
224
-
225
- it "should escape string contents when passed in block" do
226
- expect(arbre {
227
- span {
228
- span {
229
- "<br />"
230
- }
231
- }
232
- }.to_s).to eq <<~HTML
233
- <span>
234
- <span>&lt;br /&gt;</span>
235
- </span>
236
- HTML
237
- end
238
-
239
- it "should escape the contents of attributes" do
240
- expect(arbre {
241
- span(class: "<br />")
242
- }.to_s).to eq <<~HTML
243
- <span class="&lt;br /&gt;"></span>
244
- HTML
245
- end
246
-
247
- end
248
-
249
- end
@@ -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