tensai-core 0.1.1 → 0.1.2

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: 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