roy 0.0.1 → 0.1.0
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.lock +3 -0
- data/README.md +10 -9
- data/lib/roy.rb +10 -6
- data/lib/roy/after.rb +10 -0
- data/lib/roy/before.rb +8 -0
- data/lib/roy/plugins.rb +10 -0
- data/lib/roy/render.rb +15 -0
- data/lib/roy/version.rb +1 -1
- data/roy.gemspec +3 -2
- data/test/after_test.rb +31 -0
- data/test/base_test.rb +9 -3
- data/test/before_test.rb +31 -0
- data/test/custom_options_test.rb +20 -0
- data/test/plugins_test.rb +37 -0
- data/test/prefix_test.rb +2 -2
- data/test/render_test.rb +75 -0
- metadata +41 -5
data/Gemfile.lock
CHANGED
@@ -2,6 +2,7 @@ PATH
|
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
4
|
roy (0.0.1)
|
5
|
+
rack
|
5
6
|
|
6
7
|
GEM
|
7
8
|
remote: http://rubygems.org/
|
@@ -10,6 +11,7 @@ GEM
|
|
10
11
|
rack (1.3.4)
|
11
12
|
rack-test (0.6.1)
|
12
13
|
rack (>= 1.0)
|
14
|
+
tilt (1.3.3)
|
13
15
|
|
14
16
|
PLATFORMS
|
15
17
|
ruby
|
@@ -18,3 +20,4 @@ DEPENDENCIES
|
|
18
20
|
minitest
|
19
21
|
rack-test
|
20
22
|
roy!
|
23
|
+
tilt
|
data/README.md
CHANGED
@@ -1,16 +1,17 @@
|
|
1
1
|
Roy
|
2
2
|
===
|
3
3
|
|
4
|
-
Roy is a tiny module that aims to make any Ruby object Rack-friendly and
|
5
|
-
it with a REST-like interface.
|
4
|
+
Roy is a tiny module that aims to make any Ruby object Rack-friendly and
|
5
|
+
provides it with a REST-like interface.
|
6
6
|
|
7
|
-
Roy tries to be as less invasive as possible.
|
7
|
+
Roy tries to be as less invasive as possible. It provides your objects with a
|
8
8
|
`#call` method that takes a Rack environment and dispatchs to a regular method
|
9
9
|
named after the HTTP method you want to catch.
|
10
10
|
|
11
11
|
## Tests
|
12
12
|
|
13
|
-
You can
|
13
|
+
You can execute the tests by running `rake test`. They are written with
|
14
|
+
Minitest.
|
14
15
|
|
15
16
|
## Example
|
16
17
|
|
@@ -44,20 +45,20 @@ end
|
|
44
45
|
|
45
46
|
### Configuration
|
46
47
|
|
47
|
-
The `roy` class method is used to define access control and method
|
48
|
-
following example should be
|
48
|
+
The `roy` class method is mainly used to define access control and method
|
49
|
+
prefix. You can also define your own options. The following example should be
|
50
|
+
self-explanatory enough:
|
49
51
|
|
50
52
|
``` ruby
|
51
53
|
class Example
|
52
54
|
include Roy
|
53
|
-
roy allow: [:get], prefix: :http_
|
55
|
+
roy allow: [:get], prefix: :http_, foo: "bar"
|
54
56
|
|
55
57
|
def http_get(*args)
|
56
|
-
"
|
58
|
+
"foo is #{roy.conf.foo}"
|
57
59
|
end
|
58
60
|
end
|
59
61
|
```
|
60
|
-
|
61
62
|
### Environement
|
62
63
|
|
63
64
|
Inside your handler methods, you have access to a `roy` readable attribute which
|
data/lib/roy.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'set'
|
2
2
|
require 'rack'
|
3
|
+
require 'ostruct'
|
3
4
|
require 'roy/version'
|
4
5
|
|
5
6
|
module Roy
|
@@ -9,10 +10,14 @@ module Roy
|
|
9
10
|
base.send(:extend, ClassMethods)
|
10
11
|
end
|
11
12
|
|
12
|
-
|
13
|
+
def roy
|
14
|
+
@roy ||= Env.new.tap {|e|
|
15
|
+
e.conf = self.class.conf
|
16
|
+
}
|
17
|
+
end
|
13
18
|
|
14
19
|
def call(env)
|
15
|
-
|
20
|
+
roy.tap { |e|
|
16
21
|
e.env = env
|
17
22
|
e.request = Rack::Request.new(env)
|
18
23
|
e.response = Rack::Response.new
|
@@ -21,7 +26,6 @@ module Roy
|
|
21
26
|
e.params.default_proc = proc do |hash, key|
|
22
27
|
hash[key.to_s] if Symbol === key
|
23
28
|
end
|
24
|
-
e.conf = self.class.conf
|
25
29
|
}
|
26
30
|
|
27
31
|
method = roy.env['REQUEST_METHOD'].downcase.to_sym
|
@@ -49,9 +53,7 @@ module Roy
|
|
49
53
|
attr_reader :conf
|
50
54
|
|
51
55
|
def roy(options={})
|
52
|
-
@conf
|
53
|
-
conf.allow ||= Set.new
|
54
|
-
conf.prefix ||= :''
|
56
|
+
@conf ||= OpenStruct.new(allow: Set.new, prefix: :'')
|
55
57
|
|
56
58
|
options.each do |k,v|
|
57
59
|
case k
|
@@ -60,6 +62,8 @@ module Roy
|
|
60
62
|
conf.allow.add(:head) if v.member?(:get)
|
61
63
|
when :prefix
|
62
64
|
conf.prefix = v
|
65
|
+
else
|
66
|
+
conf.send(:"#{k}=", v)
|
63
67
|
end
|
64
68
|
end
|
65
69
|
end
|
data/lib/roy/after.rb
ADDED
data/lib/roy/before.rb
ADDED
data/lib/roy/plugins.rb
ADDED
data/lib/roy/render.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'tilt'
|
2
|
+
|
3
|
+
module Roy
|
4
|
+
module Render
|
5
|
+
def render(engine, template_or_string, params={}, &block)
|
6
|
+
case template_or_string
|
7
|
+
when Symbol
|
8
|
+
else
|
9
|
+
Tilt[engine].new {
|
10
|
+
template_or_string.to_s
|
11
|
+
}.render(self, params, &block)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/roy/version.rb
CHANGED
data/roy.gemspec
CHANGED
@@ -20,8 +20,9 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
21
21
|
s.require_paths = ["lib"]
|
22
22
|
|
23
|
-
|
23
|
+
s.add_dependency "rack"
|
24
|
+
|
24
25
|
s.add_development_dependency "minitest"
|
25
26
|
s.add_development_dependency "rack-test"
|
26
|
-
|
27
|
+
s.add_development_dependency "tilt"
|
27
28
|
end
|
data/test/after_test.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
require 'roy/after'
|
3
|
+
|
4
|
+
class AfterTestObject
|
5
|
+
include Roy
|
6
|
+
include Roy::After
|
7
|
+
|
8
|
+
roy allow: [:get],
|
9
|
+
after: lambda { |response|
|
10
|
+
response.header['Content-Type'] = 'text/plain'
|
11
|
+
}
|
12
|
+
|
13
|
+
def get(*args)
|
14
|
+
'success'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class AfterTest < MiniTest::Unit::TestCase
|
19
|
+
include Rack::Test::Methods
|
20
|
+
|
21
|
+
def app
|
22
|
+
AfterTestObject.new
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_after_filter
|
26
|
+
get '/'
|
27
|
+
ok!
|
28
|
+
assert_equal 'text/plain', last_response.header['Content-Type']
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
data/test/base_test.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require_relative 'helper'
|
2
2
|
|
3
|
-
class
|
3
|
+
class BaseTestObject
|
4
4
|
include Roy
|
5
5
|
|
6
6
|
attr_reader :history
|
@@ -27,11 +27,11 @@ class RemoteLog
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
class
|
30
|
+
class BaseTest < MiniTest::Unit::TestCase
|
31
31
|
include Rack::Test::Methods
|
32
32
|
|
33
33
|
def app
|
34
|
-
|
34
|
+
BaseTestObject.new
|
35
35
|
end
|
36
36
|
|
37
37
|
def test_provide_call
|
@@ -42,6 +42,12 @@ class RoyTest < MiniTest::Unit::TestCase
|
|
42
42
|
assert_respond_to app.class, :roy
|
43
43
|
end
|
44
44
|
|
45
|
+
def test_defines_roy_attribute_with_defaults
|
46
|
+
assert_respond_to app, :roy
|
47
|
+
assert_equal :'', app.roy.conf.prefix
|
48
|
+
assert_instance_of Set, app.roy.conf.allow
|
49
|
+
end
|
50
|
+
|
45
51
|
def test_forward_allowed_methods
|
46
52
|
get '/'
|
47
53
|
ok!
|
data/test/before_test.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
require 'roy/before'
|
3
|
+
|
4
|
+
class BeforeTestObject
|
5
|
+
include Roy
|
6
|
+
include Roy::Before
|
7
|
+
|
8
|
+
roy allow: [:get],
|
9
|
+
before: lambda { |env|
|
10
|
+
env['REQUEST_METHOD'] = 'GET'
|
11
|
+
}
|
12
|
+
|
13
|
+
def get(*args)
|
14
|
+
'success'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class BeforeTest < MiniTest::Unit::TestCase
|
19
|
+
include Rack::Test::Methods
|
20
|
+
|
21
|
+
def app
|
22
|
+
BeforeTestObject.new
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_before_filter
|
26
|
+
post '/'
|
27
|
+
ok!
|
28
|
+
assert_equal 'success', last_response.body
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
|
2
|
+
require_relative 'helper'
|
3
|
+
|
4
|
+
class CustomOptionsTestObject
|
5
|
+
include Roy
|
6
|
+
|
7
|
+
roy foo: :bar
|
8
|
+
end
|
9
|
+
|
10
|
+
class CustomOptionsTest < MiniTest::Unit::TestCase
|
11
|
+
include Rack::Test::Methods
|
12
|
+
|
13
|
+
def app
|
14
|
+
CustomOptionsTestObject.new
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_custom_options
|
18
|
+
assert_equal :bar, app.class.conf.foo
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
require 'roy/plugins'
|
3
|
+
require 'roy/before'
|
4
|
+
require 'roy/after'
|
5
|
+
|
6
|
+
class PluginsTestObject
|
7
|
+
include Roy
|
8
|
+
include Roy::Plugins(Before, After)
|
9
|
+
|
10
|
+
roy allow: [:get],
|
11
|
+
before: lambda { |env|
|
12
|
+
env['REQUEST_METHOD'] = 'GET'
|
13
|
+
},
|
14
|
+
after: lambda { |response|
|
15
|
+
response.header['Content-Type'] = 'text/plain'
|
16
|
+
}
|
17
|
+
|
18
|
+
def get(*args)
|
19
|
+
'success'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class PluginsTest < MiniTest::Unit::TestCase
|
24
|
+
include Rack::Test::Methods
|
25
|
+
|
26
|
+
def app
|
27
|
+
PluginsTestObject.new
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_plugins_are_loaded
|
31
|
+
get '/'
|
32
|
+
ok!
|
33
|
+
assert_equal 'text/plain', last_response.header['Content-Type']
|
34
|
+
assert_equal 'success', last_response.body
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
data/test/prefix_test.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require_relative 'helper'
|
2
2
|
|
3
|
-
class
|
3
|
+
class PrefixTestObject
|
4
4
|
include Roy
|
5
5
|
|
6
6
|
roy allow: [:get], prefix: :http_
|
@@ -14,7 +14,7 @@ class PrefixTest < MiniTest::Unit::TestCase
|
|
14
14
|
include Rack::Test::Methods
|
15
15
|
|
16
16
|
def app
|
17
|
-
|
17
|
+
PrefixTestObject.new
|
18
18
|
end
|
19
19
|
|
20
20
|
def test_prefixing
|
data/test/render_test.rb
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
require 'roy/render'
|
3
|
+
|
4
|
+
Templates = {
|
5
|
+
simple: %q(<%= "Hello world!" %>),
|
6
|
+
locals: %q(<%= "Hello #{person}" %>),
|
7
|
+
scope: %q(<%= roy.conf.inspect %>),
|
8
|
+
yield: %q(<%= yield %>)
|
9
|
+
}
|
10
|
+
|
11
|
+
class RenderTestObject
|
12
|
+
include Roy
|
13
|
+
include Roy::Render
|
14
|
+
|
15
|
+
roy allow: [:get]
|
16
|
+
|
17
|
+
def get(*args)
|
18
|
+
case args.first
|
19
|
+
when 'template'
|
20
|
+
halt 403
|
21
|
+
when 'inline'
|
22
|
+
render :erb, Templates[:simple]
|
23
|
+
when 'locals'
|
24
|
+
render :erb, Templates[:locals], person: 'Bob'
|
25
|
+
when 'scope'
|
26
|
+
render :erb, Templates[:scope]
|
27
|
+
when 'yield'
|
28
|
+
render :erb, Templates[:yield] do
|
29
|
+
render :erb, Templates[:simple]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class RenderTest < MiniTest::Unit::TestCase
|
36
|
+
include Rack::Test::Methods
|
37
|
+
|
38
|
+
def app
|
39
|
+
RenderTestObject.new
|
40
|
+
end
|
41
|
+
|
42
|
+
def inline(tid, params={}, &block)
|
43
|
+
Tilt[:erb].new { Templates[tid] }.render(app, params, &block)
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_render_file_template
|
47
|
+
get '/template'
|
48
|
+
fail!
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_render_inline_template
|
52
|
+
get '/inline'
|
53
|
+
ok!
|
54
|
+
assert_equal inline(:simple), last_response.body
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_render_inline_template_with_locals
|
58
|
+
get '/locals'
|
59
|
+
ok!
|
60
|
+
assert_equal inline(:locals, person: 'Bob'), last_response.body
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_render_inline_scope
|
64
|
+
get '/scope'
|
65
|
+
ok!
|
66
|
+
assert_equal inline(:scope), last_response.body
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_render_with_block
|
70
|
+
get '/yield'
|
71
|
+
ok!
|
72
|
+
assert_equal inline(:simple), last_response.body
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: roy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0
|
5
|
+
version: 0.1.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- madx
|
@@ -10,10 +10,10 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-10-
|
13
|
+
date: 2011-10-23 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
16
|
+
name: rack
|
17
17
|
prerelease: false
|
18
18
|
requirement: &id001 !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: "0"
|
24
|
-
type: :
|
24
|
+
type: :runtime
|
25
25
|
version_requirements: *id001
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
|
-
name:
|
27
|
+
name: minitest
|
28
28
|
prerelease: false
|
29
29
|
requirement: &id002 !ruby/object:Gem::Requirement
|
30
30
|
none: false
|
@@ -34,6 +34,28 @@ dependencies:
|
|
34
34
|
version: "0"
|
35
35
|
type: :development
|
36
36
|
version_requirements: *id002
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: rack-test
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: "0"
|
46
|
+
type: :development
|
47
|
+
version_requirements: *id003
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: tilt
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: "0"
|
57
|
+
type: :development
|
58
|
+
version_requirements: *id004
|
37
59
|
description: |-
|
38
60
|
roy is a small library which allows every Ruby object to be used
|
39
61
|
as a Rack application.
|
@@ -52,11 +74,20 @@ files:
|
|
52
74
|
- README.md
|
53
75
|
- Rakefile
|
54
76
|
- lib/roy.rb
|
77
|
+
- lib/roy/after.rb
|
78
|
+
- lib/roy/before.rb
|
79
|
+
- lib/roy/plugins.rb
|
80
|
+
- lib/roy/render.rb
|
55
81
|
- lib/roy/version.rb
|
56
82
|
- roy.gemspec
|
83
|
+
- test/after_test.rb
|
57
84
|
- test/base_test.rb
|
85
|
+
- test/before_test.rb
|
86
|
+
- test/custom_options_test.rb
|
58
87
|
- test/helper.rb
|
88
|
+
- test/plugins_test.rb
|
59
89
|
- test/prefix_test.rb
|
90
|
+
- test/render_test.rb
|
60
91
|
homepage: https://github.com/madx/roy
|
61
92
|
licenses: []
|
62
93
|
|
@@ -85,6 +116,11 @@ signing_key:
|
|
85
116
|
specification_version: 3
|
86
117
|
summary: make your objects REST-friendly
|
87
118
|
test_files:
|
119
|
+
- test/after_test.rb
|
88
120
|
- test/base_test.rb
|
121
|
+
- test/before_test.rb
|
122
|
+
- test/custom_options_test.rb
|
89
123
|
- test/helper.rb
|
124
|
+
- test/plugins_test.rb
|
90
125
|
- test/prefix_test.rb
|
126
|
+
- test/render_test.rb
|