toy-resources 0.0.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.
- data/MIT-LICENSE +20 -0
- data/README.md +16 -0
- data/Rakefile +27 -0
- data/lib/tasks/toy-resources_tasks.rake +4 -0
- data/lib/toy-resources.rb +15 -0
- data/lib/toy-resources/actions.rb +39 -0
- data/lib/toy-resources/methods.rb +69 -0
- data/lib/toy-resources/model.rb +29 -0
- data/lib/toy-resources/nested.rb +24 -0
- data/lib/toy-resources/plural.rb +38 -0
- data/lib/toy-resources/router.rb +21 -0
- data/lib/toy-resources/singular.rb +34 -0
- data/lib/toy-resources/version.rb +3 -0
- metadata +119 -0
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2013 YOURNAME
|
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,16 @@
|
|
1
|
+
Toy Resources
|
2
|
+
=========
|
3
|
+
|
4
|
+
Toy Resources is a component of [Toy Locomotive](https://github.com/Mortaro/Toy-Locomotive]), but can be used independently outside Toy Locomotive.
|
5
|
+
|
6
|
+
|
7
|
+
Getting Started
|
8
|
+
---------------
|
9
|
+
|
10
|
+
All you need to start using Toy Resources is to add the following lines to the respective files:
|
11
|
+
|
12
|
+
# Gemfile
|
13
|
+
gem "toy-resources"
|
14
|
+
|
15
|
+
# config/routes.rb inside the 'draw block'
|
16
|
+
toy_resources
|
data/Rakefile
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
begin
|
3
|
+
require 'bundler/setup'
|
4
|
+
rescue LoadError
|
5
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
6
|
+
end
|
7
|
+
begin
|
8
|
+
require 'rdoc/task'
|
9
|
+
rescue LoadError
|
10
|
+
require 'rdoc/rdoc'
|
11
|
+
require 'rake/rdoctask'
|
12
|
+
RDoc::Task = Rake::RDocTask
|
13
|
+
end
|
14
|
+
|
15
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
16
|
+
rdoc.rdoc_dir = 'rdoc'
|
17
|
+
rdoc.title = 'ToyResources'
|
18
|
+
rdoc.options << '--line-numbers'
|
19
|
+
rdoc.rdoc_files.include('README.rdoc')
|
20
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
Bundler::GemHelper.install_tasks
|
27
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module ToyResources
|
2
|
+
mattr_accessor :routes
|
3
|
+
ToyResources.routes = {}
|
4
|
+
end
|
5
|
+
|
6
|
+
require 'action_controller'
|
7
|
+
require 'active_record'
|
8
|
+
|
9
|
+
require 'toy-resources/router'
|
10
|
+
require 'toy-resources/model'
|
11
|
+
require 'toy-resources/actions'
|
12
|
+
require 'toy-resources/methods'
|
13
|
+
require 'toy-resources/nested'
|
14
|
+
require 'toy-resources/plural'
|
15
|
+
require 'toy-resources/singular'
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module ToyResources::Actions
|
2
|
+
|
3
|
+
def _index
|
4
|
+
extract_collection
|
5
|
+
end
|
6
|
+
|
7
|
+
def _show
|
8
|
+
extract_member
|
9
|
+
end
|
10
|
+
|
11
|
+
def _new
|
12
|
+
extract_build
|
13
|
+
end
|
14
|
+
|
15
|
+
def _create
|
16
|
+
build = extract_build
|
17
|
+
return redirect_to vars_list, notice: 'build created' if build.save
|
18
|
+
render :action => :new, error: 'failed to build'
|
19
|
+
end
|
20
|
+
|
21
|
+
def _edit
|
22
|
+
extract_member
|
23
|
+
end
|
24
|
+
|
25
|
+
def _update
|
26
|
+
member = extract_member
|
27
|
+
return redirect_to vars_list, notice: 'member updated' if member.update_attributes params[model.to_params_symbol]
|
28
|
+
render :action => :edit, error: 'failed to update'
|
29
|
+
end
|
30
|
+
|
31
|
+
def _destroy
|
32
|
+
member = extract_member
|
33
|
+
return redirect_to :action => :index, notice: 'member deleted' if member.destroy
|
34
|
+
render :action => :show, error: 'failed to delete'
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
ActionController::Base.send :include, ToyResources::Actions
|
@@ -0,0 +1,69 @@
|
|
1
|
+
module ToyResources::Methods
|
2
|
+
|
3
|
+
def self.included base
|
4
|
+
base.extend ClassMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
def model
|
8
|
+
self.class.model
|
9
|
+
end
|
10
|
+
|
11
|
+
def vars_list
|
12
|
+
instance_variable_get model.member_var_name
|
13
|
+
end
|
14
|
+
|
15
|
+
def parents
|
16
|
+
[]
|
17
|
+
end
|
18
|
+
|
19
|
+
module ClassMethods
|
20
|
+
|
21
|
+
def resources *args
|
22
|
+
options = args.extract_options!
|
23
|
+
actions = {}
|
24
|
+
include(singular? ? ToyResources::Singular : ToyResources::Plural)
|
25
|
+
nested_to(options[:nested_to])
|
26
|
+
actions[:crud] = crud_actions if args.first == :all
|
27
|
+
actions[:crud] = crud_actions - options.delete(:except) if options[:except]
|
28
|
+
actions[:crud] = options.delete(:only) if options[:only]
|
29
|
+
define_actions self, actions, options
|
30
|
+
end
|
31
|
+
|
32
|
+
def model
|
33
|
+
to_s.gsub('Controller', '').underscore.singularize.camelize.constantize
|
34
|
+
end
|
35
|
+
|
36
|
+
protected
|
37
|
+
|
38
|
+
def forward_routes_for actions
|
39
|
+
node = ToyResources.routes
|
40
|
+
parents_symbols.each { |ps| node = (node[ps] ||= {}) }
|
41
|
+
(node[resource_symbol] ||= {}).merge! actions.merge(method: resource_type)
|
42
|
+
end
|
43
|
+
|
44
|
+
def define_actions controller, actions, options
|
45
|
+
actions[:crud].each { |action| alias_method action, :"_#{action}" } if actions[:crud]
|
46
|
+
actions[:member].each { |action| alias_method action, :_show } if actions[:member]
|
47
|
+
actions[:collection].each { |action| alias_method action, :_index } if actions[:collection]
|
48
|
+
forward_routes_for actions
|
49
|
+
end
|
50
|
+
|
51
|
+
def singular?
|
52
|
+
parents_symbols.any? && parents_symbols.last.to_s.classify.constantize.reflections[model.member_symbol]
|
53
|
+
end
|
54
|
+
|
55
|
+
def nested_to controllers
|
56
|
+
return unless controllers
|
57
|
+
include ToyResources::Nested
|
58
|
+
self.parents_symbols = controllers
|
59
|
+
end
|
60
|
+
|
61
|
+
def parents_symbols
|
62
|
+
[]
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
ActionController::Base.send :include, ToyResources::Methods
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module ToyResources::Model
|
2
|
+
|
3
|
+
def collection_symbol
|
4
|
+
to_s.pluralize.underscore.to_sym
|
5
|
+
end
|
6
|
+
|
7
|
+
def collection_var_name
|
8
|
+
"@#{collection_symbol.to_s}"
|
9
|
+
end
|
10
|
+
|
11
|
+
def member_symbol
|
12
|
+
to_s.underscore.to_sym
|
13
|
+
end
|
14
|
+
|
15
|
+
def member_var_name
|
16
|
+
"@#{member_symbol}"
|
17
|
+
end
|
18
|
+
|
19
|
+
def to_params_symbol
|
20
|
+
:"#{member_symbol}"
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_params_id_symbol
|
24
|
+
:"#{member_symbol}_id"
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
ActiveRecord::Base.extend ToyResources::Model
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module ToyResources::Nested
|
2
|
+
|
3
|
+
def self.included base
|
4
|
+
base.extend ClassMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
def parents
|
8
|
+
self.class.parents_symbols.map do |symbol|
|
9
|
+
model = symbol.to_s.classify.constantize
|
10
|
+
member = model.find params[model.to_params_id_symbol]
|
11
|
+
instance_variable_set model.member_var_name, member
|
12
|
+
member
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def vars_list
|
17
|
+
parents << instance_variable_get(model.member_var_name)
|
18
|
+
end
|
19
|
+
|
20
|
+
module ClassMethods
|
21
|
+
mattr_accessor :parents_symbols
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module ToyResources::Plural
|
2
|
+
|
3
|
+
def self.included base
|
4
|
+
base.extend ClassMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
def extract_collection
|
8
|
+
collection = (parents.any? ? parents.last.send(model.collection_symbol) : model).all
|
9
|
+
instance_variable_set model.collection_var_name, collection
|
10
|
+
end
|
11
|
+
|
12
|
+
def extract_member
|
13
|
+
member = (parents.any? ? parents.last.send(model.collection_symbol) : model).find params[:id]
|
14
|
+
instance_variable_set model.member_var_name, member
|
15
|
+
end
|
16
|
+
|
17
|
+
def extract_build
|
18
|
+
build = (parents.any? ? parents.last.send(model.collection_symbol) : model).new (params[model.to_params_symbol] || {})
|
19
|
+
instance_variable_set model.member_var_name, build
|
20
|
+
end
|
21
|
+
|
22
|
+
module ClassMethods
|
23
|
+
|
24
|
+
def crud_actions
|
25
|
+
[:index, :new, :create, :show, :edit, :update, :destroy]
|
26
|
+
end
|
27
|
+
|
28
|
+
def resource_symbol
|
29
|
+
model.collection_symbol
|
30
|
+
end
|
31
|
+
|
32
|
+
def resource_type
|
33
|
+
:resources
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module ToyResources::Router
|
2
|
+
|
3
|
+
def toy_resources
|
4
|
+
Dir["#{Rails.root}/app/controllers/*.rb"].each { |file| load file }
|
5
|
+
eval string_block_from ToyResources.routes
|
6
|
+
ToyResources.routes = {}
|
7
|
+
end
|
8
|
+
|
9
|
+
def string_block_from routes
|
10
|
+
routes.map do |model, options|
|
11
|
+
<<-BLOCK
|
12
|
+
#{options.delete(:method)}(:#{model}, only: #{options.delete(:crud).inspect}) do
|
13
|
+
#{string_block_from(options)}
|
14
|
+
end
|
15
|
+
BLOCK
|
16
|
+
end.join
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
ActionDispatch::Routing::Mapper.send :include, ToyResources::Router
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module ToyResources::Singular
|
2
|
+
|
3
|
+
def self.included base
|
4
|
+
base.extend ClassMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
def extract_member
|
8
|
+
member = parents.last.send model.member_symbol
|
9
|
+
instance_variable_set model.member_var_name, member
|
10
|
+
end
|
11
|
+
|
12
|
+
#to-do
|
13
|
+
def extract_build
|
14
|
+
# build = (parents.any? ? parents.last.send(model.collection_symbol) : model).new (params[model.to_params_symbol] || {})
|
15
|
+
# instance_variable_set model.member_var_name, build
|
16
|
+
end
|
17
|
+
|
18
|
+
module ClassMethods
|
19
|
+
|
20
|
+
def crud_actions
|
21
|
+
[:new, :create, :show, :edit, :update, :destroy]
|
22
|
+
end
|
23
|
+
|
24
|
+
def resource_symbol
|
25
|
+
model.member_symbol
|
26
|
+
end
|
27
|
+
|
28
|
+
def resource_type
|
29
|
+
:resource
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
metadata
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: toy-resources
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Christian Mortaro
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-01-29 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rails
|
16
|
+
requirement: &30458268 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *30458268
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: toy-attributes
|
27
|
+
requirement: &30457836 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *30457836
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rspec-rails
|
38
|
+
requirement: &30457452 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *30457452
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: shoulda
|
49
|
+
requirement: &30457056 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *30457056
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: sqlite3
|
60
|
+
requirement: &30456744 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *30456744
|
69
|
+
description: Allows to declare resources and routes in a single line
|
70
|
+
email:
|
71
|
+
- christian.mortaro@gmail.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- lib/tasks/toy-resources_tasks.rake
|
77
|
+
- lib/toy-resources/actions.rb
|
78
|
+
- lib/toy-resources/methods.rb
|
79
|
+
- lib/toy-resources/model.rb
|
80
|
+
- lib/toy-resources/nested.rb
|
81
|
+
- lib/toy-resources/plural.rb
|
82
|
+
- lib/toy-resources/router.rb
|
83
|
+
- lib/toy-resources/singular.rb
|
84
|
+
- lib/toy-resources/version.rb
|
85
|
+
- lib/toy-resources.rb
|
86
|
+
- MIT-LICENSE
|
87
|
+
- Rakefile
|
88
|
+
- README.md
|
89
|
+
homepage: https://github.com/Mortaro/Toy-Resources
|
90
|
+
licenses: []
|
91
|
+
post_install_message:
|
92
|
+
rdoc_options: []
|
93
|
+
require_paths:
|
94
|
+
- lib
|
95
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
96
|
+
none: false
|
97
|
+
requirements:
|
98
|
+
- - ! '>='
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '0'
|
101
|
+
segments:
|
102
|
+
- 0
|
103
|
+
hash: 144692211
|
104
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
segments:
|
111
|
+
- 0
|
112
|
+
hash: 144692211
|
113
|
+
requirements: []
|
114
|
+
rubyforge_project:
|
115
|
+
rubygems_version: 1.8.16
|
116
|
+
signing_key:
|
117
|
+
specification_version: 3
|
118
|
+
summary: Handles the resources for Toy-Locomotive
|
119
|
+
test_files: []
|