module SnFoil::Contexts::BuildContext

Public Instance Methods

build(params:, entity: nil, **options) click to toggle source
# File lib/sn_foil/contexts/build_context.rb, line 18
def build(params:, entity: nil, **options)
  new(entity).build(**options, params: params)
end
setup_build(method = nil, **options, &block) click to toggle source
# File lib/sn_foil/contexts/build_context.rb, line 22
def setup_build(method = nil, **options, &block)
  raise ArgumentError, '#setup_build requires either a method name or a block' if method.nil? && block.nil?

  (@i_setup_build_hooks ||= []) << { method: method, block: block, if: options[:if], unless: options[:unless] }
end
setup_build_hooks() click to toggle source
# File lib/sn_foil/contexts/build_context.rb, line 53
def setup_build_hooks
  self.class.i_setup_build_hooks || []
end
setup_build_object(params: {}, object: nil, **options) click to toggle source
# File lib/sn_foil/contexts/build_context.rb, line 29
def setup_build_object(params: {}, object: nil, **options)
  object = if object
             wrap_object(object)
           else
             klass = options.fetch(:model) { model }
             wrap_object(klass).new
           end

  object.attributes = params
  options.merge! object: object
end

Private Instance Methods

before_setup_build_object(**options) click to toggle source
# File lib/sn_foil/contexts/build_context.rb, line 59
def before_setup_build_object(**options)
  options = setup(**options)
  options = setup_hooks.reduce(options) { |opts, hook| run_hook(hook, opts) }
  options = setup_build(**options)
  setup_build_hooks.reduce(options) { |opts, hook| run_hook(hook, opts) }
end