roy 0.3.0 → 0.3.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- roy (0.3.0)
4
+ roy (0.3.1)
5
5
  rack
6
6
 
7
7
  GEM
data/Rakefile CHANGED
@@ -2,5 +2,5 @@ require "bundler/gem_tasks"
2
2
  require 'rake/testtask'
3
3
 
4
4
  Rake::TestTask.new do |t|
5
- t.pattern = 'test/*_test.rb'
5
+ t.pattern = 'test/{plugins/,}*_test.rb'
6
6
  end
@@ -0,0 +1,12 @@
1
+ module Roy
2
+ module Plugin
3
+ module After
4
+ def call(env)
5
+ status, header, body = super
6
+ resp = Rack::Response.new(body, status, header)
7
+ (roy.conf.after || lambda {|x| x }).(resp)
8
+ resp.finish
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,23 @@
1
+ module Roy
2
+ module Plugin
3
+ module BasicAuth
4
+ def protected!
5
+ unless authorized?
6
+ realm = roy.conf.auth && roy.conf.auth[:realm] || 'Realm'
7
+ roy.response['WWW-Authenticate'] = %(Basic realm="#{realm}")
8
+ halt 401
9
+ end
10
+ end
11
+
12
+ def authorized?
13
+ @auth ||= Rack::Auth::Basic::Request.new(roy.request.env)
14
+ (roy.conf.auth ||= {})[:credentials] ||= {'admin' => 'password'}
15
+
16
+ @auth.provided? && @auth.basic? && @auth.credentials &&
17
+ roy.conf.auth[:credentials].any? do |user, password|
18
+ [user, password] == @auth.credentials
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,10 @@
1
+ module Roy
2
+ module Plugin
3
+ module Before
4
+ def call(env)
5
+ (roy.conf.before || lambda {|x| x }).(env)
6
+ super
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,23 @@
1
+ require 'tilt'
2
+
3
+ module Roy
4
+ module Plugin
5
+ module Render
6
+
7
+ def render(engine, view_or_string, params={}, &block)
8
+ options = roy.conf.render || {}
9
+ template = case view_or_string
10
+ when Symbol
11
+ file = [view_or_string.to_s, engine].map(&:to_s).join('.')
12
+ dir = roy.conf.views || 'views'
13
+ Tilt.new(File.join(dir, file), nil, options)
14
+ else
15
+ Tilt[engine].new(nil, nil, options) { view_or_string.to_s }
16
+ end
17
+
18
+ template.render(self, params, &block)
19
+ end
20
+
21
+ end
22
+ end
23
+ end
data/lib/roy/plugins.rb CHANGED
@@ -1,10 +1,12 @@
1
1
  module Roy
2
+ module Plugin; end
3
+
2
4
  def self.Plugins(*names)
3
5
  return Module.new.tap do |mod|
4
6
  names.each do |name|
5
7
  if name.is_a?(Symbol)
6
- require "roy/#{name}"
7
- name = Roy.const_get("#{name}".capitalize.to_sym)
8
+ require "roy/plugin/#{name}"
9
+ name = Roy::Plugin.const_get("#{name}".capitalize.to_sym)
8
10
  end
9
11
  mod.send(:include, name)
10
12
  end
data/lib/roy/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Roy
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
data/lib/roy.rb CHANGED
@@ -2,6 +2,7 @@ require 'set'
2
2
  require 'rack'
3
3
  require 'ostruct'
4
4
  require 'roy/version'
5
+ require 'roy/plugins'
5
6
 
6
7
  module Roy
7
8
  Env = Struct.new(:env, :request, :response, :headers, :params, :conf)
@@ -1,9 +1,9 @@
1
- require_relative 'helper'
2
- require 'roy/after'
1
+ require_relative '../helper'
2
+ require 'roy/plugin/after'
3
3
 
4
4
  class AfterTestObject
5
5
  include Roy
6
- include Roy::After
6
+ include Roy::Plugin::After
7
7
 
8
8
  roy allow: [:get],
9
9
  after: lambda { |response|
@@ -0,0 +1,49 @@
1
+ require_relative '../helper'
2
+ require 'roy/plugin/basic_auth'
3
+
4
+ class BasicAuthTestObject
5
+ include Roy
6
+ include Roy::Plugin::BasicAuth
7
+
8
+ roy allow: [:get],
9
+ auth: {
10
+ realm: "Custom",
11
+ credentials: {'user' => 'password'}
12
+ }
13
+
14
+ def get(path)
15
+ protected!
16
+ 'success'
17
+ end
18
+ end
19
+
20
+ class BasicAuthTest < MiniTest::Unit::TestCase
21
+ include Rack::Test::Methods
22
+
23
+ def app
24
+ BasicAuthTestObject.new
25
+ end
26
+
27
+ def test_basic_auth_realm
28
+ get '/'
29
+ assert_match /Custom/, last_response['WWW-Authenticate']
30
+ end
31
+
32
+ def test_basic_auth_protected
33
+ get '/'
34
+ assert_equal 401, last_response.status
35
+ end
36
+
37
+ def test_basic_auth_authorized
38
+ authorize 'user', 'password'
39
+ get '/'
40
+ ok!
41
+ end
42
+
43
+ def test_basic_auth_unauthorized
44
+ authorize 'foo', 'bar'
45
+ get '/'
46
+ fail!
47
+ end
48
+
49
+ end
@@ -1,9 +1,9 @@
1
- require_relative 'helper'
2
- require 'roy/before'
1
+ require_relative '../helper'
2
+ require 'roy/plugin/before'
3
3
 
4
4
  class BeforeTestObject
5
5
  include Roy
6
- include Roy::Before
6
+ include Roy::Plugin::Before
7
7
 
8
8
  roy allow: [:get],
9
9
  before: lambda { |env|
@@ -1,10 +1,10 @@
1
- require_relative 'helper'
1
+ require_relative '../helper'
2
2
  require 'roy/plugins'
3
- require 'roy/before'
3
+ require 'roy/plugin/before'
4
4
 
5
5
  class PluginsTestObject
6
6
  include Roy
7
- include Roy::Plugins(Before, :after)
7
+ include Roy::Plugins(Plugin::Before, :after)
8
8
 
9
9
  roy allow: [:get],
10
10
  before: lambda { |env|
@@ -1,5 +1,5 @@
1
- require_relative 'helper'
2
- require 'roy/render'
1
+ require_relative '../helper'
2
+ require 'roy/plugin/render'
3
3
 
4
4
  Templates = {
5
5
  simple: %q(<%= "Hello world!" %>),
@@ -10,7 +10,7 @@ Templates = {
10
10
 
11
11
  class RenderTestObject
12
12
  include Roy
13
- include Roy::Render
13
+ include Roy::Plugin::Render
14
14
 
15
15
  roy allow: [:get],
16
16
  views: 'test/views'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-16 00:00:00.000000000 Z
12
+ date: 2011-11-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
16
- requirement: &6811460 !ruby/object:Gem::Requirement
16
+ requirement: &19902600 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *6811460
24
+ version_requirements: *19902600
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: minitest
27
- requirement: &6810920 !ruby/object:Gem::Requirement
27
+ requirement: &19902080 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *6810920
35
+ version_requirements: *19902080
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rack-test
38
- requirement: &6810380 !ruby/object:Gem::Requirement
38
+ requirement: &19901580 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *6810380
46
+ version_requirements: *19901580
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: tilt
49
- requirement: &6809880 !ruby/object:Gem::Requirement
49
+ requirement: &19901080 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *6809880
57
+ version_requirements: *19901080
58
58
  description: ! 'roy is a small library which allows every Ruby object to be used
59
59
 
60
60
  as a Rack application.'
@@ -70,21 +70,23 @@ files:
70
70
  - README.md
71
71
  - Rakefile
72
72
  - lib/roy.rb
73
- - lib/roy/after.rb
74
- - lib/roy/before.rb
73
+ - lib/roy/plugin/after.rb
74
+ - lib/roy/plugin/basic_auth.rb
75
+ - lib/roy/plugin/before.rb
76
+ - lib/roy/plugin/render.rb
75
77
  - lib/roy/plugins.rb
76
- - lib/roy/render.rb
77
78
  - lib/roy/version.rb
78
79
  - roy.gemspec
79
- - test/after_test.rb
80
80
  - test/base_test.rb
81
- - test/before_test.rb
82
81
  - test/custom_options_test.rb
83
82
  - test/defaults_test.rb
84
83
  - test/helper.rb
85
- - test/plugins_test.rb
84
+ - test/plugins/after_test.rb
85
+ - test/plugins/basic_auth_test.rb
86
+ - test/plugins/before_test.rb
87
+ - test/plugins/plugins_test.rb
88
+ - test/plugins/render_test.rb
86
89
  - test/prefix_test.rb
87
- - test/render_test.rb
88
90
  - test/views/layout.erb
89
91
  - test/views/test.erb
90
92
  homepage: https://github.com/madx/roy
@@ -112,14 +114,15 @@ signing_key:
112
114
  specification_version: 3
113
115
  summary: make your objects REST-friendly
114
116
  test_files:
115
- - test/after_test.rb
116
117
  - test/base_test.rb
117
- - test/before_test.rb
118
118
  - test/custom_options_test.rb
119
119
  - test/defaults_test.rb
120
120
  - test/helper.rb
121
- - test/plugins_test.rb
121
+ - test/plugins/after_test.rb
122
+ - test/plugins/basic_auth_test.rb
123
+ - test/plugins/before_test.rb
124
+ - test/plugins/plugins_test.rb
125
+ - test/plugins/render_test.rb
122
126
  - test/prefix_test.rb
123
- - test/render_test.rb
124
127
  - test/views/layout.erb
125
128
  - test/views/test.erb
data/lib/roy/after.rb DELETED
@@ -1,10 +0,0 @@
1
- module Roy
2
- module After
3
- def call(env)
4
- status, header, body = super
5
- resp = Rack::Response.new(body, status, header)
6
- (roy.conf.after || lambda {|x| x }).(resp)
7
- resp.finish
8
- end
9
- end
10
- end
data/lib/roy/before.rb DELETED
@@ -1,8 +0,0 @@
1
- module Roy
2
- module Before
3
- def call(env)
4
- (roy.conf.before || lambda {|x| x }).(env)
5
- super
6
- end
7
- end
8
- end
data/lib/roy/render.rb DELETED
@@ -1,21 +0,0 @@
1
- require 'tilt'
2
-
3
- module Roy
4
- module Render
5
-
6
- def render(engine, view_or_string, params={}, &block)
7
- options = roy.conf.render || {}
8
- template = case view_or_string
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)
13
- else
14
- Tilt[engine].new(nil, nil, options) { view_or_string.to_s }
15
- end
16
-
17
- template.render(self, params, &block)
18
- end
19
-
20
- end
21
- end