Class: Eco::API::UseCases

Inherits:
Object
  • Object
show all
Extended by:
Common::ClassAutoLoader
Includes:
Enumerable
Defined in:
lib/eco/api/usecases.rb,
lib/eco/api/usecases/base_io.rb,
lib/eco/api/usecases/use_case.rb,
lib/eco/api/usecases/base_case.rb,
lib/eco/api/usecases/use_case_io.rb,
lib/eco/api/usecases/default_cases.rb,
lib/eco/api/usecases/use_case_chain.rb,
lib/eco/api/usecases/backup/hris_case.rb,
lib/eco/api/usecases/backup/create_case.rb,
lib/eco/api/usecases/backup/update_case.rb,
lib/eco/api/usecases/backup/upsert_case.rb,
lib/eco/api/usecases/backup/create_details_case.rb,
lib/eco/api/usecases/backup/set_supervisor_case.rb,
lib/eco/api/usecases/backup/update_details_case.rb,
lib/eco/api/usecases/backup/set_default_tag_case.rb,
lib/eco/api/usecases/backup/transfer_account_case.rb,
lib/eco/api/usecases/backup/append_usergroups_case.rb,
lib/eco/api/usecases/backup/create_details_with_supervisor_case.rb

Direct Known Subclasses

Error::Handlers, Policies, DefaultCases

Defined Under Namespace

Classes: AmbiguousCaseReference, BaseCase, BaseIO, DefaultCases, UnkownCase, UseCase, UseCaseChain, UseCaseIO

Instance Method Summary collapse

Methods included from Common::ClassAutoLoader

_autoload_namespace, autoload_children, autoload_class?, autoload_namespace, autoload_namespace_ignore, autoloaded_children, autoloaded_class, autoloaded_namespaces, autoloads_children_of, known_class!, known_classes, new_classes, unloaded_children

Methods included from Common::ClassHelpers

#class_resolver, #descendants, #descendants?, #new_class, #resolve_class, #to_constant

Constructor Details

#initializeUseCases

Returns a new instance of UseCases.



29
30
31
32
33
# File 'lib/eco/api/usecases.rb', line 29

def initialize()
  @usecases      = {}
  @cache_init    = false
  @cases_by_name = {}
end

Instance Method Details

#add(usecase) ⇒ Object

Adds usecase to the Collection. Before it tries to auto-load pending classes of auto_loaded_class.

Parameters:



70
71
72
73
74
75
76
77
78
# File 'lib/eco/api/usecases.rb', line 70

def add(usecase)
  raise "Expected Eco::API::UseCases::UseCase object. Given: #{usecase}" if !usecase || !usecase.is_a?(Eco::API::UseCases::UseCase)
  name = usecase.name
  type = usecase.type
  puts "Warning: overriding '#{type.to_s}' case #{name}" if self.defined?(name, type: type)
  to_h[key(name, type)] = usecase
  @cache_init = false
  usecase
end

#case(name, type: nil) ⇒ Object



109
110
111
112
113
114
115
116
117
118
# File 'lib/eco/api/usecases.rb', line 109

def case(name, type: nil)
  if type && target_case = to_h[key(name, type)]
    return target_case
  elsif type
    raise UseCases::UnkownCase.new(case_name: name, type: type)
  end
  raise UseCases::UnkownCase.new(case_name: name, type: type) unless cases = by_name[name]
  raise UseCases::AmbiguousCaseReference.new(case_name: name) if cases.length > 1
  cases.first
end

#define(name, type:, &block) ⇒ Eco::API::UseCases::UseCase

Returns the name usecase of type type with the defined block.

Returns:



62
63
64
65
66
# File 'lib/eco/api/usecases.rb', line 62

def define(name, type:, &block)
  Eco::API::UseCases::UseCase.new(name, type: type, root: self, &block).tap do |usecase|
    add(usecase)
  end
end

#defined?(name, type: nil) ⇒ Boolean

Returns:

  • (Boolean)


52
53
54
55
# File 'lib/eco/api/usecases.rb', line 52

def defined?(name, type: nil)
  return to_h.key?(key(name, type)) if type
  name?(name)
end

#dupEco::API::UseCases

Returns a copy of instance object of self.

Returns:



81
82
83
# File 'lib/eco/api/usecases.rb', line 81

def dup
  self.class.new.merge(self)
end

#each(&block) ⇒ Object



43
44
45
46
# File 'lib/eco/api/usecases.rb', line 43

def each(&block)
  return to_enum(:each) unless block
  items.each(&block)
end

#empty?Boolean

Returns:

  • (Boolean)


39
40
41
# File 'lib/eco/api/usecases.rb', line 39

def empty?
  count == 0
end

#itemsObject



48
49
50
# File 'lib/eco/api/usecases.rb', line 48

def items
  to_h.values
end

#lengthObject



35
36
37
# File 'lib/eco/api/usecases.rb', line 35

def length
  count
end

#merge(cases) ⇒ Eco::API::UseCases

Merges cases overriding self for exisint parsers

Parameters:

Returns:



88
89
90
91
92
93
94
95
96
97
98
# File 'lib/eco/api/usecases.rb', line 88

def merge(cases)
  return self if !cases
  raise "Expected a Eco::API::UseCases object. Given #{cases.class}" if !cases.is_a?(Eco::API::UseCases)

  to_h.merge!(cases.to_h).transform_values do |usecase|
    usecase.root = self
  end

  @cache_init = false
  self
end

#name?(name) ⇒ Boolean

Returns:

  • (Boolean)


57
58
59
# File 'lib/eco/api/usecases.rb', line 57

def name?(name)
  !!by_name[name]
end

#namesObject



100
101
102
# File 'lib/eco/api/usecases.rb', line 100

def names
  by_name.keys
end

#types(name) ⇒ Object



104
105
106
107
# File 'lib/eco/api/usecases.rb', line 104

def types(name)
  return nil if !name?(name)
  by_name[name].map { |usecase| usecase.type }
end