renee 0.4.0.pre1 → 0.4.0.pre2
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/Gemfile +11 -8
- data/README.md +50 -1
- data/Rakefile +14 -104
- data/config.ru +5 -0
- data/examples/blog/config.ru +1 -0
- data/lib/renee.rb +3 -2
- data/lib/renee/render.rb +1 -1
- data/lib/renee/url_generation.rb +66 -45
- data/lib/renee/version.rb +1 -1
- data/plan.txt +1 -5
- data/renee.gemspec +3 -3
- data/site/public/css/app.css +47 -26
- data/site/views/extending.md +66 -0
- data/site/views/index.md +14 -4
- data/site/views/routing.md +0 -38
- data/site/views/variable-types.md +2 -2
- data/test/{renee/blog_test.rb → blog_test.rb} +0 -0
- data/test/{renee-render/render_test.rb → render_test.rb} +0 -0
- data/test/renee-url-generation/test_helper.rb +1 -1
- data/test/{renee-session/session_test.rb → session_test.rb} +2 -2
- data/test/renee/test_helper.rb b/data/test/test_helper → copy.rb +0 -0
- data/test/test_helper.rb +8 -1
- data/test/{renee-url-generation/url_generation_test.rb → url_generation_test.rb} +2 -2
- metadata +47 -77
- data/Gemfile-renee +0 -8
- data/Gemfile-renee-core +0 -8
- data/Gemfile-renee-render +0 -9
- data/Gemfile-renee-session +0 -9
- data/Gemfile-renee-url-generation +0 -8
- data/README-renee-core.md +0 -242
- data/README-renee-render.md +0 -38
- data/README-renee-session.md +0 -3
- data/README-renee-url-generation.md +0 -3
- data/lib/renee/core.rb +0 -98
- data/lib/renee/core/chaining.rb +0 -66
- data/lib/renee/core/env_accessors.rb +0 -72
- data/lib/renee/core/exceptions.rb +0 -15
- data/lib/renee/core/matcher.rb +0 -61
- data/lib/renee/core/plugins.rb +0 -31
- data/lib/renee/core/rack_interaction.rb +0 -50
- data/lib/renee/core/request_context.rb +0 -56
- data/lib/renee/core/responding.rb +0 -112
- data/lib/renee/core/response.rb +0 -78
- data/lib/renee/core/routing.rb +0 -319
- data/lib/renee/core/transform.rb +0 -18
- data/renee-core.gemspec +0 -26
- data/renee-render.gemspec +0 -30
- data/renee-session.gemspec +0 -28
- data/renee-url-generation.gemspec +0 -24
- data/test.watchr +0 -61
- data/test/renee-core/chaining_test.rb +0 -33
- data/test/renee-core/env_accessors_test.rb +0 -43
- data/test/renee-core/include_test.rb +0 -14
- data/test/renee-core/request_context_test.rb +0 -70
- data/test/renee-core/responding_test.rb +0 -128
- data/test/renee-core/routing_test.rb +0 -443
- data/test/renee-core/test_helper.rb +0 -4
- data/test/renee-core/variable_type_test.rb +0 -57
data/lib/renee/core/routing.rb
DELETED
@@ -1,319 +0,0 @@
|
|
1
|
-
module Renee
|
2
|
-
class Core
|
3
|
-
# Collection of useful methods for routing within a {Renee::Core} app.
|
4
|
-
module Routing
|
5
|
-
include Chaining
|
6
|
-
|
7
|
-
# Allow continued routing if a routing block fails to match
|
8
|
-
#
|
9
|
-
# @param [Boolean] val
|
10
|
-
# indicate if continued routing should be allowed.
|
11
|
-
#
|
12
|
-
# @api public
|
13
|
-
def continue_routing
|
14
|
-
if block_given?
|
15
|
-
original_env = @env.dup
|
16
|
-
begin
|
17
|
-
yield
|
18
|
-
rescue NotMatchedError
|
19
|
-
@env = original_env
|
20
|
-
end
|
21
|
-
else
|
22
|
-
create_chain_proxy(:continue_routing)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
chainable :continue_routing
|
26
|
-
|
27
|
-
# Match a path to respond to.
|
28
|
-
#
|
29
|
-
# @param [String] p
|
30
|
-
# path to match.
|
31
|
-
# @param [Proc] blk
|
32
|
-
# block to yield
|
33
|
-
#
|
34
|
-
# @example
|
35
|
-
# path('/') { ... } #=> '/'
|
36
|
-
# path('test') { ... } #=> '/test'
|
37
|
-
#
|
38
|
-
# path 'foo' do
|
39
|
-
# path('bar') { ... } #=> '/foo/bar'
|
40
|
-
# end
|
41
|
-
#
|
42
|
-
# @api public
|
43
|
-
def path(p, &blk)
|
44
|
-
if blk
|
45
|
-
p = p[1, p.size] if p[0] == ?/
|
46
|
-
extension_part = detected_extension ? "|\\.#{Regexp.quote(detected_extension)}" : ""
|
47
|
-
part(/^\/#{Regexp.quote(p)}(?=\/|$#{extension_part})/, &blk)
|
48
|
-
else
|
49
|
-
create_chain_proxy(:path, p)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
chainable :path
|
53
|
-
|
54
|
-
# Like #path, but doesn't look for leading slashes.
|
55
|
-
def part(p)
|
56
|
-
if block_given?
|
57
|
-
p = /^\/?#{Regexp.quote(p)}/ if p.is_a?(String)
|
58
|
-
if match = env['PATH_INFO'][p]
|
59
|
-
with_path_part(match) { yield }
|
60
|
-
end
|
61
|
-
else
|
62
|
-
create_chain_proxy(:part, p)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
# Match parts off the path as variables. The parts matcher can conform to either a regular expression, or be an Integer, or
|
67
|
-
# simply a String.
|
68
|
-
# @param[Object] type the type of object to match for. If you supply Integer, this will only match integers in addition to casting your variable for you.
|
69
|
-
# @param[Object] default the default value to use if your param cannot be successfully matched.
|
70
|
-
#
|
71
|
-
# @example
|
72
|
-
# path '/' do
|
73
|
-
# variable { |id| halt [200, {}, id] }
|
74
|
-
# end
|
75
|
-
# GET /hey #=> [200, {}, 'hey']
|
76
|
-
#
|
77
|
-
# @example
|
78
|
-
# path '/' do
|
79
|
-
# variable(:integer) { |id| halt [200, {}, "This is a numeric id: #{id}"] }
|
80
|
-
# end
|
81
|
-
# GET /123 #=> [200, {}, 'This is a numeric id: 123']
|
82
|
-
#
|
83
|
-
# @example
|
84
|
-
# path '/test' do
|
85
|
-
# variable { |foo, bar| halt [200, {}, "#{foo}-#{bar}"] }
|
86
|
-
# end
|
87
|
-
# GET /test/hey/there #=> [200, {}, 'hey-there']
|
88
|
-
#
|
89
|
-
# @api public
|
90
|
-
def variable(type = nil, &blk)
|
91
|
-
blk ? complex_variable(type, '/', 1, &blk) : create_chain_proxy(:variable, type)
|
92
|
-
end
|
93
|
-
alias_method :var, :variable
|
94
|
-
chainable :variable, :var
|
95
|
-
|
96
|
-
def optional_variable(type = nil, &blk)
|
97
|
-
blk ? complex_variable(type, '/', 0..1) { |vars| blk[vars.first] } : create_chain_proxy(:variable, type)
|
98
|
-
end
|
99
|
-
alias_method :optional, :optional_variable
|
100
|
-
chainable :optional, :optional_variable
|
101
|
-
|
102
|
-
# Same as variable except you can match multiple variables with the same type.
|
103
|
-
# @param [Range, Integer] count The number of parameters to capture.
|
104
|
-
# @param [Symbol] type The type to use for match.
|
105
|
-
def multi_variable(count, type = nil, &blk)
|
106
|
-
blk ? complex_variable(type, '/', count, &blk) : create_chain_proxy(:multi_variable, count, type)
|
107
|
-
end
|
108
|
-
alias_method :multi_var, :multi_variable
|
109
|
-
alias_method :mvar, :multi_variable
|
110
|
-
chainable :multi_variable, :multi_var, :mvar
|
111
|
-
|
112
|
-
# Same as variable except it matches indefinitely.
|
113
|
-
# @param [Symbol] type The type to use for match.
|
114
|
-
def repeating_variable(type = nil, &blk)
|
115
|
-
blk ? complex_variable(type, '/', nil, &blk) : create_chain_proxy(:repeating_variable, type)
|
116
|
-
end
|
117
|
-
alias_method :glob, :repeating_variable
|
118
|
-
chainable :repeating_variable, :glob
|
119
|
-
|
120
|
-
# Match parts off the path as variables without a leading slash.
|
121
|
-
# @see #variable
|
122
|
-
# @api public
|
123
|
-
def partial_variable(type = nil, &blk)
|
124
|
-
blk ? complex_variable(type, nil, 1, &blk) : create_chain_proxy(:partial_variable, type)
|
125
|
-
end
|
126
|
-
alias_method :part_var, :partial_variable
|
127
|
-
chainable :partial_variable, :part_var
|
128
|
-
|
129
|
-
# Returns the matched extension. If no extension is present, returns `nil`.
|
130
|
-
#
|
131
|
-
# @example
|
132
|
-
# halt [200, {}, path] if extension == 'html'
|
133
|
-
#
|
134
|
-
# @api public
|
135
|
-
def extension
|
136
|
-
detected_extension
|
137
|
-
end
|
138
|
-
alias_method :ext, :extension
|
139
|
-
|
140
|
-
# Match no extension.
|
141
|
-
#
|
142
|
-
# @example
|
143
|
-
# no_extension { |path| halt [200, {}, path] }
|
144
|
-
#
|
145
|
-
# @api public
|
146
|
-
def no_extension(&blk)
|
147
|
-
blk.call unless detected_extension
|
148
|
-
end
|
149
|
-
|
150
|
-
# Match any remaining path.
|
151
|
-
#
|
152
|
-
# @example
|
153
|
-
# remainder { |path| halt [200, {}, path] }
|
154
|
-
#
|
155
|
-
# @api public
|
156
|
-
def remainder(&blk)
|
157
|
-
blk ? with_path_part(env['PATH_INFO']) { |var| blk.call(var) } : create_chain_proxy(:remainder)
|
158
|
-
end
|
159
|
-
alias_method :catchall, :remainder
|
160
|
-
chainable :remainder, :catchall
|
161
|
-
|
162
|
-
# Respond to a GET request and yield the block.
|
163
|
-
#
|
164
|
-
# @example
|
165
|
-
# get { halt [200, {}, "hello world"] }
|
166
|
-
#
|
167
|
-
# @api public
|
168
|
-
def get(&blk)
|
169
|
-
blk ? request_method('GET', &blk) : create_chain_proxy(:get)
|
170
|
-
end
|
171
|
-
chainable :get
|
172
|
-
|
173
|
-
# Respond to a POST request and yield the block.
|
174
|
-
#
|
175
|
-
# @example
|
176
|
-
# post { halt [200, {}, "hello world"] }
|
177
|
-
#
|
178
|
-
# @api public
|
179
|
-
def post(&blk)
|
180
|
-
blk ? request_method('POST', &blk) : create_chain_proxy(:post)
|
181
|
-
end
|
182
|
-
chainable :post
|
183
|
-
|
184
|
-
# Respond to a PUT request and yield the block.
|
185
|
-
#
|
186
|
-
# @example
|
187
|
-
# put { halt [200, {}, "hello world"] }
|
188
|
-
#
|
189
|
-
# @api public
|
190
|
-
def put(&blk)
|
191
|
-
blk ? request_method('PUT', &blk) : create_chain_proxy(:put)
|
192
|
-
end
|
193
|
-
chainable :put
|
194
|
-
|
195
|
-
# Respond to a DELETE request and yield the block.
|
196
|
-
#
|
197
|
-
# @example
|
198
|
-
# delete { halt [200, {}, "hello world"] }
|
199
|
-
#
|
200
|
-
# @api public
|
201
|
-
def delete(&blk)
|
202
|
-
blk ? request_method('DELETE', &blk) : create_chain_proxy(:delete)
|
203
|
-
end
|
204
|
-
chainable :delete
|
205
|
-
|
206
|
-
# Match only when the path is either '' or '/'.
|
207
|
-
#
|
208
|
-
# @example
|
209
|
-
# complete { halt [200, {}, "hello world"] }
|
210
|
-
#
|
211
|
-
# @api public
|
212
|
-
def complete(&blk)
|
213
|
-
if blk
|
214
|
-
with_path_part(env['PATH_INFO']) { blk.call } if complete?
|
215
|
-
else
|
216
|
-
create_chain_proxy(:complete)
|
217
|
-
end
|
218
|
-
end
|
219
|
-
chainable :complete
|
220
|
-
|
221
|
-
# Test if the path has been consumed
|
222
|
-
#
|
223
|
-
# @example
|
224
|
-
# if complete?
|
225
|
-
# halt "Hey, the path is done"
|
226
|
-
# end
|
227
|
-
#
|
228
|
-
# @api public
|
229
|
-
def complete?
|
230
|
-
(detected_extension and env['PATH_INFO'] =~ /^\/?(\.#{Regexp.quote(detected_extension)}\/?)?$/) || (detected_extension.nil? and env['PATH_INFO'] =~ /^\/?$/)
|
231
|
-
end
|
232
|
-
|
233
|
-
# Match only when the path is ''.
|
234
|
-
#
|
235
|
-
# @example
|
236
|
-
# empty { halt [200, {}, "hello world"] }
|
237
|
-
#
|
238
|
-
# @api public
|
239
|
-
def empty(&blk)
|
240
|
-
if blk
|
241
|
-
if env['PATH_INFO'] == ''
|
242
|
-
with_path_part(env['PATH_INFO']) { blk.call }
|
243
|
-
end
|
244
|
-
else
|
245
|
-
create_chain_proxy(:empty)
|
246
|
-
end
|
247
|
-
end
|
248
|
-
chainable :empty
|
249
|
-
|
250
|
-
private
|
251
|
-
def complex_variable(type, prefix, count)
|
252
|
-
matcher = variable_matcher_for_type(type)
|
253
|
-
path = env['PATH_INFO'].dup
|
254
|
-
vals = []
|
255
|
-
var_index = 0
|
256
|
-
variable_matching_loop(count) do
|
257
|
-
path.start_with?(prefix) ? path.slice!(0, prefix.size) : break if prefix
|
258
|
-
if match = matcher[path]
|
259
|
-
path.slice!(0, match.first.size)
|
260
|
-
vals << match.last
|
261
|
-
end
|
262
|
-
end
|
263
|
-
return unless count.nil? || count === vals.size
|
264
|
-
with_path_part(env['PATH_INFO'][0, env['PATH_INFO'].size - path.size]) do
|
265
|
-
if count == 1
|
266
|
-
yield(vals.first)
|
267
|
-
else
|
268
|
-
yield(vals)
|
269
|
-
end
|
270
|
-
end
|
271
|
-
end
|
272
|
-
|
273
|
-
def variable_matching_loop(count)
|
274
|
-
case count
|
275
|
-
when Range then count.max.times { break unless yield }
|
276
|
-
when nil then loop { break unless yield }
|
277
|
-
else count.times { break unless yield }
|
278
|
-
end
|
279
|
-
end
|
280
|
-
|
281
|
-
def variable_matcher_for_type(type)
|
282
|
-
if self.class.variable_types.key?(type)
|
283
|
-
self.class.variable_types[type]
|
284
|
-
else
|
285
|
-
regexp = case type
|
286
|
-
when nil, String
|
287
|
-
detected_extension ?
|
288
|
-
/(([^\/](?!#{Regexp.quote(detected_extension)}$))+)(?=$|\/|\.#{Regexp.quote(detected_extension)})/ :
|
289
|
-
/([^\/]+)(?=$|\/)/
|
290
|
-
when Regexp
|
291
|
-
type
|
292
|
-
else
|
293
|
-
raise "Unexpected variable type #{type.inspect}"
|
294
|
-
end
|
295
|
-
proc do |path|
|
296
|
-
if match = /^#{regexp.to_s}/.match(path)
|
297
|
-
[match[0]]
|
298
|
-
end
|
299
|
-
end
|
300
|
-
end
|
301
|
-
end
|
302
|
-
|
303
|
-
def with_path_part(part)
|
304
|
-
script_part = env['PATH_INFO'][0, part.size]
|
305
|
-
env['PATH_INFO'] = env['PATH_INFO'].slice(part.size, env['PATH_INFO'].size)
|
306
|
-
env['SCRIPT_NAME'] += script_part
|
307
|
-
yield script_part
|
308
|
-
raise NotMatchedError
|
309
|
-
end
|
310
|
-
|
311
|
-
def request_method(method)
|
312
|
-
if env['REQUEST_METHOD'] == method && complete?
|
313
|
-
yield
|
314
|
-
raise NotMatchedError
|
315
|
-
end
|
316
|
-
end
|
317
|
-
end
|
318
|
-
end
|
319
|
-
end
|
data/lib/renee/core/transform.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
module Renee
|
2
|
-
class Core
|
3
|
-
# Module used for transforming arbitrary values using the registerd variable types.
|
4
|
-
# @see #register_variable_name.
|
5
|
-
#
|
6
|
-
module Transform
|
7
|
-
# Transforms a value according to the rules specified by #register_variable_name.
|
8
|
-
# @param [Symbol] name The name of the variable type.
|
9
|
-
# @param [String] value The value to transform.
|
10
|
-
# @return The transformed value or nil.
|
11
|
-
def transform(type, value)
|
12
|
-
if self.class.variable_types.key?(type) and m = self.class.variable_types[type][value]
|
13
|
-
m.first == value ? m.last : nil
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
data/renee-core.gemspec
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
$:.push File.expand_path("../lib", __FILE__)
|
3
|
-
require "renee/version"
|
4
|
-
|
5
|
-
Gem::Specification.new do |s|
|
6
|
-
s.name = "renee-core"
|
7
|
-
s.version = Renee::VERSION
|
8
|
-
s.authors = ["Josh Hull", "Nathan Esquenazi", "Arthur Chiu"]
|
9
|
-
s.email = ["joshbuddy@gmail.com", "nesquena@gmail.com", "mr.arthur.chiu@gmail.com"]
|
10
|
-
s.homepage = "http://reneerb.com"
|
11
|
-
s.summary = %q{The super-friendly rack helpers}
|
12
|
-
s.description = %q{The super-friendly rack helpers.}
|
13
|
-
|
14
|
-
s.rubyforge_project = "renee-core"
|
15
|
-
|
16
|
-
s.files = `git ls-files -- lib/renee/core*`.split("\n")
|
17
|
-
s.test_files = `git ls-files -- test/renee-core/*`.split("\n") + ["test/test_helper.rb"]
|
18
|
-
s.require_paths = ["lib"]
|
19
|
-
|
20
|
-
s.add_runtime_dependency 'rack', "~> 1.3.0"
|
21
|
-
|
22
|
-
s.add_development_dependency 'minitest', "~> 2.6.1"
|
23
|
-
s.add_development_dependency 'bundler'
|
24
|
-
s.add_development_dependency "rack-test", ">= 0.5.0"
|
25
|
-
s.add_development_dependency "rake"
|
26
|
-
end
|
data/renee-render.gemspec
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
$:.push File.expand_path("../lib", __FILE__)
|
3
|
-
require "renee/version"
|
4
|
-
|
5
|
-
Gem::Specification.new do |s|
|
6
|
-
s.name = "renee-render"
|
7
|
-
s.version = Renee::VERSION
|
8
|
-
s.authors = ["Josh Hull", "Nathan Esquenazi", "Arthur Chiu"]
|
9
|
-
s.email = ["joshbuddy@gmail.com", "nesquena@gmail.com", "mr.arthur.chiu@gmail.com"]
|
10
|
-
s.homepage = "http://reneerb.com"
|
11
|
-
s.summary = %q{The super-friendly web framework rendering component}
|
12
|
-
s.description = %q{The super-friendly web framework rendering component.}
|
13
|
-
|
14
|
-
s.rubyforge_project = "renee-render"
|
15
|
-
|
16
|
-
s.files = `git ls-files -- lib/renee/render*`.split("\n")
|
17
|
-
s.test_files = `git ls-files -- test/renee-render/*`.split("\n") + ["test/test_helper.rb"]
|
18
|
-
s.require_paths = ["lib"]
|
19
|
-
|
20
|
-
s.add_runtime_dependency 'rack', "~> 1.3.0"
|
21
|
-
s.add_runtime_dependency 'tilt', "~> 1.3.3"
|
22
|
-
s.add_runtime_dependency 'callsite', '~> 0.0.6'
|
23
|
-
s.add_runtime_dependency 'renee-core', "#{Renee::VERSION}"
|
24
|
-
|
25
|
-
s.add_development_dependency 'minitest', "~> 2.6.1"
|
26
|
-
s.add_development_dependency 'rake'
|
27
|
-
s.add_development_dependency 'bundler'
|
28
|
-
s.add_development_dependency "rack-test", ">= 0.5.0"
|
29
|
-
s.add_development_dependency "haml", ">= 2.2.0"
|
30
|
-
end
|
data/renee-session.gemspec
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
$:.push File.expand_path("../lib", __FILE__)
|
3
|
-
require "renee/version"
|
4
|
-
|
5
|
-
Gem::Specification.new do |s|
|
6
|
-
s.name = "renee-session"
|
7
|
-
s.version = Renee::VERSION
|
8
|
-
s.authors = ["Josh Hull"]
|
9
|
-
s.email = ["joshbuddy@gmail.com"]
|
10
|
-
s.homepage = "http://reneerb.com"
|
11
|
-
s.summary = %q{The super-friendly web framework session component}
|
12
|
-
s.description = %q{The super-friendly web framework session component.}
|
13
|
-
|
14
|
-
s.rubyforge_project = "renee-session"
|
15
|
-
|
16
|
-
s.files = `git ls-files -- lib/renee/session*`.split("\n")
|
17
|
-
s.test_files = `git ls-files -- test/renee-session/*`.split("\n") + ["test/test_helper.rb"]
|
18
|
-
s.require_paths = ["lib"]
|
19
|
-
|
20
|
-
s.add_runtime_dependency 'rack', "~> 1.3.0"
|
21
|
-
s.add_runtime_dependency 'renee-core', "#{Renee::VERSION}"
|
22
|
-
|
23
|
-
s.add_development_dependency 'minitest', "~> 2.6.1"
|
24
|
-
s.add_development_dependency 'rake'
|
25
|
-
s.add_development_dependency 'bundler'
|
26
|
-
s.add_development_dependency "rack-test", ">= 0.5.0"
|
27
|
-
s.add_development_dependency "haml", ">= 2.2.0"
|
28
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
$:.push File.expand_path("../lib", __FILE__)
|
3
|
-
require "renee/version"
|
4
|
-
|
5
|
-
Gem::Specification.new do |s|
|
6
|
-
s.name = "renee-url-generation"
|
7
|
-
s.version = Renee::VERSION
|
8
|
-
s.authors = ["Josh Hull", "Nathan Esquenazi", "Arthur Chiu"]
|
9
|
-
s.email = ["joshbuddy@gmail.com", "nesquena@gmail.com", "mr.arthur.chiu@gmail.com"]
|
10
|
-
s.homepage = "http://reneerb.com"
|
11
|
-
s.summary = %q{The super-friendly rack helpers -- URL generation}
|
12
|
-
s.description = %q{The super-friendly rack helpers -- URL generation.}
|
13
|
-
|
14
|
-
s.rubyforge_project = "renee-url-generation"
|
15
|
-
|
16
|
-
s.files = `git ls-files -- lib/renee/core*`.split("\n")
|
17
|
-
s.test_files = `git ls-files -- test/renee-core/*`.split("\n") + ["test/test_helper.rb"]
|
18
|
-
s.require_paths = ["lib"]
|
19
|
-
|
20
|
-
s.add_development_dependency 'minitest', "~> 2.6.1"
|
21
|
-
s.add_development_dependency 'bundler'
|
22
|
-
s.add_development_dependency "rack-test", ">= 0.5.0"
|
23
|
-
s.add_development_dependency "rake"
|
24
|
-
end
|