Class: Spud::BlockParamInfo
- Inherits:
-
Object
- Object
- Spud::BlockParamInfo
- Extended by:
- T::Sig
- Defined in:
- lib/spud/block_param_info.rb
Instance Method Summary collapse
- #arg_hash_string ⇒ Object
- #arg_values ⇒ Object
- #dummy_args ⇒ Object
- #dummy_named_args ⇒ Object
- #dummy_ordered_args ⇒ Object
-
#initialize(filename, &block) ⇒ BlockParamInfo
constructor
A new instance of BlockParamInfo.
- #lambda(body = nil) ⇒ Object
- #parameters ⇒ Object
- #task_args ⇒ Object
Constructor Details
#initialize(filename, &block) ⇒ BlockParamInfo
Returns a new instance of BlockParamInfo.
10 11 12 13 |
# File 'lib/spud/block_param_info.rb', line 10 def initialize(filename, &block) @filename = filename @block = block end |
Instance Method Details
#arg_hash_string ⇒ Object
51 52 53 |
# File 'lib/spud/block_param_info.rb', line 51 def arg_hash_string "{ #{parameters.map(&:last).map { |n| "#{n}: #{n}" }.join(', ')} }" end |
#arg_values ⇒ Object
56 57 58 59 60 61 |
# File 'lib/spud/block_param_info.rb', line 56 def arg_values @arg_values ||= begin ordered, named = dummy_args T.unsafe(lambda(arg_hash_string)).call(*ordered, **named) end end |
#dummy_args ⇒ Object
36 37 38 |
# File 'lib/spud/block_param_info.rb', line 36 def dummy_args [dummy_ordered_args, dummy_named_args] end |
#dummy_named_args ⇒ Object
46 47 48 |
# File 'lib/spud/block_param_info.rb', line 46 def dummy_named_args parameters.select { |p| p.first == :keyreq }.map(&:last).each_with_object({}) { |n, h| h[n] = nil } end |
#dummy_ordered_args ⇒ Object
41 42 43 |
# File 'lib/spud/block_param_info.rb', line 41 def dummy_ordered_args Array.new(parameters.count { |p| p.first == :req }) end |
#lambda(body = nil) ⇒ Object
69 70 71 72 73 74 75 76 77 78 |
# File 'lib/spud/block_param_info.rb', line 69 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 = T.must(match[:params]) param_source += ', _: nil, __: nil, ___: nil' if body eval "-> (#{param_source}) { #{body} }" end |
#parameters ⇒ Object
64 65 66 |
# File 'lib/spud/block_param_info.rb', line 64 def parameters @parameters ||= lambda.parameters end |
#task_args ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/spud/block_param_info.rb', line 16 def task_args parameters.map do |type, name| name_string = name.to_s case type when :req TaskArg.new(name_string, 'ordered') when :opt TaskArg.new(name_string, 'ordered', default: arg_values[name]) when :keyreq TaskArg.new(name_string, 'named') when :key TaskArg.new(name_string, 'named', default: arg_values[name]) else raise "invalid proc arg type: '#{type}'" end end end |