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 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