rasteira 0.1.0 → 0.1.1

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: 16b463d33f2b21c137a649b55da3bd8df4be259e
4
- data.tar.gz: d9c353cbe174e9ede5a5c927f9671ddf0273c23e
3
+ metadata.gz: 860a472e8ee099a7fe0c47a89ca7a9efac747d55
4
+ data.tar.gz: 274abd1b5e39129a011df5b5821440880152e1e4
5
5
  SHA512:
6
- metadata.gz: 0a47ffd160905a5da8df674662a1e4721edc6767218bd44b173f3a62e5fdb264b529311230b3929d7f67e606c11f2fadace4fe89e9f6a4bc507e9a33ef0a6f42
7
- data.tar.gz: f5734c5c5841e68a3909979d5f8ac9332fca7f3e691df3570c935ff45e55a81c68111cf2c605d56ebf1e94553691f3a6ed0a8d39a1b785e0cbc605fd97fc073a
6
+ metadata.gz: 617692a78f56e64883653099f14ad4659a27ba99149f77b42c038bd7f8aa7fcbd09f8bddc488c2dfd395ec1d2f419278204311c692a0048cdd1c80b5e68dc189
7
+ data.tar.gz: 872e05a9264d6aab21f22572f809265032f7cfccf2e356a322a5fa82fb3794cfc52bde94f4e0588e01c8498a8fe4c4289482cc2cbcd2beea31bbb997fb67fd8c
data/README.md CHANGED
@@ -1,4 +1,5 @@
1
1
  [![Build Status](https://travis-ci.org/serihiro/rasteira.svg?branch=master)](https://travis-ci.org/serihiro/rasteira)
2
+ [![Gem Version](https://badge.fury.io/rb/rasteira.svg)](https://badge.fury.io/rb/rasteira)
2
3
 
3
4
  # Rasteira
4
5
 
@@ -41,7 +42,7 @@ And start Embed Worker Manager and enqueue a job.
41
42
 
42
43
  ```ruby
43
44
  manager = Rasteira::EmbedWorker::Manager.run
44
- manager.enqueue_job!('HelloWorker', 'example/hello_worker.rb', 'serihiro')
45
+ manager.enqueue_job!('HelloWorker', worker_file_path: 'example/hello_worker.rb', args: ['serihiro', 'hogetarou'])
45
46
  ```
46
47
 
47
48
  ## Development
@@ -1,10 +1,16 @@
1
1
  # To test with bin/console, execute like this:
2
2
  #
3
3
  # 2.4.0 :001 > m = Rasteira::EmbedWorker::Manager.run
4
- # 2.4.0 :002 > m.enqueue_job!('HelloWorker', 'example/hello_worker.rb', 'serihiro')
4
+ # 2.4.0 :002 > m.enqueue_job!('HelloWorker', worker_file_path: 'example/hello_worker.rb', args: ['serihiro', 'hogetarou'])
5
+ #
6
+ # OR
7
+ #
8
+ # 2.4.0 :001 > m = Rasteira::EmbedWorker::Manager.run
9
+ # 2.4.0 :002 > require './example/hello_worker.rb'
10
+ # 2.4.0 :003 > m.enqueue_job!('HelloWorker', args: ['serihiro', 'hogetarou'])
5
11
  #
6
12
  class HelloWorker
7
- def perform(name)
8
- puts "Hello, #{name}"
13
+ def perform(name1, name2)
14
+ puts "Hello, #{name1}, #{name2}"
9
15
  end
10
16
  end
@@ -2,23 +2,26 @@ module Rasteira
2
2
  module Core
3
3
  class Job
4
4
  attr_reader :worker_name, :worker_file_path, :args, :status
5
-
5
+
6
6
  STATUSES = {
7
7
  ready: 0,
8
8
  in_process: 1,
9
9
  finished: 2,
10
10
  failed: 3
11
11
  }.freeze
12
-
13
- def initialize(worker_name, worker_file_path, *args)
14
- @worker_file_path = File.expand_path(worker_file_path, Dir.pwd)
15
- unless File.exists?(@worker_file_path)
16
- raise ArgumentError.new("#{@worker_file_path} could not be found")
12
+
13
+ def initialize(worker_name, options = {})
14
+ if !options[:worker_file_path].nil?
15
+ @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")
18
+ end
19
+
20
+ require(@worker_file_path)
17
21
  end
18
-
19
- require(@worker_file_path)
22
+
20
23
  @worker_name = worker_name
21
- @args = args
24
+ @args = options[:args]
22
25
  @status = STATUSES[:ready]
23
26
  end
24
27
 
@@ -9,6 +9,8 @@ module Rasteira
9
9
  @mutex = Mutex.new
10
10
  end
11
11
 
12
+ # Create manager instance and run
13
+ # @return [Rasteira::EmbedWorker::Manager] an instance of a running manager
12
14
  def self.run
13
15
  this = new
14
16
  this.run
@@ -18,6 +20,8 @@ module Rasteira
18
20
  # TODO to be specifiable
19
21
  MIN_THREAD_SIZE = 5
20
22
 
23
+ # Create thread pool and start all threads
24
+ # @return [nil]
21
25
  def run
22
26
  @thread_pool = MIN_THREAD_SIZE.times.map do
23
27
  Thread.start { worker_thread_process }
@@ -38,17 +42,28 @@ module Rasteira
38
42
  end
39
43
  end
40
44
 
41
- def enqueue_job!(worker_name, worker_file_path, *args)
45
+ # Enqueue new job
46
+ # @param [String] worker_name the name of worker class
47
+ # @param [Hash] options
48
+ # @option options [String] :worker_file_path the file path of worker script
49
+ # @option options [String] :current_directory the directory where you want to handle as a current directory
50
+ # @option options [Object] :args the arguments for the perform method in the worker class
51
+ # @return [Rasteira::Core::Job] job created job
52
+ def enqueue_job!(worker_name, options = {})
42
53
  @mutex.synchronize do
43
- @job_pool << ::Rasteira::Core::Job.new(worker_name, worker_file_path, *args)
54
+ @job_pool << ::Rasteira::Core::Job.new(worker_name, options)
44
55
  end
45
56
  end
46
57
 
58
+ # Kill all worker threads
59
+ # @return nil
47
60
  def shutdown_workers!
48
61
  @thread_pool.each(&:kill)
49
62
  @thread_manager.kill
50
63
  end
51
64
 
65
+ # Return current worker threads id and status hashes
66
+ # @return [Array<Hash>]
52
67
  def worker_statuses
53
68
  @thread_pool.map do |thread|
54
69
  { id: thread.object_id, status: thread.status }
@@ -1,3 +1,3 @@
1
1
  module Rasteira
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.1'
3
3
  end
@@ -24,4 +24,5 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency 'bundler', '~> 1.15'
25
25
  spec.add_development_dependency 'rake', '~> 10.0'
26
26
  spec.add_development_dependency 'rspec', '~> 3.0'
27
+ spec.add_development_dependency 'yard'
27
28
  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.0
4
+ version: 0.1.1
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-06 00:00:00.000000000 Z
11
+ date: 2017-11-25 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: yard
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
  description: simple, on memory, and thread base job queue worker
56
70
  email:
57
71
  - nserihiro@gmail.com