inherited_resources_helpers 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,55 @@
|
|
1
|
+
module InheritedResources
|
2
|
+
module Helpers
|
3
|
+
module Accessors
|
4
|
+
def self.included(base)
|
5
|
+
base.extend(ClassMethods)
|
6
|
+
end
|
7
|
+
|
8
|
+
module ClassMethods
|
9
|
+
def define_resource_accessors(controller)
|
10
|
+
symbols = parents_symbols + [:self]
|
11
|
+
symbols.inject([]) do |parents, name|
|
12
|
+
define_resource_accessor(name, parents)
|
13
|
+
parents << name
|
14
|
+
end
|
15
|
+
@resource_accessors_defined = true
|
16
|
+
end
|
17
|
+
|
18
|
+
def define_resource_accessor(name, parents)
|
19
|
+
config = resources_configuration[name]
|
20
|
+
target = parents.last || config[:parent_class]
|
21
|
+
method = config[:finder] || config[:collection_name]
|
22
|
+
param = config[:param] || :id
|
23
|
+
name = name == :self ? config[:instance_name] : name
|
24
|
+
|
25
|
+
if target.is_a?(Symbol)
|
26
|
+
define_method(name) { send(target).send(method, params[param]).first }
|
27
|
+
else
|
28
|
+
define_method(name) { target.send(method, params[param]) }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def resource_accessors_defined?
|
33
|
+
!!@resource_accessors_defined
|
34
|
+
end
|
35
|
+
|
36
|
+
def resource_accessor?(name)
|
37
|
+
resource_accessors.include?(name.to_sym)
|
38
|
+
end
|
39
|
+
|
40
|
+
def resource_accessors
|
41
|
+
@resource_accessors ||= resources_configuration.except(:polymorphic).values.map { |c| c[:instance_name] }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def respond_to?(name)
|
46
|
+
self.class.resource_accessor?(name) || super
|
47
|
+
end
|
48
|
+
|
49
|
+
def method_missing(name, *args, &block)
|
50
|
+
self.class.define_resource_accessors(self) unless self.class.resource_accessors_defined?
|
51
|
+
respond_to?(name) ? send(name) : super
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -2,9 +2,10 @@ require 'inherited_resources'
|
|
2
2
|
|
3
3
|
module InheritedResources
|
4
4
|
module Helpers
|
5
|
+
autoload :Accessors, 'inherited_resources/helpers/accessors'
|
6
|
+
autoload :LinkTo, 'inherited_resources/helpers/link_to'
|
5
7
|
autoload :Resources, 'inherited_resources/helpers/resources'
|
6
8
|
autoload :UrlFor, 'inherited_resources/helpers/url_for'
|
7
|
-
autoload :LinkTo, 'inherited_resources/helpers/link_to'
|
8
9
|
end
|
9
10
|
|
10
11
|
Base.class_eval do
|
@@ -12,6 +13,7 @@ module InheritedResources
|
|
12
13
|
def inherited_with_helpers(base)
|
13
14
|
base.send :include, Helpers::Resources
|
14
15
|
base.send :include, Helpers::UrlFor
|
16
|
+
base.send :include, Helpers::Accessors
|
15
17
|
inherited_without_helpers(base)
|
16
18
|
end
|
17
19
|
alias_method_chain :inherited, :helpers # TODO ugh.
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: inherited_resources_helpers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 4
|
10
|
+
version: 0.0.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Sven Fuchs
|
@@ -28,6 +28,7 @@ extensions: []
|
|
28
28
|
extra_rdoc_files: []
|
29
29
|
|
30
30
|
files:
|
31
|
+
- lib/inherited_resources/helpers/accessors.rb
|
31
32
|
- lib/inherited_resources/helpers/link_to.rb
|
32
33
|
- lib/inherited_resources/helpers/resources.rb
|
33
34
|
- lib/inherited_resources/helpers/url_for.rb
|