Class: Eco::API::UseCases

Inherits:
Object
  • Object
show all
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_case.rb,
lib/eco/api/usecases/default_cases.rb,
lib/eco/api/usecases/use_case_chain.rb,
lib/eco/api/usecases/default_cases/hris_case.rb,
lib/eco/api/usecases/default_cases/create_case.rb,
lib/eco/api/usecases/default_cases/delete_case.rb,
lib/eco/api/usecases/default_cases/new_id_case.rb,
lib/eco/api/usecases/default_cases/to_csv_case.rb,
lib/eco/api/usecases/default_cases/update_case.rb,
lib/eco/api/usecases/default_cases/upsert_case.rb,
lib/eco/api/usecases/default_cases/refresh_case.rb,
lib/eco/api/usecases/default_cases/reinvite_case.rb,
lib/eco/api/usecases/default_cases/new_email_case.rb,
lib/eco/api/usecases/default_cases/recover_db_case.rb,
lib/eco/api/usecases/default_cases/email_as_id_case.rb,
lib/eco/api/usecases/default_cases/change_email_case.rb,
lib/eco/api/usecases/default_cases/codes_to_tags_case.rb,
lib/eco/api/usecases/default_cases/create_details_case.rb,
lib/eco/api/usecases/default_cases/remove_account_case.rb,
lib/eco/api/usecases/default_cases/set_supervisor_case.rb,
lib/eco/api/usecases/default_cases/update_details_case.rb,
lib/eco/api/usecases/default_cases/refresh_presets_case.rb,
lib/eco/api/usecases/default_cases/set_default_tag_case.rb,
lib/eco/api/usecases/default_cases/to_csv_detailed_case.rb,
lib/eco/api/usecases/default_cases/switch_supervisor_case.rb,
lib/eco/api/usecases/default_cases/reset_landing_page_case.rb,
lib/eco/api/usecases/default_cases/create_details_with_supervisor_case.rb

Direct Known Subclasses

Error::Handlers, Policies, DefaultCases

Defined Under Namespace

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

Instance Method Summary collapse

Constructor Details

#initializeUseCases



24
25
26
27
28
# File 'lib/eco/api/usecases.rb', line 24

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

Instance Method Details

#add(usecase) ⇒ Object



47
48
49
50
51
52
53
54
55
# File 'lib/eco/api/usecases.rb', line 47

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)
  @cache_init = false
  @usecases[key(name, type)] = usecase
  usecase
end

#case(name, type: nil) ⇒ Object



81
82
83
84
85
86
87
88
89
90
# File 'lib/eco/api/usecases.rb', line 81

def case(name, type: nil)
  if type && target_case = @usecases[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) ⇒ Object



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

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



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

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

#each(params: {}, &block) ⇒ Object



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

def each(params: {}, &block)
  return to_enum(:each) unless block
  items.each(&block)
end

#empty?Boolean



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

def empty?
  count == 0
end

#itemsObject



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

def items
  @usecases.values
end

#lengthObject



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

def length
  count
end

#merge(cases) ⇒ Object

merges cases overriding self for exisint parsers



93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/eco/api/usecases.rb', line 93

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

  @usecases.merge!(cases_hash)

  cases_hash.transform_values do |usecase|
    usecase.root = self
  end

  @cache_init = false
  self
end

#name?(name) ⇒ Boolean



68
69
70
# File 'lib/eco/api/usecases.rb', line 68

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

#namesObject



72
73
74
# File 'lib/eco/api/usecases.rb', line 72

def names
  by_name.keys
end

#types(name) ⇒ Object



76
77
78
79
# File 'lib/eco/api/usecases.rb', line 76

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