qwirk 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (154) hide show
  1. data/History.md +7 -0
  2. data/LICENSE.txt +201 -0
  3. data/README.md +180 -0
  4. data/Rakefile +34 -0
  5. data/examples/README +1 -0
  6. data/examples/activemq.xml +84 -0
  7. data/examples/advanced_requestor/README.md +15 -0
  8. data/examples/advanced_requestor/base_request_worker.rb +18 -0
  9. data/examples/advanced_requestor/char_count_worker.rb +16 -0
  10. data/examples/advanced_requestor/config.ru +24 -0
  11. data/examples/advanced_requestor/exception_raiser_worker.rb +17 -0
  12. data/examples/advanced_requestor/length_worker.rb +14 -0
  13. data/examples/advanced_requestor/print_worker.rb +14 -0
  14. data/examples/advanced_requestor/publisher.rb +49 -0
  15. data/examples/advanced_requestor/qwirk.yml +16 -0
  16. data/examples/advanced_requestor/reverse_worker.rb +14 -0
  17. data/examples/advanced_requestor/triple_worker.rb +14 -0
  18. data/examples/batch/my_batch_worker.rb +30 -0
  19. data/examples/batch/my_line_worker.rb +8 -0
  20. data/examples/qwirk.yml +20 -0
  21. data/examples/requestor/README.md +13 -0
  22. data/examples/requestor/config.ru +13 -0
  23. data/examples/requestor/qwirk_persist.yml +5 -0
  24. data/examples/requestor/requestor.rb +68 -0
  25. data/examples/requestor/reverse_echo_worker.rb +15 -0
  26. data/examples/setup.rb +13 -0
  27. data/examples/shared/README.md +24 -0
  28. data/examples/shared/config.ru +13 -0
  29. data/examples/shared/publisher.rb +49 -0
  30. data/examples/shared/qwirk_persist.yml +5 -0
  31. data/examples/shared/shared_worker.rb +16 -0
  32. data/examples/simple/README +53 -0
  33. data/examples/simple/bar_worker.rb +10 -0
  34. data/examples/simple/baz_worker.rb +10 -0
  35. data/examples/simple/config.ru +14 -0
  36. data/examples/simple/publisher.rb +49 -0
  37. data/examples/simple/qwirk_persist.yml +4 -0
  38. data/examples/simple/tmp/kahadb/db-1.log +0 -0
  39. data/examples/simple/tmp/kahadb/db.data +0 -0
  40. data/examples/simple/tmp/kahadb/db.redo +0 -0
  41. data/examples/task/README +47 -0
  42. data/examples/task/config.ru +14 -0
  43. data/examples/task/foo_worker.rb +10 -0
  44. data/examples/task/messages.out +1000 -0
  45. data/examples/task/publisher.rb +25 -0
  46. data/examples/task/qwirk_persist.yml +5 -0
  47. data/examples/task/task.rb +36 -0
  48. data/lib/qwirk.rb +63 -0
  49. data/lib/qwirk/adapter.rb +45 -0
  50. data/lib/qwirk/base_worker.rb +96 -0
  51. data/lib/qwirk/batch.rb +4 -0
  52. data/lib/qwirk/batch/acquire_file_strategy.rb +47 -0
  53. data/lib/qwirk/batch/active_record.rb +3 -0
  54. data/lib/qwirk/batch/active_record/batch_job.rb +111 -0
  55. data/lib/qwirk/batch/active_record/failed_record.rb +5 -0
  56. data/lib/qwirk/batch/active_record/outstanding_record.rb +6 -0
  57. data/lib/qwirk/batch/file_status_strategy.rb +86 -0
  58. data/lib/qwirk/batch/file_worker.rb +228 -0
  59. data/lib/qwirk/batch/job_status.rb +29 -0
  60. data/lib/qwirk/batch/parse_file_strategy.rb +48 -0
  61. data/lib/qwirk/engine.rb +9 -0
  62. data/lib/qwirk/loggable.rb +23 -0
  63. data/lib/qwirk/manager.rb +140 -0
  64. data/lib/qwirk/marshal_strategy.rb +74 -0
  65. data/lib/qwirk/marshal_strategy/bson.rb +37 -0
  66. data/lib/qwirk/marshal_strategy/json.rb +37 -0
  67. data/lib/qwirk/marshal_strategy/none.rb +26 -0
  68. data/lib/qwirk/marshal_strategy/ruby.rb +26 -0
  69. data/lib/qwirk/marshal_strategy/string.rb +25 -0
  70. data/lib/qwirk/marshal_strategy/yaml.rb +25 -0
  71. data/lib/qwirk/publish_handle.rb +170 -0
  72. data/lib/qwirk/publisher.rb +67 -0
  73. data/lib/qwirk/queue_adapter.rb +3 -0
  74. data/lib/qwirk/queue_adapter/active_mq.rb +13 -0
  75. data/lib/qwirk/queue_adapter/active_mq/publisher.rb +12 -0
  76. data/lib/qwirk/queue_adapter/active_mq/worker_config.rb +16 -0
  77. data/lib/qwirk/queue_adapter/in_mem.rb +7 -0
  78. data/lib/qwirk/queue_adapter/in_mem/factory.rb +45 -0
  79. data/lib/qwirk/queue_adapter/in_mem/publisher.rb +98 -0
  80. data/lib/qwirk/queue_adapter/in_mem/queue.rb +88 -0
  81. data/lib/qwirk/queue_adapter/in_mem/reply_queue.rb +56 -0
  82. data/lib/qwirk/queue_adapter/in_mem/topic.rb +48 -0
  83. data/lib/qwirk/queue_adapter/in_mem/worker.rb +63 -0
  84. data/lib/qwirk/queue_adapter/in_mem/worker_config.rb +59 -0
  85. data/lib/qwirk/queue_adapter/jms.rb +50 -0
  86. data/lib/qwirk/queue_adapter/jms/connection.rb +42 -0
  87. data/lib/qwirk/queue_adapter/jms/consumer.rb +37 -0
  88. data/lib/qwirk/queue_adapter/jms/publisher.rb +126 -0
  89. data/lib/qwirk/queue_adapter/jms/worker.rb +89 -0
  90. data/lib/qwirk/queue_adapter/jms/worker_config.rb +38 -0
  91. data/lib/qwirk/remote_exception.rb +42 -0
  92. data/lib/qwirk/request_worker.rb +62 -0
  93. data/lib/qwirk/task.rb +177 -0
  94. data/lib/qwirk/task.rb.sav +194 -0
  95. data/lib/qwirk/version.rb +3 -0
  96. data/lib/qwirk/worker.rb +222 -0
  97. data/lib/qwirk/worker_config.rb +187 -0
  98. data/lib/rails/generators/qwirk/qwirk_generator.rb +82 -0
  99. data/lib/rails/generators/qwirk/templates/initializer.rb +6 -0
  100. data/lib/rails/generators/qwirk/templates/migration.rb +9 -0
  101. data/lib/rails/generators/qwirk/templates/schema.rb +28 -0
  102. data/lib/rails/railties/tasks.rake +8 -0
  103. data/lib/tasks/qwirk_tasks.rake +4 -0
  104. data/test/base_test.rb +248 -0
  105. data/test/database.yml +14 -0
  106. data/test/dummy/Rakefile +7 -0
  107. data/test/dummy/app/controllers/application_controller.rb +3 -0
  108. data/test/dummy/app/helpers/application_helper.rb +2 -0
  109. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  110. data/test/dummy/config.ru +4 -0
  111. data/test/dummy/config/application.rb +45 -0
  112. data/test/dummy/config/boot.rb +10 -0
  113. data/test/dummy/config/database.yml +22 -0
  114. data/test/dummy/config/environment.rb +5 -0
  115. data/test/dummy/config/environments/development.rb +26 -0
  116. data/test/dummy/config/environments/production.rb +49 -0
  117. data/test/dummy/config/environments/test.rb +35 -0
  118. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  119. data/test/dummy/config/initializers/inflections.rb +10 -0
  120. data/test/dummy/config/initializers/mime_types.rb +5 -0
  121. data/test/dummy/config/initializers/secret_token.rb +7 -0
  122. data/test/dummy/config/initializers/session_store.rb +8 -0
  123. data/test/dummy/config/locales/en.yml +5 -0
  124. data/test/dummy/config/routes.rb +58 -0
  125. data/test/dummy/log/development.log +0 -0
  126. data/test/dummy/log/production.log +0 -0
  127. data/test/dummy/log/server.log +0 -0
  128. data/test/dummy/log/test.log +0 -0
  129. data/test/dummy/public/404.html +26 -0
  130. data/test/dummy/public/422.html +26 -0
  131. data/test/dummy/public/500.html +26 -0
  132. data/test/dummy/public/favicon.ico +0 -0
  133. data/test/dummy/public/javascripts/application.js +2 -0
  134. data/test/dummy/public/javascripts/controls.js +965 -0
  135. data/test/dummy/public/javascripts/dragdrop.js +974 -0
  136. data/test/dummy/public/javascripts/effects.js +1123 -0
  137. data/test/dummy/public/javascripts/prototype.js +6001 -0
  138. data/test/dummy/public/javascripts/rails.js +191 -0
  139. data/test/dummy/script/rails +6 -0
  140. data/test/integration/navigation_test.rb +7 -0
  141. data/test/jms.yml +9 -0
  142. data/test/jms_fail_test.rb +149 -0
  143. data/test/jms_requestor_block_test.rb +278 -0
  144. data/test/jms_requestor_test.rb +238 -0
  145. data/test/jms_test.rb +287 -0
  146. data/test/marshal_strategy_test.rb +62 -0
  147. data/test/support/integration_case.rb +5 -0
  148. data/test/test_helper.rb +7 -0
  149. data/test/test_helper.rbold +22 -0
  150. data/test/test_helper_active_record.rb +61 -0
  151. data/test/unit/qwirk/batch/acquire_file_strategy_test.rb +101 -0
  152. data/test/unit/qwirk/batch/active_record/batch_job_test.rb +35 -0
  153. data/test/unit/qwirk/batch/parse_file_strategy_test.rb +49 -0
  154. metadata +366 -0
@@ -0,0 +1,62 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+ require 'qwirk'
5
+
6
+ class Klass
7
+ def initialize(str)
8
+ @str = str
9
+ end
10
+ def hello
11
+ @str
12
+ end
13
+ end
14
+
15
+ module SpockMarshalStrategy
16
+ def self.marshal_type
17
+ :text
18
+ end
19
+
20
+ def self.to_sym
21
+ :spock
22
+ end
23
+
24
+ # Change days to hours
25
+ def self.marshal(i)
26
+ (i.to_i * 24).to_s
27
+ end
28
+
29
+ # Change hours to days
30
+ def self.unmarshal(str)
31
+ str.to_i / 24
32
+ end
33
+ end
34
+
35
+ class MarshalStrategyTest < Test::Unit::TestCase
36
+ context '' do
37
+ setup do
38
+ Qwirk::MarshalStrategy.register(SpockMarshalStrategy)
39
+
40
+ @bson = Qwirk::MarshalStrategy.find(:bson)
41
+ @json = Qwirk::MarshalStrategy.find(:json)
42
+ @ruby = Qwirk::MarshalStrategy.find(:ruby)
43
+ @string = Qwirk::MarshalStrategy.find(:string)
44
+ @yaml = Qwirk::MarshalStrategy.find(:yaml)
45
+ @spock = Qwirk::MarshalStrategy.find(:spock)
46
+ end
47
+
48
+ should 'marshal and unmarshal correctly' do
49
+ hash = {'foo' => 42, 'bar' => 'zulu'}
50
+ str = 'abcdef1234'
51
+ obj = Klass.new('hello')
52
+ i = 6
53
+ assert_equal hash, @bson.unmarshal(@bson.marshal(hash))
54
+ assert_equal hash, @json.unmarshal(@json.marshal(hash))
55
+ assert_equal hash, @ruby.unmarshal(@ruby.marshal(hash))
56
+ assert_equal hash, @yaml.unmarshal(@yaml.marshal(hash))
57
+ assert_equal str, @string.unmarshal(@string.marshal(str))
58
+ assert_equal obj.hello, @ruby.unmarshal(@ruby.marshal(obj)).hello
59
+ assert_equal i, @spock.unmarshal(@spock.marshal(i))
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,5 @@
1
+ # Define a bare test case to use with Capybara
2
+ class ActiveSupport::IntegrationCase < ActiveSupport::TestCase
3
+ include Capybara
4
+ include Rails.application.routes.url_helpers
5
+ end
@@ -0,0 +1,7 @@
1
+ ENV["RAILS_ENV"] = "test"
2
+
3
+ require 'java'
4
+ require 'rubygems'
5
+ require 'test/unit'
6
+ require 'shoulda'
7
+ require 'qwirk'
@@ -0,0 +1,22 @@
1
+ # Configure Rails Envinronment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
+ require "rails/test_help"
6
+
7
+ ActionMailer::Base.delivery_method = :test
8
+ ActionMailer::Base.perform_deliveries = true
9
+ ActionMailer::Base.default_url_options[:host] = "test.com"
10
+
11
+ Rails.backtrace_cleaner.remove_silencers!
12
+
13
+ # Configure capybara for integration testing
14
+ require "capybara/rails"
15
+ Capybara.default_driver = :rack_test
16
+ Capybara.default_selector = :css
17
+
18
+ # Run any available migration
19
+ ActiveRecord::Migrator.migrate File.expand_path("../dummy/db/migrate/", __FILE__)
20
+
21
+ # Load support files
22
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
@@ -0,0 +1,61 @@
1
+ require 'test_helper'
2
+ require 'yaml'
3
+ require 'active_record'
4
+ #require 'jdbc/sqlite3'
5
+ require 'arjdbc/mysql'
6
+
7
+ #require 'app/models/cheese/widget.rb'
8
+
9
+ #def cheese_widget( fixture_name )
10
+ # id = @@fixtures['cheese_widget'][ fixture_name.to_s ][ 'id' ]
11
+ # Cheese::Widget.find( id )
12
+ #end
13
+
14
+ def load_schema
15
+ config = YAML::load( IO.read( File.dirname(__FILE__) + '/database.yml') )
16
+
17
+ # Manually initialize the database
18
+ #conn = Jdbc::MySQL.real_connect( config['mysql']['host'], config['mysql']['username'], config['mysql']['password'] )
19
+ #conn = JDBC::DB.new(:mysql, config['mysql']['host'], 3306, config['mysql']['username'], config['mysql']['password'] )
20
+ # conn = ActiveRecord::Base.mysql_connection( config['mysql'] )
21
+ # conn.execute( "CREATE DATABASE IF NOT EXISTS #{config['mysql'][:database]}" )
22
+ # conn.execute("use #{config['mysql'][:database]}")
23
+ # conn = ActiveRecord::Base.mysql_connection( config['mysql'] )
24
+
25
+ # sqlite3 causes java(23973,0x111804000) malloc: *** error for object 0x1001377a0: pointer being freed was not allocated
26
+ ActiveRecord::Base.establish_connection( config['mysql'] )
27
+ ActiveRecord::Base.connection()
28
+
29
+ load(File.dirname(__FILE__) + "/../lib/rails/generators/qwirk/templates/schema.rb")
30
+
31
+ @@fixtures = {}
32
+
33
+ #load_fixture( 'cheese_widget' )
34
+ end
35
+
36
+ def load_fixture( table )
37
+ @@fixtures[ table ] = {}
38
+ fixture = YAML::load( IO.read( File.dirname(__FILE__) + "/fixtures/#{table}.yml") )
39
+ @@fixtures[ table ] = fixture
40
+
41
+ klass = class_eval table.titleize.gsub(/ /, '::')
42
+
43
+ fixture.each do |record_name, record|
44
+ record.each do |column, value|
45
+ if ( match = column.match(/(.*)_id/) )
46
+ fixture_reference = "cheese_" + match[1].pluralize
47
+ if value.is_a? Symbol
48
+ r = class_eval "#{fixture_reference}( '#{value}' )"
49
+ record[ column ] = r.id
50
+ end
51
+ end
52
+ end
53
+
54
+ r = klass.create( record )
55
+ @@fixtures[ table ][ record_name ][ 'id' ] = r.id
56
+ end
57
+
58
+ end
59
+
60
+ Qwirk::Batch::FileWorker.default_file_status_strategy = :active_record
61
+ load_schema
@@ -0,0 +1,101 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+ require 'qwirk'
5
+ require 'fileutils'
6
+ require 'tempfile'
7
+
8
+ class AcquireFileStrategyTest < Test::Unit::TestCase
9
+ def perform_after(duration)
10
+ Thread.new do
11
+ sleep duration.to_f
12
+ yield
13
+ end
14
+ end
15
+
16
+ def assert_duration(expected_duration, actual_duration, threshold = 0.3)
17
+ msg = "duration #{actual_duration} does not fall between #{expected_duration.to_f - threshold} and #{expected_duration.to_f + threshold}"
18
+ assert (expected_duration.to_f - threshold) <= actual_duration.to_f && actual_duration.to_f <= (expected_duration.to_f + threshold), msg
19
+ end
20
+
21
+ context '' do
22
+ setup do
23
+ @dir = Dir.mktmpdir
24
+ end
25
+
26
+ teardown do
27
+ #FileUtils.remove_entry_secure @dir
28
+ end
29
+
30
+ should 'allow stop to abort sleep' do
31
+ acquire_file_strategy = Qwirk::Batch::AcquireFileStrategy.new(:glob => "#{@dir}/*", :poll_time => 10)
32
+ perform_after(3) { acquire_file_strategy.stop }
33
+ secs = Benchmark.realtime do
34
+ file = acquire_file_strategy.acquire_file
35
+ assert_nil file
36
+ end
37
+ assert_duration(3, secs)
38
+ end
39
+
40
+ should 'acquire files when they become available' do
41
+ acquire_file_strategy = Qwirk::Batch::AcquireFileStrategy.new(:glob => "#{@dir}/*", :poll_time => 0.2, :age => 3)
42
+ file1 = "#{@dir}/file1"
43
+ file2 = "#{@dir}/file2"
44
+ perform_after(2) { FileUtils.touch [file1, file2] }
45
+ file = nil # scope it
46
+ secs = Benchmark.realtime do
47
+ file = acquire_file_strategy.acquire_file
48
+ assert_equal "#{file1}.processing", file
49
+ assert !File.exists?(file1)
50
+ assert File.exists?(file)
51
+ end
52
+
53
+ assert_duration(2+3, secs, 1)
54
+ file = acquire_file_strategy.complete_file(file)
55
+ assert_equal "#{file1}.completed", file
56
+ assert !File.exists?("#{file1}.processing")
57
+ assert File.exists?(file)
58
+
59
+ secs = Benchmark.realtime do
60
+ file = acquire_file_strategy.acquire_file
61
+ assert_equal "#{file2}.processing", file
62
+ assert !File.exists?(file2)
63
+ assert File.exists?(file)
64
+ end
65
+ assert_duration(0, secs)
66
+ file = acquire_file_strategy.complete_file(file)
67
+ assert_equal "#{file2}.completed", file
68
+ assert !File.exists?("#{file2}.processing")
69
+ assert File.exists?(file)
70
+ end
71
+
72
+ should 'handle contention with only one thread acquiring each file' do
73
+ acquire_file_strategy = Qwirk::Batch::AcquireFileStrategy.new(:glob => "#{@dir}/*", :poll_time => 0.0, :age => 0)
74
+ mutex = Mutex.new
75
+ # 10 of the 100 threads should acquire a file
76
+ files = (0..9).map {|i| "#{@dir}/foo#{i}"}
77
+ acquire_counts = Array.new(10, 0)
78
+ nil_count = 0
79
+ threads = (0..99).map do |i|
80
+ Thread.new do
81
+ file = acquire_file_strategy.acquire_file
82
+ mutex.synchronize do
83
+ if file
84
+ files.each_index do |i|
85
+ acquire_counts[i] += 1 if file == "#{files[i]}.processing"
86
+ end
87
+ else
88
+ nil_count += 1
89
+ end
90
+ end
91
+ end
92
+ end
93
+ FileUtils.touch(files)
94
+ sleep 2
95
+ acquire_file_strategy.stop
96
+ threads.each {|t| t.join}
97
+ (0..9).each {|i| assert_equal 1, acquire_counts[i], "Index #{i} has count of #{acquire_counts[i]}"}
98
+ assert_equal 90, nil_count
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,35 @@
1
+ require 'test_helper_active_record'
2
+
3
+ class AcquireFileStrategyTest < Test::Unit::TestCase
4
+ include Qwirk::Batch::JobStatus
5
+
6
+ context 'BatchJob' do
7
+ setup do
8
+ @file_name = 'file'
9
+ @worker_name = 'worker'
10
+ @batch_job = Qwirk::Batch::ActiveRecord::BatchJob.acquire(@file_name, @worker_name)
11
+ end
12
+
13
+ teardown do
14
+ @batch_job.destroy
15
+ end
16
+
17
+ should 'handle state changes correctly' do
18
+ assert_equal INITED, @batch_job.status
19
+ assert_nil Qwirk::Batch::ActiveRecord::BatchJob.acquire(@file_name, @worker_name)
20
+ assert_nil Qwirk::Batch::ActiveRecord::BatchJob.resume_paused_job(@worker_name)
21
+ @batch_job.run(1000)
22
+ assert_equal RUNNING, @batch_job.status
23
+ assert_equal 1000, @batch_job.total_count
24
+ (0..4).each {|file_position| @batch_job.start_record(file_position) }
25
+ @batch_job.finish_record(1)
26
+ @batch_job.failed_record(2, 'Failed 2')
27
+ (5..9).each {|file_position| @batch_job.start_record(file_position) }
28
+ @batch_job.finish_record(4)
29
+ @batch_job.finish_record(5)
30
+ @batch_job.failed_record(7, 'Failed 7')
31
+ assert_equal [0, 3, 6, 8, 9], @batch_job.outstanding_array
32
+ assert_equal { 2 => 'Failed 2', 7 => 'Failed 7'}, @batch_job.failed_hash
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,49 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+ require 'qwirk'
5
+ require 'fileutils'
6
+ require 'tempfile'
7
+
8
+ class ParseFileStrategyTest < Test::Unit::TestCase
9
+ context '' do
10
+ setup do
11
+ Tempfile.open('foo') do |tmp|
12
+ @tmp_path = tmp.path
13
+ (0..9).each {|i| tmp.puts(i.to_s)}
14
+ end
15
+ Tempfile.open('bar') do |tmp|
16
+ @tmp_path2 = tmp.path
17
+ (0..4).each {|i| tmp.puts((i+3).to_s)}
18
+ end
19
+ end
20
+
21
+ teardown do
22
+ FileUtils.rm [@tmp_path, @tmp_path2]
23
+ end
24
+
25
+ should 'parse a file correctly' do
26
+ parse_file_strategy = Qwirk::Batch::ParseFileStrategy.new({})
27
+ parse_file_strategy.open(@tmp_path)
28
+ assert_equal 10, parse_file_strategy.record_total
29
+ (0..9).each do |i|
30
+ assert_equal i, parse_file_strategy.file_position
31
+ assert_equal i, parse_file_strategy.next_record.to_i
32
+ end
33
+ [3, 6, 2, 7, 4, 1, 8].each do |i|
34
+ parse_file_strategy.file_position = i
35
+ assert_equal i, parse_file_strategy.file_position
36
+ assert_equal i, parse_file_strategy.next_record.to_i
37
+ end
38
+ parse_file_strategy.close
39
+
40
+ parse_file_strategy.open(@tmp_path2)
41
+ assert_equal 5, parse_file_strategy.record_total
42
+ (0..4).each do |i|
43
+ assert_equal i, parse_file_strategy.file_position
44
+ assert_equal i+3, parse_file_strategy.next_record.to_i
45
+ end
46
+ parse_file_strategy.close
47
+ end
48
+ end
49
+ end
metadata ADDED
@@ -0,0 +1,366 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: qwirk
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Brad Pardee
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-05-08 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rumx
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 0.2.2
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 0.2.2
30
+ - !ruby/object:Gem::Dependency
31
+ name: rack
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rdoc
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: bson
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: json
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: shoulda
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ description: Generic asynchronous task library
127
+ email:
128
+ - bradpardee@gmail.com
129
+ executables: []
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - examples/activemq.xml
134
+ - examples/advanced_requestor/base_request_worker.rb
135
+ - examples/advanced_requestor/char_count_worker.rb
136
+ - examples/advanced_requestor/config.ru
137
+ - examples/advanced_requestor/exception_raiser_worker.rb
138
+ - examples/advanced_requestor/length_worker.rb
139
+ - examples/advanced_requestor/print_worker.rb
140
+ - examples/advanced_requestor/publisher.rb
141
+ - examples/advanced_requestor/qwirk.yml
142
+ - examples/advanced_requestor/README.md
143
+ - examples/advanced_requestor/reverse_worker.rb
144
+ - examples/advanced_requestor/triple_worker.rb
145
+ - examples/batch/my_batch_worker.rb
146
+ - examples/batch/my_line_worker.rb
147
+ - examples/qwirk.yml
148
+ - examples/README
149
+ - examples/requestor/config.ru
150
+ - examples/requestor/qwirk_persist.yml
151
+ - examples/requestor/README.md
152
+ - examples/requestor/requestor.rb
153
+ - examples/requestor/reverse_echo_worker.rb
154
+ - examples/setup.rb
155
+ - examples/shared/config.ru
156
+ - examples/shared/publisher.rb
157
+ - examples/shared/qwirk_persist.yml
158
+ - examples/shared/README.md
159
+ - examples/shared/shared_worker.rb
160
+ - examples/simple/bar_worker.rb
161
+ - examples/simple/baz_worker.rb
162
+ - examples/simple/config.ru
163
+ - examples/simple/publisher.rb
164
+ - examples/simple/qwirk_persist.yml
165
+ - examples/simple/README
166
+ - examples/simple/tmp/kahadb/db-1.log
167
+ - examples/simple/tmp/kahadb/db.data
168
+ - examples/simple/tmp/kahadb/db.redo
169
+ - examples/task/config.ru
170
+ - examples/task/foo_worker.rb
171
+ - examples/task/messages.out
172
+ - examples/task/publisher.rb
173
+ - examples/task/qwirk_persist.yml
174
+ - examples/task/README
175
+ - examples/task/task.rb
176
+ - lib/qwirk/adapter.rb
177
+ - lib/qwirk/base_worker.rb
178
+ - lib/qwirk/batch/acquire_file_strategy.rb
179
+ - lib/qwirk/batch/active_record/batch_job.rb
180
+ - lib/qwirk/batch/active_record/failed_record.rb
181
+ - lib/qwirk/batch/active_record/outstanding_record.rb
182
+ - lib/qwirk/batch/active_record.rb
183
+ - lib/qwirk/batch/file_status_strategy.rb
184
+ - lib/qwirk/batch/file_worker.rb
185
+ - lib/qwirk/batch/job_status.rb
186
+ - lib/qwirk/batch/parse_file_strategy.rb
187
+ - lib/qwirk/batch.rb
188
+ - lib/qwirk/engine.rb
189
+ - lib/qwirk/loggable.rb
190
+ - lib/qwirk/manager.rb
191
+ - lib/qwirk/marshal_strategy/bson.rb
192
+ - lib/qwirk/marshal_strategy/json.rb
193
+ - lib/qwirk/marshal_strategy/none.rb
194
+ - lib/qwirk/marshal_strategy/ruby.rb
195
+ - lib/qwirk/marshal_strategy/string.rb
196
+ - lib/qwirk/marshal_strategy/yaml.rb
197
+ - lib/qwirk/marshal_strategy.rb
198
+ - lib/qwirk/publish_handle.rb
199
+ - lib/qwirk/publisher.rb
200
+ - lib/qwirk/queue_adapter/active_mq/publisher.rb
201
+ - lib/qwirk/queue_adapter/active_mq/worker_config.rb
202
+ - lib/qwirk/queue_adapter/active_mq.rb
203
+ - lib/qwirk/queue_adapter/in_mem/factory.rb
204
+ - lib/qwirk/queue_adapter/in_mem/publisher.rb
205
+ - lib/qwirk/queue_adapter/in_mem/queue.rb
206
+ - lib/qwirk/queue_adapter/in_mem/reply_queue.rb
207
+ - lib/qwirk/queue_adapter/in_mem/topic.rb
208
+ - lib/qwirk/queue_adapter/in_mem/worker.rb
209
+ - lib/qwirk/queue_adapter/in_mem/worker_config.rb
210
+ - lib/qwirk/queue_adapter/in_mem.rb
211
+ - lib/qwirk/queue_adapter/jms/connection.rb
212
+ - lib/qwirk/queue_adapter/jms/consumer.rb
213
+ - lib/qwirk/queue_adapter/jms/publisher.rb
214
+ - lib/qwirk/queue_adapter/jms/worker.rb
215
+ - lib/qwirk/queue_adapter/jms/worker_config.rb
216
+ - lib/qwirk/queue_adapter/jms.rb
217
+ - lib/qwirk/queue_adapter.rb
218
+ - lib/qwirk/remote_exception.rb
219
+ - lib/qwirk/request_worker.rb
220
+ - lib/qwirk/task.rb
221
+ - lib/qwirk/task.rb.sav
222
+ - lib/qwirk/version.rb
223
+ - lib/qwirk/worker.rb
224
+ - lib/qwirk/worker_config.rb
225
+ - lib/qwirk.rb
226
+ - lib/rails/generators/qwirk/qwirk_generator.rb
227
+ - lib/rails/generators/qwirk/templates/initializer.rb
228
+ - lib/rails/generators/qwirk/templates/migration.rb
229
+ - lib/rails/generators/qwirk/templates/schema.rb
230
+ - lib/rails/railties/tasks.rake
231
+ - lib/tasks/qwirk_tasks.rake
232
+ - LICENSE.txt
233
+ - Rakefile
234
+ - History.md
235
+ - README.md
236
+ - test/base_test.rb
237
+ - test/database.yml
238
+ - test/dummy/app/controllers/application_controller.rb
239
+ - test/dummy/app/helpers/application_helper.rb
240
+ - test/dummy/app/views/layouts/application.html.erb
241
+ - test/dummy/config/application.rb
242
+ - test/dummy/config/boot.rb
243
+ - test/dummy/config/database.yml
244
+ - test/dummy/config/environment.rb
245
+ - test/dummy/config/environments/development.rb
246
+ - test/dummy/config/environments/production.rb
247
+ - test/dummy/config/environments/test.rb
248
+ - test/dummy/config/initializers/backtrace_silencers.rb
249
+ - test/dummy/config/initializers/inflections.rb
250
+ - test/dummy/config/initializers/mime_types.rb
251
+ - test/dummy/config/initializers/secret_token.rb
252
+ - test/dummy/config/initializers/session_store.rb
253
+ - test/dummy/config/locales/en.yml
254
+ - test/dummy/config/routes.rb
255
+ - test/dummy/config.ru
256
+ - test/dummy/log/development.log
257
+ - test/dummy/log/production.log
258
+ - test/dummy/log/server.log
259
+ - test/dummy/log/test.log
260
+ - test/dummy/public/404.html
261
+ - test/dummy/public/422.html
262
+ - test/dummy/public/500.html
263
+ - test/dummy/public/favicon.ico
264
+ - test/dummy/public/javascripts/application.js
265
+ - test/dummy/public/javascripts/controls.js
266
+ - test/dummy/public/javascripts/dragdrop.js
267
+ - test/dummy/public/javascripts/effects.js
268
+ - test/dummy/public/javascripts/prototype.js
269
+ - test/dummy/public/javascripts/rails.js
270
+ - test/dummy/Rakefile
271
+ - test/dummy/script/rails
272
+ - test/integration/navigation_test.rb
273
+ - test/jms.yml
274
+ - test/jms_fail_test.rb
275
+ - test/jms_requestor_block_test.rb
276
+ - test/jms_requestor_test.rb
277
+ - test/jms_test.rb
278
+ - test/marshal_strategy_test.rb
279
+ - test/support/integration_case.rb
280
+ - test/test_helper.rb
281
+ - test/test_helper.rbold
282
+ - test/test_helper_active_record.rb
283
+ - test/unit/qwirk/batch/acquire_file_strategy_test.rb
284
+ - test/unit/qwirk/batch/active_record/batch_job_test.rb
285
+ - test/unit/qwirk/batch/parse_file_strategy_test.rb
286
+ homepage: http://github.com/ClarityServices/qwirk
287
+ licenses: []
288
+ post_install_message:
289
+ rdoc_options: []
290
+ require_paths:
291
+ - lib
292
+ required_ruby_version: !ruby/object:Gem::Requirement
293
+ none: false
294
+ requirements:
295
+ - - ! '>='
296
+ - !ruby/object:Gem::Version
297
+ version: '0'
298
+ segments:
299
+ - 0
300
+ hash: 2873378090990981972
301
+ required_rubygems_version: !ruby/object:Gem::Requirement
302
+ none: false
303
+ requirements:
304
+ - - ! '>='
305
+ - !ruby/object:Gem::Version
306
+ version: '0'
307
+ segments:
308
+ - 0
309
+ hash: 2873378090990981972
310
+ requirements: []
311
+ rubyforge_project:
312
+ rubygems_version: 1.8.23
313
+ signing_key:
314
+ specification_version: 3
315
+ summary: Asynchronous task library
316
+ test_files:
317
+ - test/base_test.rb
318
+ - test/database.yml
319
+ - test/dummy/app/controllers/application_controller.rb
320
+ - test/dummy/app/helpers/application_helper.rb
321
+ - test/dummy/app/views/layouts/application.html.erb
322
+ - test/dummy/config/application.rb
323
+ - test/dummy/config/boot.rb
324
+ - test/dummy/config/database.yml
325
+ - test/dummy/config/environment.rb
326
+ - test/dummy/config/environments/development.rb
327
+ - test/dummy/config/environments/production.rb
328
+ - test/dummy/config/environments/test.rb
329
+ - test/dummy/config/initializers/backtrace_silencers.rb
330
+ - test/dummy/config/initializers/inflections.rb
331
+ - test/dummy/config/initializers/mime_types.rb
332
+ - test/dummy/config/initializers/secret_token.rb
333
+ - test/dummy/config/initializers/session_store.rb
334
+ - test/dummy/config/locales/en.yml
335
+ - test/dummy/config/routes.rb
336
+ - test/dummy/config.ru
337
+ - test/dummy/log/development.log
338
+ - test/dummy/log/production.log
339
+ - test/dummy/log/server.log
340
+ - test/dummy/log/test.log
341
+ - test/dummy/public/404.html
342
+ - test/dummy/public/422.html
343
+ - test/dummy/public/500.html
344
+ - test/dummy/public/favicon.ico
345
+ - test/dummy/public/javascripts/application.js
346
+ - test/dummy/public/javascripts/controls.js
347
+ - test/dummy/public/javascripts/dragdrop.js
348
+ - test/dummy/public/javascripts/effects.js
349
+ - test/dummy/public/javascripts/prototype.js
350
+ - test/dummy/public/javascripts/rails.js
351
+ - test/dummy/Rakefile
352
+ - test/dummy/script/rails
353
+ - test/integration/navigation_test.rb
354
+ - test/jms.yml
355
+ - test/jms_fail_test.rb
356
+ - test/jms_requestor_block_test.rb
357
+ - test/jms_requestor_test.rb
358
+ - test/jms_test.rb
359
+ - test/marshal_strategy_test.rb
360
+ - test/support/integration_case.rb
361
+ - test/test_helper.rb
362
+ - test/test_helper.rbold
363
+ - test/test_helper_active_record.rb
364
+ - test/unit/qwirk/batch/acquire_file_strategy_test.rb
365
+ - test/unit/qwirk/batch/active_record/batch_job_test.rb
366
+ - test/unit/qwirk/batch/parse_file_strategy_test.rb