proc-composer 0.0.0 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ed8c9642fcbbd48b81460ed928271adfe7b608086620a84569d02926061a73b4
4
- data.tar.gz: 7a761fc192615ca26a1419cf5cc6704a47851586fc82393db2141f81801d2314
3
+ metadata.gz: c699cc84ab92918eed69f823508c4d70e05f76f6ba3a2a7918876bf63df6689b
4
+ data.tar.gz: 0ee02ecc85802b6e17bb2cfd3cf9f1bd8d8dae6ae1a829be2b2022dbf4f64eb8
5
5
  SHA512:
6
- metadata.gz: 0d1caec0250511bcb86772abce5b23250cea6a9693b8b231a9b21358efd0cc110c05d0023fdf632229a2fcc7f9baa03e424ba5e06fd3e5c5c87f6d629f488ef0
7
- data.tar.gz: 9fe10367ed657e7e2c97bdee4e01740ccf1aaa2914cd33c5d56e188a02ee1600f0f1a0ec7ed997bf84e582d3d90dfe7e75ed38fa5760177cc884fe3240cffd64
6
+ metadata.gz: 43c5d0833d8dfbfeefcdae12f8e085abd65612220157ffd42333dda680d6cc6767b5a090d598cd90b57b6bebcbaa1948903eca78baa24aa003a1166756112083
7
+ data.tar.gz: e54f68716b35aa794f9f8d97df1f5b3233ba4275418bbd36ac79613b570258f304ffc9981cbb138db466b4a83e743a64df1158d242bc395322043322f15c604e
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## [v0.1.0](https://github.com/metabahn/proc/releases/tag/2022-01-13.1)
2
+
3
+ *released on 2022-01-13.1*
4
+
5
+ * `add` [#19](https://github.com/metabahn/proc/pull/19) Support inspection in clients, callables, and compositions ([bryanp](https://github.com/bryanp))
6
+
1
7
  ## [v0.0.0](https://github.com/metabahn/proc/releases/tag/2021-09-12)
2
8
 
3
9
  *released on 2021-09-12*
@@ -1,8 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "core/inspect"
4
+
3
5
  class Proc
4
6
  module Composer
5
7
  class Argument
8
+ include Is::Inspectable
9
+
6
10
  def initialize(name, **options)
7
11
  @name = name
8
12
  @options = options
@@ -1,8 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "core/inspect"
4
+
3
5
  class Proc
4
6
  module Composer
5
7
  class Callable < BasicObject
8
+ include ::Is::Inspectable
9
+ inspects :@proc, :@input, :@arguments
10
+
6
11
  attr_reader :proc, :input, :arguments
7
12
 
8
13
  def initialize(proc, input: ::Proc::Composer.undefined, arguments: {})
@@ -85,15 +90,33 @@ class Proc
85
90
  build_callable(proc: [@proc, proc].join("."), input: @input, arguments: arguments)
86
91
  end
87
92
 
88
- IGNORE_MISSING = %i[to_hash].freeze
93
+ IGNORE_MISSING = %i[
94
+ to_hash
95
+ ].freeze
96
+
97
+ KERNEL_DELEGATE = %i[
98
+ class
99
+ instance_variables
100
+ instance_variable_get
101
+ instance_variable_set
102
+ object_id
103
+ public_send
104
+ respond_to?
105
+ ].freeze
89
106
 
90
107
  # [public] Allows nested callable contexts to be built through method lookups.
91
108
  #
92
- def method_missing(name, input = input_omitted = true, **arguments)
109
+ def method_missing(name, input = input_omitted = true, *parameters, **arguments, &block)
93
110
  if IGNORE_MISSING.include?(name)
94
111
  super
112
+ elsif KERNEL_DELEGATE.include?(name)
113
+ if input_omitted
114
+ ::Kernel.instance_method(name).bind_call(self, *parameters, **arguments, &block)
115
+ else
116
+ ::Kernel.instance_method(name).bind_call(self, input, *parameters, **arguments, &block)
117
+ end
95
118
  else
96
- if ::Kernel.block_given?
119
+ if block
97
120
  arguments[:proc] = yield
98
121
  end
99
122
 
@@ -117,10 +140,12 @@ class Proc
117
140
  case value
118
141
  when ::Symbol
119
142
  ["@@", value.to_s, {}]
120
- when ::Proc::Composer::Argument, ::Proc::Composer::Callable, ::Proc::Composer::Composition
121
- value.serialize
122
143
  else
123
- ["%%", value]
144
+ if value.respond_to?(:serialize)
145
+ value.serialize
146
+ else
147
+ ["%%", value]
148
+ end
124
149
  end
125
150
  end
126
151
 
@@ -1,8 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "core/inspect"
4
+
3
5
  class Proc
4
6
  module Composer
5
7
  class Composition
8
+ include Is::Inspectable
9
+ inspects :@input, :@arguments, :@callables
10
+
6
11
  attr_reader :input, :callables, :arguments
7
12
 
8
13
  def initialize(input:, callables: [], arguments: {})
@@ -86,10 +91,12 @@ class Proc
86
91
  case value
87
92
  when Symbol
88
93
  ["@@", value.to_s, {}]
89
- when Argument, Callable, Composition
90
- value.serialize
91
94
  else
92
- ["%%", value]
95
+ if value.respond_to?(:serialize)
96
+ value.serialize
97
+ else
98
+ ["%%", value]
99
+ end
93
100
  end
94
101
  end
95
102
 
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Proc
4
+ module Composer
5
+ # [public]
6
+ #
7
+ class Undefined
8
+ def inspect
9
+ "(undefined)".inspect
10
+ end
11
+ end
12
+ end
13
+ end
@@ -2,7 +2,7 @@
2
2
 
3
3
  class Proc
4
4
  module Composer
5
- VERSION = "0.0.0"
5
+ VERSION = "0.1.0"
6
6
 
7
7
  # [public]
8
8
  #
data/lib/proc/composer.rb CHANGED
@@ -3,12 +3,13 @@
3
3
  require_relative "composer/argument"
4
4
  require_relative "composer/callable"
5
5
  require_relative "composer/composition"
6
+ require_relative "composer/undefined"
6
7
  require_relative "composer/version"
7
8
 
8
9
  class Proc
9
10
  module Composer
10
11
  def self.undefined
11
- @_undefined ||= ::Object.new
12
+ @_undefined ||= Proc::Composer::Undefined.new
12
13
  end
13
14
 
14
15
  def self.undefined?(value)
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: proc-composer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bryan Powell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-12 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2022-01-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: core-inspect
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.1'
13
27
  description: Proc composer library.
14
28
  email: bryan@metabahn.com
15
29
  executables: []
@@ -23,6 +37,7 @@ files:
23
37
  - lib/proc/composer/argument.rb
24
38
  - lib/proc/composer/callable.rb
25
39
  - lib/proc/composer/composition.rb
40
+ - lib/proc/composer/undefined.rb
26
41
  - lib/proc/composer/version.rb
27
42
  homepage: https://proc.dev
28
43
  licenses:
@@ -43,7 +58,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
43
58
  - !ruby/object:Gem::Version
44
59
  version: '0'
45
60
  requirements: []
46
- rubygems_version: 3.2.15
61
+ rubygems_version: 3.3.3
47
62
  signing_key:
48
63
  specification_version: 4
49
64
  summary: Proc composer library.