heimdallr-resource 1.0.2 → 1.0.3
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/heimdallr-resource.gemspec +1 -1
- data/lib/heimdallr/resource.rb +46 -17
- metadata +12 -12
data/heimdallr-resource.gemspec
CHANGED
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "heimdallr-resource"
|
6
|
-
s.version = "1.0.
|
6
|
+
s.version = "1.0.3"
|
7
7
|
s.authors = ["Peter Zotov", "Boris Staal"]
|
8
8
|
s.email = ["whitequark@whitequark.org", "boris@roundlake.ru"]
|
9
9
|
s.homepage = "http://github.com/roundlake/heimdallr-resource"
|
data/lib/heimdallr/resource.rb
CHANGED
@@ -21,17 +21,17 @@ module Heimdallr
|
|
21
21
|
|
22
22
|
if target
|
23
23
|
if options[:singleton]
|
24
|
-
scope = target.send(:"#{options
|
24
|
+
scope = target.send(:"#{variable_name(options)}")
|
25
25
|
else
|
26
|
-
scope = target.send(:"#{options
|
26
|
+
scope = target.send(:"#{variable_name(options).pluralize}")
|
27
27
|
end
|
28
28
|
elsif options[:shallow]
|
29
|
-
scope = options
|
29
|
+
scope = class_name(options).constantize.scoped
|
30
30
|
else
|
31
31
|
raise "Cannot fetch #{options[:resource]} via #{options[:through]}"
|
32
32
|
end
|
33
33
|
else
|
34
|
-
scope = options
|
34
|
+
scope = class_name(options).constantize.scoped
|
35
35
|
end
|
36
36
|
|
37
37
|
loaders = {
|
@@ -40,20 +40,25 @@ module Heimdallr
|
|
40
40
|
},
|
41
41
|
|
42
42
|
new_record: -> {
|
43
|
-
controller.instance_variable_set(
|
44
|
-
|
43
|
+
controller.instance_variable_set(
|
44
|
+
ivar_name(controller, options),
|
45
|
+
scope.new(controller.params[params_key_name(options)] || {})
|
46
|
+
)
|
45
47
|
},
|
46
48
|
|
47
49
|
record: -> {
|
48
|
-
controller.instance_variable_set(
|
49
|
-
|
50
|
-
|
50
|
+
controller.instance_variable_set(
|
51
|
+
ivar_name(controller, options),
|
52
|
+
scope.find([:"#{params_key_name(options)}_id", :id].map{|key| controller.params[key] }.reject(&:blank?)[0])
|
53
|
+
)
|
51
54
|
},
|
52
55
|
|
53
56
|
related_record: -> {
|
54
|
-
|
55
|
-
controller.instance_variable_set(
|
56
|
-
|
57
|
+
unless controller.params[:"#{params_key_name(options)}_id"].blank?
|
58
|
+
controller.instance_variable_set(
|
59
|
+
ivar_name(controller, options),
|
60
|
+
scope.find(controller.params[:"#{params_key_name(options)}_id"])
|
61
|
+
)
|
57
62
|
end
|
58
63
|
}
|
59
64
|
}
|
@@ -95,23 +100,23 @@ module Heimdallr
|
|
95
100
|
|
96
101
|
def load_target(controller, options)
|
97
102
|
Array.wrap(options[:through]).map do |parent|
|
98
|
-
loaded = controller.instance_variable_get(:"@#{parent}")
|
103
|
+
loaded = controller.instance_variable_get(:"@#{variable_name parent}")
|
99
104
|
unless loaded
|
100
105
|
load(controller, :resource => parent.to_s, :related => true)
|
101
|
-
loaded = controller.instance_variable_get(:"@#{parent}")
|
106
|
+
loaded = controller.instance_variable_get(:"@#{variable_name parent}")
|
102
107
|
end
|
103
108
|
if loaded && options[:authorize_chain]
|
104
109
|
authorize(controller, :resource => parent.to_s, :related => true)
|
105
110
|
end
|
106
|
-
controller.instance_variable_get(:"@#{parent}")
|
111
|
+
controller.instance_variable_get(:"@#{variable_name parent}")
|
107
112
|
end.reject(&:nil?).first
|
108
113
|
end
|
109
114
|
|
110
115
|
def ivar_name(controller, options)
|
111
116
|
if action_type(controller.params[:action], options) == :collection
|
112
|
-
:"@#{options
|
117
|
+
:"@#{variable_name(options).pluralize}"
|
113
118
|
else
|
114
|
-
:"@#{options
|
119
|
+
:"@#{variable_name(options)}"
|
115
120
|
end
|
116
121
|
end
|
117
122
|
|
@@ -138,6 +143,30 @@ module Heimdallr
|
|
138
143
|
end
|
139
144
|
end
|
140
145
|
end
|
146
|
+
|
147
|
+
def variable_name(options)
|
148
|
+
if options.kind_of? Hash
|
149
|
+
options[:resource]
|
150
|
+
else
|
151
|
+
options.to_s
|
152
|
+
end.parameterize('_')
|
153
|
+
end
|
154
|
+
|
155
|
+
def class_name(options)
|
156
|
+
if options.kind_of? Hash
|
157
|
+
options[:resource]
|
158
|
+
else
|
159
|
+
options.to_s
|
160
|
+
end.classify
|
161
|
+
end
|
162
|
+
|
163
|
+
def params_key_name(options)
|
164
|
+
if options.kind_of? Hash
|
165
|
+
options[:resource]
|
166
|
+
else
|
167
|
+
options.to_s
|
168
|
+
end.split('/').last
|
169
|
+
end
|
141
170
|
end
|
142
171
|
end
|
143
172
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: heimdallr-resource
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-
|
13
|
+
date: 2012-05-27 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rspec-rails
|
17
|
-
requirement: &
|
17
|
+
requirement: &70177728312580 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *70177728312580
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: activerecord
|
28
|
-
requirement: &
|
28
|
+
requirement: &70177728312140 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *70177728312140
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: sqlite3
|
39
|
-
requirement: &
|
39
|
+
requirement: &70177728311720 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: '0'
|
45
45
|
type: :development
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *70177728311720
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: tzinfo
|
50
|
-
requirement: &
|
50
|
+
requirement: &70177728311300 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ! '>='
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: '0'
|
56
56
|
type: :development
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *70177728311300
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: heimdallr
|
61
|
-
requirement: &
|
61
|
+
requirement: &70177728310880 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ! '>='
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
version: '0'
|
67
67
|
type: :runtime
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *70177728310880
|
70
70
|
description: Heimdallr-Resource provides CanCan-like interface for Heimdallr-secured
|
71
71
|
objects.
|
72
72
|
email:
|