Skip to content

Commit 36871de

Browse files
committed
empty
1 parent a16d278 commit 36871de

File tree

4 files changed

+19
-35
lines changed

4 files changed

+19
-35
lines changed

lib/blueprinter/v2/dsl.rb

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,19 @@ module V2
55
# Methods for defining Blueprint fields and views
66
module DSL
77
#
8-
# Define a new child view, which is a subclass of self. If a view with this name already exists, the definition will be
8+
# Define a child view, which is a subclass of self. If a view with this name already exists, the definition will be
99
# appended.
1010
#
1111
# @param name [Symbol] Name of the view
12-
# @param fields [Boolean] Inherit fields from parents (default true)
13-
# @param options [Boolean] Inherit options from parents (default true)
14-
# @param extensions [Boolean] Inherit extensions from parents (default true)
12+
# @param empty [Boolean] Don't inherit fields from ancestors (default false)
1513
# @yield Define the view in the block
1614
#
17-
def view(name, fields: nil, options: nil, extensions: nil, &definition)
15+
def view(name, empty: nil, &definition)
1816
raise Errors::InvalidBlueprint, "View name may not contain '.'" if name.to_s =~ /\./
1917

2018
name = name.to_sym
2119
partials[name] = definition
22-
views[name] = ViewBuilder::Def.new(definition:, fields:, options:, extensions:)
20+
views[name] = ViewBuilder::Def.new(definition:, empty:)
2321
end
2422

2523
#

lib/blueprinter/v2/view_builder.rb

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ module V2
1111
class ViewBuilder
1212
include Enumerable
1313

14-
Def = Struct.new(:definition, :fields, :options, :extensions, keyword_init: true)
14+
Def = Struct.new(:definition, :empty, keyword_init: true)
1515

1616
# @param parent [Class] A subclass of Blueprinter::V2::Base
1717
def initialize(parent)
@@ -88,16 +88,12 @@ def reset
8888
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
8989
def build_view(name)
9090
defs = @pending[name]
91-
inherit_fields = defs.reduce(true) { |acc, d| d.fields.nil? ? acc : d.fields }
92-
inherit_options = defs.reduce(true) { |acc, d| d.options.nil? ? acc : d.options }
93-
inherit_extensions = defs.reduce(true) { |acc, d| d.extensions.nil? ? acc : d.extensions }
91+
empty = defs.reduce(false) { |acc, d| d.empty.nil? ? acc : d.empty }
9492

9593
view = Class.new(@parent)
9694
view.views.reset
9795
view.append_name(name)
98-
view.schema.clear unless inherit_fields
99-
view.options.clear unless inherit_options
100-
view.extensions.clear unless inherit_extensions
96+
view.schema.clear if empty
10197
defs.each { |d| view.class_eval(&d.definition) if d.definition }
10298
view
10399
end

spec/v2/view_builder_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,6 @@
109109
end
110110

111111
def definition(definition)
112-
described_class::Def.new(definition:, fields: true, options: true, extensions: true)
112+
described_class::Def.new(definition:, empty: false)
113113
end
114114
end

spec/v2/view_spec.rb

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
options[:exclude_if_nil] = true
4545
extensions << Class.new(Blueprinter::Extension).new
4646
fields :id
47-
view(:identifier, fields: false) { field :id }
47+
view(:identifier, empty: true) { field :id }
4848
end
4949
end
5050

@@ -55,27 +55,25 @@
5555
view :extended do
5656
field :description
5757
end
58-
59-
view :minimal, options: false, extensions: false
6058
end
6159
end
6260

63-
it "inherits fields by default" do
64-
ref = blueprint.reflections
65-
expect(ref[:default].fields.keys).to eq %i[id name date]
66-
expect(ref[:extended].fields.keys).to eq %i[id name date description]
61+
it "inherits options" do
62+
expect(blueprint.options).to eq({ exclude_if_nil: true })
63+
expect(blueprint[:extended].options).to eq({ exclude_if_nil: true })
6764
end
6865

69-
it "inherits options by default" do
70-
expect(blueprint.options).to eq({exclude_if_nil: true})
71-
expect(blueprint[:extended].options).to eq({exclude_if_nil: true})
72-
end
73-
74-
it "inherits extensions by default" do
66+
it "inherits extensions" do
7567
expect(blueprint.extensions.size).to eq 1
7668
expect(blueprint[:extended].extensions.size).to eq 1
7769
end
7870

71+
it "inherits fields by default" do
72+
ref = blueprint.reflections
73+
expect(ref[:default].fields.keys).to eq %i[id name date]
74+
expect(ref[:extended].fields.keys).to eq %i[id name date description]
75+
end
76+
7977
it "can opt out of inheriting fields" do
8078
expect(application_blueprint.reflections[:identifier].fields.keys).to eq %i[id]
8179
end
@@ -84,14 +82,6 @@
8482
expect(blueprint.reflections[:identifier].fields.keys).to eq %i[id]
8583
end
8684

87-
it "can opt out of inheriting options" do
88-
expect(blueprint[:minimal].options).to eq({})
89-
end
90-
91-
it "can opt out of inheriting extensions" do
92-
expect(blueprint[:minimal].extensions).to eq([])
93-
end
94-
9585
it "can be extended" do
9686
bp1 = Class.new(Blueprinter::V2::Base) do
9787
view(:foo) { fields :id, :name }

0 commit comments

Comments
 (0)