tensai-core 0.1.1 → 0.1.2

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
  SHA256:
3
- metadata.gz: 79bafeb0e1ee8acc293938ac8ec9708e3bc37cc73cc5748f66d2e9d7fe3f19f6
4
- data.tar.gz: 2797a5cb139b38517d9e9c4a9a661ccca493fdc52561978bbbf1c79435af7ab8
3
+ metadata.gz: 1a3f6bc75c998f6724fcc260d6864fc63803b2651fb8168b26cd94c8e933b5f5
4
+ data.tar.gz: 15f5e077f28534d457c3d68e12ab6e373707a2138999e649e65321d511cbb807
5
5
  SHA512:
6
- metadata.gz: 59378c4d21b0a40f66e397e6986748a267a6dd6a92ae5d0000bff53e594789f8d074bcc637a27efcfb7e0ad23537cfc352a8cb759a75f6572bc65c567fbe6f4e
7
- data.tar.gz: cc1fec80131c4195f6d91329a1e36d3f9f2d32c7f64cee5d87e9e7dad5855c45a255d5a2433f63bc15b8bae34755a652bc33bd01cd6fc703281dada7de2b6999
6
+ metadata.gz: 180f611385d4ab59b137e41e13d0a1cceb9787dec7fbfcd755c3165d293674211926389d39e96cecaf842e72e8851fa8865e2ace31e2dad2bf8f9ba81553f210
7
+ data.tar.gz: 64be2ab89535cb04099061a81c836f93e580b8d6654e3115dad34d93cd8240708a750ed32e99344550d4cc126e644d73f7084cb5a97ef6e377e6941010cd025f
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tensai-core (0.1.0)
4
+ tensai-core (0.1.1)
5
5
  dry-types (~> 1.1)
6
6
 
7
7
  GEM
@@ -5,42 +5,69 @@ require 'tensai/types'
5
5
  module Tensai::Util
6
6
  # @private
7
7
  class Initializer < Module
8
+ attr_reader :args
9
+
8
10
  def initialize(**args)
9
11
  @args = args
10
-
11
- define_method :__check_argument_type do |argument, value|
12
- args[argument][value]
13
- end
14
12
  end
15
13
 
16
14
  def included(klass)
17
- klass.class_eval initializer_code, __FILE__, __LINE__ + 10
18
15
  @args.keys.each do |arg|
19
16
  klass.class_eval "attr_reader :#{arg}", __FILE__, __LINE__
20
17
  end
21
- end
22
18
 
23
- private
19
+ all_args = all_args_for(klass)
24
20
 
25
- def initializer_code
26
- <<~CODE
27
- def initialize(#{initializer_signature})
28
- #{check_argument_types_code}
29
- #{assign_instance_variables_code}
21
+ klass.instance_eval do
22
+ define_method :__check_argument_type do |argument, value|
23
+ all_args[argument][value]
30
24
  end
31
- CODE
32
- end
25
+ end
33
26
 
34
- def initializer_signature
35
- @args.keys.map { |arg| "#{arg}:" }.join(', ')
27
+ klass.class_eval InitializeMethod.new(all_args).code, __FILE__, __LINE__ + 11
36
28
  end
37
29
 
38
- def check_argument_types_code
39
- @args.keys.map { |arg| "__check_argument_type(:#{arg}, #{arg})" }.join(';')
30
+ private
31
+
32
+ def all_args_for(klass)
33
+ parent_initializers = klass.ancestors.select { |a| a.is_a? Initializer }
34
+
35
+ parent_initializers.map(&:args)
36
+ .reduce(args) { |result, parent_args| parent_args.merge result }
40
37
  end
41
38
 
42
- def assign_instance_variables_code
43
- @args.keys.map { |arg| "@#{arg} = #{arg}" }.join(';')
39
+ #
40
+ # Generates initialize method code
41
+ #
42
+ class InitializeMethod
43
+ def initialize(args)
44
+ @args = args
45
+ end
46
+
47
+ def code
48
+ <<~CODE
49
+ def initialize(#{signature})
50
+ #{check_argument_types_code}
51
+ #{assign_instance_variables_code}
52
+ end
53
+ CODE
54
+ end
55
+
56
+ private
57
+
58
+ attr_reader :args
59
+
60
+ def signature
61
+ args.keys.map { |arg| "#{arg}:" }.join(', ')
62
+ end
63
+
64
+ def check_argument_types_code
65
+ args.keys.map { |arg| "__check_argument_type(:#{arg}, #{arg})" }.join(';')
66
+ end
67
+
68
+ def assign_instance_variables_code
69
+ args.keys.map { |arg| "@#{arg} = #{arg}" }.join(';')
70
+ end
44
71
  end
45
72
  end
46
73
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Tensai
4
- VERSION = '0.1.1'
4
+ VERSION = '0.1.2'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tensai-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Fischer
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-09-20 00:00:00.000000000 Z
11
+ date: 2019-09-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-types