Class: Eco::API::UseCases
- Inherits:
-
Object
- Object
- Eco::API::UseCases
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/ooze_samples.rb,
lib/eco/api/usecases/default_cases.rb,
lib/eco/api/usecases/use_case_chain.rb,
lib/eco/api/usecases/ooze_samples/helpers.rb,
lib/eco/api/usecases/default_cases/samples.rb,
lib/eco/api/usecases/ooze_samples/helpers/shortcuts.rb
Defined Under Namespace
Classes: AmbiguousCaseReference, BaseCase, BaseIO, DefaultCases, OozeSamples, UnkownCase, UseCase, UseCaseChain, UseCaseIO
Instance Method Summary
collapse
_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
#class_resolver, #descendants, #descendants?, #inheritable_attrs, #inheritable_class_vars, #inherited, #instance_variable_name, #new_class, #resolve_class, #to_constant
Constructor Details
Returns a new instance of UseCases.
29
30
31
32
33
34
|
# File 'lib/eco/api/usecases.rb', line 29
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
.
71
72
73
74
75
76
77
78
79
|
# File 'lib/eco/api/usecases.rb', line 71
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
111
112
113
114
115
116
117
118
119
120
|
# File 'lib/eco/api/usecases.rb', line 111
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
|
Returns the name
usecase of type type
with the defined block
.
63
64
65
66
67
|
# File 'lib/eco/api/usecases.rb', line 63
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
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
|
Returns a copy of instance object of self
.
82
83
84
85
|
# File 'lib/eco/api/usecases.rb', line 82
def dup
init_caches
self.class.new.merge(self)
end
|
#each(&block) ⇒ Object
44
45
46
47
|
# File 'lib/eco/api/usecases.rb', line 44
def each(&block)
return to_enum(:each) unless block
items.each(&block)
end
|
#empty? ⇒ Boolean
40
41
42
|
# File 'lib/eco/api/usecases.rb', line 40
def empty?
count == 0
end
|
#items ⇒ Object
49
50
51
|
# File 'lib/eco/api/usecases.rb', line 49
def items
to_h.values
end
|
#length ⇒ Object
36
37
38
|
# File 'lib/eco/api/usecases.rb', line 36
def length
count
end
|
Merges cases overriding self for exisint parsers
90
91
92
93
94
95
96
97
98
99
100
|
# File 'lib/eco/api/usecases.rb', line 90
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
58
59
60
|
# File 'lib/eco/api/usecases.rb', line 58
def name?(name)
!!by_name[name]
end
|
#names ⇒ Object
102
103
104
|
# File 'lib/eco/api/usecases.rb', line 102
def names
by_name.keys
end
|
#types(name) ⇒ Object
106
107
108
109
|
# File 'lib/eco/api/usecases.rb', line 106
def types(name)
return nil if !name?(name)
by_name[name].map { |usecase| usecase.type }
end
|