serialized-hashie 1.0.1 → 1.1.4

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
  SHA256:
3
- metadata.gz: 3b6cb66d2cf6a88d0c9e5cfb7604f377a771c841acf684220d613e5437fdd91d
4
- data.tar.gz: 431e698faa570e3b7d01aaedff1da2e10deacb7b8eb48650f4bf616b91bbd256
3
+ metadata.gz: 300103bd38c44cb166420b1acc239e8ef20bc0f1c7d9f4bf12e929834a44666c
4
+ data.tar.gz: daaf36066c71f252d3d33f38f3ac6bcab310a1491b18badad7f985d9fbad1a3c
5
5
  SHA512:
6
- metadata.gz: 5520e6b7e143d19c05c7b80098df83efd68885ac481fd89ba188046e77ff9373ddb55fe87c93a87b15c295887e11c9850f1d4d66245b28e3b4388a06b2e20dc9
7
- data.tar.gz: 70a503e80d67008b47681ae3889afe73dd2f60459532052d761e652c5681a3038056a7d42143fc8314d6c22832eb4b57505e78218a9f8d280c3f7b38d48965d1
6
+ metadata.gz: 4eb43c83b54941b0b81628aa37441741a931205b73ce8c0f52e5d0ffc260b0fc1e845795748c0745a8faf108a2ad13413ed696f88cb52ab1cea9b5da32ed7f80
7
+ data.tar.gz: bfc8aa01bfdbe685901ab35952ad5ba437570b4bdc6d50b1fabe3780b2d133166398d8024888aed392787096271f7f41f6a2f64afa2f9a9d9620b80eb634babc
@@ -16,6 +16,6 @@ jobs:
16
16
  ruby-version: ${{ matrix.ruby_version }}
17
17
  - uses: actions/checkout@v2
18
18
  - name: Install dependencies
19
- run: bundle install
19
+ run: bundle install && bundle exec appraisal install
20
20
  - name: Run tests
21
- run: bundle exec rspec
21
+ run: bundle exec appraisal rspec
@@ -15,7 +15,10 @@ jobs:
15
15
  - name: Set up Ruby 2.6
16
16
  uses: actions/setup-ruby@v1
17
17
  with:
18
- version: 2.6.x
18
+ ruby-version: 2.6.x
19
+
20
+ - name: Export version from tag name
21
+ run: echo "${GITHUB_REF/refs\/tags\//}" > VERSION
19
22
 
20
23
  - name: Build Gem
21
24
  run: gem build *.gemspec
data/.gitignore CHANGED
@@ -1,5 +1,6 @@
1
1
  /.bundle/
2
2
  /.yardoc
3
+ /Gemfile.lock
3
4
  /_yardoc/
4
5
  /coverage/
5
6
  /doc/
@@ -7,5 +8,10 @@
7
8
  /spec/reports/
8
9
  /tmp/
9
10
 
11
+ # Appraisals generated Gemfiles
12
+ /gemfiles/
13
+
10
14
  # rspec failure tracking
11
15
  .rspec_status
16
+ .rubocop-http*
17
+ VERSION
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ appraise 'json-1.8' do
4
+ gem 'json', '~> 1.8.0'
5
+ end
6
+
7
+ appraise 'json-2' do
8
+ gem 'json', '~> 2.0'
9
+ end
@@ -0,0 +1,20 @@
1
+ Copyright 2020 Krystal Hosting Ltd
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -19,6 +19,10 @@ module SerializedHashie
19
19
  @dump_extensions ||= Extensions.new
20
20
  end
21
21
 
22
+ def load_hash_extensions
23
+ @load_hash_extensions ||= Extensions.new
24
+ end
25
+
22
26
  end
23
27
 
24
28
  end
@@ -10,22 +10,13 @@ module SerializedHashie
10
10
  class << self
11
11
 
12
12
  def dump(obj)
13
- obj = obj.reject { |_, v| blank?(v) }
14
- obj.each do |key, value|
15
- if value.is_a?(Array)
16
- obj[key] = value.reject { |v| blank?(v) }
17
- end
18
-
19
- obj[key] = SerializedHashie.dump_extensions.run(obj[key])
20
- end
21
- obj.to_h.to_json
13
+ hash = dump_hash(obj)
14
+ hash.to_json
22
15
  end
23
16
 
24
17
  def load(raw_hash)
25
18
  hash = JSON.parse(presence(raw_hash) || '{}')
26
- hash.each do |key, value|
27
- hash[key] = SerializedHashie.load_extensions.run(value)
28
- end
19
+ hash = load_hash(hash)
29
20
  new(hash)
30
21
  end
31
22
 
@@ -42,6 +33,52 @@ module SerializedHashie
42
33
  blank?(value) ? nil : value
43
34
  end
44
35
 
36
+ def dump_hash(hash)
37
+ hash = hash.transform_values do |value|
38
+ dump_value(value)
39
+ end
40
+ hash.reject { |_, v| blank?(v) }
41
+ end
42
+
43
+ def dump_value(value)
44
+ if blank?(value)
45
+ return nil
46
+ end
47
+
48
+ if value.is_a?(::Hash)
49
+ return dump_hash(value)
50
+ end
51
+
52
+ if value.is_a?(::Array)
53
+ return value.map { |v| dump_value(v) }.compact
54
+ end
55
+
56
+ SerializedHashie.dump_extensions.run(value)
57
+ end
58
+
59
+ def load_hash(hash)
60
+ hash.transform_values do |value|
61
+ load_value(value)
62
+ end
63
+ end
64
+
65
+ def load_value(value)
66
+ if value.is_a?(::Hash)
67
+ hash = SerializedHashie.load_hash_extensions.run(value)
68
+
69
+ # If the result is still a hash, we'll return that here
70
+ return load_hash(hash) if hash.is_a?(::Hash)
71
+
72
+ # If the result is not a hash, we'll just return whatever
73
+ # was returned as a normal value.
74
+ return load_value(hash)
75
+ end
76
+
77
+ return value.map { |v| load_value(v) } if value.is_a?(Array)
78
+
79
+ SerializedHashie.load_extensions.run(value)
80
+ end
81
+
45
82
  end
46
83
 
47
84
  end
@@ -2,6 +2,11 @@
2
2
 
3
3
  module SerializedHashie
4
4
 
5
- VERSION = '1.0.1'
5
+ VERSION_FILE_ROOT = File.expand_path('../../VERSION', __dir__)
6
+ if File.file?(VERSION_FILE_ROOT)
7
+ VERSION = File.read(VERSION_FILE_ROOT).strip.delete_prefix('v')
8
+ else
9
+ VERSION = '0.0.0.dev'
10
+ end
6
11
 
7
12
  end
@@ -7,10 +7,11 @@ Gem::Specification.new do |spec|
7
7
  spec.version = SerializedHashie::VERSION
8
8
  spec.authors = ['Adam Cooke']
9
9
  spec.email = ['adam@krystal.uk']
10
-
11
10
  spec.summary = 'Helpers to serialize data into ActiveRecord models as JSON and returning a Hashie::Mash'
12
11
  spec.description = spec.summary
13
12
  spec.required_ruby_version = Gem::Requirement.new('>= 2.3.0')
13
+ spec.licenses = ['MIT']
14
+ spec.homepage = 'https://github.com/krystal/serialized-hashie'
14
15
 
15
16
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
16
17
  `git ls-files -z`.split("\x0").reject { |f| f.match(/^(test|spec|features)\//) }
@@ -19,6 +20,8 @@ Gem::Specification.new do |spec|
19
20
  spec.executables = spec.files.grep(/^exe\//) { |f| File.basename(f) }
20
21
  spec.require_paths = ['lib']
21
22
 
23
+ spec.add_development_dependency 'appraisal', '~> 2.3'
24
+
22
25
  spec.add_runtime_dependency 'hashie', '>= 4.0', '< 5.0'
23
- spec.add_runtime_dependency 'json', '>= 2.0', '< 3.0'
26
+ spec.add_runtime_dependency 'json', '>= 1.8', '< 3.0'
24
27
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: serialized-hashie
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Cooke
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-21 00:00:00.000000000 Z
11
+ date: 2020-08-05 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: appraisal
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.3'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: hashie
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -36,7 +50,7 @@ dependencies:
36
50
  requirements:
37
51
  - - ">="
38
52
  - !ruby/object:Gem::Version
39
- version: '2.0'
53
+ version: '1.8'
40
54
  - - "<"
41
55
  - !ruby/object:Gem::Version
42
56
  version: '3.0'
@@ -46,7 +60,7 @@ dependencies:
46
60
  requirements:
47
61
  - - ">="
48
62
  - !ruby/object:Gem::Version
49
- version: '2.0'
63
+ version: '1.8'
50
64
  - - "<"
51
65
  - !ruby/object:Gem::Version
52
66
  version: '3.0'
@@ -62,8 +76,9 @@ files:
62
76
  - ".github/workflows/package.yml"
63
77
  - ".gitignore"
64
78
  - ".rubocop.yml"
79
+ - Appraisals
65
80
  - Gemfile
66
- - Gemfile.lock
81
+ - MIT-LICENSE
67
82
  - README.md
68
83
  - bin/console
69
84
  - bin/setup
@@ -72,8 +87,9 @@ files:
72
87
  - lib/serialized_hashie/hash.rb
73
88
  - lib/serialized_hashie/version.rb
74
89
  - serialized-hashie.gemspec
75
- homepage:
76
- licenses: []
90
+ homepage: https://github.com/krystal/serialized-hashie
91
+ licenses:
92
+ - MIT
77
93
  metadata: {}
78
94
  post_install_message:
79
95
  rdoc_options: []
@@ -1,54 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- serialized-hashie (1.0.1)
5
- hashie (>= 4.0, < 5.0)
6
- json (>= 2.0, < 3.0)
7
-
8
- GEM
9
- remote: https://rubygems.org/
10
- specs:
11
- ast (2.4.0)
12
- diff-lcs (1.3)
13
- hashie (4.1.0)
14
- json (2.1.0)
15
- parallel (1.19.1)
16
- parser (2.7.1.2)
17
- ast (~> 2.4.0)
18
- rainbow (3.0.0)
19
- rake (12.3.3)
20
- rexml (3.2.4)
21
- rspec (3.9.0)
22
- rspec-core (~> 3.9.0)
23
- rspec-expectations (~> 3.9.0)
24
- rspec-mocks (~> 3.9.0)
25
- rspec-core (3.9.2)
26
- rspec-support (~> 3.9.3)
27
- rspec-expectations (3.9.2)
28
- diff-lcs (>= 1.2.0, < 2.0)
29
- rspec-support (~> 3.9.0)
30
- rspec-mocks (3.9.1)
31
- diff-lcs (>= 1.2.0, < 2.0)
32
- rspec-support (~> 3.9.0)
33
- rspec-support (3.9.3)
34
- rubocop (0.83.0)
35
- parallel (~> 1.10)
36
- parser (>= 2.7.0.1)
37
- rainbow (>= 2.2.2, < 4.0)
38
- rexml
39
- ruby-progressbar (~> 1.7)
40
- unicode-display_width (>= 1.4.0, < 2.0)
41
- ruby-progressbar (1.10.1)
42
- unicode-display_width (1.7.0)
43
-
44
- PLATFORMS
45
- ruby
46
-
47
- DEPENDENCIES
48
- rake (~> 12.0)
49
- rspec (~> 3.0)
50
- rubocop
51
- serialized-hashie!
52
-
53
- BUNDLED WITH
54
- 2.1.4