proc_eval 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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: []