Class: Spud::BuildTools::Spud::BlockParamInfo

Inherits:
Object
  • Object
show all
Defined in:
lib/spud/build_tools/spud/block_param_info.rb

Instance Method Summary collapse

Constructor Details

#initialize(filename, &block) ⇒ BlockParamInfo

Returns a new instance of BlockParamInfo.

Parameters:

  • filename (String)
  • block (Proc)


9
10
11
12
# File 'lib/spud/build_tools/spud/block_param_info.rb', line 9

def initialize(filename, &block)
  @filename = filename
  @block = block
end

Instance Method Details

#arg_hash_stringString

Returns:

  • (String)


46
47
48
# File 'lib/spud/build_tools/spud/block_param_info.rb', line 46

def arg_hash_string
  "{ #{parameters.map(&:last).map { |n| "#{n}: #{n}" }.join(', ')} }"
end

#arg_valuesHash

Returns:

  • (Hash)


51
52
53
54
55
56
# File 'lib/spud/build_tools/spud/block_param_info.rb', line 51

def arg_values
  @arg_values ||= begin
    positional, named = dummy_args
    lambda(arg_hash_string).call(*positional, **named)
  end
end

#dummy_argsArray

Returns:

  • (Array)


31
32
33
# File 'lib/spud/build_tools/spud/block_param_info.rb', line 31

def dummy_args
  [dummy_positional_args, dummy_named_args]
end

#dummy_named_argsHash{Symbol->NilClass

Returns ].

Returns:

  • (Hash{Symbol->NilClass)

    ]



41
42
43
# File 'lib/spud/build_tools/spud/block_param_info.rb', line 41

def dummy_named_args
  parameters.select { |p| p.first == :keyreq }.map(&:last).each_with_object({}) { |n, h| h[n] = nil }
end

#dummy_positional_argsArray<NilClass>

Returns:

  • (Array<NilClass>)


36
37
38
# File 'lib/spud/build_tools/spud/block_param_info.rb', line 36

def dummy_positional_args
  Array.new(parameters.count { |p| p.first == :req })
end

#lambda(body = nil) ⇒ Proc

Returns:

  • (Proc)


64
65
66
67
68
69
70
71
72
73
# File 'lib/spud/build_tools/spud/block_param_info.rb', line 64

def lambda(body = nil)
  line = File.read(@filename).split("\n")[@block.source_location.last - 1]

  match = /(do|{)\s*\|(?<params>[^|]+)\|/.match(line)
  return -> {} unless match

  param_source = match[:params]
  param_source += ', _: nil, __: nil, ___: nil' if body
  eval "-> (#{param_source}) { #{body} }"
end

#parametersArray<Array<Symbol>>

Returns:

  • (Array<Array<Symbol>>)


59
60
61
# File 'lib/spud/build_tools/spud/block_param_info.rb', line 59

def parameters
  @parameters ||= lambda.parameters
end

#task_argsArray<Spud::TaskArg>

Returns:



15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/spud/build_tools/spud/block_param_info.rb', line 15

def task_args
  parameters.map do |type, name|
    case type
    when :req
      TaskArg.new(name, 'positional')
    when :opt
      TaskArg.new(name, 'positional', default: arg_values[name])
    when :keyreq
      TaskArg.new(name, 'named')
    when :key
      TaskArg.new(name, 'named', default: arg_values[name])
    end
  end
end