nina 0.1.2 → 0.1.4

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: 28d86e0716c73ae59b0b6ac85076436ae54d1856d072e11114c576cd0b66365e
4
- data.tar.gz: 255f6b2b4ac6b2a6f56f0cbea4fdf38e991494c855cd373417ec99f95af174ac
3
+ metadata.gz: 2fa283d983d2df265fc4d74813c9abefb8f351c2582245d359a497514f4a61a5
4
+ data.tar.gz: 0e6ee2d867415efdec03f53d35be33a99ad202b4e2aa9f76ab9683b9657af999
5
5
  SHA512:
6
- metadata.gz: 745f85388243699c7a2143c8849039b46aad9e343bf3ec005d3f04025d21d4860a7e43969ce06a3ab0357d865bfc4a4efd9fc14c550f551b4aa455a0aa33ab38
7
- data.tar.gz: 6e1a5d9e21e28c3667a56e96b85c1e7c2e6a304ea377d607f1bc1b4b161af4a1e314f4dc28752c2ccc31e982b6cb9b3b0dbf077573dc02c4cd34376baaf4ef75
6
+ metadata.gz: 822d7360687494fefea19be97898eefa121c3aff71ba579d1030730b9a3b97e5409d6fe53990f43f2b175e132ff78a7184c79956e2545647aeaccd1c0a8c8c2a
7
+ data.tar.gz: fc42924b259b4c68ceca3e14b951ae45aadd61214b8ac7944294a283d183cd5bfedc6b4248287b55364e175ef9bfcb7fbfaad8e5c564a33fcbbc0acd9b851aaf
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- nina (0.1.2)
5
- toritori (= 0.1.0)
4
+ nina (0.1.4)
5
+ toritori (= 0.2.1)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
@@ -58,7 +58,7 @@ GEM
58
58
  json (>= 1.8, < 3)
59
59
  simplecov-html (~> 0.10.0)
60
60
  simplecov-html (0.10.2)
61
- toritori (0.1.0)
61
+ toritori (0.2.1)
62
62
  unicode-display_width (2.4.2)
63
63
 
64
64
  PLATFORMS
@@ -3,27 +3,6 @@
3
3
  module Nina
4
4
  # Generates module that adds support for objects creation
5
5
  class Assembler
6
- # Adds ability to delegeate methods via method_missing
7
- module MethodMissingDelegation
8
- def method_missing(name, *attrs, &block)
9
- return super unless methods.detect { |m| m == :__predecessor }
10
-
11
- public_send(__predecessor).public_send(name, *attrs, &block)
12
- end
13
-
14
- def respond_to_missing?(method_name, _include_private = false)
15
- return super unless methods.detect { |m| m == :__predecessor }
16
-
17
- public_send(__predecessor).respond_to?(method_name)
18
- end
19
- end
20
-
21
- def self.def_accessor(accessor, on:, to:, delegate: false)
22
- on.define_singleton_method(:__predecessor) { accessor }
23
- on.define_singleton_method(accessor) { to }
24
- on.extend(MethodMissingDelegation) if delegate
25
- end
26
-
27
6
  def initialize(abstract_factory)
28
7
  @abstract_factory = abstract_factory
29
8
  end
@@ -31,8 +10,8 @@ module Nina
31
10
  def inject(build_order, initialization = {}, callbacks: nil, delegate: false)
32
11
  build_order.each.with_index(-1).inject(nil) do |prev, (name, idx)|
33
12
  object = create_object(name, initialization)
34
- self.class.def_accessor(build_order[idx], on: object, to: prev, delegate: delegate) if prev
35
- callbacks.to_h.fetch(name, []).each { |c| c.call(object) } if callbacks
13
+ Nina.def_accessor(build_order[idx], on: object, to: prev, delegate: delegate) if prev
14
+ callbacks[name].each { |c| c.call(object) } if callbacks&.key?(name)
36
15
  object
37
16
  end
38
17
  end
@@ -40,10 +19,10 @@ module Nina
40
19
  private
41
20
 
42
21
  def create_object(name, initialization = {})
43
- return @abstract_factory.send("#{name}_factory").create if initialization[name].nil?
22
+ return @abstract_factory.factories[name].create if initialization[name].nil?
44
23
 
45
24
  args, kwargs, block = initialization[name]
46
- @abstract_factory.send("#{name}_factory").create(*args, **kwargs, &block)
25
+ @abstract_factory.factories[name].create(*args, **kwargs, &block)
47
26
  end
48
27
  end
49
28
  end
data/lib/nina/builder.rb CHANGED
@@ -31,8 +31,7 @@ module Nina
31
31
  build_order_list << name
32
32
  super
33
33
  define_singleton_method(name) do |klass = nil, &definition|
34
- factories[__method__].subclass.base_class(klass) if klass
35
- factories[__method__].subclass(&definition) if definition
34
+ factories[__method__].subclass(produces: klass, &definition)
36
35
  end
37
36
  end
38
37
  end
@@ -65,7 +64,7 @@ module Nina
65
64
  @assembler.inject(
66
65
  @abstract_factory.build_order_list,
67
66
  @initialization.to_h,
68
- callbacks: callbacks,
67
+ callbacks: callbacks.to_h,
69
68
  delegate: delegate
70
69
  )
71
70
  end
@@ -76,7 +75,7 @@ module Nina
76
75
  @assembler.inject(
77
76
  @abstract_factory.build_order_list.reverse,
78
77
  @initialization.to_h,
79
- callbacks: callbacks,
78
+ callbacks: callbacks.to_h,
80
79
  delegate: delegate
81
80
  )
82
81
  end
data/lib/nina/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Nina
4
- VERSION = '0.1.2'
4
+ VERSION = '0.1.4'
5
5
  end
data/lib/nina.rb CHANGED
@@ -31,7 +31,47 @@ module Nina
31
31
  end
32
32
  end
33
33
 
34
+ # Adds ability to delegeate methods via method_missing
35
+ module MethodMissingDelegation
36
+ def method_missing(name, *attrs, **kwargs, &block)
37
+ if (prev = predecessors.detect { |o| o.public_methods.include?(name) })
38
+ prev.public_send(name, *attrs, **kwargs, &block)
39
+ else
40
+ super
41
+ end
42
+ end
43
+
44
+ def respond_to_missing?(method_name, _include_private = false)
45
+ public_methods.detect { |m| m == :predecessor_name } || super
46
+ end
47
+
48
+ def predecessors
49
+ @predecessors ||= begin
50
+ obj = self
51
+ [].tap do |list|
52
+ list << obj = obj.public_send(obj.predecessor_name) while obj.methods.detect { |m| m == :predecessor_name }
53
+ end
54
+ end
55
+ end
56
+ end
57
+
34
58
  def self.included(receiver)
35
59
  receiver.extend ClassMethods
36
60
  end
61
+
62
+ def self.def_accessor(accessor, on:, to:, delegate: false)
63
+ on.define_singleton_method(accessor) { to }
64
+ return unless delegate
65
+
66
+ on.define_singleton_method(:predecessor_name) { accessor }
67
+ on.extend(MethodMissingDelegation)
68
+ end
69
+
70
+ def self.linked_list(build_config, delegate: false)
71
+ build_order = build_config.keys
72
+ build_config.each.with_index(-1).inject(nil) do |prev, ((_, object), idx)|
73
+ Nina.def_accessor(build_order[idx], on: object, to: prev, delegate: delegate) if prev
74
+ object
75
+ end
76
+ end
37
77
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nina
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrii Baran
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-07-12 00:00:00.000000000 Z
11
+ date: 2024-01-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: toritori
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.1.0
19
+ version: 0.2.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 0.1.0
26
+ version: 0.2.1
27
27
  description: Reduce biolerplate code when you need to create complex OOD composition
28
28
  email:
29
29
  - andriy.baran.v@gmail.com