declarative_grid 0.0.1 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +14 -6
- data/declarative_grid.gemspec +1 -0
- data/lib/declarative_grid/base.rb +2 -20
- data/lib/declarative_grid/model/column.rb +1 -0
- data/lib/declarative_grid/model.rb +25 -4
- data/lib/declarative_grid/renderers/abstract_renderer.rb +12 -12
- data/lib/declarative_grid/renderers/csv.rb +4 -7
- data/lib/declarative_grid/renderers/html.rb +52 -0
- data/lib/declarative_grid/renderers.rb +21 -4
- data/lib/declarative_grid/version.rb +1 -1
- data/lib/declarative_grid.rb +5 -19
- data/spec/declarative_grid/base_spec.rb +10 -12
- data/spec/declarative_grid/{model/grid_class_spec.rb → model_spec.rb} +2 -2
- data/spec/declarative_grid/renderers/abstract_renderer_spec.rb +19 -13
- data/spec/declarative_grid/renderers/csv_spec.rb +37 -0
- data/spec/declarative_grid/renderers/html_spec.rb +47 -0
- data/spec/declarative_grid/renderers_spec.rb +0 -0
- data/spec/declarative_grid_spec.rb +0 -10
- metadata +27 -7
- data/lib/declarative_grid/configuration.rb +0 -6
- data/lib/declarative_grid/model/grid_class.rb +0 -29
- data/lib/declarative_grid/renderers/html_table.rb +0 -38
data/README.md
CHANGED
@@ -24,9 +24,6 @@ in models/member_grid.rb
|
|
24
24
|
# with builtin render class: DeclarativeGrid::Renderers::Csv
|
25
25
|
renderer :csv
|
26
26
|
#
|
27
|
-
# with builtin render class: DeclarativeGrid::Renderers::HtmlTable
|
28
|
-
renderer :html_table
|
29
|
-
#
|
30
27
|
# with selected columns
|
31
28
|
renderer :csv_selected, class: :csv, columns: [:gender, :name]
|
32
29
|
#
|
@@ -46,10 +43,15 @@ example code:
|
|
46
43
|
@grid = MemberGrid.new { [m] }
|
47
44
|
|
48
45
|
puts "== sample 1 =="
|
49
|
-
@grid.renderer(:csv).
|
46
|
+
puts @grid.renderer(:csv).to_string
|
50
47
|
|
51
48
|
puts "== sample 2 =="
|
52
|
-
@grid.renderer(:csv_selected).
|
49
|
+
puts @grid.renderer(:csv_selected).to_string
|
50
|
+
|
51
|
+
puts "== sample 3 =="
|
52
|
+
io = StringIO.new
|
53
|
+
@grid.renderer(:csv_selected).perform(io)
|
54
|
+
puts io.string
|
53
55
|
|
54
56
|
result:
|
55
57
|
|
@@ -59,7 +61,9 @@ result:
|
|
59
61
|
== sample 2 ==
|
60
62
|
Sex,Name
|
61
63
|
Male,Adam Jensen
|
62
|
-
|
64
|
+
== sample 3 ==
|
65
|
+
Sex,Name
|
66
|
+
Male,Adam Jensen
|
63
67
|
|
64
68
|
## Installation
|
65
69
|
|
@@ -77,6 +81,10 @@ Or install it yourself as:
|
|
77
81
|
|
78
82
|
## Usage
|
79
83
|
|
84
|
+
If you want to use it with ActiveRecord, like this:
|
85
|
+
|
86
|
+
grid = MemberGrid.new { Enumerator.new(Member.where(is_good: true), :find_each) }
|
87
|
+
|
80
88
|
## How to Test
|
81
89
|
|
82
90
|
$ rake spec
|
data/declarative_grid.gemspec
CHANGED
@@ -26,5 +26,6 @@ Gem::Specification.new do |gem|
|
|
26
26
|
gem.add_development_dependency "minitest", "~> 4.1.0"
|
27
27
|
gem.add_development_dependency "mocha", "~> 0.12.7"
|
28
28
|
gem.add_development_dependency "factory_girl", "~> 4.1.0"
|
29
|
+
gem.add_development_dependency "nokogiri", "~> 1.5.5"
|
29
30
|
|
30
31
|
end
|
@@ -1,25 +1,7 @@
|
|
1
1
|
module DeclarativeGrid
|
2
2
|
class Base
|
3
|
-
extend Model
|
4
|
-
|
5
|
-
# Renderer Classes
|
6
|
-
def self.renderer_classes
|
7
|
-
@renderer_classes ||= {}
|
8
|
-
end
|
9
|
-
|
10
|
-
# Define a renderer
|
11
|
-
def self.renderer(name, options = {})
|
12
|
-
klass = Class.new begin
|
13
|
-
case k = options.delete(:class)
|
14
|
-
when Class then k
|
15
|
-
when String then k.camelize.constantize
|
16
|
-
else "declarative_grid/renderers/#{k || name}".camelize.constantize
|
17
|
-
end
|
18
|
-
end
|
19
|
-
klass.grid_class = self
|
20
|
-
klass.options.merge! options
|
21
|
-
self.renderer_classes[name] = klass
|
22
|
-
end
|
3
|
+
extend Model
|
4
|
+
extend Renderers
|
23
5
|
|
24
6
|
# Attributes
|
25
7
|
attr_accessor :records
|
@@ -1,7 +1,28 @@
|
|
1
|
+
require_relative 'model/column'
|
2
|
+
require_relative 'model/row'
|
3
|
+
|
1
4
|
module DeclarativeGrid::Model
|
2
|
-
extend ActiveSupport::Autoload
|
3
5
|
|
4
|
-
|
5
|
-
|
6
|
-
|
6
|
+
def row
|
7
|
+
@row ||= Row.new
|
8
|
+
end
|
9
|
+
|
10
|
+
# Define a column
|
11
|
+
# REFERENCE: Model::Row#define_column
|
12
|
+
def column(name, options = {}, &block)
|
13
|
+
self.row.define_column(name, options, &block)
|
14
|
+
end
|
15
|
+
|
16
|
+
# Return the columns
|
17
|
+
# REFERENCE: Model::Row#columns
|
18
|
+
def columns(*args)
|
19
|
+
self.row.columns(*args)
|
20
|
+
end
|
21
|
+
|
22
|
+
# override Class.inherited
|
23
|
+
def inherited(subclass)
|
24
|
+
super(subclass)
|
25
|
+
subclass.instance_variable_set :@row, self.row.dup
|
26
|
+
end
|
27
|
+
|
7
28
|
end
|
@@ -69,24 +69,24 @@ module DeclarativeGrid
|
|
69
69
|
self.class.inspect
|
70
70
|
end
|
71
71
|
|
72
|
-
#
|
73
|
-
def
|
74
|
-
block ? each_data_string(&block) : Enumerator.new(self, :each_data)
|
75
|
-
end
|
76
|
-
|
77
|
-
protected
|
78
|
-
|
79
|
-
# Render data to the block
|
80
|
-
def each_data_string
|
72
|
+
# Render data to the stream
|
73
|
+
def perform(io)
|
81
74
|
#
|
82
|
-
#
|
83
|
-
#
|
84
|
-
# yield string3
|
75
|
+
# io.write string1
|
76
|
+
# io.puts string2
|
85
77
|
# ...
|
86
78
|
#
|
87
79
|
raise NotImplementedError
|
88
80
|
end
|
89
81
|
|
82
|
+
# Render to string
|
83
|
+
def to_string
|
84
|
+
io = StringIO.new
|
85
|
+
self.perform(io)
|
86
|
+
io.close
|
87
|
+
io.string
|
88
|
+
end
|
89
|
+
|
90
90
|
private
|
91
91
|
|
92
92
|
# Return row (array of data) of a given record
|
@@ -3,13 +3,10 @@ module DeclarativeGrid
|
|
3
3
|
class Csv < AbstractRenderer
|
4
4
|
require 'csv'
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
each_row do |row|
|
11
|
-
yield CSV.generate_line(row)
|
12
|
-
end
|
6
|
+
def perform(io)
|
7
|
+
csv = CSV.new(io, headers: true, write_headers: true)
|
8
|
+
csv << self.headers
|
9
|
+
self.each_row {|row| csv << row }
|
13
10
|
end
|
14
11
|
|
15
12
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module DeclarativeGrid
|
2
|
+
module Renderers
|
3
|
+
class Html < AbstractRenderer
|
4
|
+
|
5
|
+
def util
|
6
|
+
ERB::Util
|
7
|
+
end
|
8
|
+
delegate :html_escape, to: :util
|
9
|
+
|
10
|
+
def perform(io)
|
11
|
+
table {|s| io.puts(s) }
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_string
|
15
|
+
super.html_safe
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def table
|
21
|
+
yield '<table>'
|
22
|
+
|
23
|
+
if cap = self.options[:catpion]
|
24
|
+
yield "<caption>#{html_escape(cap)}</caption>"
|
25
|
+
end
|
26
|
+
|
27
|
+
thead {|s| yield s }
|
28
|
+
tbody {|s| yield s }
|
29
|
+
|
30
|
+
yield '</table>'
|
31
|
+
end
|
32
|
+
|
33
|
+
def thead
|
34
|
+
yield '<thead>'
|
35
|
+
yield '<tr>'
|
36
|
+
self.headers.each {|h| yield "<th>#{html_escape(h)}</th>" }
|
37
|
+
yield '</tr>'
|
38
|
+
yield '</thead>'
|
39
|
+
end
|
40
|
+
|
41
|
+
def tbody
|
42
|
+
yield '<tbody>'
|
43
|
+
self.each_row{ |row|
|
44
|
+
row_html = row.each.map{|d| "<td>#{html_escape(d)}</td>" }.join
|
45
|
+
yield "<tr>#{row_html}</tr>"
|
46
|
+
}
|
47
|
+
yield '</tbody>'
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -1,9 +1,26 @@
|
|
1
1
|
module DeclarativeGrid::Renderers
|
2
|
-
extend ActiveSupport::Autoload
|
3
2
|
|
4
|
-
|
3
|
+
# Renderer Classes
|
4
|
+
def renderer_classes
|
5
|
+
@renderer_classes ||= {}
|
6
|
+
end
|
5
7
|
|
6
|
-
|
7
|
-
|
8
|
+
# Define a renderer
|
9
|
+
def renderer(name, options = {})
|
10
|
+
klass = Class.new begin
|
11
|
+
case k = options.delete(:class)
|
12
|
+
when Class then k
|
13
|
+
when String then k.camelize.constantize
|
14
|
+
else "declarative_grid/renderers/#{k || name}".camelize.constantize
|
15
|
+
end
|
16
|
+
end
|
17
|
+
klass.grid_class = self
|
18
|
+
klass.options.merge! options
|
19
|
+
self.renderer_classes[name] = klass
|
20
|
+
end
|
8
21
|
|
9
22
|
end
|
23
|
+
|
24
|
+
require_relative 'renderers/abstract_renderer'
|
25
|
+
require_relative 'renderers/csv'
|
26
|
+
require_relative 'renderers/html'
|
data/lib/declarative_grid.rb
CHANGED
@@ -1,25 +1,14 @@
|
|
1
1
|
require "active_support/core_ext"
|
2
|
-
require "active_support/concern"
|
3
|
-
require "active_support/dependencies"
|
4
2
|
require "backports"
|
5
3
|
|
6
4
|
require "declarative_grid/version"
|
5
|
+
require 'declarative_grid/model'
|
6
|
+
require 'declarative_grid/renderers'
|
7
|
+
require 'declarative_grid/base'
|
8
|
+
|
9
|
+
require "stringio"
|
7
10
|
|
8
11
|
module DeclarativeGrid
|
9
|
-
extend ActiveSupport::Autoload
|
10
|
-
|
11
|
-
autoload :Configuration
|
12
|
-
autoload :Base
|
13
|
-
autoload :Model
|
14
|
-
autoload :Renderers
|
15
|
-
|
16
|
-
def self.config
|
17
|
-
@config ||= Configuration.new
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.reset_config
|
21
|
-
@config = nil
|
22
|
-
end
|
23
12
|
|
24
13
|
class DefinitionError < StandardError
|
25
14
|
end
|
@@ -27,7 +16,4 @@ module DeclarativeGrid
|
|
27
16
|
class RendererError < StandardError
|
28
17
|
end
|
29
18
|
|
30
|
-
class ConfigurationError < StandardError
|
31
|
-
end
|
32
|
-
|
33
19
|
end
|
@@ -8,8 +8,7 @@ module DeclarativeGrid
|
|
8
8
|
column :two
|
9
9
|
|
10
10
|
renderer :csv
|
11
|
-
renderer :
|
12
|
-
renderer :html_table_1, class: :html_table
|
11
|
+
renderer :csv_0, class: :csv
|
13
12
|
renderer :csv_1, class: 'DeclarativeGrid::Renderers::Csv'
|
14
13
|
renderer :csv_2, class: Renderers::Csv
|
15
14
|
renderer :csv_3, class: :csv, columns: [ :two, :two, :two ]
|
@@ -23,8 +22,12 @@ module DeclarativeGrid
|
|
23
22
|
@base = @klass.new { @records }
|
24
23
|
end
|
25
24
|
|
26
|
-
it "is a
|
27
|
-
@base.class.must_be_kind_of Model
|
25
|
+
it "is a kind of #{Model}" do
|
26
|
+
@base.class.must_be_kind_of Model
|
27
|
+
end
|
28
|
+
|
29
|
+
it "is a kind of #{Renderers}" do
|
30
|
+
@base.class.must_be_kind_of Renderers
|
28
31
|
end
|
29
32
|
|
30
33
|
it "has a collection of records" do
|
@@ -36,14 +39,9 @@ module DeclarativeGrid
|
|
36
39
|
renderer.must_be_kind_of Renderers::Csv
|
37
40
|
end
|
38
41
|
|
39
|
-
it "has a renderer named :
|
40
|
-
renderer = @base.renderer(:
|
41
|
-
renderer.must_be_kind_of Renderers::
|
42
|
-
end
|
43
|
-
|
44
|
-
it "has a renderer named :html_table_1" do
|
45
|
-
renderer = @base.renderer(:html_table_1)
|
46
|
-
renderer.must_be_kind_of Renderers::HtmlTable
|
42
|
+
it "has a renderer named :csv_0" do
|
43
|
+
renderer = @base.renderer(:csv_0)
|
44
|
+
renderer.must_be_kind_of Renderers::Csv
|
47
45
|
renderer.options.wont_include :class
|
48
46
|
end
|
49
47
|
|
@@ -4,7 +4,7 @@ module DeclarativeGrid
|
|
4
4
|
describe Renderers::AbstractRenderer do
|
5
5
|
before do
|
6
6
|
@klass = Class.new Object do
|
7
|
-
extend Model
|
7
|
+
extend Model
|
8
8
|
column :one
|
9
9
|
column :two
|
10
10
|
end
|
@@ -74,25 +74,31 @@ module DeclarativeGrid
|
|
74
74
|
@renderer.options[:columns].must_equal [:two]
|
75
75
|
end
|
76
76
|
|
77
|
-
it "has a not implemented method :
|
77
|
+
it "has a not implemented method :perform" do
|
78
78
|
proc {
|
79
|
-
@renderer.send(:
|
79
|
+
@renderer.send(:perform, StringIO.new)
|
80
80
|
}.must_raise NotImplementedError
|
81
81
|
end
|
82
82
|
|
83
|
-
it "has a method :
|
84
|
-
@renderer.expects(:
|
85
|
-
@renderer.
|
86
|
-
|
83
|
+
it "has a method :to_string to render to a string" do
|
84
|
+
@renderer.expects(:perform)
|
85
|
+
s = @renderer.to_string
|
86
|
+
s.must_be_kind_of String
|
87
87
|
end
|
88
88
|
|
89
|
-
it "call
|
90
|
-
def @renderer.
|
91
|
-
|
92
|
-
|
93
|
-
|
89
|
+
it "call perform to render something" do
|
90
|
+
def @renderer.perform(io)
|
91
|
+
io.write "test"
|
92
|
+
io.write "test2"
|
93
|
+
io.write "test3"
|
94
94
|
end
|
95
|
-
|
95
|
+
begin
|
96
|
+
io = StringIO.new
|
97
|
+
@renderer.perform(io)
|
98
|
+
io.close
|
99
|
+
io.string.must_equal %w(test test2 test3).join
|
100
|
+
end
|
101
|
+
@renderer.to_string.must_equal %w(test test2 test3).join
|
96
102
|
end
|
97
103
|
|
98
104
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module DeclarativeGrid
|
2
|
+
describe Renderers::Csv do
|
3
|
+
before do
|
4
|
+
@record_klass = Struct.new :name, :gender
|
5
|
+
@klass = Class.new Base do
|
6
|
+
column :name
|
7
|
+
column :gender
|
8
|
+
renderer :csv
|
9
|
+
renderer :csv1, class: :csv
|
10
|
+
renderer :csv2, class: Renderers::Csv
|
11
|
+
renderer :csv_select, class: :csv, columns: [:name]
|
12
|
+
end
|
13
|
+
@records = [ @record_klass.new('Adam Jensen', 'Male') ]
|
14
|
+
@grid = @klass.new { @records }
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should make all the renderers be kind of Csv" do
|
18
|
+
@grid.renderer(:csv).must_be_kind_of Renderers::Csv
|
19
|
+
@grid.renderer(:csv1).must_be_kind_of Renderers::Csv
|
20
|
+
@grid.renderer(:csv2).must_be_kind_of Renderers::Csv
|
21
|
+
@grid.renderer(:csv_select).must_be_kind_of Renderers::Csv
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should produce csv strings" do
|
25
|
+
expected = [ "Name,Gender\n", "Adam Jensen,Male\n" ].join
|
26
|
+
[ :csv, :csv1, :csv2 ].each do |renderer_name|
|
27
|
+
@grid.renderer(renderer_name).to_string.must_equal expected
|
28
|
+
end
|
29
|
+
|
30
|
+
expected = [ "Name\n", "Adam Jensen\n" ].join
|
31
|
+
begin
|
32
|
+
@grid.renderer(:csv_select).to_string.must_equal expected
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require "nokogiri"
|
2
|
+
|
3
|
+
module DeclarativeGrid
|
4
|
+
describe Renderers::Html do
|
5
|
+
before do
|
6
|
+
@record_klass = Struct.new :name, :gender
|
7
|
+
@klass = Class.new Base do
|
8
|
+
column :name
|
9
|
+
column :gender
|
10
|
+
renderer :html
|
11
|
+
end
|
12
|
+
@records = [ @record_klass.new('Adam Jensen', 'Male') ]
|
13
|
+
@grid = @klass.new { @records }
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should make all the renderers be kind of Html" do
|
17
|
+
@grid.renderer(:html).must_be_kind_of Renderers::Html
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should produce a HTML-safe string" do
|
21
|
+
@grid.renderer(:html).to_string.html_safe?.must_equal true
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should produce a valid HTML text" do
|
25
|
+
doc = Nokogiri::HTML <<-HTML
|
26
|
+
<!DOCTYPE html>
|
27
|
+
<html>
|
28
|
+
<head>
|
29
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
30
|
+
</head>
|
31
|
+
<body>
|
32
|
+
#{ERB::Util.html_escape @grid.renderer(:html).to_string}
|
33
|
+
</body>
|
34
|
+
</html>
|
35
|
+
HTML
|
36
|
+
|
37
|
+
doc.css('table').wont_be_empty
|
38
|
+
doc.css('table thead').wont_be_empty
|
39
|
+
doc.css('table tbody').wont_be_empty
|
40
|
+
doc.css('table thead tr th').map(&:content).must_equal ['Name', 'Gender']
|
41
|
+
doc.css('table tbody tr td').map(&:content).must_equal [
|
42
|
+
'Adam Jensen', 'Male'
|
43
|
+
]
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
File without changes
|
@@ -2,14 +2,4 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe DeclarativeGrid do
|
4
4
|
|
5
|
-
it "has configuration object" do
|
6
|
-
DeclarativeGrid.config.must_be_kind_of DeclarativeGrid::Configuration
|
7
|
-
end
|
8
|
-
|
9
|
-
it "can reset configuration" do
|
10
|
-
config = DeclarativeGrid.config
|
11
|
-
DeclarativeGrid.reset_config
|
12
|
-
DeclarativeGrid.config.wont_equal config
|
13
|
-
end
|
14
|
-
|
15
5
|
end
|
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.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-11-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -107,6 +107,22 @@ dependencies:
|
|
107
107
|
- - ~>
|
108
108
|
- !ruby/object:Gem::Version
|
109
109
|
version: 4.1.0
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: nokogiri
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ~>
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 1.5.5
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ~>
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 1.5.5
|
110
126
|
description: DeclarativeGrid is a gem for rendering grids described in simple DSL
|
111
127
|
email:
|
112
128
|
- davll.xc@gmail.com
|
@@ -122,21 +138,22 @@ files:
|
|
122
138
|
- declarative_grid.gemspec
|
123
139
|
- lib/declarative_grid.rb
|
124
140
|
- lib/declarative_grid/base.rb
|
125
|
-
- lib/declarative_grid/configuration.rb
|
126
141
|
- lib/declarative_grid/model.rb
|
127
142
|
- lib/declarative_grid/model/column.rb
|
128
|
-
- lib/declarative_grid/model/grid_class.rb
|
129
143
|
- lib/declarative_grid/model/row.rb
|
130
144
|
- lib/declarative_grid/renderers.rb
|
131
145
|
- lib/declarative_grid/renderers/abstract_renderer.rb
|
132
146
|
- lib/declarative_grid/renderers/csv.rb
|
133
|
-
- lib/declarative_grid/renderers/
|
147
|
+
- lib/declarative_grid/renderers/html.rb
|
134
148
|
- lib/declarative_grid/version.rb
|
135
149
|
- spec/declarative_grid/base_spec.rb
|
136
150
|
- spec/declarative_grid/model/column_spec.rb
|
137
|
-
- spec/declarative_grid/model/grid_class_spec.rb
|
138
151
|
- spec/declarative_grid/model/row_spec.rb
|
152
|
+
- spec/declarative_grid/model_spec.rb
|
139
153
|
- spec/declarative_grid/renderers/abstract_renderer_spec.rb
|
154
|
+
- spec/declarative_grid/renderers/csv_spec.rb
|
155
|
+
- spec/declarative_grid/renderers/html_spec.rb
|
156
|
+
- spec/declarative_grid/renderers_spec.rb
|
140
157
|
- spec/declarative_grid_spec.rb
|
141
158
|
- spec/factories/models.rb
|
142
159
|
- spec/spec_helper.rb
|
@@ -167,9 +184,12 @@ summary: A flexible grid renderer
|
|
167
184
|
test_files:
|
168
185
|
- spec/declarative_grid/base_spec.rb
|
169
186
|
- spec/declarative_grid/model/column_spec.rb
|
170
|
-
- spec/declarative_grid/model/grid_class_spec.rb
|
171
187
|
- spec/declarative_grid/model/row_spec.rb
|
188
|
+
- spec/declarative_grid/model_spec.rb
|
172
189
|
- spec/declarative_grid/renderers/abstract_renderer_spec.rb
|
190
|
+
- spec/declarative_grid/renderers/csv_spec.rb
|
191
|
+
- spec/declarative_grid/renderers/html_spec.rb
|
192
|
+
- spec/declarative_grid/renderers_spec.rb
|
173
193
|
- spec/declarative_grid_spec.rb
|
174
194
|
- spec/factories/models.rb
|
175
195
|
- spec/spec_helper.rb
|
@@ -1,29 +0,0 @@
|
|
1
|
-
module DeclarativeGrid
|
2
|
-
module Model
|
3
|
-
module GridClass
|
4
|
-
|
5
|
-
def row
|
6
|
-
@row ||= Model::Row.new
|
7
|
-
end
|
8
|
-
|
9
|
-
# Define a column
|
10
|
-
# REFERENCE: Model::Row#define_column
|
11
|
-
def column(name, options = {}, &block)
|
12
|
-
self.row.define_column(name, options, &block)
|
13
|
-
end
|
14
|
-
|
15
|
-
# Return the columns
|
16
|
-
# REFERENCE: Model::Row#columns
|
17
|
-
def columns(*args)
|
18
|
-
self.row.columns(*args)
|
19
|
-
end
|
20
|
-
|
21
|
-
# override Class.inherited
|
22
|
-
def inherited(subclass)
|
23
|
-
super(subclass)
|
24
|
-
subclass.instance_variable_set :@row, self.row.dup
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
module DeclarativeGrid
|
2
|
-
module Renderers
|
3
|
-
class HtmlTable < AbstractRenderer
|
4
|
-
|
5
|
-
def utils
|
6
|
-
ERB::Util
|
7
|
-
end
|
8
|
-
delegate :html_escape, to: :utils
|
9
|
-
|
10
|
-
protected
|
11
|
-
|
12
|
-
def each_data_string
|
13
|
-
yield "<table>"
|
14
|
-
|
15
|
-
if options[:caption]
|
16
|
-
yield "<caption>#{html_escape(options[:caption])}</caption>"
|
17
|
-
end
|
18
|
-
|
19
|
-
yield "<thead><tr>"
|
20
|
-
headers.each do |n|
|
21
|
-
yield "<th>#{html_escape(n)}</th>"
|
22
|
-
end
|
23
|
-
yield "</tr></thead>"
|
24
|
-
|
25
|
-
yield "<tbody>"
|
26
|
-
each_row do |r|
|
27
|
-
yield "<tr>"
|
28
|
-
r.each {|n| yield "<td>#{html_escape(n)}</td>" }
|
29
|
-
yield "</tr>"
|
30
|
-
end
|
31
|
-
yield "</tbody>"
|
32
|
-
|
33
|
-
yield "</table>"
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|