tabletastic 0.2.0.pre5 → 0.2.0.pre6

Sign up to get free protection for your applications and to get access to all the features.
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