deco_lite 0.1.1 → 0.2.2
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/CHANGELOG.md +8 -0
- data/Gemfile.lock +21 -17
- data/deco_lite.gemspec +1 -0
- data/lib/deco_lite/hash_loadable.rb +20 -7
- data/lib/deco_lite/model.rb +13 -4
- data/lib/deco_lite/options.rb +1 -1
- data/lib/deco_lite/version.rb +1 -1
- data/lib/deco_lite.rb +16 -3
- metadata +16 -3
- data/lib/deco_lite/field_informable.rb +0 -82
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6e8cab024f00d573f418f6da7931159d211392b7e67994b6e5d736fa87e6858d
|
4
|
+
data.tar.gz: 75d52762639bda61821152dd7ee071c0c29571de02835d9ca2309dc3f645a380
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 073e6f539cae726483f065c873ab6b21c11a0f29cb497998c66ad85c9f1775c4c973f675c4138c07d2b7158455cf819555ca3b550ea38c7e6b3811dfb2bf9780
|
7
|
+
data.tar.gz: f69bc6b7d1052172c9603c1b2a0b49cd13ee863217c2303b49dbafe86dd68e0b5def92184948b80efd8760b6735878ff0ddad2ecdbb5b01135c7cbc3241b4ee5
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
### 0.2.2
|
2
|
+
* Fix bug requiring support codez in lib/deco_lite.rb.
|
3
|
+
|
4
|
+
### 0.2.1
|
5
|
+
* changes
|
6
|
+
* Add mad_flatter gem runtime dependency.
|
7
|
+
* Refactor to let mad_flatter handle the Hash flattening.
|
8
|
+
|
1
9
|
### 0.1.1
|
2
10
|
* changes
|
3
11
|
* Update gems and especially rake gem version to squash CVE-2020-8130, see https://github.com/advisories/GHSA-jppv-gw3r-w3q8.
|
data/Gemfile.lock
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
deco_lite (0.
|
4
|
+
deco_lite (0.2.2)
|
5
5
|
activemodel (~> 7.0, >= 7.0.3.1)
|
6
6
|
activesupport (~> 7.0, >= 7.0.3.1)
|
7
7
|
immutable_struct_ex (~> 0.2.0)
|
8
|
+
mad_flatter (~> 1.0.0.pre.beta)
|
8
9
|
|
9
10
|
GEM
|
10
11
|
remote: https://rubygems.org/
|
@@ -24,20 +25,23 @@ GEM
|
|
24
25
|
docile (1.4.0)
|
25
26
|
i18n (1.12.0)
|
26
27
|
concurrent-ruby (~> 1.0)
|
27
|
-
immutable_struct_ex (0.2.
|
28
|
+
immutable_struct_ex (0.2.2)
|
28
29
|
json (2.6.2)
|
29
30
|
kwalify (0.7.2)
|
31
|
+
mad_flatter (1.0.1.pre.beta)
|
32
|
+
activesupport (~> 7.0, >= 7.0.3.1)
|
33
|
+
immutable_struct_ex (~> 0.2.0)
|
30
34
|
method_source (1.0.0)
|
31
|
-
minitest (5.16.
|
35
|
+
minitest (5.16.3)
|
32
36
|
parallel (1.22.1)
|
33
37
|
parser (3.1.2.1)
|
34
38
|
ast (~> 2.4.1)
|
35
|
-
pry (0.
|
39
|
+
pry (0.14.1)
|
36
40
|
coderay (~> 1.1)
|
37
41
|
method_source (~> 1.0)
|
38
|
-
pry-byebug (3.
|
42
|
+
pry-byebug (3.10.1)
|
39
43
|
byebug (~> 11.0)
|
40
|
-
pry (
|
44
|
+
pry (>= 0.13, < 0.15)
|
41
45
|
rainbow (3.1.1)
|
42
46
|
rake (13.0.6)
|
43
47
|
reek (6.1.1)
|
@@ -46,19 +50,19 @@ GEM
|
|
46
50
|
rainbow (>= 2.0, < 4.0)
|
47
51
|
regexp_parser (2.5.0)
|
48
52
|
rexml (3.2.5)
|
49
|
-
rspec (3.
|
50
|
-
rspec-core (~> 3.
|
51
|
-
rspec-expectations (~> 3.
|
52
|
-
rspec-mocks (~> 3.
|
53
|
-
rspec-core (3.
|
54
|
-
rspec-support (~> 3.
|
55
|
-
rspec-expectations (3.
|
53
|
+
rspec (3.11.0)
|
54
|
+
rspec-core (~> 3.11.0)
|
55
|
+
rspec-expectations (~> 3.11.0)
|
56
|
+
rspec-mocks (~> 3.11.0)
|
57
|
+
rspec-core (3.11.0)
|
58
|
+
rspec-support (~> 3.11.0)
|
59
|
+
rspec-expectations (3.11.0)
|
56
60
|
diff-lcs (>= 1.2.0, < 2.0)
|
57
|
-
rspec-support (~> 3.
|
58
|
-
rspec-mocks (3.
|
61
|
+
rspec-support (~> 3.11.0)
|
62
|
+
rspec-mocks (3.11.1)
|
59
63
|
diff-lcs (>= 1.2.0, < 2.0)
|
60
|
-
rspec-support (~> 3.
|
61
|
-
rspec-support (3.
|
64
|
+
rspec-support (~> 3.11.0)
|
65
|
+
rspec-support (3.11.0)
|
62
66
|
rubocop (1.35.0)
|
63
67
|
json (~> 2.3)
|
64
68
|
parallel (~> 1.10)
|
data/deco_lite.gemspec
CHANGED
@@ -36,6 +36,7 @@ Gem::Specification.new do |spec|
|
|
36
36
|
spec.add_runtime_dependency 'activemodel', '~> 7.0', '>= 7.0.3.1'
|
37
37
|
spec.add_runtime_dependency 'activesupport', '~> 7.0', '>= 7.0.3.1'
|
38
38
|
spec.add_runtime_dependency 'immutable_struct_ex', '~> 0.2.0'
|
39
|
+
spec.add_runtime_dependency 'mad_flatter', '~> 1.0.0.pre.beta'
|
39
40
|
spec.add_development_dependency 'bundler', '~> 2.2', '>= 2.2.17'
|
40
41
|
spec.add_development_dependency 'pry-byebug', '~> 3.9'
|
41
42
|
spec.add_development_dependency 'reek', '~> 6.1', '>= 6.1.1'
|
@@ -1,24 +1,37 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'mad_flatter'
|
3
4
|
require_relative 'field_assignable'
|
4
|
-
require_relative 'field_informable'
|
5
5
|
|
6
6
|
module DecoLite
|
7
7
|
# Provides methods to load and return information about a given hash.
|
8
8
|
module HashLoadable
|
9
9
|
include FieldAssignable
|
10
|
-
include FieldInformable
|
11
10
|
|
12
11
|
private
|
13
12
|
|
14
|
-
def load_hash(hash:,
|
13
|
+
def load_hash(hash:, deco_lite_options:)
|
15
14
|
raise ArgumentError, "Argument hash is not a Hash (#{hash.class})" unless hash.is_a? Hash
|
16
15
|
|
17
|
-
return if hash.blank?
|
16
|
+
return {} if hash.blank?
|
18
17
|
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
load_service_options = merge_with_load_service_options deco_lite_options: deco_lite_options
|
19
|
+
load_service.execute(hash: hash, options: load_service_options).tap do |h|
|
20
|
+
h.each_pair do |field_name, value|
|
21
|
+
create_field_accessor field_name: field_name, options: deco_lite_options
|
22
|
+
field_names << field_name
|
23
|
+
set_field_value(field_name: field_name, value: value, options: deco_lite_options)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def load_service
|
29
|
+
@load_service ||= MadFlatter::Service.new
|
30
|
+
end
|
31
|
+
|
32
|
+
def merge_with_load_service_options(deco_lite_options:)
|
33
|
+
load_service.options.to_h.merge \
|
34
|
+
deco_lite_options.to_h.slice(*MadFlatter::OptionsDefaultable::DEFAULT_OPTIONS.keys)
|
22
35
|
end
|
23
36
|
end
|
24
37
|
end
|
data/lib/deco_lite/model.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'active_model'
|
4
|
+
require_relative 'field_creatable'
|
4
5
|
require_relative 'field_requireable'
|
5
|
-
require_relative 'hashable'
|
6
6
|
require_relative 'hash_loadable'
|
7
|
+
require_relative 'hashable'
|
7
8
|
require_relative 'model_nameable'
|
8
9
|
require_relative 'optionable'
|
9
10
|
|
@@ -12,16 +13,17 @@ module DecoLite
|
|
12
13
|
# dynamic models that can be used as decorators.
|
13
14
|
class Model
|
14
15
|
include ActiveModel::Model
|
16
|
+
include FieldCreatable
|
15
17
|
include FieldRequireable
|
16
|
-
include Hashable
|
17
18
|
include HashLoadable
|
19
|
+
include Hashable
|
18
20
|
include ModelNameable
|
19
21
|
include Optionable
|
20
22
|
|
21
23
|
validate :validate_required_fields
|
22
24
|
|
23
25
|
def initialize(options: {})
|
24
|
-
@
|
26
|
+
@field_names = []
|
25
27
|
# Accept whatever options are sent, but make sure
|
26
28
|
# we have defaults set up. #options_with_defaults
|
27
29
|
# will merge options into OptionsDefaultable::DEFAULT_OPTIONS
|
@@ -37,9 +39,16 @@ module DecoLite
|
|
37
39
|
# options while loading, but also provide option customization
|
38
40
|
# of options when needed.
|
39
41
|
options = Options.with_defaults(options, defaults: self.options)
|
40
|
-
|
42
|
+
|
43
|
+
load_hash(hash: hash, deco_lite_options: options)
|
41
44
|
|
42
45
|
self
|
43
46
|
end
|
47
|
+
|
48
|
+
attr_reader :field_names
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
attr_writer :field_names
|
44
53
|
end
|
45
54
|
end
|
data/lib/deco_lite/options.rb
CHANGED
data/lib/deco_lite/version.rb
CHANGED
data/lib/deco_lite.rb
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
require_relative 'deco_lite/field_assignable'
|
4
|
+
require_relative 'deco_lite/field_conflictable'
|
5
|
+
require_relative 'deco_lite/field_creatable'
|
6
|
+
require_relative 'deco_lite/field_requireable'
|
7
|
+
require_relative 'deco_lite/field_retrievable'
|
8
|
+
require_relative 'deco_lite/fields_optionable'
|
9
|
+
require_relative 'deco_lite/hash_loadable'
|
10
|
+
require_relative 'deco_lite/hashable'
|
11
|
+
require_relative 'deco_lite/model'
|
12
|
+
require_relative 'deco_lite/model_nameable'
|
13
|
+
require_relative 'deco_lite/namespace_optionable'
|
14
|
+
require_relative 'deco_lite/optionable'
|
15
|
+
require_relative 'deco_lite/options'
|
16
|
+
require_relative 'deco_lite/options_defaultable'
|
17
|
+
require_relative 'deco_lite/options_validatable'
|
18
|
+
require_relative 'deco_lite/version'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deco_lite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gene M. Angelo, Jr.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-08-
|
11
|
+
date: 2022-08-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -64,6 +64,20 @@ dependencies:
|
|
64
64
|
- - "~>"
|
65
65
|
- !ruby/object:Gem::Version
|
66
66
|
version: 0.2.0
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: mad_flatter
|
69
|
+
requirement: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - "~>"
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: 1.0.0.pre.beta
|
74
|
+
type: :runtime
|
75
|
+
prerelease: false
|
76
|
+
version_requirements: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - "~>"
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: 1.0.0.pre.beta
|
67
81
|
- !ruby/object:Gem::Dependency
|
68
82
|
name: bundler
|
69
83
|
requirement: !ruby/object:Gem::Requirement
|
@@ -247,7 +261,6 @@ files:
|
|
247
261
|
- lib/deco_lite/field_assignable.rb
|
248
262
|
- lib/deco_lite/field_conflictable.rb
|
249
263
|
- lib/deco_lite/field_creatable.rb
|
250
|
-
- lib/deco_lite/field_informable.rb
|
251
264
|
- lib/deco_lite/field_requireable.rb
|
252
265
|
- lib/deco_lite/field_retrievable.rb
|
253
266
|
- lib/deco_lite/fields_optionable.rb
|
@@ -1,82 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module DecoLite
|
4
|
-
# Creates and returns a hash given the parameters that are used to
|
5
|
-
# dynamically create fields and assign values to a model.
|
6
|
-
module FieldInformable
|
7
|
-
# This method simply navigates the payload hash received and creates qualified
|
8
|
-
# hash key names that can be used to verify/map to our field names in this model.
|
9
|
-
# This can be used to qualify nested hash fields and saves us some headaches
|
10
|
-
# if there are nested field names with the same name:
|
11
|
-
#
|
12
|
-
# given:
|
13
|
-
#
|
14
|
-
# hash = {
|
15
|
-
# first_name: 'first_name',
|
16
|
-
# ...
|
17
|
-
# address: {
|
18
|
-
# street: '',
|
19
|
-
# ...
|
20
|
-
# }
|
21
|
-
# }
|
22
|
-
#
|
23
|
-
# get_field_info(hash: hash) #=>
|
24
|
-
#
|
25
|
-
# {
|
26
|
-
# :first_name=>{:field_name=>:first_name, :dig=>[]},
|
27
|
-
# ...
|
28
|
-
# :address_street=>{:field_name=>:street, :dig=>[:address]},
|
29
|
-
# ...
|
30
|
-
# }
|
31
|
-
#
|
32
|
-
# The generated, qualified field names expected to map to our model, because we named
|
33
|
-
# them as such.
|
34
|
-
#
|
35
|
-
# :field_name is the actual, unqualified field name found in the payload hash sent.
|
36
|
-
# :dig is the hash key by which :field_name can be found in the payload hash if need be -
|
37
|
-
# retained across recursive calls.
|
38
|
-
def get_field_info(hash:, namespace: nil, dig: [], field_info: {})
|
39
|
-
hash.each do |key, value|
|
40
|
-
if value.is_a? Hash
|
41
|
-
get_field_info hash: value,
|
42
|
-
namespace: namespace,
|
43
|
-
dig: dig << key,
|
44
|
-
field_info: field_info
|
45
|
-
dig.pop
|
46
|
-
else
|
47
|
-
set_field_info!(field_info: field_info,
|
48
|
-
key: key,
|
49
|
-
namespace: namespace,
|
50
|
-
dig: dig)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
field_info
|
55
|
-
end
|
56
|
-
|
57
|
-
def set_field_info!(field_info:, key:, namespace:, dig:)
|
58
|
-
field_key = [namespace, *dig, key].compact.join('_').to_sym
|
59
|
-
|
60
|
-
field_info[field_key] = {
|
61
|
-
field_name: key,
|
62
|
-
dig: dig.dup
|
63
|
-
}
|
64
|
-
end
|
65
|
-
|
66
|
-
def merge_field_info!(field_info:)
|
67
|
-
@field_info.merge!(field_info)
|
68
|
-
end
|
69
|
-
|
70
|
-
def field_names
|
71
|
-
field_info&.keys || []
|
72
|
-
end
|
73
|
-
|
74
|
-
attr_reader :field_info
|
75
|
-
|
76
|
-
private
|
77
|
-
|
78
|
-
attr_writer :field_info
|
79
|
-
|
80
|
-
module_function :get_field_info, :set_field_info!, :merge_field_info!
|
81
|
-
end
|
82
|
-
end
|