Skip to content

Commit

Permalink
Add 'exclude' DSL method for excluding inherited fields
Browse files Browse the repository at this point in the history
Signed-off-by: Jordan Hollinger <[email protected]>
  • Loading branch information
jhollinger committed Jul 25, 2024
1 parent a8f53af commit e0801c7
Showing 1 changed file with 17 additions and 2 deletions.
19 changes: 17 additions & 2 deletions lib/blueprinter/v2.rb
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ def self.[](view)
def self.view(name, &definition)
raise Errors::InvalidBlueprint, "View name may not contain '.'" if name.to_s =~ /\./

name = name.to_sym
views[name] = Class.new(self)
views[name].blueprint_name << name
views[name].class_eval(&definition) if definition
Expand All @@ -53,12 +54,26 @@ def self.view(name, &definition)
# Define a field
# rubocop:todo Lint/UnusedMethodArgument
def self.field(name, options = {})
fields[name] = 'TODO'
fields[name.to_sym] = 'TODO'
end

# Define an association
def self.association(name, blueprint, options = {})
fields[name] = 'TODO'
fields[name.to_sym] = 'TODO'
end

# Exclude fields/associations
def self.exclude(*names)
unknown = []
names.each do |name|
name_sym = name.to_sym
if fields.key? name_sym
fields.delete name_sym
else
unknown << name.to_s
end
end
raise Errors::InvalidBlueprint, "Unknown excluded fields in '#{self}': #{unknown.join(', ')}" if unknown.any?
end

def self.render(obj, options = {})
Expand Down

0 comments on commit e0801c7

Please sign in to comment.