referential 0.0.1

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: 5aed682ab59945b291dc8364e4ba4b6426c897cbc328e90cdf15337a85a7cfba
4
+ data.tar.gz: ec3ff2a63295730849ed6b5d004277c7f74ecd2574c93fcb5588577de8aa0fb8
5
+ SHA512:
6
+ metadata.gz: 2c17b0665018a78c8405f17191bf81691ffd04b94bf1380e656c5d2440cfb499191e1fc413a4e77c658568ed25aedd0557e83eabd34549e5436777056e109232
7
+ data.tar.gz: 33963af4b3b374d067d02d5ad23f8172707021c9293572a247423220d92436b0f59fce513a41cd6884ca4dadb941e683ec3a0b5db029b3a6333f1284307245d9
@@ -0,0 +1,37 @@
1
+ require_relative 'referential/version'
2
+
3
+ module Referential
4
+ def ref(method_name)
5
+ redefine!(self, method_name, instance_method(method_name).arity)
6
+ end
7
+
8
+ def cref(method_name)
9
+ redefine!(singleton_class, method_name, method(method_name).arity)
10
+ end
11
+
12
+ private
13
+
14
+ def redefine!(context, method_name, arity)
15
+ raise 'Cannot compose methods with splat, keyword or default arguments!' if arity < 0
16
+
17
+ context.alias_method new_name(method_name), method_name
18
+ context.undef_method method_name
19
+
20
+ context.define_method(
21
+ method_name,
22
+ &reference_block(new_name(method_name), arity)
23
+ )
24
+ end
25
+
26
+ def new_name(method_name)
27
+ "fun_#{method_name}".to_sym
28
+ end
29
+
30
+ def reference_block(new_name, arity)
31
+ proc do |*args|
32
+ proc { |*args| method(new_name).call(*args) }
33
+ .curry(arity)
34
+ .call(*args)
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,3 @@
1
+ module Referential
2
+ VERSION = '0.0.1'
3
+ end
metadata ADDED
@@ -0,0 +1,64 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: referential
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Danielius Visockas
8
+ - Lukas Kairevičius
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2021-08-09 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '3.10'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '3.10'
28
+ description:
29
+ email:
30
+ - danieliusvisockas@gmail.com
31
+ - lumzdas@gmail.com
32
+ executables: []
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - lib/referential.rb
37
+ - lib/referential/version.rb
38
+ homepage: https://github.com/dvisockas/referential
39
+ licenses:
40
+ - MIT
41
+ metadata:
42
+ homepage_uri: https://github.com/dvisockas/referential
43
+ source_code_uri: https://github.com/dvisockas/referential
44
+ changelog_uri: https://github.com/dvisockas/referential/blob/master/CHANGELOG.md
45
+ post_install_message:
46
+ rdoc_options: []
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 2.4.0
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ requirements: []
60
+ rubygems_version: 3.2.15
61
+ signing_key:
62
+ specification_version: 4
63
+ summary: Turns your methods into curryable procs
64
+ test_files: []