Class: Longjing::Parameters

Inherits:
Object
  • Object
show all
Defined in:
lib/longjing/parameters.rb

Instance Method Summary collapse

Constructor Details

#initialize(action) ⇒ Parameters

Returns a new instance of Parameters.



3
4
5
6
# File 'lib/longjing/parameters.rb', line 3

def initialize(action)
  @action = action
  @params = action.params
end

Instance Method Details

#permutate(objects) ⇒ Object

return: [objs, objs…]



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/longjing/parameters.rb', line 16

def permutate(objects)
  return [] if @params.empty?
  type_args = @params.map do |param|
    args = objects.select { |obj| obj.is_a?(param.type) }
    return [] if args.empty?
    args
  end
  Longjing.logger.debug {
    "type arguments: #{type_args.map {|v| v.size}.join(', ')}"
  }

  type_args[0].product(*type_args[1..-1]).reject do |array|
    array.uniq.size < @params.size
  end
end

#propositionalize(objects) ⇒ Object



8
9
10
11
12
13
# File 'lib/longjing/parameters.rb', line 8

def propositionalize(objects)
  return [@action] if objects.empty?
  permutate(objects).map do |arguments|
    @action.substitute(arguments)
  end.compact
end