roy 0.1.0 → 0.2.2
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 +1 -1
- data/README.md +17 -5
- data/lib/roy.rb +5 -4
- data/lib/roy/plugins.rb +4 -0
- data/lib/roy/render.rb +11 -5
- data/lib/roy/version.rb +1 -1
- data/test/defaults_test.rb +25 -0
- data/test/plugins_test.rb +1 -2
- data/test/render_test.rb +13 -3
- data/test/views/layout.erb +1 -0
- data/test/views/test.erb +1 -0
- metadata +8 -2
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -2,16 +2,16 @@ Roy
|
|
2
2
|
===
|
3
3
|
|
4
4
|
Roy is a tiny module that aims to make any Ruby object Rack-friendly and
|
5
|
-
|
5
|
+
provide it with a REST-like interface.
|
6
6
|
|
7
7
|
Roy tries to be as less invasive as possible. It provides your objects with a
|
8
|
-
`#call` method that takes a Rack environment and
|
8
|
+
`#call` method that takes a Rack environment and dispatches to a regular method
|
9
9
|
named after the HTTP method you want to catch.
|
10
10
|
|
11
11
|
## Tests
|
12
12
|
|
13
13
|
You can execute the tests by running `rake test`. They are written with
|
14
|
-
|
14
|
+
MiniTest.
|
15
15
|
|
16
16
|
## Example
|
17
17
|
|
@@ -59,10 +59,10 @@ class Example
|
|
59
59
|
end
|
60
60
|
end
|
61
61
|
```
|
62
|
-
###
|
62
|
+
### Environment
|
63
63
|
|
64
64
|
Inside your handler methods, you have access to a `roy` readable attribute which
|
65
|
-
is a
|
65
|
+
is a Struct containing the following fields:
|
66
66
|
|
67
67
|
* `env`: the Rack environment
|
68
68
|
* `response`: a `Rack::Response` object that will be returned by `call`
|
@@ -82,3 +82,15 @@ composed of a status code and a message.
|
|
82
82
|
Roy provides a `halt` method that takes a status code and an optional message.
|
83
83
|
If there is no message it uses the default message from
|
84
84
|
`Rack::Utils::HTTP_STATUS_CODES`
|
85
|
+
|
86
|
+
### Plugins
|
87
|
+
|
88
|
+
Various plugins are shipped with Roy, here is the full list:
|
89
|
+
|
90
|
+
* **after**: modify the response after the app has been called
|
91
|
+
* **before**: modify the environment before calling the app
|
92
|
+
* **render**: integration with Tilt
|
93
|
+
* **plugins**: a simple plugin loader
|
94
|
+
|
95
|
+
Each plugin is designed to do only one thing. Thus it is very easy to take a
|
96
|
+
look at the code and see how the plugin works.
|
data/lib/roy.rb
CHANGED
@@ -5,6 +5,7 @@ require 'roy/version'
|
|
5
5
|
|
6
6
|
module Roy
|
7
7
|
Env = Struct.new(:env, :request, :response, :headers, :params, :conf)
|
8
|
+
Defaults = OpenStruct.new(allow: Set.new, prefix: :'')
|
8
9
|
|
9
10
|
def self.included(base)
|
10
11
|
base.send(:extend, ClassMethods)
|
@@ -52,16 +53,16 @@ module Roy
|
|
52
53
|
module ClassMethods
|
53
54
|
attr_reader :conf
|
54
55
|
|
55
|
-
def
|
56
|
-
@conf ||=
|
56
|
+
def self.extended(base)
|
57
|
+
base.instance_eval { @conf ||= Defaults.dup }
|
58
|
+
end
|
57
59
|
|
60
|
+
def roy(options={})
|
58
61
|
options.each do |k,v|
|
59
62
|
case k
|
60
63
|
when :allow
|
61
64
|
conf.allow.merge(v)
|
62
65
|
conf.allow.add(:head) if v.member?(:get)
|
63
|
-
when :prefix
|
64
|
-
conf.prefix = v
|
65
66
|
else
|
66
67
|
conf.send(:"#{k}=", v)
|
67
68
|
end
|
data/lib/roy/plugins.rb
CHANGED
data/lib/roy/render.rb
CHANGED
@@ -2,14 +2,20 @@ require 'tilt'
|
|
2
2
|
|
3
3
|
module Roy
|
4
4
|
module Render
|
5
|
-
|
6
|
-
|
5
|
+
|
6
|
+
def render(engine, view_or_string, params={}, &block)
|
7
|
+
options = roy.conf.render || {}
|
8
|
+
template = case view_or_string
|
7
9
|
when Symbol
|
10
|
+
file = [view_or_string.to_s, engine].map(&:to_s).join('.')
|
11
|
+
dir = roy.conf.views || 'views'
|
12
|
+
Tilt.new(File.join(dir, file), nil, options)
|
8
13
|
else
|
9
|
-
Tilt[engine].new {
|
10
|
-
template_or_string.to_s
|
11
|
-
}.render(self, params, &block)
|
14
|
+
Tilt[engine].new(nil, nil, options) { view_or_string.to_s }
|
12
15
|
end
|
16
|
+
|
17
|
+
template.render(self, params, &block)
|
13
18
|
end
|
19
|
+
|
14
20
|
end
|
15
21
|
end
|
data/lib/roy/version.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
defaults = Roy::Defaults.dup
|
4
|
+
Roy::Defaults.prefix = :http_
|
5
|
+
|
6
|
+
class DefaultsTestObject
|
7
|
+
include Roy
|
8
|
+
|
9
|
+
def http_get(*args)
|
10
|
+
'success'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class DefaultsTest < MiniTest::Unit::TestCase
|
15
|
+
include Rack::Test::Methods
|
16
|
+
|
17
|
+
def app
|
18
|
+
DefaultsTestObject.new
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_default_settings
|
22
|
+
get '/'
|
23
|
+
assert_equal 'success', last_response.body
|
24
|
+
end
|
25
|
+
end
|
data/test/plugins_test.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
require_relative 'helper'
|
2
2
|
require 'roy/plugins'
|
3
3
|
require 'roy/before'
|
4
|
-
require 'roy/after'
|
5
4
|
|
6
5
|
class PluginsTestObject
|
7
6
|
include Roy
|
8
|
-
include Roy::Plugins(Before,
|
7
|
+
include Roy::Plugins(Before, :after)
|
9
8
|
|
10
9
|
roy allow: [:get],
|
11
10
|
before: lambda { |env|
|
data/test/render_test.rb
CHANGED
@@ -12,12 +12,17 @@ class RenderTestObject
|
|
12
12
|
include Roy
|
13
13
|
include Roy::Render
|
14
14
|
|
15
|
-
roy allow: [:get]
|
15
|
+
roy allow: [:get],
|
16
|
+
views: 'test/views'
|
16
17
|
|
17
18
|
def get(*args)
|
18
19
|
case args.first
|
19
20
|
when 'template'
|
20
|
-
|
21
|
+
render :erb, :test
|
22
|
+
when 'template_layout'
|
23
|
+
render :erb, :layout do
|
24
|
+
render :erb, :test
|
25
|
+
end
|
21
26
|
when 'inline'
|
22
27
|
render :erb, Templates[:simple]
|
23
28
|
when 'locals'
|
@@ -45,7 +50,12 @@ class RenderTest < MiniTest::Unit::TestCase
|
|
45
50
|
|
46
51
|
def test_render_file_template
|
47
52
|
get '/template'
|
48
|
-
|
53
|
+
assert_equal inline(:simple), last_response.body
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_render_file_layout
|
57
|
+
get '/template_layout'
|
58
|
+
assert_equal inline(:simple), last_response.body
|
49
59
|
end
|
50
60
|
|
51
61
|
def test_render_inline_template
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= yield %>
|
data/test/views/test.erb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
<%= "Hello world!" %>
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: roy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.2.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- madx
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-10-
|
13
|
+
date: 2011-10-29 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rack
|
@@ -84,10 +84,13 @@ files:
|
|
84
84
|
- test/base_test.rb
|
85
85
|
- test/before_test.rb
|
86
86
|
- test/custom_options_test.rb
|
87
|
+
- test/defaults_test.rb
|
87
88
|
- test/helper.rb
|
88
89
|
- test/plugins_test.rb
|
89
90
|
- test/prefix_test.rb
|
90
91
|
- test/render_test.rb
|
92
|
+
- test/views/layout.erb
|
93
|
+
- test/views/test.erb
|
91
94
|
homepage: https://github.com/madx/roy
|
92
95
|
licenses: []
|
93
96
|
|
@@ -120,7 +123,10 @@ test_files:
|
|
120
123
|
- test/base_test.rb
|
121
124
|
- test/before_test.rb
|
122
125
|
- test/custom_options_test.rb
|
126
|
+
- test/defaults_test.rb
|
123
127
|
- test/helper.rb
|
124
128
|
- test/plugins_test.rb
|
125
129
|
- test/prefix_test.rb
|
126
130
|
- test/render_test.rb
|
131
|
+
- test/views/layout.erb
|
132
|
+
- test/views/test.erb
|