table_for_collection 1.0.6 → 1.0.7
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.
- checksums.yaml +15 -0
- data/Changelog +6 -1
- data/Gemfile +1 -1
- data/README.rdoc +15 -2
- data/lib/table_for/simple_column.rb +9 -0
- data/lib/table_for/table.rb +35 -23
- data/lib/table_for/version.rb +1 -1
- data/spec/spec_helper.rb +1 -0
- data/spec/table_for/simple_column_spec.rb +31 -5
- metadata +20 -15
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZDdhZmYyNDM3OWU5NDI1OGE3MzdjMTBhODI0ZDE5MWU1MWQ2MzhmYw==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YjRkOGVmMThhZWI0YmEwZjdkYWVkODRjNTk2ZjI1ZGI0YzM2MGFkOA==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ZmIyNzYxOThjNTMxMzE1NjRmYWQ2ODM5MTU5M2QwYzgwZTNmOTUzMWViMjgw
|
10
|
+
ZjQxMmQ0ZTAwNWNlNzA0ZDg3ZTcwMjJlNGRjMmU0MDQzZWVkNDZiZTJiYThk
|
11
|
+
Nzk1NmUzMGNlNDY3ZWU0NGU0YWUzMzc5NjRlYmU3NzM2ODdhOTA=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NjJlZjlkNTQyMGYyYjYwOTI3NjdlZDVkYjM3ZGU4MDc0YTY1Njk5OGVmMmQ2
|
14
|
+
N2JiMGMzODdhNTk3ODQwYzUzOGY0ODhiMGMwNmI2MjgxY2JiZTk0Yzg3MTVh
|
15
|
+
YzlhMzZkNzllY2I3Zjg5NzA1OGZlNTIzMTcwY2JkMjFmYmI5NjI=
|
data/Changelog
CHANGED
data/Gemfile
CHANGED
data/README.rdoc
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
+
{<img src="https://fury-badge.herokuapp.com/rb/table_for_collection.png" />}[http://badge.fury.io/rb/table_for_collection]
|
1
2
|
{<img src="https://secure.travis-ci.org/lunich/table_for.png" />}[http://travis-ci.org/lunich/table_for]
|
3
|
+
{<img src="https://codeclimate.com/github/lunich/table_for.png" />}[https://codeclimate.com/github/lunich/table_for]
|
2
4
|
|
3
5
|
== Description
|
4
6
|
|
@@ -43,7 +45,7 @@ This ruby code will produce following HTML:
|
|
43
45
|
:id => "users",
|
44
46
|
:width => "100%",
|
45
47
|
:tr => {
|
46
|
-
:class => "simple-row",
|
48
|
+
:class => lambda { |user| "simple-row #{user.role}" },
|
47
49
|
:id => lambda { |user| "user-row-#{user.id}" }
|
48
50
|
}
|
49
51
|
} do -%>
|
@@ -97,6 +99,7 @@ It will produce HTML similar to:
|
|
97
99
|
<% column :title => "Actions" do |user| %>
|
98
100
|
<% [link_to("Show", user), link_to("Delete", user, :method => :delete)].join(" | ") %>
|
99
101
|
<% end %>
|
102
|
+
<% column :role, :default => "guest" %>
|
100
103
|
<% column :created_at, :time_format => "%Y-%m-%d" %>
|
101
104
|
<% end %>
|
102
105
|
|
@@ -114,7 +117,17 @@ Also class given by :stripe option will be merged with options[:html][:tr] so th
|
|
114
117
|
<tr class="row odd">...
|
115
118
|
<tr class="row even">...
|
116
119
|
<tr class="row odd">...
|
117
|
-
|
120
|
+
|
121
|
+
== Relations
|
122
|
+
|
123
|
+
If you need a column for relation or apply method for simple column you can use :attr option:
|
124
|
+
|
125
|
+
<%= table_for @users do -%>
|
126
|
+
<% column :login %>
|
127
|
+
<% column :company, :attr => :name %>
|
128
|
+
<% column :name, :attr => :underscore %>
|
129
|
+
<% end %>
|
130
|
+
|
118
131
|
== I18n
|
119
132
|
|
120
133
|
When column name is set, but :title is not, helper tries to find translation in standard mechanism of the ActiveModel.
|
@@ -2,6 +2,15 @@ module TableHelper
|
|
2
2
|
class SimpleColumn < Column # :nodoc:
|
3
3
|
def content_for(record)
|
4
4
|
called_record = record.kind_of?(Hash) ? record[@attr] : record.send(@attr)
|
5
|
+
|
6
|
+
if @options[:attr] && called_record.respond_to?(@options[:attr])
|
7
|
+
called_record = called_record.send(@options[:attr])
|
8
|
+
end
|
9
|
+
|
10
|
+
if @options[:default] && called_record.nil?
|
11
|
+
called_record = @options[:default]
|
12
|
+
end
|
13
|
+
|
5
14
|
if @options[:time_format] and called_record.is_a? Time
|
6
15
|
called_record = called_record.strftime(@options[:time_format])
|
7
16
|
end
|
data/lib/table_for/table.rb
CHANGED
@@ -66,34 +66,46 @@ module TableHelper
|
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
|
+
def columns_content(record)
|
70
|
+
@columns.map do |col|
|
71
|
+
content_tag :td, col.html[:td] do
|
72
|
+
col.content_for(record).to_s
|
73
|
+
end
|
74
|
+
end.join.html_safe
|
75
|
+
end
|
76
|
+
|
77
|
+
def records_content
|
78
|
+
@records.map do |record|
|
79
|
+
content_tag :tr, tr_options(record) do
|
80
|
+
columns_content(record)
|
81
|
+
end
|
82
|
+
end.join.html_safe
|
83
|
+
end
|
84
|
+
|
69
85
|
def body
|
70
|
-
content_tag :tbody
|
71
|
-
@records.map do |rec|
|
72
|
-
content_tag :tr, tr_options(rec) do
|
73
|
-
@columns.map do |col|
|
74
|
-
content_tag :td, col.html[:td] do
|
75
|
-
col.content_for(rec).to_s
|
76
|
-
end
|
77
|
-
end.join.html_safe
|
78
|
-
end
|
79
|
-
end.join.html_safe
|
80
|
-
end
|
86
|
+
content_tag :tbody, records_content
|
81
87
|
end
|
82
|
-
|
83
|
-
def
|
88
|
+
|
89
|
+
def tr_classes(record, base_class)
|
90
|
+
klasses = []
|
91
|
+
klasses << dom_class(record) if record.respond_to?(:model_name)
|
92
|
+
klasses << base_class if base_class
|
93
|
+
stripe = @stripes.next
|
94
|
+
klasses << stripe if stripe
|
95
|
+
klasses
|
96
|
+
end
|
97
|
+
|
98
|
+
def tr_options(record)
|
84
99
|
res = @tr_html_options.nil? ? {} : @tr_html_options.clone
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
klasses << dom_class(rec) if rec.respond_to?(:model_name)
|
89
|
-
res[:class] = klasses.compact.join(" ")
|
90
|
-
end
|
91
|
-
if res.has_key?(:id) && res[:id].respond_to?(:call)
|
92
|
-
res[:id] = res[:id].call(rec)
|
100
|
+
# check if we have proc in :id or :class
|
101
|
+
[:id, :class].each do |key|
|
102
|
+
res[key] = res[key].call(record) if res.has_key?(key) && res[key].respond_to?(:call)
|
93
103
|
end
|
94
|
-
|
104
|
+
# update class
|
105
|
+
res[:class] = tr_classes(record, res[:class]).join(" ")
|
106
|
+
# update id
|
107
|
+
res[:id] ||= dom_id(record) if record.respond_to?(:to_key)
|
95
108
|
res
|
96
109
|
end
|
97
|
-
|
98
110
|
end
|
99
111
|
end
|
data/lib/table_for/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -6,7 +6,8 @@ describe TableHelper::SimpleColumn do
|
|
6
6
|
# TableHelper::SimpleColumn
|
7
7
|
let(:klass) { TableHelper::SimpleColumn }
|
8
8
|
# user (stubbed data)
|
9
|
-
let(:
|
9
|
+
let(:company) { mock(:id => 2, :name => "Zorg inc.") }
|
10
|
+
let(:user) { mock(:id => 12, :created_at => Time.gm(2011, "feb", 24, 14, 23, 1), :company => company, :role => nil) }
|
10
11
|
# user (hash)
|
11
12
|
let(:user_hash) { { :id => 12, :created_at => Time.gm(2011, "feb", 24, 14, 23, 1) } }
|
12
13
|
# Instance methods
|
@@ -23,18 +24,43 @@ describe TableHelper::SimpleColumn do
|
|
23
24
|
col.title.should eq("Some title")
|
24
25
|
end
|
25
26
|
end
|
27
|
+
|
26
28
|
# :content_for
|
27
29
|
it ":content_for method should success" do
|
28
30
|
col = build_column(klass, :id)
|
29
|
-
col.content_for(user).should
|
30
|
-
col.content_for(user_hash).should
|
31
|
+
col.content_for(user).should eq("12")
|
32
|
+
col.content_for(user_hash).should eq("12")
|
31
33
|
end
|
32
34
|
|
33
35
|
describe "format" do
|
34
36
|
it ":time_format should be displayed correctly" do
|
35
37
|
col = build_column(klass, :created_at, :time_format => '%Y-%m')
|
36
|
-
col.content_for(user).should
|
37
|
-
col.content_for(user_hash).should
|
38
|
+
col.content_for(user).should eq("2011-02")
|
39
|
+
col.content_for(user_hash).should eq("2011-02")
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe ":attr option" do
|
44
|
+
it "should be success" do
|
45
|
+
col = build_column(klass, :company, :attr => :name)
|
46
|
+
col.content_for(user).should eq("Zorg inc.")
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should not be called when not acceptable" do
|
50
|
+
col = build_column(klass, :id, :attr => :name)
|
51
|
+
col.content_for(user).should eq("12")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe ":default option" do
|
56
|
+
it "should be success" do
|
57
|
+
col = build_column(klass, :role, :default => "Guest")
|
58
|
+
col.content_for(user).should eq("Guest")
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should not be called if have a result" do
|
62
|
+
col = build_column(klass, :id, :default => 42)
|
63
|
+
col.content_for(user).should eq("12")
|
38
64
|
end
|
39
65
|
end
|
40
66
|
end
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: table_for_collection
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.7
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Dima Lunich
|
@@ -11,30 +10,36 @@ authors:
|
|
11
10
|
autorequire:
|
12
11
|
bindir: bin
|
13
12
|
cert_chain: []
|
14
|
-
date:
|
13
|
+
date: 2013-11-30 00:00:00.000000000 Z
|
15
14
|
dependencies:
|
16
15
|
- !ruby/object:Gem::Dependency
|
17
16
|
name: rspec
|
18
|
-
requirement:
|
19
|
-
none: false
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
20
18
|
requirements:
|
21
19
|
- - ! '>='
|
22
20
|
- !ruby/object:Gem::Version
|
23
21
|
version: 2.0.0
|
24
22
|
type: :development
|
25
23
|
prerelease: false
|
26
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - ! '>='
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: 2.0.0
|
27
29
|
- !ruby/object:Gem::Dependency
|
28
30
|
name: actionpack
|
29
|
-
requirement:
|
30
|
-
none: false
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
31
32
|
requirements:
|
32
33
|
- - ! '>='
|
33
34
|
- !ruby/object:Gem::Version
|
34
35
|
version: '0'
|
35
36
|
type: :runtime
|
36
37
|
prerelease: false
|
37
|
-
version_requirements:
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ! '>='
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0'
|
38
43
|
description: This gem builds HTML-table using given array
|
39
44
|
email:
|
40
45
|
- dima.lunich@gmail.com
|
@@ -66,7 +71,9 @@ files:
|
|
66
71
|
- Gemfile
|
67
72
|
- init.rb
|
68
73
|
homepage: http://github.com/lunich/table_for
|
69
|
-
licenses:
|
74
|
+
licenses:
|
75
|
+
- MIT
|
76
|
+
metadata: {}
|
70
77
|
post_install_message:
|
71
78
|
rdoc_options:
|
72
79
|
- --main
|
@@ -74,23 +81,21 @@ rdoc_options:
|
|
74
81
|
require_paths:
|
75
82
|
- lib
|
76
83
|
required_ruby_version: !ruby/object:Gem::Requirement
|
77
|
-
none: false
|
78
84
|
requirements:
|
79
85
|
- - ! '>='
|
80
86
|
- !ruby/object:Gem::Version
|
81
87
|
version: '0'
|
82
88
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
|
-
none: false
|
84
89
|
requirements:
|
85
90
|
- - ! '>='
|
86
91
|
- !ruby/object:Gem::Version
|
87
92
|
version: '0'
|
88
93
|
requirements: []
|
89
94
|
rubyforge_project: ''
|
90
|
-
rubygems_version: 1.
|
95
|
+
rubygems_version: 2.1.10
|
91
96
|
signing_key:
|
92
|
-
specification_version:
|
93
|
-
summary: table_for_collection-1.0.
|
97
|
+
specification_version: 4
|
98
|
+
summary: table_for_collection-1.0.7
|
94
99
|
test_files:
|
95
100
|
- spec/core_ex/array_spec.rb
|
96
101
|
- spec/spec_helper.rb
|