rasteira 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
  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
  - - ">="