declarative_grid 0.0.5 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
- m = Member.new('Adam Jensen', 'Male', Date.new(1993,3,9))
43
- @grid = MemberGrid.new { [m] }
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 use it with ActiveRecord, like this:
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
- grid = MemberGrid.new { Enumerator.new(Member.where(is_good: true), :find_each) }
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
@@ -10,3 +10,8 @@ desc "Open an irb session preloaded with this library"
10
10
  task :console do
11
11
  sh "irb -rubygems -I lib -r declarative_grid"
12
12
  end
13
+
14
+ desc "Run sample No.1 for README"
15
+ task :sample1 do
16
+ sh "ruby -rubygems -I lib -r declarative_grid sample1.rb"
17
+ end
@@ -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
- self.records = yield
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
@@ -1,3 +1,3 @@
1
1
  module DeclarativeGrid
2
- VERSION = "0.0.5"
2
+ VERSION = "0.1.0"
3
3
  end
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
+
@@ -19,7 +19,7 @@ module DeclarativeGrid
19
19
  @record_class.new n+1, n*2
20
20
  end
21
21
 
22
- @base = @klass.new { @records }
22
+ @base = @klass.new @records
23
23
  end
24
24
 
25
25
  it "is a kind of #{Model}" do
@@ -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 { @records }
14
+ @grid = @klass.new @records
15
15
  end
16
16
 
17
17
  it "should make all the renderers be kind of Csv" do
@@ -10,7 +10,7 @@ module DeclarativeGrid
10
10
  renderer :html
11
11
  end
12
12
  @records = [ @record_klass.new('Adam Jensen', 'Male') ]
13
- @grid = @klass.new { @records }
13
+ @grid = @klass.new @records
14
14
  end
15
15
 
16
16
  it "should make all the renderers be kind of Html" 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.5
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