referential 0.0.1

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: 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: []