Class: Eco::API::UseCases
- Extended by:
- Common::ClassAutoLoader
- 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/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/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
Defined Under Namespace
Modules: GraphQL, Lib, Service Classes: AmbiguousCaseReference, BaseCase, BaseIO, Cli, Default, DefaultCases, OozeCases, OozeSamples, Samples, UnknownCase, UseCase, UseCaseChain, UseCaseIO
Instance Method Summary collapse
-
#add(usecase) ⇒ Object
Adds
usecaseto the Collection. - #case(name, type: nil) ⇒ Object
-
#define(name, type:, model: nil, &block) ⇒ Eco::API::UseCases::UseCase
The
nameusecase of typetypewith the definedblock. - #defined?(name, type: nil) ⇒ Boolean
-
#dup ⇒ Eco::API::UseCases
A copy of instance object of
self. - #each(&block) ⇒ Object
- #empty? ⇒ Boolean
-
#initialize ⇒ UseCases
constructor
A new instance of UseCases.
- #items ⇒ Object
- #length ⇒ Object
-
#merge(cases) ⇒ Eco::API::UseCases
Merges cases overriding self for exisint parsers.
- #name?(name) ⇒ Boolean
- #names ⇒ Object
- #types(name) ⇒ Object
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 Language::Klass::InheritableClassVars
#inheritable_attrs, #inheritable_class_vars, #inherited
Methods included from Language::Klass::Naming
#instance_variable_name, #to_constant
Methods included from Language::Klass::Hierarchy
Methods included from Language::Klass::Builder
Methods included from Language::Klass::Resolver
#class_resolver, #resolve_class
Constructor Details
#initialize ⇒ UseCases
Returns a new instance of UseCases.
28 29 30 31 32 33 |
# 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.
77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/eco/api/usecases.rb', line 77 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
123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/eco/api/usecases.rb', line 123 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.
63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/eco/api/usecases.rb', line 63 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
53 54 55 56 |
# File 'lib/eco/api/usecases.rb', line 53 def defined?(name, type: nil) return to_h.key?(key(name, type)) if type name?(name) end |
#dup ⇒ Eco::API::UseCases
Returns a copy of instance object of self.
91 92 93 94 |
# File 'lib/eco/api/usecases.rb', line 91 def dup init_caches self.class.new.merge(self) end |
#each(&block) ⇒ Object
43 44 45 46 47 |
# File 'lib/eco/api/usecases.rb', line 43 def each(&block) return to_enum(:each) unless block items.each(&block) end |
#empty? ⇒ Boolean
39 40 41 |
# File 'lib/eco/api/usecases.rb', line 39 def empty? count.zero? end |
#items ⇒ Object
49 50 51 |
# File 'lib/eco/api/usecases.rb', line 49 def items to_h.values end |
#length ⇒ Object
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
99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/eco/api/usecases.rb', line 99 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
58 59 60 |
# File 'lib/eco/api/usecases.rb', line 58 def name?(name) !!by_name[name] end |
#names ⇒ Object
113 114 115 |
# File 'lib/eco/api/usecases.rb', line 113 def names by_name.keys end |
#types(name) ⇒ Object
117 118 119 120 121 |
# File 'lib/eco/api/usecases.rb', line 117 def types(name) return unless name?(name) by_name[name].map(&:type) end |