blueprinter 0.26.0 → 0.30.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +55 -50
- data/README.md +17 -50
- data/Rakefile +13 -1
- data/lib/blueprinter/base.rb +10 -15
- data/lib/blueprinter/blueprinter_error.rb +2 -0
- data/lib/blueprinter/configuration.rb +14 -2
- data/lib/blueprinter/deprecation.rb +5 -3
- data/lib/blueprinter/empty_types.rb +7 -9
- data/lib/blueprinter/extractor.rb +6 -4
- data/lib/blueprinter/extractors/association_extractor.rb +8 -3
- data/lib/blueprinter/extractors/auto_extractor.rb +2 -0
- data/lib/blueprinter/extractors/block_extractor.rb +3 -1
- data/lib/blueprinter/extractors/hash_extractor.rb +2 -0
- data/lib/blueprinter/extractors/public_send_extractor.rb +3 -1
- data/lib/blueprinter/field.rb +44 -47
- data/lib/blueprinter/formatters/date_time_formatter.rb +3 -1
- data/lib/blueprinter/helpers/base_helpers.rb +17 -13
- data/lib/blueprinter/helpers/type_helpers.rb +5 -5
- data/lib/blueprinter/transformer.rb +4 -2
- data/lib/blueprinter/version.rb +3 -1
- data/lib/blueprinter/view.rb +8 -6
- data/lib/blueprinter/view_collection.rb +17 -12
- data/lib/blueprinter.rb +2 -0
- data/lib/generators/blueprinter/blueprint_generator.rb +37 -48
- data/lib/generators/blueprinter/templates/blueprint.rb +2 -0
- metadata +5 -173
- data/lib/tasks/blueprinter_tasks.rake +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b7ffa1c885dee2ca30ed3ba3a2e4b86fb19c9a89b8613a9f2d77df76d233960b
|
4
|
+
data.tar.gz: 23113e2f9faa11e8b5853d73f9843fa65054643f7f9446040c8d1bd970c3042f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 04ac9dda1f68a1d87ce363e10aca4e80ee7767b4e81034bb427889b70b595c4aa289764a7287a60d395c5da0d2bd97f4f0d6e69275d9f14a6897d93e7258c3a5
|
7
|
+
data.tar.gz: b0a5882b5cb3e701e02ccffb984d10f3a982d8e619ab54b3b49639d72e88869eb11f97ffa2b6b2c078cc91272121f6e6d88b85576c338e961f50f418e24cd086
|
data/CHANGELOG.md
CHANGED
@@ -1,35 +1,40 @@
|
|
1
|
+
## 0.30.0 - 2023/09/16
|
2
|
+
* 🚀 [FEATURE] Allow configuring custom array-like classes to be treated as collections when serializing. More details can be found [here](https://github.com/procore-oss/blueprinter/pull/327). Thanks to [@toddnestor](https://github.com/toddnestor).
|
3
|
+
* 💅 [ENHANCEMENT] Reduce object allocations in fields calculations to save some memory. More details can be found [here](https://github.com/procore-oss/blueprinter/pull/327). Thanks to [@nametoolong](https://github.com/nametoolong).
|
4
|
+
* 💅 [ENHANCEMENT] Introduce rubocop
|
5
|
+
* 💅 [ENHANCEMENT] if/:unless procs with two arguments and invalid empty type deprecations are now removed
|
1
6
|
## 0.26.0 - 2023/08/17
|
2
7
|
* 🐛 [BREAKING] Transition to GitHub Actions from CircleCI and update to handle Ruby versions 2.7, 3.0, 3.1, 3.2. Drop support for any ruby version less than 2.7. See [#307](https://github.com/procore-oss/blueprinter/pull/307)
|
3
8
|
|
4
9
|
## 0.25.3 - 2021/03/03
|
5
|
-
* 🐛 [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).
|
10
|
+
* 🐛 [BUGFIX] Fixes issue where fields and associations that are redefined by later views were not properly overwritten. See [#201](https://github.com/procore-oss/blueprinter/pull/201) thanks to [@Berardpi](https://github.com/Berardpi).
|
6
11
|
|
7
12
|
## 0.25.2 - 2020/11/19
|
8
|
-
* 🚀 [FEATURE] Make deprecation behavior configurable (`:silence`, `:stderror`, `:raise`). See [#248](https://github.com/procore/blueprinter/pull/248) thanks to [@mcclayton](https://github.com/mcclayton).
|
13
|
+
* 🚀 [FEATURE] Make deprecation behavior configurable (`:silence`, `:stderror`, `:raise`). See [#248](https://github.com/procore-oss/blueprinter/pull/248) thanks to [@mcclayton](https://github.com/mcclayton).
|
9
14
|
|
10
15
|
## 0.25.1 - 2020/08/18
|
11
|
-
* 🐛 [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).
|
16
|
+
* 🐛 [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-oss/blueprinter/pull/233) thanks to [@caws](https://github.com/caws).
|
12
17
|
|
13
18
|
## 0.25.0 - 2020/07/06
|
14
|
-
* 🚀 [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).
|
19
|
+
* 🚀 [FEATURE] Enable default `Blueprinter::Transformer`s to be set in the global configuration. [#222](https://github.com/procore-oss/blueprinter/pull/222). Thanks to [@supremebeing7](https://github.com/supremebeing7).
|
15
20
|
|
16
21
|
## 0.24.0 - 2020/06/22
|
17
|
-
* 🚀 [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).
|
22
|
+
* 🚀 [FEATURE] Add an `options` option to associations to facilitate passing options from one blueprint to another. [#220](https://github.com/procore-oss/blueprinter/pull/220). Thanks to [@mcclayton](https://github.com/mcclayton).
|
18
23
|
|
19
24
|
## 0.23.4 - 2020/04/28
|
20
|
-
* 🚀 [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).
|
25
|
+
* 🚀 [FEATURE] Public class method `has_view?` on Blueprinter::Base subclasses introduced in [#213](https://github.com/procore-oss/blueprinter/pull/213). Thanks to [@spencerneste](https://github.com/spencerneste).
|
21
26
|
|
22
27
|
## 0.23.3 - 2020/04/07
|
23
|
-
* 🐛 [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).
|
28
|
+
* 🐛 [BUGFIX] Fixes issue where `exclude` fields in deeply nested views were not respected. Resolved issue [207](https://github.com/procore-oss/blueprinter/issues/207) in [#208](https://github.com/procore-oss/blueprinter/pull/208) by [@tpltn](https://github.com/tpltn).
|
24
29
|
|
25
30
|
## 0.23.2 - 2020/03/16
|
26
|
-
* 🐛 [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).
|
31
|
+
* 🐛 [BUGFIX] Fixes issue where fields "bled" into other views due to merge side-effects. Resolved issue [205](https://github.com/procore-oss/blueprinter/issues/205) in [#204](https://github.com/procore-oss/blueprinter/pull/204) by [@trevorrjohn](https://github.com/trevorrjohn).
|
27
32
|
|
28
33
|
## 0.23.1 - 2020/03/13
|
29
|
-
* 🐛 [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).
|
34
|
+
* 🐛 [BUGFIX] Fixes #172 where views would unintentionally ignore `sort_fields_by: :definition` configuration. Resolved in [#197](https://github.com/procore-oss/blueprinter/pull/197) by [@wlkrw](https://github.com/wlkrw).
|
30
35
|
|
31
36
|
## 0.23.0 - 2020/01/31
|
32
|
-
* 🚀 [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:
|
37
|
+
* 🚀 [FEATURE] Configurable default extractor introduced in [#198](https://github.com/procore-oss/blueprinter/pull/198) by [@wlkrw](https://github.com/wlkrw). You can now set a default extractor like so:
|
33
38
|
```
|
34
39
|
Blueprinter.configure do |config|
|
35
40
|
config.extractor_default = MyAutoExtractor
|
@@ -37,22 +42,22 @@ end
|
|
37
42
|
```
|
38
43
|
|
39
44
|
## 0.22.0 - 2019/12/26
|
40
|
-
* 🚀 [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).
|
45
|
+
* 🚀 [FEATURE] Add rails generators. See `rails g blueprinter:blueprint --help` for usage. Introduced in [#176](https://github.com/procore-oss/blueprinter/pull/176) by [@wlkrw](https://github.com/wlkrw).
|
41
46
|
|
42
47
|
## 0.21.0 - 2019/12/19
|
43
|
-
* 🚀 [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).
|
48
|
+
* 🚀 [FEATURE] Ability to specify `default_if` field/association option for more control on when the default value is applied. [191](https://github.com/procore-oss/blueprinter/pull/191). Thanks to [@mcclayton](https://github.com/mcclayton).
|
44
49
|
|
45
50
|
## 0.20.0 - 2019/10/15
|
46
|
-
* 🚀 [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).
|
51
|
+
* 🚀 [FEATURE] Ability to include multiple views in a single method call with `include_views`. [184](https://github.com/procore-oss/blueprinter/pull/184). Thanks to [@narendranvelmurugan](https://github.com/narendranvelmurugan).
|
47
52
|
|
48
|
-
* 💅 [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).
|
53
|
+
* 💅 [ENHANCEMENT] Update field-level conditional settings to reflect new three-argument syntax. [183](https://github.com/procore-oss/blueprinter/pull/183). Thanks to [@danirod](https://github.com/danirod).
|
49
54
|
|
50
|
-
* 💅 [ENHANCEMENT] Modify Extractor access control in documentation. [182](https://github.com/procore/blueprinter/pull/182). Thanks to [@cagmz](https://github.com/cagmz).
|
55
|
+
* 💅 [ENHANCEMENT] Modify Extractor access control in documentation. [182](https://github.com/procore-oss/blueprinter/pull/182). Thanks to [@cagmz](https://github.com/cagmz).
|
51
56
|
|
52
|
-
* 💅 [ENHANCEMENT] Fix the Transformer example documentation. [174](https://github.com/procore/blueprinter/pull/174). Thanks to [@tjwallace](https://github.com/tjwallace).
|
57
|
+
* 💅 [ENHANCEMENT] Fix the Transformer example documentation. [174](https://github.com/procore-oss/blueprinter/pull/174). Thanks to [@tjwallace](https://github.com/tjwallace).
|
53
58
|
|
54
59
|
## 0.19.0 - 2019/07/24
|
55
|
-
* 🚀 [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).
|
60
|
+
* 🚀 [FEATURE] Added ability to specify transformers for Blueprinter views to further process the resulting hash before serialization. [#164](https://github.com/procore-oss/blueprinter/pull/164). Thanks to [@amalarayfreshworks](https://github.com/amalarayfreshworks).
|
56
61
|
|
57
62
|
## 0.18.0 - 2019/05/29
|
58
63
|
|
@@ -60,83 +65,83 @@ end
|
|
60
65
|
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)`.
|
61
66
|
|
62
67
|
## 0.17.0 - 2019/05/23
|
63
|
-
* 🐛 [BUGFIX] Fixing view: :identifier including non-identifier fields. [#154](https://github.com/procore/blueprinter/pull/154). Thanks to [@AllPurposeName](https://github.com/AllPurposeName).
|
68
|
+
* 🐛 [BUGFIX] Fixing view: :identifier including non-identifier fields. [#154](https://github.com/procore-oss/blueprinter/pull/154). Thanks to [@AllPurposeName](https://github.com/AllPurposeName).
|
64
69
|
|
65
|
-
* 💅 [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).
|
70
|
+
* 💅 [ENHANCEMENT] Add ability to override :extractor option for an ::association. [#152](https://github.com/procore-oss/blueprinter/pull/152). Thanks to [@hugopeixoto](https://github.com/hugopeixoto).
|
66
71
|
|
67
72
|
## 0.16.0 - 2019/04/03
|
68
|
-
* 🚀 [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).
|
73
|
+
* 🚀 [FEATURE] Add ability to exclude multiple fields inline using `excludes`. [#141](https://github.com/procore-oss/blueprinter/pull/141). Thanks to [@pabhinaya](https://github.com/pabhinaya).
|
69
74
|
|
70
75
|
## 0.15.0 - 2019/04/01
|
71
|
-
* 🚀 [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).
|
76
|
+
* 🚀 [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-oss/blueprinter/pull/145). Thanks to [@mcclayton](https://github.com/mcclayton).
|
72
77
|
|
73
78
|
## 0.14.0 - 2019/04/01
|
74
|
-
* 🚀 [FEATURE] Added a global `datetime_format` option. [#135](https://github.com/procore/blueprinter/pull/143). Thanks to [@ritikesh](https://github.com/ritikesh).
|
79
|
+
* 🚀 [FEATURE] Added a global `datetime_format` option. [#135](https://github.com/procore-oss/blueprinter/pull/143). Thanks to [@ritikesh](https://github.com/ritikesh).
|
75
80
|
|
76
81
|
## 0.13.2 - 2019/03/14
|
77
|
-
* 🐛 [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).
|
82
|
+
* 🐛 [BUGFIX] Replacing use of rails-specific method `Hash::except` so that Blueprinter continues to work in non-Rails environments. [#140](https://github.com/procore-oss/blueprinter/pull/140). Thanks to [@checkbutton](https://github.com/checkbutton).
|
78
83
|
|
79
84
|
## 0.13.1 - 2019/03/02
|
80
|
-
* 💅 [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).
|
85
|
+
* 💅 [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-oss/blueprinter/pull/139). Thanks to [@ritikesh](https://github.com/ritikesh).
|
81
86
|
|
82
87
|
## 0.13.0 - 2019/02/07
|
83
88
|
|
84
|
-
* 🚀 [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).
|
85
|
-
* 🚀 [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).
|
89
|
+
* 🚀 [FEATURE] Added an option to render with a root key. [#135](https://github.com/procore-oss/blueprinter/pull/135). Thanks to [@ritikesh](https://github.com/ritikesh).
|
90
|
+
* 🚀 [FEATURE] Added an option to render with a top-level meta attribute. [#135](https://github.com/procore-oss/blueprinter/pull/135). Thanks to [@ritikesh](https://github.com/ritikesh).
|
86
91
|
|
87
92
|
## 0.12.1 - 2019/01/24
|
88
93
|
|
89
|
-
* 🐛 [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).
|
94
|
+
* 🐛 [BUGFIX] Fix boolean `false` values getting serialized as `null`. Please see PR [#132](https://github.com/procore-oss/blueprinter/pull/132). Thanks to [@samsongz](https://github.com/samsongz).
|
90
95
|
|
91
96
|
## 0.12.0 - 2019/01/16
|
92
97
|
|
93
|
-
* 🚀 [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).
|
98
|
+
* 🚀 [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-oss/blueprinter/pull/128). Thanks to [@mcclayton](https://github.com/mcclayton).
|
94
99
|
|
95
100
|
## 0.11.0 - 2019/01/15
|
96
101
|
|
97
|
-
* 🚀 [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).
|
102
|
+
* 🚀 [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-oss/blueprinter/pull/127). Thanks to [@mcclayton](https://github.com/mcclayton).
|
98
103
|
|
99
104
|
## 0.10.0 - 2018/12/20
|
100
105
|
|
101
|
-
* 🚀 [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).
|
106
|
+
* 🚀 [FEATURE] Association Blueprints can be dynamically evaluated using a proc. [#122](https://github.com/procore-oss/blueprinter/pull/122). Thanks to [@ritikesh](https://github.com/ritikesh).
|
102
107
|
|
103
108
|
## 0.9.0 - 2018/11/29
|
104
109
|
|
105
|
-
* 🚀 [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).
|
106
|
-
* 🚀 [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).
|
107
|
-
* 💅 [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).
|
110
|
+
* 🚀 [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-oss/blueprinter/pull/119). Thanks to [@ritikesh](https://github.com/ritikesh).
|
111
|
+
* 🚀 [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-oss/blueprinter/pull/119). Thanks to [@ritikesh](https://github.com/ritikesh).
|
112
|
+
* 💅 [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-oss/blueprinter/pull/119). Thanks to [@ritikesh](https://github.com/ritikesh).
|
108
113
|
|
109
114
|
## 0.8.0 - 2018/11/19
|
110
115
|
|
111
|
-
* 🚀 [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).
|
112
|
-
* 🐛 [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).
|
113
|
-
* 🚀 [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).
|
114
|
-
* 🐛 [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).
|
115
|
-
* 🐛 [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).
|
116
|
-
* 🚀 [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).
|
117
|
-
* 💅 [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).
|
118
|
-
* 💅 [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
|
+
* 🚀 [FEATURE] Extend Support for other JSON encoders like yajl-ruby. Please see pr [#118](https://github.com/procore-oss/blueprinter/pull/118). Thanks to [@ritikesh](https://github.com/ritikesh).
|
117
|
+
* 🐛 [BUGFIX] Do not raise error on null date with `date_format` option. Please see pr [#117](https://github.com/procore-oss/blueprinter/pull/117). Thanks to [@tpltn](https://github.com/tpltn).
|
118
|
+
* 🚀 [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-oss/blueprinter/pull/115). Thanks to [@mcclayton](https://github.com/mcclayton).
|
119
|
+
* 🐛 [BUGFIX] Made Base.associations completely private since they are not used outside of the Blueprinter base. Please see pr [#112](https://github.com/procore-oss/blueprinter/pull/112). Thanks to [@philipqnguyen](https://github.com/philipqnguyen).
|
120
|
+
* 🐛 [BUGFIX] Fix issue where entire Blueprinter module was marked api private. Please see pr [#111](https://github.com/procore-oss/blueprinter/pull/111). Thanks to [@philipqnguyen](https://github.com/philipqnguyen).
|
121
|
+
* 🚀 [FEATURE] Allow identifiers to be defined with a block. Please see pr [#110](https://github.com/procore-oss/blueprinter/pull/110). Thanks to [@hugopeixoto](https://github.com/hugopeixoto).
|
122
|
+
* 💅 [ENHANCEMENT] Update docs regarding the args yielded to blocks. Please see pr [#108](https://github.com/procore-oss/blueprinter/pull/108). Thanks to [@philipqnguyen](https://github.com/philipqnguyen).
|
123
|
+
* 💅 [ENHANCEMENT] Use `field` method in fields. Please see pr [#107](https://github.com/procore-oss/blueprinter/pull/107). Thanks to [@hugopeixoto](https://github.com/hugopeixoto).
|
119
124
|
|
120
125
|
## 0.7.0 - 2018/10/17
|
121
126
|
|
122
|
-
* [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).
|
123
|
-
* [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).
|
127
|
+
* [FEATURE] Allow associations to be defined with a block. Please see pr [#106](https://github.com/procore-oss/blueprinter/pull/106). Thanks to [@hugopeixoto](https://github.com/hugopeixoto).
|
128
|
+
* [FEATURE] Inherit view definition when using inheritance. Please see pr [#105](https://github.com/procore-oss/blueprinter/pull/105). Thanks to [@hugopeixoto](https://github.com/hugopeixoto).
|
124
129
|
|
125
130
|
## 0.6.0 - 2018/06/05
|
126
131
|
|
127
132
|
* 🚀 [FEATURE] Add `date_time` format as an option to `field`. Please see pr #68. Thanks to [@njbbaer](https://github.com/njbbaer).
|
128
|
-
* 🚀 [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).
|
129
|
-
* 🐛 [BUGFIX] Fix case where miscellaneous options were not being passed through the `AutoExtractor`. See pr [#83](https://github.com/procore/blueprinter/pull/83).
|
133
|
+
* 🚀 [FEATURE] Add conditional field support `:unless` and `:if` as an option to `field`. Please see pr [#86](https://github.com/procore-oss/blueprinter/pull/86). Thanks to [@ojab](https://github.com/ojab).
|
134
|
+
* 🐛 [BUGFIX] Fix case where miscellaneous options were not being passed through the `AutoExtractor`. See pr [#83](https://github.com/procore-oss/blueprinter/pull/83).
|
130
135
|
|
131
136
|
## 0.5.0 - 2018/05/15
|
132
137
|
|
133
138
|
* 🚀 [FEATURE] Add `default` option to `association` which will be used as the serialized value instead of `null` when the association evaluates to null.
|
134
|
-
See PR [#78](https://github.com/procore/blueprinter/pull/78) by [@vinaya-procore](https://github.com/vinaya-procore).
|
139
|
+
See PR [#78](https://github.com/procore-oss/blueprinter/pull/78) by [@vinaya-procore](https://github.com/vinaya-procore).
|
135
140
|
|
136
141
|
## 0.4.0 - 2018/05/02
|
137
142
|
|
138
143
|
* 🚀 [FEATURE] Add `render_as_hash` which will output a hash instead of
|
139
|
-
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).
|
144
|
+
a JSON String. See PR [#76](https://github.com/procore-oss/blueprinter/pull/76) by [@amayer171](https://github.com/amayer171) and Issue [#73](https://github.com/procore-oss/blueprinter/issues/73).
|
140
145
|
|
141
146
|
## 0.3.0 - 2018/04/05
|
142
147
|
|
@@ -153,7 +158,7 @@ field(:first_name, extractor: CustomExtractor)
|
|
153
158
|
```
|
154
159
|
|
155
160
|
* 💅 [ENHANCEMENT] Renamed Serializer classes to Extractor. See #72.
|
156
|
-
* 💅 [ENHANCEMENT] Updated README. See pr [#66](https://github.com/procore/blueprinter/pull/66), [#65](https://github.com/procore/blueprinter/pull/65)
|
161
|
+
* 💅 [ENHANCEMENT] Updated README. See pr [#66](https://github.com/procore-oss/blueprinter/pull/66), [#65](https://github.com/procore-oss/blueprinter/pull/65)
|
157
162
|
|
158
163
|
## 0.2.0 - 2018/01/22
|
159
164
|
|
@@ -162,8 +167,8 @@ field(:first_name, extractor: CustomExtractor)
|
|
162
167
|
association :comments, blueprint: CommentsBlueprint
|
163
168
|
```
|
164
169
|
|
165
|
-
* 🐛 [BUGFIX] Remove Optimizer class. See [#61](https://github.com/procore/blueprinter/pull/61).
|
166
|
-
* 🐛 [BUGFIX] Require associated objects to have a Blueprint, so that objects will always serialize properly. See [#60](https://github.com/procore/blueprinter/pull/60).
|
170
|
+
* 🐛 [BUGFIX] Remove Optimizer class. See [#61](https://github.com/procore-oss/blueprinter/pull/61).
|
171
|
+
* 🐛 [BUGFIX] Require associated objects to have a Blueprint, so that objects will always serialize properly. See [#60](https://github.com/procore-oss/blueprinter/pull/60).
|
167
172
|
|
168
173
|
## 0.1.0 - 2018/01/17
|
169
174
|
|
data/README.md
CHANGED
@@ -33,8 +33,6 @@ Docs can be found [here](http://www.rubydoc.info/gems/blueprinter).
|
|
33
33
|
<details open>
|
34
34
|
<summary>Basic</summary>
|
35
35
|
|
36
|
-
---
|
37
|
-
|
38
36
|
If you have an object you would like serialized, simply create a blueprint. Say, for example, you have a User record with the following attributes `[:uuid, :email, :first_name, :last_name, :password, :address]`.
|
39
37
|
|
40
38
|
You may define a simple blueprint like so:
|
@@ -63,14 +61,11 @@ And the output would look like:
|
|
63
61
|
"last_name": "Doe"
|
64
62
|
}
|
65
63
|
```
|
66
|
-
|
67
|
-
---
|
68
64
|
</details>
|
69
65
|
|
70
66
|
<details>
|
71
67
|
<summary>Collections</summary>
|
72
68
|
|
73
|
-
---
|
74
69
|
|
75
70
|
You can also pass a collection object or an array to the render method.
|
76
71
|
|
@@ -97,13 +92,28 @@ This will result in JSON that looks something like this:
|
|
97
92
|
]
|
98
93
|
```
|
99
94
|
|
100
|
-
|
95
|
+
|
96
|
+
You can also configure other classes to be treated like collections. For example, if you are using Mongoid, you can configure it to treat `Mongoid::Criteria` objects as collections:
|
97
|
+
|
98
|
+
```ruby
|
99
|
+
Blueprinter.configure do |config|
|
100
|
+
config.custom_array_like_classes = [Mongoid::Criteria]
|
101
|
+
end
|
102
|
+
```
|
103
|
+
|
104
|
+
Or if you wanted it to treat the `Set` class as a collection:
|
105
|
+
|
106
|
+
```ruby
|
107
|
+
Blueprinter.configure do |config|
|
108
|
+
config.custom_array_like_classes = [Set]
|
109
|
+
end
|
110
|
+
```
|
111
|
+
|
101
112
|
</details>
|
102
113
|
|
103
114
|
<details>
|
104
115
|
<summary>Renaming</summary>
|
105
116
|
|
106
|
-
---
|
107
117
|
|
108
118
|
You can rename the resulting JSON keys in both fields and associations by using the `name` option.
|
109
119
|
|
@@ -127,13 +137,11 @@ This will result in JSON that looks something like this:
|
|
127
137
|
}
|
128
138
|
```
|
129
139
|
|
130
|
-
---
|
131
140
|
</details>
|
132
141
|
|
133
142
|
<details>
|
134
143
|
<summary>Views</summary>
|
135
144
|
|
136
|
-
---
|
137
145
|
|
138
146
|
You may define different outputs by utilizing views:
|
139
147
|
|
@@ -174,13 +182,11 @@ Output:
|
|
174
182
|
}
|
175
183
|
```
|
176
184
|
|
177
|
-
---
|
178
185
|
</details>
|
179
186
|
|
180
187
|
<details>
|
181
188
|
<summary>Identifiers</summary>
|
182
189
|
|
183
|
-
---
|
184
190
|
|
185
191
|
`identifier`s are used to specify a field or method name used as an identifier. Usually, this is something like `:id`.
|
186
192
|
|
@@ -199,14 +205,12 @@ Blueprinter `identifier`s have a few properties that set them apart from `field`
|
|
199
205
|
|
200
206
|
If either of the above two developer conveniences are not desired, you can simply create your identifier fields as regular `field`s.
|
201
207
|
|
202
|
-
---
|
203
208
|
|
204
209
|
</details>
|
205
210
|
|
206
211
|
<details>
|
207
212
|
<summary>Root</summary>
|
208
213
|
<a name="root"></a>
|
209
|
-
---
|
210
214
|
|
211
215
|
You can also optionally pass in a root key to wrap your resulting json in:
|
212
216
|
|
@@ -240,13 +244,11 @@ Output:
|
|
240
244
|
}
|
241
245
|
```
|
242
246
|
|
243
|
-
---
|
244
247
|
</details>
|
245
248
|
|
246
249
|
<details>
|
247
250
|
<summary>Meta Attributes</summary>
|
248
251
|
|
249
|
-
---
|
250
252
|
|
251
253
|
You can additionally add meta-data to the json as well:
|
252
254
|
|
@@ -292,13 +294,11 @@ Output:
|
|
292
294
|
|
293
295
|
_NOTE:_ For meta attributes, a [root](#root) is mandatory.
|
294
296
|
|
295
|
-
---
|
296
297
|
</details>
|
297
298
|
|
298
299
|
<details>
|
299
300
|
<summary>Exclude Fields</summary>
|
300
301
|
|
301
|
-
---
|
302
302
|
|
303
303
|
You can specifically choose to exclude certain fields for specific views
|
304
304
|
|
@@ -355,13 +355,11 @@ class UserBlueprint < Blueprinter::Base
|
|
355
355
|
end
|
356
356
|
```
|
357
357
|
|
358
|
-
---
|
359
358
|
</details>
|
360
359
|
|
361
360
|
<details>
|
362
361
|
<summary>Associations</summary>
|
363
362
|
|
364
|
-
---
|
365
363
|
|
366
364
|
You may include associated objects. Say for example, a user has projects:
|
367
365
|
|
@@ -430,13 +428,11 @@ class DriverBlueprint < Blueprinter::Base
|
|
430
428
|
end
|
431
429
|
```
|
432
430
|
|
433
|
-
---
|
434
431
|
</details>
|
435
432
|
|
436
433
|
<details>
|
437
434
|
<summary>Default Association/Field Option</summary>
|
438
435
|
|
439
|
-
---
|
440
436
|
|
441
437
|
By default, an association or field that evaluates to `nil` is serialized as `nil`. A default serialized value can be specified as an option on the association or field for cases when the association/field could potentially evaluate to `nil`. You can also specify a global `field_default` or `association_default` in the Blueprinter config which will be used for all fields/associations that evaluate to nil.
|
442
438
|
|
@@ -462,13 +458,11 @@ class UserBlueprint < Blueprinter::Base
|
|
462
458
|
end
|
463
459
|
```
|
464
460
|
|
465
|
-
---
|
466
461
|
</details>
|
467
462
|
|
468
463
|
<details>
|
469
464
|
<summary>default_if</summary>
|
470
465
|
|
471
|
-
---
|
472
466
|
|
473
467
|
Sometimes, you may want certain "empty" values to pass through to the default value.
|
474
468
|
Blueprinter provides the ability to treat the following empty types as the default value (or `nil` if no default provided).
|
@@ -500,13 +494,11 @@ class UserBlueprint < Blueprinter::Base
|
|
500
494
|
end
|
501
495
|
```
|
502
496
|
|
503
|
-
---
|
504
497
|
</details>
|
505
498
|
|
506
499
|
<details>
|
507
500
|
<summary>Supporting Dynamic Blueprints For Associations</summary>
|
508
501
|
|
509
|
-
---
|
510
502
|
|
511
503
|
When defining an association, we can dynamically evaluate the blueprint. This comes in handy when adding polymorphic associations, by allowing reuse of existing blueprints.
|
512
504
|
|
@@ -535,13 +527,11 @@ end
|
|
535
527
|
|
536
528
|
_NOTE:_ `taskable.blueprint` should return a valid Blueprint class. Currently, `has_many` is not supported because of the very nature of polymorphic associations.
|
537
529
|
|
538
|
-
---
|
539
530
|
</details>
|
540
531
|
|
541
532
|
<details>
|
542
533
|
<summary>Defining A Field Directly In The Blueprint</summary>
|
543
534
|
|
544
|
-
---
|
545
535
|
|
546
536
|
You can define a field directly in the Blueprint by passing it a block. This is especially useful if the object does not already have such an attribute or method defined, and you want to define it specifically for use with the Blueprint. This is done by passing `field` a block. The block also yields the object and any options that were passed from `render`. For example:
|
547
537
|
|
@@ -569,13 +559,11 @@ Output:
|
|
569
559
|
}
|
570
560
|
```
|
571
561
|
|
572
|
-
---
|
573
562
|
</details>
|
574
563
|
|
575
564
|
<details>
|
576
565
|
<summary>Defining An Identifier Directly In The Blueprint</summary>
|
577
566
|
|
578
|
-
---
|
579
567
|
|
580
568
|
You can also pass a block to an identifier:
|
581
569
|
|
@@ -601,13 +589,11 @@ Output:
|
|
601
589
|
}
|
602
590
|
```
|
603
591
|
|
604
|
-
---
|
605
592
|
</details>
|
606
593
|
|
607
594
|
<details>
|
608
595
|
<summary>Defining An Association Directly In The Blueprint</summary>
|
609
596
|
|
610
|
-
---
|
611
597
|
|
612
598
|
You can also pass a block to an association:
|
613
599
|
|
@@ -645,13 +631,11 @@ Output:
|
|
645
631
|
}
|
646
632
|
```
|
647
633
|
|
648
|
-
---
|
649
634
|
</details>
|
650
635
|
|
651
636
|
<details>
|
652
637
|
<summary>Passing Additional Properties To #render</summary>
|
653
638
|
|
654
|
-
---
|
655
639
|
|
656
640
|
`render` takes an options hash which you can pass additional properties, allowing you to utilize those additional properties in the `field` block. For example:
|
657
641
|
|
@@ -679,13 +663,11 @@ Output:
|
|
679
663
|
}
|
680
664
|
```
|
681
665
|
|
682
|
-
---
|
683
666
|
</details>
|
684
667
|
|
685
668
|
<details>
|
686
669
|
<summary>Conditional Fields</summary>
|
687
670
|
|
688
|
-
---
|
689
671
|
|
690
672
|
Both the `field` and the global Blueprinter Configuration supports `:if` and `:unless` options that can be used to serialize fields conditionally.
|
691
673
|
|
@@ -710,13 +692,11 @@ end
|
|
710
692
|
|
711
693
|
_NOTE:_ The field-level setting overrides the global config setting (for the field) if both are set.
|
712
694
|
|
713
|
-
---
|
714
695
|
</details>
|
715
696
|
|
716
697
|
<details>
|
717
698
|
<summary>Custom Formatting for Dates and Times</summary>
|
718
699
|
|
719
|
-
---
|
720
700
|
|
721
701
|
To define a custom format for a Date or DateTime field, include the option `datetime_format`.
|
722
702
|
This global or field-level option can be either a string representing the associated `strftime` format,
|
@@ -774,13 +754,11 @@ Output:
|
|
774
754
|
|
775
755
|
_NOTE:_ The field-level setting overrides the global config setting (for the field) if both are set.
|
776
756
|
|
777
|
-
---
|
778
757
|
</details>
|
779
758
|
|
780
759
|
<details>
|
781
760
|
<summary>Transform Classes</summary>
|
782
761
|
|
783
|
-
---
|
784
762
|
|
785
763
|
Blueprinter provides the ability to specify `transform`s on views, which enable further
|
786
764
|
processing and transforming of resulting view field hashes prior to serialization.
|
@@ -842,13 +820,11 @@ end
|
|
842
820
|
|
843
821
|
**Note: Any transforms specified on a per-blueprint or per-view level will override the `default_transformers` in the configuration.**
|
844
822
|
|
845
|
-
---
|
846
823
|
</details>
|
847
824
|
|
848
825
|
<details>
|
849
826
|
<summary>Configurable Extractors</summary>
|
850
827
|
|
851
|
-
---
|
852
828
|
|
853
829
|
Blueprinter gets a given objects' values from the fields definitions using extractor classes. You can substitute your own extractor class globally or per-field.
|
854
830
|
|
@@ -896,13 +872,11 @@ Blueprinter.configure do |config|
|
|
896
872
|
end
|
897
873
|
```
|
898
874
|
|
899
|
-
---
|
900
875
|
</details>
|
901
876
|
|
902
877
|
<details>
|
903
878
|
<summary>Sorting Fields</summary>
|
904
879
|
|
905
|
-
---
|
906
880
|
|
907
881
|
By default the response sorts the keys by name. If you want the fields to be sorted in the order of definition, use the below configuration option.
|
908
882
|
|
@@ -932,13 +906,11 @@ Output:
|
|
932
906
|
}
|
933
907
|
```
|
934
908
|
|
935
|
-
---
|
936
909
|
</details>
|
937
910
|
|
938
911
|
<details>
|
939
912
|
<summary>Deprecations</summary>
|
940
913
|
|
941
|
-
---
|
942
914
|
|
943
915
|
When functionality in Blueprinter is invoked, that has been deprecated, the default behavior is to
|
944
916
|
write a deprecation notice to stderror.
|
@@ -959,13 +931,11 @@ Blueprinter.configure do |config|
|
|
959
931
|
end
|
960
932
|
```
|
961
933
|
|
962
|
-
---
|
963
934
|
</details>
|
964
935
|
|
965
936
|
<details>
|
966
937
|
<summary>render_as_hash</summary>
|
967
938
|
|
968
|
-
---
|
969
939
|
|
970
940
|
Same as `render`, returns a Ruby Hash.
|
971
941
|
|
@@ -984,13 +954,11 @@ Output:
|
|
984
954
|
}
|
985
955
|
```
|
986
956
|
|
987
|
-
---
|
988
957
|
</details>
|
989
958
|
|
990
959
|
<details>
|
991
960
|
<summary>render_as_json</summary>
|
992
961
|
|
993
|
-
---
|
994
962
|
|
995
963
|
Same as `render`, returns a Ruby Hash JSONified. This will call JSONify all keys and values.
|
996
964
|
|
@@ -1009,7 +977,6 @@ Output:
|
|
1009
977
|
}
|
1010
978
|
```
|
1011
979
|
|
1012
|
-
---
|
1013
980
|
</details>
|
1014
981
|
|
1015
982
|
## Installation
|
data/Rakefile
CHANGED
@@ -1,7 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rdoc/task'
|
2
4
|
require 'bundler/gem_tasks'
|
3
5
|
require 'rake/testtask'
|
4
6
|
require 'rspec/core/rake_task'
|
7
|
+
require 'yard'
|
8
|
+
require 'rubocop/rake_task'
|
5
9
|
|
6
10
|
begin
|
7
11
|
require 'bundler/setup'
|
@@ -21,10 +25,18 @@ RSpec::Core::RakeTask.new(:spec) do |t|
|
|
21
25
|
t.rspec_opts = '--pattern spec/**/*_spec.rb --warnings'
|
22
26
|
end
|
23
27
|
|
28
|
+
RuboCop::RakeTask.new
|
29
|
+
|
30
|
+
YARD::Rake::YardocTask.new do |t|
|
31
|
+
t.files = Dir['lib/**/*'].reject do |file|
|
32
|
+
file.include?('lib/generators')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
24
36
|
Rake::TestTask.new(:benchmarks) do |t|
|
25
37
|
t.libs << 'spec'
|
26
38
|
t.pattern = 'spec/benchmarks/**/*_test.rb'
|
27
39
|
t.verbose = false
|
28
40
|
end
|
29
41
|
|
30
|
-
task default:
|
42
|
+
task default: %i[spec rubocop]
|