proc_eval 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: afe87a0835b93b5f3e7e5bc0aa5f277c6b9f85a7bbb8362d54387e77b38bbfed
4
+ data.tar.gz: 1a2e8a6c7912ba38541210929b4573906b2d34c06a54f4234813cab982b2135d
5
+ SHA512:
6
+ metadata.gz: b38cb7e79e3983eb849f61e17ededbd8476bc3c74a1a55f0e6972ca44f1be0b18d1a0be2c0c0c030b9bd13e3887163b86fd2ee12641e69ca294ed1d2581f52e1
7
+ data.tar.gz: 95a7d4a56250cfdeb4de92333ce16a586cd00e8b87796bd1f52636355df87dda80afd1ee6b81e8fc958b2d61de38895107e6e38c7aed9518d6615d0b98c8d709
@@ -0,0 +1,3 @@
1
+ module ProcEval
2
+ VERSION = '2.0.0'
3
+ end
data/lib/proc_eval.rb ADDED
@@ -0,0 +1,62 @@
1
+ module ProcEval
2
+
3
+ refine Object do
4
+ def evaluate(*args, **options)
5
+ self
6
+ end
7
+ end # refine Object
8
+
9
+ refine Proc do
10
+
11
+ def parameter_type_counts
12
+ @parameter_type_counts ||= parameters.each_with_object(Hash.new(0)) {|(param_type, _), counts| counts[param_type] += 1 }
13
+ end
14
+
15
+ def generate_parameter_type_counts
16
+ parameters.each_with_object(Hash.new(0)) {|(param_type, _), counts| counts[param_type] += 1 }
17
+ end
18
+
19
+ def parameter_type_count(*types)
20
+ parameter_type_counts.values_at(*types).compact.reduce(:+)
21
+ end
22
+
23
+ def has_parameter_type?(*types)
24
+ parameter_type_count(*types) > 0
25
+ end
26
+
27
+ def has_optional_parameter?
28
+ @has_optional_parameter ||= has_parameter_type?(:rest)
29
+ end
30
+
31
+ def has_key_parameter?
32
+ @has_key_parameter ||= has_parameter_type?(:key, :keyreq, :keyrest)
33
+ end
34
+
35
+ def required_parameter_count
36
+ @required_parameter_count ||= parameter_type_count(:req, :opt)
37
+ end
38
+
39
+ def parameter_count
40
+ @parameter_count ||= has_parameter_type?(:rest) ? Float::INFINITY : required_parameter_count
41
+ end
42
+
43
+ # override
44
+ def evaluate(*args, **options)
45
+ if lambda?
46
+ required_args = Array.new(required_parameter_count) {|i| args[i] }
47
+ optional_args = args[required_parameter_count...args.length] if has_optional_parameter?
48
+ else
49
+ required_args, optional_args = args, nil
50
+ end
51
+
52
+ if has_key_parameter?
53
+ call(*required_args, *optional_args, **options)
54
+ else
55
+ call(*required_args, *optional_args)
56
+ end
57
+ end
58
+
59
+ end # refine Proc
60
+ end
61
+
62
+ require 'proc_eval/version'
metadata ADDED
@@ -0,0 +1,62 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: proc_eval
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Brent Jacobs
8
+ - br3nt
9
+ - reeganviljoen
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2023-09-01 00:00:00.000000000 Z
14
+ dependencies: []
15
+ description: |2
16
+ Adds an `evaulate` refinement method to Proc and Object instances.
17
+
18
+ The goal of this gem is to allow evaluation of variables, procs, and lambdas with the same level of flexibility.
19
+
20
+ The `evaluate` method has been added to the Object class to simply return the value of the variable.
21
+ The `evaluate` method is overriden on the Proc class to allow parameters to be passed to lambdas in the same flexible way as procs.
22
+ This takes into consideration, required/optional/remaining parameters, and required/optional/remaining keyword parameters.
23
+
24
+ For information on Refinements, see:
25
+ - https://ruby-doc.org/core-2.0.0/doc/syntax/refinements_rdoc.html
26
+ - https://ruby-doc.org/core-2.1.0/doc/syntax/refinements_rdoc.html
27
+ - https://ruby-doc.org/core-2.2.0/doc/syntax/refinements_rdoc.html
28
+ - https://ruby-doc.org/core-2.3.0/doc/syntax/refinements_rdoc.html
29
+ - https://ruby-doc.org/core-2.4.0/doc/syntax/refinements_rdoc.html
30
+ - http://yehudakatz.com/2010/11/30/ruby-2-0-refinements-in-practice/
31
+ email:
32
+ executables: []
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - lib/proc_eval.rb
37
+ - lib/proc_eval/version.rb
38
+ homepage: https://github.com/reeganviljoen/proc_eval
39
+ licenses:
40
+ - MIT
41
+ metadata: {}
42
+ post_install_message:
43
+ rdoc_options: []
44
+ require_paths:
45
+ - lib
46
+ required_ruby_version: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: '2.7'
51
+ required_rubygems_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ requirements: []
57
+ rubygems_version: 3.4.15
58
+ signing_key:
59
+ specification_version: 4
60
+ summary: Allow evaluation of variables, procs, and lambdas with the same level of
61
+ flexibility.
62
+ test_files: []