ruote-couch 2.1.11 → 2.2.0

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.
@@ -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
+