tabletastic 0.2.0.pre3 → 0.2.0.pre4
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 +1 -0
- data/lib/tabletastic/helper.rb +2 -3
- data/lib/tabletastic/table_builder.rb +7 -4
- data/lib/tabletastic/version.rb +1 -1
- data/spec/spec_helper.rb +21 -4
- data/spec/tabletastic/table_builder_spec.rb +11 -3
- data/spec/tabletastic/table_field_spec.rb +6 -0
- data/spec/tabletastic_spec.rb +21 -1
- metadata +7 -7
data/CHANGELOG.rdoc
CHANGED
data/lib/tabletastic/helper.rb
CHANGED
@@ -14,8 +14,8 @@ module Tabletastic
|
|
14
14
|
private
|
15
15
|
# Finds the class representing the objects within the collection
|
16
16
|
def default_class_for(collection)
|
17
|
-
if collection.respond_to?(:
|
18
|
-
collection.
|
17
|
+
if collection.respond_to?(:klass) # ActiveRecord::Relation
|
18
|
+
collection.klass
|
19
19
|
elsif !collection.empty?
|
20
20
|
collection.first.class
|
21
21
|
end
|
@@ -36,4 +36,3 @@ end
|
|
36
36
|
ActiveSupport.on_load(:action_view) do
|
37
37
|
include Tabletastic::Helper
|
38
38
|
end
|
39
|
-
|
@@ -31,7 +31,7 @@ module Tabletastic
|
|
31
31
|
@table_fields = args.empty? ? active_record_fields : args.collect {|f| TableField.new(f.to_sym)}
|
32
32
|
end
|
33
33
|
action_cells(options[:actions], options[:action_prefix])
|
34
|
-
[head, body].join("").html_safe
|
34
|
+
["\n", head, "\n", body, "\n"].join("").html_safe
|
35
35
|
end
|
36
36
|
|
37
37
|
# individually specify a column, which will build up the header,
|
@@ -77,11 +77,11 @@ module Tabletastic
|
|
77
77
|
|
78
78
|
def body
|
79
79
|
content_tag(:tbody) do
|
80
|
-
@collection.inject("") do |rows, record|
|
80
|
+
@collection.inject("\n") do |rows, record|
|
81
81
|
rowclass = @template.cycle("odd","even")
|
82
82
|
rows += @template.content_tag_for(:tr, record, :class => rowclass) do
|
83
83
|
cells_for_row(record)
|
84
|
-
end
|
84
|
+
end + "\n"
|
85
85
|
end
|
86
86
|
end
|
87
87
|
end
|
@@ -133,7 +133,10 @@ module Tabletastic
|
|
133
133
|
|
134
134
|
def active_record_association_reflections
|
135
135
|
return [] unless klass.respond_to?(:reflect_on_all_associations)
|
136
|
-
associations =
|
136
|
+
associations = []
|
137
|
+
associations += klass.reflect_on_all_associations(:belongs_to).map(&:name)
|
138
|
+
associations += klass.reflect_on_all_associations(:has_one).map(&:name)
|
139
|
+
associations
|
137
140
|
end
|
138
141
|
|
139
142
|
def content_tag(name, content = nil, options = nil, escape = true, &block)
|
data/lib/tabletastic/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -55,6 +55,8 @@ Spork.prefork do
|
|
55
55
|
end
|
56
56
|
class ::Author
|
57
57
|
end
|
58
|
+
class ::Profile
|
59
|
+
end
|
58
60
|
|
59
61
|
def mock_everything
|
60
62
|
def post_path(post); "/posts/#{post.id}"; end
|
@@ -71,16 +73,22 @@ Spork.prefork do
|
|
71
73
|
::Post.stub!(:human_attribute_name).and_return { |column_name| column_name.humanize }
|
72
74
|
::Post.stub!(:model_name).and_return(ActiveModel::Name.new(::Post))
|
73
75
|
|
74
|
-
@fred = mock('
|
76
|
+
@fred = mock('author', :to_key => nil)
|
75
77
|
@fred.stub!(:class).and_return(::Author)
|
76
78
|
@fred.stub!(:name).and_return('Fred Smith')
|
77
79
|
@fred.stub!(:id).and_return(37)
|
78
80
|
|
81
|
+
@profile = mock('profile')
|
82
|
+
@profile.stub!(:author).and_return(@fred)
|
83
|
+
@profile.stub!(:bio).and_return("This is my bio")
|
84
|
+
@fred.stub!(:profile).and_return(@profile)
|
85
|
+
|
86
|
+
::Author.stub!(:content_columns).and_return([mock('column', :name => "name")])
|
87
|
+
|
79
88
|
::Author.stub!(:find).and_return([@fred])
|
80
89
|
::Author.stub!(:human_attribute_name).and_return { |column_name| column_name.humanize }
|
81
90
|
::Author.stub!(:human_name).and_return('Author')
|
82
91
|
::Author.stub!(:model_name).and_return(ActiveModel::Name.new(::Author))
|
83
|
-
::Author.stub!(:reflect_on_association).and_return { |column_name| mock('reflection', :options => {}, :klass => Post, :macro => :has_many) if column_name == :posts }
|
84
92
|
|
85
93
|
@freds_post = mock('post')
|
86
94
|
@freds_post.stub!(:class).and_return(::Post)
|
@@ -93,13 +101,22 @@ Spork.prefork do
|
|
93
101
|
@fred.stub!(:posts).and_return([@freds_post])
|
94
102
|
@fred.stub!(:post_ids).and_return([@freds_post.id])
|
95
103
|
|
96
|
-
@mock_reflection_belongs_to_author = mock('
|
104
|
+
@mock_reflection_belongs_to_author = mock('reflection1', :options => {}, :name => :author, :macro => :belongs_to, :collection => false)
|
105
|
+
|
106
|
+
@mock_reflection_has_one_profile = mock('reflection2', :options => {}, :name => :profile, :macro => :has_one, :collection => false)
|
97
107
|
|
98
108
|
::Post.stub!(:reflect_on_association).and_return do |column_name|
|
99
109
|
@mock_reflection_belongs_to_author if column_name == :author
|
100
110
|
end
|
101
111
|
|
102
|
-
::
|
112
|
+
::Author.stub!(:reflect_on_association).and_return do |column_name|
|
113
|
+
mock('reflection', :options => {}, :klass => Post, :macro => :has_many) if column_name == :posts
|
114
|
+
@mock_reflection_has_one_profile if column_name == :profile
|
115
|
+
end
|
116
|
+
|
117
|
+
|
118
|
+
::Post.stub!(:reflect_on_all_associations).and_return([])
|
119
|
+
::Author.stub!(:reflect_on_all_associations).and_return([])
|
103
120
|
end
|
104
121
|
end
|
105
122
|
|
@@ -71,14 +71,22 @@ describe Tabletastic::TableBuilder do
|
|
71
71
|
end
|
72
72
|
|
73
73
|
context "when collection has associations" do
|
74
|
+
before do
|
75
|
+
@output_buffer = ActiveSupport::SafeBuffer.new
|
76
|
+
end
|
74
77
|
it "should handle belongs_to associations" do
|
75
78
|
::Post.stub!(:reflect_on_all_associations).with(:belongs_to).and_return([@mock_reflection_belongs_to_author])
|
76
79
|
@posts = [@freds_post]
|
77
|
-
@output_buffer = ""
|
78
80
|
concat table_for(@posts) { |t| t.data }
|
79
81
|
output_buffer.should have_table_with_tag("th", "Author")
|
80
82
|
output_buffer.should have_table_with_tag("td", "Fred Smith")
|
81
83
|
end
|
84
|
+
|
85
|
+
it "should handle has_one associations" do
|
86
|
+
::Author.stub!(:reflect_on_all_associations).with(:has_one).and_return([@mock_reflection_has_one_profile])
|
87
|
+
concat table_for([@fred]) { |t| t.data }
|
88
|
+
output_buffer.should have_table_with_tag("th", "Profile")
|
89
|
+
end
|
82
90
|
end
|
83
91
|
end
|
84
92
|
|
@@ -290,7 +298,7 @@ describe Tabletastic::TableBuilder do
|
|
290
298
|
end
|
291
299
|
end
|
292
300
|
end
|
293
|
-
|
301
|
+
|
294
302
|
context "using human_attribute_names" do
|
295
303
|
it "should work" do
|
296
304
|
::Post.stub!(:human_attribute_name).with('body').and_return("Blah blue")
|
@@ -305,7 +313,7 @@ describe Tabletastic::TableBuilder do
|
|
305
313
|
output_buffer.should have_table_with_tag("th", "Blah blue")
|
306
314
|
end
|
307
315
|
end
|
308
|
-
|
316
|
+
|
309
317
|
context "when table_for is not passed a block" do
|
310
318
|
it "the data should use the default option" do
|
311
319
|
Tabletastic.default_table_block = lambda {|table| table.data}
|
@@ -29,4 +29,10 @@ describe Tabletastic::TableField do
|
|
29
29
|
end
|
30
30
|
tf.cell_data("hello").should == "HELLO"
|
31
31
|
end
|
32
|
+
|
33
|
+
it "should return normal, non html-safe strings" do
|
34
|
+
post = mock(:booya => 'crazy')
|
35
|
+
tf = TableField.new(:booya)
|
36
|
+
tf.cell_data(post).should_not be_html_safe
|
37
|
+
end
|
32
38
|
end
|
data/spec/tabletastic_spec.rb
CHANGED
@@ -24,6 +24,26 @@ describe "Tabletastic#table_for" do
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
+
describe "guessing its class collection" do
|
28
|
+
before do
|
29
|
+
mock_everything
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should find the class of the collection (ActiveRecord::Relation)" do
|
33
|
+
table = mock(Arel::Table)
|
34
|
+
collection = ActiveRecord::Relation.new(@post.class, table)
|
35
|
+
collection.stub!(:build_arel => table)
|
36
|
+
klass = Tabletastic::TableBuilder.send(:default_class_for, collection)
|
37
|
+
klass.should == Post
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should find the class of the collection (Array of AR objects)" do
|
41
|
+
collection = [@post]
|
42
|
+
klass = Tabletastic::TableBuilder.send(:default_class_for, collection)
|
43
|
+
klass.should == Post
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
27
47
|
describe "default options" do
|
28
48
|
before do
|
29
49
|
Tabletastic.default_table_html = {:class => 'default', :cellspacing => 0}
|
@@ -40,7 +60,7 @@ describe "Tabletastic#table_for" do
|
|
40
60
|
output_buffer.should_not have_tag("table.default")
|
41
61
|
end
|
42
62
|
end
|
43
|
-
|
63
|
+
|
44
64
|
describe "without a block" do
|
45
65
|
it "should use default block" do
|
46
66
|
concat table_for([])
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tabletastic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: -
|
4
|
+
hash: -1876988177
|
5
5
|
prerelease: true
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
9
|
- 0
|
10
|
-
-
|
11
|
-
version: 0.2.0.
|
10
|
+
- pre4
|
11
|
+
version: 0.2.0.pre4
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- Joshua Davey
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2010-
|
19
|
+
date: 2010-07-18 00:00:00 -05:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -27,13 +27,13 @@ dependencies:
|
|
27
27
|
requirements:
|
28
28
|
- - ">="
|
29
29
|
- !ruby/object:Gem::Version
|
30
|
-
hash: -
|
30
|
+
hash: -1848230024
|
31
31
|
segments:
|
32
32
|
- 3
|
33
33
|
- 0
|
34
34
|
- 0
|
35
|
-
-
|
36
|
-
version: 3.0.0.
|
35
|
+
- beta4
|
36
|
+
version: 3.0.0.beta4
|
37
37
|
type: :runtime
|
38
38
|
version_requirements: *id001
|
39
39
|
- !ruby/object:Gem::Dependency
|