marameters 4.0.1 → 4.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.adoc +0 -1
- data/lib/marameters/signatures/defaulter.rb +1 -1
- data/lib/marameters/sourcers/function.rb +28 -0
- data/lib/marameters/sourcers/readers/any.rb +29 -0
- data/lib/marameters/sourcers/readers/disk.rb +18 -0
- data/lib/marameters/sourcers/readers/memory.rb +10 -0
- data/lib/marameters/sources/extractor.rb +3 -0
- data/lib/marameters/sources/reader.rb +3 -0
- data/marameters.gemspec +1 -1
- data.tar.gz.sig +0 -0
- metadata +7 -3
- metadata.gz.sig +1 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9420b72e9cc7879158278560d79cf62c957989233bd792f0584f58500952751d
|
4
|
+
data.tar.gz: 167360ebfa86cc2f0ed0bc89e49f13d9809324bb7e614f748d077fdb750bb78a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8f878c1ee5eaa52764341b2c4ba4492171189f29714ad3770e3a6ae4dc2623f46dd4524f96999a52e709d1ad44efcb26c76ff9506eba434fb11ae2255a06c012
|
7
|
+
data.tar.gz: 3a04f9b3d48eb1c981d7a1cb4531cf2c231c8aacd8737c6632627df83e8c9c5f656ed27636e4fb79d43ba1e8bd9be26ee8485ee942d1dc0dbc74e1f6e5b6bca8
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/README.adoc
CHANGED
@@ -449,7 +449,6 @@ puts Marameters.signature([[:key, :demo, :test]])
|
|
449
449
|
# With proc (no parameters).
|
450
450
|
puts Marameters.signature([[:key, :demo, proc { Object.new }]])
|
451
451
|
# "demo: Object.new"
|
452
|
-
# ⚠️ The above will answer "demo: nil" if used in IRB since the source can't be found.
|
453
452
|
|
454
453
|
# With proc (with parameters).
|
455
454
|
puts Marameters.signature([[:key, :demo, proc { |no| no }]])
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Marameters
|
4
4
|
module Signatures
|
5
5
|
# Computes a method parameter's default value.
|
6
|
-
Defaulter = lambda do |value, extractor:
|
6
|
+
Defaulter = lambda do |value, extractor: Sourcers::Function.new|
|
7
7
|
case value
|
8
8
|
when Proc
|
9
9
|
fail TypeError, "Use procs instead of lambdas for defaults." if value.lambda?
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Marameters
|
4
|
+
module Sourcers
|
5
|
+
# Obtains the literal source of a function's body.
|
6
|
+
class Function
|
7
|
+
PATTERN = /
|
8
|
+
(?:(?<function>proc|->))? # Statement.
|
9
|
+
\s* # Optional space.
|
10
|
+
\{ # Block open.
|
11
|
+
(?<body>.*?) # Source code body.
|
12
|
+
\} # Block close.
|
13
|
+
/x
|
14
|
+
|
15
|
+
def initialize pattern: PATTERN, reader: Readers::Any.new
|
16
|
+
@pattern = pattern
|
17
|
+
@reader = reader
|
18
|
+
freeze
|
19
|
+
end
|
20
|
+
|
21
|
+
def call(function) = reader.call(function).then { |line| line.match(pattern)[:body].strip }
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
attr_reader :pattern, :reader
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Marameters
|
4
|
+
module Sourcers
|
5
|
+
module Readers
|
6
|
+
# Reads source code of callable from disk or memory.
|
7
|
+
class Any
|
8
|
+
def initialize parser: RubyVM::InstructionSequence, disk: Disk, memory: Memory
|
9
|
+
@parser = parser
|
10
|
+
@disk = disk
|
11
|
+
@memory = memory
|
12
|
+
freeze
|
13
|
+
end
|
14
|
+
|
15
|
+
def call callable
|
16
|
+
instructions = parser.of callable
|
17
|
+
|
18
|
+
fail StandardError, "Unable to load source for: #{callable.inspect}." unless instructions
|
19
|
+
|
20
|
+
instructions.absolute_path ? disk.call(instructions) : memory.call(instructions)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
attr_reader :parser, :disk, :memory
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Marameters
|
4
|
+
module Sourcers
|
5
|
+
module Readers
|
6
|
+
# Reads source code from on-disk instruction sequence.
|
7
|
+
Disk = lambda do |instructions|
|
8
|
+
path = instructions.absolute_path
|
9
|
+
line_start, column_start, line_end, column_end = instructions.to_a.dig 4, :code_location
|
10
|
+
lines = File.read(path).lines[(line_start - 1)..(line_end - 1)]
|
11
|
+
lines[-1] = lines.last.byteslice(...column_end)
|
12
|
+
lines[0] = lines.first.byteslice(column_start..)
|
13
|
+
|
14
|
+
lines.join
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -5,6 +5,9 @@ module Marameters
|
|
5
5
|
# Reads object source code from memory or file (assumes implementation is a one-liner).
|
6
6
|
class Reader
|
7
7
|
def initialize offset: 1, parser: RubyVM::InstructionSequence, io: File
|
8
|
+
warn "`#{self.class}` is deprecated, use `Sourcers::Readers::Any` instead.",
|
9
|
+
category: :deprecated
|
10
|
+
|
8
11
|
@offset = offset
|
9
12
|
@parser = parser
|
10
13
|
@io = io
|
data/marameters.gemspec
CHANGED
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: marameters
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0
|
4
|
+
version: 4.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brooke Kuhlmann
|
@@ -34,7 +34,7 @@ cert_chain:
|
|
34
34
|
3n5C8/6Zh9DYTkpcwPSuIfAga6wf4nXc9m6JAw8AuMLaiWN/r/2s4zJsUHYERJEu
|
35
35
|
gZGm4JqtuSg8pYjPeIJxS960owq+SfuC+jxqmRA54BisFCv/0VOJi7tiJVY=
|
36
36
|
-----END CERTIFICATE-----
|
37
|
-
date:
|
37
|
+
date: 2025-02-05 00:00:00.000000000 Z
|
38
38
|
dependencies:
|
39
39
|
- !ruby/object:Gem::Dependency
|
40
40
|
name: refinements
|
@@ -84,6 +84,10 @@ files:
|
|
84
84
|
- lib/marameters/signatures/forwarder.rb
|
85
85
|
- lib/marameters/signatures/inheritor.rb
|
86
86
|
- lib/marameters/signatures/super.rb
|
87
|
+
- lib/marameters/sourcers/function.rb
|
88
|
+
- lib/marameters/sourcers/readers/any.rb
|
89
|
+
- lib/marameters/sourcers/readers/disk.rb
|
90
|
+
- lib/marameters/sourcers/readers/memory.rb
|
87
91
|
- lib/marameters/sources/extractor.rb
|
88
92
|
- lib/marameters/sources/reader.rb
|
89
93
|
- marameters.gemspec
|
@@ -112,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
112
116
|
- !ruby/object:Gem::Version
|
113
117
|
version: '0'
|
114
118
|
requirements: []
|
115
|
-
rubygems_version: 3.6.
|
119
|
+
rubygems_version: 3.6.3
|
116
120
|
specification_version: 4
|
117
121
|
summary: A dynamic method parameter enhancer.
|
118
122
|
test_files: []
|
metadata.gz.sig
CHANGED
@@ -1,2 +1 @@
|
|
1
|
-
�
|
2
|
-
�[>��%"NX�z����L4B��-A|
|
1
|
+
D�+��� hU�e2Vٛ���zyt�����(ZA�L�>��-˓�?C^2��+.ny�7�P9�ʬ��<C��fyv�?kt�����'@��rE��w�0pO��f�q�N�{@����n��J�\��G����U���[�,���P�SҜ2�$�CUE��+�,Ȃu�\&�\p��!!�I��W�Q�_b�2��=(ߦyo�$�i�ظGö�!���I��4�~Ol[�bg��x��oy��_Er��+�*%�Tv)�,�mx��XT��̽��L�
|