bacchus 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,90 +1,88 @@
1
1
  require 'letters'
2
2
 
3
- module Bacchus
4
- module Rack
5
- class BetaSite
6
- attr_reader :options
3
+ module Rack
4
+ class BetaSite
5
+ attr_reader :options
6
+
7
+ def initialize(app, options = {})
8
+ @app = app
9
+ @excluded_routes = options[:except] || []
10
+ @access_form_routes = options[:access_through] || []
11
+ @server = options[:server] or raise "Need to specify the address of the server."
12
+ end
13
+
14
+ def call(env)
15
+ # if (Request.new(env).path == "/live_demo/unlock")
16
+ # msg = "Site has been unlocked"
17
+ # response = Response.new("Site has been unlocked", 200, {'Content-Type' => 'text/html'})
18
+ # response.set_cookie("unlocked", "true")
19
+ # return response.to_a
20
+ # end
21
+
22
+ if access_form_route?(env)
23
+ render_access_form
24
+ elsif access_denied?(env)
25
+ render_locked
26
+ else
27
+ @app.call(env)
28
+ end
29
+ end
7
30
 
8
- def initialize(app, options = {})
9
- @app = app
10
- @excluded_routes = options[:except] || []
11
- @access_form_routes = options[:access_through] || []
12
- @server = options[:server] or raise "Need to specify the address of the server."
13
- end
31
+ private
14
32
 
15
- def call(env)
16
- # if (Request.new(env).path == "/live_demo/unlock")
17
- # msg = "Site has been unlocked"
18
- # response = Response.new("Site has been unlocked", 200, {'Content-Type' => 'text/html'})
19
- # response.set_cookie("unlocked", "true")
20
- # return response.to_a
21
- # end
22
-
23
- if access_form_route?(env)
24
- render_access_form
25
- elsif access_denied?(env)
26
- render_locked
27
- else
28
- @app.call(env)
29
- end
30
- end
31
-
32
- private
33
-
34
- def access_form_route?(env) # TODO: Duplication -- access_denied? & excluded_route?
35
- request = Request.new(env)
36
- @access_form_routes.index {|route| matching_path?(request, route)}
37
- end
38
-
39
- def render_access_form
40
- body = <<-EOS
41
- <html>
42
- <head>
43
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
44
- <script src="#{path_to('bacchus.js')}" type="text/javascript"></script>
45
- </head>
46
- <body>
47
- </body>
48
- </html>
49
- EOS
50
- [200, {'Content-Type' => 'text/html', 'Content-Length' => body.length.to_s}, [body]]
51
- end
33
+ def access_form_route?(env) # TODO: Duplication -- access_denied? & excluded_route?
34
+ request = Request.new(env)
35
+ @access_form_routes.index {|route| matching_path?(request, route)}
36
+ end
37
+
38
+ def render_access_form
39
+ body = <<-EOS
40
+ <html>
41
+ <head>
42
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
43
+ <script src="#{path_to('bacchus.js')}" type="text/javascript"></script>
44
+ </head>
45
+ <body>
46
+ </body>
47
+ </html>
48
+ EOS
49
+ [200, {'Content-Type' => 'text/html', 'Content-Length' => body.length.to_s}, [body]]
50
+ end
52
51
 
53
- ########################################################
54
-
55
- def path_to(file)
56
- ::File.join(@server, file)
57
- end
58
-
59
- ########################################################
60
-
61
- def render_locked
62
- msg = "Site is locked"
63
- [500, {'Content-Type' => 'text/html', 'Content-Length' => msg.length.to_s}, [msg]]
64
- end
52
+ ########################################################
53
+
54
+ def path_to(file)
55
+ ::File.join(@server, file)
56
+ end
57
+
58
+ ########################################################
59
+
60
+ def render_locked
61
+ msg = "Site is locked"
62
+ [500, {'Content-Type' => 'text/html', 'Content-Length' => msg.length.to_s}, [msg]]
63
+ end
65
64
 
66
- def access_denied?(env)
67
- request = Request.new(env)
68
- locked?(request) && !excluded_route?(request)
69
- end
70
-
71
- def locked?(request)
72
- request.cookies["unlocked"].nil?
73
- end
74
-
75
- def excluded_route?(request)
76
- @excluded_routes.index {|route| matching_path?(request, route)}
77
- end
78
-
79
- def matching_path?(request, path)
80
- if path.is_a?(String)
81
- request.fullpath == path
82
- elsif path.is_a?(Regexp)
83
- request.fullpath.match(path)
84
- else
85
- raise "Unsupported route type; only String or Regex paths are accepted"
86
- end
65
+ def access_denied?(env)
66
+ request = Request.new(env)
67
+ locked?(request) && !excluded_route?(request)
68
+ end
69
+
70
+ def locked?(request)
71
+ request.cookies["unlocked"].nil?
72
+ end
73
+
74
+ def excluded_route?(request)
75
+ @excluded_routes.index {|route| matching_path?(request, route)}
76
+ end
77
+
78
+ def matching_path?(request, path)
79
+ if path.is_a?(String)
80
+ request.fullpath == path
81
+ elsif path.is_a?(Regexp)
82
+ request.fullpath.match(path)
83
+ else
84
+ raise "Unsupported route type; only String or Regex paths are accepted"
87
85
  end
88
86
  end
89
87
  end
90
- end
88
+ end
@@ -1,3 +1,3 @@
1
1
  module Bacchus
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1,38 @@
1
+ require 'rack/mock'
2
+ require_relative '../../../lib/bacchus/rack/beta_site'
3
+
4
+ describe Rack::BetaSite do
5
+ let(:app) { lambda { |env| [200, { 'Content-Type' => 'text/plain' }, ['hello']] } }
6
+ let(:middleware) { Rack::BetaSite.new(app, except: ["/", %r{^/open/?$}], access_through: ["/form"], server: "localhost")}
7
+
8
+ def response_for(sample_app, path)
9
+ sample_app.call(Rack::MockRequest.env_for(path))
10
+ end
11
+
12
+ context "given a locked site" do
13
+ it "should block access to all pages" do
14
+ sample_app = middleware
15
+ status, * = response_for(middleware, "/page1")
16
+ status.should == 500
17
+ end
18
+
19
+ it "should support string exceptions" do
20
+ sample_app = middleware
21
+ status, * = response_for(middleware, "/")
22
+ status.should == 200
23
+ end
24
+
25
+ it "should support regex exceptions" do
26
+ sample_app = middleware
27
+ status, * = response_for(middleware, "/open")
28
+ status.should == 200
29
+ end
30
+
31
+ it "should render access form script instead of the body" do
32
+ sample_app = middleware
33
+ status, _, body = response_for(middleware, "/form")
34
+ status.should == 200
35
+ body.first.should include("<script")
36
+ end
37
+ end
38
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bacchus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -23,7 +23,7 @@ files:
23
23
  - lib/bacchus/rack/beta_site.rb
24
24
  - lib/bacchus/version.rb
25
25
  - lib/bacchus.rb
26
- - spec/lib/bacchus/rack/beta_site.rb
26
+ - spec/bacchus/rack/beta_site_spec.rb
27
27
  homepage: ''
28
28
  licenses: []
29
29
  post_install_message:
@@ -49,4 +49,4 @@ signing_key:
49
49
  specification_version: 3
50
50
  summary: Beta invites for Rack-based apps.
51
51
  test_files:
52
- - spec/lib/bacchus/rack/beta_site.rb
52
+ - spec/bacchus/rack/beta_site_spec.rb
@@ -1,87 +0,0 @@
1
- require 'letters'
2
- module Rack
3
- class BetaSite
4
- attr_reader :options
5
-
6
- def initialize(app, options = {})
7
- @app = app
8
- @excluded_routes = options[:except] || []
9
- @access_form_routes = options[:access_through] || []
10
- @server = options[:server] or raise "Need to specify the address of the server."
11
- end
12
-
13
- def call(env)
14
- # if (Request.new(env).path == "/live_demo/unlock")
15
- # msg = "Site has been unlocked"
16
- # response = Response.new("Site has been unlocked", 200, {'Content-Type' => 'text/html'})
17
- # response.set_cookie("unlocked", "true")
18
- # return response.to_a
19
- # end
20
-
21
- if access_form_route?(env)
22
- render_access_form
23
- elsif access_denied?(env)
24
- render_locked
25
- else
26
- @app.call(env)
27
- end
28
- end
29
-
30
- private
31
-
32
- def access_form_route?(env) # TODO: Duplication -- access_denied? & excluded_route?
33
- request = Request.new(env)
34
- @access_form_routes.index {|route| matching_path?(request, route)}
35
- end
36
-
37
- def render_access_form
38
- body = <<-EOS
39
- <html>
40
- <head>
41
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
42
- <script src="#{path_to('bacchus.js')}" type="text/javascript"></script>
43
- </head>
44
- <body>
45
- </body>
46
- </html>
47
- EOS
48
- [200, {'Content-Type' => 'text/html', 'Content-Length' => body.length.to_s}, [body]]
49
- end
50
-
51
- ########################################################
52
-
53
- def path_to(file)
54
- ::File.join(@server, file)
55
- end
56
-
57
- ########################################################
58
-
59
- def render_locked
60
- msg = "Site is locked"
61
- [500, {'Content-Type' => 'text/html', 'Content-Length' => msg.length.to_s}, [msg]]
62
- end
63
-
64
- def access_denied?(env)
65
- request = Request.new(env)
66
- locked?(request) && !excluded_route?(request)
67
- end
68
-
69
- def locked?(request)
70
- request.cookies["unlocked"].nil?
71
- end
72
-
73
- def excluded_route?(request)
74
- @excluded_routes.index {|route| matching_path?(request, route)}
75
- end
76
-
77
- def matching_path?(request, path)
78
- if path.is_a?(String)
79
- request.fullpath == path
80
- elsif path.is_a?(Regexp)
81
- request.fullpath.match(path)
82
- else
83
- raise "Unsupported route type; only String or Regex paths are accepted"
84
- end
85
- end
86
- end
87
- end