table_builder 0.1.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/table_builder/calendar_helper.rb +52 -112
- data/lib/table_builder/table_builder.rb +37 -97
- data/table_builder.gemspec +2 -2
- data/test/calendar_helper_test.rb +139 -138
- data/test/table_builder_test.rb +203 -162
- data/test/test_helper.rb +8 -2
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1
|
1
|
+
0.2.1
|
@@ -1,139 +1,79 @@
|
|
1
1
|
module CalendarHelper
|
2
2
|
|
3
|
-
def calendar_for
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
builder
|
8
|
-
calendar = options[:calendar] || Calendar
|
9
|
-
concat(tag(:table, html_options, true))
|
10
|
-
yield builder.new(objects || [], self, calendar, options)
|
11
|
-
concat('</table>')
|
3
|
+
def calendar_for objects, options = {}
|
4
|
+
html_options = options.delete(:html)
|
5
|
+
builder = options.delete(:builder) || CalendarBuilder
|
6
|
+
calendar = options.delete(:calendar) || Calendar
|
7
|
+
concat content_tag(:table, html_options){ yield builder.new(objects || [], self, calendar, options) }
|
12
8
|
end
|
13
9
|
|
14
10
|
class CalendarBuilder < TableHelper::TableBuilder
|
15
|
-
def initialize
|
16
|
-
super(objects, template, options)
|
11
|
+
def initialize objects, template, calendar, options
|
17
12
|
@calendar = calendar.new(options)
|
18
|
-
@today
|
19
|
-
|
20
|
-
|
21
|
-
|
13
|
+
@today = options[:today] || Time.now
|
14
|
+
super objects, template, options
|
15
|
+
end
|
16
|
+
|
17
|
+
def day options = {}
|
22
18
|
raise ArgumentError, "Missing block" unless block_given?
|
23
|
-
options = options_from_hash(args)
|
24
19
|
day_method = options.delete(:day_method) || :date
|
25
20
|
id_pattern = options.delete(:id)
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
21
|
+
|
22
|
+
tag(:tbody) do
|
23
|
+
output = ''
|
24
|
+
@calendar.objects_for_days(@objects, &day_method).each_slice(7) do |week|
|
25
|
+
output = r do
|
26
|
+
week.map do |day, objects|
|
27
|
+
d capture{yield day, objects}, td_options(day, objects, id_pattern)
|
28
|
+
end
|
29
|
+
end
|
35
30
|
end
|
31
|
+
output
|
36
32
|
end
|
33
|
+
|
37
34
|
end
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
def objects_for_days
|
42
|
-
@calendar.objects_for_days(@objects)
|
43
|
-
end
|
44
|
-
|
45
|
-
def td_options(day, id_pattern)
|
35
|
+
|
36
|
+
def td_options day, objects, id_pattern
|
46
37
|
options = {}
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
if id_pattern
|
55
|
-
|
56
|
-
|
38
|
+
css = []
|
39
|
+
css << 'notmonth' if day.month != @calendar.month
|
40
|
+
css << 'today' if @today == day
|
41
|
+
css << 'weekend' if day.wday == 0 or day.wday == 6
|
42
|
+
# css << 'empty' if objects.empty?
|
43
|
+
|
44
|
+
options[:class] = css.join(' ')
|
45
|
+
options[:id] = day.strftime(id_pattern) if id_pattern
|
46
|
+
|
47
|
+
options.delete_if{ |k,v| v.blank? }
|
57
48
|
options
|
58
49
|
end
|
59
|
-
|
50
|
+
|
60
51
|
end
|
61
52
|
|
62
53
|
class Calendar
|
63
|
-
|
64
|
-
def initialize
|
65
|
-
@year
|
66
|
-
@month
|
67
|
-
@
|
68
|
-
@
|
69
|
-
@
|
70
|
-
@
|
71
|
-
@
|
54
|
+
attr_reader :month, :first_weekday, :last_weekday, :first_day, :last_day
|
55
|
+
def initialize options = {}
|
56
|
+
@year = options[:year] || Time.now.year
|
57
|
+
@month = options[:month] || Time.now.month
|
58
|
+
@first_weekday = (options[:first_weekday] || 0) % 7
|
59
|
+
@last_weekday = (@first_weekday + 6) % 7
|
60
|
+
@first = Date.civil @year, @month, 1
|
61
|
+
@last = Date.civil @year, @month, -1
|
62
|
+
@first_day = @first - (@first.wday - @first_weekday + 7) % 7
|
63
|
+
@last_day = @last + (@last_weekday - @last.wday + 7) % 7
|
72
64
|
end
|
73
65
|
|
74
|
-
def each_day
|
75
|
-
first_day.
|
76
|
-
yield(day)
|
77
|
-
end
|
66
|
+
def each_day &block
|
67
|
+
(first_day..last_day).map(&block)
|
78
68
|
end
|
79
69
|
|
80
|
-
def
|
81
|
-
|
82
|
-
|
83
|
-
last = last.next
|
84
|
-
end
|
85
|
-
last
|
86
|
-
end
|
87
|
-
|
88
|
-
def first_day
|
89
|
-
first = @first - 6
|
90
|
-
while(first.wday % 7 != (@first_weekday) % 7)
|
91
|
-
first = first.next
|
92
|
-
end
|
93
|
-
first
|
94
|
-
end
|
95
|
-
|
96
|
-
def objects_for_days(objects, day_method)
|
97
|
-
unless @objects_for_days
|
98
|
-
@objects_for_days = {}
|
99
|
-
days.each{|day| @objects_for_days[day.strftime("%Y-%m-%d")] = [day, []]}
|
100
|
-
objects.each do |o|
|
101
|
-
date = o.send(day_method.to_sym).strftime("%Y-%m-%d")
|
102
|
-
if @objects_for_days[date]
|
103
|
-
@objects_for_days[date][1] << o
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
@objects_for_days
|
70
|
+
def objects_for_days objects, &day_method
|
71
|
+
objects = objects.group_by(&day_method)
|
72
|
+
each_day { |day| [day, objects[day] || []] }
|
108
73
|
end
|
109
74
|
|
110
75
|
def days
|
111
|
-
|
112
|
-
@days = []
|
113
|
-
each_day{|day| @days << day}
|
114
|
-
end
|
115
|
-
@days
|
116
|
-
end
|
117
|
-
|
118
|
-
def mjdays
|
119
|
-
unless @mjdays
|
120
|
-
@mdays = []
|
121
|
-
each_day{|day| @days << day}
|
122
|
-
end
|
123
|
-
@days
|
124
|
-
end
|
125
|
-
|
126
|
-
def first_day_of_week(day)
|
127
|
-
day
|
76
|
+
@days ||= each_day
|
128
77
|
end
|
129
|
-
|
130
|
-
def last_day_of_week(day)
|
131
|
-
if day > 0
|
132
|
-
day - 1
|
133
|
-
else
|
134
|
-
6
|
135
|
-
end
|
136
|
-
end
|
137
78
|
end
|
138
|
-
|
139
|
-
end
|
79
|
+
end
|
@@ -1,125 +1,65 @@
|
|
1
1
|
module TableHelper
|
2
2
|
|
3
|
-
def table_for
|
4
|
-
|
5
|
-
|
6
|
-
html_options
|
7
|
-
builder = options[:builder] || TableBuilder
|
8
|
-
|
9
|
-
concat(tag(:table, html_options, true))
|
10
|
-
yield builder.new(objects || [], self, options)
|
11
|
-
concat('</table>')
|
3
|
+
def table_for objects = [], options = {}
|
4
|
+
html_options = options.delete(:html)
|
5
|
+
builder = options.delete(:builder) || TableBuilder
|
6
|
+
concat content_tag(:table, html_options) { yield builder.new(objects, self, options) }
|
12
7
|
end
|
13
8
|
|
14
9
|
class TableBuilder
|
15
|
-
|
16
|
-
|
17
|
-
def initialize(objects, template, options)
|
18
|
-
raise ArgumentError, "TableBuilder expects an Array but found a #{objects.inspect}" unless objects.is_a? Array
|
10
|
+
def initialize objects, template, options
|
11
|
+
raise ArgumentError, "TableBuilder expects an Array or ActiveRecord::NamedScope::Scope but found a #{objects.class}" unless Array === objects or ActiveRecord::NamedScope::Scope === objects
|
19
12
|
@objects, @template, @options = objects, template, options
|
20
13
|
end
|
21
|
-
|
22
|
-
def
|
23
|
-
|
24
|
-
concat(tag(:thead, options_from_hash(args), true))
|
25
|
-
yield
|
26
|
-
concat('</thead>')
|
27
|
-
else
|
28
|
-
@num_of_columns = args.size
|
29
|
-
content_tag(:thead,
|
30
|
-
content_tag(:tr,
|
31
|
-
args.collect { |c| content_tag(:th, c)}.join('')
|
32
|
-
)
|
33
|
-
)
|
34
|
-
end
|
14
|
+
|
15
|
+
def body options = {}
|
16
|
+
concat content_tag(:tbody, @objects.map{ |o| capture {yield o} }, options)
|
35
17
|
end
|
36
|
-
|
37
|
-
def
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
18
|
+
|
19
|
+
def body_r options = {}
|
20
|
+
concat content_tag(:tbody, @objects.map{ |o| r capture {yield o}, options })
|
21
|
+
end
|
22
|
+
|
23
|
+
def head *args, &block
|
24
|
+
return tag(:thead, *args, &block) if block_given?
|
25
|
+
options = args.extract_options!
|
26
|
+
content = (args.size == 1 ? args.first : args).map{|c|"<th>#{c}</th>"}
|
27
|
+
content_tag :thead, r(content), options
|
45
28
|
end
|
46
29
|
|
47
|
-
def
|
48
|
-
|
49
|
-
options = options_from_hash(args)
|
50
|
-
tbody do
|
51
|
-
@objects.each { |c| yield(c) }
|
52
|
-
end
|
30
|
+
def head_r *args, &block
|
31
|
+
head { tag :tr, *args, &block }
|
53
32
|
end
|
54
33
|
|
55
|
-
def
|
56
|
-
|
57
|
-
options = options_from_hash(args)
|
58
|
-
tbody do
|
59
|
-
@objects.each { |c|
|
60
|
-
concat(tag(:tr, options, true))
|
61
|
-
yield(c)
|
62
|
-
concat('</tr>')
|
63
|
-
}
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
def r(*args)
|
68
|
-
raise ArgumentError, "Missing block" unless block_given?
|
69
|
-
options = options_from_hash(args)
|
70
|
-
tr(options) do
|
71
|
-
yield
|
72
|
-
end
|
34
|
+
def r *args, &block
|
35
|
+
tag :tr, *args, &block
|
73
36
|
end
|
74
37
|
|
75
|
-
def h
|
76
|
-
|
77
|
-
concat(tag(:th, options_from_hash(args), true))
|
78
|
-
yield
|
79
|
-
concat('</th>')
|
80
|
-
else
|
81
|
-
content = args.shift
|
82
|
-
content_tag(:th, content, options_from_hash(args))
|
83
|
-
end
|
38
|
+
def h *args, &block
|
39
|
+
tag :th, *args, &block
|
84
40
|
end
|
85
41
|
|
86
|
-
def d
|
87
|
-
|
88
|
-
concat(tag(:td, options_from_hash(args), true))
|
89
|
-
yield
|
90
|
-
concat('</td>')
|
91
|
-
else
|
92
|
-
content = args.shift
|
93
|
-
content_tag(:td, content, options_from_hash(args))
|
94
|
-
end
|
42
|
+
def d *args, &block
|
43
|
+
tag :td, *args, &block
|
95
44
|
end
|
96
|
-
|
97
45
|
|
98
46
|
private
|
47
|
+
def tag tag, *args, &block
|
48
|
+
options = args.extract_options!
|
49
|
+
return concat content_tag(tag, capture(&block), options) if block_given?
|
50
|
+
content_tag tag, args, options
|
51
|
+
end
|
99
52
|
|
100
|
-
def
|
101
|
-
|
53
|
+
def concat str
|
54
|
+
@template.concat str
|
102
55
|
end
|
103
56
|
|
104
|
-
def
|
105
|
-
|
57
|
+
def capture &block
|
58
|
+
@template.capture &block
|
106
59
|
end
|
107
60
|
|
108
|
-
def content_tag
|
109
|
-
options = options_from_hash(args)
|
61
|
+
def content_tag tag, content, options = {}
|
110
62
|
@template.content_tag(tag, content, options)
|
111
63
|
end
|
112
|
-
|
113
|
-
def tbody
|
114
|
-
concat('<tbody>')
|
115
|
-
yield
|
116
|
-
concat('</tbody>')
|
117
|
-
end
|
118
|
-
|
119
|
-
def tr options
|
120
|
-
concat(tag(:tr, options, true))
|
121
|
-
yield
|
122
|
-
concat('</tr>')
|
123
|
-
end
|
124
64
|
end
|
125
65
|
end
|
data/table_builder.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{table_builder}
|
8
|
-
s.version = "0.1
|
8
|
+
s.version = "0.2.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Petrik de Heus"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-07-05}
|
13
13
|
s.description = %q{Rails builder for creating tables and calendars inspired by ActionView's FormBuilder.}
|
14
14
|
s.email = %q{}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -1,162 +1,163 @@
|
|
1
|
-
require
|
1
|
+
require 'test_helper'
|
2
2
|
|
3
|
-
class CalendarHelperTest <
|
4
|
-
include ActionView::Helpers::TextHelper
|
5
|
-
include ActionView::Helpers::TagHelper
|
6
|
-
include ActionController::TestCase::Assertions
|
3
|
+
class CalendarHelperTest < ActionView::TestCase
|
7
4
|
include CalendarHelper
|
8
|
-
attr_accessor :output_buffer
|
9
5
|
|
10
6
|
def setup
|
11
|
-
@events = [
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
def test_calendar_for
|
16
|
-
self.output_buffer = ''
|
17
|
-
calendar_for(@events, :html => { :id => 'id', :style => 'style', :class => 'class'}) do |t|
|
18
|
-
end
|
19
|
-
expected = %(<table id="id" style="style" class="class">) <<
|
20
|
-
%(</table>)
|
21
|
-
assert_dom_equal expected, output_buffer
|
7
|
+
@events = [
|
8
|
+
Event.new(3, 'Jimmy Page', Date.civil(2008, 12, 26)),
|
9
|
+
Event.new(4, 'Robert Plant', Date.civil(2008, 12, 26))
|
10
|
+
]
|
22
11
|
end
|
23
12
|
|
24
|
-
|
25
|
-
|
26
|
-
assert_raises(ArgumentError) do
|
27
|
-
calendar_for('a') {|t| }
|
28
|
-
end
|
13
|
+
should 'raise error if called without array' do
|
14
|
+
assert_raises(ArgumentError) { calendar_for('a') {|t|} }
|
29
15
|
end
|
30
16
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
end
|
37
|
-
end
|
38
|
-
expected = %(<table>) <<
|
39
|
-
%(<tbody>) <<
|
40
|
-
%(<tr><td class="notmonth"></td><td></td><td></td><td></td><td></td><td></td><td class="weekend"></td></tr>) <<
|
41
|
-
%(<tr><td class="weekend"></td><td></td><td></td><td></td><td></td><td></td><td class="weekend"></td></tr>) <<
|
42
|
-
%(<tr><td class="weekend"></td><td></td><td></td><td></td><td></td><td></td><td class="weekend"></td></tr>) <<
|
43
|
-
%(<tr><td class="weekend"></td><td></td><td></td><td></td><td></td><td></td><td class="weekend"></td></tr>) <<
|
44
|
-
%(<tr><td class="weekend"></td><td></td><td></td><td></td><td class="notmonth"></td><td class="notmonth"></td><td class="notmonth"></td></tr>) <<
|
45
|
-
%(</tbody>) <<
|
46
|
-
%(</table>)
|
47
|
-
assert_dom_equal expected, self.output_buffer
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_calendar_for_with_events
|
51
|
-
self.output_buffer = ''
|
52
|
-
calendar_for(@events, :year=> 2008, :month => 12) do |c|
|
53
|
-
c.day do |day, events|
|
54
|
-
content = events.collect{|e| e.id}.join
|
55
|
-
output_buffer.concat("(#{day.day})#{content}")
|
56
|
-
end
|
17
|
+
context 'Calendar days' do
|
18
|
+
should 'return objects_for_days with day and empty array' do
|
19
|
+
calendar = CalendarHelper::Calendar.new :year=> 2008, :month => 12
|
20
|
+
objects_for_days = (Date.civil(2008, 11, 30)..Date.civil(2009, 1, 3)).map { |day| [day, []] }
|
21
|
+
assert_equal objects_for_days, calendar.objects_for_days([], &:date)
|
57
22
|
end
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
%(<tr><td class="weekend">(21)</td><td>(22)</td><td>(23)</td><td>(24)</td><td>(25)</td><td>(26)34</td><td class="weekend">(27)</td></tr>) <<
|
64
|
-
%(<tr><td class="weekend">(28)</td><td>(29)</td><td>(30)</td><td>(31)</td><td class="notmonth">(1)</td><td class="notmonth">(2)</td><td class="notmonth">(3)</td></tr>) <<
|
65
|
-
%(</tbody>) <<
|
66
|
-
%(</table>)
|
67
|
-
assert_dom_equal expected, output_buffer
|
68
|
-
end
|
69
|
-
|
70
|
-
def test_calendar_for_sets_css_classes
|
71
|
-
self.output_buffer = ''
|
72
|
-
calendar_for([], :year=> 2008, :month => 12, :today => Date.civil(2008, 12, 15)) do |c|
|
73
|
-
c.day do |day, events|
|
74
|
-
output_buffer.concat(events.collect{|e| e.id}.join)
|
23
|
+
|
24
|
+
should 'return objects_for_days with days and events' do
|
25
|
+
calendar = CalendarHelper::Calendar.new :year=> 2008, :month => 12
|
26
|
+
objects_for_days = (Date.civil(2008, 11, 30)..Date.civil(2009, 1, 3)).map do |day|
|
27
|
+
[day, Date.civil(2008, 12, 26) == day ? @events : []]
|
75
28
|
end
|
29
|
+
assert_equal objects_for_days, calendar.objects_for_days(@events, &:date)
|
76
30
|
end
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
%(<tr><td class="weekend"></td><td class="today"></td><td></td><td></td><td></td><td></td><td class="weekend"></td></tr>) <<
|
82
|
-
%(<tr><td class="weekend"></td><td></td><td></td><td></td><td></td><td></td><td class="weekend"></td></tr>) <<
|
83
|
-
%(<tr><td class="weekend"></td><td></td><td></td><td></td><td class="notmonth"></td><td class="notmonth"></td><td class="notmonth"></td></tr>) <<
|
84
|
-
%(</tbody>) <<
|
85
|
-
%(</table>)
|
86
|
-
assert_dom_equal expected, self.output_buffer
|
87
|
-
end
|
88
|
-
|
89
|
-
def test_calendar_for_sets_css_ids
|
90
|
-
self.output_buffer = ''
|
91
|
-
calendar_for([], :year=> 2008, :month => 12, :today => Date.civil(2008, 12, 15)) do |c|
|
92
|
-
c.day(:id => 'day_%d') do |day, events|
|
93
|
-
output_buffer.concat(events.collect{|e| e.id}.join)
|
94
|
-
end
|
31
|
+
|
32
|
+
should 'map day range for calendar' do
|
33
|
+
calendar = CalendarHelper::Calendar.new(:year=> 2008, :month => 12)
|
34
|
+
assert_equal (Date.civil(2008, 11, 30)..Date.civil(2009, 1, 3)).map, calendar.days
|
95
35
|
end
|
96
|
-
expected = %(<table>) <<
|
97
|
-
%(<tbody>) <<
|
98
|
-
%(<tr><td class="notmonth" id="day_30"></td><td id="day_01"></td><td id="day_02"></td><td id="day_03"></td><td id="day_04"></td><td id="day_05"></td><td class="weekend" id="day_06"></td></tr>) <<
|
99
|
-
%(<tr><td class="weekend" id="day_07"></td><td id="day_08"></td><td id="day_09"></td><td id="day_10"></td><td id="day_11"></td><td id="day_12"></td><td class="weekend" id="day_13"></td></tr>) <<
|
100
|
-
%(<tr><td class="weekend" id="day_14"></td><td class="today"id="day_15"></td><td id="day_16"></td><td id="day_17"></td><td id="day_18"></td><td id="day_19"></td><td class="weekend" id="day_20"></td></tr>) <<
|
101
|
-
%(<tr><td class="weekend" id="day_21"></td><td id="day_22"></td><td id="day_23"></td><td id="day_24"></td><td id="day_25"></td><td id="day_26"></td><td class="weekend" id="day_27"></td></tr>) <<
|
102
|
-
%(<tr><td class="weekend" id="day_28"></td><td id="day_29"></td><td id="day_30"></td><td id="day_31"></td><td class="notmonth" id="day_01"></td><td class="notmonth" id="day_02"></td><td class="notmonth" id="day_03"></td></tr>) <<
|
103
|
-
%(</tbody>) <<
|
104
|
-
%(</table>)
|
105
|
-
assert_dom_equal expected, self.output_buffer
|
106
|
-
end
|
107
|
-
|
108
|
-
end
|
109
36
|
|
110
|
-
|
37
|
+
should 'map day range starting from monday when passed first_weekday' do
|
38
|
+
calendar = CalendarHelper::Calendar.new(:year=> 2008, :month => 12, :first_weekday => 1)
|
39
|
+
assert_equal (Date.civil(2008, 12, 1)..Date.civil(2009, 1, 4)).map, calendar.days
|
40
|
+
end
|
111
41
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
42
|
+
should 'set first day to previous sunday' do
|
43
|
+
calendar = CalendarHelper::Calendar.new(:year=> 2008, :month => 12)
|
44
|
+
assert_equal Date.civil(2008, 11, 30), calendar.first_day
|
45
|
+
end
|
116
46
|
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
47
|
+
should 'set last day to following sunday' do
|
48
|
+
calendar = CalendarHelper::Calendar.new(:year=> 2008, :month => 12)
|
49
|
+
assert_equal Date.civil(2009, 1, 3), calendar.last_day
|
50
|
+
end
|
51
|
+
|
52
|
+
should 'start range from previous monday when first_weekday is one' do
|
53
|
+
calendar = CalendarHelper::Calendar.new(:year=> 2008, :month => 12, :first_weekday => 1)
|
54
|
+
assert_equal Date.civil(2009, 1, 4), calendar.last_day
|
55
|
+
end
|
56
|
+
|
123
57
|
end
|
58
|
+
|
59
|
+
context 'ERB Rendering' do
|
60
|
+
should 'render table for calendar' do
|
61
|
+
erb = <<-ERB
|
62
|
+
<% calendar_for @events, :html => { :id => 'id', :style => 'style', :class => 'class'} do |t| %>
|
63
|
+
<% end %>
|
64
|
+
ERB
|
65
|
+
assert_dom_equal %(<table id="id" style="style" class="class"></table>), render(:inline => erb)
|
66
|
+
end
|
67
|
+
|
68
|
+
should 'render trs and tds with empty array' do
|
69
|
+
erb = <<-ERB
|
70
|
+
<% calendar_for [], :year=> 2008, :month => 12 do |c| %>
|
71
|
+
<% c.day do |day, events| %>
|
72
|
+
<% end %>
|
73
|
+
<% end %>
|
74
|
+
ERB
|
75
|
+
|
76
|
+
html = <<-HTML
|
77
|
+
<table>
|
78
|
+
<tbody>
|
79
|
+
<tr><td class="notmonth weekend"></td><td></td><td></td><td></td><td></td><td></td><td class="weekend"></td></tr>
|
80
|
+
<tr><td class="weekend"></td><td></td><td></td><td></td><td></td><td></td><td class="weekend"></td></tr>
|
81
|
+
<tr><td class="weekend"></td><td></td><td></td><td></td><td></td><td></td><td class="weekend"></td></tr>
|
82
|
+
<tr><td class="weekend"></td><td></td><td></td><td></td><td></td><td></td><td class="weekend"></td></tr>
|
83
|
+
<tr><td class="weekend"></td><td></td><td></td><td></td><td class="notmonth"></td><td class="notmonth"></td><td class="notmonth weekend"></td></tr>
|
84
|
+
</tbody>
|
85
|
+
</table>
|
86
|
+
HTML
|
87
|
+
assert_dom_equal html, render(:inline => erb)
|
88
|
+
end
|
89
|
+
|
90
|
+
should 'output day numbers' do
|
91
|
+
erb = <<-ERB
|
92
|
+
<% calendar_for @events, :year=> 2008, :month => 12 do |c| %>
|
93
|
+
<% c.day do |day, events| %>
|
94
|
+
<%= day.day %>
|
95
|
+
<% end %>
|
96
|
+
<% end %>
|
97
|
+
ERB
|
98
|
+
|
99
|
+
html = <<-HTML
|
100
|
+
<table>
|
101
|
+
<tbody>
|
102
|
+
<tr><td class="notmonth weekend">30</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td class="weekend">6</td></tr>
|
103
|
+
<tr><td class="weekend">7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td class="weekend">13</td></tr>
|
104
|
+
<tr><td class="weekend">14</td><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td class="weekend">20</td></tr>
|
105
|
+
<tr><td class="weekend">21</td><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td><td class="weekend">27</td></tr>
|
106
|
+
<tr><td class="weekend">28</td><td>29</td><td>30</td><td>31</td><td class="notmonth">1</td><td class="notmonth">2</td><td class="notmonth weekend">3</td></tr>
|
107
|
+
</tbody>
|
108
|
+
</table>
|
109
|
+
HTML
|
124
110
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
111
|
+
assert_dom_equal html, render(:inline => erb)
|
112
|
+
end
|
113
|
+
|
114
|
+
should 'render events' do
|
115
|
+
erb = <<-ERB
|
116
|
+
<% calendar_for @events, :year=> 2008, :month => 12 do |c| %>
|
117
|
+
<% c.day do |day, events| %>
|
118
|
+
<%= events.map(&:id).join(',') %>
|
119
|
+
<% end %>
|
120
|
+
<% end %>
|
121
|
+
ERB
|
131
122
|
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
123
|
+
html = <<-HTML
|
124
|
+
<table>
|
125
|
+
<tbody>
|
126
|
+
<tr><td class="notmonth weekend"></td><td></td><td></td><td></td><td></td><td></td><td class="weekend"></td></tr>
|
127
|
+
<tr><td class="weekend"></td><td></td><td></td><td></td><td></td><td></td><td class="weekend"></td></tr>
|
128
|
+
<tr><td class="weekend"></td><td></td><td></td><td></td><td></td><td></td><td class="weekend"></td></tr>
|
129
|
+
<tr><td class="weekend"></td><td></td><td></td><td></td><td></td><td>3,4</td><td class="weekend"></td></tr>
|
130
|
+
<tr><td class="weekend"></td><td></td><td></td><td></td><td class="notmonth"></td><td class="notmonth"></td><td class="notmonth weekend"></td></tr>
|
131
|
+
</tbody>
|
132
|
+
</table>
|
133
|
+
HTML
|
134
|
+
assert_dom_equal html, render(:inline => erb)
|
135
|
+
end
|
138
136
|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
137
|
+
should 'render id attribute for using pattern' do
|
138
|
+
erb = <<-ERB
|
139
|
+
<% calendar_for @events, :year=> 2008, :month => 12, :today => Date.civil(2008, 12, 15) do |c| %>
|
140
|
+
<% c.day :id => 'day_%d' do |day, events| %>
|
141
|
+
<%= events.map(&:id).join(',') %>
|
142
|
+
<% end %>
|
143
|
+
<% end %>
|
144
|
+
ERB
|
145
145
|
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
146
|
+
html = <<-HTML
|
147
|
+
<table>
|
148
|
+
<tbody>
|
149
|
+
<tr><td class="notmonth weekend" id="day_30"></td><td id="day_01"></td><td id="day_02"></td><td id="day_03"></td><td id="day_04"></td><td id="day_05"></td><td class="weekend" id="day_06"></td></tr>
|
150
|
+
<tr><td class="weekend" id="day_07"></td><td id="day_08"></td><td id="day_09"></td><td id="day_10"></td><td id="day_11"></td><td id="day_12"></td><td class="weekend" id="day_13"></td></tr>
|
151
|
+
<tr><td class="weekend" id="day_14"></td><td class="today"id="day_15"></td><td id="day_16"></td><td id="day_17"></td><td id="day_18"></td><td id="day_19"></td><td class="weekend" id="day_20"></td></tr>
|
152
|
+
<tr><td class="weekend" id="day_21"></td><td id="day_22"></td><td id="day_23"></td><td id="day_24"></td><td id="day_25"></td><td id="day_26">3,4</td><td class="weekend" id="day_27"></td></tr>
|
153
|
+
<tr><td class="weekend" id="day_28"></td><td id="day_29"></td><td id="day_30"></td><td id="day_31"></td><td class="notmonth" id="day_01"></td><td class="notmonth" id="day_02"></td><td class="notmonth weekend" id="day_03"></td></tr>
|
154
|
+
</tbody>
|
155
|
+
</table>
|
156
|
+
HTML
|
157
|
+
assert_dom_equal html, render(:inline => erb)
|
158
|
+
end
|
150
159
|
|
151
|
-
def test_last_day
|
152
|
-
calendar = CalendarHelper::Calendar.new(:year=> 2008, :month => 12)
|
153
|
-
assert_equal Date.civil(2009, 1, 3), calendar.last_day
|
154
160
|
end
|
155
|
-
|
156
|
-
def test_last_day_with_first_day_of_week_set
|
157
|
-
calendar = CalendarHelper::Calendar.new(:year=> 2008, :month => 12, :first_day_of_week => 1)
|
158
|
-
assert_equal Date.civil(2009, 1, 4), calendar.last_day
|
159
|
-
end
|
160
161
|
end
|
161
162
|
|
162
|
-
|
163
|
+
|
data/test/table_builder_test.rb
CHANGED
@@ -1,185 +1,226 @@
|
|
1
|
-
require
|
1
|
+
require 'test_helper'
|
2
2
|
|
3
|
-
class TableBuilderTest <
|
4
|
-
include ActionView::Helpers::TextHelper
|
5
|
-
include ActionView::Helpers::TagHelper
|
6
|
-
include ActionController::TestCase::Assertions
|
3
|
+
class TableBuilderTest < ActionView::TestCase
|
7
4
|
include TableHelper
|
8
5
|
attr_accessor :output_buffer
|
9
6
|
|
10
7
|
def setup
|
11
|
-
@
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
self.output_buffer = ''
|
8
|
+
@drummers = [
|
9
|
+
Drummer.new(1, 'John "Stumpy" Pepys'),
|
10
|
+
Drummer.new(2, 'Eric "Stumpy Joe" Childs'),
|
11
|
+
]
|
16
12
|
end
|
17
13
|
|
18
|
-
|
19
|
-
|
20
|
-
end
|
21
|
-
expected = %(<table id="id" style="style" class="class">) <<
|
22
|
-
%(</table>)
|
23
|
-
assert_dom_equal expected, output_buffer
|
14
|
+
should 'raise argument error with out array' do
|
15
|
+
assert_raises(ArgumentError) { table_for('a') {|t|} }
|
24
16
|
end
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
17
|
+
|
18
|
+
context 'ERB rendering' do
|
19
|
+
should 'output table tag' do
|
20
|
+
erb = <<-ERB
|
21
|
+
<% table_for [], :html => { :id => 'id', :style => 'style', :class => 'class'} do |t| %>
|
22
|
+
<% end %>
|
23
|
+
ERB
|
24
|
+
assert_dom_equal %(<table id="id" style="style" class="class"></table>), render(:inline => erb)
|
29
25
|
end
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
end
|
26
|
+
|
27
|
+
should 'output table tag with content' do
|
28
|
+
erb = <<-ERB
|
29
|
+
<% table_for [] do |t| %>
|
30
|
+
<tr></tr>
|
31
|
+
<tr></tr>
|
32
|
+
<% end %>
|
33
|
+
ERB
|
34
|
+
assert_dom_equal %(<table><tr></tr><tr></tr></table>), render(:inline => erb)
|
40
35
|
end
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
def test_head_r
|
53
|
-
table_for([]) do |t|
|
54
|
-
t.head_r do
|
55
|
-
output_buffer.concat t.h('Id')
|
56
|
-
output_buffer.concat t.h('Name')
|
57
|
-
end
|
36
|
+
|
37
|
+
should 'output table tag with content and erb tags' do
|
38
|
+
erb = <<-ERB
|
39
|
+
<% table_for [] do |t| %>
|
40
|
+
<%= '<tr></tr>' %>
|
41
|
+
<tr></tr>
|
42
|
+
<%= '<tr></tr>' %>
|
43
|
+
<% end %>
|
44
|
+
ERB
|
45
|
+
assert_dom_equal %(<table><tr></tr><tr></tr><tr></tr></table>), render(:inline => erb)
|
58
46
|
end
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
%(</table>)
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
47
|
+
|
48
|
+
should 'output table head passing an array' do
|
49
|
+
erb = <<-ERB
|
50
|
+
<% table_for [] do |t| %>
|
51
|
+
<%= t.head %w(a b c), :class => 'head' %>
|
52
|
+
<% end %>
|
53
|
+
ERB
|
54
|
+
assert_dom_equal %(<table><thead class="head"><tr><th>a</th><th>b</th><th>c</th></tr></thead></table>), render(:inline => erb)
|
55
|
+
end
|
56
|
+
|
57
|
+
should 'output table head' do
|
58
|
+
erb = <<-ERB
|
59
|
+
<% table_for [] do |t| %>
|
60
|
+
<% t.head(:class => 'head') do %>
|
61
|
+
<% end %>
|
62
|
+
<% end %>
|
63
|
+
ERB
|
64
|
+
assert_dom_equal %(<table><thead class="head"></thead></table>), render(:inline => erb)
|
65
|
+
end
|
66
|
+
|
67
|
+
should 'output table head with content' do
|
68
|
+
erb = <<-ERB
|
69
|
+
<% table_for [] do |t| %>
|
70
|
+
<% t.head do %>
|
71
|
+
<%= '<th></th>' %>
|
72
|
+
<th></th>
|
73
|
+
<%= '<th></th>' %>
|
74
|
+
<% end %>
|
75
|
+
<% end %>
|
76
|
+
ERB
|
77
|
+
assert_dom_equal %(<table><thead><th></th><th></th><th></th></thead></table>), render(:inline => erb)
|
73
78
|
end
|
74
|
-
expected = %(<table>) <<
|
75
|
-
%(<thead>) <<
|
76
|
-
%(<tr>) <<
|
77
|
-
%(<th>Id</th>) <<
|
78
|
-
%(<th>Name</th>) <<
|
79
|
-
%(</tr>) <<
|
80
|
-
%(</thead>) <<
|
81
|
-
%(</table>)
|
82
|
-
assert_dom_equal expected, output_buffer
|
83
|
-
end
|
84
79
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
t.
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
80
|
+
should 'output table header inside head' do
|
81
|
+
erb = <<-ERB
|
82
|
+
<% table_for [] do |t| %>
|
83
|
+
<% t.head do %>
|
84
|
+
<%= t.h 'Id' %>
|
85
|
+
<th></th>
|
86
|
+
<%= t.h 'Name' %>
|
87
|
+
<% end %>
|
88
|
+
<% end %>
|
89
|
+
ERB
|
90
|
+
assert_dom_equal %(<table><thead><th>Id</th><th></th><th>Name</th></thead></table>), render(:inline => erb)
|
93
91
|
end
|
94
|
-
expected = %(<table>) <<
|
95
|
-
%(<tbody>) <<
|
96
|
-
%(<tr>) <<
|
97
|
-
%(<td>3</td>) <<
|
98
|
-
%(<td>Peter "James" Bond</td>) <<
|
99
|
-
%(</tr>) <<
|
100
|
-
%(<tr>) <<
|
101
|
-
%(<td>4</td>) <<
|
102
|
-
%(<td>Mick Shrimpton (R. J. "Ric" Parnell)</td>) <<
|
103
|
-
%(</tr>) <<
|
104
|
-
%(</tbody>) <<
|
105
|
-
%(</table>)
|
106
|
-
assert_dom_equal expected, output_buffer
|
107
|
-
end
|
108
92
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
93
|
+
should 'output table header with block inside head' do
|
94
|
+
erb = <<-ERB
|
95
|
+
<% table_for [] do |t| %>
|
96
|
+
<% t.head do %>
|
97
|
+
<%- t.h do -%>
|
98
|
+
<%= 'I' %>d
|
99
|
+
<%- end -%>
|
100
|
+
<th></th>
|
101
|
+
<%= t.h 'Name' %>
|
102
|
+
<% end %>
|
103
|
+
<% end %>
|
104
|
+
ERB
|
105
|
+
assert_dom_equal %(<table><thead><th>Id</th><th></th><th>Name</th></thead></table>), render(:inline => erb)
|
115
106
|
end
|
116
|
-
expected = %(<table>) <<
|
117
|
-
%(<tbody>) <<
|
118
|
-
%(<tr>) <<
|
119
|
-
%(<td>3</td>) <<
|
120
|
-
%(<td>Peter "James" Bond</td>) <<
|
121
|
-
%(</tr>) <<
|
122
|
-
%(<tr>) <<
|
123
|
-
%(<td>4</td>) <<
|
124
|
-
%(<td>Mick Shrimpton (R. J. "Ric" Parnell)</td>) <<
|
125
|
-
%(</tr>) <<
|
126
|
-
%(</tbody>) <<
|
127
|
-
%(</table>)
|
128
|
-
assert_dom_equal expected, output_buffer
|
129
|
-
end
|
130
|
-
|
131
|
-
def test_td_with_options
|
132
|
-
table_for([@drummer1]) do |t|
|
133
|
-
t.body_r do |e|
|
134
|
-
output_buffer.concat t.d(e.name, :class => 'class')
|
135
|
-
end
|
136
|
-
end
|
137
|
-
expected = %(<table>) <<
|
138
|
-
%(<tbody>) <<
|
139
|
-
%(<tr>) <<
|
140
|
-
%(<td class="class">John "Stumpy" Pepys</td>) <<
|
141
|
-
%(</tr>) <<
|
142
|
-
%(</tbody>) <<
|
143
|
-
%(</table>)
|
144
|
-
assert_dom_equal expected, output_buffer
|
145
|
-
end
|
146
107
|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
108
|
+
should 'output head row with block' do
|
109
|
+
erb = <<-ERB
|
110
|
+
<% table_for [] do |t| %>
|
111
|
+
<% t.head_r :class => 'head' do %>
|
112
|
+
<%= t.h('a') %>
|
113
|
+
<th>b</th>
|
114
|
+
<% t.h do %>
|
115
|
+
c
|
116
|
+
<% end %>
|
117
|
+
<% end %>
|
118
|
+
<% end %>
|
119
|
+
ERB
|
120
|
+
assert_dom_equal "<table><thead><tr class='head'><th>a</th><th>b</th><th>c</th></tr></thead></table>", render(:inline => erb)
|
121
|
+
end
|
122
|
+
|
123
|
+
should 'output tbody' do
|
124
|
+
erb = <<-ERB
|
125
|
+
<% table_for @drummers do |t| %>
|
126
|
+
<% t.head_r do %>
|
127
|
+
<th>a</th><th>b</th><th>c</th>
|
128
|
+
<% end %>
|
129
|
+
<% t.body :class => 'body' do %>
|
130
|
+
<% end %>
|
131
|
+
<% end %>
|
132
|
+
ERB
|
133
|
+
assert_dom_equal "<table><thead><tr><th>a</th><th>b</th><th>c</th></tr></thead><tbody class='body'></tbody></table>", render(:inline => erb)
|
163
134
|
end
|
164
135
|
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
136
|
+
should 'output tbody with row and content' do
|
137
|
+
erb = <<-ERB
|
138
|
+
<% table_for @drummers do |t| %>
|
139
|
+
<% t.head_r do %>
|
140
|
+
<th>id</th><th>name</th>
|
141
|
+
<% end %>
|
142
|
+
<% t.body do |d| %>
|
143
|
+
<% t.r do %>
|
144
|
+
<%= t.d d.id %>
|
145
|
+
<%= t.d d.name %>
|
146
|
+
<% end %>
|
147
|
+
<% end %>
|
148
|
+
<% end %>
|
149
|
+
ERB
|
150
|
+
|
151
|
+
html = <<-HTML
|
152
|
+
<table>
|
153
|
+
<thead>
|
154
|
+
<tr><th>id</th><th>name</th></tr>
|
155
|
+
</thead>
|
156
|
+
<tbody>
|
157
|
+
<tr><td>#{ @drummers.first.id }</td><td>#{ @drummers.first.name }</td></tr>
|
158
|
+
<tr><td>#{ @drummers.last.id }</td><td>#{ @drummers.last.name }</td></tr>
|
159
|
+
</tbody>
|
160
|
+
</table>
|
161
|
+
HTML
|
162
|
+
|
163
|
+
assert_dom_equal html, render(:inline => erb)
|
164
|
+
end
|
165
|
+
|
166
|
+
should 'output body rows' do
|
167
|
+
erb = <<-ERB
|
168
|
+
<% table_for @drummers do |t| %>
|
169
|
+
<% t.head_r do %>
|
170
|
+
<th>id</th><th>name</th>
|
171
|
+
<% end %>
|
172
|
+
<% t.body_r do |e| %>
|
173
|
+
<%= t.d e.id %>
|
174
|
+
<%= t.d e.name %>
|
175
|
+
<% end %>
|
176
|
+
<% end %>
|
177
|
+
ERB
|
178
|
+
|
179
|
+
html = <<-HTML
|
180
|
+
<table>
|
181
|
+
<thead>
|
182
|
+
<tr><th>id</th><th>name</th></tr>
|
183
|
+
</thead>
|
184
|
+
<tbody>
|
185
|
+
<tr><td>#{ @drummers.first.id }</td><td>#{ @drummers.first.name }</td></tr>
|
186
|
+
<tr><td>#{ @drummers.last.id }</td><td>#{ @drummers.last.name }</td></tr>
|
187
|
+
</tbody>
|
188
|
+
</table>
|
189
|
+
HTML
|
190
|
+
|
191
|
+
assert_dom_equal html, render(:inline => erb)
|
181
192
|
end
|
193
|
+
|
194
|
+
should 'output td with block and options' do
|
195
|
+
erb = <<-ERB
|
196
|
+
<% table_for @drummers do |t| %>
|
197
|
+
<% t.head_r do %>
|
198
|
+
<th>id</th><th>name</th>
|
199
|
+
<% end %>
|
200
|
+
<% t.body_r do |e| %>
|
201
|
+
<% t.d :class => 'id' do %>
|
202
|
+
<%= e.id %>
|
203
|
+
<% end %>
|
204
|
+
<%= t.d e.name %>
|
205
|
+
<% end %>
|
206
|
+
<% end %>
|
207
|
+
ERB
|
208
|
+
|
209
|
+
html = <<-HTML
|
210
|
+
<table>
|
211
|
+
<thead>
|
212
|
+
<tr><th>id</th><th>name</th></tr>
|
213
|
+
</thead>
|
214
|
+
<tbody>
|
215
|
+
<tr><td class="id">#{ @drummers.first.id }</td><td>#{ @drummers.first.name }</td></tr>
|
216
|
+
<tr><td class="id">#{ @drummers.last.id }</td><td>#{ @drummers.last.name }</td></tr>
|
217
|
+
</tbody>
|
218
|
+
</table>
|
219
|
+
HTML
|
220
|
+
|
221
|
+
assert_dom_equal html, render(:inline => erb)
|
222
|
+
end
|
223
|
+
end
|
182
224
|
|
183
225
|
end
|
184
226
|
|
185
|
-
class Drummer < Struct.new(:id, :name); end
|
data/test/test_helper.rb
CHANGED
@@ -1,10 +1,16 @@
|
|
1
1
|
require 'test/unit'
|
2
2
|
|
3
|
-
require
|
3
|
+
require 'rubygems'
|
4
|
+
require 'shoulda'
|
5
|
+
|
4
6
|
require 'active_support'
|
5
7
|
require 'action_pack'
|
6
8
|
require 'action_controller'
|
7
9
|
require 'action_view'
|
10
|
+
require 'action_view/test_case'
|
8
11
|
require 'action_controller/test_process'
|
9
12
|
|
10
|
-
require
|
13
|
+
require "#{ File.dirname(__FILE__) }/../lib/table_builder"
|
14
|
+
|
15
|
+
class Drummer < Struct.new(:id, :name); end
|
16
|
+
class Event < Struct.new(:id, :name, :date); end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
+
- 2
|
7
8
|
- 1
|
8
|
-
|
9
|
-
version: 0.1.0
|
9
|
+
version: 0.2.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Petrik de Heus
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-07-05 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|