adequate_exposure 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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
  - - ">="