declarative_grid 0.0.5 → 0.1.0
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/README.md +47 -4
- data/Rakefile +5 -0
- data/declarative_grid.gemspec +2 -0
- data/lib/declarative_grid/base.rb +10 -2
- data/lib/declarative_grid/version.rb +1 -1
- data/sample1.rb +43 -0
- data/spec/declarative_grid/active_record_spec.rb +62 -0
- data/spec/declarative_grid/base_spec.rb +1 -1
- data/spec/declarative_grid/renderers/csv_spec.rb +1 -1
- data/spec/declarative_grid/renderers/html_spec.rb +1 -1
- metadata +36 -1
data/README.md
CHANGED
@@ -8,6 +8,17 @@ DeclarativeGrid is a simple, flexible and extensible datagrid/table generator.
|
|
8
8
|
- Any Enumerable or Enumerator can be source data
|
9
9
|
- It is independent from ActiveRecord and other ORMs
|
10
10
|
|
11
|
+
## Deprecation
|
12
|
+
|
13
|
+
In Version 0.1.0, block-style instantization is formally deprecated,
|
14
|
+
it will be removed on the next release (0.2.0)
|
15
|
+
|
16
|
+
grid = MemberGrid.new { records }
|
17
|
+
|
18
|
+
Please pass records as an argument instead
|
19
|
+
|
20
|
+
grid = MemberGrid.new(records)
|
21
|
+
|
11
22
|
## Example
|
12
23
|
|
13
24
|
in models/member_grid.rb
|
@@ -24,6 +35,9 @@ in models/member_grid.rb
|
|
24
35
|
# with builtin render class: DeclarativeGrid::Renderers::Csv
|
25
36
|
renderer :csv
|
26
37
|
#
|
38
|
+
# with builtin render class: DeclarativeGrid::Renderers::Html
|
39
|
+
renderer :html
|
40
|
+
#
|
27
41
|
# with selected columns
|
28
42
|
renderer :csv_selected, class: :csv, columns: [:gender, :name]
|
29
43
|
#
|
@@ -39,8 +53,14 @@ in member.rb
|
|
39
53
|
|
40
54
|
example code:
|
41
55
|
|
42
|
-
|
43
|
-
|
56
|
+
members = [
|
57
|
+
Member.new('Adam Jensen', 'Male', Date.new(1993,3,9)),
|
58
|
+
Member.new('Altaïr Ibn-La\'Ahad', 'Male', Date.new(1165,1,11)),
|
59
|
+
Member.new('Ezio Auditore da Firenze', 'Male', Date.new(1459,6,24)),
|
60
|
+
Member.new('Desmond Miles', 'Male', Date.new(1987,3,13))
|
61
|
+
]
|
62
|
+
|
63
|
+
@grid = MemberGrid.new(members)
|
44
64
|
|
45
65
|
puts "== sample 1 =="
|
46
66
|
puts @grid.renderer(:csv).to_string
|
@@ -58,12 +78,21 @@ result:
|
|
58
78
|
== sample 1 ==
|
59
79
|
Name,Birthday,Sex
|
60
80
|
Adam Jensen,1993-03-09,Male
|
81
|
+
Altaïr Ibn-La'Ahad,1165-01-11,Male
|
82
|
+
Ezio Auditore da Firenze,1459-06-24,Male
|
83
|
+
Desmond Miles,1987-03-13,Male
|
61
84
|
== sample 2 ==
|
62
85
|
Sex,Name
|
63
86
|
Male,Adam Jensen
|
87
|
+
Male,Altaïr Ibn-La'Ahad
|
88
|
+
Male,Ezio Auditore da Firenze
|
89
|
+
Male,Desmond Miles
|
64
90
|
== sample 3 ==
|
65
91
|
Sex,Name
|
66
92
|
Male,Adam Jensen
|
93
|
+
Male,Altaïr Ibn-La'Ahad
|
94
|
+
Male,Ezio Auditore da Firenze
|
95
|
+
Male,Desmond Miles
|
67
96
|
|
68
97
|
## Installation
|
69
98
|
|
@@ -81,9 +110,23 @@ Or install it yourself as:
|
|
81
110
|
|
82
111
|
## Usage
|
83
112
|
|
84
|
-
If you want to
|
113
|
+
If you want to work with ActiveRecord, like this:
|
114
|
+
|
115
|
+
grid = MemberGrid.new(Enumerator.new(Member.where(is_good: true), :find_each))
|
116
|
+
|
117
|
+
If you want shorter code:
|
118
|
+
|
119
|
+
grid = MemberGrid.new Member
|
120
|
+
|
121
|
+
or
|
122
|
+
|
123
|
+
grid = MemberGrid.new Member.where(is_good: true)
|
124
|
+
|
125
|
+
The library will automatically wrap the records with Enumerator,
|
126
|
+
preventing from massive flooding.
|
85
127
|
|
86
|
-
|
128
|
+
Note that ActiveRecord#all (prior to 4.0) returns an Array
|
129
|
+
instead of ActiveRecord::Relation. Please avoid using it.
|
87
130
|
|
88
131
|
## How to Test
|
89
132
|
|
data/Rakefile
CHANGED
data/declarative_grid.gemspec
CHANGED
@@ -27,5 +27,7 @@ Gem::Specification.new do |gem|
|
|
27
27
|
gem.add_development_dependency "mocha", "~> 0.12.7"
|
28
28
|
gem.add_development_dependency "factory_girl", "~> 4.1.0"
|
29
29
|
gem.add_development_dependency "nokogiri", "~> 1.5.5"
|
30
|
+
gem.add_development_dependency "activerecord", "~> 3.2.8"
|
31
|
+
gem.add_development_dependency "sqlite3", "~> 1.3.6"
|
30
32
|
|
31
33
|
end
|
@@ -10,8 +10,16 @@ module DeclarativeGrid
|
|
10
10
|
#
|
11
11
|
# Usage 1: grid = MyGrid.new { MyRecord.all }
|
12
12
|
#
|
13
|
-
def initialize
|
14
|
-
|
13
|
+
def initialize(records = nil)
|
14
|
+
if block_given?
|
15
|
+
STDERR.puts 'WARNING: block-style instantization is deprecated'
|
16
|
+
records = yield
|
17
|
+
end
|
18
|
+
|
19
|
+
if records.respond_to?(:find_each)
|
20
|
+
records = Enumerator.new records, :find_each
|
21
|
+
end
|
22
|
+
self.records = records
|
15
23
|
end
|
16
24
|
|
17
25
|
# Renderer by name
|
data/sample1.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
#encoding: UTF-8
|
2
|
+
class MemberGrid < DeclarativeGrid::Base
|
3
|
+
# Columns
|
4
|
+
#
|
5
|
+
column(:name)
|
6
|
+
column(:birthday) {|r| (r.birthdate) }
|
7
|
+
column(:gender, header: 'Sex')
|
8
|
+
|
9
|
+
# Renderers
|
10
|
+
#
|
11
|
+
# with builtin render class: DeclarativeGrid::Renderers::Csv
|
12
|
+
renderer :csv
|
13
|
+
#
|
14
|
+
# with builtin render class: DeclarativeGrid::Renderers::Html
|
15
|
+
renderer :html
|
16
|
+
#
|
17
|
+
# with selected columns
|
18
|
+
renderer :csv_selected, class: :csv, columns: [:gender, :name]
|
19
|
+
#
|
20
|
+
end
|
21
|
+
|
22
|
+
class Member < Struct.new(:name, :gender, :birthdate)
|
23
|
+
end
|
24
|
+
|
25
|
+
members = [
|
26
|
+
Member.new('Adam Jensen', 'Male', Date.new(1993,3,9)),
|
27
|
+
Member.new('Altaïr Ibn-La\'Ahad', 'Male', Date.new(1165,1,11)),
|
28
|
+
Member.new('Ezio Auditore da Firenze', 'Male', Date.new(1459,6,24)),
|
29
|
+
Member.new('Desmond Miles', 'Male', Date.new(1987,3,13))
|
30
|
+
]
|
31
|
+
|
32
|
+
grid = MemberGrid.new(members)
|
33
|
+
|
34
|
+
puts "== sample 1 =="
|
35
|
+
puts grid.renderer(:csv).to_string
|
36
|
+
|
37
|
+
puts "== sample 2 =="
|
38
|
+
puts grid.renderer(:csv_selected).to_string
|
39
|
+
|
40
|
+
puts "== sample 3 =="
|
41
|
+
io = StringIO.new
|
42
|
+
grid.renderer(:csv_selected).perform(io)
|
43
|
+
puts io.string
|
@@ -0,0 +1,62 @@
|
|
1
|
+
#encoding: UTF-8
|
2
|
+
require 'active_record'
|
3
|
+
require "spec_helper"
|
4
|
+
|
5
|
+
module DeclarativeGrid
|
6
|
+
describe Base do
|
7
|
+
before do
|
8
|
+
@grid_klass = Class.new Base do
|
9
|
+
column :name
|
10
|
+
column :gender_id
|
11
|
+
|
12
|
+
renderer :csv
|
13
|
+
end
|
14
|
+
|
15
|
+
config = { adapter: 'sqlite3', database: ':memory:' }
|
16
|
+
ActiveRecord::Base.establish_connection(config)
|
17
|
+
|
18
|
+
ActiveRecord::Schema.define do
|
19
|
+
create_table :members do |t|
|
20
|
+
t.string :name
|
21
|
+
t.integer :gender_id
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
@record_klass = Class.new ActiveRecord::Base do
|
26
|
+
self.table_name = 'members'
|
27
|
+
end
|
28
|
+
|
29
|
+
@names = [
|
30
|
+
'Adam Jensen', 'Nathan Drake', 'Lara Croft',
|
31
|
+
"Alta\xC3\xAFr Ibn-La\'Ahad",
|
32
|
+
"Ezio Auditore da Firenze",
|
33
|
+
"Ratonhnhak\xC3\xA9:ton",
|
34
|
+
"Desmond Miles"
|
35
|
+
]
|
36
|
+
@genders = [
|
37
|
+
1, 1, 2,
|
38
|
+
1,
|
39
|
+
1,
|
40
|
+
1,
|
41
|
+
1
|
42
|
+
]
|
43
|
+
|
44
|
+
[@names, @genders].transpose.each do |a|
|
45
|
+
@record_klass.create name: a[0], gender_id: a[1]
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
it "can accept ActiveRecord::Base and its subclasses" do
|
51
|
+
base = @grid_klass.new @record_klass
|
52
|
+
base.renderer(:csv).each_record.map(&:name).must_equal @names
|
53
|
+
end
|
54
|
+
|
55
|
+
it "can accept ActiveRecord::Relation and its mixed-classes" do
|
56
|
+
base = @grid_klass.new @record_klass.where(nil)
|
57
|
+
base.renderer(:csv).each_record.map(&:name).must_equal @names
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
@@ -11,7 +11,7 @@ module DeclarativeGrid
|
|
11
11
|
renderer :csv_select, class: :csv, columns: [:name]
|
12
12
|
end
|
13
13
|
@records = [ @record_klass.new('Adam Jensen', 'Male') ]
|
14
|
-
@grid = @klass.new
|
14
|
+
@grid = @klass.new @records
|
15
15
|
end
|
16
16
|
|
17
17
|
it "should make all the renderers be kind of Csv" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: declarative_grid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -123,6 +123,38 @@ dependencies:
|
|
123
123
|
- - ~>
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: 1.5.5
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: activerecord
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ~>
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: 3.2.8
|
134
|
+
type: :development
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ~>
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: 3.2.8
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: sqlite3
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ~>
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: 1.3.6
|
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: 1.3.6
|
126
158
|
description: DeclarativeGrid is a gem for rendering grids described in simple DSL
|
127
159
|
email:
|
128
160
|
- davll.xc@gmail.com
|
@@ -146,6 +178,8 @@ files:
|
|
146
178
|
- lib/declarative_grid/renderers/csv.rb
|
147
179
|
- lib/declarative_grid/renderers/html.rb
|
148
180
|
- lib/declarative_grid/version.rb
|
181
|
+
- sample1.rb
|
182
|
+
- spec/declarative_grid/active_record_spec.rb
|
149
183
|
- spec/declarative_grid/base_spec.rb
|
150
184
|
- spec/declarative_grid/model/column_spec.rb
|
151
185
|
- spec/declarative_grid/model/row_spec.rb
|
@@ -182,6 +216,7 @@ signing_key:
|
|
182
216
|
specification_version: 3
|
183
217
|
summary: A flexible grid renderer
|
184
218
|
test_files:
|
219
|
+
- spec/declarative_grid/active_record_spec.rb
|
185
220
|
- spec/declarative_grid/base_spec.rb
|
186
221
|
- spec/declarative_grid/model/column_spec.rb
|
187
222
|
- spec/declarative_grid/model/row_spec.rb
|