cinnamon_serial 2.1.1 → 2.1.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/.rubocop_todo.yml +1 -1
- data/.ruby-version +1 -1
- data/.travis.yml +1 -1
- data/CHANGELOG.md +7 -0
- data/Gemfile.lock +8 -2
- data/Guardfile +1 -1
- data/cinnamon_serial.gemspec +2 -0
- data/lib/cinnamon_serial/base.rb +1 -1
- data/lib/cinnamon_serial/resolver.rb +12 -4
- data/lib/cinnamon_serial/version.rb +1 -1
- data/spec/cinnamon_serial/resolver_spec.rb +97 -0
- data/spec/spec_helper.rb +10 -4
- metadata +33 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d35225e3e4f4abb62cd06761e5c234f6f3cbe2a05ade35e82ae94540c9217e65
|
4
|
+
data.tar.gz: 5c7ec11ad1c3fa6fe2ddb11a8b884025d03ba27290b2f0f77367b3d649b36b4f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 98072ebc41f42fd7f7e6c515a4e0a5928fc28219564592e46e6f7b6404b142374b9c85f19cebd0d356dbe1ca2a1536dab9984d0bda4d58ffbba32bf9f59203f3
|
7
|
+
data.tar.gz: e5af2239c945aeee36fcfc4f55061ea8df2a1e2e4d619b7624468c3ce38672130b42dfa3275581b613619e5b026d78b58fc074e140cb48a37f3c338617c349cc
|
data/.rubocop_todo.yml
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.6.
|
1
|
+
2.6.3
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
# 2.1.2 (May 1st, 2019)
|
2
|
+
|
3
|
+
Fixes:
|
4
|
+
|
5
|
+
* The serializer "as" option now supports serializing ActiveRecord::Relations in newer versions of Rails.
|
6
|
+
* Support the two parameter version of respond_to_missing? for classes which inherit from CinnamonSerial::Base.
|
7
|
+
|
1
8
|
# 2.1.1 (January 30th, 2019)
|
2
9
|
|
3
10
|
Maintenance Release
|
data/Gemfile.lock
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
cinnamon_serial (2.1.
|
4
|
+
cinnamon_serial (2.1.2)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
9
|
ansi (1.5.0)
|
10
10
|
ast (2.4.0)
|
11
|
+
byebug (11.0.1)
|
11
12
|
coderay (1.1.2)
|
12
13
|
diff-lcs (1.3)
|
13
14
|
docile (1.3.1)
|
@@ -47,6 +48,9 @@ GEM
|
|
47
48
|
pry (0.12.2)
|
48
49
|
coderay (~> 1.1.0)
|
49
50
|
method_source (~> 0.9.0)
|
51
|
+
pry-byebug (3.7.0)
|
52
|
+
byebug (~> 11.0)
|
53
|
+
pry (~> 0.10)
|
50
54
|
rainbow (3.0.0)
|
51
55
|
rb-fsevent (0.10.3)
|
52
56
|
rb-inotify (0.10.0)
|
@@ -93,10 +97,12 @@ PLATFORMS
|
|
93
97
|
DEPENDENCIES
|
94
98
|
cinnamon_serial!
|
95
99
|
guard-rspec (~> 4.7)
|
100
|
+
pry
|
101
|
+
pry-byebug (~> 3)
|
96
102
|
rspec (~> 3.8)
|
97
103
|
rubocop (~> 0.63.1)
|
98
104
|
simplecov (~> 0.16.1)
|
99
105
|
simplecov-console (~> 0.4.2)
|
100
106
|
|
101
107
|
BUNDLED WITH
|
102
|
-
1.17.
|
108
|
+
1.17.3
|
data/Guardfile
CHANGED
data/cinnamon_serial.gemspec
CHANGED
@@ -22,6 +22,8 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.required_ruby_version = '>= 2.3.8'
|
23
23
|
|
24
24
|
s.add_development_dependency('guard-rspec', '~>4.7')
|
25
|
+
s.add_development_dependency('pry')
|
26
|
+
s.add_development_dependency('pry-byebug', '~> 3')
|
25
27
|
s.add_development_dependency('rspec', '~> 3.8')
|
26
28
|
s.add_development_dependency('rubocop', '~>0.63.1')
|
27
29
|
s.add_development_dependency('simplecov', '~>0.16.1')
|
data/lib/cinnamon_serial/base.rb
CHANGED
@@ -118,12 +118,10 @@ module CinnamonSerial
|
|
118
118
|
# This will prevent endless cycles / loops.
|
119
119
|
return nil if presenter.klasses.include?(class_constant.to_s)
|
120
120
|
|
121
|
-
# We do not want to create a hard dependency on ActiveRecord/Rails in this gem,
|
122
|
-
# but we can still create a soft dependency in case it was included as a peer.
|
123
|
-
value = value.to_a if value.class.name == 'ActiveRecord::Relation'
|
124
|
-
|
125
121
|
new_klasses = presenter.klasses + Set[class_constant.to_s]
|
126
122
|
|
123
|
+
value = value_to_array_or_scalar(value)
|
124
|
+
|
127
125
|
if value.is_a?(Array)
|
128
126
|
value.map { |v| class_constant.new(v, presenter.opts, new_klasses) }
|
129
127
|
else
|
@@ -131,6 +129,16 @@ module CinnamonSerial
|
|
131
129
|
end
|
132
130
|
end
|
133
131
|
|
132
|
+
def value_to_array_or_scalar(value)
|
133
|
+
# We do not want to create a hard dependency on ActiveRecord/Rails in this gem,
|
134
|
+
# but we can still create a soft dependency in case it was included as a peer.
|
135
|
+
if Module.const_defined?('ActiveRecord') && value.is_a?(ActiveRecord::Relation)
|
136
|
+
value.to_a
|
137
|
+
else
|
138
|
+
value
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
134
142
|
def as_class_name
|
135
143
|
return nil unless as
|
136
144
|
|
@@ -0,0 +1,97 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# Copyright (c) 2018-present, Blue Marble Payroll, LLC
|
5
|
+
#
|
6
|
+
# This source code is licensed under the MIT license found in the
|
7
|
+
# LICENSE file in the root directory of this source tree.
|
8
|
+
#
|
9
|
+
|
10
|
+
require './spec/spec_helper'
|
11
|
+
require './spec/examples'
|
12
|
+
|
13
|
+
describe CinnamonSerial::Resolver do
|
14
|
+
let(:presented_employee) do
|
15
|
+
CinnamonSerial::Base.new(
|
16
|
+
OpenStruct.new(
|
17
|
+
name: 'employee',
|
18
|
+
manager: OpenStruct.new(id: 2, name: 'manager')
|
19
|
+
)
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
let(:presented_manager_employees_array) do
|
24
|
+
CinnamonSerial::Base.new(
|
25
|
+
OpenStruct.new(
|
26
|
+
name: 'manager',
|
27
|
+
employees: [
|
28
|
+
OpenStruct.new(id: 1, name: 'employee 1'),
|
29
|
+
OpenStruct.new(id: 2, name: 'employee 2')
|
30
|
+
]
|
31
|
+
)
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
35
|
+
let(:presented_manager_employees_active_record_relation) do
|
36
|
+
# Stub this out so this gem does not have to depends directly on ActiveRecord:
|
37
|
+
module ActiveRecord
|
38
|
+
class Relation
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
module CinnamonSerial
|
43
|
+
class ResolverSpecFakeRelation < ActiveRecord::Relation
|
44
|
+
def initialize(data)
|
45
|
+
@data = data
|
46
|
+
end
|
47
|
+
|
48
|
+
def to_a
|
49
|
+
@data
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
CinnamonSerial::Base.new(
|
55
|
+
OpenStruct.new(
|
56
|
+
name: 'manager',
|
57
|
+
employees: CinnamonSerial::ResolverSpecFakeRelation.new(
|
58
|
+
[
|
59
|
+
OpenStruct.new(id: 1, name: 'employee 1'),
|
60
|
+
OpenStruct.new(id: 2, name: 'employee 2')
|
61
|
+
]
|
62
|
+
)
|
63
|
+
)
|
64
|
+
)
|
65
|
+
end
|
66
|
+
|
67
|
+
describe '"as" resolving' do
|
68
|
+
let(:subject) { described_class.new(as: SimpleEmployeeSerializer) }
|
69
|
+
|
70
|
+
it 'single instance resolves to an instance of the specified class' do
|
71
|
+
value = subject.resolve(presented_employee, 'manager')
|
72
|
+
|
73
|
+
expect(value).to be_a SimpleEmployeeSerializer
|
74
|
+
expect(value.data).to eq('id' => 2, 'name' => 'manager')
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'wraps each element of an array in the presenter as specified' do
|
78
|
+
value = subject.resolve(presented_manager_employees_array, :employees)
|
79
|
+
|
80
|
+
expect(value).to be_a Array
|
81
|
+
expect(value.map(&:class).uniq).to eq [SimpleEmployeeSerializer]
|
82
|
+
|
83
|
+
expect(value[0].data).to eq('id' => 1, 'name' => 'employee 1')
|
84
|
+
expect(value[1].data).to eq('id' => 2, 'name' => 'employee 2')
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'wraps each element of an ActiveRecord::Relation in the presenter as specified' do
|
88
|
+
value = subject.resolve(presented_manager_employees_active_record_relation, :employees)
|
89
|
+
|
90
|
+
expect(value).to be_a Array
|
91
|
+
expect(value.map(&:class).uniq).to eq [SimpleEmployeeSerializer]
|
92
|
+
|
93
|
+
expect(value[0].data).to eq('id' => 1, 'name' => 'employee 1')
|
94
|
+
expect(value[1].data).to eq('id' => 2, 'name' => 'employee 2')
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -9,10 +9,16 @@
|
|
9
9
|
|
10
10
|
require 'date'
|
11
11
|
require 'pry'
|
12
|
+
require 'pry-byebug'
|
12
13
|
|
13
|
-
|
14
|
-
require 'simplecov
|
15
|
-
|
16
|
-
|
14
|
+
unless ENV['DISABLE_SIMPLECOV'] == 'true'
|
15
|
+
require 'simplecov'
|
16
|
+
require 'simplecov-console'
|
17
|
+
|
18
|
+
SimpleCov.formatter = SimpleCov::Formatter::Console
|
19
|
+
SimpleCov.start do
|
20
|
+
add_filter %r{\A/spec/}
|
21
|
+
end
|
22
|
+
end
|
17
23
|
|
18
24
|
require './lib/cinnamon_serial'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cinnamon_serial
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Ruggio
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-02
|
11
|
+
date: 2019-05-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: guard-rspec
|
@@ -24,6 +24,34 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '4.7'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pry
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pry-byebug
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3'
|
27
55
|
- !ruby/object:Gem::Dependency
|
28
56
|
name: rspec
|
29
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -112,6 +140,7 @@ files:
|
|
112
140
|
- lib/cinnamon_serial/version.rb
|
113
141
|
- spec/cinnamon_serial/base_spec.rb
|
114
142
|
- spec/cinnamon_serial/dsl_spec.rb
|
143
|
+
- spec/cinnamon_serial/resolver_spec.rb
|
115
144
|
- spec/examples.rb
|
116
145
|
- spec/spec_helper.rb
|
117
146
|
homepage: https://github.com/bluemarblepayroll/cinnamon_serial
|
@@ -133,12 +162,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
133
162
|
- !ruby/object:Gem::Version
|
134
163
|
version: '0'
|
135
164
|
requirements: []
|
136
|
-
rubygems_version: 3.0.
|
165
|
+
rubygems_version: 3.0.3
|
137
166
|
signing_key:
|
138
167
|
specification_version: 4
|
139
168
|
summary: Domain-specific language for serialization specification.
|
140
169
|
test_files:
|
141
170
|
- spec/cinnamon_serial/base_spec.rb
|
142
171
|
- spec/cinnamon_serial/dsl_spec.rb
|
172
|
+
- spec/cinnamon_serial/resolver_spec.rb
|
143
173
|
- spec/examples.rb
|
144
174
|
- spec/spec_helper.rb
|