lab42_console 0.2.0 → 0.2.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 +4 -4
- data/lib/lab42/console/cons.rb +19 -0
- data/lib/lab42/console/enum.rb +15 -15
- data/lib/lab42/console/function.rb +57 -0
- data/lib/lab42/console/version.rb +1 -1
- data/lib/lab42/console/wrapper.rb +57 -0
- metadata +19 -3
- data/lib/lab42/console/runner.rb +0 -62
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 68f691d24424fdd172440f3dec3b1fa1eb808b80ca23f23f9cf02b7916fcf7fd
|
4
|
+
data.tar.gz: 918378b21433520963d40efeb8382357c6aded947e0c1d15f44191cc80a9065c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e86355753644bbec516e1c3e337f4b63744174ee33fc9c6356b4e6061c3626620c4c300118b92a36416eab01d1ff6867feb75b5015199060b35653338f175f46
|
7
|
+
data.tar.gz: 72313880d880e58040c40624bd590511569a2be483a637103db3546798a90a667d2b80ea638cb19dd648435ee14c867e6f138b2ec705f95adb4cf9382d44f83f
|
data/lib/lab42/console/enum.rb
CHANGED
@@ -1,24 +1,24 @@
|
|
1
|
-
require_relative '
|
1
|
+
require_relative 'cons'
|
2
|
+
require_relative 'wrapper'
|
2
3
|
module Lab42
|
3
4
|
class Console
|
4
5
|
module Enum
|
5
|
-
def by(*args)
|
6
|
-
Lab42::Console::
|
6
|
+
def by(*args, &blk)
|
7
|
+
Lab42::Console::Wrapper.new(self, *args, &blk)
|
7
8
|
end
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
else
|
12
|
-
Lab42::Console::Runner.new(*args, method: :find, subject: self).run
|
13
|
-
end
|
9
|
+
|
10
|
+
def cars
|
11
|
+
map(&:car)
|
14
12
|
end
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
else
|
19
|
-
Lab42::Console::Runner.new(*args, method: :filter, subject: self).run
|
20
|
-
end
|
13
|
+
|
14
|
+
def cdrs
|
15
|
+
map(&:cdr)
|
21
16
|
end
|
17
|
+
|
18
|
+
def duplicate
|
19
|
+
map{ |x| Cons.new(x, x) }
|
20
|
+
end
|
21
|
+
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module Lab42
|
2
|
+
class Console
|
3
|
+
class Function
|
4
|
+
Error = Class.new RuntimeError
|
5
|
+
|
6
|
+
attr_reader :functions, :sources
|
7
|
+
|
8
|
+
def add(*args, &blk)
|
9
|
+
if args.empty?
|
10
|
+
_add_blk(blk)
|
11
|
+
else
|
12
|
+
raise Error, "must not provide literal and block behaviour at the same time" if blk
|
13
|
+
_add_args(args)
|
14
|
+
end
|
15
|
+
self
|
16
|
+
end
|
17
|
+
|
18
|
+
def call(element)
|
19
|
+
functions
|
20
|
+
.inject(element) do |acc, fn|
|
21
|
+
fn.(acc)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_proc
|
26
|
+
-> x { call(x) }
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def initialize(*args, &blk)
|
32
|
+
@functions = []
|
33
|
+
@sources = []
|
34
|
+
add(*args, &blk)
|
35
|
+
end
|
36
|
+
|
37
|
+
def _add_args(args)
|
38
|
+
functions << _add_args_fn(args)
|
39
|
+
end
|
40
|
+
|
41
|
+
def _add_args_fn(args)
|
42
|
+
sources << "send #{args.join(", ")}"
|
43
|
+
-> reciever do
|
44
|
+
reciever.send(*args)
|
45
|
+
rescue
|
46
|
+
nil
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def _add_blk(blk)
|
51
|
+
sources << blk.to_s
|
52
|
+
functions << blk
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require_relative 'function'
|
2
|
+
module Lab42
|
3
|
+
class Console
|
4
|
+
class Wrapper
|
5
|
+
|
6
|
+
attr_reader :function, :subject
|
7
|
+
|
8
|
+
def add(*args, &blk)
|
9
|
+
@function = function.add(*args, &blk)
|
10
|
+
self
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
def fnd(*args, &blk)
|
15
|
+
_apply_function
|
16
|
+
.find{ |x| x.apply_to_cdr(_make_function(*args, &blk))&.cdr }
|
17
|
+
&.car
|
18
|
+
end
|
19
|
+
|
20
|
+
def sel(*args, &blk)
|
21
|
+
filter_function = _make_function(*args, &blk)
|
22
|
+
_apply_function
|
23
|
+
.filter{ |x| x.apply_to_cdr(filter_function)&.cdr }
|
24
|
+
.map(&:car)
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def initialize(subject, *args, &blk)
|
31
|
+
_init_function(args, blk)
|
32
|
+
@subject = subject
|
33
|
+
end
|
34
|
+
|
35
|
+
def _apply_function
|
36
|
+
subject
|
37
|
+
.duplicate
|
38
|
+
.map{ |x| x.apply_to_cdr(function) }
|
39
|
+
end
|
40
|
+
|
41
|
+
def _init_function(args, blk)
|
42
|
+
@function = Function.new(*args, &blk)
|
43
|
+
end
|
44
|
+
|
45
|
+
def _make_function(*args, &blk)
|
46
|
+
case args.first
|
47
|
+
when Symbol
|
48
|
+
Function.new(*args, &blk)
|
49
|
+
when NilClass
|
50
|
+
Function.new([], &blk)
|
51
|
+
else
|
52
|
+
Function.new(*([:==]+args), &blk)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lab42_console
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Dober
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-06-
|
11
|
+
date: 2020-06-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: forwarder2
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '3.9'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pry-doc
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.1.0
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.1.0
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rspec
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -104,9 +118,11 @@ files:
|
|
104
118
|
- LICENSE
|
105
119
|
- README.md
|
106
120
|
- lib/lab42/console.rb
|
121
|
+
- lib/lab42/console/cons.rb
|
107
122
|
- lib/lab42/console/enum.rb
|
108
|
-
- lib/lab42/console/
|
123
|
+
- lib/lab42/console/function.rb
|
109
124
|
- lib/lab42/console/version.rb
|
125
|
+
- lib/lab42/console/wrapper.rb
|
110
126
|
homepage: https://github.com/RobertDober/lab42_console
|
111
127
|
licenses:
|
112
128
|
- Apache
|
data/lib/lab42/console/runner.rb
DELETED
@@ -1,62 +0,0 @@
|
|
1
|
-
module Lab42
|
2
|
-
class Console
|
3
|
-
class Runner
|
4
|
-
|
5
|
-
attr_reader :filter, :method, :subject
|
6
|
-
|
7
|
-
def fnd(*args)
|
8
|
-
@method = :find
|
9
|
-
@filter = _make_filter(*args)
|
10
|
-
run
|
11
|
-
end
|
12
|
-
|
13
|
-
def run
|
14
|
-
subject
|
15
|
-
.send(method, &filter)
|
16
|
-
end
|
17
|
-
|
18
|
-
def sel(*args)
|
19
|
-
@method = :filter
|
20
|
-
@filter = _make_filter(*args)
|
21
|
-
run
|
22
|
-
end
|
23
|
-
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
def initialize(*args, by: [], method:, subject:)
|
28
|
-
@args = args
|
29
|
-
@by = by
|
30
|
-
@id = args.first
|
31
|
-
@method = method
|
32
|
-
@subject = subject
|
33
|
-
@filter = _default_filter
|
34
|
-
_init_by(by) unless by.empty?
|
35
|
-
end
|
36
|
-
|
37
|
-
def _default_filter
|
38
|
-
-> element do
|
39
|
-
element.id == @id
|
40
|
-
rescue
|
41
|
-
nil
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def _init_by(by)
|
46
|
-
@args = by
|
47
|
-
end
|
48
|
-
|
49
|
-
def _make_filter(*args)
|
50
|
-
if args.size == 1
|
51
|
-
-> element do
|
52
|
-
element.send(*@args) == args.first
|
53
|
-
end
|
54
|
-
else
|
55
|
-
-> element do
|
56
|
-
element.send(*@args).send(*args)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|