porridge 0.2.2 → 0.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
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