yuuki 0.1.1 → 0.1.4

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: 95e60a7be44a24d27a3340b1a0bf86df33927e32cd855dd9b99df4faa2bc1685
4
- data.tar.gz: '055829249f336c32e1f88f73984bbd465c037ad6b6edb5a3e2bce68139b25976'
3
+ metadata.gz: fbc6115f9c7818a9c171c7c8928321bdd7c5fd737ce7f1cbed4024c56dfd2d91
4
+ data.tar.gz: 148536d6a0e91a93994f12cb4672b8cdafe1e77e476b89532455bbcf47f3aaa4
5
5
  SHA512:
6
- metadata.gz: b44ff4617ffaaf0e18e0654d67113308518b04575bc74ced15b3afa1418c479e5a577fcbac30de3aa9ff32a6bdcf007c4669a742df0da03a5ce684f271936a58
7
- data.tar.gz: 9decda81bcfc32138478d91015590d0da49734e7e3d246a87bc40101daa7691a883118f8ad09d889b94dd9ce225f286a40635c2f94a6b84d3b1035431c8064e5
6
+ metadata.gz: 89b3a2e35810e21a94a096debaa2d709806702340ef23a0fcbe55cc73656cf263f8bef4ddbc4fbacf47c62516821dc94d11ad23948bdb0911bfcb49cb0271527
7
+ data.tar.gz: 7b67f83e432c5da9d028fbd417c2f08b6c4007dc0bdb31e836c4ad4aa691c98f3c64d02e54b0c9c8f2141d40f64332d97e71b6f3f5ea8559442a1b796b57828b
data/.DS_Store ADDED
Binary file
data/README.md CHANGED
@@ -21,7 +21,11 @@ Or install it yourself as:
21
21
  ## Usage
22
22
 
23
23
  ```ruby
24
+ require 'yuuki'
25
+
24
26
  class HogeClass
27
+ extend Yuuki::Runner
28
+
25
29
  add :a
26
30
  def a
27
31
  puts 'a'
data/lib/yuuki/caller.rb CHANGED
@@ -5,37 +5,46 @@ require 'yuuki/runner'
5
5
 
6
6
  module Yuuki
7
7
  class Caller
8
- def self.require_dir(_dir, recursive: false)
8
+ # requires all the rb files in the given directory
9
+ # @param [String] require_dir directory
10
+ # @param [Boolean] recursive
11
+ def self.require_dir(require_dir, recursive: false)
9
12
  Dir.glob(recursive ? "#{require_dir}/**/*.rb" : "#{require_dir}/*.rb"){|file| require file}
10
13
  end
11
14
 
15
+ # @param [Object] instances
12
16
  def initialize(*instances)
13
17
  @instances = Set.new
14
18
  @threads = []
15
19
  add(*instances)
16
20
  end
17
21
 
22
+ # adds instances to yuuki
23
+ # @param [Object] instances
18
24
  def add(*instances)
19
25
  instances.each do |instance|
20
26
  # create instance if class is given
21
27
  if instance.is_a?(Class)
22
28
  klass = instance
23
- instance = instance.new
29
+ # check the klass is extended
30
+ raise Yuuki::Error, 'Runner instance must be extend Yuuki::Runner' unless klass.singleton_class.include?(Yuuki::Runner)
31
+ instance = instance.allocate
32
+ instance.instance_variable_set(:@yuuki, self)
33
+ instance.send(:initialize)
24
34
  else
25
- klass = instance.class
35
+ # check the klass is extended
36
+ raise Yuuki::Error, 'Runner instance must be extend Yuuki::Runner' unless instance.class.singleton_class.include?(Yuuki::Runner)
37
+ # add @yuuki to the instance
38
+ instance.instance_variable_set(:@yuuki, self)
26
39
  end
27
40
 
28
- # check the klass is extended
29
- raise Yuuki::Error, 'Runner instance must be extend Yuuki::Runner' unless klass.singleton_class.include?(Yuuki::Runner)
30
-
31
- # add @yuuki to the instance
32
- instance.instance_variable_set(:@yuuki, self)
33
-
34
41
  # regist
35
42
  @instances << instance
36
43
  end
37
44
  end
38
45
 
46
+ # returns runners
47
+ # @return [Array<[Method, Hash<Symbol, Object>]>]
39
48
  def runners
40
49
  list = @instances.flat_map do |instance|
41
50
  methods = instance.class.instance_variable_get(:@yuuki_methods)
@@ -44,18 +53,38 @@ module Yuuki
44
53
  list.sort_by{|_method, meta| -(meta[:priority] || 0)}
45
54
  end
46
55
 
56
+ # returns all tags defined
57
+ def tags
58
+ @instances.flat_map do |instance|
59
+ methods = instance.class.instance_variable_get(:@yuuki_methods)
60
+ methods.select{|_sig, meta| meta[:enabled]}.flat_map{|_sig, meta| meta[:tags]}
61
+ end
62
+ end
63
+
64
+ # runs all methods
65
+ # @param [Object] args arguments
47
66
  def run(**args, &block)
48
67
  run_internal(runners, args, &block)
49
68
  end
50
69
 
70
+ # runs all selected methods
71
+ # @param [Proc] proc_select
72
+ # @param [Object] args arguments
51
73
  def run_select(proc_select, **args, &block)
52
74
  run_internal(runners.select(&proc_select), args, &block)
53
75
  end
54
76
 
77
+ # runs all methods with the specified tags
78
+ # @param [Symbol] tags
79
+ # @param [Object] args arguments
55
80
  def run_tag(*tags, **args, &block)
56
81
  run_select(proc{|_method, meta| meta[:tags]&.intersect?(tags)}, **args, &block)
57
82
  end
58
83
 
84
+ # runs the specific method
85
+ # @param [Class, nil] klass
86
+ # @param [Symbol, nil] method_sig method name
87
+ # @param [Object] args arguments
59
88
  def run_method(klass, method_sig, **args, &block)
60
89
  select_proc = proc do |method, _meta|
61
90
  flag_klass = klass ? method.receiver.instance_of?(klass) : true
@@ -65,11 +94,14 @@ module Yuuki
65
94
  run_select(select_proc, **args, &block)
66
95
  end
67
96
 
97
+ # joins all runnning threads
68
98
  def join
69
99
  @threads.each(&:join)
70
100
  @threads.select!(&:alive?)
71
101
  end
72
102
 
103
+ # returns whether any thread is alive
104
+ # @return [Boolean]
73
105
  def alive?
74
106
  @threads.select!(&:alive?)
75
107
  !@threads.empty?
@@ -5,23 +5,33 @@ require 'yuuki/runner'
5
5
 
6
6
  module Yuuki
7
7
  module Runner
8
- # set interval to the method
9
- def periodic(method, interval)
8
+ # sets interval to the method
9
+ # @param [Symbol] methods method names
10
+ # @param [Integer] interval
11
+ def periodic(*methods, interval)
10
12
  @yuuki_methods ||= {}
11
- @yuuki_methods[method] ||= {}
12
- @yuuki_methods[method][:periodic] = interval
13
+ methods.each do |method|
14
+ @yuuki_methods[method] ||= {}
15
+ @yuuki_methods[method][:periodic] = interval
16
+ end
13
17
  end
14
-
15
- # set whether the method run at the first time
16
- def first_run(method, enabled: true)
18
+
19
+ # sets whether the method run at the first time
20
+ # @param [Symbol] methods method names
21
+ # @param [Boolean] enabled
22
+ def first_run(*methods, enabled: true)
17
23
  @yuuki_methods ||= {}
18
- @yuuki_methods[method] ||= {}
19
- @yuuki_methods[method][:first_run] = enabled
24
+ methods.each do |method|
25
+ @yuuki_methods[method] ||= {}
26
+ @yuuki_methods[method][:first_run] = enabled
27
+ end
20
28
  end
21
29
  end
22
30
  end
23
31
 
24
32
  module Yuuki
33
+ # @attr_reader [Boolean] first_run
34
+ # @attr_reader [Float] current_time
25
35
  class PeriodicCaller < Caller
26
36
  attr_reader :first_run, :current_time
27
37
 
@@ -30,10 +40,16 @@ module Yuuki
30
40
  @first_run = true
31
41
  end
32
42
 
43
+ # sets error callback
44
+ # @yield [error]
45
+ # @yieldparam [Exception] error
33
46
  def on_error(&block)
34
47
  @on_error = block
35
48
  end
36
49
 
50
+ # runs the periodic caller
51
+ # @param [Numeric] gmtoff GMT Offset
52
+ # @param [Object] args arguments
37
53
  def run(gmtoff = Time.now.gmtoff, **args, &block)
38
54
  last_time = nil
39
55
  loop do
data/lib/yuuki/runner.rb CHANGED
@@ -4,7 +4,8 @@ require 'set'
4
4
 
5
5
  module Yuuki
6
6
  module Runner
7
- # add method
7
+ # adds methods to yuuki
8
+ # @param [Symbol] methods method names
8
9
  def add(*methods)
9
10
  @yuuki_methods ||= {}
10
11
  methods.each do |method|
@@ -13,7 +14,8 @@ module Yuuki
13
14
  end
14
15
  end
15
16
 
16
- # delete method
17
+ # deletes methods from yuuki
18
+ # @param [Symbol] methods method names
17
19
  def delete(*methods)
18
20
  @yuuki_methods ||= {}
19
21
  methods.each do |method|
@@ -22,7 +24,9 @@ module Yuuki
22
24
  end
23
25
  end
24
26
 
25
- # add tags to the method
27
+ # adds tags to the method
28
+ # @param [Symbol] method method name
29
+ # @param [Symbol] tags tag names
26
30
  def tag(method, *tags)
27
31
  @yuuki_methods ||= {}
28
32
  @yuuki_methods[method] ||= {}
@@ -30,7 +34,9 @@ module Yuuki
30
34
  @yuuki_methods[method][:tags].merge(tags)
31
35
  end
32
36
 
33
- # enable threading to the method
37
+ # enables threading for the methods
38
+ # @param [Symbol] methods method names
39
+ # @param [Boolean] enabled
34
40
  def thread(*methods, enabled: true)
35
41
  @yuuki_methods ||= {}
36
42
  methods.each do |method|
@@ -39,7 +45,9 @@ module Yuuki
39
45
  end
40
46
  end
41
47
 
42
- # set priority to the method
48
+ # sets priority to the method
49
+ # @param [Symbol] methods method names
50
+ # @param [Numeric] priority
43
51
  def priority(*methods, priority)
44
52
  @yuuki_methods ||= {}
45
53
  methods.each do |method|
data/lib/yuuki/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Yuuki
4
- VERSION = '0.1.1'
4
+ VERSION = '0.1.4'
5
5
  end
@@ -0,0 +1,25 @@
1
+ # TypeProf 0.21.2
2
+
3
+ # Classes
4
+ module Yuuki
5
+ class Caller
6
+ @instances: Set[untyped]
7
+ @threads: Array[Thread]
8
+
9
+ def self.require_dir: (String require_dir, ?recursive: bool) -> void
10
+ def initialize: (*untyped instances) -> void
11
+ def add: (*untyped instances) -> void
12
+ def runners: -> Array[untyped]
13
+ def run: (**untyped) -> void
14
+ def run_select: (^(Method, Hash[Symbol, untyped]) -> bool proc_select, **untyped) -> void
15
+ def run_tag: (*Symbol tags, **untyped) -> void
16
+ def run_method: (Class klass, Symbol method_sig, **untyped) -> void
17
+ def join: -> void
18
+ def alive?: -> bool
19
+ alias running? alive?
20
+
21
+ private
22
+ def run_internal: (Array[untyped] runners, Hash[Symbol, untyped] args) -> void
23
+ def run_method_internal: (Method method, Hash[Symbol, untyped] args) -> void
24
+ end
25
+ end
@@ -0,0 +1,7 @@
1
+ # TypeProf 0.21.2
2
+
3
+ # Classes
4
+ module Yuuki
5
+ class Error < StandardError
6
+ end
7
+ end
@@ -0,0 +1,19 @@
1
+ # TypeProf 0.21.2
2
+
3
+ # Classes
4
+ module Yuuki
5
+ module Runner
6
+ def periodic: (Symbol method, Integer interval) -> void
7
+ def first_run: (Symbol method, ?enabled: bool) -> void
8
+ end
9
+
10
+ class PeriodicCaller < Caller
11
+ @on_error: Proc
12
+
13
+ attr_reader first_run: bool
14
+ attr_reader current_time: Float
15
+ def initialize: (*untyped instances) -> void
16
+ def on_error: {(Exception) -> void} -> void
17
+ def run: (?Integer gmtoff, **untyped) -> void
18
+ end
19
+ end
@@ -0,0 +1,14 @@
1
+ # TypeProf 0.21.2
2
+
3
+ # Classes
4
+ module Yuuki
5
+ module Runner
6
+ @yuuki_methods: Hash[Symbol, Hash[Symbol, untyped]]
7
+
8
+ def add: (*Symbol methods) -> void
9
+ def delete: (*Symbol methods) -> void
10
+ def tag: (Symbol method, *Symbol tags) -> void
11
+ def thread: (*Symbol methods, ?enabled: bool) -> void
12
+ def priority: (*Symbol methods, Numeric priority) -> void
13
+ end
14
+ end
@@ -0,0 +1,6 @@
1
+ # TypeProf 0.21.2
2
+
3
+ # Classes
4
+ module Yuuki
5
+ VERSION: String
6
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yuuki
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ishotihadus
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-02-22 00:00:00.000000000 Z
11
+ date: 2022-05-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -59,6 +59,7 @@ executables: []
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
+ - ".DS_Store"
62
63
  - ".gitignore"
63
64
  - Gemfile
64
65
  - LICENSE.txt
@@ -72,6 +73,11 @@ files:
72
73
  - lib/yuuki/periodic.rb
73
74
  - lib/yuuki/runner.rb
74
75
  - lib/yuuki/version.rb
76
+ - sig/yuuki/caller.rbs
77
+ - sig/yuuki/error.rbs
78
+ - sig/yuuki/periodic.rbs
79
+ - sig/yuuki/runner.rbs
80
+ - sig/yuuki/version.rbs
75
81
  - yuuki.gemspec
76
82
  homepage: https://github.com/ishotihadus/yuuki
77
83
  licenses: