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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '084b38103a3fc3c3771e1c4c165ebc0886ffba618706e85550685b4009748b74'
4
- data.tar.gz: aa06eb341bd07f58fa3a7db984d6904baf368cd3825fdddaca8c95ce28d3c89c
3
+ metadata.gz: b7ffa1c885dee2ca30ed3ba3a2e4b86fb19c9a89b8613a9f2d77df76d233960b
4
+ data.tar.gz: 23113e2f9faa11e8b5853d73f9843fa65054643f7f9446040c8d1bd970c3042f
5
5
  SHA512:
6
- metadata.gz: 453f3c4833925ff58aff5db8f5b6593a0d7c4cd60871996440ed832a55d15d9d00493c7b6cf8aeabbbdb66d3b23bd3c0ca83d66d44d7aff93c16478b15176509
7
- data.tar.gz: 7485797da5950803fec48384f950a8feb69880ed092e20db573b324484a600eb0898c80d0b311ceef5015b4e37a44f052b34f3867165b081258e1b95231acf31
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: :spec
42
+ task default: %i[spec rubocop]