sqew 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -16,7 +16,7 @@ sqew is a lightweight background processor. You start a single process that will
16
16
  * You don't care about the enqueueing or job forking performance.
17
17
  * You don't need multiple queues (this may change soon).
18
18
 
19
- If these don't fit the bill or you need more power, I recommend you try the great other great gems such as [Resque](https://github.com/defunkt/resque), [Sidekiq](https://github.com/mperham/sidekiq), and [Qu](https://github.com/bkeepers/qu).
19
+ If these don't fit the bill or you need more power, I recommend you try the other great gems such as [Resque](https://github.com/defunkt/resque), [Sidekiq](https://github.com/mperham/sidekiq), and [Qu](https://github.com/bkeepers/qu).
20
20
 
21
21
  ## Rails Installation
22
22
 
@@ -101,6 +101,10 @@ And the manager will receive the job and start working on it when it can. You ca
101
101
  If you're using Rails 4 you can enqueue the job by using the Rails queuing API:
102
102
 
103
103
  Rails.queue.push(MyJob, 1, 2)
104
+
105
+ ## Using Sqew within Tests
106
+
107
+ Within your tests, you can set ```Sqew.inline = true``` and jobs will work immediately as they are enqueued and errors will be re-raised.
104
108
 
105
109
  ## Is it any good?
106
110
 
@@ -110,7 +114,7 @@ If you're using Rails 4 you can enqueue the job by using the Rails queuing API:
110
114
 
111
115
  Sqew doesn't use redis or your rails database. It uses [LevelDB](http://code.google.com/p/leveldb/) to manage its persistence. So you don't have to manage/setup anything.
112
116
 
113
- ## Does it work on windows?
117
+ ## Does it work on windows or jruby?
114
118
 
115
119
  No. It uses [forking](http://en.wikipedia.org/wiki/Fork_(operating_system\)) heavily.
116
120
 
@@ -27,16 +27,25 @@ module Sqew
27
27
  Qu
28
28
  end
29
29
 
30
- def server=(raw)
31
- URI.parse(raw) # verify it's parsable
32
- @server = raw
33
- end
34
-
35
30
  def_delegators :qu, :backend, :backend=, :length, :queues, :reserve, :logger, :logger=, :failure, :failure=
36
31
  end
37
32
  extend ClassMethods
38
33
 
39
34
  class << self
35
+ def server=(raw)
36
+ URI.parse(raw) # verify it's parsable
37
+ @server = raw
38
+ end
39
+
40
+ def inline=(inline)
41
+ self.backend = Sqew::Backend::Immediate.new if inline
42
+ @inline = inline
43
+ end
44
+
45
+ def inline
46
+ !! @inline
47
+ end
48
+
40
49
  def configure(*args, &block)
41
50
  self.backend = Sqew::Backend::LevelDB.new
42
51
  block.call(self)
@@ -50,6 +59,7 @@ module Sqew
50
59
  end
51
60
 
52
61
  def push(job, *args)
62
+ return Qu.enqueue(job, *args) if @inline
53
63
  request = Net::HTTP::Post.new("/enqueue")
54
64
  request.body = MultiJson.encode("job" => job.to_s, "args" => args)
55
65
  http.request(request)
@@ -57,11 +67,13 @@ module Sqew
57
67
  alias_method :enqueue, :push
58
68
 
59
69
  def ping
70
+ return true if @inline
60
71
  request = Net::HTTP::Get.new("/ping")
61
72
  http.request(request)
62
73
  end
63
74
 
64
75
  def status
76
+ raise "Status is not available while Sqew.inline = true" if @inline
65
77
  request = Net::HTTP::Get.new("/status")
66
78
  response = http.request(request)
67
79
  if response.code == "200"
@@ -72,6 +84,7 @@ module Sqew
72
84
  end
73
85
 
74
86
  def set_workers(count)
87
+ raise "Setting workers is not available while Sqew.inline = true" if @inline
75
88
  request = Net::HTTP::Put.new("/workers")
76
89
  request.body = count.to_s
77
90
  http.request(request)
@@ -79,12 +92,14 @@ module Sqew
79
92
  alias_method :workers=, :set_workers
80
93
 
81
94
  def clear(*queues)
95
+ raise "Clear is not available while Sqew.inline = true" if @inline
82
96
  request = Net::HTTP::Delete.new("/clear")
83
97
  request.body = queues.join(",")
84
98
  http.request(request)
85
99
  end
86
100
 
87
101
  def delete(id)
102
+ raise "Delete is not available while Sqew.inline = true" if @inline
88
103
  request = Net::HTTP::Delete.new("/#{id}")
89
104
  http.request(request)
90
105
  end
@@ -8,9 +8,9 @@ module Sqew
8
8
  end
9
9
  alias_method :running_jobs, :queued_jobs
10
10
  alias_method :failed_jobs, :queued_jobs
11
- end
12
-
13
- def close
11
+
12
+ def close
13
+ end
14
14
  end
15
15
  end
16
16
  end
@@ -1,3 +1,3 @@
1
1
  module Sqew
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -38,4 +38,25 @@ describe Sqew do
38
38
  thread.terminate
39
39
  end
40
40
  end
41
+
42
+ context "inline" do
43
+ before(:all) do
44
+ @is_inline = Sqew.inline
45
+ Sqew.inline = true
46
+ end
47
+
48
+ after(:all) do
49
+ Sqew.inline = @is_inline
50
+ end
51
+
52
+ it "runs jobs immediately" do
53
+ TestJob.reset
54
+ Sqew.push(TestJob, 77)
55
+ TestJob.testing.should == 77
56
+ end
57
+
58
+ it "raises errors from jobs" do
59
+ expect {Sqew.push(ErrorJob, -1) }.to raise_error
60
+ end
61
+ end
41
62
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sqew
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-02 00:00:00.000000000 Z
12
+ date: 2012-05-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: leveldb-ruby