gourami 1.2.0 → 1.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
- SHA1:
3
- metadata.gz: 3779db38f4b70d32e20dd18a93475ce89bb060d2
4
- data.tar.gz: 1782175e4495a98bcdc11a4168daaae3bdc08cd2
2
+ SHA256:
3
+ metadata.gz: 9aeeb89759c11dd7f9559824ccfd42bc6ab7755aa2d60f11b8a38e5b0db08902
4
+ data.tar.gz: 80c1968c495c2cff9277b4bd51c0340bd8381874dc864d53dab711091f61443a
5
5
  SHA512:
6
- metadata.gz: 98147fa182b83285ce9d9fc9a841608b05a4e938338efcccf6867735a1f218fe64864ea5ae66c25772e4511c760b011d89ea5b3b756fb79295a7dba7254ec221
7
- data.tar.gz: ca40a30b3db73ffc95d2bdb9c9eeac3ae84c9539258bdc140690f760e145d2f7ed43c6d37e89d8c3dfdbbbfe2b496dfeb63f169f40d85a9055acd28a513895d6
6
+ metadata.gz: 97af9a59317e79d499c95b7b05f31a5089e9f56c7b7970818c22b36482de075f646f212b12e41ad4b53d9be1e967c34b08b34e55c46a90e033151f46416208dc
7
+ data.tar.gz: 48979f3194878e519431c3a46deb3da5eea9dc624731483f89e8006370d84c30027445b4ac6b31f0ca91b1d669539ad79edf988c51a2d8b2f56f7877b1659cdd
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ["lib"]
23
23
 
24
- spec.add_development_dependency "bundler", "~> 1.13"
24
+ spec.add_development_dependency "activesupport", ">= 5.1.7"
25
25
  spec.add_development_dependency "filewatcher", "~> 1.1.0"
26
26
  spec.add_development_dependency "minitest", "~> 5.0"
27
27
  spec.add_development_dependency "pry", "~>0.10"
@@ -11,8 +11,7 @@ module Gourami
11
11
  # @return [*]
12
12
  def setter_filter(attribute_name, value, options)
13
13
  type = options[:type]
14
- coercer_method_name = :"coerce_#{type}"
15
- value = send(coercer_method_name, value, options) if type
14
+ value = send(:"coerce_#{type}", value, options) if type
16
15
 
17
16
  super(attribute_name, value, options)
18
17
  end
@@ -120,21 +119,38 @@ module Gourami
120
119
  # The type of the hash keys to coerce, no coersion if value is nil.
121
120
  # @option options :value_type [Symbol, Callable] (nil)
122
121
  # The type of the hash values to coerce, no coersion if value is nil.
122
+ # @option options :indifferent_access [Boolean] (false)
123
+ # When true, the resulting Hash will be an ActiveSupport::HashWithIndifferentAccess
123
124
  #
124
- # @return [Hash]
125
+ # @return [Hash, ActiveSupport::HashWithIndifferentAccess]
125
126
  # The coerced Hash.
126
127
  def coerce_hash(value, options = {})
128
+ return if options[:allow_nil] && value.nil?
129
+
127
130
  hash_key_type = options[:key_type]
128
131
  hash_value_type = options[:value_type]
129
132
 
130
- return {} unless value.is_a?(Hash) || (defined?(Sequel::Postgres::JSONHash) && value.is_a?(Sequel::Postgres::JSONHash))
133
+ hash_class = options[:indifferent_access] ? ActiveSupport::HashWithIndifferentAccess : Hash
134
+ hash = hash_class.new
135
+
136
+ return hash unless value.is_a?(Hash) || (defined?(Sequel::Postgres::JSONHash) && value.is_a?(Sequel::Postgres::JSONHash))
131
137
 
132
- value.each_with_object({}) do |(key, value), coerced_hash|
138
+ value.each_with_object(hash) do |(key, value), coerced_hash|
133
139
  key_type = hash_key_type.respond_to?(:call) ? hash_key_type.call(key, value) : hash_key_type
134
- key = send("coerce_#{key_type}", key) if key_type
140
+ key = send(:"coerce_#{key_type}", key) if key_type
135
141
 
136
142
  value_type = hash_value_type.respond_to?(:call) ? hash_value_type.call(key, value) : hash_value_type
137
- value = send("coerce_#{value_type}", value) if value_type
143
+
144
+ # TODO: Refactor shared logic here and coerce_array to a method like `type, options = resolve_coercer_type_and_options`
145
+ if value_type.is_a?(Hash)
146
+ value_type_options = value_type
147
+ value_type = value_type[:type]
148
+ else
149
+ value_type_options = {}
150
+ end
151
+
152
+ value = send(:"coerce_#{value_type}", value, value_type_options) if value_type
153
+
138
154
  coerced_hash[key] = value
139
155
  end
140
156
  end
@@ -1,3 +1,3 @@
1
1
  module Gourami
2
- VERSION = "1.2.0".freeze
2
+ VERSION = "1.3.0".freeze
3
3
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gourami
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - TSMMark
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-26 00:00:00.000000000 Z
11
+ date: 2020-06-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.13'
19
+ version: 5.1.7
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.13'
26
+ version: 5.1.7
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: filewatcher
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -133,8 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
133
133
  - !ruby/object:Gem::Version
134
134
  version: '0'
135
135
  requirements: []
136
- rubyforge_project:
137
- rubygems_version: 2.4.6
136
+ rubygems_version: 3.0.4
138
137
  signing_key:
139
138
  specification_version: 4
140
139
  summary: Keep your Routes, Controllers and Models thin.