Class: Spud::BuildTools::Spud::BlockParamInfo
- Inherits:
-
Object
- Object
- Spud::BuildTools::Spud::BlockParamInfo
- Defined in:
- lib/spud/build_tools/spud/block_param_info.rb
Instance Method Summary collapse
- #arg_hash_string ⇒ String
- #arg_values ⇒ Hash
- #dummy_args ⇒ Array
-
#dummy_named_args ⇒ Hash{Symbol->NilClass
].
- #dummy_positional_args ⇒ Array<NilClass>
-
#initialize(filename, &block) ⇒ BlockParamInfo
constructor
A new instance of BlockParamInfo.
- #lambda(body = nil) ⇒ Proc
- #parameters ⇒ Array<Array<Symbol>>
- #task_args ⇒ Array<Spud::TaskArg>
Constructor Details
#initialize(filename, &block) ⇒ BlockParamInfo
Returns a new instance of BlockParamInfo.
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_string ⇒ 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_values ⇒ 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_args ⇒ 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_args ⇒ Hash{Symbol->NilClass
Returns ].
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_args ⇒ 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
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 |
#parameters ⇒ 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_args ⇒ Array<Spud::TaskArg>
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 |