block-html 0.0.3

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/CHANGELOG ADDED
File without changes
data/COPYING ADDED
@@ -0,0 +1,18 @@
1
+ Copyright (c) 2008-2009 Jun Kikuchi
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to
5
+ deal in the Software without restriction, including without limitation the
6
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
+ sell copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
16
+ THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1 @@
1
+ = block-html
data/Rakefile ADDED
@@ -0,0 +1,30 @@
1
+ require 'rubygems'
2
+ require 'spec/rake/spectask'
3
+
4
+ NAME = 'block-html'
5
+
6
+ begin
7
+ require 'jeweler'
8
+ Jeweler::Tasks.new do |s|
9
+ s.name = NAME
10
+ s.platform = Gem::Platform::RUBY
11
+ s.summary = NAME
12
+ s.description = NAME
13
+ s.author = "Jun Kikuchi"
14
+ s.email = "kikuchi@bonnou.com"
15
+ s.homepage = "http://github.com/JunKikuchi/block-html"
16
+ s.files = %w(
17
+ COPYING CHANGELOG README.rdoc Rakefile VERSION
18
+ ) + Dir.glob("{bin,doc,spec,lib}/**/*")
19
+ s.require_path = "lib"
20
+ s.has_rdoc = true
21
+ end
22
+ rescue LoadError
23
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
24
+ end
25
+
26
+ Spec::Rake::SpecTask.new do |t|
27
+ #t.spec_opts = ['-c --format specdoc']
28
+ t.spec_opts = ['-c']
29
+ t.spec_files = FileList['spec/**/*_spec.rb']
30
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.3
@@ -0,0 +1,113 @@
1
+ class BlockHTML
2
+ class Form < BlockHTML
3
+ def tag(tag, attrs={}, &block)
4
+ self << Tag.new(nil, tag, attrs, @env_instance, &block)
5
+ end
6
+
7
+ def form(attrs={}, &block)
8
+ tag(:form, attrs, &block)
9
+ end
10
+
11
+ class Tag < BlockHTML::Tag
12
+ def initialize(model, name, attrs={}, env_instance=nil, &block)
13
+ @model = model
14
+ super(name, attrs, env_instance, &block)
15
+ end
16
+
17
+ def tag(tag, attrs={}, &block)
18
+ self << Tag.new(@model, tag, attrs, @env_instance, &block)
19
+ end
20
+
21
+ def model(model, &block)
22
+ @model = model
23
+ block.call(self)
24
+ @model = nil
25
+ end
26
+
27
+ def errors(name, params={})
28
+ return if @model.nil? || @model.errors[name].empty?
29
+
30
+ tag(:div, params) {
31
+ @model.errors.on(name).each do |val|
32
+ tag(:p).text(val)
33
+ end
34
+ }
35
+ end
36
+
37
+ def edit(name, attrs={})
38
+ self << Element::Input.new(
39
+ @model,
40
+ attrs.merge(:name => name, :type => :text)
41
+ )
42
+ end
43
+
44
+ def password(name, attrs={})
45
+ self << Element::Input.new(
46
+ @model,
47
+ attrs.merge(:name => name, :type => :password, :value => nil)
48
+ )
49
+ end
50
+
51
+ %w(file hidden).each do |type|
52
+ class_eval %Q{
53
+ def #{type}(name, attrs={})
54
+ self << Element::Input.new(
55
+ @model,
56
+ attrs.merge(:name => name, :type => :#{type})
57
+ )
58
+ end
59
+ }
60
+ end
61
+
62
+ %w(submit reset button radio).each do |type|
63
+ class_eval %Q{
64
+ def #{type}(name, attrs={})
65
+ self << Element::Button.new(
66
+ @model,
67
+ attrs.merge(:name => name, :type => :#{type})
68
+ )
69
+ end
70
+ }
71
+ end
72
+
73
+ def checkbox(name, attrs={})
74
+ self << Element::Checkbox.new(
75
+ @model,
76
+ attrs.merge(:name => name, :type => :checkbox)
77
+ )
78
+ end
79
+ end
80
+
81
+ class Element < BlockHTML
82
+ def initialize(model, attrs)
83
+ super()
84
+ @model = model
85
+ @attrs = attrs
86
+ @name = @attrs[:name]
87
+ @id = @attrs[:id] || @name
88
+ @value = @model ? @model.__send__(@name) : @attrs[:value]
89
+ end
90
+
91
+ class Input < Element
92
+ def initialize(model, attrs)
93
+ super(model, attrs)
94
+ tag(:input, @attrs.merge(:id => @id, :value => @value))
95
+ end
96
+ end
97
+
98
+ class Button < Element
99
+ def initialize(model, attrs)
100
+ super(model, attrs)
101
+ tag(:input, @attrs.merge(:id => @id, :value => @value || @name))
102
+ end
103
+ end
104
+
105
+ class Checkbox < Element
106
+ def initialize(model, attrs)
107
+ super(model, attrs)
108
+ tag(:input, @value ? @attrs.merge(:checked => '') : @attrs)
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
data/lib/block-html.rb ADDED
@@ -0,0 +1,294 @@
1
+ class BlockHTML
2
+ attr_accessor :parent
3
+
4
+ def initialize(env_instance=nil, &block)
5
+ @parent, @nodes, @env_instance = nil, [], env_instance
6
+
7
+ @env_instance && @env_instance.instance_variables.each do |v|
8
+ self.instance_variable_set(v, @env_instance.instance_variable_get(v))
9
+ end
10
+
11
+ instance_eval(&block) if block_given?
12
+ end
13
+
14
+ def <<(tree)
15
+ tree.parent = self
16
+ @nodes << tree
17
+ tree
18
+ end
19
+
20
+ def path(&block)
21
+ node = if block_given?
22
+ block.call(self)
23
+ else
24
+ self
25
+ end
26
+
27
+ if parent.nil?
28
+ [node]
29
+ else
30
+ parent.path(&block).push(node)
31
+ end
32
+ end
33
+
34
+ def root
35
+ path.shift
36
+ end
37
+
38
+ def each(&block)
39
+ @nodes.each(&block)
40
+ end
41
+
42
+ def empty?
43
+ @nodes.empty?
44
+ end
45
+
46
+ def xml(attrs={})
47
+ self << XML.new(attrs)
48
+ end
49
+
50
+ def doctype(attrs={})
51
+ self << DOCTYPE.new(attrs)
52
+ end
53
+
54
+ def tag(tag, attrs={}, &block)
55
+ self << Tag.new(tag, attrs, @env_instance, &block)
56
+ end
57
+
58
+ alias :_p :p
59
+
60
+ def p(attrs={}, &block)
61
+ tag('p', attrs, &block)
62
+ end
63
+
64
+ def text(text='')
65
+ self << Text.new(text)
66
+ self
67
+ end
68
+
69
+ def escaped_text(text='')
70
+ self << EscapedText.new(text)
71
+ self
72
+ end
73
+
74
+ def form(attrs={}, &block)
75
+ self << Form.new(@env_instance) {
76
+ form(attrs, &block)
77
+ }
78
+ end
79
+
80
+ def render(renderer)
81
+ each do |node|
82
+ node.render(renderer)
83
+ end
84
+ end
85
+
86
+ def method_missing(tag, attrs={}, &block)
87
+ tag(tag, attrs, &block)
88
+ end
89
+
90
+ def to_s(indent=0)
91
+ Renderer.new(self, indent).to_s
92
+ end
93
+
94
+ class Attrs < ::Hash
95
+ def to_s
96
+ unless empty?
97
+ ' ' + sort do |a, b|
98
+ a.to_s <=> b.to_s
99
+ end.map do |key, val|
100
+ '%s="%s"' % [key, val]
101
+ end.join(' ')
102
+ else
103
+ ''
104
+ end
105
+ end
106
+ end
107
+
108
+ class XML < BlockHTML
109
+ def initialize(attrs={})
110
+ super()
111
+ @attrs = {
112
+ :version => '1.0',
113
+ :encoding => 'utf8'
114
+ }.merge(attrs);
115
+ end
116
+
117
+ def render(renderer)
118
+ renderer.xml(@attrs)
119
+ end
120
+ end
121
+
122
+ class DOCTYPE < BlockHTML
123
+ def initialize(attrs={})
124
+ super()
125
+ @attrs = {
126
+ :format => 'xhtml',
127
+ :version => '1.0',
128
+ :type => 'strict'
129
+ }.merge(attrs);
130
+ end
131
+
132
+ def render(renderer)
133
+ renderer.doctype(@attrs)
134
+ end
135
+ end
136
+
137
+ class Tag < BlockHTML
138
+ attr_reader :attrs
139
+
140
+ def initialize(name, attrs={}, env_instance=nil, &block)
141
+ @name = name
142
+ @attrs = attrs.inject(Attrs.new) do |ret, (key, val)|
143
+ ret[key] = val
144
+ ret
145
+ end
146
+ super(env_instance, &block)
147
+ end
148
+
149
+ def render(renderer)
150
+ renderer.tag(self, @name, @attrs)
151
+ end
152
+ end
153
+
154
+ class Text < BlockHTML
155
+ def initialize(text)
156
+ super()
157
+ @text = text
158
+ end
159
+
160
+ def render(renderer)
161
+ renderer.text(@text)
162
+ end
163
+ end
164
+
165
+ class EscapedText < Text
166
+ def render(renderer)
167
+ renderer.escaped_text(@text)
168
+ end
169
+ end
170
+
171
+ class Renderer
172
+ ESC = {
173
+ '&' => '&amp;',
174
+ '"' => '&quot;',
175
+ "'" => '&#039;',
176
+ '>' => '&gt;',
177
+ '<' => '&lt;',
178
+ #' ' => '&nbsp;'
179
+ }
180
+
181
+ ESC_STR = ESC.inject('') do |ret, (key, val)|
182
+ ret << key
183
+ ret
184
+ end
185
+
186
+ def initialize(html, indent)
187
+ @html = html
188
+ @indent = indent.to_i
189
+ @count = 0
190
+ @text = 0 < @indent
191
+ @buf = ''
192
+ end
193
+
194
+ def escape(text)
195
+ text.to_s.gsub(/[#{ESC_STR}]/) do |val|
196
+ ESC[val]
197
+ end
198
+ end
199
+
200
+ def xml(attrs)
201
+ @buf << '<?xml version="%s" encoding="%s"?>' % [
202
+ attrs[:version],
203
+ attrs[:encoding]
204
+ ]
205
+ @buf << "\n" if 0 < @indent
206
+ @text = true
207
+ end
208
+
209
+ def doctype(attrs)
210
+ case attrs[:format]
211
+ when 'html5'
212
+ @buf << '<!DOCTYPE html>'
213
+ when 'html4'
214
+ case attrs[:type]
215
+ when 'strict'
216
+ @buf << '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'
217
+ when 'frameset'
218
+ @buf << '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">'
219
+ else
220
+ @buf << '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">'
221
+ end
222
+ when 'xhtml'
223
+ if attrs[:version] == '1.1'
224
+ @buf << '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'
225
+ else
226
+ case attrs[:type]
227
+ when 'strict'
228
+ @buf << '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
229
+ when 'frameset'
230
+ @buf << '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">'
231
+ else
232
+ @buf << '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
233
+ end
234
+ end
235
+ end
236
+
237
+ @buf << "\n" if 0 < @indent
238
+ @text = true
239
+ end
240
+
241
+ def tag(node, tag, attrs)
242
+ space = ' ' * @count * @indent
243
+
244
+ if node.empty?
245
+ if 0 < @indent && !@text
246
+ @buf << "\n%s<%s%s />" % [space, tag, attrs.to_s]
247
+ else
248
+ @buf << '<%s%s />' % [tag, attrs.to_s]
249
+ end
250
+ else
251
+ if 0 < @indent && !@text
252
+ @buf << "\n"
253
+ @buf << "%s<%s%s>" % [space, tag, attrs.to_s]
254
+ else
255
+ @buf << '<%s%s>' % [tag, attrs.to_s]
256
+ end
257
+ @text = false
258
+
259
+ @count += 1
260
+ node.each do |obj|
261
+ obj.render(self)
262
+ end
263
+ @count -= 1
264
+
265
+ if 0 < @indent && !@text
266
+ @buf << "\n"
267
+ @buf << "%s</%s>" % [space, tag]
268
+ else
269
+ @buf << '</%s>' % [tag]
270
+ end
271
+ end
272
+
273
+ @text = false
274
+ end
275
+
276
+ def text(text)
277
+ @buf << escape(text)
278
+ @text = true
279
+ end
280
+
281
+ def escaped_text(text)
282
+ @buf << text
283
+ @text = true
284
+ end
285
+
286
+ def to_s
287
+ @buf = ''
288
+ @html.render(self)
289
+ @buf
290
+ end
291
+ end
292
+
293
+ autoload :Form, 'block-html/form'
294
+ end
@@ -0,0 +1,4 @@
1
+ require 'lib/block-html'
2
+
3
+ describe '' do
4
+ end
@@ -0,0 +1,188 @@
1
+ require 'lib/block-html'
2
+
3
+ describe BlockHTML do
4
+ describe 'インターフェース' do
5
+ before do
6
+ @bhtml = BlockHTML.new
7
+ end
8
+
9
+ it 'インスタンス' do
10
+ %w'parent << path root each empty? xml doctype tag text escaped_text render to_s'.each do |val|
11
+ @bhtml.should respond_to val.to_sym
12
+ end
13
+ end
14
+ end
15
+
16
+ describe '空の状態' do
17
+ before do
18
+ @bhtml = BlockHTML.new
19
+ end
20
+
21
+ it 'parent == nil' do
22
+ @bhtml.parent.should be_nil
23
+ end
24
+
25
+ it 'path == []' do
26
+ @bhtml.path.should == [@bhtml]
27
+ end
28
+
29
+ it 'root == self' do
30
+ @bhtml.root.should == @bhtml
31
+ end
32
+
33
+ it 'each' do
34
+ @bhtml.each do |b|
35
+ b.should == @bhtml
36
+ end
37
+ end
38
+
39
+ it 'empty? == true' do
40
+ @bhtml.empty?.should be_true
41
+ end
42
+
43
+ it 'to_s == ""' do
44
+ @bhtml.to_s.should == ''
45
+ end
46
+ end
47
+
48
+ describe 'ノードを1つ追加する操作' do
49
+ before do
50
+ @bhtml = BlockHTML.new
51
+ end
52
+
53
+ it 'xml' do
54
+ @bhtml.xml
55
+ @bhtml.to_s.should == '<?xml version="1.0" encoding="utf8"?>'
56
+ end
57
+
58
+ it 'xml(:version => "1.1", :encoding => "sjis")' do
59
+ @bhtml.xml :version => '1.1', :encoding => 'sjis'
60
+ @bhtml.to_s.should == '<?xml version="1.1" encoding="sjis"?>'
61
+ end
62
+
63
+ it 'doctype(:version => "1.1")' do
64
+ @bhtml.doctype :version => '1.1'
65
+ @bhtml.to_s.should == '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'
66
+ end
67
+
68
+ it 'doctype' do
69
+ @bhtml.doctype
70
+ @bhtml.to_s.should == '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
71
+ end
72
+
73
+ it 'doctype(:type => "strict")' do
74
+ @bhtml.doctype :type => 'strict'
75
+ @bhtml.to_s.should == '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
76
+ end
77
+
78
+ it 'doctype(:type => "frameset")' do
79
+ @bhtml.doctype :type => 'frameset'
80
+ @bhtml.to_s.should =='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">'
81
+ end
82
+
83
+ it 'doctype(:type => nil)' do
84
+ @bhtml.doctype :type => nil
85
+ @bhtml.to_s.should =='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
86
+ end
87
+
88
+ it 'doctype(:format => "html4")' do
89
+ @bhtml.doctype :format => 'html4'
90
+ @bhtml.to_s.should == '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'
91
+ end
92
+
93
+ it 'doctype(:format => "html4", :type => "strict")' do
94
+ @bhtml.doctype :format => 'html4', :type => 'strict'
95
+ @bhtml.to_s.should == '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'
96
+ end
97
+
98
+ it 'doctype(:format => "html4", :type => "frameset")' do
99
+ @bhtml.doctype :format => 'html4', :type => 'frameset'
100
+ @bhtml.to_s.should == '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">'
101
+ end
102
+
103
+ it 'doctype(:format => "html4", :type => nil)' do
104
+ @bhtml.doctype :format => 'html4', :type => nil
105
+ @bhtml.to_s.should == '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">'
106
+ end
107
+
108
+ it 'doctype(:format => "html5")' do
109
+ @bhtml.doctype :format => 'html5'
110
+ @bhtml.to_s.should == '<!DOCTYPE html>'
111
+ end
112
+
113
+ it 'tag' do
114
+ @bhtml.tag 'p'
115
+ @bhtml.to_s.should == '<p />'
116
+ end
117
+
118
+ it 'tag("a", :href => "/", :id => "abc")' do
119
+ @bhtml.tag 'a', :href => '/', :id => 'abc'
120
+ @bhtml.to_s.should == '<a href="/" id="abc" />'
121
+ end
122
+
123
+ it 'text("aaa")' do
124
+ @bhtml.text 'aaa'
125
+ @bhtml.to_s.should == 'aaa'
126
+ end
127
+
128
+ it 'text("<a>")' do
129
+ @bhtml.text '<a>'
130
+ @bhtml.to_s.should == '&lt;a&gt;'
131
+ end
132
+
133
+ it 'escaped_text("aaa")' do
134
+ @bhtml.escaped_text 'aaa'
135
+ @bhtml.to_s.should == 'aaa'
136
+ end
137
+
138
+ it 'escaped_text("<a>")' do
139
+ @bhtml.escaped_text '<a>'
140
+ @bhtml.to_s.should == '<a>'
141
+ end
142
+ end
143
+
144
+ describe 'ノードを幾つか追加する操作' do
145
+ before do
146
+ @bhtml = BlockHTML.new(self)
147
+ end
148
+
149
+ it '@bhtml.tag("p").text("aaa")' do
150
+ @bhtml.tag("p").text("aaa").to_s.should == '<p>aaa</p>'
151
+ end
152
+
153
+ it '@bhtml.tag("p", :id => "abc").text("aaa")' do
154
+ @bhtml.tag("p", :id => "abc").text("aaa").to_s.should == '<p id="abc">aaa</p>'
155
+ end
156
+
157
+ it '@bhtml.tag("p") { tag("br") }' do
158
+ @bhtml.tag("p") { tag('br') }.to_s.should == '<p><br /></p>'
159
+ end
160
+
161
+ it '@bhtml.tag("p") { tag("p").text(hello) }' do
162
+ hello = 'Hello'
163
+ @bhtml.tag("p") {
164
+ tag('p').text(hello)
165
+ }.to_s.should == '<p><p>Hello</p></p>'
166
+ end
167
+
168
+ it '@bhtml.tag("p") { tag("p").text(@hello) }' do
169
+ @hello = 'Hello'
170
+ @bhtml.tag("p") {
171
+ tag('p').text(@hello)
172
+ }.to_s.should == '<p><p>Hello</p></p>'
173
+ end
174
+
175
+ describe 'インデントを設定' do
176
+ before do
177
+ @bhtml = BlockHTML.new
178
+ end
179
+
180
+ it '@bhtml.tag("div") { tag("p") { text("Hello") } }' do
181
+ @bhtml.tag("div") {
182
+ tag("p") { text("Hello") }
183
+ }
184
+ @bhtml.to_s(2).should == "<div>\n <p>Hello</p>\n</div>"
185
+ end
186
+ end
187
+ end
188
+ end
metadata ADDED
@@ -0,0 +1,64 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: block-html
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - Jun Kikuchi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-10-03 00:00:00 +09:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: block-html
17
+ email: kikuchi@bonnou.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README.rdoc
24
+ files:
25
+ - CHANGELOG
26
+ - COPYING
27
+ - README.rdoc
28
+ - Rakefile
29
+ - VERSION
30
+ - lib/block-html.rb
31
+ - lib/block-html/form.rb
32
+ - spec/block-html/form_spec.rb
33
+ - spec/block-html_spec.rb
34
+ has_rdoc: true
35
+ homepage: http://github.com/JunKikuchi/block-html
36
+ licenses: []
37
+
38
+ post_install_message:
39
+ rdoc_options:
40
+ - --charset=UTF-8
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: "0"
48
+ version:
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ version:
55
+ requirements: []
56
+
57
+ rubyforge_project:
58
+ rubygems_version: 1.3.5
59
+ signing_key:
60
+ specification_version: 3
61
+ summary: block-html
62
+ test_files:
63
+ - spec/block-html/form_spec.rb
64
+ - spec/block-html_spec.rb