roy 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
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