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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9180aa8ebc21e8d4a03967c573203ca6eac4e0a7
4
- data.tar.gz: 6ef711f9e8eeea01592d5628842e8811ceeef6f2
3
+ metadata.gz: 9c0b98b45275a2969fdf0e5e3816d30681355c7f
4
+ data.tar.gz: 50b5e87966249713a1bf28dc21770996d1b0a4ec
5
5
  SHA512:
6
- metadata.gz: 8715c320612b4a03d877b5f950e364b394ecebd37d581e643c8ac7f4587869132dcdeedfb0eee51a33fb524d5b451d328e2f469a609af4713c387d7aeb0663b2
7
- data.tar.gz: d132e75b4bf4083e64e65b526bce9681bb1ec57db3a7e42d6071a8c9302a5d30ca7d93910a26e357688a968cd7e37b68f2fd247b1001bb1cbdefd10804384bad
6
+ metadata.gz: 93c096e3def6f624250401c00096b16fefeb8ca9fc11d13b1aa0c457db4b81178cb890f152b4ce4f9f922a535f6b72cd960b43b81fd4c36186f6f2dc9e6dd15b
7
+ data.tar.gz: 4a57bb49d5911ed55607e884d8561bb1b82ef009b60ccf54c5e427704e6ed3c60c9c85aabc2adfdf4438146987d5ffceea298ed397df4f602eec322bf32cd7d5
data/.travis.yml CHANGED
@@ -1,4 +1,3 @@
1
1
  rvm:
2
- - 1.9
3
2
  - 2.0
4
3
  - 2.1
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/voxdolo/decent_exposure). With its narrowly
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
@@ -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 = ">= 1.9.3"
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"
@@ -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, *args, &block)
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
- %w[fetch find build build_params scope model id decorate].each do |method_name|
12
- define_method method_name do |*args|
13
- ivar_name = "@#{method_name}"
14
- return instance_variable_get(ivar_name) if instance_variable_defined?(ivar_name)
15
- instance_variable_set(ivar_name, handle_action(method_name, *args))
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
- protected
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 handle_action(name, *args)
77
- if options.key?(name)
78
- handle_custom_action(name, *args)
79
- else
80
- send("default_#{name}", *args)
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 handle_custom_action(name, *args)
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 params_id_key_candidates
96
- [ "#{model.name.underscore}_id", "#{name}_id", "id" ].uniq
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
- def model_param_key
100
- model.name.underscore
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
@@ -1,3 +1,3 @@
1
1
  module AdequateExposure
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
3
3
  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.2.1
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-01 00:00:00.000000000 Z
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: 1.9.3
79
+ version: '2.0'
79
80
  required_rubygems_version: !ruby/object:Gem::Requirement
80
81
  requirements:
81
82
  - - ">="