blueprinter-rb 1.0.0 → 1.1.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: f5dc41937cf43cc99d29af28de50ff368508ecca87befd71e83542a15df05739
4
- data.tar.gz: a9ee87c939a1e5ffacd3def7cf61ceb2ca7cf36ec27e7d524fcf3ff9e944c276
3
+ metadata.gz: 6cedf7e86942f29ebe844c7508ba83667806c21abbdc74e312dbb7433b51bef0
4
+ data.tar.gz: 981f7a01849467cdfe8ba6de60a2df5831d34e557fb970141b6db44acd896cdb
5
5
  SHA512:
6
- metadata.gz: 52bc482f9deacc92ad27442d3f972c559c48a64f84c01f23f8d278faec1e16abd2537760378a33c99bdfeb2062e1b95bdaadc5603038968ebd99731ce051fdd0
7
- data.tar.gz: 0216cb660e0a44f80a9b027162046daaf88565a87fd03bd5a0bcac9952b16daead6deb8717d2f9ec0c54617550b51ce3e2dafb7c964d9152c2ae5ee2483d4263
6
+ metadata.gz: 78fed69543a40525d34a082a938953a6bc000c01d60a34d80fc4bc82fd6d072178fa912f43c62de7fc49c32a1281a133724609f819ab3ab8980f57d0dacd2923
7
+ data.tar.gz: 4f0e61cc2ee7f6592dd083cdb0a6971bcd713e6ea6ee13cbc45ff85718bab3cc57d7aee98ff450b07103d2bc73fce90c28413d3f0d650641e3d35e907ea37073
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Blueprinter
4
4
  class Configuration
5
- attr_accessor :association_default, :datetime_format, :deprecations, :field_default, :generator, :if, :method, :sort_fields_by, :unless, :extractor_default, :default_transformers
5
+ attr_accessor :association_default, :datetime_format, :deprecations, :field_default, :generator, :if, :method, :sort_fields_by, :unless, :extractor_default, :default_transformers, :custom_array_like_classes
6
6
 
7
7
  VALID_CALLABLES = %i(if unless).freeze
8
8
 
@@ -18,6 +18,15 @@ module Blueprinter
18
18
  @unless = nil
19
19
  @extractor_default = AutoExtractor
20
20
  @default_transformers = []
21
+ @custom_array_like_classes = []
22
+ end
23
+
24
+ def array_like_classes
25
+ @array_like_classes ||= [
26
+ Array,
27
+ defined?(ActiveRecord::Relation) && ActiveRecord::Relation,
28
+ *custom_array_like_classes
29
+ ].compact
21
30
  end
22
31
 
23
32
  def jsonify(blob)
@@ -3,13 +3,11 @@
3
3
  module Blueprinter
4
4
  module TypeHelpers
5
5
  private
6
- def active_record_relation?(object)
7
- !!(defined?(ActiveRecord::Relation) &&
8
- object.is_a?(ActiveRecord::Relation))
9
- end
10
6
 
11
7
  def array_like?(object)
12
- object.is_a?(Array) || active_record_relation?(object)
8
+ Blueprinter.configuration.array_like_classes.any? do |klass|
9
+ object.is_a?(klass)
10
+ end
13
11
  end
14
12
  end
15
13
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Blueprinter
4
- VERSION = '1.0.0'
4
+ VERSION = '1.1.0'
5
5
  end
@@ -28,7 +28,9 @@ module Blueprinter
28
28
  fields, excluded_fields = sortable_fields(view_name)
29
29
  sorted_fields = sort_by_definition ? sort_by_def(view_name, fields) : fields.values.sort_by(&:name)
30
30
 
31
- (identifier_fields + sorted_fields).reject { |field| excluded_fields.include?(field.name) }
31
+ (identifier_fields + sorted_fields).tap do |fields|
32
+ fields.reject! { |field| excluded_fields.include?(field.name) }
33
+ end
32
34
  end
33
35
 
34
36
  def transformers(view_name)
@@ -49,15 +51,15 @@ module Blueprinter
49
51
  # @return [Array<(Hash, Hash<String, NilClass>)>] fields, excluded_fields
50
52
  def sortable_fields(view_name)
51
53
  excluded_fields = {}
52
- fields = views[:default].fields
54
+ fields = views[:default].fields.clone
53
55
  views[view_name].included_view_names.each do |included_view_name|
54
56
  next if view_name == included_view_name
55
57
 
56
58
  view_fields, view_excluded_fields = sortable_fields(included_view_name)
57
- fields = merge_fields(fields, view_fields)
59
+ fields.merge!(view_fields)
58
60
  excluded_fields.merge!(view_excluded_fields)
59
61
  end
60
- fields = merge_fields(fields, views[view_name].fields)
62
+ fields.merge!(views[view_name].fields) unless view_name == :default
61
63
 
62
64
  views[view_name].excluded_field_names.each { |name| excluded_fields[name] = nil }
63
65
 
@@ -82,9 +84,5 @@ module Blueprinter
82
84
  ordered_fields[definition.name] = fields[definition.name]
83
85
  end
84
86
  end
85
-
86
- def merge_fields(source_fields, included_fields)
87
- source_fields.merge included_fields
88
- end
89
87
  end
90
88
  end
metadata CHANGED
@@ -1,59 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blueprinter-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
- - Adam Hess
8
- - Derek Carter
9
7
  - Ritikesh G
10
8
  autorequire:
11
9
  bindir: bin
12
10
  cert_chain: []
13
- date: 2023-01-05 00:00:00.000000000 Z
11
+ date: 2023-02-03 00:00:00.000000000 Z
14
12
  dependencies:
15
13
  - !ruby/object:Gem::Dependency
16
- name: factory_bot
14
+ name: oj
17
15
  requirement: !ruby/object:Gem::Requirement
18
16
  requirements:
19
17
  - - "~>"
20
18
  - !ruby/object:Gem::Version
21
- version: '6.2'
22
- type: :development
19
+ version: '3.13'
20
+ type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
23
  requirements:
26
24
  - - "~>"
27
25
  - !ruby/object:Gem::Version
28
- version: '6.2'
26
+ version: '3.13'
29
27
  - !ruby/object:Gem::Dependency
30
- name: oj
28
+ name: yajl-ruby
31
29
  requirement: !ruby/object:Gem::Requirement
32
30
  requirements:
33
31
  - - "~>"
34
32
  - !ruby/object:Gem::Version
35
- version: '3.13'
36
- type: :development
33
+ version: '1.4'
34
+ type: :runtime
37
35
  prerelease: false
38
36
  version_requirements: !ruby/object:Gem::Requirement
39
37
  requirements:
40
38
  - - "~>"
41
39
  - !ruby/object:Gem::Version
42
- version: '3.13'
40
+ version: '1.4'
43
41
  - !ruby/object:Gem::Dependency
44
- name: yajl-ruby
42
+ name: factory_bot
45
43
  requirement: !ruby/object:Gem::Requirement
46
44
  requirements:
47
45
  - - "~>"
48
46
  - !ruby/object:Gem::Version
49
- version: '1.4'
47
+ version: '6.2'
50
48
  type: :development
51
49
  prerelease: false
52
50
  version_requirements: !ruby/object:Gem::Requirement
53
51
  requirements:
54
52
  - - "~>"
55
53
  - !ruby/object:Gem::Version
56
- version: '1.4'
54
+ version: '6.2'
57
55
  - !ruby/object:Gem::Dependency
58
56
  name: pry
59
57
  requirement: !ruby/object:Gem::Requirement
@@ -72,16 +70,16 @@ dependencies:
72
70
  name: activerecord
73
71
  requirement: !ruby/object:Gem::Requirement
74
72
  requirements:
75
- - - "~>"
73
+ - - ">="
76
74
  - !ruby/object:Gem::Version
77
- version: '7.0'
75
+ version: '5.2'
78
76
  type: :development
79
77
  prerelease: false
80
78
  version_requirements: !ruby/object:Gem::Requirement
81
79
  requirements:
82
- - - "~>"
80
+ - - ">="
83
81
  - !ruby/object:Gem::Version
84
- version: '7.0'
82
+ version: '5.2'
85
83
  - !ruby/object:Gem::Dependency
86
84
  name: rspec
87
85
  requirement: !ruby/object:Gem::Requirement
@@ -162,10 +160,7 @@ executables: []
162
160
  extensions: []
163
161
  extra_rdoc_files: []
164
162
  files:
165
- - CHANGELOG.md
166
163
  - MIT-LICENSE
167
- - README.md
168
- - Rakefile
169
164
  - lib/blueprinter.rb
170
165
  - lib/blueprinter/base.rb
171
166
  - lib/blueprinter/blueprinter_error.rb
data/CHANGELOG.md DELETED
@@ -1,167 +0,0 @@
1
- ## 0.25.3 - 2021/03/03
2
- * 🐛 [BUGFIX] Fixes issue where fields and associations that are redefined by later views were not properly overwritten. See [#201](https://github.com/procore/blueprinter/pull/201) thanks to [@Berardpi](https://github.com/Berardpi).
3
-
4
- ## 0.25.2 - 2020/11/19
5
- * 🚀 [FEATURE] Make deprecation behavior configurable (`:silence`, `:stderror`, `:raise`). See [#248](https://github.com/procore/blueprinter/pull/248) thanks to [@mcclayton](https://github.com/mcclayton).
6
-
7
- ## 0.25.1 - 2020/08/18
8
- * 🐛 [BUGFIX] Raise Blueprinter::BlueprinterError if Blueprint given is not of class Blueprinter::Base. Before it just raised a generic `undefined method 'prepare'`. See [#233](https://github.com/procore/blueprinter/pull/233) thanks to [@caws](https://github.com/caws).
9
-
10
- ## 0.25.0 - 2020/07/06
11
- * 🚀 [FEATURE] Enable default `Blueprinter::Transformer`s to be set in the global configuration. [#222](https://github.com/procore/blueprinter/pull/222). Thanks to [@supremebeing7](https://github.com/supremebeing7).
12
-
13
- ## 0.24.0 - 2020/06/22
14
- * 🚀 [FEATURE] Add an `options` option to associations to facilitate passing options from one blueprint to another. [#220](https://github.com/procore/blueprinter/pull/220). Thanks to [@mcclayton](https://github.com/mcclayton).
15
-
16
- ## 0.23.4 - 2020/04/28
17
- * 🚀 [FEATURE] Public class method `has_view?` on Blueprinter::Base subclasses introduced in [#213](https://github.com/procore/blueprinter/pull/213). Thanks to [@spencerneste](https://github.com/spencerneste).
18
-
19
- ## 0.23.3 - 2020/04/07
20
- * 🐛 [BUGFIX] Fixes issue where `exclude` fields in deeply nested views were not respected. Resolved issue [207](https://github.com/procore/blueprinter/issues/207) in [#208](https://github.com/procore/blueprinter/pull/208) by [@tpltn](https://github.com/tpltn).
21
-
22
- ## 0.23.2 - 2020/03/16
23
- * 🐛 [BUGFIX] Fixes issue where fields "bled" into other views due to merge side-effects. Resolved issue [205](https://github.com/procore/blueprinter/issues/205) in [#204](https://github.com/procore/blueprinter/pull/204) by [@trevorrjohn](https://github.com/trevorrjohn).
24
-
25
- ## 0.23.1 - 2020/03/13
26
- * 🐛 [BUGFIX] Fixes #172 where views would unintentionally ignore `sort_fields_by: :definition` configuration. Resolved in [#197](https://github.com/procore/blueprinter/pull/197) by [@wlkrw](https://github.com/wlkrw).
27
-
28
- ## 0.23.0 - 2020/01/31
29
- * 🚀 [FEATURE] Configurable default extractor introduced in [#198](https://github.com/procore/blueprinter/pull/198) by [@wlkrw](https://github.com/wlkrw). You can now set a default extractor like so:
30
- ```
31
- Blueprinter.configure do |config|
32
- config.extractor_default = MyAutoExtractor
33
- end
34
- ```
35
-
36
- ## 0.22.0 - 2019/12/26
37
- * 🚀 [FEATURE] Add rails generators. See `rails g blueprinter:blueprint --help` for usage. Introduced in [#176](https://github.com/procore/blueprinter/pull/176) by [@wlkrw](https://github.com/wlkrw).
38
-
39
- ## 0.21.0 - 2019/12/19
40
- * 🚀 [FEATURE] Ability to specify `default_if` field/association option for more control on when the default value is applied. [191](https://github.com/procore/blueprinter/pull/191). Thanks to [@mcclayton](https://github.com/mcclayton).
41
-
42
- ## 0.20.0 - 2019/10/15
43
- * 🚀 [FEATURE] Ability to include multiple views in a single method call with `include_views`. [184](https://github.com/procore/blueprinter/pull/184). Thanks to [@narendranvelmurugan](https://github.com/narendranvelmurugan).
44
-
45
- * 💅 [ENHANCEMENT] Update field-level conditional settings to reflect new three-argument syntax. [183](https://github.com/procore/blueprinter/pull/183). Thanks to [@danirod](https://github.com/danirod).
46
-
47
- * 💅 [ENHANCEMENT] Modify Extractor access control in documentation. [182](https://github.com/procore/blueprinter/pull/182). Thanks to [@cagmz](https://github.com/cagmz).
48
-
49
- * 💅 [ENHANCEMENT] Fix the Transformer example documentation. [174](https://github.com/procore/blueprinter/pull/174). Thanks to [@tjwallace](https://github.com/tjwallace).
50
-
51
- ## 0.19.0 - 2019/07/24
52
- * 🚀 [FEATURE] Added ability to specify transformers for Blueprinter views to further process the resulting hash before serialization. [#164](https://github.com/procore/blueprinter/pull/164). Thanks to [@amalarayfreshworks](https://github.com/amalarayfreshworks).
53
-
54
- ## 0.18.0 - 2019/05/29
55
-
56
- * ⚠️ [DEPRECATION] :if/:unless procs with two arguments are now deprecated. *These procs now take in three arguments (field_name, obj, options) instead of just (obj, options).*
57
- In order to be compliant with the the next major release, all conditional :if/:unless procs must be augmented to take in three arguments instead of two. i.e. `(obj, options)` to `(field_name, obj, options)`.
58
-
59
- ## 0.17.0 - 2019/05/23
60
- * 🐛 [BUGFIX] Fixing view: :identifier including non-identifier fields. [#154](https://github.com/procore/blueprinter/pull/154). Thanks to [@AllPurposeName](https://github.com/AllPurposeName).
61
-
62
- * 💅 [ENHANCEMENT] Add ability to override :extractor option for an ::association. [#152](https://github.com/procore/blueprinter/pull/152). Thanks to [@hugopeixoto](https://github.com/hugopeixoto).
63
-
64
- ## 0.16.0 - 2019/04/03
65
- * 🚀 [FEATURE] Add ability to exclude multiple fields inline using `excludes`. [#141](https://github.com/procore/blueprinter/pull/141). Thanks to [@pabhinaya](https://github.com/pabhinaya).
66
-
67
- ## 0.15.0 - 2019/04/01
68
- * 🚀 [FEATURE] Add ability to pass in `datetime_format` field option as either a string representing the strftime format, or a Proc which takes in the Date or DateTime object and returns the formatted date. [#145](https://github.com/procore/blueprinter/pull/145). Thanks to [@mcclayton](https://github.com/mcclayton).
69
-
70
- ## 0.14.0 - 2019/04/01
71
- * 🚀 [FEATURE] Added a global `datetime_format` option. [#135](https://github.com/procore/blueprinter/pull/143). Thanks to [@ritikesh](https://github.com/ritikesh).
72
-
73
- ## 0.13.2 - 2019/03/14
74
- * 🐛 [BUGFIX] Replacing use of rails-specific method `Hash::except` so that Blueprinter continues to work in non-Rails environments. [#140](https://github.com/procore/blueprinter/pull/140). Thanks to [@checkbutton](https://github.com/checkbutton).
75
-
76
- ## 0.13.1 - 2019/03/02
77
- * 💅 [MAINTENANCE | ENHANCEMENT] Cleaning up the `include_associations` section. This is not a documented/supported feature and is calling `respond_to?(:klass)` on every object passed to blueprinter. [#139](https://github.com/procore/blueprinter/pull/139). Thanks to [@ritikesh](https://github.com/ritikesh).
78
-
79
- ## 0.13.0 - 2019/02/07
80
-
81
- * 🚀 [FEATURE] Added an option to render with a root key. [#135](https://github.com/procore/blueprinter/pull/135). Thanks to [@ritikesh](https://github.com/ritikesh).
82
- * 🚀 [FEATURE] Added an option to render with a top-level meta attribute. [#135](https://github.com/procore/blueprinter/pull/135). Thanks to [@ritikesh](https://github.com/ritikesh).
83
-
84
- ## 0.12.1 - 2019/01/24
85
-
86
- * 🐛 [BUGFIX] Fix boolean `false` values getting serialized as `null`. Please see PR [#132](https://github.com/procore/blueprinter/pull/132). Thanks to [@samsongz](https://github.com/samsongz).
87
-
88
- ## 0.12.0 - 2019/01/16
89
-
90
- * 🚀 [FEATURE] Enables the setting of global `:field_default` and `:association_default` option value in the Blueprinter Configuration that will be used as default values for fields and associations that evaluate to nil. [#128](https://github.com/procore/blueprinter/pull/128). Thanks to [@mcclayton](https://github.com/mcclayton).
91
-
92
- ## 0.11.0 - 2019/01/15
93
-
94
- * 🚀 [FEATURE] Enables the setting of a global `:if`/`:unless` proc in the Blueprinter Configuration that will be used to evaluate the conditional render of all fields. [#127](https://github.com/procore/blueprinter/pull/127). Thanks to [@mcclayton](https://github.com/mcclayton).
95
-
96
- ## 0.10.0 - 2018/12/20
97
-
98
- * 🚀 [FEATURE] Association Blueprints can be dynamically evaluated using a proc. [#122](https://github.com/procore/blueprinter/pull/122). Thanks to [@ritikesh](https://github.com/ritikesh).
99
-
100
- ## 0.9.0 - 2018/11/29
101
-
102
- * 🚀 [FEATURE] Added a `render_as_json` API. Similar to `render_as_hash` but returns a JSONified hash. Please see pr [#119](https://github.com/procore/blueprinter/pull/119). Thanks to [@ritikesh](https://github.com/ritikesh).
103
- * 🚀 [FEATURE] Sorting of fields in the response is now configurable to sort by definition or by name(asc only). Please see pr [#119](https://github.com/procore/blueprinter/pull/119). Thanks to [@ritikesh](https://github.com/ritikesh).
104
- * 💅 [ENHANCEMENT] Updated readme for above features and some existing undocumented features like `exclude fields`, `render_as_hash`. Please see pr [#119](https://github.com/procore/blueprinter/pull/119). Thanks to [@ritikesh](https://github.com/ritikesh).
105
-
106
- ## 0.8.0 - 2018/11/19
107
-
108
- * 🚀 [FEATURE] Extend Support for other JSON encoders like yajl-ruby. Please see pr [#118](https://github.com/procore/blueprinter/pull/118). Thanks to [@ritikesh](https://github.com/ritikesh).
109
- * 🐛 [BUGFIX] Do not raise error on null date with `date_format` option. Please see pr [#117](https://github.com/procore/blueprinter/pull/117). Thanks to [@tpltn](https://github.com/tpltn).
110
- * 🚀 [FEATURE] Add `default` option to `field`s which will be used as the serialized value instead of `null` when the field evaluates to null. Please see pr [#115](https://github.com/procore/blueprinter/pull/115). Thanks to [@mcclayton](https://github.com/mcclayton).
111
- * 🐛 [BUGFIX] Made Base.associations completely private since they are not used outside of the Blueprinter base. Please see pr [#112](https://github.com/procore/blueprinter/pull/112). Thanks to [@philipqnguyen](https://github.com/philipqnguyen).
112
- * 🐛 [BUGFIX] Fix issue where entire Blueprinter module was marked api private. Please see pr [#111](https://github.com/procore/blueprinter/pull/111). Thanks to [@philipqnguyen](https://github.com/philipqnguyen).
113
- * 🚀 [FEATURE] Allow identifiers to be defined with a block. Please see pr [#110](https://github.com/procore/blueprinter/pull/110). Thanks to [@hugopeixoto](https://github.com/hugopeixoto).
114
- * 💅 [ENHANCEMENT] Update docs regarding the args yielded to blocks. Please see pr [#108](https://github.com/procore/blueprinter/pull/108). Thanks to [@philipqnguyen](https://github.com/philipqnguyen).
115
- * 💅 [ENHANCEMENT] Use `field` method in fields. Please see pr [#107](https://github.com/procore/blueprinter/pull/107). Thanks to [@hugopeixoto](https://github.com/hugopeixoto).
116
-
117
- ## 0.7.0 - 2018/10/17
118
-
119
- * [FEATURE] Allow associations to be defined with a block. Please see pr [#106](https://github.com/procore/blueprinter/pull/106). Thanks to [@hugopeixoto](https://github.com/hugopeixoto).
120
- * [FEATURE] Inherit view definition when using inheritance. Please see pr [#105](https://github.com/procore/blueprinter/pull/105). Thanks to [@hugopeixoto](https://github.com/hugopeixoto).
121
-
122
- ## 0.6.0 - 2018/06/05
123
-
124
- * 🚀 [FEATURE] Add `date_time` format as an option to `field`. Please see pr #68. Thanks to [@njbbaer](https://github.com/njbbaer).
125
- * 🚀 [FEATURE] Add conditional field support `:unless` and `:if` as an option to `field`. Please see pr [#86](https://github.com/procore/blueprinter/pull/86). Thanks to [@ojab](https://github.com/ojab).
126
- * 🐛 [BUGFIX] Fix case where miscellaneous options were not being passed through the `AutoExtractor`. See pr [#83](https://github.com/procore/blueprinter/pull/83).
127
-
128
- ## 0.5.0 - 2018/05/15
129
-
130
- * 🚀 [FEATURE] Add `default` option to `association` which will be used as the serialized value instead of `null` when the association evaluates to null.
131
- See PR [#78](https://github.com/procore/blueprinter/pull/78) by [@vinaya-procore](https://github.com/vinaya-procore).
132
-
133
- ## 0.4.0 - 2018/05/02
134
-
135
- * 🚀 [FEATURE] Add `render_as_hash` which will output a hash instead of
136
- a JSON String. See PR [#76](https://github.com/procore/blueprinter/pull/76) by [@amayer171](https://github.com/amayer171) and Issue [#73](https://github.com/procore/blueprinter/issues/73).
137
-
138
- ## 0.3.0 - 2018/04/05
139
-
140
- 💥 [BREAKING] Sort of a breaking Change. Serializer classes has been renamed to Extractor. To upgrade, if you passed in a specific serializer to `field` or `identifier` such as:
141
-
142
- ```
143
- field(:first_name, serializer: CustomSerializer)
144
- ```
145
-
146
- Please rename that to:
147
-
148
- ```
149
- field(:first_name, extractor: CustomExtractor)
150
- ```
151
-
152
- * 💅 [ENHANCEMENT] Renamed Serializer classes to Extractor. See #72.
153
- * 💅 [ENHANCEMENT] Updated README. See pr [#66](https://github.com/procore/blueprinter/pull/66), [#65](https://github.com/procore/blueprinter/pull/65)
154
-
155
- ## 0.2.0 - 2018/01/22
156
-
157
- 💥 [BREAKING] Breaking Changes. To upgrade, ensure that any associated objects have a blueprint. For example:
158
- ```
159
- association :comments, blueprint: CommentsBlueprint
160
- ```
161
-
162
- * 🐛 [BUGFIX] Remove Optimizer class. See [#61](https://github.com/procore/blueprinter/pull/61).
163
- * 🐛 [BUGFIX] Require associated objects to have a Blueprint, so that objects will always serialize properly. See [#60](https://github.com/procore/blueprinter/pull/60).
164
-
165
- ## 0.1.0 - 2018/01/17
166
-
167
- * 🚀 [FEATURE] Initial release of Blueprinter