controller_resources 0.0.6 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 1813e22346789043275cf46f1a6e554396d2b454
4
- data.tar.gz: 4e2e6622d6c1cb24d07fac8ef82c6c373130ddac
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MmIwYmQ2N2FjMzJiMTdkMjkzY2EzNjhmMWZiOWUxMDhiYmRlYjJkNA==
5
+ data.tar.gz: !binary |-
6
+ NGI1YzdhZjA0OGZkYzc4ZjM0NmRkNDg3MmEzNDI0M2JiNWY0MjE4MQ==
5
7
  SHA512:
6
- metadata.gz: bb9fa68805b138bf1c1b7d0efaaa134e46c5b75864e8822b99ebe97f14027a011c1acf287a763b00c0dc843cf85f981e4fbd61c44c2aec2bb0ea5c6659fa6ff3
7
- data.tar.gz: 42cc040fb18486bf5df3a8b4b7cfc02ffb2267bc9fd6cab812de9f240d3538ea32f609c7f3c1cf5a996744c85a7729b3e367de89c7860e4e4f5e63f0aba5ace0
8
+ metadata.gz: !binary |-
9
+ NmQyOWQyMzJmYzEzM2QwZGQ0NDBiNWE1ZTIyZjEyNDMwYzI5NDkwMjBhYTc5
10
+ ZjA4YWI2YzUzN2U4NjhiNGNlZmQxZDE3MjIzZDk2ZjQwYjUwYTk2ZTQ1MDEw
11
+ NzU1MWUwZjhmNzk2NDlkZTBkNTlhOTk1ZTZiZTdmZGY3YTIyMGY=
12
+ data.tar.gz: !binary |-
13
+ NjQxOGY3Nzc4YzJmZTBmNWYxZWQyZjNiYzBlZDAwNzg2NzYxMWEwNWYzMGI1
14
+ ZWYzYzY3ZjAzNWFjMGYwMWMxMWI4MTE3ZWViYmFkYWIwZjRjNDM2YzFjMDMz
15
+ MzAwNzY5ZTgxYTRhNmVhOGRmMmJkMzdhYmY4OGRlN2FlZWViYTA=
data/.gitignore CHANGED
@@ -16,3 +16,5 @@ mkmf.log
16
16
  /vendor
17
17
  .env
18
18
  tags
19
+ /spec/dummy/tmp
20
+ /spec/examples.txt
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/.rubocop.yml CHANGED
@@ -3,5 +3,15 @@ AllCops:
3
3
  - spec/dummy/**/*
4
4
  - vendor/**/*
5
5
  - bin/**/*
6
+ - spec/support/**/*
7
+
6
8
  Metrics/AbcSize:
7
9
  Max: 32
10
+
11
+ Style/Documentation:
12
+ Exclude:
13
+ - lib/controller_resources/version.rb
14
+ - spec/**/*.rb
15
+
16
+ Style/StringLiterals:
17
+ Enabled: false
data/.travis.yml CHANGED
@@ -1,11 +1,11 @@
1
1
  language: ruby
2
+ sudo: false
3
+ cache: bundler
2
4
  rvm:
3
5
  - 2.0.0
4
6
  - 2.1.6
5
7
  - 2.2.2
6
8
  cache: bundle
7
- before_script: ./bin/rake db
8
- script: ./bin/rake test
9
9
  addons:
10
10
  codeclimate:
11
11
  repo_token:
data/README.md CHANGED
@@ -3,10 +3,11 @@
3
3
  [![Build Status](https://travis-ci.org/tubbo/controller_resources.svg)](https://travis-ci.org/tubbo/controller_resources)
4
4
  [![Code Climate](https://codeclimate.com/github/tubbo/controller_resources/badges/gpa.svg)](https://codeclimate.com/github/tubbo/controller_resources)
5
5
  [![Test Coverage](https://codeclimate.com/github/tubbo/controller_resources/badges/coverage.svg)](https://codeclimate.com/github/tubbo/controller_resources)
6
+ [![Inline docs](http://inch-ci.org/github/tubbo/controller_resources.svg?branch=master)](http://inch-ci.org/github/tubbo/controller_resources)
6
7
 
7
8
  A Rails engine providing a common DSL for fetching model resources in
8
9
  the controller and view layers. It leverages
9
- [DecentExposure][de],[StrongParameters][sp] and assumes an
10
+ [DecentExposure][de], [StrongParameters][sp] and assumes an
10
11
  [ActiveRecord][ar]-like DSL for querying model objects.
11
12
  ControllerResources does not assume any part of your stack, instead
12
13
  providing generic tools and extensions to ActionController which allow
@@ -14,8 +15,7 @@ you to use the fetched resources however you want.
14
15
 
15
16
  ```ruby
16
17
  resource :post do
17
- search :title, :category
18
- modify :title, :category, :body, :is_published
18
+ permit :title, :category, :body, :is_published
19
19
  end
20
20
  ```
21
21
 
@@ -31,10 +31,8 @@ methods are passed down to DecentExposure:
31
31
 
32
32
  ```ruby
33
33
  expose :post, param: :post_id
34
- resource :comment do
35
- ancestor :post
36
- search :body
37
- modify :body, :user_id
34
+ resource :comment, ancestor: :post do
35
+ permit :body, :user_id
38
36
  end
39
37
  ```
40
38
 
@@ -46,22 +44,10 @@ Add this line to your application's Gemfile:
46
44
  gem 'controller_resources'
47
45
  ```
48
46
 
49
- Then run the following generator to generate the locale files for
50
- Responders:
47
+ And run
51
48
 
52
49
  ```bash
53
- $ rails generate responders:install
54
- ```
55
-
56
- This will also insert Responders into your `ApplicationController`. If
57
- you do not want this, be sure to include the following code in a base
58
- controller somewhere...this is the best way for `ControllerResources` to
59
- function:
60
-
61
- ```ruby
62
- class ApplicationController < ActionController::Base
63
- responders :flash, :http_cache
64
- end
50
+ $ bundle install
65
51
  ```
66
52
 
67
53
  ## Usage
@@ -73,8 +59,7 @@ methods!
73
59
  ```ruby
74
60
  class ItemsController < ApplicationController
75
61
  resource :item do
76
- search :name, :user
77
- modify :name, :user, :is_private
62
+ permit :name, :user, :is_private
78
63
  end
79
64
 
80
65
  def index
@@ -99,50 +84,16 @@ access the model objects passed down into the template:
99
84
  <%= user.name %>
100
85
  ```
101
86
 
102
- <<<<<<< HEAD
103
- You can also use some given helpers for establishing authorization logic
104
- in ApplicationController. Since `ControllerResources` is included by
105
- default, you can use the given `current_resource` method to tell Pundit
106
- (for example) which policy to use in authorization:
107
-
108
- ```ruby
109
- class ApplicationController < ActionController::Base
110
- before_action :authenticate_user!
111
- before_action :authorize_user!
112
-
113
- rescue_from Pundit::NotAuthorizedError, with: :forbidden
114
-
115
- def forbidden
116
- render 'forbidden', status: :forbidden
117
- end
118
-
119
- private
120
-
121
- def authorize_user!
122
- authorize current_user, current_resource, current_action
123
- end
124
-
125
- def current_action
126
- :"#{action_name}?"
127
- end
128
- end
129
- ```
130
-
131
- This `current_resource` method is populated by the given configured
132
- Resource object, which will attempt to classify its `model_name` and
133
- provide a class constant that can be used here. In the
134
- `PostsController#show` action, for example, that call to `authorize` would be
135
- partially expanded like this:
136
-
137
- ```ruby
138
- authorize current_user, Post, :show?
139
- ```
87
+ ### Meta-Programming Capabilities
140
88
 
141
- (where `current_user` is the authenticated User found by Devise)
89
+ Since `ControllerResources` is programatically defining exposure methods
90
+ for you, it also keeps references to the name given in the `resource`
91
+ block so you can infer what kind of object you are using in your view.
92
+ The `model_name`, `collection_name` and `model` / `collection` methods
93
+ are included as helpers along with the rest of the exposure methods in
94
+ your view as well as the controller.
142
95
 
143
- While ControllerResources doesn't provide authorization or
144
- authentication helpers, it does provide the necessary methods to aid
145
- your own authorization and authentication frameworks in their job.
96
+ For more, consult the [RDoc Documentation][rdoc]
146
97
 
147
98
  ## Contributing
148
99
 
@@ -150,16 +101,51 @@ Contributions to `ControllerResources` may be made using GitHub pull
150
101
  requests. You must include accompanying tests, and all tests must pass
151
102
  for any contribution to be considered.
152
103
 
104
+ **NOTE:** Running tests requires that you have [PhantomJS][pjs]
105
+ installed.
106
+
153
107
  To run tests:
154
108
 
155
109
  ```bash
156
- $ rake test
110
+ $ bin/rake test
157
111
  ```
158
112
 
159
113
  This will also use Rubocop to lint-check your code so it adheres to our
160
114
  style guide.
161
115
 
116
+ ## Releasing
117
+
118
+ All acceptance testing and final RubyGems.org releasing is performed
119
+ automatically by [Travis CI][ci]. When a new gem version needs to be
120
+ released, one with push access to the repo can update the version by
121
+ running the following Rake task, which will tag the latest version of
122
+ the gem and push all commits to GitHub, where it will be picked up by
123
+ Travis and auto-deployed to [RubyGems][rg]:
124
+
125
+ ```bash
126
+ $ bin/rake release
127
+ ```
128
+
129
+ ## Compatibility
130
+
131
+ ControllerResources adheres to the [Semantic Versioning][sv]
132
+ standard for publishing new versions of the library. Bug fixes will be
133
+ pushed in patch updates, while new features that maintain compatibility
134
+ will be available in minor updates. Major updates are reserved for new
135
+ features that break existing compatibility.
136
+
137
+ ### Ruby version support
138
+
139
+ This project will be tested against any version of MRI that is currently
140
+ being supported by the Ruby core team. It is not currently being tested
141
+ on JRuby or Rubinius. For more information on what versions of Ruby
142
+ we're testing, see [Travis CI][ci].
143
+
162
144
  [de]: https://github.com/hashrocket/decent_exposure
163
- [rp]: https://github.com/plataformatec/responders
164
145
  [sp]: https://github.com/rails/strong_parameters
165
-
146
+ [ci]: https://travis-ci.org
147
+ [rg]: https://rubygems.org
148
+ [pjs]: http://phantomjs.org
149
+ [sv]: http://semver.org
150
+ [rdoc]: http://rubydoc.info/github/tubbo/controller_resources/master
151
+ [ar]: http://guides.rubyonrails.org/active_record_basics.html
data/Rakefile CHANGED
@@ -5,12 +5,25 @@ require 'rubocop/rake_task'
5
5
 
6
6
  desc 'Set up the test database for the dummy app'
7
7
  task :db do
8
- sh 'cd spec/dummy && bundle exec rake db:create db:migrate'
8
+ sh 'cd spec/dummy && bundle exec rake db:setup'
9
9
  end
10
10
 
11
- RSpec::Core::RakeTask.new :spec
11
+ # Run RSpec code examples
12
+ RSpec::Core::RakeTask.new :test
12
13
 
14
+ # Run RuboCop lint checks
13
15
  RuboCop::RakeTask.new :lint
14
16
 
15
- desc 'Run Rubocop lint checks and RSpec code examples'
16
- task test: %w(lint spec)
17
+ # Clear out default Bundler release task
18
+ Rake::Task['release'].clear
19
+
20
+ desc "Release version to RubyGems via Travis-CI"
21
+ task release: %w(
22
+ build release:guard_clean release:source_control_push
23
+ ) do
24
+ Bundler.ui.confirm 'Please wait for Travis-CI to build the gem'
25
+ Bundler.ui.confirm 'https://travis-ci.org/tubbo/controller_resources'
26
+ end
27
+
28
+ # CI task
29
+ task default: %i(lint db test build)
data/bin/coderay ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'coderay' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('coderay', 'coderay')
data/bin/pry ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'pry' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('pry', 'pry')
data/bin/yard ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'yard' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('yard', 'yard')
data/bin/yardoc ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'yardoc' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('yard', 'yardoc')
data/bin/yri ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'yri' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('yard', 'yri')
@@ -4,36 +4,39 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'controller_resources/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = 'controller_resources'
8
- spec.version = ControllerResources::VERSION
9
- spec.authors = ['Tom Scott']
10
- spec.email = ['tubbo@psychedeli.ca']
11
- spec.summary = '
7
+ spec.name = 'controller_resources'
8
+ spec.version = ControllerResources::VERSION
9
+ spec.authors = ['Tom Scott']
10
+ spec.email = ['tubbo@psychedeli.ca']
11
+ spec.summary = '
12
12
  A controller DSL for Rails that allows you to easily and quickly
13
13
  define both singular and collection model resources that can be
14
14
  operated on within the controller.
15
15
  '.strip
16
- spec.description = spec.summary + '
16
+ spec.description = spec.summary + '
17
17
  Attempts to DRY up most of the boilerplate code at the top of
18
18
  each controller used to set up its state.
19
19
  '.strip
20
- spec.homepage = 'https://github.com/tubbo/controller_resources'
21
- spec.license = 'MIT'
20
+ spec.homepage = 'https://github.com/tubbo/controller_resources'
21
+ spec.license = 'MIT'
22
22
 
23
- spec.files = `git ls-files -z`.split("\x0")
24
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
- spec.test_files = spec.files.grep(%r{^|spec/})
23
+ spec.files = `git ls-files -z`.split("\x0")
24
+ # spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
+ spec.test_files = spec.files.grep(%r{^|spec/})
26
26
  spec.require_paths = ['lib']
27
27
 
28
28
  spec.add_development_dependency 'bundler'
29
29
  spec.add_development_dependency 'rake'
30
30
  spec.add_development_dependency 'rspec', '~> 3'
31
+ spec.add_development_dependency 'rspec-rails'
31
32
  spec.add_development_dependency 'pg'
32
- spec.add_development_dependency 'generator_spec'
33
33
  spec.add_development_dependency 'codeclimate-test-reporter'
34
34
  spec.add_development_dependency 'rubocop'
35
+ spec.add_development_dependency 'capybara'
36
+ spec.add_development_dependency 'database_cleaner'
37
+ spec.add_development_dependency 'pry'
38
+ spec.add_development_dependency 'yard'
35
39
 
36
40
  spec.add_dependency 'rails'
37
41
  spec.add_dependency 'decent_exposure'
38
- spec.add_dependency 'responders'
39
42
  end
@@ -1,11 +1,12 @@
1
1
  module ControllerResources
2
- # Extensions for the including Rails app.
2
+ # Extends +ActionController::Base+ in the host app to include the
3
+ # +ControllerResources+ mixin by default.
3
4
  class Engine < ::Rails::Engine
4
5
  isolate_namespace ControllerResources
5
6
 
6
- config.to_prepare do
7
- ApplicationController.class_eval do
8
- include ControllerResources::Extension
7
+ ActiveSupport.on_load :action_controller do
8
+ ActionController::Base.class_eval do
9
+ include ControllerResources
9
10
  end
10
11
  end
11
12
  end
@@ -0,0 +1,12 @@
1
+ module ControllerResources
2
+ # Thrown when a +resource+ has not been defined, yet the controller
3
+ # attempts to call the generated +edit_params+ method.
4
+ class NotDefinedError < RuntimeError
5
+ def initialize(*args)
6
+ super
7
+ @message = %(
8
+ Call to #edit_params failed: Resource not defined.
9
+ )
10
+ end
11
+ end
12
+ end
@@ -1,4 +1,4 @@
1
- # :nodoc:
2
1
  module ControllerResources
3
- VERSION = '0.0.6'
2
+ # Current version of this gem.
3
+ VERSION = '0.1.0'
4
4
  end
@@ -1,16 +1,151 @@
1
1
  require 'active_support/all'
2
2
  require 'decent_exposure'
3
- require 'responders'
4
3
  require 'controller_resources/version'
4
+ require 'controller_resources/engine'
5
+ require 'controller_resources/not_defined_error'
5
6
 
6
- # A controller DSL for Rails that allows you to easily and quickly define
7
+ # The DSL mixin for ActionController that allows you to quickly define
7
8
  # both singular and collection model resources that can be operated on
8
9
  # within the controller. Attempts to DRY up most of the boilerplate code
9
10
  # at the top of each controller used to set up its state.
11
+ #
12
+ # @author Tom Scott
13
+ #
14
+ # @example
15
+ #
16
+ # class PostsController < ApplicationController
17
+ # resource :post do
18
+ # permit :title, :body, :author_id
19
+ # end
20
+ #
21
+ # def index
22
+ # respond_with posts
23
+ # end
24
+ #
25
+ # def show
26
+ # respond_with post
27
+ # end
28
+ #
29
+ # def create
30
+ # post.save
31
+ # respond_with post
32
+ # end
33
+ #
10
34
  module ControllerResources
11
- extend ActiveSupport::Autoload
35
+ extend ActiveSupport::Concern
12
36
 
13
- autoload :Engine
14
- autoload :Resource
15
- autoload :Extension
37
+ included do
38
+ # Given name of the model as supplied to the +resource+ directive.
39
+ #
40
+ # @attr_accessor [Symbol]
41
+ cattr_accessor :model_name
42
+
43
+ # Collection name computed by pluralizing the given model name.
44
+ #
45
+ # @attr_accessor [Symbol]
46
+ cattr_accessor :collection_name
47
+
48
+ # A collection of arguments supplied to +StrongParameters#permit+
49
+ # that is used in the +edit_params+ method to easily define
50
+ # attributes which need to be whitelisted for mass assignment.
51
+ #
52
+ # @attr_accessor [Array]
53
+ cattr_accessor :params_to_permit
54
+
55
+ # Configures +DecentExposure+ to use the +edit_params+ method
56
+ # defined by this module as the default attributes for mass
57
+ # assignment.
58
+ decent_configuration do
59
+ attributes :edit_params
60
+ end
61
+
62
+ helper_method :model, :collection
63
+ end
64
+
65
+ class_methods do
66
+ # Define resources based on the given name and decent exposure
67
+ # options. Uses +DecentExposure+ to define said resources and
68
+ # stores the generated names in the controller's configuration.
69
+ #
70
+ # If a block is given, one can also call additional DSL methods
71
+ # like +permit+.
72
+ #
73
+ # @param [Symbol] name - the name of the model exposure, which
74
+ # is pluralized to compute the name of the collection exposure and
75
+ # stored to +model_name+.
76
+ # @param [Hash] options - passed wholesale to both +expose+ methods,
77
+ # and useful for defining custom +DecentExposure+ options.
78
+ # @param &block - a block that is yielded after +expose+ methods are
79
+ # defined, and used primarily to set permittable params.
80
+ # @example
81
+ #
82
+ # expose :author
83
+ # resource :post, ancestor: :author
84
+ #
85
+ def resource(name, options = {})
86
+ self.model_name = name
87
+ self.collection_name = "#{name}".pluralize.to_sym
88
+
89
+ expose model_name, options
90
+ expose collection_name, options
91
+
92
+ yield if block_given?
93
+ end
94
+
95
+ private
96
+
97
+ # Permit the given attributes in +StrongParameters+.
98
+ #
99
+ # @example
100
+ #
101
+ # expose :author
102
+ # resource :post, ancestor: :author do
103
+ # permit :title, :body
104
+ # end
105
+ #
106
+ def permit(*permittable_params)
107
+ self.params_to_permit = permittable_params
108
+ end
109
+ end
110
+
111
+ # Reader method for the defined singular resource.
112
+ #
113
+ # @return [Object] the model object or +nil+ if no resource has been
114
+ # defined.
115
+ def model
116
+ return unless resource?
117
+ public_send model_name
118
+ end
119
+
120
+ # Reader method for the defined collection resource.
121
+ #
122
+ # @return [Object] the collection of models or +nil+ if no resource
123
+ # has been defined.
124
+ def collection
125
+ return unless resource?
126
+ public_send collection_name
127
+ end
128
+
129
+ # White-listed parameters for mass assignment as defined by
130
+ # +StrongParameters+. Throws a +ControllerResources::NotDefinedError+
131
+ # if no +resource+ block has been defined on this controller.
132
+ #
133
+ # @return [ActionController::Parameters] the +StrongParameters+ hash.
134
+ # @raise [ControllerResources::NotDefinedError] when no +resource+ has
135
+ # been defined on this controller.
136
+ def edit_params
137
+ fail NotDefinedError unless resource?
138
+ return params.require(model_name).permit! unless params_to_permit.present?
139
+ params.require(model_name).permit(*params_to_permit)
140
+ end
141
+
142
+ private
143
+
144
+ # Whether a +resource+ directive has been invoked on this controller.
145
+ #
146
+ # @private
147
+ # @return [Boolean]
148
+ def resource?
149
+ model_name.present?
150
+ end
16
151
  end
@@ -1,17 +1,16 @@
1
1
  class PostsController < ApplicationController
2
2
  resource :post do
3
- search :title
4
- modify :title, :body
3
+ permit :title, :body
5
4
  end
6
5
 
7
6
  # GET /posts
8
7
  def index
9
- respond_with posts
8
+ render :index
10
9
  end
11
10
 
12
11
  # GET /posts/1
13
12
  def show
14
- respond_with post
13
+ render :show
15
14
  end
16
15
 
17
16
  # GET /posts/new
@@ -27,18 +26,18 @@ class PostsController < ApplicationController
27
26
  # POST /posts
28
27
  def create
29
28
  post.save
30
- respond_with post
29
+ redirect_to post
31
30
  end
32
31
 
33
32
  # PATCH/PUT /posts/1
34
33
  def update
35
34
  post.update(edit_params)
36
- respond_with post
35
+ redirect_to post
37
36
  end
38
37
 
39
38
  # DELETE /posts/1
40
39
  def destroy
41
40
  post.destroy
42
- respond_with post
41
+ redirect_to posts_path
43
42
  end
44
43
  end