hobby 0.0.8 → 0.0.9
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.
- checksums.yaml +4 -4
- data/hobby.gemspec +1 -1
- data/lib/hobby/router/route.rb +2 -1
- data/lib/hobby/router.rb +4 -1
- data/lib/hobby.rb +8 -3
- data/readme.adoc +4 -3
- data/spec/app_spec.rb +8 -0
- data/spec/apps/ContentType.rb +4 -0
- data/spec/router_matchers.rb +1 -1
- data/spec/router_spec.rb +9 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a3c9210b9735f56e28762ceeb49fa621b5a5f0b
|
4
|
+
data.tar.gz: 8969c233002b7d0d334adb1a2457b420d07d2bb1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6e751d77257376799bcd4fc942294612056e259225a56b45ab24e1923d8deb744ea0539eb15568e468c9d82ba4f58d7ad9169aefd1d019d4a499332943d3d51e
|
7
|
+
data.tar.gz: 4c5dd14d04d1a91ddfc8e030abf63e9d8a2cae6798ac8d2e2a8260d9c9e494d52daa9167f4d0afbf948d27ca189c41b5b6bd189fee9b9d477e34068b77634807
|
data/hobby.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = 'hobby'
|
7
|
-
spec.version = '0.0.
|
7
|
+
spec.version = '0.0.9'
|
8
8
|
spec.authors = ['Anatoly Chernow']
|
9
9
|
spec.email = ['chertoly@gmail.com']
|
10
10
|
spec.summary = %q{A minimal DSL over rack}
|
data/lib/hobby/router/route.rb
CHANGED
@@ -2,10 +2,11 @@ class Hobby::Router
|
|
2
2
|
class Route
|
3
3
|
def initialize verb, path, &action
|
4
4
|
@verb, @path, @action = verb, path, action
|
5
|
+
@params = {}
|
5
6
|
end
|
6
7
|
|
7
8
|
attr_reader :verb, :path
|
8
|
-
attr_accessor :action
|
9
|
+
attr_accessor :action, :params
|
9
10
|
|
10
11
|
alias to_proc action
|
11
12
|
end
|
data/lib/hobby/router.rb
CHANGED
data/lib/hobby.rb
CHANGED
@@ -38,7 +38,7 @@ module Hobby
|
|
38
38
|
protected
|
39
39
|
def handle env
|
40
40
|
catch :halt do
|
41
|
-
route = self.class.router.route_for (@env = env)
|
41
|
+
@route = self.class.router.route_for (@env = env)
|
42
42
|
|
43
43
|
body = route ? (instance_exec &route) : not_found
|
44
44
|
response.write body
|
@@ -48,7 +48,7 @@ module Hobby
|
|
48
48
|
end
|
49
49
|
|
50
50
|
private
|
51
|
-
attr_reader :env
|
51
|
+
attr_reader :env, :route
|
52
52
|
|
53
53
|
def request
|
54
54
|
@request ||= self.class.request.new env
|
@@ -59,7 +59,7 @@ module Hobby
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def my
|
62
|
-
|
62
|
+
route.params
|
63
63
|
end
|
64
64
|
|
65
65
|
def halt
|
@@ -69,4 +69,9 @@ module Hobby
|
|
69
69
|
def not_found
|
70
70
|
response.status = 404
|
71
71
|
end
|
72
|
+
|
73
|
+
def content_type type
|
74
|
+
mime_type = Rack::Mime::MIME_TYPES.fetch ".#{type}"
|
75
|
+
response.add_header 'Content-Type', mime_type
|
76
|
+
end
|
72
77
|
end
|
data/readme.adoc
CHANGED
@@ -193,11 +193,12 @@ The following methods are predefined:
|
|
193
193
|
* `env`: a `Hash`, http://www.rubydoc.info/github/rack/rack/master/file/SPEC#The_Environment[a Rack environment].
|
194
194
|
* `request`: a http://www.rubydoc.info/gems/rack/Rack/Request[`Rack::Request`].
|
195
195
|
* `response`: a http://www.rubydoc.info/gems/rack/Rack/Response[`Rack::Response`].
|
196
|
-
* `
|
196
|
+
* `route`: a `Hobby::Router::Route`, the currently executing route.
|
197
|
+
* `route.params`, or a shortcut `my`: a `Hash` which stores route params. See <<routes-params>> for a usage example.
|
197
198
|
* `halt`: returns the `response` immediately. See <<halting>> for a usage example.
|
198
199
|
|
199
|
-
[[routes-
|
200
|
-
=== Routes with
|
200
|
+
[[routes-params]]
|
201
|
+
=== Routes with params
|
201
202
|
|
202
203
|
[source,ruby]
|
203
204
|
----
|
data/spec/app_spec.rb
CHANGED
@@ -155,5 +155,13 @@ describe Hobby::App do
|
|
155
155
|
assert { last_response.status == 400 }
|
156
156
|
end
|
157
157
|
end
|
158
|
+
|
159
|
+
describe ContentType do
|
160
|
+
it do
|
161
|
+
get '/'
|
162
|
+
assert { last_response.body == "alert('string');" }
|
163
|
+
assert { last_response.headers['Content-Type'] == 'application/javascript' }
|
164
|
+
end
|
165
|
+
end
|
158
166
|
end
|
159
167
|
end
|
data/spec/router_matchers.rb
CHANGED
@@ -17,7 +17,7 @@ module RouterMatchers
|
|
17
17
|
env = env_for path, verb
|
18
18
|
route = subject.route_for env
|
19
19
|
|
20
|
-
params_are_ok = (@params ? (@params.to_a -
|
20
|
+
params_are_ok = (@params ? (@params.to_a - route.params.to_a).empty? : true)
|
21
21
|
|
22
22
|
route && (route.to_proc.call == SOME_ROUTE.call) && params_are_ok
|
23
23
|
end
|
data/spec/router_spec.rb
CHANGED
@@ -37,4 +37,13 @@ describe Hobby::Router do
|
|
37
37
|
|
38
38
|
assert { subject.instance_variable_get(:@routes).include? 'GET/hello/ololo' }
|
39
39
|
end
|
40
|
+
|
41
|
+
it 'dups a route for each request' do
|
42
|
+
router = described_class.new
|
43
|
+
route = router.add_route 'GET', '/some_path' do :some_action end
|
44
|
+
|
45
|
+
duped_route = router.route_for env_for '/some_path'
|
46
|
+
|
47
|
+
assert { not route.equal? duped_route }
|
48
|
+
end
|
40
49
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hobby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anatoly Chernow
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-06-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -44,6 +44,7 @@ files:
|
|
44
44
|
- lib/hobby/router/routes.rb
|
45
45
|
- readme.adoc
|
46
46
|
- spec/app_spec.rb
|
47
|
+
- spec/apps/ContentType.rb
|
47
48
|
- spec/apps/Decorator.rb
|
48
49
|
- spec/apps/Env.rb
|
49
50
|
- spec/apps/Halting.rb
|
@@ -82,6 +83,7 @@ specification_version: 4
|
|
82
83
|
summary: A minimal DSL over rack
|
83
84
|
test_files:
|
84
85
|
- spec/app_spec.rb
|
86
|
+
- spec/apps/ContentType.rb
|
85
87
|
- spec/apps/Decorator.rb
|
86
88
|
- spec/apps/Env.rb
|
87
89
|
- spec/apps/Halting.rb
|