class Eco::API::UseCases
Public Class Methods
new()
click to toggle source
# File lib/eco/api/usecases.rb, line 29 def initialize() @usecases = {} @cache_init = false @cases_by_name = {} init_caches end
Public Instance Methods
add(usecase)
click to toggle source
Adds `usecase` to the Collection. Before it tries to auto-load pending classes of `auto_loaded_class`. @param usecase [Eco::API::UseCases::UseCase] the usecase to be added.
# 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)
click to toggle source
# 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
define(name, type:, &block)
click to toggle source
@return [Eco::API::UseCases::UseCase] the `name` usecase of type `type` with the defined `block`.
# 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)
click to toggle source
# 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()
click to toggle source
@return [Eco::API::UseCases] a copy of instance object of `self`.
# File lib/eco/api/usecases.rb, line 82 def dup init_caches self.class.new.merge(self) end
each(&block)
click to toggle source
# File lib/eco/api/usecases.rb, line 44 def each(&block) return to_enum(:each) unless block items.each(&block) end
empty?()
click to toggle source
# File lib/eco/api/usecases.rb, line 40 def empty? count == 0 end
items()
click to toggle source
# File lib/eco/api/usecases.rb, line 49 def items to_h.values end
length()
click to toggle source
# File lib/eco/api/usecases.rb, line 36 def length count end
merge(cases)
click to toggle source
Merges cases overriding self for exisint parsers @param cases [Eco::API::UseCases] the source set of cases to be merged. @return [Eco::API::UseCases] `self`.
# 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)
click to toggle source
# File lib/eco/api/usecases.rb, line 58 def name?(name) !!by_name[name] end
names()
click to toggle source
# File lib/eco/api/usecases.rb, line 102 def names by_name.keys end
types(name)
click to toggle source
# File lib/eco/api/usecases.rb, line 106 def types(name) return nil if !name?(name) by_name[name].map { |usecase| usecase.type } end
Protected Instance Methods
to_h()
click to toggle source
# File lib/eco/api/usecases.rb, line 124 def to_h init_caches @usecases end
Private Instance Methods
by_name()
click to toggle source
# File lib/eco/api/usecases.rb, line 131 def by_name init_caches @by_name end
init_caches()
click to toggle source
# File lib/eco/api/usecases.rb, line 136 def init_caches # first, make sure it loads pending `:custom_children` children to be loaded re_init = self.class.autoload_children(self) return true if @cache_init && !re_init @by_name = @usecases.values.group_by { |usecase| usecase.name } @cache_init = true end
key(name, type)
click to toggle source
# File lib/eco/api/usecases.rb, line 144 def key(name, type) name.to_s + type.to_s end
name(key)
click to toggle source
# File lib/eco/api/usecases.rb, line 148 def name(key) key.to_s.split(":").first end
type()
click to toggle source
# File lib/eco/api/usecases.rb, line 152 def type key.to_s.split(":").last&.to_sym end