tabletastic 0.2.0.pre5 → 0.2.0.pre6

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.
data/CHANGELOG.rdoc CHANGED
@@ -1,10 +1,12 @@
1
1
  Git (for upcoming v0.2.0 release)
2
2
 
3
3
  * [DEPRECATED] use of table.data method without = in erb or haml. See README for more information.
4
- * Updating to Rails3 API and idioms
5
- * Adding default table html options
6
- * Adding default lambda (table block) so that table_for can be called without passing a block
7
- * Adding has_one associations
4
+ * Update to Rails 3 API and idioms
5
+ * Add default table html options
6
+ * Add default lambda (table block) so that table_for can be called without passing a block
7
+ * Add has_one associations
8
+ * Add heading html hook for <th> elements
9
+ * Super-basic mongoid support (2.x branch)
8
10
 
9
11
  v0.1.3 (Dec 28, 2009)
10
12
 
@@ -26,4 +28,4 @@ v0.1.0 (Nov 17, 2009)
26
28
 
27
29
  v0.0.1 (Nov 15, 2009)
28
30
 
29
- * Beta release, proof-of-concept
31
+ * Beta release, proof-of-concept
data/README.rdoc CHANGED
@@ -77,7 +77,7 @@ For more information about Rails 3 and Block helpers and the new conventions, ch
77
77
  == Installation
78
78
 
79
79
  In your Rails project, Gemfile:
80
- gem "tabletastic"
80
+ gem "tabletastic", '~> 0.2.0.pre6'
81
81
 
82
82
  Or, for if you're behind the times, as a plugin:
83
83
  script/plugin install git://github.com/jgdavey/tabletastic.git
@@ -22,13 +22,12 @@ module Tabletastic
22
22
  # * With a block, which assumes you will use +cell+ method to build up
23
23
  # the table
24
24
  #
25
- #
26
25
  def data(*args, &block) # :yields: tablebody
27
26
  options = args.extract_options!
28
27
  if block_given?
29
28
  yield self
30
29
  else
31
- @table_fields = args.empty? ? active_record_fields : args.collect {|f| TableField.new(f.to_sym)}
30
+ @table_fields = args.empty? ? orm_fields : args.collect {|f| TableField.new(f.to_sym)}
32
31
  end
33
32
  action_cells(options[:actions], options[:action_prefix])
34
33
  ["\n", head, "\n", body, "\n"].join("").html_safe
@@ -60,8 +59,8 @@ module Tabletastic
60
59
  options.merge!(:klass => klass)
61
60
  args << options
62
61
  @table_fields << TableField.new(*args, &proc)
63
- # Since this will likely be called with <%= %> (aka 'concat'), explicitly return an empty string
64
- # This suppresses unwanted output
62
+ # Since this will likely be called with <%= %> (aka 'concat'), explicitly return an
63
+ # empty string; this suppresses unwanted output
65
64
  return ""
66
65
  end
67
66
 
@@ -69,7 +68,7 @@ module Tabletastic
69
68
  content_tag(:thead) do
70
69
  content_tag(:tr) do
71
70
  @table_fields.inject("") do |result,field|
72
- result += content_tag(:th, field.heading)
71
+ result + content_tag(:th, field.heading, field.heading_html)
73
72
  end
74
73
  end
75
74
  end
@@ -121,16 +120,29 @@ module Tabletastic
121
120
 
122
121
  protected
123
122
 
124
- def active_record_fields
123
+ def orm_fields
125
124
  return [] if klass.blank?
126
- fields = klass.content_columns.map(&:name)
127
- fields += active_record_association_reflections
125
+ fields = if klass.respond_to?(:content_columns)
126
+ active_record_fields
127
+ elsif klass.respond_to?(:fields)
128
+ mongoid_fields
129
+ else
130
+ []
131
+ end
128
132
  fields -= @@default_hidden_columns
129
133
  fields.collect {|f| TableField.new(f.to_sym)}
130
134
  end
131
135
 
132
136
  private
133
137
 
138
+ def mongoid_fields
139
+ klass.fields.keys
140
+ end
141
+
142
+ def active_record_fields
143
+ klass.content_columns.map(&:name) + active_record_association_reflections
144
+ end
145
+
134
146
  def active_record_association_reflections
135
147
  return [] unless klass.respond_to?(:reflect_on_all_associations)
136
148
  associations = []
@@ -4,13 +4,13 @@ module Tabletastic
4
4
  class TableField
5
5
  @@association_methods = %w[to_label display_name full_name name title username login value to_str to_s]
6
6
 
7
- attr_accessor :heading, :method_or_proc, :cell_html
7
+ attr_accessor :heading, :method_or_proc, :cell_html, :heading_html
8
8
 
9
9
  def initialize(*args, &proc)
10
10
  options = args.extract_options!
11
11
  method = args.first.to_sym
12
12
  @method_or_proc = block_given? ? proc : method
13
- @cell_html = options[:cell_html]
13
+ @cell_html, @heading_html = options[:cell_html], options[:heading_html]
14
14
  @klass = options.delete(:klass)
15
15
  @heading = options.delete(:heading) || @klass.try(:human_attribute_name, method.to_s) || method.to_s.humanize
16
16
  end
@@ -41,4 +41,4 @@ module Tabletastic
41
41
  end
42
42
  end
43
43
  end
44
- end
44
+ end
@@ -1,3 +1,3 @@
1
1
  module Tabletastic
2
- VERSION = "0.2.0.pre5"
3
- end
2
+ VERSION = "0.2.0.pre6"
3
+ end
data/spec/spec_helper.rb CHANGED
@@ -21,7 +21,6 @@ Spork.prefork do
21
21
  end
22
22
 
23
23
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
24
- require 'tabletastic'
25
24
 
26
25
  module TabletasticSpecHelper
27
26
  include ActiveSupport
@@ -123,12 +122,13 @@ Spork.prefork do
123
122
  end
124
123
  end
125
124
 
126
- include TabletasticSpecHelper
127
- include Tabletastic
128
- include Tabletastic::Helper
129
125
  end
130
126
 
131
127
  Spork.each_run do
132
128
  # This code will be run each time you run your specs.
129
+ require 'tabletastic'
133
130
 
131
+ include TabletasticSpecHelper
132
+ include Tabletastic
133
+ include Tabletastic::Helper
134
134
  end
@@ -19,30 +19,22 @@ describe Tabletastic::TableBuilder do
19
19
  concat(table_for(@posts) { |t| t.data })
20
20
  end
21
21
 
22
- it "should output table with id of the class of the collection" do
23
- output_buffer.should have_tag("table#posts")
24
- end
22
+ subject { output_buffer }
25
23
 
26
- it "should output head" do
27
- output_buffer.should have_table_with_tag("thead")
28
- end
24
+ it { should have_tag("table#posts") }
25
+
26
+ it { output_buffer.should have_table_with_tag("thead") }
29
27
 
30
28
  it "should have a <th> for each attribute" do
31
29
  # title and body
32
30
  output_buffer.should have_table_with_tag("th", :count => 2)
33
31
  end
34
32
 
35
- it "should include header for Title" do
36
- output_buffer.should have_table_with_tag("th", "Title")
37
- end
33
+ it { output_buffer.should have_table_with_tag("th", "Title") }
38
34
 
39
- it "should include header for Body" do
40
- output_buffer.should have_table_with_tag("th", "Body")
41
- end
35
+ it { output_buffer.should have_table_with_tag("th", "Body") }
42
36
 
43
- it "should output body" do
44
- output_buffer.should have_table_with_tag("tbody")
45
- end
37
+ it { output_buffer.should have_table_with_tag("tbody") }
46
38
 
47
39
  it "should include a row for each record" do
48
40
  output_buffer.should have_table_with_tag("tbody") do |tbody|
@@ -55,9 +47,7 @@ describe Tabletastic::TableBuilder do
55
47
  output_buffer.should have_table_with_tag("td", "Lorem ipsum")
56
48
  end
57
49
 
58
- it "should include the id for the <tr> for each record" do
59
- output_buffer.should have_table_with_tag("tr#post_#{@post.id}")
60
- end
50
+ it { output_buffer.should have_table_with_tag("tr#post_#{@post.id}") }
61
51
 
62
52
  it "should cycle row classes" do
63
53
  reset_output_buffer!
@@ -70,6 +60,21 @@ describe Tabletastic::TableBuilder do
70
60
  output_buffer.should have_table_with_tag("tr.even")
71
61
  end
72
62
 
63
+ context "mongoid collection" do
64
+ before do
65
+ reset_output_buffer!
66
+ ::Post.stub!(:respond_to?).with(:content_columns).and_return(false)
67
+ ::Post.stub!(:respond_to?).with(:fields).and_return(true)
68
+ ::Post.stub!(:fields).and_return({'title' => '', 'created_at' => ''})
69
+ concat(table_for(@posts) { |t| t.data })
70
+ end
71
+
72
+ it "should detect fields properly" do
73
+ output_buffer.should have_table_with_tag("td", "The title of the post")
74
+ output_buffer.should_not have_table_with_tag("td", "Lorem ipsum")
75
+ end
76
+ end
77
+
73
78
  context "when collection has associations" do
74
79
  it "should handle belongs_to associations" do
75
80
  ::Post.stub!(:reflect_on_all_associations).with(:belongs_to).and_return([@mock_reflection_belongs_to_author])
@@ -176,12 +181,11 @@ describe Tabletastic::TableBuilder do
176
181
  t.data(:title, :created_at)
177
182
  end)
178
183
  end
184
+ subject { output_buffer }
179
185
 
180
- it "should call each method passed in, and only those methods" do
181
- output_buffer.should have_table_with_tag("th", "Title")
182
- output_buffer.should have_table_with_tag("th", "Created at")
183
- output_buffer.should_not have_table_with_tag("th", "Body")
184
- end
186
+ it { should have_table_with_tag("th", "Title") }
187
+ it { should have_table_with_tag("th", "Created at") }
188
+ it { should_not have_table_with_tag("th", "Body") }
185
189
  end
186
190
 
187
191
  context "with a list of attributes and options[:actions]" do
@@ -210,11 +214,11 @@ describe Tabletastic::TableBuilder do
210
214
  end)
211
215
  end
212
216
 
213
- it "should include the data for the fields passed in" do
214
- output_buffer.should have_table_with_tag("th", "Title")
215
- output_buffer.should have_tag("td", "The title of the post")
216
- output_buffer.should have_tag("td", "Lorem ipsum")
217
- end
217
+ subject { output_buffer }
218
+
219
+ it { should have_table_with_tag("th", "Title") }
220
+ it { should have_tag("td", "The title of the post") }
221
+ it { should have_tag("td", "Lorem ipsum") }
218
222
  end
219
223
 
220
224
  context "with custom cell options" do
@@ -227,17 +231,17 @@ describe Tabletastic::TableBuilder do
227
231
  end)
228
232
  end
229
233
 
230
- it "should change the heading label for :heading option" do
231
- output_buffer.should have_table_with_tag("th", "FooBar")
232
- output_buffer.should have_table_with_tag("th", "Body")
233
- end
234
+ subject { output_buffer }
235
+
236
+ it { should have_table_with_tag("th", "FooBar") }
237
+ it { should have_table_with_tag("th", "Body") }
234
238
 
235
239
  it "should pass :cell_html to the cell" do
236
240
  output_buffer.should have_table_with_tag("td.batquux")
237
241
  end
238
242
  end
239
243
 
240
- context "with custom cell options" do
244
+ context "with custom heading option" do
241
245
  before do
242
246
  concat(table_for(@posts) do |t|
243
247
  t.data do
@@ -247,29 +251,42 @@ describe Tabletastic::TableBuilder do
247
251
  end)
248
252
  end
249
253
 
254
+ subject { output_buffer }
255
+
256
+ it { should have_table_with_tag("th:nth-child(1)", "Title") }
257
+ it { should have_table_with_tag("th:nth-child(2)", "Content") }
258
+ it { should have_table_with_tag("td:nth-child(2)", "Lorem ipsum") }
259
+
250
260
  it "accepts a block as a lazy attribute" do
251
- output_buffer.should have_table_with_tag("th:nth-child(1)", "Title")
252
261
  output_buffer.should have_table_with_tag("td:nth-child(1)") do |td|
253
262
  td.should have_tag("a", "The title of the post")
254
263
  end
255
264
  end
265
+ end
256
266
 
257
- it "accepts a block as a lazy attribute (2)" do
258
- output_buffer.should have_table_with_tag("th:nth-child(2)", "Content")
259
- output_buffer.should have_table_with_tag("td:nth-child(2)", "Lorem ipsum")
267
+ context "with custom heading html option" do
268
+ before do
269
+ concat( table_for(@posts) do |t|
270
+ t.data do
271
+ t.cell(:title, :heading_html => {:class => 'hoja'})
272
+ end
273
+ end)
260
274
  end
275
+ subject { output_buffer }
276
+ it { should have_table_with_tag("th.hoja") }
261
277
  end
262
278
 
263
279
  context "with options[:actions]" do
264
- it "includes path to post for :show" do
280
+ before do
265
281
  concat(table_for(@posts) do |t|
266
282
  t.data(:actions => :show) do
267
283
  t.cell(:title)
268
284
  t.cell(:body)
269
285
  end
270
286
  end)
271
- output_buffer.should have_table_with_tag("td:nth-child(3) a[@href=\"/posts/#{@post.id}\"]")
272
287
  end
288
+ subject { output_buffer }
289
+ it { should have_table_with_tag("td:nth-child(3) a[@href=\"/posts/#{@post.id}\"]") }
273
290
  end
274
291
 
275
292
  context "and normal/association columns" do
@@ -297,7 +314,7 @@ describe Tabletastic::TableBuilder do
297
314
  end
298
315
 
299
316
  context "using human_attribute_names" do
300
- it "should work" do
317
+ before do
301
318
  ::Post.stub!(:human_attribute_name).with('body').and_return("Blah blue")
302
319
 
303
320
  concat(table_for(@posts) do |t|
@@ -306,9 +323,10 @@ describe Tabletastic::TableBuilder do
306
323
  t.cell(:body)
307
324
  end
308
325
  end)
309
-
310
- output_buffer.should have_table_with_tag("th", "Blah blue")
311
326
  end
327
+
328
+ subject { output_buffer }
329
+ it { should have_table_with_tag("th", "Blah blue") }
312
330
  end
313
331
 
314
332
  context "when table_for is not passed a block" do
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tabletastic
3
3
  version: !ruby/object:Gem::Version
4
- hash: -1876988180
5
4
  prerelease: true
6
5
  segments:
7
6
  - 0
8
7
  - 2
9
8
  - 0
10
- - pre5
11
- version: 0.2.0.pre5
9
+ - pre6
10
+ version: 0.2.0.pre6
12
11
  platform: ruby
13
12
  authors:
14
13
  - Joshua Davey
@@ -16,7 +15,7 @@ autorequire:
16
15
  bindir: bin
17
16
  cert_chain: []
18
17
 
19
- date: 2010-08-02 00:00:00 -05:00
18
+ date: 2010-09-11 00:00:00 -04:00
20
19
  default_executable:
21
20
  dependencies:
22
21
  - !ruby/object:Gem::Dependency
@@ -25,15 +24,13 @@ dependencies:
25
24
  requirement: &id001 !ruby/object:Gem::Requirement
26
25
  none: false
27
26
  requirements:
28
- - - ">="
27
+ - - ~>
29
28
  - !ruby/object:Gem::Version
30
- hash: 7712042
31
29
  segments:
32
30
  - 3
33
31
  - 0
34
32
  - 0
35
- - rc
36
- version: 3.0.0.rc
33
+ version: 3.0.0
37
34
  type: :runtime
38
35
  version_requirements: *id001
39
36
  - !ruby/object:Gem::Dependency
@@ -44,13 +41,12 @@ dependencies:
44
41
  requirements:
45
42
  - - ">="
46
43
  - !ruby/object:Gem::Version
47
- hash: 3
48
44
  segments:
49
45
  - 0
50
46
  version: "0"
51
47
  type: :development
52
48
  version_requirements: *id002
53
- description: A table builder for active record collections that produces semantically rich and accessible table markup
49
+ description: " A table builder for active record collections that\n produces semantically rich and accessible table markup\n"
54
50
  email: josh@joshuadavey.com
55
51
  executables: []
56
52
 
@@ -87,7 +83,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
87
83
  requirements:
88
84
  - - ">="
89
85
  - !ruby/object:Gem::Version
90
- hash: 3
91
86
  segments:
92
87
  - 0
93
88
  version: "0"
@@ -96,7 +91,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
96
91
  requirements:
97
92
  - - ">="
98
93
  - !ruby/object:Gem::Version
99
- hash: 23
100
94
  segments:
101
95
  - 1
102
96
  - 3