trailblazer-context 0.1.0 → 0.1.1

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
  SHA1:
3
- metadata.gz: cbed8941980e69f6e3ef14de677024e8c45f4573
4
- data.tar.gz: 31c11f6e2a59b45868e0247772bf9eafc692f06e
3
+ metadata.gz: eb81fa6ece2d3615f46a7b72a066a8316c48065a
4
+ data.tar.gz: d720c68f9154786ef561e97f67e29ff15e58be6c
5
5
  SHA512:
6
- metadata.gz: 33020d8f9f10cf5323e3dbe5572da5f8d1fe0b7842d1b2a73199be07a2bba2648ddcc146dea445e06551900152117bbedc19b7a6c5c476c2675d8222fa7fcaac
7
- data.tar.gz: 6bf38334cd38dce21da64615860eec450bc180c4457c0b09399d179c376b204a7af1360349edc377054923e8f70354a22b943729d22412659eb80155998cddef
6
+ metadata.gz: 720a50aab05ec4de810b88227c7405f5bffaef9e2685419849f09cd56159e5e216c0ae5959b4d6502e2edabc7559bdfcbe5a01b61f9a141bfc01508f407e39a6
7
+ data.tar.gz: 2aa161d5f6de1b93210f3e1f5f9c187f0dd8b44cc0bf2d335dbc36c6479d6891d1a4ac002dd729d3b824a5fd04304fe952b0038fa16e4105ac242ec584905020
@@ -0,0 +1,7 @@
1
+ # 0.1.1
2
+
3
+ * `Option.( *args, &block )` now passes through the block to the option call.
4
+
5
+ # 0.1.0
6
+
7
+ * Extracted from `trailblazer-activity`, here it comes.
@@ -3,6 +3,9 @@
3
3
  # collects mutable runtime-computed data while providing access to compile-time
4
4
  # information.
5
5
  # The runtime-data takes precedence over the class data.
6
+ #
7
+ # notes
8
+ # a context is a ContainerChain with two elements (when reading)
6
9
  module Trailblazer
7
10
  # Holds local options (aka `mutable_options`) and "original" options from the "outer"
8
11
  # activity (aka wrapped_options).
@@ -11,13 +14,23 @@ module Trailblazer
11
14
  class Context # :data object:
12
15
  def initialize(wrapped_options, mutable_options)
13
16
  @wrapped_options, @mutable_options = wrapped_options, mutable_options
17
+ # TODO: wrapped_options should be optimized for lookups here since it could also be a Context instance, but should be a ContainerChain.
14
18
  end
15
19
 
16
20
  def [](name)
17
- ContainerChain.find( [@mutable_options, @wrapped_options], name )
21
+ # ContainerChain.find( [@mutable_options, @wrapped_options], name )
22
+
23
+ # in 99.9% or cases @mutable_options will be a Hash, and these are already optimized for lookups.
24
+ # it's up to the ContainerChain to optimize itself.
25
+ return @mutable_options[name] if @mutable_options.key?(name)
26
+ @wrapped_options[name]
18
27
  end
19
28
 
29
+ # TODO: use ContainerChain.find here for a generic optimization
30
+ #
31
+ # the version here is about 4x faster for now.
20
32
  def key?(name)
33
+ # ContainerChain.find( [@mutable_options, @wrapped_options], name )
21
34
  @mutable_options.key?(name) || @wrapped_options.key?(name)
22
35
  end
23
36
 
@@ -25,6 +38,9 @@ module Trailblazer
25
38
  @mutable_options[name] = value
26
39
  end
27
40
 
41
+ # @private
42
+ #
43
+ # This method might be removed.
28
44
  def merge(hash)
29
45
  original, mutable_options = decompose
30
46
 
@@ -37,11 +53,6 @@ module Trailblazer
37
53
  [ @wrapped_options, @mutable_options ]
38
54
  end
39
55
 
40
- def key?(name)
41
- ContainerChain.find( [@mutable_options, @wrapped_options], name )
42
- end
43
-
44
-
45
56
  def keys
46
57
  @mutable_options.keys + @wrapped_options.keys # FIXME.
47
58
  end
@@ -1,5 +1,5 @@
1
1
  module Trailblazer
2
2
  class Context
3
- VERSION = "0.1.0"
3
+ VERSION = "0.1.1"
4
4
  end
5
5
  end
@@ -11,30 +11,30 @@ module Trailblazer
11
11
  # @return [Proc] when called, this proc will evaluate its option (at run-time).
12
12
  def self.build(call_implementation, proc)
13
13
  if proc.is_a? Symbol
14
- ->(*args) { call_implementation.evaluate_method(proc, *args) }
14
+ ->(*args, &block) { call_implementation.evaluate_method(proc, *args, &block) }
15
15
  else
16
- ->(*args) { call_implementation.evaluate_callable(proc, *args) }
16
+ ->(*args, &block) { call_implementation.evaluate_callable(proc, *args, &block) }
17
17
  end
18
18
  end
19
19
 
20
20
  # A call implementation invoking `proc.(*args)` and plainly forwarding all arguments.
21
21
  # Override this for your own step strategy (see KW#call!).
22
22
  # @private
23
- def self.call!(proc, *args)
24
- proc.(*args)
23
+ def self.call!(proc, *args, &block)
24
+ proc.(*args, &block)
25
25
  end
26
26
 
27
27
  # Note that both #evaluate_callable and #evaluate_method drop most of the args.
28
28
  # If you need those, override this class.
29
29
  # @private
30
- def self.evaluate_callable(proc, *args, **flow_options)
31
- call!(proc, *args)
30
+ def self.evaluate_callable(proc, *args, **flow_options, &block)
31
+ call!(proc, *args, &block)
32
32
  end
33
33
 
34
34
  # Make the context's instance method a "lambda" and reuse #call!.
35
35
  # @private
36
- def self.evaluate_method(proc, *args, exec_context:raise, **flow_options)
37
- call!(exec_context.method(proc), *args)
36
+ def self.evaluate_method(proc, *args, exec_context:raise, **flow_options, &block)
37
+ call!(exec_context.method(proc), *args, &block)
38
38
  end
39
39
 
40
40
  # Returns a {Proc} that, when called, invokes the `proc` argument with keyword arguments.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trailblazer-context
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Sutterer
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-12-05 00:00:00.000000000 Z
11
+ date: 2017-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -61,6 +61,7 @@ extensions: []
61
61
  extra_rdoc_files: []
62
62
  files:
63
63
  - ".gitignore"
64
+ - CHANGES.md
64
65
  - Gemfile
65
66
  - LICENSE
66
67
  - README.md