before_actions 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +106 -0
  3. data/Rakefile +13 -19
  4. data/app/controllers/before_actions/foo_controller.rb +8 -0
  5. data/lib/before_actions.rb +7 -1
  6. data/lib/before_actions/controller.rb +29 -20
  7. data/lib/before_actions/engine.rb +7 -0
  8. data/lib/before_actions/version.rb +1 -1
  9. data/spec/controllers/admin_foos_controller_spec.rb +78 -0
  10. data/spec/controllers/foos_controller_spec.rb +139 -0
  11. data/{test → spec}/dummy/README.rdoc +0 -0
  12. data/{test → spec}/dummy/Rakefile +0 -0
  13. data/{test → spec}/dummy/app/assets/javascripts/application.js +0 -3
  14. data/{test → spec}/dummy/app/assets/stylesheets/application.css +0 -0
  15. data/spec/dummy/app/controllers/admin_foos_controller.rb +53 -0
  16. data/{test → spec}/dummy/app/controllers/application_controller.rb +0 -0
  17. data/spec/dummy/app/controllers/foos_controller.rb +92 -0
  18. data/{test → spec}/dummy/app/helpers/application_helper.rb +0 -0
  19. data/spec/dummy/app/models/admin_foo.rb +2 -0
  20. data/spec/dummy/app/models/foo.rb +3 -0
  21. data/spec/dummy/app/views/admin_foos/_form.html.erb +21 -0
  22. data/spec/dummy/app/views/admin_foos/edit.html.erb +6 -0
  23. data/spec/dummy/app/views/admin_foos/index.html.erb +25 -0
  24. data/spec/dummy/app/views/admin_foos/new.html.erb +5 -0
  25. data/spec/dummy/app/views/admin_foos/show.html.erb +9 -0
  26. data/spec/dummy/app/views/foos/_form.html.erb +21 -0
  27. data/spec/dummy/app/views/foos/edit.html.erb +6 -0
  28. data/spec/dummy/app/views/foos/index.html.erb +25 -0
  29. data/spec/dummy/app/views/foos/new.html.erb +5 -0
  30. data/spec/dummy/app/views/foos/show.html.erb +9 -0
  31. data/{test → spec}/dummy/app/views/layouts/application.html.erb +0 -0
  32. data/{test → spec}/dummy/bin/bundle +0 -0
  33. data/{test → spec}/dummy/bin/rails +0 -0
  34. data/{test → spec}/dummy/bin/rake +0 -0
  35. data/{test → spec}/dummy/config.ru +0 -0
  36. data/{test → spec}/dummy/config/application.rb +8 -0
  37. data/{test → spec}/dummy/config/boot.rb +0 -0
  38. data/{test → spec}/dummy/config/database.yml +0 -0
  39. data/{test → spec}/dummy/config/environment.rb +0 -0
  40. data/{test → spec}/dummy/config/environments/development.rb +0 -0
  41. data/{test → spec}/dummy/config/environments/production.rb +0 -0
  42. data/{test → spec}/dummy/config/environments/test.rb +0 -0
  43. data/{test → spec}/dummy/config/initializers/backtrace_silencers.rb +0 -0
  44. data/{test → spec}/dummy/config/initializers/filter_parameter_logging.rb +0 -0
  45. data/{test → spec}/dummy/config/initializers/inflections.rb +0 -0
  46. data/{test → spec}/dummy/config/initializers/mime_types.rb +0 -0
  47. data/{test → spec}/dummy/config/initializers/secret_token.rb +0 -0
  48. data/spec/dummy/config/initializers/session_store.rb +3 -0
  49. data/{test → spec}/dummy/config/initializers/wrap_parameters.rb +0 -0
  50. data/{test → spec}/dummy/config/locales/en.yml +0 -0
  51. data/{test → spec}/dummy/config/routes.rb +4 -0
  52. data/spec/dummy/db/development.sqlite3 +0 -0
  53. data/spec/dummy/db/migrate/20140912040816_create_foos.rb +9 -0
  54. data/spec/dummy/db/migrate/20140912042735_create_admin_foos.rb +9 -0
  55. data/spec/dummy/db/schema.rb +28 -0
  56. data/spec/dummy/db/test.sqlite3 +0 -0
  57. data/spec/dummy/lib/templates/rails/scaffold_controller/controller.rb +97 -0
  58. data/spec/dummy/log/development.log +15 -0
  59. data/spec/dummy/log/test.log +1590 -0
  60. data/{test → spec}/dummy/public/404.html +0 -0
  61. data/{test → spec}/dummy/public/422.html +0 -0
  62. data/{test → spec}/dummy/public/500.html +0 -0
  63. data/{test → spec}/dummy/public/favicon.ico +0 -0
  64. data/spec/rails_helper.rb +54 -0
  65. data/spec/spec_helper.rb +85 -0
  66. metadata +168 -74
  67. data/README.rdoc +0 -60
  68. data/lib/before_actions/command.rb +0 -15
  69. data/test/before_actions_test.rb +0 -7
  70. data/test/dummy/config/initializers/session_store.rb +0 -3
  71. data/test/integration/navigation_test.rb +0 -10
  72. data/test/test_helper.rb +0 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ea9d707f1d88575ff7beb6ee79a347f5284bf5b6
4
- data.tar.gz: 914c0a5932b5b0081d41001e45e0904e0911bc9c
3
+ metadata.gz: 2e4ee37335a868dce4d6989fa8bcf2aa51211305
4
+ data.tar.gz: 04d348d389f0bf9b38a85f6a1c6280a4b28988dd
5
5
  SHA512:
6
- metadata.gz: cd0cc56ec57da9eb2aedc71bed330b08ac9f17f249adc0b681ba85151e17f1598540373ded5ace62ff9aef8e6d8aaef433ec42c6563976ccff31d422c85759c7
7
- data.tar.gz: fefc09e1cb6d87cb7d855f08f57275b656e76ddb97ffe3932a604719d9cc147fd93cb67dee8cea715d31cdc60067912d84c332d09b4108c18571bc27531123cc
6
+ metadata.gz: c34525ee42fbf171c2b3e390f05a4a7e39643b2e76980ce1fe1303c40ae33905fa2c9f33fc70546c12f036f4f301bf884370448ea9f87480d98e224d20a68d1e
7
+ data.tar.gz: 7a5453eaddb502f232981e1c56022fab78c2b3ca0b591537b099a014af8b0eba8a61cdb64db95315eccec84bd45b542fa6e120225a2168e21617966a82831a9f
@@ -0,0 +1,106 @@
1
+ # Before Actions
2
+
3
+ Organize your controllers by grouping your before and after filters.
4
+
5
+ ## Status
6
+
7
+ [![Gem Version](https://badge.fury.io/rb/before_actions.png)](http://badge.fury.io/rb/before_actions)
8
+ [![Dependency Status](https://gemnasium.com/before-actions-gem/before_actions.svg)](https://gemnasium.com/before-actions-gem/before_actions)
9
+ [![Inline docs](http://inch-ci.org/github/before-actions-gem/before_actions.png)](http://inch-ci.org/github/before-actions-gem/before_actions)
10
+ [![Code Climate](https://codeclimate.com/github/before-actions-gem/before_actions.png)](https://codeclimate.com/github/before-actions-gem/before_actions)
11
+ [![Code Climate](https://codeclimate.com/github/before-actions-gem/before_actions/coverage.png)](https://codeclimate.com/github/before-actions-gem/before_actions)
12
+ [![License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](https://github.com/before-actions-gem/before_actions/blob/master/LICENSE.md)
13
+
14
+
15
+ ## References
16
+
17
+ * Home page: https://github.com/before-actions-gem/before_actions
18
+ * API Doc: http://rdoc.info/gems/before_actions
19
+ * Version: https://rubygems.org/gems/before_actions
20
+ * Trello Board: https://trello.com/b/PMRfJAqq/before-actions-gem
21
+
22
+ ## Support
23
+
24
+ * Bugs/Issues: https://github.com/before-actions-gem/before_actions/issues
25
+ * Support: http://stackoverflow.com/questions/tagged/before_actions
26
+ * Support/Chat: [![Gitter chat](https://badges.gitter.im/before-actions-gem/before_actions.png)](https://gitter.im/before-actions-gem/before_actions)
27
+
28
+
29
+ ## Installation
30
+
31
+ Add this line to your application's Gemfile:
32
+
33
+ ```ruby
34
+ gem 'before_actions'
35
+ ```
36
+
37
+ And then execute:
38
+
39
+ ```bash
40
+ bundle
41
+ rails g before_actions:install
42
+ ```
43
+
44
+
45
+
46
+
47
+
48
+ ## Demo
49
+
50
+ Check this gem in use: [app/controllers/contacts_controller.rb](https://github.com/before-actions-gem/before_actions/blob/master/readme_images/contacts_controller.rb)
51
+
52
+ ```ruby
53
+ class ContactsController < ApplicationController
54
+
55
+ # load and authorize resources
56
+ before_actions do
57
+ # all actions
58
+ # actions { }
59
+
60
+ # list actions
61
+ actions(:index) { @contacts = Contact.all }
62
+
63
+ # building actions
64
+ actions(:new) { @contact = Contact.new }
65
+ actions(:create) { @contact = Contact.new(contact_params) }
66
+
67
+ # member actions, will raise a 404 if the model is not found
68
+ actions(:show, :edit, :update, :destroy) { @contact = Contact.find(params[:id]) }
69
+
70
+ # all actions
71
+ # actions { }
72
+ end
73
+
74
+ ...
75
+
76
+ def contact_params
77
+ params.require(:contact).permit(:name)
78
+ end
79
+ end
80
+ ```
81
+
82
+ #### Demo Resource
83
+
84
+ <img src="readme_images/controller.jpg" alt="controller.jpg" />
85
+
86
+ #### Demo Nested Resource
87
+
88
+ <img src="readme_images/nested.png" alt="nested.png" />
89
+
90
+
91
+
92
+
93
+
94
+
95
+
96
+ ## Contributing
97
+
98
+ 1. Fork it ( https://github.com/github.com/before-actions-gem/before_actions/fork )
99
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
100
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
101
+ 4. Push to the branch (`git push origin my-new-feature`)
102
+ 5. Create a new Pull Request
103
+
104
+ ## Versioning
105
+
106
+ __Before Actions__ uses [Semantic Versioning 2.0.0](http://semver.org)
data/Rakefile CHANGED
@@ -1,34 +1,28 @@
1
+ #!/usr/bin/env rake
2
+
1
3
  begin
2
4
  require 'bundler/setup'
3
5
  rescue LoadError
4
6
  puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
7
  end
6
8
 
7
- require 'rdoc/task'
9
+ APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
10
+ load 'rails/tasks/engine.rake'
8
11
 
9
- RDoc::Task.new(:rdoc) do |rdoc|
10
- rdoc.rdoc_dir = 'rdoc'
11
- rdoc.title = 'BeforeActions'
12
- rdoc.options << '--line-numbers'
13
- rdoc.rdoc_files.include('README.rdoc')
14
- rdoc.rdoc_files.include('lib/**/*.rb')
15
- end
12
+ Bundler::GemHelper.install_tasks
16
13
 
17
- APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
18
- load 'rails/tasks/engine.rake'
19
14
 
20
15
 
21
16
 
22
- Bundler::GemHelper.install_tasks
23
17
 
24
- require 'rake/testtask'
18
+ Dir[File.join(File.dirname(__FILE__), 'tasks/**/*.rake')].each {|f| load f }
19
+
20
+ require 'rspec/core'
21
+ require 'rspec/core/rake_task'
22
+ require 'rspec/rails'
25
23
 
26
- Rake::TestTask.new(:test) do |t|
27
- t.libs << 'lib'
28
- t.libs << 'test'
29
- t.pattern = 'test/**/*_test.rb'
30
- t.verbose = false
31
- end
32
24
 
25
+ desc "Run all specs in spec directory (excluding plugin specs)"
26
+ RSpec::Core::RakeTask.new(:spec => 'app:db:test:prepare')
33
27
 
34
- task default: :test
28
+ task :default => :spec
@@ -0,0 +1,8 @@
1
+ require_dependency "before_actions/application_controller"
2
+
3
+ module BeforeActions
4
+ class FooController < ApplicationController
5
+ def bar
6
+ end
7
+ end
8
+ end
@@ -1,6 +1,12 @@
1
1
  require "before_actions/engine"
2
- require "before_actions/command"
3
2
  require "before_actions/controller"
4
3
 
5
4
  module BeforeActions
6
5
  end
6
+
7
+
8
+ if defined? ActionController::Base
9
+ ActionController::Base.class_eval do
10
+ include BeforeActions::Controller
11
+ end
12
+ end
@@ -3,36 +3,45 @@ module BeforeActions
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  module ClassMethods
6
- attr_reader :before_actions_block, :after_actions_block
7
6
  def before_actions(&block)
8
- @before_actions_block = block
9
- before_filter :execute_before_actions
7
+ TheBefore.new(self).instance_eval(&block)
10
8
  end
11
9
  def after_actions(&block)
12
- @after_actions_block = block
13
- after_filter :execute_after_actions
10
+ TheAfter.new(self).instance_eval(&block)
14
11
  end
15
12
  end
16
13
 
17
- def execute_before_actions
18
- block = self.class.before_actions_block
19
- _execute_command(&block)
20
- end
14
+ class TheBefore
15
+
16
+ def initialize(controller)
17
+ @controller = controller
18
+ end
19
+
20
+ def actions(*list, &block)
21
+ if list.empty?
22
+ @controller.before_action(&block)
23
+ else
24
+ @controller.before_action({only: list}, &block)
25
+ end
26
+ end
21
27
 
22
- def execute_after_actions
23
- block = self.class.after_actions_block
24
- _execute_command(&block)
25
28
  end
26
29
 
27
- def _execute_command(&block)
28
- Command.new(self).instance_eval(&block)
30
+ class TheAfter
31
+
32
+ def initialize(controller)
33
+ @controller = controller
34
+ end
35
+
36
+ def actions(*list, &block)
37
+ if list.empty?
38
+ @controller.after_action(&block)
39
+ else
40
+ @controller.after_action({only: list}, &block)
41
+ end
42
+ end
43
+
29
44
  end
30
45
 
31
46
  end
32
47
  end
33
-
34
- if defined? ActionController::Base
35
- ActionController::Base.class_eval do
36
- include BeforeActions::Controller
37
- end
38
- end
@@ -1,5 +1,12 @@
1
1
  module BeforeActions
2
2
  class Engine < ::Rails::Engine
3
3
  isolate_namespace BeforeActions
4
+
5
+ config.generators do |g|
6
+ g.test_framework :rspec, :view_specs => false#, :fixture => false
7
+ # g.fixture_replacement :factory_girl, :dir => 'spec/factories'
8
+ g.assets false
9
+ g.helper false
10
+ end
4
11
  end
5
12
  end
@@ -1,3 +1,3 @@
1
1
  module BeforeActions
2
- VERSION = "1.0.2"
2
+ VERSION = "1.0.3"
3
3
  end
@@ -0,0 +1,78 @@
1
+ require 'rails_helper'
2
+
3
+ RSpec.describe AdminFoosController, :type => :controller do
4
+
5
+ let(:valid_attributes) {
6
+ {bar: 'cool'}
7
+ }
8
+
9
+ let(:invalid_attributes) {
10
+ {bar: ''}
11
+ }
12
+
13
+ let(:valid_session) { {} }
14
+
15
+
16
+
17
+
18
+ describe "read-only" do
19
+ describe "GET index" do
20
+ it "assigns all admin_foos as @admin_foos" do
21
+ admin_foo = AdminFoo.create! valid_attributes
22
+ get :index, {}, valid_session
23
+ expect(assigns(:admin_foos)).to eq([admin_foo])
24
+ end
25
+ end
26
+
27
+ describe "GET show" do
28
+ it "assigns the requested admin_foo as @admin_foo" do
29
+ admin_foo = AdminFoo.create! valid_attributes
30
+ get :show, {:id => admin_foo.to_param}, valid_session
31
+ expect(assigns(:admin_foo)).to eq(admin_foo)
32
+ end
33
+ end
34
+
35
+ after { expect(response).to have_http_status(200) }
36
+ end
37
+
38
+ describe "writing" do
39
+ describe "GET new" do
40
+ it "does not assign @admin_foo" do
41
+ get :new, {}, valid_session
42
+ end
43
+ end
44
+
45
+ describe "GET edit" do
46
+ it "does not assign @admin_foo" do
47
+ admin_foo = AdminFoo.create! valid_attributes
48
+ get :edit, {:id => admin_foo.to_param}, valid_session
49
+ end
50
+ end
51
+
52
+ describe "POST create" do
53
+ it "does not assign @admin_foo" do
54
+ post :create, {:admin_foo => valid_attributes}, valid_session
55
+ end
56
+ end
57
+
58
+ describe "PUT update" do
59
+ it "does not assign @admin_foo" do
60
+ admin_foo = AdminFoo.create! valid_attributes
61
+ put :update, {:id => admin_foo.to_param, :admin_foo => valid_attributes}, valid_session
62
+ end
63
+ end
64
+
65
+ describe "DELETE destroy" do
66
+ it "does not assign @admin_foo" do
67
+ admin_foo = AdminFoo.create! valid_attributes
68
+ delete :destroy, {:id => admin_foo.to_param}, valid_session
69
+ end
70
+ end
71
+
72
+ after do
73
+ expect(assigns(:admin_foo)).to eq(nil)
74
+ expect(response).to have_http_status(401)
75
+ end
76
+ end
77
+
78
+ end
@@ -0,0 +1,139 @@
1
+ require 'rails_helper'
2
+
3
+ RSpec.describe FoosController, :type => :controller do
4
+
5
+ let(:valid_attributes) {
6
+ {bar: 'cool'}
7
+ }
8
+
9
+ let(:invalid_attributes) {
10
+ {bar: ''}
11
+ }
12
+
13
+ let(:valid_session) { {} }
14
+
15
+
16
+
17
+
18
+
19
+ describe "GET index" do
20
+ it "assigns all foos as @foos" do
21
+ foo = Foo.create! valid_attributes
22
+ get :index, {}, valid_session
23
+ expect(assigns(:foos)).to eq([foo])
24
+ end
25
+ end
26
+
27
+ describe "GET show" do
28
+ it "assigns the requested foo as @foo" do
29
+ foo = Foo.create! valid_attributes
30
+ get :show, {:id => foo.to_param}, valid_session
31
+ expect(assigns(:foo)).to eq(foo)
32
+ end
33
+ end
34
+
35
+ describe "GET new" do
36
+ it "assigns a new foo as @foo" do
37
+ get :new, {}, valid_session
38
+ expect(assigns(:foo)).to be_a_new(Foo)
39
+ end
40
+ end
41
+
42
+ describe "GET edit" do
43
+ it "assigns the requested foo as @foo" do
44
+ foo = Foo.create! valid_attributes
45
+ get :edit, {:id => foo.to_param}, valid_session
46
+ expect(assigns(:foo)).to eq(foo)
47
+ end
48
+ end
49
+
50
+ describe "POST create" do
51
+ describe "with valid params" do
52
+ it "creates a new Foo" do
53
+ expect {
54
+ post :create, {:foo => valid_attributes}, valid_session
55
+ }.to change(Foo, :count).by(1)
56
+ end
57
+
58
+ it "assigns a newly created foo as @foo" do
59
+ post :create, {:foo => valid_attributes}, valid_session
60
+ expect(assigns(:foo)).to be_a(Foo)
61
+ expect(assigns(:foo)).to be_persisted
62
+ end
63
+
64
+ it "redirects to the created foo" do
65
+ post :create, {:foo => valid_attributes}, valid_session
66
+ expect(response).to redirect_to(Foo.last)
67
+ end
68
+ end
69
+
70
+ describe "with invalid params" do
71
+ it "assigns a newly created but unsaved foo as @foo" do
72
+ post :create, {:foo => invalid_attributes}, valid_session
73
+ expect(assigns(:foo)).to be_a_new(Foo)
74
+ end
75
+
76
+ it "re-renders the 'new' template" do
77
+ post :create, {:foo => invalid_attributes}, valid_session
78
+ expect(response).to render_template("new")
79
+ end
80
+ end
81
+ end
82
+
83
+ describe "PUT update" do
84
+ describe "with valid params" do
85
+ let(:new_attributes) {
86
+ {bar: "yay"}
87
+ }
88
+
89
+ it "updates the requested foo" do
90
+ foo = Foo.create! valid_attributes
91
+ put :update, {:id => foo.to_param, :foo => new_attributes}, valid_session
92
+ foo.reload
93
+ expect(assigns(:foo).bar).to eq('yay')
94
+ end
95
+
96
+ it "assigns the requested foo as @foo" do
97
+ foo = Foo.create! valid_attributes
98
+ put :update, {:id => foo.to_param, :foo => valid_attributes}, valid_session
99
+ expect(assigns(:foo)).to eq(foo)
100
+ end
101
+
102
+ it "redirects to the foo" do
103
+ foo = Foo.create! valid_attributes
104
+ put :update, {:id => foo.to_param, :foo => valid_attributes}, valid_session
105
+ expect(response).to redirect_to(foo)
106
+ end
107
+ end
108
+
109
+ describe "with invalid params" do
110
+ it "assigns the foo as @foo" do
111
+ foo = Foo.create! valid_attributes
112
+ put :update, {:id => foo.to_param, :foo => invalid_attributes}, valid_session
113
+ expect(assigns(:foo)).to eq(foo)
114
+ end
115
+
116
+ it "re-renders the 'edit' template" do
117
+ foo = Foo.create! valid_attributes
118
+ put :update, {:id => foo.to_param, :foo => invalid_attributes}, valid_session
119
+ expect(response).to render_template("edit")
120
+ end
121
+ end
122
+ end
123
+
124
+ describe "DELETE destroy" do
125
+ it "destroys the requested foo" do
126
+ foo = Foo.create! valid_attributes
127
+ expect {
128
+ delete :destroy, {:id => foo.to_param}, valid_session
129
+ }.to change(Foo, :count).by(-1)
130
+ end
131
+
132
+ it "redirects to the foos list" do
133
+ foo = Foo.create! valid_attributes
134
+ delete :destroy, {:id => foo.to_param}, valid_session
135
+ expect(response).to redirect_to(foos_url)
136
+ end
137
+ end
138
+
139
+ end