lab42_console 0.0.0 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9b342f2f1a91f65fbe64d24005701d41728e8c03
4
- data.tar.gz: 954c48d6cbfa03ea0a424f690e8849965640a7db
3
+ metadata.gz: 312fd0d573b01d95bf651f4af2335c0ed1068014
4
+ data.tar.gz: 6ea484f492e56b24c2f297660200f43e5203ff64
5
5
  SHA512:
6
- metadata.gz: 92fedc56d2e56732e1099c2b462ee795cd6acde93ff7e7b43b1d4c85a998f00d46175c7877bd2509fd49a613b51537555e759b1f22577e887fc8c153372be120
7
- data.tar.gz: caa3e999c71ea4ecd7e99606f80ceaf3325b6217096c3b70ddf88abf56ff9a68762b13844f42b78eb5faf6d89abe0985763d95f4f74392a4fd697924c9dc057d
6
+ metadata.gz: 6a6d0752d73178a2b321c9522de1114eb1a982aeb95e98e83cdb2d01345f13ca9cda7850f035beb3bfb47cc26ea06105b03604136ef175372195a0bafa05941d
7
+ data.tar.gz: 36ae200a0903040d74585ce9b2eb0e6879fb2403c58ecfe916a175299d65645cbab74348cbbf8eb9cf6df7960648cd93b212b8494b4d2880b8758780fe654007
data/README.md CHANGED
@@ -1,4 +1,16 @@
1
- # Intrusive Ruby Tools for the Console Only
1
+
2
+ # Lab42Console
3
+
4
+ [![Gem Version](https://badge.fury.io/rb/lab42_console.svg)](http://badge.fury.io/rb/lab42_console) [![Build Status](https://travis-ci.org/RobertDober/lab42_console.svg?branch=master)](https://travis-ci.org/RobertDober/lab42_console) [![Test Coverage](https://codeclimate.com/github/RobertDober/lab42_console/badges/coverage.svg)](https://codeclimate.com/github/RobertDober/lab42_console)
5
+
6
+ <!--
7
+ [![Code Climate](https://codeclimate.com/github/RobertDober/lab42_core/badges/gpa.svg)](https://codeclimate.com/github/RobertDober/lab42_core)
8
+ [![Issue Count](https://codeclimate.com/github/RobertDober/lab42_core/badges/issue_count.svg)](https://codeclimate.com/github/RobertDober/lab42_core)
9
+ -->
10
+
11
+ Intrusive Ruby Tools for the Console Only
12
+
13
+ ## Usage
2
14
 
3
15
  ```ruby
4
16
  require 'lab42/console'
File without changes
@@ -1,5 +1,18 @@
1
+ require_relative 'console/h'
2
+ require_relative 'console/intrusive'
3
+ require_relative 'console/fn'
4
+ require_relative 'console/kwd'
5
+ require_relative 'console/shortcut'
6
+
7
+ require_relative 'lazy'
8
+
1
9
  module Lab42
2
- class Console
3
-
10
+ class Console
11
+ def kwd; Kwd end
12
+ def h; H end
4
13
  end
5
14
  end
15
+
16
+ class Object
17
+ include Lab42::Console::Shortcut
18
+ end
@@ -0,0 +1,21 @@
1
+ require_relative './tools.rb'
2
+ module Lab42
3
+ class Console
4
+ module Fn
5
+ def fn desc, *args, &blk
6
+ case desc
7
+ when Symbol, String
8
+ Tools.make_fn [desc, *args], blk
9
+ else
10
+ raise ArgumentError, "#{desc} does not describe a function"
11
+ end
12
+ end
13
+
14
+ def p rcv, name, *args, &blk
15
+ m = rcv.method(name)
16
+ Tools.make_partial m, args, blk
17
+ end
18
+ end
19
+ include Fn
20
+ end
21
+ end
@@ -0,0 +1,36 @@
1
+ require_relative 'tools/forward_to_new_instance'
2
+ module Lab42
3
+ class Console
4
+ class H
5
+ extend Tools::ForwardToNewInstance
6
+
7
+ attr_reader :hash
8
+
9
+ def find *keys
10
+ prewalk hash
11
+ end
12
+
13
+ def pre_walk nodes, condition, visitor, visited: Set.new
14
+ return if visisted.includes? nodes
15
+ case nodes
16
+ when Hash
17
+ walk_hash_pairs nodes, condition, visitor, visited: visited
18
+ when Enumerable
19
+ nodes.each do |ele|
20
+ pre_walk ele, condition, visitor, visited: visited.add(ele)
21
+ end
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def initialize hash
28
+ @hash = hash
29
+ end
30
+
31
+
32
+ def walk_hash_pairs nodes, condition, visitor, visited:
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,43 @@
1
+ require_relative './tools'
2
+
3
+ # This is the reason not to use this anywhere else but in the console!!!
4
+ # =======================================================================
5
+
6
+ class Object
7
+ def identity; self end
8
+ end
9
+
10
+ module Enumerable
11
+
12
+ def f *args, &blk
13
+ blk = Lab42::Console::Tools.make_fn(args, blk)
14
+ Lab42::Lazy.new(self) do | yielder, element |
15
+ yielder << element if blk.(element)
16
+ end
17
+ end
18
+
19
+ def f! *args, &blk
20
+ blk = Lab42::Console::Tools.make_fn(args, blk)
21
+ Lab42::Lazy.new(self) do | yielder, element |
22
+ yielder << element unless blk.(element)
23
+ end
24
+ end
25
+
26
+ def m *args, &blk
27
+ blk = Lab42::Console::Tools.make_fn(args, blk)
28
+ Lab42::Lazy.new(self) do | yielder, element |
29
+ yielder << ( blk ? blk.(element) : element )
30
+ end
31
+ end
32
+
33
+ def fm *args, &blk
34
+ blk = Lab42::Console::Tools.make_fn(args, blk)
35
+ Lab42::Lazy.new(self) do | yielder, element |
36
+ producer = Array(blk ? blk.(element) : element)
37
+ producer.lazy.each do |ele|
38
+ yielder << ele
39
+ end
40
+ end
41
+
42
+ end
43
+ end
@@ -0,0 +1,52 @@
1
+ require_relative 'tools/forward_to_new_instance'
2
+
3
+ module Lab42
4
+ class Console
5
+ class Kwd
6
+ extend Tools::ForwardToNewInstance
7
+
8
+ attr_reader :kwds
9
+
10
+
11
+ def count *keys
12
+ kwds.count{ |pairs| keys.include? pairs.keys.first }
13
+ end
14
+
15
+
16
+ def first_value *keys
17
+ raise ArgumentError, "need 0, 1, got #{keys.size}" unless keys.size < 2
18
+ key = keys.first
19
+ if key
20
+ kwds.find{ |pairs| pairs.keys.first == key }.values.first
21
+ else
22
+ kwds.first.values.first
23
+ end
24
+ end
25
+
26
+ def last_value *keys
27
+ raise ArgumentError, "need 0, 1, got #{keys.size}" unless keys.size < 2
28
+ key = keys.first
29
+ if key
30
+ kwds.reverse.find{ |pairs| pairs.keys.first == key }.values.first
31
+ else
32
+ kwds.reverse.first.values.first
33
+ end
34
+ end
35
+
36
+ def values *keys
37
+ if keys.empty?
38
+ kwds.map{ |pairs| pairs.values.first }
39
+ else
40
+ kwds.map{ |pairs| keys.include?(pairs.keys.first) && pairs.values.first }.select(&:identity)
41
+ end
42
+ end
43
+
44
+
45
+ private
46
+
47
+ def initialize kwds
48
+ @kwds = kwds
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,9 @@
1
+ module Lab42
2
+ class Console
3
+ module Shortcut
4
+ def c
5
+ @__lab42_console_shortcut__ ||= Lab42::Console.new
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,37 @@
1
+ module Lab42
2
+ class Console
3
+ module Tools extend self
4
+
5
+
6
+ def make_fn fn_ary, blk
7
+
8
+ return ->(x){x} if fn_ary.empty? && blk.nil?
9
+ return blk if fn_ary.empty?
10
+
11
+ make_fn_from_ary( *fn_ary ).tap do | argfn |
12
+ # Chain in one pass if applicable
13
+ return ->(x){ blk.(argfn.(x)) } if blk
14
+ end
15
+ end
16
+
17
+ def make_fn_from_ary desc, *args
18
+ -> (rcv, *a) {
19
+ rcv.send(desc, *(args + a))
20
+ }
21
+ end
22
+
23
+
24
+ def make_partial mthd, args, blk
25
+ make_partial_from(mthd, args).tap do | partial |
26
+ return ->(*x){ blk.(partial.(*x)) } if blk
27
+ end
28
+ end
29
+
30
+ def make_partial_from mthd, args
31
+ -> (*a) {
32
+ mthd.( *(args + a) )
33
+ }
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,14 @@
1
+ module Lab42
2
+ class Console
3
+ module Tools extend self
4
+ module ForwardToNewInstance
5
+ def method_missing name, kwds, *args
6
+ insm = instance_method(name)
7
+ insm.bind(new(kwds)).(*args)
8
+ rescue NameError
9
+ super
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,5 +1,5 @@
1
1
  module Lab42
2
2
  class Console
3
- VERSION = '0.0.0'
3
+ VERSION = '0.0.1'
4
4
  end
5
5
  end
@@ -0,0 +1,23 @@
1
+ module Lab42
2
+ class Functor < BasicObject
3
+
4
+ attr_reader :function, :result
5
+
6
+
7
+ def call *args
8
+ @result = function.(*args)
9
+ end
10
+
11
+ def inspect
12
+ result.to_s
13
+ end
14
+
15
+ private
16
+
17
+ def initialize &function
18
+ @function = function
19
+ @result = nil
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,14 @@
1
+ module Lab42
2
+ class Lazy < Enumerator::Lazy
3
+
4
+ def f *a, &blk
5
+ return force if a.empty? && blk.nil?
6
+ super
7
+ end
8
+
9
+ def inspect
10
+ force
11
+ end
12
+
13
+ end
14
+ 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.0.0
4
+ version: 0.0.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: 2017-12-08 00:00:00.000000000 Z
11
+ date: 2018-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: forwarder2
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: lab42_function
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.1'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: pry
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +80,34 @@ dependencies:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
82
  version: '3.7'
83
+ - !ruby/object:Gem::Dependency
84
+ name: simplecov
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.15'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.15'
97
+ - !ruby/object:Gem::Dependency
98
+ name: codeclimate-test-reporter
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.0'
69
111
  - !ruby/object:Gem::Dependency
70
112
  name: travis-lint
71
113
  requirement: !ruby/object:Gem::Requirement
@@ -89,8 +131,18 @@ extra_rdoc_files: []
89
131
  files:
90
132
  - LICENSE
91
133
  - README.md
134
+ - lib/function.rb
92
135
  - lib/lab42/console.rb
136
+ - lib/lab42/console/fn.rb
137
+ - lib/lab42/console/h.rb
138
+ - lib/lab42/console/intrusive.rb
139
+ - lib/lab42/console/kwd.rb
140
+ - lib/lab42/console/shortcut.rb
141
+ - lib/lab42/console/tools.rb
142
+ - lib/lab42/console/tools/forward_to_new_instance.rb
93
143
  - lib/lab42/console/version.rb
144
+ - lib/lab42/functor.rb
145
+ - lib/lab42/lazy.rb
94
146
  homepage: https://github.com/RobertDober/lab42_console
95
147
  licenses:
96
148
  - Apache
@@ -112,7 +164,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
112
164
  version: '0'
113
165
  requirements: []
114
166
  rubyforge_project:
115
- rubygems_version: 2.6.14
167
+ rubygems_version: 2.6.11
116
168
  signing_key:
117
169
  specification_version: 4
118
170
  summary: Useful but Intrusive Ruby Tools for the console use only there!