declarative_grid 0.0.1 → 0.0.5
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 +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
|