rasteira 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
  SHA1:
3
- metadata.gz: 860a472e8ee099a7fe0c47a89ca7a9efac747d55
4
- data.tar.gz: 274abd1b5e39129a011df5b5821440880152e1e4
3
+ metadata.gz: aeed51900ad2ffe7ba4fee9d657f48d8251b2f84
4
+ data.tar.gz: d06530ec00938070fc7ffd30557a87f8e8c6f0cd
5
5
  SHA512:
6
- metadata.gz: 617692a78f56e64883653099f14ad4659a27ba99149f77b42c038bd7f8aa7fcbd09f8bddc488c2dfd395ec1d2f419278204311c692a0048cdd1c80b5e68dc189
7
- data.tar.gz: 872e05a9264d6aab21f22572f809265032f7cfccf2e356a322a5fa82fb3794cfc52bde94f4e0588e01c8498a8fe4c4289482cc2cbcd2beea31bbb997fb67fd8c
6
+ metadata.gz: cec350b1668f401b1303d31235d13fb2712aab436252188125caaeff89ae31db6933a6b3e74696ec05f0bd8e8d930015a00691f892470532deb16aa5b2579446
7
+ data.tar.gz: fb2eb08b26b90a3ea1d510276b777b3b4faf065bf8407e6094e868e70a0a7d3ce27d7676b15190053f5852aff3116429b0550c33e0350a13ca88859dbb8b8979
@@ -0,0 +1,48 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.3
3
+ DisplayCopNames: true
4
+
5
+ PercentLiteralDelimiters:
6
+ PreferredDelimiters:
7
+ '%': ()
8
+ '%i': ()
9
+ '%q': ()
10
+ '%Q': ()
11
+ '%r': ()
12
+ '%s': ()
13
+ '%w': ()
14
+ '%W': ()
15
+ '%x': ()
16
+
17
+ Metrics/BlockLength:
18
+ Enabled: false
19
+
20
+ Metrics/LineLength:
21
+ Max: 128
22
+
23
+ Metrics/ClassLength:
24
+ Enabled: false
25
+
26
+ Metrics/MethodLength:
27
+ Enabled: false
28
+
29
+ Style/IfUnlessModifier:
30
+ Enabled: false
31
+
32
+ Style/GuardClause:
33
+ Enabled: false
34
+
35
+ Layout/AlignArray:
36
+ Enabled: false
37
+
38
+ Layout/AlignHash:
39
+ Enabled: false
40
+
41
+ Layout/AlignParameters:
42
+ Enabled: false
43
+
44
+ Lint/RescueWithoutErrorClass:
45
+ Enabled: false
46
+
47
+ Naming/HeredocDelimiterNaming:
48
+ Enabled: false
@@ -1,9 +1,6 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.0
5
- - 2.1
6
- - 2.2
7
4
  - 2.3
8
5
  - 2.4
9
6
  - ruby-head
data/Gemfile CHANGED
@@ -1,6 +1,8 @@
1
- source "https://rubygems.org"
1
+ # frozen_string_literal: true
2
2
 
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
3
+ source 'https://rubygems.org'
4
+
5
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
6
 
5
7
  # Specify your gem's dependencies in rasteira.gemspec
6
8
  gemspec
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
3
5
 
4
6
  RSpec::Core::RakeTask.new(:spec)
5
7
 
6
- task :default => :spec
8
+ task default: :spec
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require "bundler/setup"
4
- require "rasteira"
4
+ require 'bundler/setup'
5
+ require 'rasteira'
5
6
 
6
7
  # You can add fixtures and/or initialization code here to make experimenting
7
8
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +11,5 @@ require "rasteira"
10
11
  # require "pry"
11
12
  # Pry.start
12
13
 
13
- require "irb"
14
+ require 'irb'
14
15
  IRB.start(__FILE__)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # To test with bin/console, execute like this:
2
4
  #
3
5
  # 2.4.0 :001 > m = Rasteira::EmbedWorker::Manager.run
@@ -1,6 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rasteira/version'
2
4
  require 'rasteira/core/job'
3
5
  require 'rasteira/embed_worker/manager'
4
6
 
7
+ # Top module of rasteira
5
8
  module Rasteira
6
9
  end
@@ -1,7 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Rasteira
2
4
  module Core
5
+ # Job class that is executed by rasteira.
3
6
  class Job
4
- attr_reader :worker_name, :worker_file_path, :args, :status
7
+ attr_reader :worker_class, :worker_file_path, :args, :status
5
8
 
6
9
  STATUSES = {
7
10
  ready: 0,
@@ -10,21 +13,29 @@ module Rasteira
10
13
  failed: 3
11
14
  }.freeze
12
15
 
13
- def initialize(worker_name, options = {})
14
- if !options[:worker_file_path].nil?
16
+ # The constructor of Rasteira::Core::Job
17
+ # @param [String, Class] worker_class The name or class of worker class or
18
+ # @param [Hash] options
19
+ # @option options [String] :worker_file_path The file path of worker_class.
20
+ # If worker_file_path is set, Rasteira tries to load worker_class from worker_file_path
21
+ # @option options [String] :current_directory The root path of worker_file_path.
22
+ # If current_directory and worker_file_path are set, Rasteira searches worker_file_path
23
+ # with current_directory as current directory.
24
+ def initialize(worker_class, options = {})
25
+ unless options[:worker_file_path].nil?
15
26
  @worker_file_path = File.expand_path(options[:worker_file_path], options[:current_directory] || Dir.pwd)
16
- unless File.exists?(@worker_file_path)
17
- raise ArgumentError.new("#{@worker_file_path} could not be found")
27
+ unless File.exist?(@worker_file_path)
28
+ raise ArgumentError, "#{@worker_file_path} could not be found"
18
29
  end
19
30
 
20
31
  require(@worker_file_path)
21
32
  end
22
33
 
23
- @worker_name = worker_name
34
+ @worker_class = worker_class
24
35
  @args = options[:args]
25
36
  @status = STATUSES[:ready]
26
37
  end
27
-
38
+
28
39
  def start!
29
40
  @status = STATUSES[:in_process]
30
41
  begin
@@ -35,9 +46,13 @@ module Rasteira
35
46
  raise e
36
47
  end
37
48
  end
38
-
49
+
39
50
  def worker
40
- @worker ||= Object.const_get("::#{@worker_name}").new
51
+ @worker ||= if @worker_class.is_a?(String)
52
+ Object.const_get("::#{@worker_class}").new
53
+ else
54
+ @worker_class.new
55
+ end
41
56
  end
42
57
  end
43
58
  end
@@ -1,14 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Rasteira
2
4
  module EmbedWorker
5
+ # Manager class that manages the thread pool and executes jobs.
3
6
  class Manager
4
7
  attr_reader :job_pool
5
8
 
6
9
  def initialize
7
- @job_pool = Array.new
8
- @thread_pool = Array.new
10
+ @job_pool = []
11
+ @thread_pool = []
9
12
  @mutex = Mutex.new
10
13
  end
11
-
14
+
12
15
  # Create manager instance and run
13
16
  # @return [Rasteira::EmbedWorker::Manager] an instance of a running manager
14
17
  def self.run
@@ -17,21 +20,21 @@ module Rasteira
17
20
  this
18
21
  end
19
22
 
20
- # TODO to be specifiable
23
+ # TODO: to be specifiable
21
24
  MIN_THREAD_SIZE = 5
22
25
 
23
26
  # Create thread pool and start all threads
24
27
  # @return [nil]
25
28
  def run
26
- @thread_pool = MIN_THREAD_SIZE.times.map do
29
+ @thread_pool = Array.new(MIN_THREAD_SIZE).map do
27
30
  Thread.start { worker_thread_process }
28
31
  end
29
-
32
+
30
33
  @thread_manager = Thread.start do
31
34
  loop do
32
35
  @mutex.synchronize do
33
- @thread_pool.reject! { |thread| !thread.alive? }
34
-
36
+ @thread_pool.select!(&:alive?)
37
+
35
38
  (@thread_pool.size...MIN_THREAD_SIZE).each do
36
39
  @thread_pool << Thread.start { worker_thread_process }
37
40
  end
@@ -54,14 +57,14 @@ module Rasteira
54
57
  @job_pool << ::Rasteira::Core::Job.new(worker_name, options)
55
58
  end
56
59
  end
57
-
60
+
58
61
  # Kill all worker threads
59
62
  # @return nil
60
63
  def shutdown_workers!
61
64
  @thread_pool.each(&:kill)
62
65
  @thread_manager.kill
63
66
  end
64
-
67
+
65
68
  # Return current worker threads id and status hashes
66
69
  # @return [Array<Hash>]
67
70
  def worker_statuses
@@ -69,7 +72,7 @@ module Rasteira
69
72
  { id: thread.object_id, status: thread.status }
70
73
  end
71
74
  end
72
-
75
+
73
76
  private
74
77
 
75
78
  def worker_thread_process
@@ -85,7 +88,7 @@ module Rasteira
85
88
  sleep(3)
86
89
  end
87
90
  rescue => e
88
- # TODO logging
91
+ # TODO: logging
89
92
  puts e.inspect
90
93
  end
91
94
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Rasteira
2
- VERSION = '0.1.1'
4
+ VERSION = '0.1.2'
3
5
  end
@@ -1,4 +1,6 @@
1
- # coding: utf-8
1
+
2
+ # frozen_string_literal: true
3
+
2
4
  lib = File.expand_path('../lib', __FILE__)
3
5
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
6
  require 'rasteira/version'
@@ -18,11 +20,13 @@ Gem::Specification.new do |spec|
18
20
  f.match(%r{^(test|spec|features)/})
19
21
  end
20
22
  spec.bindir = 'exe'
21
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
+ spec.executables = spec.files.grep(%r(^exe/)) { |f| File.basename(f) }
22
24
  spec.require_paths = ['lib']
25
+ spec.required_ruby_version = '>= 2.3'
23
26
 
24
27
  spec.add_development_dependency 'bundler', '~> 1.15'
25
28
  spec.add_development_dependency 'rake', '~> 10.0'
26
29
  spec.add_development_dependency 'rspec', '~> 3.0'
30
+ spec.add_development_dependency 'rubocop'
27
31
  spec.add_development_dependency 'yard'
28
32
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rasteira
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
  - Kazuhiro Serizawa
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-11-25 00:00:00.000000000 Z
11
+ date: 2017-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: yard
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -75,6 +89,7 @@ extra_rdoc_files: []
75
89
  files:
76
90
  - ".gitignore"
77
91
  - ".rspec"
92
+ - ".rubocop.yml"
78
93
  - ".ruby-version"
79
94
  - ".travis.yml"
80
95
  - CODE_OF_CONDUCT.md
@@ -102,7 +117,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
102
117
  requirements:
103
118
  - - ">="
104
119
  - !ruby/object:Gem::Version
105
- version: '0'
120
+ version: '2.3'
106
121
  required_rubygems_version: !ruby/object:Gem::Requirement
107
122
  requirements:
108
123
  - - ">="