table_cloth 0.2.3 → 0.3.0.beta1

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 (39) hide show
  1. data/.gitignore +1 -0
  2. data/lib/generators/templates/table.rb +7 -0
  3. data/lib/table_cloth.rb +14 -15
  4. data/lib/table_cloth/base.rb +3 -26
  5. data/lib/table_cloth/column.rb +0 -12
  6. data/lib/table_cloth/{action.rb → column_jury.rb} +10 -6
  7. data/lib/table_cloth/configurable_elements.rb +6 -13
  8. data/lib/table_cloth/extensions/actions.rb +25 -0
  9. data/lib/table_cloth/extensions/actions/action.rb +21 -0
  10. data/lib/table_cloth/extensions/actions/action_collection.rb +11 -0
  11. data/lib/table_cloth/extensions/actions/column.rb +21 -0
  12. data/lib/table_cloth/extensions/actions/jury.rb +37 -0
  13. data/lib/table_cloth/presenter.rb +16 -5
  14. data/lib/table_cloth/presenters/default.rb +1 -1
  15. data/lib/table_cloth/version.rb +1 -1
  16. data/spec/factories/actions.rb +6 -0
  17. data/spec/factories/columns.rb +18 -0
  18. data/spec/factories/dummy_tables.rb +11 -0
  19. data/spec/lib/base_spec.rb +6 -22
  20. data/spec/lib/column_jury_spec.rb +35 -0
  21. data/spec/lib/column_spec.rb +9 -14
  22. data/spec/lib/extensions/actions/action_collection_spec.rb +29 -0
  23. data/spec/lib/extensions/actions/action_spec.rb +57 -0
  24. data/spec/lib/extensions/actions/column_spec.rb +23 -0
  25. data/spec/lib/extensions/actions/jury_spec.rb +67 -0
  26. data/spec/lib/extensions/actions_spec.rb +42 -0
  27. data/spec/lib/presenter_spec.rb +29 -31
  28. data/spec/lib/presenters/default_spec.rb +61 -124
  29. data/spec/spec_helper.rb +7 -0
  30. data/spec/support/dummy_table.rb +0 -4
  31. data/spec/support/dummy_table_with_value_options.rb +1 -1
  32. data/spec/support/matchers/element_matchers.rb +6 -0
  33. data/table_cloth.gemspec +2 -0
  34. metadata +63 -14
  35. data/lib/table_cloth/actions.rb +0 -23
  36. data/lib/table_cloth/columns/action.rb +0 -24
  37. data/spec/lib/actions_spec.rb +0 -28
  38. data/spec/lib/columns/action_spec.rb +0 -73
  39. data/spec/support/dummy_table_with_actions.rb +0 -7
data/spec/spec_helper.rb CHANGED
@@ -3,6 +3,13 @@ require 'awesome_print'
3
3
  require 'nokogiri'
4
4
  require 'factory_girl'
5
5
  require 'pry'
6
+ require 'simplecov'
7
+
8
+ if ENV["COVERAGE"] == "true"
9
+ SimpleCov.start do
10
+ add_filter "spec/support"
11
+ end
12
+ end
6
13
 
7
14
  Dir['./spec/support/**/*.rb'].each {|f| require f }
8
15
 
@@ -2,10 +2,6 @@ class DummyTable < TableCloth::Base
2
2
  column :id
3
3
  column :name
4
4
  column :email
5
-
6
- def admin?
7
- view.admin?
8
- end
9
5
  end
10
6
 
11
7
  class DummyTableUnlessAdmin < TableCloth::Base
@@ -1,5 +1,5 @@
1
1
  class DummyTableWithValueOptions < TableCloth::Base
2
2
  column :email do
3
- ["robert@creativequeries.com", {class: "special-class"}]
3
+ ["robert@example.com", {class: "special-class"}]
4
4
  end
5
5
  end
@@ -0,0 +1,6 @@
1
+ RSpec::Matchers.define :have_tag do |tag|
2
+ match do |string|
3
+ document = Nokogiri::HTML(string)
4
+ !!document.at_xpath(".//#{tag}")
5
+ end
6
+ end
data/table_cloth.gemspec CHANGED
@@ -18,12 +18,14 @@ Gem::Specification.new do |gem|
18
18
  gem.require_paths = ["lib"]
19
19
 
20
20
  gem.add_development_dependency('rspec', '~> 2.11')
21
+ gem.add_development_dependency('simplecov')
21
22
  gem.add_development_dependency('awesome_print')
22
23
  gem.add_development_dependency('nokogiri')
23
24
  gem.add_development_dependency('pry')
24
25
  gem.add_development_dependency('factory_girl')
25
26
  gem.add_development_dependency('guard-rspec')
26
27
  gem.add_development_dependency('rake')
28
+ gem.add_development_dependency('rb-fsevent', '~> 0.9.1')
27
29
 
28
30
  gem.add_dependency('actionpack', '~> 3.2')
29
31
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: table_cloth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
5
- prerelease:
4
+ version: 0.3.0.beta1
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Robert Ross
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-20 00:00:00.000000000 Z
12
+ date: 2012-12-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -27,6 +27,22 @@ dependencies:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
29
  version: '2.11'
30
+ - !ruby/object:Gem::Dependency
31
+ name: simplecov
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
30
46
  - !ruby/object:Gem::Dependency
31
47
  name: awesome_print
32
48
  requirement: !ruby/object:Gem::Requirement
@@ -123,6 +139,22 @@ dependencies:
123
139
  - - ! '>='
124
140
  - !ruby/object:Gem::Version
125
141
  version: '0'
142
+ - !ruby/object:Gem::Dependency
143
+ name: rb-fsevent
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ~>
148
+ - !ruby/object:Gem::Version
149
+ version: 0.9.1
150
+ type: :development
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ~>
156
+ - !ruby/object:Gem::Version
157
+ version: 0.9.1
126
158
  - !ruby/object:Gem::Dependency
127
159
  name: actionpack
128
160
  requirement: !ruby/object:Gem::Requirement
@@ -157,33 +189,43 @@ files:
157
189
  - lib/generators/table_generator.rb
158
190
  - lib/generators/templates/table.rb
159
191
  - lib/table_cloth.rb
160
- - lib/table_cloth/action.rb
161
192
  - lib/table_cloth/action_view_extension.rb
162
- - lib/table_cloth/actions.rb
163
193
  - lib/table_cloth/base.rb
164
194
  - lib/table_cloth/builder.rb
165
195
  - lib/table_cloth/column.rb
166
- - lib/table_cloth/columns/action.rb
196
+ - lib/table_cloth/column_jury.rb
167
197
  - lib/table_cloth/configurable_elements.rb
168
198
  - lib/table_cloth/configuration.rb
199
+ - lib/table_cloth/extensions/actions.rb
200
+ - lib/table_cloth/extensions/actions/action.rb
201
+ - lib/table_cloth/extensions/actions/action_collection.rb
202
+ - lib/table_cloth/extensions/actions/column.rb
203
+ - lib/table_cloth/extensions/actions/jury.rb
169
204
  - lib/table_cloth/presenter.rb
170
205
  - lib/table_cloth/presenters/default.rb
171
206
  - lib/table_cloth/version.rb
207
+ - spec/factories/actions.rb
208
+ - spec/factories/columns.rb
172
209
  - spec/factories/dummy_models.rb
210
+ - spec/factories/dummy_tables.rb
173
211
  - spec/lib/action_view_extension_spec.rb
174
- - spec/lib/actions_spec.rb
175
212
  - spec/lib/base_spec.rb
176
213
  - spec/lib/builder_spec.rb
214
+ - spec/lib/column_jury_spec.rb
177
215
  - spec/lib/column_spec.rb
178
- - spec/lib/columns/action_spec.rb
179
216
  - spec/lib/configuration_spec.rb
217
+ - spec/lib/extensions/actions/action_collection_spec.rb
218
+ - spec/lib/extensions/actions/action_spec.rb
219
+ - spec/lib/extensions/actions/column_spec.rb
220
+ - spec/lib/extensions/actions/jury_spec.rb
221
+ - spec/lib/extensions/actions_spec.rb
180
222
  - spec/lib/presenter_spec.rb
181
223
  - spec/lib/presenters/default_spec.rb
182
224
  - spec/spec_helper.rb
183
225
  - spec/support/dummy_model.rb
184
226
  - spec/support/dummy_table.rb
185
- - spec/support/dummy_table_with_actions.rb
186
227
  - spec/support/dummy_table_with_value_options.rb
228
+ - spec/support/matchers/element_matchers.rb
187
229
  - spec/support/shared_config_examples.rb
188
230
  - spec/support/view_mocks.rb
189
231
  - table_cloth.gemspec
@@ -202,9 +244,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
202
244
  required_rubygems_version: !ruby/object:Gem::Requirement
203
245
  none: false
204
246
  requirements:
205
- - - ! '>='
247
+ - - ! '>'
206
248
  - !ruby/object:Gem::Version
207
- version: '0'
249
+ version: 1.3.1
208
250
  requirements: []
209
251
  rubyforge_project:
210
252
  rubygems_version: 1.8.23
@@ -213,20 +255,27 @@ specification_version: 3
213
255
  summary: Table Cloth provides an easy and intuitive DSL for creating tables in rails
214
256
  views.
215
257
  test_files:
258
+ - spec/factories/actions.rb
259
+ - spec/factories/columns.rb
216
260
  - spec/factories/dummy_models.rb
261
+ - spec/factories/dummy_tables.rb
217
262
  - spec/lib/action_view_extension_spec.rb
218
- - spec/lib/actions_spec.rb
219
263
  - spec/lib/base_spec.rb
220
264
  - spec/lib/builder_spec.rb
265
+ - spec/lib/column_jury_spec.rb
221
266
  - spec/lib/column_spec.rb
222
- - spec/lib/columns/action_spec.rb
223
267
  - spec/lib/configuration_spec.rb
268
+ - spec/lib/extensions/actions/action_collection_spec.rb
269
+ - spec/lib/extensions/actions/action_spec.rb
270
+ - spec/lib/extensions/actions/column_spec.rb
271
+ - spec/lib/extensions/actions/jury_spec.rb
272
+ - spec/lib/extensions/actions_spec.rb
224
273
  - spec/lib/presenter_spec.rb
225
274
  - spec/lib/presenters/default_spec.rb
226
275
  - spec/spec_helper.rb
227
276
  - spec/support/dummy_model.rb
228
277
  - spec/support/dummy_table.rb
229
- - spec/support/dummy_table_with_actions.rb
230
278
  - spec/support/dummy_table_with_value_options.rb
279
+ - spec/support/matchers/element_matchers.rb
231
280
  - spec/support/shared_config_examples.rb
232
281
  - spec/support/view_mocks.rb
@@ -1,23 +0,0 @@
1
- module TableCloth
2
- class Actions
3
- attr_reader :column, :options
4
-
5
- def initialize(options={}, &block)
6
- @options = options
7
- @column = Columns::Action.new(:actions, options)
8
-
9
- block.arity > 0 ? block.call(self) : instance_eval(&block)
10
- end
11
-
12
- def action(*args, &block)
13
- options = args.extract_options! || {}
14
- options[:proc] = block if block_given?
15
-
16
- column.actions << Action.new(options)
17
- end
18
-
19
- def all
20
- column.actions
21
- end
22
- end
23
- end
@@ -1,24 +0,0 @@
1
- module TableCloth
2
- module Columns
3
- class Action < Column
4
- def value(object, view_context, table)
5
- actions_html = actions.each_with_object('') do |action, links|
6
- if action.available?(table)
7
- links << "\n"
8
- links << (view_context.instance_exec(object, view_context, &action.options[:proc]) || "")
9
- end
10
- end
11
-
12
- view_context.raw(actions_html)
13
- end
14
-
15
- def actions
16
- @actions ||= []
17
- end
18
-
19
- def available?(table)
20
- actions.any? {|a| a.available?(table) }
21
- end
22
- end
23
- end
24
- end
@@ -1,28 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe TableCloth::Actions do
4
- subject { TableCloth::Actions }
5
-
6
- context "block syntax" do
7
- it "accepts a block" do
8
- actions = subject.new do
9
- action { 'Edit' }
10
- end
11
-
12
- expect(actions.column).to have(1).actions
13
- end
14
-
15
- it "accepts options with a block" do
16
- actions = subject.new(class: "actions") do
17
- action { "Edit" }
18
- end
19
-
20
- expect(actions.options[:class]).to eq("actions")
21
- end
22
-
23
- it ".all returns all actions for the column" do
24
- actions = subject.new { action { "Edit" } }
25
- expect(actions.all.length).to be 1
26
- end
27
- end
28
- end
@@ -1,73 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe TableCloth::Columns::Action do
4
- let(:view_context) { ActionView::Base.new }
5
- let(:dummy_table) { Class.new(DummyTable) }
6
- let(:dummy_model) do
7
- DummyModel.new.tap do |d|
8
- d.id = 1
9
- d.email = 'robert@example.com'
10
- d.name = 'robert'
11
- end
12
- end
13
-
14
- subject { TableCloth::Columns::Action.new(object, view_context) }
15
-
16
- it '.value returns all actions in HTML' do
17
- dummy_table.actions do
18
- action {|object, view| view.link_to "Edit", "#{object.id}"}
19
- end
20
- presenter = TableCloth::Presenters::Default.new([dummy_model], dummy_table, view_context)
21
- doc = Nokogiri::HTML(presenter.render_table)
22
-
23
- actions_column = doc.at_xpath('//tbody')
24
- .at_xpath('.//tr')
25
- .xpath('.//td')
26
- .last
27
-
28
- link = actions_column.at_xpath('.//a')
29
- link.should be_present
30
- link[:href].should == '1'
31
- end
32
-
33
- it '.value only returns actions that pass' do
34
- dummy_table.actions do
35
- action(if: :admin?) { '/admin' }
36
- action(if: :moderator?) { '/moderator' }
37
- end
38
-
39
- table = dummy_table.new([], view_context)
40
-
41
- def table.admin?
42
- true
43
- end
44
-
45
- def table.moderator?
46
- false
47
- end
48
-
49
- actions_column = dummy_table.columns[:actions]
50
- actions_value = actions_column.value(dummy_model, view_context, table)
51
-
52
- actions_value.should include '/admin'
53
- actions_value.should_not include '/moderator'
54
- end
55
-
56
- it "does not need to use the view context of a block" do
57
- dummy_table.actions do
58
- action {|object| link_to "Edit", "#{object.id}" }
59
- end
60
- presenter = TableCloth::Presenters::Default.new([dummy_model], dummy_table, view_context)
61
-
62
- doc = Nokogiri::HTML(presenter.render_table)
63
-
64
- actions_column = doc.at_xpath('//tbody')
65
- .at_xpath('.//tr')
66
- .xpath('.//td')
67
- .last
68
-
69
- link = actions_column.at_xpath('.//a')
70
- link.should be_present
71
- link[:href].should == '1'
72
- end
73
- end
@@ -1,7 +0,0 @@
1
- class DummyTableWithActions < TableCloth::Base
2
- column :name
3
-
4
- actions(td_options: {class: 'actions'}) do
5
- action {|object| link_to "Edit", "/#{object.id}/edit" }
6
- end
7
- end