Class: DoorCode::RestrictedAccess
- Inherits:
-
Object
- Object
- DoorCode::RestrictedAccess
- Defined in:
- lib/door_code.rb
Constant Summary collapse
- MIN_LENGTH =
3- MAX_LENGTH =
6- DEFAULT_CODE =
'12345'
Instance Method Summary collapse
- #build_rack_objects ⇒ Object
-
#call(env) ⇒ Object
Where the magic happens…
- #code_length ⇒ Object
-
#confirm! ⇒ Object
Set a cookie for the correct value (server value may change) Also set up Success message.
-
#confirmed? ⇒ Boolean
Is there a valid code for the area set in the cookie.
- #cookie_name ⇒ Object
-
#initialize(app, options = {}) ⇒ RestrictedAccess
constructor
A new instance of RestrictedAccess.
-
#parse_code(code) ⇒ Object
Ensures the code is good & valid, otherwise reverts to the default.
-
#post? ⇒ Boolean
Is the request verb POST?.
-
#request ⇒ Object
Rack::Request wrapper around @env.
-
#response ⇒ Object
Rack::Response object with which to respond with.
-
#supplied_code ⇒ Object
Code supplied from user.
-
#unconfirm! ⇒ Object
Delete and invalid cookies Also set up Failure message.
-
#valid_code?(code) ⇒ Boolean
Is the supplied code vaid for the current area.
-
#validate_code! ⇒ Object
Check if the supplied code is valid; Either sets a confirming cookie and Success message or delete any door code cookie and set Failure message.
-
#xhr? ⇒ Boolean
Was the request called via AJAX?.
Constructor Details
#initialize(app, options = {}) ⇒ RestrictedAccess
Returns a new instance of RestrictedAccess.
9 10 11 12 |
# File 'lib/door_code.rb', line 9 def initialize app, ={} @app = app @code = parse_code([:code]) end |
Instance Method Details
#build_rack_objects ⇒ Object
93 94 95 96 |
# File 'lib/door_code.rb', line 93 def build_rack_objects @request = Rack::Request.new(@env) @response = Rack::Response.new end |
#call(env) ⇒ Object
Where the magic happens…
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/door_code.rb', line 99 def call env @env = env build_rack_objects return @app.call(env) if confirmed? p 'Loading DoorCode::RestrictedAccess' if post? response['Content-Type'] = 'text/javascript' if xhr? validate_code! # Validate the user's code and set a cookie if valid else index = ::File.read(::File.dirname(__FILE__) + '/index.html') index_with_code_length = index.gsub(/\{\{codeLength\}\}/, code_length) response.write index_with_code_length end # Render response return response.finish end |
#code_length ⇒ Object
89 90 91 |
# File 'lib/door_code.rb', line 89 def code_length @code.length.to_s end |
#confirm! ⇒ Object
Set a cookie for the correct value (server value may change) Also set up Success message
77 78 79 80 |
# File 'lib/door_code.rb', line 77 def confirm! xhr? ? response.write('success') : response.redirect('/') response.(, {:value => supplied_code, :path => "/"}) end |
#confirmed? ⇒ Boolean
Is there a valid code for the area set in the cookie
71 72 73 |
# File 'lib/door_code.rb', line 71 def confirmed? request.[] && valid_code?(request.[]) end |
#cookie_name ⇒ Object
29 30 31 |
# File 'lib/door_code.rb', line 29 def 'door_code' end |
#parse_code(code) ⇒ Object
Ensures the code is good & valid, otherwise reverts to the default
16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/door_code.rb', line 16 def parse_code code parsed_code = code.gsub(/\D/, '') if parsed_code == code # Means the supplied code contains only digits, which is good # Just need to check that the code length is valid parsed_code = DEFAULT_CODE if code.length < MIN_LENGTH || code.length > MAX_LENGTH else # Means the supplied code contained non-digits, so revert to default parsed_code = DEFAULT_CODE end parsed_code end |
#post? ⇒ Boolean
Is the request verb POST?
44 45 46 |
# File 'lib/door_code.rb', line 44 def post? request.request_method == 'POST' end |
#request ⇒ Object
Rack::Request wrapper around @env
34 35 36 |
# File 'lib/door_code.rb', line 34 def request @request ||= Rack::Request.new(@env) end |
#response ⇒ Object
Rack::Response object with which to respond with
39 40 41 |
# File 'lib/door_code.rb', line 39 def response @response ||= Rack::Response.new end |
#supplied_code ⇒ Object
Code supplied from user
54 55 56 |
# File 'lib/door_code.rb', line 54 def supplied_code request.params['code'] end |
#unconfirm! ⇒ Object
Delete and invalid cookies Also set up Failure message
84 85 86 87 |
# File 'lib/door_code.rb', line 84 def unconfirm! xhr? ? response.write('failure') : response.redirect('/') response.(supplied_code) end |
#valid_code?(code) ⇒ Boolean
Is the supplied code vaid for the current area
59 60 61 |
# File 'lib/door_code.rb', line 59 def valid_code? code @code == code end |
#validate_code! ⇒ Object
Check if the supplied code is valid; Either sets a confirming cookie and Success message or delete any door code cookie and set Failure message
66 67 68 |
# File 'lib/door_code.rb', line 66 def validate_code! valid_code?(supplied_code) ? confirm! : unconfirm! end |
#xhr? ⇒ Boolean
Was the request called via AJAX?
49 50 51 |
# File 'lib/door_code.rb', line 49 def xhr? @env["HTTP_X_REQUESTED_WITH"] == "XMLHttpRequest" end |