blueprinter 0.22.0 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/README.md +51 -0
- data/lib/blueprinter/base.rb +2 -2
- data/lib/blueprinter/configuration.rb +2 -1
- data/lib/blueprinter/extractors/association_extractor.rb +1 -1
- data/lib/blueprinter/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a1440e4adce199d743371035d3061ae69aea0ab8030bcbdabe59b23cd995c34
|
4
|
+
data.tar.gz: b1a58870b18665b6bf1a7fe07ac3993cea0d25450c73a00f241f981ab4b9ad95
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b20e40f673a754d4d20ccacb2acc8caceeb79d0cced6f69bf4003fa6df6bde5c883baf40954d9fcc9dcde5394f489f54f8a9e1f3f4c3db8eb8494ea88d860e50
|
7
|
+
data.tar.gz: 6192b46a62e77bb267c1b03f15686412efebbddf30dc10931941f2966ddc0bad4f97ec8823d3f4c939d9902c3cac89a3a5ebd209c61798314e2f94c94a537249
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## 0.23.0 - 2019/1/31
|
2
|
+
* 🚀 [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:
|
3
|
+
```
|
4
|
+
Blueprinter.configure do |config|
|
5
|
+
config.extractor_default = MyAutoExtractor
|
6
|
+
end
|
7
|
+
```
|
8
|
+
|
1
9
|
## 0.22.0 - 2019/12/26
|
2
10
|
* 🚀 [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).
|
3
11
|
|
data/README.md
CHANGED
@@ -742,6 +742,57 @@ end
|
|
742
742
|
---
|
743
743
|
</details>
|
744
744
|
|
745
|
+
<details>
|
746
|
+
<summary>Configurable Extractors</summary>
|
747
|
+
|
748
|
+
---
|
749
|
+
|
750
|
+
Blueprinter gets a given objects' values from the fields definitions using extractor classes. You can substitute your own extractor class globally or per-field.
|
751
|
+
|
752
|
+
#### Examples
|
753
|
+
|
754
|
+
For a specific kind of field, create an extractor class extending from `Blueprinter::Extractor`
|
755
|
+
```ruby
|
756
|
+
class MyFieldExtractor < Blueprinter::Extractor
|
757
|
+
def extract(_field_name, _object, _local_options, _options={})
|
758
|
+
# process your obscure_object
|
759
|
+
_object.clarified
|
760
|
+
end
|
761
|
+
end
|
762
|
+
```
|
763
|
+
|
764
|
+
```ruby
|
765
|
+
class MysteryBlueprint < Blueprinter::Base
|
766
|
+
field :obscure_object, extractor: MyFieldExtractor
|
767
|
+
end
|
768
|
+
```
|
769
|
+
|
770
|
+
For a global default, create an extractor class extending from `Blueprinter::AutoExtractor` and set the `extractor_default` configuration
|
771
|
+
```ruby
|
772
|
+
class MyAutoExtractor < Blueprinter::AutoExtractor
|
773
|
+
def initialize
|
774
|
+
super
|
775
|
+
@my_field_extractor = MyFieldExtractor.new
|
776
|
+
end
|
777
|
+
def extractor(object, options)
|
778
|
+
# dispatch to any class AutoExtractor can, plus more
|
779
|
+
if detect_obscurity(object)
|
780
|
+
@my_field_extractor
|
781
|
+
else
|
782
|
+
super
|
783
|
+
end
|
784
|
+
end
|
785
|
+
end
|
786
|
+
```
|
787
|
+
|
788
|
+
```ruby
|
789
|
+
Blueprinter.configure do |config|
|
790
|
+
config.extractor_default = MyAutoExtractor
|
791
|
+
end
|
792
|
+
```
|
793
|
+
|
794
|
+
---
|
795
|
+
</details>
|
745
796
|
|
746
797
|
<details>
|
747
798
|
<summary>Sorting Fields</summary>
|
data/lib/blueprinter/base.rb
CHANGED
@@ -51,7 +51,7 @@ module Blueprinter
|
|
51
51
|
# end
|
52
52
|
#
|
53
53
|
# @return [Field] A Field object
|
54
|
-
def self.identifier(method, name: method, extractor:
|
54
|
+
def self.identifier(method, name: method, extractor: Blueprinter.configuration.extractor_default.new, &block)
|
55
55
|
view_collection[:identifier] << Field.new(
|
56
56
|
method,
|
57
57
|
name,
|
@@ -120,7 +120,7 @@ module Blueprinter
|
|
120
120
|
current_view << Field.new(
|
121
121
|
method,
|
122
122
|
options.fetch(:name) { method },
|
123
|
-
options.fetch(:extractor) {
|
123
|
+
options.fetch(:extractor) { Blueprinter.configuration.extractor_default.new },
|
124
124
|
self,
|
125
125
|
options.merge(block: block),
|
126
126
|
)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Blueprinter
|
2
2
|
class Configuration
|
3
|
-
attr_accessor :association_default, :datetime_format, :field_default, :generator, :if, :method, :sort_fields_by, :unless
|
3
|
+
attr_accessor :association_default, :datetime_format, :field_default, :generator, :if, :method, :sort_fields_by, :unless, :extractor_default
|
4
4
|
|
5
5
|
VALID_CALLABLES = %i(if unless).freeze
|
6
6
|
|
@@ -13,6 +13,7 @@ module Blueprinter
|
|
13
13
|
@method = :generate
|
14
14
|
@sort_fields_by = :name_asc
|
15
15
|
@unless = nil
|
16
|
+
@extractor_default = AutoExtractor
|
16
17
|
end
|
17
18
|
|
18
19
|
def jsonify(blob)
|
data/lib/blueprinter/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: blueprinter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.23.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Hess
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2020-01-31 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: factory_bot
|