class Eco::API::UseCases::BaseIO

Basic class to manage InputOuput for usecases

Attributes

input[R]
options[R]
output[RW]
people[R]
session[R]
type[R]

Public Class Methods

input_required?(type) click to toggle source
# File lib/eco/api/usecases/base_io.rb, line 22
def input_required?(type)
  !valid_type?(type) || [:import, :sync].include?(type)
end
new(type: nil, input: nil, people: nil, session:, options: {}, validate: true) click to toggle source

@param type [Symbol] a valid type (among `self.class.types`) @param input [Eco::API::Common::People::Entries, Eco::API::Organization::People] the input data of reference. @param people [Eco::API::Organization::People] people object. @param session [Eco::API:Session] @param options [Hash] hash with symbol keys (i.e. behaviour modifiers, cli trackers, filters, etc.)

# File lib/eco/api/usecases/base_io.rb, line 41
def initialize(type: nil, input: nil, people: nil, session:, options: {}, validate: true)
  @output      = nil
  self.type    = type if type

  if self.type && validate
    validate_args(input: input, people: people, session: session, options: options)
  end

  @input       = input
  @people      = people
  @session     = session
  @options     = options
end
people_required?(type) click to toggle source
# File lib/eco/api/usecases/base_io.rb, line 26
def people_required?(type)
  !valid_type?(type) || [:filter, :transform, :sync, :error_handler, :export].include?(type)
end

Public Instance Methods

base() click to toggle source

Helper to obtain an `BaseIO` objcect from any child class. @return [Eco::API::UseCases::BaseIO]

# File lib/eco/api/usecases/base_io.rb, line 63
def base
  kargs = params(keyed: true).merge(type: self.type).slice(:type, :input, :people, :session, :options)
  Eco::API::UseCases::BaseIO.new(**kargs)
end
new(**kargs) click to toggle source

@see Eco::API::UseCases::BaseIO#initialize @return [Eco::API::UseCases::BaseIO]

# File lib/eco/api/usecases/base_io.rb, line 70
def new(**kargs)
  default = {
    type:     self.type,
    input:    self.input,
    people:   self.people,
    session:  self.session,
    options:  self.options,
    validate: true
  }.merge(kargs)
  self.class.new(**default.merge(kargs))
end
params(keyed: false, all: false) click to toggle source

Helper to build a `Hash` of symbol keys or `Array` with params to do callbacks.

# File lib/eco/api/usecases/base_io.rb, line 83
def params(keyed: false, all: false)
  kargs = {}
  kargs.merge!(input:    input)  if input_required?  || all
  kargs.merge!(people:  people)  if people_required? || all
  kargs.merge!(session: session, options: options)
  keyed ? kargs : kargs.values
end
type=(value) click to toggle source

@param value [Symbol] a valid type (among `self.class.types`)

# File lib/eco/api/usecases/base_io.rb, line 56
def type=(value)
  self.class.validate_type(value)
  @type = value
end

Private Instance Methods

input_required?() click to toggle source
# File lib/eco/api/usecases/base_io.rb, line 107
def input_required?
  self.class.input_required?(type)
end
people_required?() click to toggle source
# File lib/eco/api/usecases/base_io.rb, line 111
def people_required?
  self.class.people_required?(type)
end
validate_args(input:, people:, session:, options:) click to toggle source
# File lib/eco/api/usecases/base_io.rb, line 93
def validate_args(input:, people:, session:, options:)
  case
  when !session.is_a?(Eco::API::Session)
    raise MissingParameter.new("UseCase", required: :session, given: session.class)
  when input_required? && !input
    raise MissingParameter.new("UseCase", type: type, required: :input, given: input.class)
  when people_required? && !people.is_a?(Eco::API::Organization::People)
    raise MissingParameter.new("UseCase", type: type, required: :people, given: people.class)
  when !options || (options && !options.is_a?(Hash))
    raise MissingParameter.new("Use Case options", required: :Hash, given: options.class)
  end
  true
end