rasteira 0.1.0 → 0.1.1

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