action_interceptor 0.0.3 → 0.1.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 31e855e9e9869ca8e5d409a7016be38bd81f560a
4
- data.tar.gz: 5ee08d985554e577b922afd1b5d53db794782794
3
+ metadata.gz: 329436e7ee0f1ad6c5ce0f1891cfe6c8ae7dbe76
4
+ data.tar.gz: 6f0b1b10adf2484ec53cb35245bcc02bf5d3e6d6
5
5
  SHA512:
6
- metadata.gz: 08c253742ec490768f8cac0f082f2692a8b025153a2768c8a2832c64874be5755c1a45ad0542ebc6f7cf226278665131e487d2c714ca3d5043e47bc442c099f2
7
- data.tar.gz: fe5c9c8635292d2db08b17837f82743d6d14eb645707c702fb26119daf1424a22afaa2e10377f1350f07ac416922ae04465aaf8e82206dd7195a8035708b6029
6
+ metadata.gz: 1cbcf3eae9d54f8b3fd53e8b72708312af35a89336951246f933ecda523ef265525ce655825cecd83a150ed173fe6007936a29d5db834ca9ada91157afede299
7
+ data.tar.gz: d7bfd96282fe7e6b6b79b723250b694e7fca4f45bb623079824b53d582323dbc339dc4dbc15b68a72656356a6a357ff4c04220098b1915a13a3341668d335f41
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  Action Interceptor is a Rails engine that makes it easy to have controllers intercept
6
6
  actions from other controllers, have users perform a task and then return them to where
7
- they were before.
7
+ they were when the interception happened.
8
8
 
9
9
  This can be used, for example, for registration, authentication, signing terms of use, etc.
10
10
 
@@ -22,43 +22,132 @@ And then execute:
22
22
  $ bundle install
23
23
  ```
24
24
 
25
+ Finally, run the following rake task to add
26
+ Action Interceptor's initializer to your application:
27
+
28
+ ```sh
29
+ $ rake action_interceptor:install
30
+ ```
31
+
25
32
  ## Usage
26
-
27
- Add the following line to controllers that should
28
- intercept actions from other controllers:
33
+
34
+ Interceptors are blocks of code that are declared in Action Interceptor's
35
+ initializer. They execute in the context of your controllers and work
36
+ very much like before_filters.
37
+
38
+ For example, the following interceptor could be used to ensure that users
39
+ have filled out a registration form:
29
40
 
30
41
  ```rb
31
- interceptor
42
+ interceptor :registration do
43
+
44
+ return if current_user.try(:is_registered?)
45
+
46
+ respond_to do |format|
47
+ format.html { redirect_to register_path }
48
+ format.json { head(:forbidden) }
49
+ end
50
+
51
+ end
32
52
  ```
33
-
34
- Then declare the controllers and actions to be intercepted:
53
+
54
+ What makes interceptors different from before_filters is that they will
55
+ save the user's current url before redirecting. This is done through
56
+ signed url params by default, falling back to session variables if those
57
+ params are absent or invalid.
58
+
59
+ Once declared, you can use an interceptor in any controller. For example,
60
+ you might want to ensure that all logged in users have to complete
61
+ a form before using your site. In that case, you could add the following
62
+ to your `ApplicationController`:
35
63
 
36
64
  ```rb
37
- intercept ApplicationController, only: :index do
38
- # Block that returns:
39
- # The redirection path if the action is to be intercepted
40
- # Nil/false otherwise
65
+ class ApplicationController < ActionController::Base
66
+
67
+ interceptor :registration
68
+
41
69
  end
42
70
  ```
43
71
 
44
- When users complete the task, use the following method to
45
- redirect them back to where they were before:
72
+ The controllers your interceptors redirect to should
73
+ call the `acts_as_interceptor` method:
74
+
75
+ ```rb
76
+ class RegistrationsController < ApplicationController
77
+
78
+ acts_as_interceptor
79
+
80
+ skip_interceptor :registration, only: [:new, :create]
81
+
82
+ end
83
+ ```
84
+
85
+ As shown above, interceptions work like before_filters and
86
+ can be skipped using the skip_interceptor method.
87
+
88
+ The `acts_as_interceptor` method will ensure the following:
89
+
90
+ - The `url_options` method for that controller will be overriden, causing all
91
+ links and redirects for the controller and associated views to include
92
+ the signed return url. This can be skipped by calling `acts_as_interceptor`
93
+ like this: `acts_as_interceptor override_url_options: false`. In that case,
94
+ you are responsible for passing the `intercepted_url_hash` to any internal
95
+ links and redirects.
96
+
97
+ - The following convenience methods will be added to the controller:
98
+ `redirect_back(options = {})`, `intercepted_url`, `intercepted_url=`,
99
+ `intercepted_url_hash`, `without_interceptor(&block)`,
100
+ `url_options_without_interceptor` and `url_options_with_interceptor`.
101
+ These methods have the following behavior:
102
+
103
+ - redirect_back(options = {}) redirects the user back to where the
104
+ interception occurred, passing the given options to the redirect method.
105
+
106
+ - `intercepted_url` returns the intercepted url. Can be used in views to make
107
+ links that redirect the user back to where the interception happened.
108
+
109
+ - `intercepted_url=` can be used to overwrite the intercepted url, if needed.
110
+
111
+ - `intercepted_url_hash` returns a hash containing the `interceptor_url_key`
112
+ and the signed `intercepted_url`.
113
+
114
+ - `without_interceptor(&block)` executes a block with the old url options.
115
+
116
+ - `url_options_without_interceptor` returns the old url options.
117
+
118
+ - `url_options_with_interceptor` returns the old url options merged with
119
+ the `intercepted_url_hash`. Can be used even if you specified
120
+ `override_url_options: false`.
121
+
122
+ When users complete the given task, use the following method to
123
+ redirect them back to where the interception occurred:
46
124
 
47
125
  ```rb
48
126
  redirect_back
49
127
  ```
50
128
 
51
- Alternatively, you can use `redirect_url` in views:
129
+ Alternatively, you can use `intercepted_url` in views:
52
130
 
53
131
  ```erb
54
- <%= link_to 'Back', redirect_url %>
132
+ <%= link_to 'Back', intercepted_url %>
55
133
  ```
56
134
 
135
+ Finally, just by including the gem in your app, the following convenience
136
+ methods will be added to all controllers: `current_url`, `current_url_hash`,
137
+ `current_page?(url)` and `with_interceptor(&block)`.
138
+
139
+ - `current_url` returns the current url.
140
+ - `current_url_hash` returns a hash containing the `intercepted_url_key` and the
141
+ `current_url`, signed and encrypted.
142
+ - `current_page?(url)` returns true iif the given url is the `current_url`.
143
+ - `with_interceptor(&block)` executes the given block as if it was an
144
+ interceptor for the current controller.
145
+
57
146
  ## Contributing
58
147
 
59
148
  1. Fork it
60
149
  2. Create your feature branch (`git checkout -b my-new-feature`)
61
- 3. Write tests for your feature
150
+ 3. Write specs for your feature
62
151
  4. Implement your new feature
63
152
  5. Test your feature (`rake`)
64
153
  6. Commit your changes (`git commit -am 'Added some feature'`)
@@ -87,7 +176,8 @@ Alternatively, you can use `redirect_url` in views:
87
176
 
88
177
  ## Testing
89
178
 
90
- To run all existing tests for action_interceptor, simply execute the following from the main folder:
179
+ To run all existing tests for Action Interceptor,
180
+ simply execute the following from the main folder:
91
181
 
92
182
  ```sh
93
183
  $ rake
data/Rakefile CHANGED
@@ -12,7 +12,7 @@ Bundler::GemHelper.install_tasks
12
12
 
13
13
  require 'rake/testtask'
14
14
 
15
- Rake::TestTask.new(:spec => 'app:db:test:prepare') do |t|
15
+ Rake::TestTask.new(:spec) do |t|
16
16
  t.libs << 'lib'
17
17
  t.libs << 'spec'
18
18
  t.pattern = 'spec/**/*_spec.rb'
@@ -1,11 +1,14 @@
1
1
  require 'action_interceptor/engine'
2
2
 
3
3
  module ActionInterceptor
4
- mattr_reader :intercepted_url_key
5
-
6
4
  def self.intercepted_url_key(key = nil)
7
- return @intercepted_url_key || :r unless key
8
- @intercepted_url_key = key
5
+ @intercepted_url_key = key unless key.blank?
6
+ @intercepted_url_key || :r
7
+ end
8
+
9
+ def self.override_url_options(bool = nil)
10
+ @override_url_options = bool unless bool.nil?
11
+ @override_url_options.nil? ? true : @override_url_options
9
12
  end
10
13
 
11
14
  def self.interceptors
@@ -11,8 +11,6 @@ module ActionInterceptor
11
11
  base.extend(ClassMethods)
12
12
  end
13
13
 
14
- protected
15
-
16
14
  def current_url
17
15
  "#{request.protocol}#{request.host_with_port}#{request.fullpath}"
18
16
  end
@@ -22,7 +20,7 @@ module ActionInterceptor
22
20
  url.blank? || URI(url).path == request.path
23
21
  end
24
22
 
25
- def encrypted_url_hash
23
+ def current_url_hash
26
24
  return @current_url_hash if @current_url_hash
27
25
 
28
26
  key = ActionInterceptor.intercepted_url_key
@@ -33,14 +31,15 @@ module ActionInterceptor
33
31
  @current_url_hash = {key => url}
34
32
  end
35
33
 
36
- def interception_exec(&block)
37
- @original_default_url_options ||= default_url_options
34
+ # Executes the given block as if it was an interceptor
35
+ def with_interceptor(&block)
36
+ @previous_default_url_options ||= default_url_options
38
37
 
39
38
  begin
40
39
  # Send the referer with intercepted requests
41
40
  # So we don't rely on the user's browser to do it for us
42
- self.default_url_options = @original_default_url_options
43
- .merge(encrypted_url_hash)
41
+ self.default_url_options = @previous_default_url_options
42
+ .merge(current_url_hash)
44
43
 
45
44
  # Execute the block as if it was defined in this controller
46
45
  instance_exec &block
@@ -49,13 +48,13 @@ module ActionInterceptor
49
48
  # and return the given value
50
49
  e.exit_value
51
50
  ensure
52
- self.default_url_options = @original_default_url_options
51
+ self.default_url_options = @previous_default_url_options
53
52
  end
54
53
  end
55
54
 
56
55
  module ClassMethods
57
56
 
58
- def interception(*interceptor_names, &block)
57
+ def interceptor(*interceptor_names, &block)
59
58
  options = interceptor_names.extract_options!
60
59
  filter_name = options.delete(:filter_name)
61
60
  fnames = interceptor_names.collect do |iname|
@@ -66,7 +65,7 @@ module ActionInterceptor
66
65
  blk = block || ActionInterceptor.interceptors[iname]
67
66
  raise UndefinedInterceptor, iname unless blk
68
67
 
69
- interception_exec &blk
68
+ with_interceptor &blk
70
69
  end
71
70
 
72
71
  fname
@@ -75,7 +74,7 @@ module ActionInterceptor
75
74
  before_filter *fnames, options
76
75
  end
77
76
 
78
- def skip_interception(*interceptor_names)
77
+ def skip_interceptor(*interceptor_names)
79
78
  options = interceptor_names.extract_options!
80
79
  filter_name = options.delete(:filter_name)
81
80
  fnames = interceptor_names.collect do |iname|
@@ -85,36 +84,19 @@ module ActionInterceptor
85
84
  skip_before_filter *fnames, options
86
85
  end
87
86
 
88
- def acts_as_interceptor
87
+ def acts_as_interceptor(options = {})
89
88
  return if is_interceptor
90
89
  self.is_interceptor = true
91
90
 
92
- class_eval do
93
-
94
- helper_method :intercepted_url
95
-
96
- alias_method :url_options_without_interceptor, :url_options
97
-
98
- def url_options
99
- return @interceptor_url_options if @interceptor_url_options
100
-
101
- url = Encryptor.encrypt_and_sign(intercepted_url)
102
- key = ActionInterceptor.intercepted_url_key
103
- @interceptor_url_options = {key => url}.merge(super)
104
- end
91
+ @override_url_options = options[:override_url_options].nil? ? \
92
+ ActionInterceptor.override_url_options : \
93
+ options[:override_url_options]
105
94
 
106
- def without_interceptor_url_options(&block)
107
- url_options_with_interceptor = url_options
95
+ class_eval do
108
96
 
109
- begin
110
- @interceptor_url_options = url_options_without_interceptor
111
- yield block
112
- ensure
113
- @interceptor_url_options = url_options_with_interceptor
114
- end
115
- end
97
+ attr_writer :intercepted_url
116
98
 
117
- alias_method :without_interceptor, :without_interceptor_url_options
99
+ helper_method :intercepted_url
118
100
 
119
101
  def intercepted_url
120
102
  return @intercepted_url if @intercepted_url
@@ -123,7 +105,7 @@ module ActionInterceptor
123
105
  begin
124
106
  # URL params are the most reliable, as they preserve
125
107
  # state even if the user presses the back button
126
- # Prevent Open Redirect vulnerability
108
+ # We need to sign them to prevent the Open Redirect vulnerability
127
109
  @intercepted_url = Encryptor.decrypt_and_verify(params[key])
128
110
  rescue ActiveSupport::MessageVerifier::InvalidSignature
129
111
  # If the param is not available, use our best guess
@@ -137,11 +119,43 @@ module ActionInterceptor
137
119
  @intercepted_url
138
120
  end
139
121
 
122
+ def intercepted_url_hash
123
+ return @intercepted_url_hash if @intercepted_url_hash
124
+ url = Encryptor.encrypt_and_sign(intercepted_url)
125
+ key = ActionInterceptor.intercepted_url_key
126
+
127
+ @intercepted_url_hash = {key => url}
128
+ end
129
+
130
+ alias_method :url_options_without_interceptor, :url_options
131
+
132
+ def url_options_with_interceptor
133
+ return @url_options_with_interceptor \
134
+ if @url_options_with_interceptor
135
+
136
+ @url_options_with_interceptor = intercepted_url_hash.merge(
137
+ url_options_without_interceptor)
138
+ end
139
+
140
+ alias_method :url_options, :url_options_with_interceptor \
141
+ if @override_url_options.nil? || @override_url_options
142
+
143
+ def without_interceptor(&block)
144
+ previous_url_options = url_options_with_interceptor
145
+
146
+ begin
147
+ @url_options_with_interceptor = url_options_without_interceptor
148
+ yield block
149
+ ensure
150
+ @url_options_with_interceptor = previous_url_options
151
+ end
152
+ end
153
+
140
154
  def redirect_back(options = {})
141
155
  url = intercepted_url
142
156
 
143
157
  # Disable the return_to param
144
- without_interceptor_url_options do
158
+ without_interceptor do
145
159
  # Convert '/' back to root_url
146
160
  # Also, prevent self redirects
147
161
  url = root_url if url == '/' || current_page?(url)
@@ -1,4 +1,4 @@
1
1
  module ActionInterceptor
2
- VERSION = '0.0.3'
2
+ VERSION = '0.1.0'
3
3
  end
4
4
 
@@ -1,3 +1,7 @@
1
1
  class ApplicationController < ActionController::Base
2
2
  protect_from_forgery
3
+
4
+ cattr_accessor :is_registered
5
+
6
+ interceptor :registration, :my_interceptor
3
7
  end
@@ -0,0 +1,10 @@
1
+ class HomeController < ActionController::Base
2
+ skip_interceptor :registration, only: :index
3
+
4
+ def index
5
+ end
6
+
7
+ def api
8
+ end
9
+ end
10
+
@@ -0,0 +1,14 @@
1
+ class RegistrationsController < ActionController::Base
2
+ acts_as_interceptor
3
+
4
+ skip_interceptor :registration
5
+
6
+ def new
7
+ redirect_to registration_register_path
8
+ end
9
+
10
+ def register
11
+ redirect_back notice: 'Registration successful!'
12
+ end
13
+ end
14
+
@@ -22,4 +22,3 @@ module Dummy
22
22
  config.i18n.enforce_available_locales = true
23
23
  end
24
24
  end
25
-
@@ -0,0 +1,11 @@
1
+ ActionInterceptor.configure do
2
+ intercepted_url_key :dummy_key
3
+
4
+ override_url_options true
5
+
6
+ interceptor :registration do
7
+ end
8
+
9
+ interceptor :my_interceptor do
10
+ end
11
+ end
@@ -1,2 +1,9 @@
1
1
  Rails.application.routes.draw do
2
+ resource :registration, :only => [:new] do
3
+ get :register
4
+ end
5
+
6
+ get 'home/api'
7
+
8
+ root to: 'home#index'
2
9
  end
Binary file
File without changes
@@ -0,0 +1,57 @@
1
+ require 'spec_helper'
2
+
3
+ module ActionInterceptor
4
+ describe Controller do
5
+
6
+ it 'modifies ActionController::Base' do
7
+ expect(ActionController::Base).to respond_to(:is_interceptor)
8
+ expect(ActionController::Base).to respond_to(:interceptor_filters)
9
+ expect(ActionController::Base.is_interceptor).to be_false
10
+ expect(ActionController::Base.interceptor_filters).to be_a(Hash)
11
+
12
+ expect(ActionController::Base).to respond_to(:interceptor)
13
+ expect(ActionController::Base).to respond_to(:skip_interceptor)
14
+ expect(ActionController::Base).to respond_to(:acts_as_interceptor)
15
+
16
+ expect(ActionController::Base.new).to respond_to(:current_page?)
17
+ expect(ActionController::Base.new).to respond_to(:current_url)
18
+ expect(ActionController::Base.new).to respond_to(:current_url_hash)
19
+ expect(ActionController::Base.new).to respond_to(:with_interceptor)
20
+ end
21
+
22
+ it 'modifies classes that act_as_interceptor' do
23
+ expect(RegistrationsController.is_interceptor).to be_true
24
+
25
+ expect(RegistrationsController.new).to respond_to(:intercepted_url)
26
+ expect(RegistrationsController.new).to respond_to(:intercepted_url=)
27
+ expect(RegistrationsController.new).to respond_to(:intercepted_url_hash)
28
+ expect(RegistrationsController.new).to(
29
+ respond_to(:url_options_without_interceptor))
30
+ expect(RegistrationsController.new).to(
31
+ respond_to(:url_options_with_interceptor))
32
+ expect(RegistrationsController.new).to respond_to(:without_interceptor)
33
+ expect(RegistrationsController.new).to respond_to(:redirect_back)
34
+ end
35
+
36
+ it 'registers and skips before_filters' do
37
+ filters = RegistrationsController.new._process_action_callbacks
38
+ .collect{|c| c.filter}
39
+ expect(filters).not_to include(:my_interceptor)
40
+
41
+ RegistrationsController.interceptor :my_interceptor
42
+ filters = RegistrationsController.new._process_action_callbacks
43
+ .collect{|c| c.filter}
44
+ expect(filters).to include(:my_interceptor)
45
+
46
+ filters = ApplicationController.new._process_action_callbacks
47
+ .collect{|c| c.filter}
48
+ expect(filters).to include(:my_interceptor)
49
+
50
+ ApplicationController.skip_interceptor :my_interceptor
51
+ filters = ApplicationController.new._process_action_callbacks
52
+ .collect{|c| c.filter}
53
+ expect(filters).not_to include(:my_interceptor)
54
+ end
55
+
56
+ end
57
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ module ActionInterceptor
4
+ describe Encryptor do
5
+
6
+ it 'encrypts and decrypts strings' do
7
+ my_string = 'My string'
8
+ encrypted_string = Encryptor.encrypt_and_sign(my_string)
9
+ expect(encrypted_string).not_to include(my_string)
10
+
11
+ decrypted_string = Encryptor.decrypt_and_verify(encrypted_string)
12
+ expect(decrypted_string).to eq(my_string)
13
+
14
+ expect{Encryptor.decrypt_and_verify(my_string)}.to(
15
+ raise_error(ActiveSupport::MessageVerifier::InvalidSignature))
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActionInterceptor do
4
+ it 'must be configurable' do
5
+ expect(ActionInterceptor.intercepted_url_key).to eq(:dummy_key)
6
+ expect(ActionInterceptor.override_url_options).to be_true
7
+ expect(ActionInterceptor.interceptors.keys).to include(:registration)
8
+
9
+ my_block = lambda { 'my_block' }
10
+
11
+ ActionInterceptor.configure do
12
+ intercepted_url_key :my_key
13
+ override_url_options false
14
+ interceptor :my_name, &my_block
15
+ end
16
+
17
+ expect(ActionInterceptor.intercepted_url_key).to eq(:my_key)
18
+ expect(ActionInterceptor.override_url_options).to be_false
19
+ expect(ActionInterceptor.interceptors).to include({:my_name => my_block})
20
+ end
21
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: action_interceptor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dante Soares
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-16 00:00:00.000000000 Z
11
+ date: 2014-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3.1'
27
- - !ruby/object:Gem::Dependency
28
- name: public_suffix
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: 0.9.1
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: 0.9.1
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: sqlite3
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -66,8 +52,9 @@ dependencies:
66
52
  - - ">="
67
53
  - !ruby/object:Gem::Version
68
54
  version: '0'
69
- description: Facilitates redirection to and from controllers that require users to
70
- perform some task, then redirect them back to where they were.
55
+ description: Action Interceptor provides controllers that require users to perform
56
+ some task, then redirect them back to the page they were on. Useful for authentication,
57
+ registration, signing terms of use, etc.
71
58
  email:
72
59
  - dms3@rice.edu
73
60
  executables: []
@@ -89,8 +76,9 @@ files:
89
76
  - spec/dummy/app/assets/javascripts/application.js
90
77
  - spec/dummy/app/assets/stylesheets/application.css
91
78
  - spec/dummy/app/controllers/application_controller.rb
79
+ - spec/dummy/app/controllers/home_controller.rb
80
+ - spec/dummy/app/controllers/registrations_controller.rb
92
81
  - spec/dummy/app/helpers/application_helper.rb
93
- - spec/dummy/app/views/layouts/application.html.erb
94
82
  - spec/dummy/bin/bundle
95
83
  - spec/dummy/bin/rails
96
84
  - spec/dummy/bin/rake
@@ -102,6 +90,7 @@ files:
102
90
  - spec/dummy/config/environments/development.rb
103
91
  - spec/dummy/config/environments/production.rb
104
92
  - spec/dummy/config/environments/test.rb
93
+ - spec/dummy/config/initializers/action_interceptor.rb
105
94
  - spec/dummy/config/initializers/backtrace_silencers.rb
106
95
  - spec/dummy/config/initializers/filter_parameter_logging.rb
107
96
  - spec/dummy/config/initializers/inflections.rb
@@ -111,13 +100,16 @@ files:
111
100
  - spec/dummy/config/initializers/wrap_parameters.rb
112
101
  - spec/dummy/config/locales/en.yml
113
102
  - spec/dummy/config/routes.rb
114
- - spec/dummy/db/development.sqlite3
115
103
  - spec/dummy/db/test.sqlite3
116
104
  - spec/dummy/log/development.log
105
+ - spec/dummy/log/test.log
117
106
  - spec/dummy/public/404.html
118
107
  - spec/dummy/public/422.html
119
108
  - spec/dummy/public/500.html
120
109
  - spec/dummy/public/favicon.ico
110
+ - spec/lib/action_interceptor/controller_spec.rb
111
+ - spec/lib/action_interceptor/encryptor_spec.rb
112
+ - spec/lib/action_interceptor_spec.rb
121
113
  - spec/spec_helper.rb
122
114
  homepage: http://github.com/openstax/action_interceptor
123
115
  licenses:
@@ -147,8 +139,9 @@ test_files:
147
139
  - spec/dummy/app/assets/javascripts/application.js
148
140
  - spec/dummy/app/assets/stylesheets/application.css
149
141
  - spec/dummy/app/controllers/application_controller.rb
142
+ - spec/dummy/app/controllers/home_controller.rb
143
+ - spec/dummy/app/controllers/registrations_controller.rb
150
144
  - spec/dummy/app/helpers/application_helper.rb
151
- - spec/dummy/app/views/layouts/application.html.erb
152
145
  - spec/dummy/bin/bundle
153
146
  - spec/dummy/bin/rails
154
147
  - spec/dummy/bin/rake
@@ -159,6 +152,7 @@ test_files:
159
152
  - spec/dummy/config/environments/development.rb
160
153
  - spec/dummy/config/environments/production.rb
161
154
  - spec/dummy/config/environments/test.rb
155
+ - spec/dummy/config/initializers/action_interceptor.rb
162
156
  - spec/dummy/config/initializers/backtrace_silencers.rb
163
157
  - spec/dummy/config/initializers/filter_parameter_logging.rb
164
158
  - spec/dummy/config/initializers/inflections.rb
@@ -169,13 +163,16 @@ test_files:
169
163
  - spec/dummy/config/locales/en.yml
170
164
  - spec/dummy/config/routes.rb
171
165
  - spec/dummy/config.ru
172
- - spec/dummy/db/development.sqlite3
173
166
  - spec/dummy/db/test.sqlite3
174
167
  - spec/dummy/log/development.log
168
+ - spec/dummy/log/test.log
175
169
  - spec/dummy/public/404.html
176
170
  - spec/dummy/public/422.html
177
171
  - spec/dummy/public/500.html
178
172
  - spec/dummy/public/favicon.ico
179
173
  - spec/dummy/Rakefile
180
174
  - spec/dummy/README.md
175
+ - spec/lib/action_interceptor/controller_spec.rb
176
+ - spec/lib/action_interceptor/encryptor_spec.rb
177
+ - spec/lib/action_interceptor_spec.rb
181
178
  - spec/spec_helper.rb
@@ -1,14 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>Dummy</title>
5
- <%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
6
- <%= javascript_include_tag "application", "data-turbolinks-track" => true %>
7
- <%= csrf_meta_tags %>
8
- </head>
9
- <body>
10
-
11
- <%= yield %>
12
-
13
- </body>
14
- </html>
Binary file