porridge 0.2.2 → 0.3.0

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,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cee1cdc29d2dcb795df3b83fa7e2a4cd5b403571fb2b9dfae0d7e12ff7b9015c
4
- data.tar.gz: 6bde07e6e0ef0075cb20094ea7efe9be76aa8e08627f9ad981493c98db4f0d70
3
+ metadata.gz: 503570f42399fbe71c6029ae9f0de4571b03b743c4f325225317668389b115c2
4
+ data.tar.gz: 44b8eb58dde1f5e238dc308cc2274277a8139417fb7eac578a3cab140c24d15f
5
5
  SHA512:
6
- metadata.gz: a3c723fa46f164ba9aebf6b1f807899fbe82d42e333e55ace9a332062a4c22e5596b5d1c5ab1477ed9ec0676986fefd6797b8bd0d1da4d1b3d27380be08183a3
7
- data.tar.gz: a34e07209b991cef3226aea3ada8838e0ee31c2bca76858e315d5e6cd45f42a3e4dc005cd56496dd8870de030b9f42836c4a375a487353e45cb4e34b04815461
6
+ metadata.gz: 1428bc5610b0f3bd3ac28aa121154ba792f2dfae650ff93223427f1b21fce053e5bb0393da543fef2210b371f94d4d8277173fcd3151f89e7ec1a4c4b4874041
7
+ data.tar.gz: dd492f2c477bee6125c025f73b0450f636deaf5578949e434479a363b18e75f11719083213922f6fee8cfa7ce09446b66d8ea512e2bffb80bc11aaa04ce314fb
data/.idea/porridge.iml CHANGED
@@ -11,7 +11,7 @@
11
11
  </content>
12
12
  <orderEntry type="inheritedJdk" />
13
13
  <orderEntry type="sourceFolder" forTests="false" />
14
- <orderEntry type="library" scope="PROVIDED" name="activesupport (v7.0.1, rbenv: 3.0.0) [gem]" level="application" />
14
+ <orderEntry type="library" scope="PROVIDED" name="activesupport (v6.1.4.4, rbenv: 3.0.0) [gem]" level="application" />
15
15
  <orderEntry type="library" scope="PROVIDED" name="ast (v2.4.2, rbenv: 3.0.0) [gem]" level="application" />
16
16
  <orderEntry type="library" scope="PROVIDED" name="bundler (v2.2.25, rbenv: 3.0.0) [gem]" level="application" />
17
17
  <orderEntry type="library" scope="PROVIDED" name="byebug (v11.1.3, rbenv: 3.0.0) [gem]" level="application" />
@@ -42,26 +42,27 @@
42
42
  <orderEntry type="library" scope="PROVIDED" name="simplecov_json_formatter (v0.1.3, rbenv: 3.0.0) [gem]" level="application" />
43
43
  <orderEntry type="library" scope="PROVIDED" name="tzinfo (v2.0.4, rbenv: 3.0.0) [gem]" level="application" />
44
44
  <orderEntry type="library" scope="PROVIDED" name="unicode-display_width (v2.1.0, rbenv: 3.0.0) [gem]" level="application" />
45
+ <orderEntry type="library" scope="PROVIDED" name="zeitwerk (v2.5.3, rbenv: 3.0.0) [gem]" level="application" />
45
46
  </component>
46
47
  <component name="RakeTasksCache">
47
48
  <option name="myRootTask">
48
49
  <RakeTaskImpl id="rake">
49
50
  <subtasks>
50
- <RakeTaskImpl description="Build porridge-0.2.0.gem into the pkg directory" fullCommand="build" id="build" />
51
+ <RakeTaskImpl description="Build porridge-0.2.2.gem into the pkg directory" fullCommand="build" id="build" />
51
52
  <RakeTaskImpl id="build">
52
53
  <subtasks>
53
- <RakeTaskImpl description="Generate SHA512 checksum if porridge-0.2.0.gem into the checksums directory" fullCommand="build:checksum" id="checksum" />
54
+ <RakeTaskImpl description="Generate SHA512 checksum if porridge-0.2.2.gem into the checksums directory" fullCommand="build:checksum" id="checksum" />
54
55
  </subtasks>
55
56
  </RakeTaskImpl>
56
57
  <RakeTaskImpl description="Remove any temporary products" fullCommand="clean" id="clean" />
57
58
  <RakeTaskImpl description="Remove any generated files" fullCommand="clobber" id="clobber" />
58
- <RakeTaskImpl description="Build and install porridge-0.2.0.gem into system gems" fullCommand="install" id="install" />
59
+ <RakeTaskImpl description="Build and install porridge-0.2.2.gem into system gems" fullCommand="install" id="install" />
59
60
  <RakeTaskImpl id="install">
60
61
  <subtasks>
61
- <RakeTaskImpl description="Build and install porridge-0.2.0.gem into system gems without network access" fullCommand="install:local" id="local" />
62
+ <RakeTaskImpl description="Build and install porridge-0.2.2.gem into system gems without network access" fullCommand="install:local" id="local" />
62
63
  </subtasks>
63
64
  </RakeTaskImpl>
64
- <RakeTaskImpl description="Create tag v0.2.0 and build and push porridge-0.2.0.gem to rubygems.org" fullCommand="release[remote]" id="release[remote]" />
65
+ <RakeTaskImpl description="Create tag v0.2.2 and build and push porridge-0.2.2.gem to rubygems.org" fullCommand="release[remote]" id="release[remote]" />
65
66
  <RakeTaskImpl description="Run RuboCop" fullCommand="rubocop" id="rubocop" />
66
67
  <RakeTaskImpl id="rubocop">
67
68
  <subtasks>
data/CHANGELOG.md CHANGED
@@ -1,6 +1,18 @@
1
1
  ## [Unreleased]
2
2
 
3
- ## [0.2.1] - 2022-01-19
3
+ ## [0.3.0] - 2022-01-21
4
+
5
+ ### Added
6
+
7
+ - Added `Factory#attributes_field_serializer` to allow easy definition of multiple attributes at a time in serializer definition classes.
8
+ - Added `Factory#attribute_field_extractor` to simplify using either a `custom_extraction` or a `from_name_extractor`.
9
+
10
+ ### Fixed
11
+
12
+ - Fixed bug where method alises in `Factory` were not respecting an overriden "source" method.
13
+ - Fixed bug where `ArraySerializer` counted hashes as arrays. Note that `ArraySerializer` **no longer counts `ActiveRecord::Relation` instances as arrays.** You must subclass `ArraySerializer` to attain this functionality.
14
+
15
+ ## [0.2.2] - 2022-01-19
4
16
 
5
17
  ### Changed
6
18
 
@@ -14,7 +26,7 @@
14
26
 
15
27
  ## [0.2.0] - 2022-01-19
16
28
 
17
- This is the initial functional release of the gem. Extractors, serializers, fields, field policies, and an elegant DSL over top were implemented added.
29
+ This is the initial functional release of the gem. Extractors, serializers, fields, field policies, and an elegant DSL over top were implemented.
18
30
 
19
31
  ## [0.1.0] - 2022-01-16
20
32
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- porridge (0.2.1)
4
+ porridge (0.3.0)
5
5
  activesupport (~> 6.0)
6
6
 
7
7
  GEM
@@ -43,7 +43,7 @@ module Porridge
43
43
  # @param object the object to check.
44
44
  # @return [Boolean] +true+ if the given object functions like an array; +false+ if otherwise.
45
45
  def array?(object)
46
- object.respond_to? :map
46
+ object.is_a? Array
47
47
  end
48
48
 
49
49
  private
@@ -35,14 +35,24 @@ module Porridge
35
35
  extractor callback
36
36
  end
37
37
 
38
+ def attribute_extractor(name: nil, callback: nil, &block)
39
+ custom_extractor(callback || block) || from_name_extractor(name)
40
+ end
41
+
38
42
  def association_extractor(serializer:, extractor: nil, extraction_name: nil, callback: nil, &block)
39
43
  extractor SerializingExtractor.new(
40
- extractor || custom_extractor(callback) || custom_extractor(block) || from_name_extractor(extraction_name),
44
+ extractor || attribute_extractor(name: extraction_name, callback: callback, &block),
41
45
  serializer
42
46
  )
43
47
  end
44
- alias belongs_to_extractor association_extractor
45
- alias has_many_extractor association_extractor
48
+
49
+ def belongs_to_extractor(...)
50
+ association_extractor(...)
51
+ end
52
+
53
+ def has_many_extractor(...) # rubocop:disable Naming/PredicateName
54
+ association_extractor(...)
55
+ end
46
56
 
47
57
  def serializer(base)
48
58
  return nil if base.nil?
@@ -54,27 +64,42 @@ module Porridge
54
64
  def chain_serializer(*bases)
55
65
  serializer ChainSerializer.new(*bases)
56
66
  end
57
- alias serializers chain_serializer
67
+
68
+ def serializers(...)
69
+ chain_serializer(...)
70
+ end
58
71
 
59
72
  def for_extracted_serializer(serializer, extractor)
60
73
  serializer SerializerForExtracted.new(serializer, extractor)
61
74
  end
62
- alias serializer_for_extracted for_extracted_serializer
75
+
76
+ def serializer_for_extracted(...)
77
+ for_extracted_serializer(...)
78
+ end
63
79
 
64
80
  def field_serializer(name, extractor)
65
81
  serializer FieldSerializer.new(name, extractor)
66
82
  end
67
83
 
68
84
  def attribute_field_serializer(name, callback = nil, extraction_name: nil, &block)
69
- extractor = custom_extractor(callback || block) || from_name_extractor(extraction_name || name)
70
- field_serializer(name, extractor)
85
+ field_serializer(name, attribute_extractor(name: extraction_name || name, callback: callback, &block))
86
+ end
87
+
88
+ def attributes_field_serializer(*names)
89
+ serializers(*names.map { |name| attribute_field_serializer(name) })
71
90
  end
72
91
 
73
92
  def association_field_serializer(name, options = {}, &block)
74
93
  options[:extraction_name] ||= name
75
94
  field_serializer(name, association_extractor(**options, &block))
76
95
  end
77
- alias belongs_to_field_serializer association_field_serializer
78
- alias has_many_field_serializer association_field_serializer
96
+
97
+ def belongs_to_field_serializer(...)
98
+ association_field_serializer(...)
99
+ end
100
+
101
+ def has_many_field_serializer(...) # rubocop:disable Naming/PredicateName
102
+ association_field_serializer(...)
103
+ end
79
104
  end
80
105
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Porridge
4
- VERSION = '0.2.2'
4
+ VERSION = '0.3.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: porridge
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jacob
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-01-19 00:00:00.000000000 Z
11
+ date: 2022-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: byebug