resources 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.txt +20 -0
- data/README.md +230 -0
- data/Rakefile +34 -0
- data/lib/generators/rails/USAGE +25 -0
- data/lib/generators/rails/resource_controller_generator.rb +13 -0
- data/lib/generators/rails/templates/controller.rb +9 -0
- data/lib/generators/resources/install/USAGE +10 -0
- data/lib/generators/resources/install/install_generator.rb +8 -0
- data/lib/generators/resources/install/templates/config/initializers/resources.rb +30 -0
- data/lib/loader.rb +6 -0
- data/lib/resources.rb +5 -0
- data/lib/resources/actions.rb +46 -0
- data/lib/resources/configuration.rb +46 -0
- data/lib/resources/controller.rb +25 -0
- data/lib/resources/manager.rb +109 -0
- data/lib/resources/rest_actions.rb +88 -0
- data/lib/resources/routes.rb +47 -0
- data/lib/resources/version.rb +3 -0
- data/lib/tasks/resources_tasks.rake +4 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/bin/setup +29 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +26 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +41 -0
- data/test/dummy/config/environments/production.rb +79 -0
- data/test/dummy/config/environments/test.rb +42 -0
- data/test/dummy/config/initializers/assets.rb +11 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +56 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/resources_test.rb +7 -0
- data/test/test_helper.rb +18 -0
- metadata +139 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 36863daefb238f15a3d9f0ad1a9ecd59e1cbdf30
|
4
|
+
data.tar.gz: face9855059f06f5321be5188c3141c95903424c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2eb85882c8de98dd5a1b0e34f41e74b7609d7465ed502c482980c5081f4f142c477825a58ad85fcc78fcf656417f7797a3aa7523a9a272d835d988f4322314fe
|
7
|
+
data.tar.gz: f56fac3ea48fe486a18b07a39b0dcaac534e393cdbc348d0e7e710dcd2b18acf1cb910d60aae9a37c167df035b4c6f07532a899197e6754c853698fbab05c92a
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2015 Emilio Forrer
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,230 @@
|
|
1
|
+
**Resources**
|
2
|
+
===================
|
3
|
+
|
4
|
+
It's a gem that help's you to create **CRUD** controllers for your models in a **very fast** and **flexible** way.
|
5
|
+
|
6
|
+
----------
|
7
|
+
|
8
|
+
|
9
|
+
**Installation**
|
10
|
+
------------
|
11
|
+
|
12
|
+
|
13
|
+
|
14
|
+
Add this line to your application's Gemfile:
|
15
|
+
|
16
|
+
```
|
17
|
+
gem 'resources'
|
18
|
+
```
|
19
|
+
|
20
|
+
And then execute:
|
21
|
+
|
22
|
+
```
|
23
|
+
bundle install
|
24
|
+
```
|
25
|
+
|
26
|
+
Or install it yourself as:
|
27
|
+
|
28
|
+
```
|
29
|
+
$ gem install resources
|
30
|
+
```
|
31
|
+
|
32
|
+
Rub the configuration generator, this will create the **resources initializer**
|
33
|
+
|
34
|
+
```
|
35
|
+
rails g resources:install
|
36
|
+
```
|
37
|
+
|
38
|
+
----------
|
39
|
+
|
40
|
+
USAGE
|
41
|
+
-------------
|
42
|
+
|
43
|
+
Just add `resource_for` to your controller and give the model's name
|
44
|
+
|
45
|
+
```
|
46
|
+
class Admin::CountriesController < ApplicationController
|
47
|
+
resource_for "Country"
|
48
|
+
end
|
49
|
+
```
|
50
|
+
|
51
|
+
or use the controller generator
|
52
|
+
|
53
|
+
```
|
54
|
+
rails g resource_controller admin/country
|
55
|
+
```
|
56
|
+
|
57
|
+
And that's it, you have to do anything else on the controller to create a **CRUD** maintenance for the country model.
|
58
|
+
|
59
|
+
`resource_for` will **handle all the restful** actions for you and it will give you the next's helper_methods for your convenience:
|
60
|
+
|
61
|
+
**`resources`:** this will have a collection of `Country`, objects so you can use on the `index` actions or any other collection route actions of your controller
|
62
|
+
|
63
|
+
**`resource`:** this will have a `Country`, object so you can use on the member route actions like `new, create, edit, update, show, destroy`
|
64
|
+
|
65
|
+
**`resources_search`:** this is a **[ransack](https://github.com/activerecord-hackery/ransack)** object to you in the `search_form_for` helper
|
66
|
+
|
67
|
+
**`resource_saved?`:** this is a helper to user after create or update a record to know if it was saved.
|
68
|
+
|
69
|
+
|
70
|
+
## OPTIONS AND FLEXIBILITY
|
71
|
+
|
72
|
+
|
73
|
+
|
74
|
+
`resource_for` by default expects the `params` key for update or create the object to be `resource` if you use `form_for` or `simple_form` you need to add the `as: :resource` option
|
75
|
+
|
76
|
+
|
77
|
+
```
|
78
|
+
= simple_form_for [:admin, resource], as: :resource do |f|
|
79
|
+
= f.input :code
|
80
|
+
= f.input :name
|
81
|
+
= f.input :active
|
82
|
+
= f.submit "SAVE"
|
83
|
+
```
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
#### **RESOURCE PARAMS - `params_resource`**
|
88
|
+
|
89
|
+
This options allows you to change the default params key used for create or update the record. So you have to add the `as: :resource` to the `simple_form_for`
|
90
|
+
|
91
|
+
```
|
92
|
+
class Admin::CountriesController < ApplicationController
|
93
|
+
resource_for :"Country",
|
94
|
+
params_resource: :country
|
95
|
+
end
|
96
|
+
```
|
97
|
+
|
98
|
+
Or you can use the `lambda` syntax.
|
99
|
+
|
100
|
+
```
|
101
|
+
class Admin::CountriesController < ApplicationController
|
102
|
+
resource_for :"Country",
|
103
|
+
params_resource: lambda{ |params| params[:country] }
|
104
|
+
end
|
105
|
+
```
|
106
|
+
|
107
|
+
#### **RESOURCE ALIAS - `resource_method_name` - `resources_method_name`**
|
108
|
+
|
109
|
+
This options allows you to alias the `resource` method in case you don't like the name. if you don't specify a `resources_method_name` it will name the alias to `resource_method_name` **pluralized**.
|
110
|
+
|
111
|
+
```
|
112
|
+
class Admin::CountriesController < ApplicationController
|
113
|
+
resource_for :"Country",
|
114
|
+
params_resource: :country,
|
115
|
+
resource_method_name: :country
|
116
|
+
end
|
117
|
+
```
|
118
|
+
**NOTE:** making a change in `resource_method_name` and `resources_method_name` options requires a **server restart**.
|
119
|
+
|
120
|
+
Now in your view you can use `country` instead of `resource`
|
121
|
+
|
122
|
+
```
|
123
|
+
= simple_form_for [:admin, country] do |f|
|
124
|
+
= f.input :code
|
125
|
+
= f.input :name
|
126
|
+
= f.input :active
|
127
|
+
= f.submit "SAVE"
|
128
|
+
```
|
129
|
+
|
130
|
+
|
131
|
+
#### **PAGINATION - `pagination`**
|
132
|
+
|
133
|
+
This option enable pagination in case that you use any of the most popular pagination gems ([kaminari](https://github.com/amatsuda/kaminari) or [will_paginate](https://github.com/mislav/will_paginate)).
|
134
|
+
|
135
|
+
```
|
136
|
+
class Admin::CountriesController < ApplicationController
|
137
|
+
resource_for :"Country",
|
138
|
+
pagination: true,
|
139
|
+
params_resource: :country,
|
140
|
+
resource_method_name: :country
|
141
|
+
end
|
142
|
+
```
|
143
|
+
|
144
|
+
Or you can use the `lambda` syntax.
|
145
|
+
|
146
|
+
```
|
147
|
+
class Admin::CountriesController < ApplicationController
|
148
|
+
resource_for :"Country",
|
149
|
+
pagination: lambda{ |params, controller| params[:disable_pagination].blank? },
|
150
|
+
params_resource: :country,
|
151
|
+
resource_method_name: :country
|
152
|
+
end
|
153
|
+
```
|
154
|
+
|
155
|
+
#### **DEFAULT SCOPES - `resource_scope`- `resources_scope`**
|
156
|
+
|
157
|
+
This options are to set a default `scope` for the `resources`, and `resource` objects.
|
158
|
+
|
159
|
+
|
160
|
+
```
|
161
|
+
class Admin::CountriesController < ApplicationController
|
162
|
+
resource_for :"Country",
|
163
|
+
resources_scope: :active,
|
164
|
+
pagination: true,
|
165
|
+
params_resource: :country,
|
166
|
+
resource_method_name: :country
|
167
|
+
end
|
168
|
+
```
|
169
|
+
**Note:** this will execute the scope `active` and get you only the countries that are currently actives.
|
170
|
+
|
171
|
+
You can use the `lambda` syntax for a **more complex scope**.
|
172
|
+
|
173
|
+
```
|
174
|
+
class Admin::CountriesController < ApplicationController
|
175
|
+
resource_for :"Country",
|
176
|
+
resources_scope: lambda{ |scope, params, controller|
|
177
|
+
scope.by_active_state(params[:active_state]).includes(:cities)
|
178
|
+
},
|
179
|
+
pagination: true,
|
180
|
+
params_resource: :country,
|
181
|
+
resource_method_name: :country
|
182
|
+
end
|
183
|
+
```
|
184
|
+
|
185
|
+
|
186
|
+
#### **SEARCH - `search`- `search_options`**
|
187
|
+
|
188
|
+
The `search` option enable [ransack](https://github.com/activerecord-hackery/ransack) in case that you have installed it. And the `search_options` allows you to pass a hash of parameters to the result method of ransack like **`distinct: true`**
|
189
|
+
|
190
|
+
|
191
|
+
```
|
192
|
+
class Admin::CountriesController < ApplicationController
|
193
|
+
resource_for :"Country",
|
194
|
+
search: true,
|
195
|
+
search_options: {distinct: true},
|
196
|
+
resources_scope: :active,
|
197
|
+
pagination: true,
|
198
|
+
params_resource: :country,
|
199
|
+
resource_method_name: :country
|
200
|
+
end
|
201
|
+
```
|
202
|
+
**NOTE:** For the use of the** `search_form_for`** you have the `resources_search` helper that is a racksack object or in this case `countries_search` because we used the resource alias `resource_method_name`
|
203
|
+
|
204
|
+
```
|
205
|
+
= search_form_for [:admin, countries_search] do |f|
|
206
|
+
= f.label :name_cont
|
207
|
+
= f.search_field :name_cont
|
208
|
+
= f.submit
|
209
|
+
```
|
210
|
+
|
211
|
+
#### **GLOBAL CONFIGURATION **
|
212
|
+
|
213
|
+
You can change the default parameters of any configuration by change the options in the `config/initializers/resources.rb` that was generated by running `rails g resources:install`
|
214
|
+
|
215
|
+
```
|
216
|
+
Resources.config do |config|
|
217
|
+
config.params_search = :q # ransack search parameter. Default params[:q]
|
218
|
+
config.params_resource = :resource # resource parameter to be saved.
|
219
|
+
end
|
220
|
+
```
|
221
|
+
|
222
|
+
|
223
|
+
----------
|
224
|
+
|
225
|
+
|
226
|
+
## **Copyright**
|
227
|
+
|
228
|
+
Copyright (c) 2015 Emilio Forrer. See LICENSE.txt for further details.
|
229
|
+
|
230
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
begin
|
2
|
+
require 'bundler/setup'
|
3
|
+
rescue LoadError
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'rdoc/task'
|
8
|
+
|
9
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
10
|
+
rdoc.rdoc_dir = 'rdoc'
|
11
|
+
rdoc.title = 'Resources'
|
12
|
+
rdoc.options << '--line-numbers'
|
13
|
+
rdoc.rdoc_files.include('README.rdoc')
|
14
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
Bundler::GemHelper.install_tasks
|
23
|
+
|
24
|
+
require 'rake/testtask'
|
25
|
+
|
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
|
+
|
33
|
+
|
34
|
+
task default: :test
|
@@ -0,0 +1,25 @@
|
|
1
|
+
Description:
|
2
|
+
|
3
|
+
Generate Resource Controller
|
4
|
+
|
5
|
+
Example:
|
6
|
+
|
7
|
+
rails g resource_controller country
|
8
|
+
|
9
|
+
This will create:
|
10
|
+
create app/controllers/countries_controller.rb
|
11
|
+
create app/views/countries
|
12
|
+
create app/views/countries/index.html.erb
|
13
|
+
create app/views/countries/edit.html.erb
|
14
|
+
create app/views/countries/show.html.erb
|
15
|
+
create app/views/countries/new.html.erb
|
16
|
+
create app/views/countries/_form.html.erb
|
17
|
+
create test/functional/countries_controller_test.rb
|
18
|
+
create app/helpers/countries_helper.rb
|
19
|
+
create test/unit/helpers/countries_helper_test.rb
|
20
|
+
|
21
|
+
and inside of the controller it will call resource_for
|
22
|
+
|
23
|
+
class CountriesController < ApplicationController
|
24
|
+
resource_for :"Country"
|
25
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'rails/generators/rails/scaffold_controller/scaffold_controller_generator'
|
2
|
+
|
3
|
+
module Rails
|
4
|
+
module Generators
|
5
|
+
class ResourceControllerGenerator < Rails::Generators::ScaffoldControllerGenerator
|
6
|
+
def self.source_root
|
7
|
+
@source_root ||= File.expand_path('../templates', __FILE__)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<% if namespaced? -%>
|
2
|
+
require_dependency "<%= namespaced_file_path %>/application_controller"
|
3
|
+
|
4
|
+
<% end -%>
|
5
|
+
<% module_namespacing do -%>
|
6
|
+
class <%= controller_class_name %>Controller < ApplicationController
|
7
|
+
resource_for :"<%= controller_class_name.to_s.singularize.demodulize %>"
|
8
|
+
end
|
9
|
+
<% end -%>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# GLobal Configuration
|
2
|
+
Resources.config do |config|
|
3
|
+
|
4
|
+
config.rest_actions = true # Enable restful actions (index,new, create, etc)
|
5
|
+
config.search = false # Enable ransack search object (resources_search)
|
6
|
+
config.search_options = {distinct: false} # ransack result options. Default {distinct: false}
|
7
|
+
|
8
|
+
# Setting Params (params_search, params_resource, etc)
|
9
|
+
# You can specify a params key like :q, that will be params[:q]
|
10
|
+
# Or you can set a lambda like lambda{ |params| params[:q] }
|
11
|
+
config.params_search = :q # ransack search parameter. Default params[:q]
|
12
|
+
config.params_resource = :resource # resource parameter to be saved. Default params[:resource]
|
13
|
+
config.params_page = :page # Pagination parameter. Default params[:page]
|
14
|
+
|
15
|
+
|
16
|
+
config.pagination = false # Enables pagination (kaminari or will_paginate)
|
17
|
+
|
18
|
+
# Setting a default scope for the collection and resource objects
|
19
|
+
# You can specify an scope name to be executed like :active
|
20
|
+
# Or if you have something more complex or need to pass a parameter to the scope, you can use a lambda like lambda{ |scope, params, controller| scope.by_activation(params[:active]).includes(:states) }
|
21
|
+
config.resource_scope = nil # default scope for resource object
|
22
|
+
config.resources_scope = nil # default scope for resources collection
|
23
|
+
|
24
|
+
# Setting alias method of resource, if you change the value to, for example :country you will gain this extra helper methods:
|
25
|
+
# countries for the collection object
|
26
|
+
# country for the resource object
|
27
|
+
# country_saved? to know if the resource was saved
|
28
|
+
config.resource_method_name = :resource # alias method of resource
|
29
|
+
config.resources_method_name = nil # alias method of resources, if you dont specify one it takes "resource_method_name.to_s.pluralize"
|
30
|
+
end
|
data/lib/loader.rb
ADDED
data/lib/resources.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
module Resources
|
2
|
+
module Actions
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
helper_method :resources, :resource, :resources_search
|
7
|
+
|
8
|
+
if self.resource_configuration.resource_method_name
|
9
|
+
self.class_eval <<-RUBY
|
10
|
+
|
11
|
+
alias_method :#{self.resource_configuration.resources_method_name.to_s}, :resources
|
12
|
+
alias_method :#{self.resource_configuration.resource_method_name.to_s}, :resource
|
13
|
+
alias_method :#{self.resource_configuration.resources_method_name.to_s}_search, :resources_search
|
14
|
+
helper_method :#{self.resource_configuration.resources_method_name.to_s}, :#{self.resource_configuration.resource_method_name.to_s}, :#{self.resource_configuration.resources_method_name.to_s}_search
|
15
|
+
RUBY
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def resources_search
|
20
|
+
@resources_search ||= resource_manager.resources_search
|
21
|
+
end
|
22
|
+
|
23
|
+
def resources
|
24
|
+
@resources ||= resource_manager.resources
|
25
|
+
end
|
26
|
+
|
27
|
+
def resource
|
28
|
+
@resource ||= resource_manager.resource
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
protected
|
34
|
+
|
35
|
+
def resource_manager
|
36
|
+
@resource_manager ||= Resources::Manager.new(self, request)
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
|
42
|
+
def member_route?
|
43
|
+
params[:id].present?
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|