Class: Eco::API::UseCases

Inherits:
Object show all
Extended by:
Language::Klass::AutoLoader
Includes:
Enumerable
Defined in:
lib/eco/api/usecases.rb,
lib/eco/api/usecases/cli.rb,
lib/eco/api/usecases/lib.rb,
lib/eco/api/usecases/base_io.rb,
lib/eco/api/usecases/cli/dsl.rb,
lib/eco/api/usecases/default.rb,
lib/eco/api/usecases/graphql.rb,
lib/eco/api/usecases/samples.rb,
lib/eco/api/usecases/service.rb,
lib/eco/api/usecases/use_case.rb,
lib/eco/api/usecases/workflow.rb,
lib/eco/api/usecases/base_case.rb,
lib/eco/api/usecases/ooze_cases.rb,
lib/eco/api/usecases/use_case_io.rb,
lib/eco/api/usecases/default/meta.rb,
lib/eco/api/usecases/ooze_samples.rb,
lib/eco/api/usecases/default/utils.rb,
lib/eco/api/usecases/default_cases.rb,
lib/eco/api/usecases/default/people.rb,
lib/eco/api/usecases/samples/people.rb,
lib/eco/api/usecases/use_case_chain.rb,
lib/eco/api/usecases/samples/drivers.rb,
lib/eco/api/usecases/default/locations.rb,
lib/eco/api/usecases/ooze_samples/helpers.rb,
lib/eco/api/usecases/default_cases/samples.rb,
lib/eco/api/usecases/ooze_samples/helpers/filters.rb,
lib/eco/api/usecases/ooze_samples/helpers/creatable.rb,
lib/eco/api/usecases/ooze_samples/helpers/rescuable.rb,
lib/eco/api/usecases/ooze_samples/helpers/shortcuts.rb,
lib/eco/api/usecases/ooze_samples/helpers_migration.rb,
lib/eco/api/usecases/ooze_samples/helpers/ooze_handlers.rb,
lib/eco/api/usecases/ooze_samples/helpers/exportable_ooze.rb,
lib/eco/api/usecases/ooze_samples/helpers/exportable_register.rb

Overview

Autoloading children is done on init and each time usecases it's queried

Direct Known Subclasses

Error::Handlers, Policies, Default, DefaultCases, Samples

Defined Under Namespace

Modules: GraphQL, Lib, Service Classes: AmbiguousCaseReference, BaseCase, BaseIO, Cli, Default, DefaultCases, OozeCases, OozeSamples, Samples, UnknownCase, UseCase, UseCaseChain, UseCaseIO, Workflow

Instance Method Summary collapse

Methods included from Language::Klass::AutoLoader

_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 Language::Klass::Hierarchy

#descendants, #descendants?

Methods included from Language::Klass::Resolver

#class_resolver, #resolve_class

Constructor Details

#initializeUseCases

Returns a new instance of UseCases.



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

def initialize
  @usecases      = {}
  @cache_init    = false
  @cases_by_name = {}

  init_caches
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:

Raises:

  • (ArgumentError)


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

def add(usecase)
  msg = "Expected Eco::API::UseCases::UseCase object. Given: #{usecase.class}"
  raise ArgumentError, msg unless usecase.is_a?(Eco::API::UseCases::UseCase)

  name = usecase.name
  type = usecase.type
  puts "Warning: overriding '#{type}' case #{name}" if self.defined?(name, type: type)

  to_h[key(name, type)] = usecase
  @cache_init           = false

  usecase
end

#case(name, type: nil) ⇒ Object



128
129
130
131
132
133
134
135
136
137
138
139
# File 'lib/eco/api/usecases.rb', line 128

def case(name, type: nil)
  if type && (target_case = to_h[key(name, type)])
    return target_case
  elsif type
    raise UseCases::UnknownCase.new(case_name: name, type: type)
  end

  raise UseCases::UnknownCase.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:, model: nil, &block) ⇒ Eco::API::UseCases::UseCase

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

Returns:



65
66
67
68
69
70
71
72
73
74
75
# File 'lib/eco/api/usecases.rb', line 65

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

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

Returns:

  • (Boolean)


54
55
56
57
58
# File 'lib/eco/api/usecases.rb', line 54

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:



94
95
96
97
# File 'lib/eco/api/usecases.rb', line 94

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

#each(&block) ⇒ Object



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

def each(&block)
  return to_enum(:each) unless block

  items.each(&block)
end

#empty?Boolean

Returns:

  • (Boolean)


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

def empty?
  count.zero?
end

#itemsObject



50
51
52
# File 'lib/eco/api/usecases.rb', line 50

def items
  to_h.values
end

#lengthObject



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

def length
  count
end

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

Merges cases overriding self for exisint parsers

Parameters:

Returns:



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/eco/api/usecases.rb', line 102

def merge(cases)
  return self unless cases

  msg = "Expected a Eco::API::UseCases object. Given #{cases.class}"
  raise msg unless 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)


60
61
62
# File 'lib/eco/api/usecases.rb', line 60

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

#namesObject



118
119
120
# File 'lib/eco/api/usecases.rb', line 118

def names
  by_name.keys
end

#types(name) ⇒ Object



122
123
124
125
126
# File 'lib/eco/api/usecases.rb', line 122

def types(name)
  return unless name?(name)

  by_name[name].map(&:type)
end