module Fear::Extractor

@api private

Constants

BUILD_EXTRACTOR
EXTRACTOR_NOT_FOUND
ExtractorNotFound

Public Class Methods

find_extractor(klass) click to toggle source

@param klass [Class, String] @api private

# File lib/fear/extractor.rb, line 39
def find_extractor(klass)
  @registry.call_or_else(klass, &EXTRACTOR_NOT_FOUND)
end
register_extractor(*args) click to toggle source

Register extractor for given class @!method register_extractor(*names, extractor)

@param names [<Class, String>, Class, String] name of a class. You can also pass alias for the name
@param extractor [Proc<any => Fear::Option>] proc taking any argument and returned Option
  of extracted value('s)

@example

register_extractor(Fear::Some, Fear.case(Fear::Some) { |some| some.get }.lift)

register_extractor(User, Fear.case(User) { |user|} [user.id, user.email] , )

@example registering an alias. Alias should be CamelCased string

register_extractor(Fear::Some, 'Some', Fear.case(Fear::Some) { |some| some.get }.lift)

# no you can extract Fear::Some's using Some alias
m.case(Fear['Some(value : Integer)']) { |value:| value * 2 }
# File lib/fear/extractor.rb, line 60
def register_extractor(*args)
  *keys, extractor = *args

  @mutex.synchronize do
    keys.uniq.each do |key|
      @registry = BUILD_EXTRACTOR.(key, extractor).or_else(@registry)
    end
  end
  self
end