ruote-couch 2.1.11 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,6 +2,14 @@
2
2
  = ruote-couch - CHANGELOG.txt
3
3
 
4
4
 
5
+ == ruote-couch 2.2.0 released 2011/03/01
6
+
7
+ - Ruote::Couch::CouchStorage -> Ruote::Couch::Storage
8
+ - get_msgs : once per minute do a real get, to avoid losing msgs
9
+ - engine.process(wfid) : fixed issue with freshly deleted documents
10
+ (Thanks Claudio)
11
+
12
+
5
13
  == ruote-couch 2.1.11 released 2010/10/01
6
14
 
7
15
  - storage#shutdown back in business (for the sake of tests mostly)
@@ -9,9 +9,15 @@
9
9
 
10
10
  == contributors
11
11
 
12
+ - Sean Johnson - https://github.com/belucid
12
13
  - Torsten Schoenebaum - http://github.com/tosch
13
14
 
14
15
 
16
+ == feedback
17
+
18
+ - Claudio Petasecca Donati - https://github.com/etapeta
19
+
20
+
15
21
  == many thanks to
16
22
 
17
23
  - the CouchDB team for their great project
@@ -1,5 +1,5 @@
1
1
 
2
- Copyright (c) 2001-2010, John Mettraux, jmettraux@gmail.com
2
+ Copyright (c) 2005-2011, John Mettraux, jmettraux@gmail.com
3
3
 
4
4
  Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  of this software and associated documentation files (the "Software"), to deal
@@ -19,13 +19,13 @@ assuming you have
19
19
 
20
20
  get into ruote/ and do
21
21
 
22
- ruby test/unit/storage.rb --couch
22
+ ruby test/unit/storage.rb -- --couch
23
23
 
24
24
  * functional tests :
25
25
 
26
26
  get into ruote/ and do
27
27
 
28
- ruby test/functional/test.rb --couch
28
+ ruby test/functional/test.rb -- --couch
29
29
 
30
30
 
31
31
  == license
data/Rakefile CHANGED
@@ -1,71 +1,71 @@
1
1
 
2
+ $:.unshift('.') # 1.9.2
3
+
2
4
  require 'rubygems'
5
+
3
6
  require 'rake'
7
+ require 'rake/clean'
8
+ require 'rake/rdoctask'
4
9
 
5
- require 'lib/ruote/couch/version.rb'
6
10
 
7
11
  #
8
- # CLEAN
12
+ # clean
13
+
14
+ CLEAN.include('pkg', 'rdoc')
9
15
 
10
- require 'rake/clean'
11
- CLEAN.include('pkg', 'tmp', 'html')
12
16
  task :default => [ :clean ]
13
17
 
14
18
 
15
19
  #
16
- # GEM
20
+ # test / spec
21
+
22
+ task :test do
23
+
24
+ puts
25
+ puts "to test ruote-couch, head to your ruote/ dir and run"
26
+ puts
27
+ puts " ruby test/test.rb -- --couch"
28
+ puts
29
+ puts "but first, make sure your ruote-couch/test/functional_connection.rb"
30
+ puts "is set correctly."
31
+ puts
32
+ end
17
33
 
18
- require 'jeweler'
34
+ task :default => [ :test ]
19
35
 
20
- Jeweler::Tasks.new do |gem|
21
36
 
22
- gem.version = Ruote::Couch::VERSION
23
- gem.name = 'ruote-couch'
24
- gem.summary = 'CouchDB storage for ruote 2.1'
25
- gem.description = %{
26
- CouchDB storage for ruote 2.1 (ruby workflow engine)
27
- }.strip
28
- gem.email = 'jmettraux@gmail.com'
29
- gem.homepage = 'http://github.com/jmettraux/ruote-couch'
30
- gem.authors = [ 'John Mettraux' ]
31
- gem.rubyforge_project = 'ruote'
37
+ #
38
+ # gem
32
39
 
33
- gem.test_file = 'test/test.rb'
40
+ GEMSPEC_FILE = Dir['*.gemspec'].first
41
+ GEMSPEC = eval(File.read(GEMSPEC_FILE))
42
+ GEMSPEC.validate
34
43
 
35
- #gem.add_dependency 'ruote', ">= #{Ruote::Couch::VERSION}"
36
- gem.add_dependency 'ruote', ">= 2.1.11"
37
- gem.add_dependency 'rufus-jig', '>= 0.1.23'
38
- gem.add_development_dependency 'yard'
39
- gem.add_development_dependency 'rake'
40
- gem.add_development_dependency 'jeweler'
41
44
 
42
- # gemspec spec : http://www.rubygems.org/read/chapter/20
45
+ desc %{
46
+ builds the gem and places it in pkg/
47
+ }
48
+ task :build do
49
+
50
+ sh "gem build #{GEMSPEC_FILE}"
51
+ sh "mkdir pkg" rescue nil
52
+ sh "mv #{GEMSPEC.name}-#{GEMSPEC.version}.gem pkg/"
43
53
  end
44
- Jeweler::GemcutterTasks.new
45
54
 
46
- #
47
- # MISC
48
-
49
- task :delete_all_test_databases do
50
-
51
- require 'json'
52
- require 'rufus/jig'
53
- couch = Rufus::Jig::Couch.new('127.0.0.1', 5984)
54
- %w[
55
- configurations errors expressions msgs schedules variables workitems
56
- ].each do |type|
57
- couch.delete("/test_ruote_#{type}")
58
- end
55
+ desc %{
56
+ builds the gem and pushes it to rubygems.org
57
+ }
58
+ task :push => :build do
59
+
60
+ sh "gem push pkg/#{GEMSPEC.name}-#{GEMSPEC.version}.gem"
59
61
  end
60
62
 
61
63
 
62
64
  #
63
- # DOC
64
-
65
+ # rdoc
65
66
  #
66
67
  # make sure to have rdoc 2.5.x to run that
67
- #
68
- require 'rake/rdoctask'
68
+
69
69
  Rake::RDocTask.new do |rd|
70
70
 
71
71
  rd.main = 'README.rdoc'
@@ -74,13 +74,16 @@ Rake::RDocTask.new do |rd|
74
74
  rd.rdoc_files.include(
75
75
  'README.rdoc', 'CHANGELOG.txt', 'CREDITS.txt', 'lib/**/*.rb')
76
76
 
77
- rd.title = "ruote-couch #{Ruote::Couch::VERSION}"
77
+ rd.title = "#{GEMSPEC.name} #{GEMSPEC.version}"
78
78
  end
79
79
 
80
80
 
81
81
  #
82
- # TO THE WEB
82
+ # upload_rdoc
83
83
 
84
+ desc %{
85
+ upload the rdoc to rubyforge
86
+ }
84
87
  task :upload_rdoc => [ :clean, :rdoc ] do
85
88
 
86
89
  account = 'jmettraux@rubyforge.org'
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2005-2010, John Mettraux, jmettraux@gmail.com
2
+ # Copyright (c) 2005-2011, John Mettraux, jmettraux@gmail.com
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  # of this software and associated documentation files (the "Software"), to deal
@@ -22,8 +22,6 @@
22
22
  # Made in Japan.
23
23
  #++
24
24
 
25
- require 'cgi'
26
-
27
25
 
28
26
  module Ruote::Couch
29
27
 
@@ -36,7 +34,6 @@ module Ruote::Couch
36
34
  class Database
37
35
 
38
36
  attr_reader :type
39
-
40
37
  attr_reader :couch
41
38
 
42
39
  def initialize (host, port, type, name, opts={})
@@ -84,11 +81,14 @@ module Ruote::Couch
84
81
  #
85
82
  def get_many (key, opts)
86
83
 
87
- return query('_all_docs?include_docs=true') if ( ! key) && opts.size < 1
84
+ if key.nil? && opts.empty?
85
+ return @couch.all(:include_design_docs => false)
86
+ end
88
87
 
89
88
  is = ids
90
89
 
91
90
  return is.length if opts[:count]
91
+ return [] if is.empty?
92
92
 
93
93
  is = is.reverse if opts[:descending]
94
94
 
@@ -102,22 +102,17 @@ module Ruote::Couch
102
102
 
103
103
  is = is[skip, limit]
104
104
 
105
- query_by_post('_all_docs?include_docs=true', is)
105
+ #return [] if is.empty?
106
+ # not necessary at this point, jig provides already this optimization.
106
107
 
107
- # TODO
108
- # maybe _count come be of use here
109
- # http://wiki.apache.org/couchdb/Built-In_Reduce_Functions
108
+ @couch.all(:keys => is)
110
109
  end
111
110
 
112
111
  # Returns a sorted list of the ids of all the docs in this database.
113
112
  #
114
113
  def ids
115
114
 
116
- @couch.get('_all_docs')['rows'].collect { |r|
117
- r['id']
118
- }.reject { |i|
119
- DESIGN_DOC_REGEX.match(i)
120
- }
115
+ @couch.ids(:include_design_docs => false)
121
116
  end
122
117
 
123
118
  def dump
@@ -143,12 +138,14 @@ module Ruote::Couch
143
138
  #
144
139
  def purge!
145
140
 
146
- @couch.http.cache.clear
147
- @couch.get('_all_docs')['rows'].each do |row|
148
- next if row['id'].match(/^\_design\//)
149
- doc = { '_id' => row['id'], '_rev' => row['value']['rev'] }
150
- @couch.delete(doc)
151
- end
141
+ #@couch.http.cache.clear
142
+ #@couch.all(
143
+ # :include_docs => false, :include_design_docs => false
144
+ #).each do |doc|
145
+ # @couch.delete(doc)
146
+ #end
147
+ docs = @couch.all(:include_docs => false, :include_design_docs => false)
148
+ @couch.bulk_delete(docs)
152
149
  #
153
150
  # which is faster than
154
151
  #
@@ -159,50 +156,9 @@ module Ruote::Couch
159
156
 
160
157
  protected
161
158
 
162
- def prepare
163
-
164
- # nothing to do for a index-less database
165
- end
166
-
167
- # These options are known and passed to CouchDB.
168
- #
169
- QUERY_OPTIONS = [ :skip, :limit, :descending ]
170
-
171
- # :limit and :skip support
159
+ # Well, empty. Nothing to do for a index-less database
172
160
  #
173
- def query_options (opts)
174
-
175
- opts = opts.select { |k, v| QUERY_OPTIONS.include?(k) && v != nil }
176
-
177
- s = opts.collect { |k, v| "#{k}=#{v}" }.join('&')
178
-
179
- s.length > 0 ? "&#{s}" : ''
180
- end
181
-
182
- # Used by #get_many and #ids when filtering design documents out of
183
- # '_all_docs'.
184
- #
185
- DESIGN_DOC_REGEX = /^\_design\//
186
-
187
- def filter_design_docs (docs)
188
-
189
- docs.reject { |d| DESIGN_DOC_REGEX.match(d['_id']) }
190
- end
191
-
192
- def query (uri)
193
-
194
- rs = @couch.get(uri)
195
-
196
- filter_design_docs(rs['rows'].collect { |e| e['doc'] })
197
- end
198
-
199
- def query_by_post (uri, keys)
200
-
201
- keys = { 'keys' => keys }
202
-
203
- rs = @couch.post(uri, keys)
204
-
205
- filter_design_docs(rs['rows'].collect { |e| e['doc'] }.uniq)
161
+ def prepare
206
162
  end
207
163
  end
208
164
 
@@ -219,14 +175,13 @@ module Ruote::Couch
219
175
 
220
176
  # key is a wfid
221
177
 
222
- query("_design/ruote/_view/by_wfid?key=%22#{key}%22&include_docs=true")
178
+ @couch.query_for_docs('ruote:by_wfid', :key => key)
223
179
  end
224
180
 
225
181
  # Used by WorkitemDatabase#query
226
182
  #
227
183
  def by_wfid (wfid)
228
184
 
229
- #get_many(/!#{wfid}$/, {})
230
185
  get_many(wfid, {})
231
186
  end
232
187
 
@@ -267,6 +222,21 @@ module Ruote::Couch
267
222
 
268
223
  @couch.put(design_doc)
269
224
  end
225
+
226
+ #--
227
+ #def try (&block)
228
+ # try = 0
229
+ # begin
230
+ # try = try + 1
231
+ # block.call
232
+ # rescue Rufus::Jig::HttpError => he
233
+ # raise he
234
+ # rescue
235
+ # retry unless try > 1
236
+ # end
237
+ #end
238
+ # keeping it frozen for now
239
+ #++
270
240
  end
271
241
 
272
242
  #
@@ -274,28 +244,25 @@ module Ruote::Couch
274
244
  #
275
245
  class WorkitemDatabase < WfidIndexedDatabase
276
246
 
277
- # This method is called by CouchStorage#by_field
247
+ # This method is called by Storage#by_field
278
248
  #
279
249
  def by_field (field, value=nil, opts={})
280
250
 
281
251
  field = { field => value } if value
282
- field = CGI.escape(Rufus::Json.encode(field))
283
252
 
284
- query(
285
- "_design/ruote/_view/by_field?key=#{field}" +
286
- "&include_docs=true#{query_options(opts)}")
253
+ @couch.query_for_docs(
254
+ 'ruote:by_field', opts.merge(:key => field))
287
255
  end
288
256
 
289
- # This method is called by CouchStorage#by_participant
257
+ # This method is called by Storage#by_participant
290
258
  #
291
259
  def by_participant (name, opts={})
292
260
 
293
- query(
294
- "_design/ruote/_view/by_participant_name?key=%22#{name}%22" +
295
- "&include_docs=true#{query_options(opts)}")
261
+ @couch.query_for_docs(
262
+ 'ruote:by_participant_name', opts.merge(:key => name))
296
263
  end
297
264
 
298
- # This method is called by CouchStorage#query
265
+ # This method is called by Storage#query
299
266
  #
300
267
  def query_workitems (criteria)
301
268
 
@@ -318,9 +285,7 @@ module Ruote::Couch
318
285
 
319
286
  opts = { :skip => offset, :limit => limit }
320
287
 
321
- hwis = query_by_post(
322
- "_design/ruote/_view/by_field?include_docs=true#{query_options(opts)}",
323
- cr)
288
+ hwis = @couch.query_for_docs('ruote:by_field', opts.merge(:keys => cr))
324
289
 
325
290
  hwis = hwis.select { |hwi| hwi['fei']['wfid'] == wfid } if wfid
326
291
 
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2005-2010, John Mettraux, jmettraux@gmail.com
2
+ # Copyright (c) 2005-2011, John Mettraux, jmettraux@gmail.com
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  # of this software and associated documentation files (the "Software"), to deal
@@ -38,7 +38,7 @@ module Couch
38
38
  # The storage merely 'routes' work to Ruote::Couch::Database instances,
39
39
  # one per document 'type' (expressions, msgs, schedules, variables, ...)
40
40
  #
41
- class CouchStorage
41
+ class Storage
42
42
 
43
43
  include Ruote::StorageBase
44
44
 
@@ -82,12 +82,14 @@ module Couch
82
82
 
83
83
  put_configuration
84
84
 
85
- @msgs_thread = nil
85
+ @poll_threads = {}
86
+
86
87
  @msgs_queue = ::Queue.new
88
+ @msgs_last_min = nil
87
89
 
88
- @schedules_thread = nil
89
90
  @schedules_queue = ::Queue.new
90
- @schedules = nil
91
+ @schedules = {}
92
+ @schedules_last_min = nil
91
93
  end
92
94
 
93
95
  def put (doc, opts={})
@@ -133,9 +135,7 @@ module Couch
133
135
  def shutdown
134
136
 
135
137
  @dbs.values.each { |db| db.shutdown }
136
-
137
- @msgs_thread.kill rescue nil
138
- @schedules_thread.kill rescue nil
138
+ @poll_threads.values.each { |t| t.kill rescue nil }
139
139
  end
140
140
 
141
141
  # Mainly used by ruote's test/unit/ut_17_storage.rb
@@ -189,19 +189,34 @@ module Couch
189
189
  #
190
190
  def get_msgs
191
191
 
192
- mt = @msgs_thread
192
+ mt = @poll_threads['msgs']
193
193
 
194
194
  ensure_msgs_thread_is_running
195
195
 
196
196
  msgs = []
197
- 2.times { msgs = get_many('msgs') } if mt != @msgs_thread
197
+ 2.times {
198
+ (msgs = get_many('msgs')) rescue nil
199
+ } if mt != @poll_threads['msgs']
198
200
  #
199
201
  # seems necessary to avoid any msgs leak :-(
202
+ #
203
+ # added the "rescue nil", to rescue timeout exceptions
200
204
 
201
205
  while @msgs_queue.size > 0
202
206
  msgs << @msgs_queue.pop
203
207
  end
204
208
 
209
+ if msgs.empty? && Time.now.min != @msgs_last_min
210
+ #
211
+ # once per minute, do a regular get, to avoid lost msgs
212
+ #
213
+ begin
214
+ msgs = get_many('msgs')
215
+ @msgs_last_min = Time.now.min
216
+ rescue Rufus::Jig::TimeoutError => te
217
+ end
218
+ end
219
+
205
220
  msgs
206
221
  end
207
222
 
@@ -209,16 +224,6 @@ module Couch
209
224
 
210
225
  ensure_schedules_thread_is_running
211
226
 
212
- if @schedules.nil?
213
-
214
- # NOTE : the problem with this approach is that ALL the schedules
215
- # are stored in memory. Most of the time it's not a problem, but
216
- # for people will lots of schedules...
217
-
218
- @schedules = get_many('schedules')
219
- @schedules = @schedules.inject({}) { |h, s| h[s['_id']] = s; h }
220
- end
221
-
222
227
  while @schedules_queue.size > 0
223
228
 
224
229
  deleted, s = @schedules_queue.pop
@@ -232,6 +237,15 @@ module Couch
232
237
  end
233
238
  end
234
239
 
240
+ if Time.now.min != @schedules_last_min
241
+ #
242
+ # once per minute, do a regular get, to avoid lost schedules
243
+ #
244
+ @schedules = get_many('schedules')
245
+ @schedules = @schedules.inject({}) { |h, s| h[s['_id']] = s; h }
246
+ @schedules_last_min = Time.now.min
247
+ end
248
+
235
249
  filter_schedules(@schedules.values.reject { |sch| sch['at'].nil? }, now)
236
250
  end
237
251
 
@@ -246,30 +260,40 @@ module Couch
246
260
  put(conf)
247
261
  end
248
262
 
249
- def ensure_msgs_thread_is_running
263
+ def ensure_poll_thread_is_running (doctype, &block)
250
264
 
251
- status = @msgs_thread ? @msgs_thread.status : -1
252
- return if status == 'run' || status == 'sleep'
265
+ if t = @poll_threads[doctype]
266
+ return if t.status == 'run' || t.status == 'sleep' # thread is OK
267
+ end
253
268
 
254
- @msgs_thread = Thread.new do
255
- @dbs['msgs'].couch.on_change do |_, deleted, doc|
256
- @msgs_queue << doc unless deleted
257
- end
269
+ # create or revive thread....
270
+
271
+ @poll_threads[doctype] = Thread.new do
272
+
273
+ @dbs[doctype].couch.on_change(&block) rescue nil
258
274
  end
259
275
  end
260
276
 
261
- def ensure_schedules_thread_is_running
277
+ def ensure_msgs_thread_is_running
262
278
 
263
- status = @schedules_thread ? @schedules_thread.status : -1
264
- return if status == 'run' || status == 'sleep'
279
+ ensure_poll_thread_is_running 'msgs' do |_, deleted, doc|
280
+ @msgs_queue << doc unless deleted
281
+ end
282
+ end
265
283
 
266
- @schedules_thread = Thread.new do
267
- @dbs['schedules'].couch.on_change do |_, deleted, doc|
268
- @schedules_queue << [ deleted, doc ]
269
- end
284
+ def ensure_schedules_thread_is_running
285
+
286
+ ensure_poll_thread_is_running 'schedules' do |_, deleted, doc|
287
+ @schedules_queue << [ deleted, doc ]
270
288
  end
271
289
  end
272
290
  end
291
+
292
+ #
293
+ # Kept for backward compatibility.
294
+ #
295
+ class CouchStorage < Storage
296
+ end
273
297
  end
274
298
  end
275
299
 
@@ -1,7 +1,8 @@
1
1
 
2
2
  module Ruote
3
3
  module Couch
4
- VERSION = '2.1.11'
4
+
5
+ VERSION = '2.2.0'
5
6
  end
6
7
  end
7
8
 
@@ -1,74 +1,31 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
- # -*- encoding: utf-8 -*-
1
+ # encoding: utf-8
5
2
 
6
3
  Gem::Specification.new do |s|
7
- s.name = %q{ruote-couch}
8
- s.version = "2.1.11"
9
4
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["John Mettraux"]
12
- s.date = %q{2010-10-01}
13
- s.description = %q{CouchDB storage for ruote 2.1 (ruby workflow engine)}
14
- s.email = %q{jmettraux@gmail.com}
15
- s.extra_rdoc_files = [
16
- "LICENSE.txt",
17
- "README.rdoc"
18
- ]
19
- s.files = [
20
- "CHANGELOG.txt",
21
- "CREDITS.txt",
22
- "LICENSE.txt",
23
- "README.rdoc",
24
- "Rakefile",
25
- "TODO.txt",
26
- "lib/ruote-couch.rb",
27
- "lib/ruote/couch.rb",
28
- "lib/ruote/couch/database.rb",
29
- "lib/ruote/couch/storage.rb",
30
- "lib/ruote/couch/version.rb",
31
- "ruote-couch.gemspec",
32
- "test/functional/base.rb",
33
- "test/functional/test.rb",
34
- "test/functional_connection.rb",
35
- "test/test.rb",
36
- "test/unit/test.rb",
37
- "test/unit/ut_0_design_doc.rb"
38
- ]
39
- s.homepage = %q{http://github.com/jmettraux/ruote-couch}
40
- s.rdoc_options = ["--charset=UTF-8"]
41
- s.require_paths = ["lib"]
42
- s.rubyforge_project = %q{ruote}
43
- s.rubygems_version = %q{1.3.6}
44
- s.summary = %q{CouchDB storage for ruote 2.1}
45
- s.test_files = [
46
- "test/test.rb"
5
+ s.name = 'ruote-couch'
6
+ s.version = File.read('lib/ruote/couch/version.rb').match(/VERSION = '([^']+)'/)[1]
7
+ s.platform = Gem::Platform::RUBY
8
+ s.authors = [ 'John Mettraux' ]
9
+ s.email = [ 'jmettraux@gmail.com' ]
10
+ s.homepage = 'http://github.com/jmettraux/ruote-couch'
11
+ s.rubyforge_project = 'ruote'
12
+ s.summary = 'CouchDB storage for ruote 2.1'
13
+ s.description = %{
14
+ CouchDB storage for ruote 2.1 (ruby workflow engine)
15
+ }.strip
16
+
17
+ #s.files = `git ls-files`.split("\n")
18
+ s.files = Dir[
19
+ 'Rakefile',
20
+ 'lib/**/*.rb', 'spec/**/*.rb', 'test/**/*.rb',
21
+ '*.gemspec', '*.txt', '*.rdoc', '*.md'
47
22
  ]
48
23
 
49
- if s.respond_to? :specification_version then
50
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
51
- s.specification_version = 3
24
+ s.add_dependency 'ruote', ">= #{s.version}"
25
+ s.add_dependency 'rufus-jig', '>= 1.0.0'
26
+
27
+ s.add_development_dependency 'rake'
52
28
 
53
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
54
- s.add_runtime_dependency(%q<ruote>, [">= 2.1.11"])
55
- s.add_runtime_dependency(%q<rufus-jig>, [">= 0.1.23"])
56
- s.add_development_dependency(%q<yard>, [">= 0"])
57
- s.add_development_dependency(%q<rake>, [">= 0"])
58
- s.add_development_dependency(%q<jeweler>, [">= 0"])
59
- else
60
- s.add_dependency(%q<ruote>, [">= 2.1.11"])
61
- s.add_dependency(%q<rufus-jig>, [">= 0.1.23"])
62
- s.add_dependency(%q<yard>, [">= 0"])
63
- s.add_dependency(%q<rake>, [">= 0"])
64
- s.add_dependency(%q<jeweler>, [">= 0"])
65
- end
66
- else
67
- s.add_dependency(%q<ruote>, [">= 2.1.11"])
68
- s.add_dependency(%q<rufus-jig>, [">= 0.1.23"])
69
- s.add_dependency(%q<yard>, [">= 0"])
70
- s.add_dependency(%q<rake>, [">= 0"])
71
- s.add_dependency(%q<jeweler>, [">= 0"])
72
- end
29
+ s.require_path = 'lib'
73
30
  end
74
31
 
@@ -41,8 +41,20 @@ unless $_RUOTE_COUCH_CLEANED
41
41
  %w[
42
42
  configurations errors expressions msgs schedules variables workitems
43
43
  ].each do |type|
44
- couch.delete("/test_ruote_#{type}")
44
+
45
+ count = 0
46
+
47
+ begin
48
+
49
+ count = count + 1
50
+ couch.delete("/test_ruote_#{type}")
51
+
52
+ rescue Rufus::Jig::TimeoutError => te
53
+ retry unless count > 1
54
+ raise te
55
+ end
45
56
  end
57
+
46
58
  puts "(purged all /test_ruote_xxx databases)"
47
59
  $_RUOTE_COUCH_CLEANED = true
48
60
  end
@@ -52,8 +64,11 @@ def new_storage (opts)
52
64
 
53
65
  opts ||= {}
54
66
 
55
- Ruote::Couch::CouchStorage.new(
67
+ #Ruote::Couch::Storage.new(
68
+ # _couch_url,
69
+ # opts.merge!('couch_prefix' => 'test', :basic_auth => %w[ admin admin ]))
70
+ Ruote::Couch::Storage.new(
56
71
  _couch_url,
57
- opts.merge!('couch_prefix' => 'test', :basic_auth => %w[ admin admin ]))
72
+ opts.merge!('couch_prefix' => 'test'))
58
73
  end
59
74
 
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 2
7
- - 1
8
- - 11
9
- version: 2.1.11
7
+ - 2
8
+ - 0
9
+ version: 2.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - John Mettraux
@@ -14,41 +14,44 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-10-01 00:00:00 +09:00
17
+ date: 2011-03-01 00:00:00 +09:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: ruote
22
22
  prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
24
25
  requirements:
25
26
  - - ">="
26
27
  - !ruby/object:Gem::Version
27
28
  segments:
28
29
  - 2
29
- - 1
30
- - 11
31
- version: 2.1.11
30
+ - 2
31
+ - 0
32
+ version: 2.2.0
32
33
  type: :runtime
33
34
  version_requirements: *id001
34
35
  - !ruby/object:Gem::Dependency
35
36
  name: rufus-jig
36
37
  prerelease: false
37
38
  requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
38
40
  requirements:
39
41
  - - ">="
40
42
  - !ruby/object:Gem::Version
41
43
  segments:
42
- - 0
43
44
  - 1
44
- - 23
45
- version: 0.1.23
45
+ - 0
46
+ - 0
47
+ version: 1.0.0
46
48
  type: :runtime
47
49
  version_requirements: *id002
48
50
  - !ruby/object:Gem::Dependency
49
- name: yard
51
+ name: rake
50
52
  prerelease: false
51
53
  requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
52
55
  requirements:
53
56
  - - ">="
54
57
  - !ruby/object:Gem::Version
@@ -57,68 +60,45 @@ dependencies:
57
60
  version: "0"
58
61
  type: :development
59
62
  version_requirements: *id003
60
- - !ruby/object:Gem::Dependency
61
- name: rake
62
- prerelease: false
63
- requirement: &id004 !ruby/object:Gem::Requirement
64
- requirements:
65
- - - ">="
66
- - !ruby/object:Gem::Version
67
- segments:
68
- - 0
69
- version: "0"
70
- type: :development
71
- version_requirements: *id004
72
- - !ruby/object:Gem::Dependency
73
- name: jeweler
74
- prerelease: false
75
- requirement: &id005 !ruby/object:Gem::Requirement
76
- requirements:
77
- - - ">="
78
- - !ruby/object:Gem::Version
79
- segments:
80
- - 0
81
- version: "0"
82
- type: :development
83
- version_requirements: *id005
84
63
  description: CouchDB storage for ruote 2.1 (ruby workflow engine)
85
- email: jmettraux@gmail.com
64
+ email:
65
+ - jmettraux@gmail.com
86
66
  executables: []
87
67
 
88
68
  extensions: []
89
69
 
90
- extra_rdoc_files:
91
- - LICENSE.txt
92
- - README.rdoc
70
+ extra_rdoc_files: []
71
+
93
72
  files:
94
- - CHANGELOG.txt
95
- - CREDITS.txt
96
- - LICENSE.txt
97
- - README.rdoc
98
73
  - Rakefile
99
- - TODO.txt
100
- - lib/ruote-couch.rb
101
- - lib/ruote/couch.rb
102
74
  - lib/ruote/couch/database.rb
103
75
  - lib/ruote/couch/storage.rb
104
76
  - lib/ruote/couch/version.rb
105
- - ruote-couch.gemspec
77
+ - lib/ruote/couch.rb
78
+ - lib/ruote-couch.rb
106
79
  - test/functional/base.rb
107
80
  - test/functional/test.rb
108
81
  - test/functional_connection.rb
109
82
  - test/test.rb
110
83
  - test/unit/test.rb
111
84
  - test/unit/ut_0_design_doc.rb
85
+ - ruote-couch.gemspec
86
+ - CHANGELOG.txt
87
+ - CREDITS.txt
88
+ - LICENSE.txt
89
+ - TODO.txt
90
+ - README.rdoc
112
91
  has_rdoc: true
113
92
  homepage: http://github.com/jmettraux/ruote-couch
114
93
  licenses: []
115
94
 
116
95
  post_install_message:
117
- rdoc_options:
118
- - --charset=UTF-8
96
+ rdoc_options: []
97
+
119
98
  require_paths:
120
99
  - lib
121
100
  required_ruby_version: !ruby/object:Gem::Requirement
101
+ none: false
122
102
  requirements:
123
103
  - - ">="
124
104
  - !ruby/object:Gem::Version
@@ -126,6 +106,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
126
106
  - 0
127
107
  version: "0"
128
108
  required_rubygems_version: !ruby/object:Gem::Requirement
109
+ none: false
129
110
  requirements:
130
111
  - - ">="
131
112
  - !ruby/object:Gem::Version
@@ -135,9 +116,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
116
  requirements: []
136
117
 
137
118
  rubyforge_project: ruote
138
- rubygems_version: 1.3.6
119
+ rubygems_version: 1.3.7
139
120
  signing_key:
140
121
  specification_version: 3
141
122
  summary: CouchDB storage for ruote 2.1
142
- test_files:
143
- - test/test.rb
123
+ test_files: []
124
+