htmless 0.4
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/MIT-LICENSE +19 -0
- data/README.md +7 -0
- data/README_FULL.md +585 -0
- data/lib/copy_to_doc.rb +43 -0
- data/lib/htmless/abstract/abstract_double_tag.rb +144 -0
- data/lib/htmless/abstract/abstract_single_tag.rb +18 -0
- data/lib/htmless/abstract/abstract_tag.rb +246 -0
- data/lib/htmless/abstract.rb +252 -0
- data/lib/htmless/data/html5.rb +179 -0
- data/lib/htmless/data.rb +11 -0
- data/lib/htmless/doc.rb +394 -0
- data/lib/htmless/dynamic_classes.rb +216 -0
- data/lib/htmless/formatted.rb +43 -0
- data/lib/htmless/helper.rb +24 -0
- data/lib/htmless/pool.rb +72 -0
- data/lib/htmless/rails.rb +40 -0
- data/lib/htmless/standard.rb +48 -0
- data/lib/htmless/strings_injector.rb +43 -0
- data/lib/htmless.rb +3 -0
- data/lib/js.rb +176 -0
- data/spec/htmless_spec.rb +290 -0
- metadata +279 -0
@@ -0,0 +1,290 @@
|
|
1
|
+
require 'simplecov'
|
2
|
+
require 'htmless'
|
3
|
+
|
4
|
+
#RSpec.configure do |config|
|
5
|
+
# config.mock_with :rspec
|
6
|
+
#end
|
7
|
+
|
8
|
+
describe Htmless do
|
9
|
+
shared_examples "pool" do
|
10
|
+
it('should return correct instance') { pool.get.should be_kind_of(Htmless::Formatted) }
|
11
|
+
it "should return instance into pool" do
|
12
|
+
pool.get.release
|
13
|
+
pool.size.should == 1
|
14
|
+
pool.get.to_html!
|
15
|
+
pool.size.should == 1
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe Htmless::Pool do
|
20
|
+
let(:pool) { Htmless::Pool.new Htmless::Formatted }
|
21
|
+
include_examples 'pool'
|
22
|
+
end
|
23
|
+
|
24
|
+
describe Htmless::SynchronizedPool do
|
25
|
+
let(:pool) { Htmless::SynchronizedPool.new Htmless::Formatted }
|
26
|
+
include_examples 'pool'
|
27
|
+
end
|
28
|
+
|
29
|
+
describe 'object with HammerBuilder::Helper' do
|
30
|
+
let(:pool) { Htmless::Pool.new Htmless::Standard }
|
31
|
+
|
32
|
+
class User
|
33
|
+
extend Htmless::Helper
|
34
|
+
|
35
|
+
builder :detail do |_, arg|
|
36
|
+
div arg
|
37
|
+
end
|
38
|
+
|
39
|
+
def detail2(b, arg)
|
40
|
+
b.div { b.text arg }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe 'User.new' do
|
45
|
+
it { User.new.should be_respond_to(:detail) }
|
46
|
+
it "should render correctly" do
|
47
|
+
pool.get.dive(User.new) do |user|
|
48
|
+
render user, :detail, 'content'
|
49
|
+
render user, :detail2, 'content'
|
50
|
+
end.to_html!.should == "<div>content</div><div>content</div>"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
describe Htmless::DynamicClasses do
|
57
|
+
class Parent
|
58
|
+
extend Htmless::DynamicClasses
|
59
|
+
dc do
|
60
|
+
def_class :LeftEye do
|
61
|
+
def to_s;
|
62
|
+
'left eye';
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def_class :RightEye, :LeftEye do
|
67
|
+
class_eval <<-RUBYCODE, __FILE__, __LINE__+1
|
68
|
+
def to_s; 'next to ' + super; end
|
69
|
+
RUBYCODE
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
class AChild < Parent
|
75
|
+
end
|
76
|
+
|
77
|
+
class AMutant < Parent
|
78
|
+
dc do
|
79
|
+
extend_class :LeftEye do
|
80
|
+
def to_s;
|
81
|
+
'laser ' + super;
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
it '#to_s should print correct values' do
|
88
|
+
Parent.dc[:LeftEye].new.to_s.should == 'left eye'
|
89
|
+
Parent.dc[:RightEye].new.to_s.should == 'next to left eye'
|
90
|
+
AChild.dc[:LeftEye].new.to_s.should == 'left eye'
|
91
|
+
AChild.dc[:RightEye].new.to_s.should == 'next to left eye'
|
92
|
+
AMutant.dc[:LeftEye].new.to_s.should == 'laser left eye'
|
93
|
+
AMutant.dc[:RightEye].new.to_s.should == 'next to laser left eye'
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'should create different classes for each carrying class' do
|
97
|
+
Parent.dc[:LeftEye].should_not == AChild.dc[:LeftEye]
|
98
|
+
Parent.dc[:LeftEye].should_not == AMutant.dc[:LeftEye]
|
99
|
+
end
|
100
|
+
|
101
|
+
describe 'Parent.dc.class_names' do
|
102
|
+
it do
|
103
|
+
Parent.dc.class_names.should include(:LeftEye, :RightEye)
|
104
|
+
Parent.dc.class_names.should have(2).items
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
describe Htmless::Standard do
|
110
|
+
let(:pool) { Htmless::Pool.new Htmless::Standard }
|
111
|
+
let(:builder) { pool.get }
|
112
|
+
|
113
|
+
def quick_render &block
|
114
|
+
builder.dive(&block).to_html!
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'should render #content' do
|
118
|
+
quick_render { div 'content' }.should == '<div>content</div>'
|
119
|
+
quick_render { div.content 'content' }.should == '<div>content</div>'
|
120
|
+
quick_render { div :content => 'content' }.should == '<div>content</div>'
|
121
|
+
quick_render { div { text 'content' } }.should == '<div>content</div>'
|
122
|
+
quick_render { div.with { text 'content' } }.should == '<div>content</div>'
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'should render #id' do
|
126
|
+
quick_render { div.id :an_id }.should == '<div id="an_id"></div>'
|
127
|
+
quick_render { div.an_id! }.should == '<div id="an-id"></div>'
|
128
|
+
quick_render { div.an_id! { text 'content' } }.should == '<div id="an-id">content</div>'
|
129
|
+
quick_render { div.an_id! 'content' }.should == '<div id="an-id">content</div>'
|
130
|
+
quick_render { div.an_id! }.should == '<div id="an-id"></div>'
|
131
|
+
quick_render { div :id => 12 }.should == '<div id="12"></div>'
|
132
|
+
quick_render { div 'asd', :id => 12 }.should == '<div id="12">asd</div>'
|
133
|
+
quick_render { hr.id 'an_id' }.should == '<hr id="an_id" />'
|
134
|
+
quick_render { hr.an_id! }.should == '<hr id="an-id" />'
|
135
|
+
quick_render { hr :id => 'an_id' }.should == '<hr id="an_id" />'
|
136
|
+
|
137
|
+
quick_render { hr.id 'an', 'id', nil, false }.should == '<hr id="an-id" />'
|
138
|
+
quick_render { div.id 'an', 'id', nil, false }.should == '<div id="an-id"></div>'
|
139
|
+
|
140
|
+
quick_render { div.an_id! :class => 'big' }.should == '<div id="an-id" class="big"></div>'
|
141
|
+
quick_render { div.an_id!(:class => 'big') { text 'content' } }.should ==
|
142
|
+
'<div id="an-id" class="big">content</div>'
|
143
|
+
quick_render { div.an_id! 'content', :class => 'big' }.should == '<div id="an-id" class="big">content</div>'
|
144
|
+
quick_render { div.an_id! 'content' }.should == '<div id="an-id">content</div>'
|
145
|
+
quick_render { hr.an_id! :class => 'big' }.should == '<hr id="an-id" class="big" />'
|
146
|
+
end
|
147
|
+
|
148
|
+
it 'should render #class' do
|
149
|
+
#noinspection RubyArgCount
|
150
|
+
quick_render { div.class 'an_class' }.should == '<div class="an_class"></div>'
|
151
|
+
quick_render { div.an_class }.should == '<div class="an-class"></div>'
|
152
|
+
quick_render { div :class => 'an_class' }.should == '<div class="an_class"></div>'
|
153
|
+
#noinspection RubyArgCount
|
154
|
+
quick_render { hr.class 'an_class' }.should == '<hr class="an_class" />'
|
155
|
+
quick_render { hr.an_class }.should == '<hr class="an-class" />'
|
156
|
+
quick_render { hr :class => 'an_class' }.should == '<hr class="an_class" />'
|
157
|
+
|
158
|
+
quick_render { div.an_class.another_class }.should == '<div class="an-class another-class"></div>'
|
159
|
+
#noinspection RubyArgCount
|
160
|
+
quick_render { div.class 'an_class', 'another_class' }.should == '<div class="an_class another_class"></div>'
|
161
|
+
quick_render { div :class => ['an_class', 'another_class'] }.should == '<div class="an_class another_class"></div>'
|
162
|
+
#noinspection RubyArgCount
|
163
|
+
quick_render { div.class(false, nil, 'an_class', true && 'another_class') }.should ==
|
164
|
+
'<div class="an_class another_class"></div>'
|
165
|
+
end
|
166
|
+
|
167
|
+
it "#attribute" do
|
168
|
+
quick_render { div.attribute 'xml:ns', 'gibris' }.should == '<div xml:ns="gibris"></div>'
|
169
|
+
quick_render { div.attribute(:class, 'a') { text 'asd' } }.should == '<div class="a">asd</div>'
|
170
|
+
end
|
171
|
+
|
172
|
+
it '#[]' do
|
173
|
+
obj = Object.new
|
174
|
+
quick_render { div[obj] }.should == %Q(<div id="object-#{obj.object_id}" class="object"></div>)
|
175
|
+
|
176
|
+
class AnObject
|
177
|
+
def self.htmless_ref
|
178
|
+
"a"
|
179
|
+
end
|
180
|
+
|
181
|
+
def htmless_ref
|
182
|
+
'b'
|
183
|
+
end
|
184
|
+
end
|
185
|
+
obj = AnObject.new
|
186
|
+
quick_render { div[obj] }.should == %Q(<div id="b" class="a"></div>)
|
187
|
+
|
188
|
+
obj = Object.new.extend(Module.new do
|
189
|
+
def id;
|
190
|
+
"an_id";
|
191
|
+
end
|
192
|
+
end)
|
193
|
+
quick_render { div[obj] }.should == %Q(<div id="object-an_id" class="object"></div>)
|
194
|
+
quick_render { div.mimic(obj) { text 'a' } }.should == %Q(<div id="object-an_id" class="object">a</div>)
|
195
|
+
end
|
196
|
+
|
197
|
+
it "#data-secret" do
|
198
|
+
quick_render { div('a').data_secret("I won't tell.") }.should == '<div data-secret="I won\'t tell.">a</div>'
|
199
|
+
end
|
200
|
+
|
201
|
+
it '#data' do
|
202
|
+
quick_render { hr.data(:secret => true) }.should == '<hr data-secret="true" />'
|
203
|
+
quick_render { div('a', :data => { :secret => "I won't tell." }) }.should ==
|
204
|
+
'<div data-secret="I won\'t tell.">a</div>'
|
205
|
+
quick_render { div('a').data(:secret => "I won't tell.") { text 'a' } }.should ==
|
206
|
+
'<div data-secret="I won\'t tell.">a</div>'
|
207
|
+
end
|
208
|
+
|
209
|
+
it 'tags should have all the attributes' do
|
210
|
+
builder.tags.each do |tag|
|
211
|
+
builder.should be_respond_to(tag)
|
212
|
+
tag_instance = builder.send(tag)
|
213
|
+
(Htmless::Data::HTML5.abstract_attributes.map(&:name) +
|
214
|
+
(Htmless::Data::HTML5.single_tags + Htmless::Data::HTML5.double_tags).
|
215
|
+
find { |t| t.name.to_s == tag }.attributes.map(&:name)).each do |attr|
|
216
|
+
tag_instance.should be_respond_to(attr)
|
217
|
+
end
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
it "boolean attributes should render correctly" do
|
222
|
+
quick_render { input.readonly }.should == '<input readonly="readonly" />'
|
223
|
+
quick_render { option.selected { text 'asd' } }.should == '<option selected="selected">asd</option>'
|
224
|
+
quick_render { option.selected(true) }.should == '<option selected="selected"></option>'
|
225
|
+
quick_render { option.selected(1) }.should == '<option selected="selected"></option>'
|
226
|
+
quick_render { option.selected(false) }.should == '<option></option>'
|
227
|
+
quick_render { div.hidden('asd') }.should == '<div hidden="hidden"></div>'
|
228
|
+
end
|
229
|
+
|
230
|
+
it "should render correctly" do
|
231
|
+
quick_render do
|
232
|
+
html5
|
233
|
+
html do
|
234
|
+
head do
|
235
|
+
title.an_id! 'a_title'
|
236
|
+
meta.charset "utf-8"
|
237
|
+
end
|
238
|
+
body.id 'content' do
|
239
|
+
text 'asd'
|
240
|
+
div.left.style nil do
|
241
|
+
raw 'asd'
|
242
|
+
hr
|
243
|
+
end
|
244
|
+
br
|
245
|
+
div.left do
|
246
|
+
hr
|
247
|
+
js 'asd'
|
248
|
+
js 'asd', :cdata => true
|
249
|
+
end
|
250
|
+
comment 'asd'
|
251
|
+
end
|
252
|
+
comment 'asd'
|
253
|
+
end
|
254
|
+
end.should == '<!DOCTYPE html>' + "\n" +
|
255
|
+
'<html xmlns="http://www.w3.org/1999/xhtml"><head><title id="an-id">a_title</title><meta charset="utf-8" />'+
|
256
|
+
'</head><body id="content">asd<div style="" class="left">asd<hr /></div><br /><div class="left"><hr />'+
|
257
|
+
'<script type="text/javascript">asd</script><script type="text/javascript"><![CDATA[asd]]></script>'+
|
258
|
+
'</div><!--asd--></body><!--asd--></html>'
|
259
|
+
end
|
260
|
+
|
261
|
+
it "#set variables" do
|
262
|
+
r = builder.set_variables(:a => 'a') do |b|
|
263
|
+
b.dive { p @a }
|
264
|
+
end.to_html!
|
265
|
+
|
266
|
+
r.should == '<p>a</p>'
|
267
|
+
builder.instance_variable_get(:@a).should be_nil
|
268
|
+
end
|
269
|
+
|
270
|
+
it "#join" do
|
271
|
+
quick_render { join([1, 2]) { |n| text n } }.should == '12'
|
272
|
+
quick_render { join([1, 2], 'a') { |n| text n } }.should == '1a2'
|
273
|
+
quick_render { join([lambda { text 1 }, 2], 'a') { |n| text n } }.should == '1a2'
|
274
|
+
quick_render { join([lambda { text 1 }, 2], lambda { text 'a' }) { |n| text n } }.should == '1a2'
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
278
|
+
describe Htmless::Formatted do
|
279
|
+
let(:pool) { Htmless::Pool.new Htmless::Formatted }
|
280
|
+
let(:builder) { pool.get }
|
281
|
+
|
282
|
+
def quick_render &block
|
283
|
+
builder.dive(&block).to_html!
|
284
|
+
end
|
285
|
+
|
286
|
+
it "should be formatted" do
|
287
|
+
quick_render { div { comment 'asd'; br }; p }.should == "\n<div>\n <!--asd-->\n <br />\n</div>\n<p></p>"
|
288
|
+
end
|
289
|
+
end
|
290
|
+
end
|
metadata
ADDED
@@ -0,0 +1,279 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: htmless
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.4'
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Petr Chalupa
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-05-12 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: yard
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: kramdown
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: nokogiri
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: erubis
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: tenjin
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: erector
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
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: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: markaby
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
type: :development
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: tagz
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ! '>='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
type: :development
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
name: simplecov
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
162
|
+
requirements:
|
163
|
+
- - ! '>='
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0'
|
166
|
+
type: :development
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
- !ruby/object:Gem::Dependency
|
175
|
+
name: simplecov-rcov
|
176
|
+
requirement: !ruby/object:Gem::Requirement
|
177
|
+
none: false
|
178
|
+
requirements:
|
179
|
+
- - ! '>='
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: '0'
|
182
|
+
type: :development
|
183
|
+
prerelease: false
|
184
|
+
version_requirements: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
186
|
+
requirements:
|
187
|
+
- - ! '>='
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '0'
|
190
|
+
- !ruby/object:Gem::Dependency
|
191
|
+
name: pry
|
192
|
+
requirement: !ruby/object:Gem::Requirement
|
193
|
+
none: false
|
194
|
+
requirements:
|
195
|
+
- - ! '>='
|
196
|
+
- !ruby/object:Gem::Version
|
197
|
+
version: '0'
|
198
|
+
type: :development
|
199
|
+
prerelease: false
|
200
|
+
version_requirements: !ruby/object:Gem::Requirement
|
201
|
+
none: false
|
202
|
+
requirements:
|
203
|
+
- - ! '>='
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: '0'
|
206
|
+
- !ruby/object:Gem::Dependency
|
207
|
+
name: multi_json
|
208
|
+
requirement: !ruby/object:Gem::Requirement
|
209
|
+
none: false
|
210
|
+
requirements:
|
211
|
+
- - ! '>='
|
212
|
+
- !ruby/object:Gem::Version
|
213
|
+
version: '0'
|
214
|
+
type: :development
|
215
|
+
prerelease: false
|
216
|
+
version_requirements: !ruby/object:Gem::Requirement
|
217
|
+
none: false
|
218
|
+
requirements:
|
219
|
+
- - ! '>='
|
220
|
+
- !ruby/object:Gem::Version
|
221
|
+
version: '0'
|
222
|
+
description: Fast extensible html5 builder in pure Ruby
|
223
|
+
email: git@pitr.ch
|
224
|
+
executables: []
|
225
|
+
extensions: []
|
226
|
+
extra_rdoc_files:
|
227
|
+
- README.md
|
228
|
+
- README_FULL.md
|
229
|
+
- MIT-LICENSE
|
230
|
+
files:
|
231
|
+
- lib/copy_to_doc.rb
|
232
|
+
- lib/htmless/abstract/abstract_double_tag.rb
|
233
|
+
- lib/htmless/abstract/abstract_single_tag.rb
|
234
|
+
- lib/htmless/abstract/abstract_tag.rb
|
235
|
+
- lib/htmless/abstract.rb
|
236
|
+
- lib/htmless/data/html5.rb
|
237
|
+
- lib/htmless/data.rb
|
238
|
+
- lib/htmless/doc.rb
|
239
|
+
- lib/htmless/dynamic_classes.rb
|
240
|
+
- lib/htmless/formatted.rb
|
241
|
+
- lib/htmless/helper.rb
|
242
|
+
- lib/htmless/pool.rb
|
243
|
+
- lib/htmless/rails.rb
|
244
|
+
- lib/htmless/standard.rb
|
245
|
+
- lib/htmless/strings_injector.rb
|
246
|
+
- lib/htmless.rb
|
247
|
+
- lib/js.rb
|
248
|
+
- README.md
|
249
|
+
- README_FULL.md
|
250
|
+
- MIT-LICENSE
|
251
|
+
- spec/htmless_spec.rb
|
252
|
+
homepage: https://github.com/pitr-ch/htmless
|
253
|
+
licenses:
|
254
|
+
- MIT
|
255
|
+
post_install_message:
|
256
|
+
rdoc_options: []
|
257
|
+
require_paths:
|
258
|
+
- lib
|
259
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
260
|
+
none: false
|
261
|
+
requirements:
|
262
|
+
- - ! '>='
|
263
|
+
- !ruby/object:Gem::Version
|
264
|
+
version: '0'
|
265
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
266
|
+
none: false
|
267
|
+
requirements:
|
268
|
+
- - ! '>='
|
269
|
+
- !ruby/object:Gem::Version
|
270
|
+
version: '0'
|
271
|
+
requirements: []
|
272
|
+
rubyforge_project:
|
273
|
+
rubygems_version: 1.8.23
|
274
|
+
signing_key:
|
275
|
+
specification_version: 3
|
276
|
+
summary: Fast extensible html5 builder in pure Ruby
|
277
|
+
test_files:
|
278
|
+
- spec/htmless_spec.rb
|
279
|
+
has_rdoc:
|