Class: MiniService::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/mini_service/base.rb

Defined Under Namespace

Classes: ExtraArgumentError, MissingArgumentError

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.optionalObject

Returns the value of attribute optional.



13
14
15
# File 'lib/mini_service/base.rb', line 13

def optional
  @optional
end

.optsObject (readonly)

Returns the value of attribute opts.



14
15
16
# File 'lib/mini_service/base.rb', line 14

def opts
  @opts
end

.requiredObject

Returns the value of attribute required.



12
13
14
# File 'lib/mini_service/base.rb', line 12

def required
  @required
end

Class Method Details

.add_optional_arguments(options) ⇒ Object



33
34
35
# File 'lib/mini_service/base.rb', line 33

def add_optional_arguments(options)
  optional.merge!(options)
end

.add_required_argument(argument) ⇒ Object



37
38
39
40
41
42
# File 'lib/mini_service/base.rb', line 37

def add_required_argument(argument)
  case argument
  when Symbol, String then required << argument
  when Array then add_required_arguments(argument)
  end
end

.add_required_arguments(arguments) ⇒ Object



29
30
31
# File 'lib/mini_service/base.rb', line 29

def add_required_arguments(arguments)
  arguments.each(&method(:add_required_argument))
end

.arguments(*req, **opt) ⇒ Object



22
23
24
25
26
27
# File 'lib/mini_service/base.rb', line 22

def arguments(*req, **opt)
  add_required_arguments(req)
  add_optional_arguments(opt)

  define_readers
end

.call(**opts) ⇒ Object



54
55
56
57
58
59
60
# File 'lib/mini_service/base.rb', line 54

def call(**opts)
  @opts = opts
  validate_extra_arguments
  validate_missing_arguments

  new(**optional.merge(opts)).send :perform
end

.define_readersObject



44
45
46
47
# File 'lib/mini_service/base.rb', line 44

def define_readers
  required.each { |r| attr_reader r }
  optional.each_key { |r| attr_reader r }
end

.extra_argumentsObject



80
81
82
# File 'lib/mini_service/base.rb', line 80

def extra_arguments
  (opts.keys - (required + optional.keys))
end

.inherited(subclass) ⇒ Object



49
50
51
52
# File 'lib/mini_service/base.rb', line 49

def inherited(subclass)
  subclass.set_initial_values(required, optional)
  subclass.arguments
end

.missing_argumentsObject



76
77
78
# File 'lib/mini_service/base.rb', line 76

def missing_arguments
  (required - opts.keys)
end

.set_initial_values(req, opt) ⇒ Object



16
17
18
19
20
# File 'lib/mini_service/base.rb', line 16

def set_initial_values(req, opt)
  @required ||= req || []
  @optional ||= opt || {}
  nil
end

.validate_extra_argumentsObject



62
63
64
65
66
67
# File 'lib/mini_service/base.rb', line 62

def validate_extra_arguments
  if extra_arguments.any?
    raise ExtraArgumentError,
          "Extra arguments: #{extra_arguments.join(', ')}"
  end
end

.validate_missing_argumentsObject



69
70
71
72
73
74
# File 'lib/mini_service/base.rb', line 69

def validate_missing_arguments
  if missing_arguments.any?
    raise MissingArgumentError,
          "Missing arguments: #{missing_arguments.join(', ')}"
  end
end