toy-locomotive 0.0.6 → 0.0.7
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/lib/toy-locomotive/attributes/model.rb +4 -0
- data/lib/toy-locomotive/attributes/observer.rb +2 -0
- data/lib/toy-locomotive/resources/controller.rb +4 -4
- data/lib/toy-locomotive/router/controller.rb +29 -11
- data/lib/toy-locomotive/router/model.rb +14 -14
- data/lib/toy-locomotive/version.rb +1 -1
- metadata +10 -10
@@ -4,6 +4,7 @@ module ToyLocomotive
|
|
4
4
|
attr_accessor :attribute
|
5
5
|
|
6
6
|
def initialize model
|
7
|
+
return unless model.respond_to?(:use_toy_attributes?) && model.use_toy_attributes?
|
7
8
|
@model = model
|
8
9
|
unless ActiveRecord::Base.connection.table_exists? @model.table_name
|
9
10
|
Class.new(ActiveRecord::Migration).create_table(@model.table_name.to_sym) do |t|
|
@@ -13,6 +14,7 @@ module ToyLocomotive
|
|
13
14
|
@model.attributes.each do |attribute|
|
14
15
|
set_attribute(attribute)
|
15
16
|
@model.attr_accessible attribute.column
|
17
|
+
@model.attr_accessible :"#{attribute.column}_id" if attribute._as == :belongs_to
|
16
18
|
end
|
17
19
|
@model.reset_column_information
|
18
20
|
end
|
@@ -14,8 +14,8 @@ module ToyLocomotive::Resources::Controller
|
|
14
14
|
|
15
15
|
def set_action_new
|
16
16
|
get 'new' do
|
17
|
-
extract_parent_vars
|
18
|
-
|
17
|
+
parent = extract_parent_vars.last
|
18
|
+
model = self.class.extract_model
|
19
19
|
instance_variable_set model.to_member_var, (parent ? parent.send(model.to_s.underscore.pluralize) : model).new
|
20
20
|
end
|
21
21
|
end
|
@@ -43,8 +43,8 @@ module ToyLocomotive::Resources::Controller
|
|
43
43
|
|
44
44
|
def set_action_create
|
45
45
|
post 'create' do
|
46
|
-
vars = extract_parent_vars
|
47
|
-
|
46
|
+
parent = (vars = extract_parent_vars).last
|
47
|
+
model = self.class.extract_model
|
48
48
|
member = (parent ? parent.send(model.to_s.underscore.pluralize) : model).new(params[model.to_s.underscore.to_sym])
|
49
49
|
instance_variable_set model.to_member_var, member
|
50
50
|
vars = vars << member
|
@@ -4,6 +4,22 @@ module ToyLocomotive::Router::Controller
|
|
4
4
|
|
5
5
|
%w(get put post delete).each {|via| eval "def #{via} path, opts={}, &blk; match_action \"#{via}\", path, opts, blk; end"}
|
6
6
|
|
7
|
+
def nested *args
|
8
|
+
@_nested = *args
|
9
|
+
end
|
10
|
+
|
11
|
+
def belongs_chain
|
12
|
+
(@_nested || []).map{|m| m.to_s.classify.constantize}
|
13
|
+
end
|
14
|
+
|
15
|
+
def route_chain
|
16
|
+
belongs_chain.map{|m| m.to_route}.join
|
17
|
+
end
|
18
|
+
|
19
|
+
def route_as
|
20
|
+
belongs_chain.map{|m| m.to_s.underscore }.join('_') << (belongs_chain.empty? ? extract_model.to_s.underscore : "_#{extract_model.to_s.underscore}")
|
21
|
+
end
|
22
|
+
|
7
23
|
def match_action method, path, opts, blk
|
8
24
|
action = extract_action path, opts, method
|
9
25
|
extract_filter action, path, opts, method
|
@@ -32,18 +48,18 @@ module ToyLocomotive::Router::Controller
|
|
32
48
|
|
33
49
|
def extract_path path, opts={}
|
34
50
|
return path if path[0] == '/'
|
35
|
-
return "#{
|
36
|
-
return "#{
|
37
|
-
return "#{
|
38
|
-
"#{
|
51
|
+
return "#{route_chain}#{extract_model.to_route}/#{path.parameterize}" if opts[:on] == 'member' || path == 'edit'
|
52
|
+
return "#{route_chain}#{extract_model.to_route}" if ['show','update','destroy'].include?(path)
|
53
|
+
return "#{route_chain}/#{extract_model.to_s.underscore.pluralize}" if ['create', 'index'].include?(path)
|
54
|
+
"#{route_chain}/#{extract_model.to_s.underscore.pluralize}/#{path.parameterize}"
|
39
55
|
end
|
40
56
|
|
41
57
|
def extract_as path, opts={}, method='get'
|
42
|
-
return
|
43
|
-
return
|
58
|
+
return route_as.pluralize if path == 'index'
|
59
|
+
return route_as if path == 'show'
|
44
60
|
return nil if method != 'get'
|
45
61
|
action = extract_action path, opts
|
46
|
-
path[0] == '/' ? action : "#{action}_#{
|
62
|
+
path[0] == '/' ? action : "#{action}_#{route_as}"
|
47
63
|
end
|
48
64
|
|
49
65
|
def extract_action path, opts={}, method='get'
|
@@ -75,14 +91,14 @@ module ToyLocomotive::Router::Controller
|
|
75
91
|
module InstanceMethods
|
76
92
|
|
77
93
|
def extract_parent_vars
|
78
|
-
chain = self.class.
|
94
|
+
chain = self.class.belongs_chain.clone
|
79
95
|
vars = []
|
80
96
|
if chain.any?
|
81
97
|
root = chain.pop
|
82
98
|
parent = root.find(params[root.to_params])
|
83
99
|
instance_variable_set root.to_member_var, parent
|
84
100
|
vars << parent
|
85
|
-
chain.
|
101
|
+
chain.each do |model|
|
86
102
|
parent = parent.send(model.to_s.underscore.pluralize).find(params[model.to_params])
|
87
103
|
instance_variable_set model.to_member_var, parent
|
88
104
|
vars << parent
|
@@ -92,13 +108,15 @@ module ToyLocomotive::Router::Controller
|
|
92
108
|
end
|
93
109
|
|
94
110
|
def extract_member_var
|
95
|
-
parent =
|
111
|
+
parent = self.class.belongs_chain.reverse.pop
|
112
|
+
model = self.class.extract_model
|
96
113
|
parent = parent ? instance_variable_get(parent.to_member_var) : nil
|
97
114
|
instance_variable_set(model.to_member_var, (parent ? parent.send(model.to_s.underscore.pluralize) : model).find(params[model.to_params]))
|
98
115
|
end
|
99
116
|
|
100
117
|
def extract_collection_var
|
101
|
-
parent =
|
118
|
+
parent = self.class.belongs_chain.reverse.pop
|
119
|
+
model = self.class.extract_model
|
102
120
|
parent = parent ? instance_variable_get(parent.to_member_var) : nil
|
103
121
|
instance_variable_set(model.to_collection_var, (parent ? parent.send(model.to_s.underscore.pluralize) : model.all))
|
104
122
|
end
|
@@ -1,18 +1,18 @@
|
|
1
1
|
module ToyLocomotive::Router::Model
|
2
2
|
|
3
|
-
def belongs_to_route
|
4
|
-
|
5
|
-
|
6
|
-
end
|
3
|
+
#def belongs_to_route
|
4
|
+
# reflections = reflect_on_all_associations(:belongs_to)
|
5
|
+
# reflections.any? ? reflections.first.name.to_s.camelize.constantize : nil
|
6
|
+
#end
|
7
7
|
|
8
|
-
def belongs_chain chain=[]
|
9
|
-
|
10
|
-
|
11
|
-
end
|
8
|
+
#def belongs_chain chain=[]
|
9
|
+
# parent_route = (chain.last || self).belongs_to_route
|
10
|
+
# parent_route ? belongs_chain(chain << parent_route) : chain
|
11
|
+
#end
|
12
12
|
|
13
|
-
def route_chain
|
14
|
-
|
15
|
-
end
|
13
|
+
#def route_chain
|
14
|
+
# belongs_chain.reverse.map{|m| m.to_route}.join
|
15
|
+
#end
|
16
16
|
|
17
17
|
def to_route
|
18
18
|
s = to_s.parameterize.downcase
|
@@ -31,9 +31,9 @@ module ToyLocomotive::Router::Model
|
|
31
31
|
:"#{to_s.underscore}_id"
|
32
32
|
end
|
33
33
|
|
34
|
-
def to_as
|
35
|
-
|
36
|
-
end
|
34
|
+
#def to_as
|
35
|
+
# belongs_chain.reverse!.map{|m| m.to_s.underscore }.join('_') << (belongs_chain.empty? ? to_s.underscore : "_#{to_s.underscore}")
|
36
|
+
#end
|
37
37
|
|
38
38
|
end
|
39
39
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: toy-locomotive
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-06-
|
12
|
+
date: 2012-06-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
|
-
requirement: &
|
16
|
+
requirement: &27219312 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *27219312
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec-rails
|
27
|
-
requirement: &
|
27
|
+
requirement: &27218736 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *27218736
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: sqlite3
|
38
|
-
requirement: &
|
38
|
+
requirement: &27218244 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *27218244
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: shoulda
|
49
|
-
requirement: &
|
49
|
+
requirement: &27217476 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *27217476
|
58
58
|
description: a Different aproach to Rails applications
|
59
59
|
email:
|
60
60
|
- mortaro@towsta.com
|