blueprinter-rb 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +167 -0
- data/MIT-LICENSE +20 -0
- data/README.md +1050 -0
- data/Rakefile +30 -0
- data/lib/blueprinter/base.rb +458 -0
- data/lib/blueprinter/blueprinter_error.rb +5 -0
- data/lib/blueprinter/configuration.rb +39 -0
- data/lib/blueprinter/deprecation.rb +37 -0
- data/lib/blueprinter/empty_types.rb +32 -0
- data/lib/blueprinter/extractor.rb +13 -0
- data/lib/blueprinter/extractors/association_extractor.rb +33 -0
- data/lib/blueprinter/extractors/auto_extractor.rb +37 -0
- data/lib/blueprinter/extractors/block_extractor.rb +10 -0
- data/lib/blueprinter/extractors/hash_extractor.rb +10 -0
- data/lib/blueprinter/extractors/public_send_extractor.rb +10 -0
- data/lib/blueprinter/field.rb +65 -0
- data/lib/blueprinter/formatters/date_time_formatter.rb +33 -0
- data/lib/blueprinter/helpers/base_helpers.rb +123 -0
- data/lib/blueprinter/helpers/type_helpers.rb +15 -0
- data/lib/blueprinter/transformer.rb +14 -0
- data/lib/blueprinter/version.rb +5 -0
- data/lib/blueprinter/view.rb +78 -0
- data/lib/blueprinter/view_collection.rb +90 -0
- data/lib/blueprinter.rb +6 -0
- data/lib/generators/blueprinter/blueprint_generator.rb +129 -0
- data/lib/generators/blueprinter/templates/blueprint.rb +16 -0
- metadata +214 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f5dc41937cf43cc99d29af28de50ff368508ecca87befd71e83542a15df05739
|
4
|
+
data.tar.gz: a9ee87c939a1e5ffacd3def7cf61ceb2ca7cf36ec27e7d524fcf3ff9e944c276
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 52bc482f9deacc92ad27442d3f972c559c48a64f84c01f23f8d278faec1e16abd2537760378a33c99bdfeb2062e1b95bdaadc5603038968ebd99731ce051fdd0
|
7
|
+
data.tar.gz: 0216cb660e0a44f80a9b027162046daaf88565a87fd03bd5a0bcac9952b16daead6deb8717d2f9ec0c54617550b51ce3e2dafb7c964d9152c2ae5ee2483d4263
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,167 @@
|
|
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
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2017 Procore Technologies, Inc.
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|