controller_resources 0.1.0 → 0.1.1
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 +8 -8
- data/.codeclimate.yml +10 -0
- data/.travis.yml +20 -10
- data/README.md +1 -2
- data/Rakefile +16 -7
- data/controller_resources.gemspec +14 -12
- data/lib/controller_resources.rb +9 -143
- data/lib/controller_resources/engine.rb +3 -7
- data/lib/controller_resources/extension.rb +147 -0
- data/lib/controller_resources/version.rb +1 -1
- data/spec/dummy/app/models/post.rb +2 -0
- data/spec/dummy/app/views/posts/_form.html.erb +1 -1
- data/spec/features/posts_spec.rb +4 -4
- data/spec/fixtures/posts.yml +3 -0
- data/spec/lib/controller_resources/extension_spec.rb +46 -0
- data/spec/spec_helper.rb +10 -4
- metadata +62 -44
- data/lib/tasks/controller_resources_tasks.rake +0 -4
- data/spec/lib/controller_resources_spec.rb +0 -44
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MDk0NGEzNzUyZTUzYTFlZTBjMzYyOWI3OTcxNDUwOWQyZTkxMDAwNw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YTJjNzA0NTYzMTYzMjJmYmJmODM4MzU0OTVjNWE0MGZlNjZjMWVmNA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MjU3YzgyNjEyOTc5YWUxMjJkOTRlZDBiYzUxM2MzZWYzZjkzZmY2ZjcwM2My
|
10
|
+
OWFlZDQ5ZTZmODcyMTIzMDdlZTVhZGE5MGRkNWRlOWZhYTk4ZjM5ODI5ZDM5
|
11
|
+
MzMzOGUxNGNiMmExNDczODNhMDM1YjdmZTZjMzRhYzQxMDRhOTI=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZGIxZTcyMTY3OWRmMzY3OGRlOWU3ZjdmZmVlZWJlMmM2MjU4YmUyMzhlNTA3
|
14
|
+
YjY4OTA2YTM0ZTI3Mjc2OTc3ZDMyMzBiMzk4ZTJiMDlkODIxY2QxNTNmYTE1
|
15
|
+
MzQxMDdkZjQ2NTgyZWVhNGJmYzI2YThhMWRjYzQ4YThlYzQ5M2M=
|
data/.codeclimate.yml
ADDED
data/.travis.yml
CHANGED
@@ -1,20 +1,30 @@
|
|
1
1
|
language: ruby
|
2
2
|
sudo: false
|
3
|
-
cache:
|
3
|
+
cache: bundle
|
4
4
|
rvm:
|
5
5
|
- 2.0.0
|
6
6
|
- 2.1.6
|
7
7
|
- 2.2.2
|
8
|
-
cache: bundle
|
9
8
|
addons:
|
10
9
|
codeclimate:
|
11
10
|
repo_token:
|
12
|
-
secure:
|
11
|
+
secure: XGGGnkqnHKX54WPKNy6QCVuGLmZbApKLCerCuDAMq+Vgu8pCULJsWOOKUX2o5cAhCze5UC1gMic+05MYmUTrD3n9J+SZhoZi0LKEzZbilsJu02AUZSRfXbp4jtGnApT3IUzfD2tPoL1my00s1PJq5D2eDyjCLGtDiuwk/G8Hdpc=
|
13
12
|
deploy:
|
14
|
-
provider: rubygems
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
13
|
+
- provider: rubygems
|
14
|
+
skip_cleanup: true
|
15
|
+
api_key:
|
16
|
+
secure: Ss+mExNaQHwVyJ0u5cN/BrrVEPZPUdojUxbVj5xa4fjT8OCmaeXY6DM24L1dDpysNLlExKzNVzK6JZNl1KFE03U6Be+S8sr5yJ3hlhPIqShA21+riiC/yeEnNw9oWv+EDDw2CD5TImF3u4YmGJohVdpCGl2U3tlRP5Kchz1vYjw=
|
17
|
+
on:
|
18
|
+
repo: tubbo/controller_resources
|
19
|
+
tags: true
|
20
|
+
rvm: 2.2.2
|
21
|
+
- provider: releases
|
22
|
+
before_deploy: bundle exec rake ci:package
|
23
|
+
skip_cleanup: true
|
24
|
+
api_key:
|
25
|
+
secure: d3ezN68q4noQdeL7cGqHZiHP5Yhn27Vd0CENAPjf8HsatgvRSUne79Xi0RLABI/C5t/zAknhKUix8ecxweH+/fg2uG15wKjEeHf5cXZu5nWi/lZhBU2xnrNuhi/JKdaeC9q4K/1N5qIVSCyNIGZ1E4NGyfn3+6HSlF5KwoTc79Q=
|
26
|
+
file: "pkg/controller_resources.gem"
|
27
|
+
on:
|
28
|
+
repo: tubbo/controller_resources
|
29
|
+
tags: true
|
30
|
+
rvm: 2.2.2
|
data/README.md
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
A Rails engine providing a common DSL for fetching model resources in
|
9
9
|
the controller and view layers. It leverages
|
10
10
|
[DecentExposure][de], [StrongParameters][sp] and assumes an
|
11
|
-
|
11
|
+
ActiveRecord-like DSL for querying model objects.
|
12
12
|
ControllerResources does not assume any part of your stack, instead
|
13
13
|
providing generic tools and extensions to ActionController which allow
|
14
14
|
you to use the fetched resources however you want.
|
@@ -148,4 +148,3 @@ we're testing, see [Travis CI][ci].
|
|
148
148
|
[pjs]: http://phantomjs.org
|
149
149
|
[sv]: http://semver.org
|
150
150
|
[rdoc]: http://rubydoc.info/github/tubbo/controller_resources/master
|
151
|
-
[ar]: http://guides.rubyonrails.org/active_record_basics.html
|
data/Rakefile
CHANGED
@@ -2,6 +2,9 @@ require 'bundler/gem_tasks'
|
|
2
2
|
require 'bundler/setup'
|
3
3
|
require 'rspec/core/rake_task'
|
4
4
|
require 'rubocop/rake_task'
|
5
|
+
require 'controller_resources/version'
|
6
|
+
require 'yard'
|
7
|
+
require 'travis/release/task'
|
5
8
|
|
6
9
|
desc 'Set up the test database for the dummy app'
|
7
10
|
task :db do
|
@@ -17,13 +20,19 @@ RuboCop::RakeTask.new :lint
|
|
17
20
|
# Clear out default Bundler release task
|
18
21
|
Rake::Task['release'].clear
|
19
22
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
Bundler.ui.confirm 'https://travis-ci.org/tubbo/controller_resources'
|
26
|
-
end
|
23
|
+
# Rake tasks for building YARD documentation
|
24
|
+
YARD::Rake::YardocTask.new :doc
|
25
|
+
|
26
|
+
# Release version to RubyGems via Travis-CI
|
27
|
+
Travis::Release::Task.new
|
27
28
|
|
28
29
|
# CI task
|
29
30
|
task default: %i(lint db test build)
|
31
|
+
|
32
|
+
namespace :ci do
|
33
|
+
desc "Rename gem package so it can be released with GitHub."
|
34
|
+
task :package do
|
35
|
+
version = ControllerResources::VERSION
|
36
|
+
sh "cp pkg/controller_resources-#{version}.gem pkg/controller_resources.gem"
|
37
|
+
end
|
38
|
+
end
|
@@ -25,18 +25,20 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.test_files = spec.files.grep(%r{^|spec/})
|
26
26
|
spec.require_paths = ['lib']
|
27
27
|
|
28
|
-
spec.add_development_dependency 'bundler'
|
29
|
-
spec.add_development_dependency 'rake'
|
28
|
+
spec.add_development_dependency 'bundler', '~> 1'
|
29
|
+
spec.add_development_dependency 'rake', '~> 10'
|
30
30
|
spec.add_development_dependency 'rspec', '~> 3'
|
31
|
-
spec.add_development_dependency 'rspec-rails'
|
32
|
-
spec.add_development_dependency 'pg'
|
33
|
-
spec.add_development_dependency 'codeclimate-test-reporter'
|
34
|
-
spec.add_development_dependency 'rubocop'
|
35
|
-
spec.add_development_dependency 'capybara'
|
36
|
-
spec.add_development_dependency '
|
37
|
-
spec.add_development_dependency '
|
38
|
-
spec.add_development_dependency '
|
31
|
+
spec.add_development_dependency 'rspec-rails', '~> 3'
|
32
|
+
spec.add_development_dependency 'pg', '~> 0'
|
33
|
+
spec.add_development_dependency 'codeclimate-test-reporter', '~> 0'
|
34
|
+
spec.add_development_dependency 'rubocop', '~> 0'
|
35
|
+
spec.add_development_dependency 'capybara', '~> 2'
|
36
|
+
# spec.add_development_dependency 'poltergeist', '~> 1.7'
|
37
|
+
spec.add_development_dependency 'database_cleaner', '~> 1'
|
38
|
+
spec.add_development_dependency 'pry', '~> 0'
|
39
|
+
spec.add_development_dependency 'yard', '~> 0'
|
40
|
+
spec.add_development_dependency 'travis-release', '~> 0'
|
39
41
|
|
40
|
-
spec.add_dependency 'rails'
|
41
|
-
spec.add_dependency 'decent_exposure'
|
42
|
+
spec.add_dependency 'rails', '~> 4'
|
43
|
+
spec.add_dependency 'decent_exposure', '~> 2'
|
42
44
|
end
|
data/lib/controller_resources.rb
CHANGED
@@ -1,151 +1,17 @@
|
|
1
1
|
require 'active_support/all'
|
2
2
|
require 'decent_exposure'
|
3
3
|
require 'controller_resources/version'
|
4
|
-
require 'controller_resources/engine'
|
5
|
-
require 'controller_resources/not_defined_error'
|
6
4
|
|
7
|
-
#
|
8
|
-
#
|
9
|
-
# within the controller. Attempts to DRY up most of the boilerplate code
|
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
|
-
#
|
5
|
+
# A mixin for ActionController that helps define singular and collection
|
6
|
+
# model resources with permitted attributes all in one big macro.
|
34
7
|
module ControllerResources
|
35
|
-
extend ActiveSupport::
|
8
|
+
extend ActiveSupport::Autoload
|
36
9
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
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
|
10
|
+
autoload :NotDefinedError
|
11
|
+
autoload :Extension
|
12
|
+
autoload :Engine
|
13
|
+
end
|
143
14
|
|
144
|
-
|
145
|
-
|
146
|
-
# @private
|
147
|
-
# @return [Boolean]
|
148
|
-
def resource?
|
149
|
-
model_name.present?
|
150
|
-
end
|
15
|
+
ActiveSupport.on_load :action_controller do
|
16
|
+
include ControllerResources::Extension
|
151
17
|
end
|
@@ -1,13 +1,9 @@
|
|
1
1
|
module ControllerResources
|
2
|
-
#
|
3
|
-
#
|
2
|
+
# Configures the +ControllerResources+ to be isolated and
|
3
|
+
# eager-loaded.
|
4
4
|
class Engine < ::Rails::Engine
|
5
5
|
isolate_namespace ControllerResources
|
6
6
|
|
7
|
-
|
8
|
-
ActionController::Base.class_eval do
|
9
|
-
include ControllerResources
|
10
|
-
end
|
11
|
-
end
|
7
|
+
config.eager_load_namespaces << ControllerResources
|
12
8
|
end
|
13
9
|
end
|
@@ -0,0 +1,147 @@
|
|
1
|
+
module ControllerResources
|
2
|
+
# The DSL mixin for ActionController that allows you to quickly define
|
3
|
+
# both singular and collection model resources that can be operated on
|
4
|
+
# within the controller. Attempts to DRY up most of the boilerplate code
|
5
|
+
# at the top of each controller used to set up its state.
|
6
|
+
#
|
7
|
+
# @author Tom Scott
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
#
|
11
|
+
# class PostsController < ApplicationController
|
12
|
+
# resource :post do
|
13
|
+
# permit :title, :body, :author_id
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# def index
|
17
|
+
# respond_with posts
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
# def show
|
21
|
+
# respond_with post
|
22
|
+
# end
|
23
|
+
#
|
24
|
+
# def create
|
25
|
+
# post.save
|
26
|
+
# respond_with post
|
27
|
+
# end
|
28
|
+
#
|
29
|
+
module Extension
|
30
|
+
extend ActiveSupport::Concern
|
31
|
+
|
32
|
+
included do
|
33
|
+
# Given name of the model as supplied to the +resource+ directive.
|
34
|
+
#
|
35
|
+
# @attr_accessor [Symbol]
|
36
|
+
cattr_accessor :model_name
|
37
|
+
|
38
|
+
# Collection name computed by pluralizing the given model name.
|
39
|
+
#
|
40
|
+
# @attr_accessor [Symbol]
|
41
|
+
cattr_accessor :collection_name
|
42
|
+
|
43
|
+
# A collection of arguments supplied to +StrongParameters#permit+
|
44
|
+
# that is used in the +edit_params+ method to easily define
|
45
|
+
# attributes which need to be whitelisted for mass assignment.
|
46
|
+
#
|
47
|
+
# @attr_accessor [Array]
|
48
|
+
cattr_accessor :params_to_permit
|
49
|
+
|
50
|
+
# Configures +DecentExposure+ to use the +edit_params+ method
|
51
|
+
# defined by this module as the default attributes for mass
|
52
|
+
# assignment.
|
53
|
+
decent_configuration do
|
54
|
+
attributes :edit_params
|
55
|
+
end
|
56
|
+
|
57
|
+
helper_method :model, :collection
|
58
|
+
end
|
59
|
+
|
60
|
+
class_methods do
|
61
|
+
# Define resources based on the given name and decent exposure
|
62
|
+
# options. Uses +DecentExposure+ to define said resources and
|
63
|
+
# stores the generated names in the controller's configuration.
|
64
|
+
#
|
65
|
+
# If a block is given, one can also call additional DSL methods
|
66
|
+
# like +permit+.
|
67
|
+
#
|
68
|
+
# @param [Symbol] name - the name of the model exposure, which
|
69
|
+
# is pluralized to compute the name of the collection exposure and
|
70
|
+
# stored to +model_name+.
|
71
|
+
# @param [Hash] options - passed wholesale to both +expose+ methods,
|
72
|
+
# and useful for defining custom +DecentExposure+ options.
|
73
|
+
# @param &block - a block that is yielded after +expose+ methods are
|
74
|
+
# defined, and used primarily to set permittable params.
|
75
|
+
# @example
|
76
|
+
#
|
77
|
+
# expose :author
|
78
|
+
# resource :post, ancestor: :author
|
79
|
+
#
|
80
|
+
def resource(name, options = {})
|
81
|
+
self.model_name = name
|
82
|
+
self.collection_name = "#{name}".pluralize.to_sym
|
83
|
+
|
84
|
+
expose model_name, options
|
85
|
+
expose collection_name, options
|
86
|
+
|
87
|
+
yield if block_given?
|
88
|
+
end
|
89
|
+
|
90
|
+
private
|
91
|
+
|
92
|
+
# Permit the given attributes in +StrongParameters+.
|
93
|
+
#
|
94
|
+
# @example
|
95
|
+
#
|
96
|
+
# expose :author
|
97
|
+
# resource :post, ancestor: :author do
|
98
|
+
# permit :title, :body
|
99
|
+
# end
|
100
|
+
#
|
101
|
+
def permit(*permittable_params)
|
102
|
+
self.params_to_permit = permittable_params
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
# Reader method for the defined singular resource.
|
107
|
+
#
|
108
|
+
# @return [Object] the model object or +nil+ if no resource has been
|
109
|
+
# defined.
|
110
|
+
def model
|
111
|
+
return unless resource?
|
112
|
+
public_send model_name
|
113
|
+
end
|
114
|
+
|
115
|
+
# Reader method for the defined collection resource.
|
116
|
+
#
|
117
|
+
# @return [Object] the collection of models or +nil+ if no resource
|
118
|
+
# has been defined.
|
119
|
+
def collection
|
120
|
+
return unless resource?
|
121
|
+
public_send collection_name
|
122
|
+
end
|
123
|
+
|
124
|
+
# White-listed parameters for mass assignment as defined by
|
125
|
+
# +StrongParameters+. Throws a +ControllerResources::NotDefinedError+
|
126
|
+
# if no +resource+ block has been defined on this controller.
|
127
|
+
#
|
128
|
+
# @return [ActionController::Parameters] the +StrongParameters+ hash.
|
129
|
+
# @raise [ControllerResources::NotDefinedError] when no +resource+ has
|
130
|
+
# been defined on this controller.
|
131
|
+
def edit_params
|
132
|
+
fail NotDefinedError unless resource?
|
133
|
+
return params.require(model_name).permit! unless params_to_permit.present?
|
134
|
+
params.require(model_name).permit(*params_to_permit)
|
135
|
+
end
|
136
|
+
|
137
|
+
private
|
138
|
+
|
139
|
+
# Whether a +resource+ directive has been invoked on this controller.
|
140
|
+
#
|
141
|
+
# @private
|
142
|
+
# @return [Boolean]
|
143
|
+
def resource?
|
144
|
+
model_name.present?
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
data/spec/features/posts_spec.rb
CHANGED
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
RSpec.feature 'posts' do
|
4
4
|
let :post do
|
5
|
-
|
5
|
+
posts :post
|
6
6
|
end
|
7
7
|
|
8
8
|
scenario 'listing all posts' do
|
@@ -23,8 +23,8 @@ RSpec.feature 'posts' do
|
|
23
23
|
skip
|
24
24
|
visit new_post_path
|
25
25
|
|
26
|
-
fill_in '
|
27
|
-
fill_in '
|
26
|
+
fill_in 'Title', with: 'new post'
|
27
|
+
fill_in 'Body', with: 'this is a new post'
|
28
28
|
click_button 'Save'
|
29
29
|
|
30
30
|
expect(page).to have_content 'Listing Posts'
|
@@ -34,7 +34,7 @@ RSpec.feature 'posts' do
|
|
34
34
|
skip
|
35
35
|
visit edit_post_path(post)
|
36
36
|
|
37
|
-
fill_in '
|
37
|
+
fill_in 'Title', with: 'new title'
|
38
38
|
click_button 'Save'
|
39
39
|
|
40
40
|
expect(page).to have_content 'new title'
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module ControllerResources
|
4
|
+
RSpec.describe Extension, type: :lib do
|
5
|
+
subject do
|
6
|
+
TestController.new
|
7
|
+
end
|
8
|
+
|
9
|
+
before do
|
10
|
+
subject.class_eval do
|
11
|
+
include Extension
|
12
|
+
|
13
|
+
resource :post do
|
14
|
+
permit :title
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
allow(subject).to receive(:params).and_return(
|
19
|
+
double('Parameters', require: double('Required', permit: true))
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'defines model_name' do
|
24
|
+
expect(subject.model_name).to eq :post
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'defines collection_name' do
|
28
|
+
expect(subject.collection_name).to eq :posts
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'computes model from model_name' do
|
32
|
+
expect(subject).to respond_to :model
|
33
|
+
expect(subject.post).to eq subject.model
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'computes collection from collection_name' do
|
37
|
+
expect(subject).to respond_to :collection
|
38
|
+
expect(subject.collection).to include(subject.model)
|
39
|
+
expect(subject.posts).to eq subject.collection
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'defines edit_params' do
|
43
|
+
expect(subject.edit_params).to be_present
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,25 +1,31 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
2
|
+
require 'codeclimate-test-reporter'
|
3
|
+
|
4
|
+
CodeClimate::TestReporter.start
|
5
|
+
|
1
6
|
ENV['RAILS_ENV'] ||= 'test'
|
2
7
|
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
3
8
|
require 'rspec/rails'
|
4
9
|
require 'capybara/rspec'
|
5
|
-
require '
|
10
|
+
# require 'capybara/poltergeist'
|
6
11
|
require 'database_cleaner'
|
7
12
|
require 'pry'
|
8
13
|
|
9
14
|
# Perform all DB operations within a transaction.
|
10
15
|
DatabaseCleaner.strategy = :transaction
|
11
16
|
|
12
|
-
# Start test coverage reporting
|
13
|
-
CodeClimate::TestReporter.start
|
14
|
-
|
15
17
|
# Clean backtraces
|
16
18
|
Rails.backtrace_cleaner.remove_silencers!
|
17
19
|
|
18
20
|
# Load support files
|
19
21
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
20
22
|
|
23
|
+
# Capybara.javascript_driver = :poltergeist
|
24
|
+
|
21
25
|
# Configure RSpec with `--init`-based options.
|
22
26
|
RSpec.configure do |config|
|
27
|
+
config.fixture_path = File.expand_path('../fixtures', __FILE__)
|
28
|
+
config.global_fixtures = :all
|
23
29
|
config.use_transactional_fixtures = true
|
24
30
|
config.infer_base_class_for_anonymous_controllers = false
|
25
31
|
|
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: controller_resources
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Scott
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-10-
|
11
|
+
date: 2015-10-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '1'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '10'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '10'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -56,142 +56,156 @@ dependencies:
|
|
56
56
|
name: rspec-rails
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '3'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ~>
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '3'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: pg
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ~>
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ~>
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: codeclimate-test-reporter
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ~>
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ~>
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rubocop
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ~>
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ~>
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: capybara
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - ~>
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
117
|
+
version: '2'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - ~>
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
124
|
+
version: '2'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: database_cleaner
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- -
|
129
|
+
- - ~>
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: '
|
131
|
+
version: '1'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- -
|
136
|
+
- - ~>
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: '
|
138
|
+
version: '1'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: pry
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- -
|
143
|
+
- - ~>
|
144
144
|
- !ruby/object:Gem::Version
|
145
145
|
version: '0'
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- -
|
150
|
+
- - ~>
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: yard
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
|
-
- -
|
157
|
+
- - ~>
|
158
158
|
- !ruby/object:Gem::Version
|
159
159
|
version: '0'
|
160
160
|
type: :development
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
|
-
- -
|
164
|
+
- - ~>
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '0'
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
|
-
name:
|
168
|
+
name: travis-release
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
170
170
|
requirements:
|
171
|
-
- -
|
171
|
+
- - ~>
|
172
172
|
- !ruby/object:Gem::Version
|
173
173
|
version: '0'
|
174
|
-
type: :
|
174
|
+
type: :development
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
|
-
- -
|
178
|
+
- - ~>
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: rails
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ~>
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '4'
|
188
|
+
type: :runtime
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ~>
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '4'
|
181
195
|
- !ruby/object:Gem::Dependency
|
182
196
|
name: decent_exposure
|
183
197
|
requirement: !ruby/object:Gem::Requirement
|
184
198
|
requirements:
|
185
|
-
- -
|
199
|
+
- - ~>
|
186
200
|
- !ruby/object:Gem::Version
|
187
|
-
version: '
|
201
|
+
version: '2'
|
188
202
|
type: :runtime
|
189
203
|
prerelease: false
|
190
204
|
version_requirements: !ruby/object:Gem::Requirement
|
191
205
|
requirements:
|
192
|
-
- -
|
206
|
+
- - ~>
|
193
207
|
- !ruby/object:Gem::Version
|
194
|
-
version: '
|
208
|
+
version: '2'
|
195
209
|
description: ! "A controller DSL for Rails that allows you to easily and quickly define
|
196
210
|
both singular and collection model resources that can be operated on within the
|
197
211
|
controller.Attempts to DRY up most of the boilerplate code at the top of\n each
|
@@ -202,6 +216,7 @@ executables: []
|
|
202
216
|
extensions: []
|
203
217
|
extra_rdoc_files: []
|
204
218
|
files:
|
219
|
+
- .codeclimate.yml
|
205
220
|
- .gitignore
|
206
221
|
- .rspec
|
207
222
|
- .rubocop.yml
|
@@ -233,9 +248,9 @@ files:
|
|
233
248
|
- controller_resources.gemspec
|
234
249
|
- lib/controller_resources.rb
|
235
250
|
- lib/controller_resources/engine.rb
|
251
|
+
- lib/controller_resources/extension.rb
|
236
252
|
- lib/controller_resources/not_defined_error.rb
|
237
253
|
- lib/controller_resources/version.rb
|
238
|
-
- lib/tasks/controller_resources_tasks.rake
|
239
254
|
- spec/dummy/README.rdoc
|
240
255
|
- spec/dummy/Rakefile
|
241
256
|
- spec/dummy/app/assets/images/.keep
|
@@ -290,8 +305,9 @@ files:
|
|
290
305
|
- spec/dummy/public/500.html
|
291
306
|
- spec/dummy/public/favicon.ico
|
292
307
|
- spec/features/posts_spec.rb
|
308
|
+
- spec/fixtures/posts.yml
|
293
309
|
- spec/integration/navigation_spec.rb
|
294
|
-
- spec/lib/
|
310
|
+
- spec/lib/controller_resources/extension_spec.rb
|
295
311
|
- spec/spec_helper.rb
|
296
312
|
- spec/support/posts.rb
|
297
313
|
homepage: https://github.com/tubbo/controller_resources
|
@@ -320,6 +336,7 @@ specification_version: 4
|
|
320
336
|
summary: A controller DSL for Rails that allows you to easily and quickly define both
|
321
337
|
singular and collection model resources that can be operated on within the controller.
|
322
338
|
test_files:
|
339
|
+
- .codeclimate.yml
|
323
340
|
- .gitignore
|
324
341
|
- .rspec
|
325
342
|
- .rubocop.yml
|
@@ -351,9 +368,9 @@ test_files:
|
|
351
368
|
- controller_resources.gemspec
|
352
369
|
- lib/controller_resources.rb
|
353
370
|
- lib/controller_resources/engine.rb
|
371
|
+
- lib/controller_resources/extension.rb
|
354
372
|
- lib/controller_resources/not_defined_error.rb
|
355
373
|
- lib/controller_resources/version.rb
|
356
|
-
- lib/tasks/controller_resources_tasks.rake
|
357
374
|
- spec/dummy/README.rdoc
|
358
375
|
- spec/dummy/Rakefile
|
359
376
|
- spec/dummy/app/assets/images/.keep
|
@@ -408,7 +425,8 @@ test_files:
|
|
408
425
|
- spec/dummy/public/500.html
|
409
426
|
- spec/dummy/public/favicon.ico
|
410
427
|
- spec/features/posts_spec.rb
|
428
|
+
- spec/fixtures/posts.yml
|
411
429
|
- spec/integration/navigation_spec.rb
|
412
|
-
- spec/lib/
|
430
|
+
- spec/lib/controller_resources/extension_spec.rb
|
413
431
|
- spec/spec_helper.rb
|
414
432
|
- spec/support/posts.rb
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
RSpec.describe ControllerResources, type: :lib do
|
4
|
-
subject do
|
5
|
-
TestController.new
|
6
|
-
end
|
7
|
-
|
8
|
-
before do
|
9
|
-
subject.class_eval do
|
10
|
-
include ControllerResources
|
11
|
-
|
12
|
-
resource :post do
|
13
|
-
permit :title
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
allow(subject).to receive(:params).and_return(
|
18
|
-
double('Parameters', require: double('Required', permit: true))
|
19
|
-
)
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'defines model_name' do
|
23
|
-
expect(subject.model_name).to eq :post
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'defines collection_name' do
|
27
|
-
expect(subject.collection_name).to eq :posts
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'computes model from model_name' do
|
31
|
-
expect(subject).to respond_to :model
|
32
|
-
expect(subject.post).to eq subject.model
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'computes collection from collection_name' do
|
36
|
-
expect(subject).to respond_to :collection
|
37
|
-
expect(subject.collection).to include(subject.model)
|
38
|
-
expect(subject.posts).to eq subject.collection
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'defines edit_params' do
|
42
|
-
expect(subject.edit_params).to be_present
|
43
|
-
end
|
44
|
-
end
|