adequate_exposure 0.2.1 → 0.3.0
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.
- checksums.yaml +4 -4
- data/.travis.yml +0 -1
- data/README.md +1 -1
- data/adequate_exposure.gemspec +1 -1
- data/lib/adequate_exposure.rb +1 -0
- data/lib/adequate_exposure/behavior.rb +56 -0
- data/lib/adequate_exposure/exposure.rb +1 -3
- data/lib/adequate_exposure/flow.rb +27 -58
- data/lib/adequate_exposure/version.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c0b98b45275a2969fdf0e5e3816d30681355c7f
|
4
|
+
data.tar.gz: 50b5e87966249713a1bf28dc21770996d1b0a4ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 93c096e3def6f624250401c00096b16fefeb8ca9fc11d13b1aa0c457db4b81178cb890f152b4ce4f9f922a535f6b72cd960b43b81fd4c36186f6f2dc9e6dd15b
|
7
|
+
data.tar.gz: 4a57bb49d5911ed55607e884d8561bb1b82ef009b60ccf54c5e427704e6ed3c60c9c85aabc2adfdf4438146987d5ffceea298ed397df4f602eec322bf32cd7d5
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
Exposing things, adequately.
|
7
7
|
|
8
8
|
Adequate exposure is a lightweight alternative to [Decent
|
9
|
-
Exposure](https://github.com/
|
9
|
+
Exposure](https://github.com/hashrocket/decent_exposure). With its narrowly
|
10
10
|
focused api you can get exactly what you need without all the extra dressing.
|
11
11
|
|
12
12
|
*Note: It is not the intent of the author to imply that Decent Exposure is
|
data/adequate_exposure.gemspec
CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.test_files = spec.files.grep(/\Aspec\//)
|
13
13
|
spec.require_path = "lib"
|
14
14
|
|
15
|
-
spec.required_ruby_version = "
|
15
|
+
spec.required_ruby_version = "~> 2.0"
|
16
16
|
|
17
17
|
spec.add_dependency "railties", "~> 4.0"
|
18
18
|
spec.add_dependency "activesupport", "~> 4.0"
|
data/lib/adequate_exposure.rb
CHANGED
@@ -6,6 +6,7 @@ module AdequateExposure
|
|
6
6
|
autoload :Exposure, "adequate_exposure/exposure"
|
7
7
|
autoload :Attribute, "adequate_exposure/attribute"
|
8
8
|
autoload :Context, "adequate_exposure/context"
|
9
|
+
autoload :Behavior, "adequate_exposure/behavior"
|
9
10
|
autoload :Flow, "adequate_exposure/flow"
|
10
11
|
|
11
12
|
ActiveSupport.on_load :action_controller do
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module AdequateExposure
|
2
|
+
module Behavior
|
3
|
+
def fetch
|
4
|
+
computed_scope = scope(model)
|
5
|
+
instance = id ? find(id, computed_scope) : build(build_params, computed_scope)
|
6
|
+
decorate(instance)
|
7
|
+
end
|
8
|
+
|
9
|
+
def id
|
10
|
+
params_id_key_candidates.each do |key|
|
11
|
+
value = params[key]
|
12
|
+
return value if value.present?
|
13
|
+
end
|
14
|
+
|
15
|
+
nil
|
16
|
+
end
|
17
|
+
|
18
|
+
def scope(model)
|
19
|
+
model
|
20
|
+
end
|
21
|
+
|
22
|
+
def model
|
23
|
+
name.to_s.classify.constantize
|
24
|
+
end
|
25
|
+
|
26
|
+
def find(id, scope)
|
27
|
+
scope.find(id)
|
28
|
+
end
|
29
|
+
|
30
|
+
def build(params, scope)
|
31
|
+
scope.new(params)
|
32
|
+
end
|
33
|
+
|
34
|
+
def decorate(instance)
|
35
|
+
instance
|
36
|
+
end
|
37
|
+
|
38
|
+
def build_params
|
39
|
+
if controller.respond_to?(params_method_name, true) && !get_request?
|
40
|
+
controller.send(params_method_name)
|
41
|
+
else
|
42
|
+
{}
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
protected
|
47
|
+
|
48
|
+
def params_id_key_candidates
|
49
|
+
[ "#{model.name.underscore}_id", "#{name}_id", "id" ].uniq
|
50
|
+
end
|
51
|
+
|
52
|
+
def model_param_key
|
53
|
+
model.name.underscore
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -6,10 +6,8 @@ module AdequateExposure
|
|
6
6
|
new(*args, &block).expose!
|
7
7
|
end
|
8
8
|
|
9
|
-
def initialize(controller, name,
|
9
|
+
def initialize(controller, name, fetch_block=nil, **options, &block)
|
10
10
|
@controller = controller
|
11
|
-
options = args.extract_options!
|
12
|
-
fetch_block = args.pop
|
13
11
|
@options = options.with_indifferent_access.merge(name: name)
|
14
12
|
|
15
13
|
merge_lambda_option :fetch, fetch_block if fetch_block
|
@@ -8,57 +8,16 @@ module AdequateExposure
|
|
8
8
|
@name = options.fetch(:name)
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
def method_missing(name, *args, &block)
|
12
|
+
if respond_to_missing?(name)
|
13
|
+
handle_flow_method(name, *args, &block)
|
14
|
+
else
|
15
|
+
super
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
def default_fetch
|
22
|
-
computed_scope = scope(model)
|
23
|
-
instance = id ? find(id, computed_scope) : build(build_params, computed_scope)
|
24
|
-
decorate(instance)
|
25
|
-
end
|
26
|
-
|
27
|
-
def default_id
|
28
|
-
params_id_key_candidates.each do |key|
|
29
|
-
value = params[key]
|
30
|
-
return value if value.present?
|
31
|
-
end
|
32
|
-
|
33
|
-
nil
|
34
|
-
end
|
35
|
-
|
36
|
-
def default_scope(model)
|
37
|
-
model
|
38
|
-
end
|
39
|
-
|
40
|
-
def default_model
|
41
|
-
name.to_s.classify.constantize
|
42
|
-
end
|
43
|
-
|
44
|
-
def default_find(id, scope)
|
45
|
-
scope.find(id)
|
46
|
-
end
|
47
|
-
|
48
|
-
def default_build(params, scope)
|
49
|
-
scope.new(params)
|
50
|
-
end
|
51
|
-
|
52
|
-
def default_decorate(instance)
|
53
|
-
instance
|
54
|
-
end
|
55
|
-
|
56
|
-
def default_build_params
|
57
|
-
if controller.respond_to?(params_method_name, true) && !get_request?
|
58
|
-
controller.send(params_method_name)
|
59
|
-
else
|
60
|
-
{}
|
61
|
-
end
|
19
|
+
def respond_to_missing?(method_name, include_private = false)
|
20
|
+
Behavior.method_defined?(method_name) || super
|
62
21
|
end
|
63
22
|
|
64
23
|
private
|
@@ -73,15 +32,17 @@ module AdequateExposure
|
|
73
32
|
options.fetch(:build_params_method){ "#{name}_params" }
|
74
33
|
end
|
75
34
|
|
76
|
-
def
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
35
|
+
def handle_flow_method(name, *args, &block)
|
36
|
+
fetch_ivar name do
|
37
|
+
if options.key?(name)
|
38
|
+
handle_options_override(name, *args, &block)
|
39
|
+
else
|
40
|
+
handle_default_flow_method(name, *args, &block)
|
41
|
+
end
|
81
42
|
end
|
82
43
|
end
|
83
44
|
|
84
|
-
def
|
45
|
+
def handle_options_override(name, *args)
|
85
46
|
value = options[name]
|
86
47
|
|
87
48
|
if Proc === value
|
@@ -92,12 +53,20 @@ module AdequateExposure
|
|
92
53
|
end
|
93
54
|
end
|
94
55
|
|
95
|
-
def
|
96
|
-
|
56
|
+
def handle_default_flow_method(name, *args, &block)
|
57
|
+
method = Behavior.instance_method(name)
|
58
|
+
method.bind(self).call(*args, &block)
|
97
59
|
end
|
98
60
|
|
99
|
-
|
100
|
-
|
61
|
+
|
62
|
+
def fetch_ivar(name)
|
63
|
+
ivar_name = "@#{name}"
|
64
|
+
|
65
|
+
if instance_variable_defined?(ivar_name)
|
66
|
+
instance_variable_get(ivar_name)
|
67
|
+
else
|
68
|
+
instance_variable_set(ivar_name, yield)
|
69
|
+
end
|
101
70
|
end
|
102
71
|
end
|
103
72
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: adequate_exposure
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pavel Pravosud
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-08-
|
11
|
+
date: 2014-08-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -54,6 +54,7 @@ files:
|
|
54
54
|
- adequate_exposure.gemspec
|
55
55
|
- lib/adequate_exposure.rb
|
56
56
|
- lib/adequate_exposure/attribute.rb
|
57
|
+
- lib/adequate_exposure/behavior.rb
|
57
58
|
- lib/adequate_exposure/context.rb
|
58
59
|
- lib/adequate_exposure/controller.rb
|
59
60
|
- lib/adequate_exposure/exposure.rb
|
@@ -73,9 +74,9 @@ require_paths:
|
|
73
74
|
- lib
|
74
75
|
required_ruby_version: !ruby/object:Gem::Requirement
|
75
76
|
requirements:
|
76
|
-
- - "
|
77
|
+
- - "~>"
|
77
78
|
- !ruby/object:Gem::Version
|
78
|
-
version:
|
79
|
+
version: '2.0'
|
79
80
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
81
|
requirements:
|
81
82
|
- - ">="
|