stark_parameters 0.1.2 → 0.1.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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZGUzNzI0OWE3OGRhNTRkOWJmYjg3NzU4NDAxY2I3OGU1NDI5MGEzNg==
4
+ NzM2YTU1MzI1YzAyNzZhYzVlOWVhMThiN2NlNGVkOGNiNTdmMjgyMQ==
5
5
  data.tar.gz: !binary |-
6
- NTE3ZTc5ODAwNzE1ZTM5YzBkMDgwOTI2Nzc1ZTJiNTZiYTRiZTY3OQ==
6
+ NWQ0MzljZGIxYTMzMzBlNTI2ZjY3YWIwM2Y3NjY2NWIzN2JjY2JjNg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NzIwMGQ2ZDI2Zjk4YTc1ZmI2MDZhY2U0M2ViZmIwNmNhMGIwY2ZjYjgyMTdm
10
- ZGM3NTc1NWY0NTlhYzAyNmZkODljZTliN2VhMzQzYzYxNjMzMDdkNDMxN2Ez
11
- ZDI2MDc2NzllNzY4ZjExNzc1OTUzZWI2ZWY0OTg3ZmIzZDIxODQ=
9
+ M2Y1NmZiZjgyZjQyNjZlZDJiNDIxZTU0ODk5MzFhY2EwNDRlMDc5NzNiOTU0
10
+ NmJhNjdjZTlmYmE0MDNjOTM2ZWZiNWQyNDNjNGU4M2U3ZmI4MDUwZGQwYjA4
11
+ ZmMzMmNiM2Y2N2M2YjYyMDFiOWNlMDM2ZDYwZjEwMWUxMDZmNjM=
12
12
  data.tar.gz: !binary |-
13
- MjRkMjQwOWQ4NzdiN2VhOTc2MzgzZjAxNTRjYjhhYzYxMzhmZGJmZDdlYjE2
14
- NDk5ZmJhMjExOTliMGJiMmNkZmM5YWYwZGE0ZWI4ZGY1MzI5OTQzODI4YjYx
15
- NGNkOTBkZDY0MDhjNWQxMzQ4NjUxM2JmOTA2MTdiYzI5Mjk1NzU=
13
+ ZjcwNzRkNGUwNTAwNjdhMTFhMzI3ODUwYzhmYTJjY2QxNjYxYTRlNmQxYTY3
14
+ ZGQ1MDk2MmVhYmE4ZGQwM2QyZWJmNWZlYzUwOThiYzYxNDZiMjE0MzUwZTcz
15
+ YTFlYjhiOTI5ZmZkN2EzOTlhNWJmNjFkOGQ3ODU1ZjljNDEwN2M=
@@ -1,3 +1,3 @@
1
1
  module StarkParameters
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
@@ -12,56 +12,67 @@ module StarkParameters
12
12
  klass.aliases = {}
13
13
  end
14
14
 
15
+ attr_reader :params
16
+
15
17
  def initialize(*params)
16
- @params = params.each_with_object(make_strong_parameter({})) do |p, hash|
17
- hash.merge!(make_strong_parameter(p))
18
+ @params = params.reduce(make_strong_parameter({})) do |hash, param|
19
+ hash.merge(make_strong_parameter(param))
18
20
  end
19
21
  end
20
22
 
21
23
  def params
22
- make_strong_parameter(permitted_params.merge(required_params)).permit!
24
+ all_params = permitted_params.merge(required_params)
25
+ make_strong_parameter(all_params).permit!
23
26
  end
24
27
 
25
28
  private
26
29
 
27
30
  def permitted_params
28
31
  self.class.permitted_params.each_with_object({}) do |permitted_param, hash|
29
- param_key = permitted_param.is_a?(Hash) ? permitted_param.keys.first : permitted_param
30
- permitted_value = @params.permit(permitted_param).values.first
31
- hash[(self.class.aliases[param_key] || param_key).to_s] = permitted_value unless permitted_value.nil?
32
+ permitted_key = permitted_param.is_a?(Hash) ? permitted_param.keys.first : permitted_param
33
+ name = self.class.aliases[permitted_key] || permitted_key
34
+ permitted_value = respond_to?(name) ? send(name) : @params.permit(permitted_param)[name]
35
+ hash[name] = permitted_value unless permitted_value.nil?
32
36
  end
33
37
  end
34
38
 
35
39
  def required_params
36
- presence_required_params = self.class.presence_required_params.each_with_object({}) do |required_params, hash|
37
- param_key = require_one(required_params)
38
- hash[(self.class.aliases[param_key] || param_key).to_s] = @params[param_key]
39
- end
40
- presence_optional_params = self.class.presence_optional_params.each_with_object({}) do |required_params, hash|
41
- param_key = require_one(required_params, true)
42
- hash[(self.class.aliases[param_key] || param_key).to_s] = @params[param_key]
43
- end
44
40
  presence_required_params.merge(presence_optional_params)
45
41
  end
46
42
 
43
+ def presence_optional_params
44
+ collect_required_params(self.class.presence_optional_params, true)
45
+ end
46
+
47
+ def presence_required_params
48
+ collect_required_params(self.class.presence_required_params, false)
49
+ end
50
+
51
+ def collect_required_params(keys, allow_nil)
52
+ keys.each_with_object({}) do |required_params, hash|
53
+ required_key = require_one(required_params, allow_nil)
54
+
55
+ key = self.class.aliases[required_key] || required_key
56
+ value = respond_to?(key) ? send(key) : @params[required_key]
57
+ hash[key] = value
58
+ end
59
+ end
47
60
 
48
61
  def make_strong_parameter(hash)
49
62
  return hash if hash.is_a? ActionController::Parameters
50
63
  ActionController::Parameters.new(hash)
51
64
  end
52
65
 
53
- def require_one(to_require, allow_nil = false)
54
- present_param = to_require.detect {|p| @params.include?(p) && (allow_nil || !@params[p].nil?) }
55
- unless present_param && value_presence_valid(present_param, allow_nil)
66
+ def require_one(to_require, allow_nil)
67
+ present_param = to_require.detect{|k| respond_to?(k)} ||
68
+ to_require.detect {|k| @params.include?(k) && (allow_nil || @params[k]) }
69
+
70
+ unless present_param
56
71
  raise ActionController::ParameterMissing.new(to_require.join(" or "))
57
72
  end
58
73
  present_param
59
74
  end
60
75
 
61
- def value_presence_valid(present_param, allow_nil)
62
- allow_nil ? true : !@params.stringify_keys[present_param.to_s].nil?
63
- end
64
-
65
76
  module ClassMethods
66
77
  attr_accessor :permitted_params, :presence_required_params, :presence_optional_params, :aliases
67
78
 
@@ -78,14 +89,9 @@ module StarkParameters
78
89
  end
79
90
 
80
91
  def permit(permitted_param, options = {})
92
+ permitted_key = permitted_param.is_a?(Hash) ? permitted_param.keys.first : permitted_param
81
93
  if new_name = options[:as]
82
- param_key = if permitted_param.is_a? Hash
83
- permitted_param.keys.first
84
- else
85
- permitted_param
86
- end
87
-
88
- @aliases[param_key] = new_name
94
+ @aliases[permitted_key] = new_name
89
95
  end
90
96
  @permitted_params.push permitted_param
91
97
  end
@@ -8,7 +8,6 @@ describe StarkParameters do
8
8
  require :name
9
9
  require :id
10
10
  require :email, as: :login
11
- permit author: [:id, :name]
12
11
  permit :password, as: :pword
13
12
  permit :awesome
14
13
  require [:last_name, :surname]
@@ -21,8 +20,7 @@ describe StarkParameters do
21
20
  "name" => "Ryan",
22
21
  "email" => "ryan@6wunderkinder.com",
23
22
  "password" => "fdsafdsa",
24
- "surname" => "Levick",
25
- "author" => { "id" => 1, "name" => "Steve" }
23
+ "surname" => "Levick"
26
24
  }
27
25
  end
28
26
 
@@ -33,7 +31,6 @@ describe StarkParameters do
33
31
 
34
32
  it { expect(validator.params.to_hash).to include("name" => "Ryan") }
35
33
  it { expect(validator.params.to_hash).to include("surname" => "Levick") }
36
- it { expect(validator.params.to_hash).to include("author" => { "id" => 1, "name" => "Steve" }) }
37
34
  it { expect(validator.params.to_hash).to include("login" => "ryan@6wunderkinder.com") }
38
35
  it { expect(validator.params.to_hash.keys).to_not include("email") }
39
36
 
@@ -74,11 +71,31 @@ describe StarkParameters do
74
71
  end
75
72
  end
76
73
 
74
+ context "nested permitted params" do
75
+ let(:test_klass) do
76
+ Class.new do
77
+ include StarkParameters
78
+
79
+ permit author: [:name, :surname]
80
+ end
81
+ end
82
+ let(:params) {{"author" => {"name" => "Ryan", "surname" => "Levick", "age" => 25}} }
83
+
84
+ it { expect(validator.params.to_hash).to include("author" => {"name" => "Ryan", "surname" => "Levick"}) }
85
+ end
86
+
77
87
  context "when permitted param is missing" do
78
- let(:params) { full_params.except("author") }
88
+ let(:test_klass) do
89
+ Class.new do
90
+ include StarkParameters
79
91
 
80
- it { expect{ validator.params }.to_not raise_error }
81
- it { expect(validator.params.to_hash.keys).to_not include("author") }
92
+ permit :name
93
+ permit :age
94
+ end
95
+ end
96
+ let(:params) {{ "surname" => "Levick", "age" => 25 }}
97
+
98
+ it { expect(validator.params.to_hash).to include({"age" => 25}) }
82
99
  end
83
100
 
84
101
  context "when permitted param is false" do
@@ -89,8 +106,25 @@ describe StarkParameters do
89
106
  end
90
107
 
91
108
  context "with multiple params" do
92
- let(:validator) { test_klass.new(full_params.except("name"), {"name" => "Ryan"}) }
109
+ let(:validator) { test_klass.new(full_params.except("name"), {"name" => "Steve"}) }
93
110
 
94
- it { expect(validator.params.to_hash).to include("name" => "Ryan") }
111
+ it { expect(validator.params.to_hash).to include("name" => "Steve") }
112
+ end
113
+
114
+ context "with default values provided by methods" do
115
+ let(:test_klass) do
116
+ Class.new do
117
+ include StarkParameters
118
+
119
+ require :foo
120
+
121
+ def foo
122
+ "bar"
123
+ end
124
+ end
125
+ end
126
+
127
+ let(:validator) { test_klass.new({}) }
128
+ it { expect(validator.params.to_hash).to include("foo" => "bar") }
95
129
  end
96
130
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stark_parameters
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - rylev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-24 00:00:00.000000000 Z
11
+ date: 2014-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack