ruote-couch 2.1.5 → 2.1.7
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.
- data/CHANGELOG.txt +5 -0
- data/README.rdoc +21 -1
- data/Rakefile +3 -4
- data/lib/ruote/couch/database.rb +64 -9
- data/lib/ruote/couch/storage.rb +16 -0
- data/lib/ruote/couch/version.rb +1 -1
- data/ruote-couch.gemspec +12 -15
- data/test/test.rb +5 -8
- metadata +14 -10
- data/test/functional/ft_0_echo.rb +0 -42
- data/test/functional/test.rb +0 -11
- data/test/path_helper.rb +0 -16
- data/test/test_helper.rb +0 -13
- data/test/unit/test.rb +0 -11
- data/test/unit/ut_0_initial.rb +0 -25
data/CHANGELOG.txt
CHANGED
data/README.rdoc
CHANGED
@@ -3,7 +3,27 @@
|
|
3
3
|
|
4
4
|
A storage implementation for ruote 2.1.x.
|
5
5
|
|
6
|
-
Warning : this is a very naive implementation for now.
|
6
|
+
Warning : this is a very naive implementation for now. Not many optimizations...
|
7
|
+
|
8
|
+
|
9
|
+
== running tests
|
10
|
+
|
11
|
+
assuming you have
|
12
|
+
|
13
|
+
ruote/
|
14
|
+
ruote-couch/
|
15
|
+
|
16
|
+
* unit tests :
|
17
|
+
|
18
|
+
get into ruote/ and do
|
19
|
+
|
20
|
+
ruby test/unit/storage.rb --couch
|
21
|
+
|
22
|
+
* functional tests :
|
23
|
+
|
24
|
+
get into ruote/ and do
|
25
|
+
|
26
|
+
ruby test/functional/test.rb --couch
|
7
27
|
|
8
28
|
|
9
29
|
== license
|
data/Rakefile
CHANGED
@@ -33,10 +33,9 @@ CouchDB storage for ruote 2.1 (ruby workflow engine)
|
|
33
33
|
gem.test_file = 'test/test.rb'
|
34
34
|
|
35
35
|
gem.add_dependency 'ruote', ">= #{Ruote::Couch::VERSION}"
|
36
|
-
|
37
|
-
|
38
|
-
gem.
|
39
|
-
gem.add_development_dependency 'yard', '>= 0'
|
36
|
+
gem.add_dependency 'rufus-jig', '>= 0.1.13'
|
37
|
+
gem.add_development_dependency 'yard'
|
38
|
+
gem.add_development_dependency 'jeweler'
|
40
39
|
|
41
40
|
# gemspec spec : http://www.rubygems.org/read/chapter/20
|
42
41
|
end
|
data/lib/ruote/couch/database.rb
CHANGED
@@ -30,6 +30,9 @@ module Ruote::Couch
|
|
30
30
|
#
|
31
31
|
# A database corresponds to a Couch database (not a Couch server).
|
32
32
|
#
|
33
|
+
# There is one database per ruote document type (msgs, workitems,
|
34
|
+
# expressions, ...)
|
35
|
+
#
|
33
36
|
class Database
|
34
37
|
|
35
38
|
attr_reader :type
|
@@ -130,11 +133,11 @@ module Ruote::Couch
|
|
130
133
|
#
|
131
134
|
def query_options (opts)
|
132
135
|
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
136
|
+
opts = opts.select { |k, v| [ :limit, :skip ].include?(k) && v != nil }
|
137
|
+
|
138
|
+
s = opts.collect { |k, v| "#{k}=#{v}" }.join('&')
|
139
|
+
|
140
|
+
s.length > 0 ? "&#{s}" : ''
|
138
141
|
end
|
139
142
|
|
140
143
|
def query (uri)
|
@@ -143,6 +146,15 @@ module Ruote::Couch
|
|
143
146
|
|
144
147
|
rs['rows'].collect { |e| e['doc'] }
|
145
148
|
end
|
149
|
+
|
150
|
+
def query_by_post (uri, keys)
|
151
|
+
|
152
|
+
keys = { 'keys' => keys }
|
153
|
+
|
154
|
+
rs = @couch.post(uri, keys)
|
155
|
+
|
156
|
+
rs['rows'].collect { |e| e['doc'] }.uniq
|
157
|
+
end
|
146
158
|
end
|
147
159
|
|
148
160
|
#
|
@@ -166,6 +178,13 @@ module Ruote::Couch
|
|
166
178
|
end
|
167
179
|
end
|
168
180
|
|
181
|
+
# Used by WorkitemDatabase#query
|
182
|
+
#
|
183
|
+
def by_wfid (wfid)
|
184
|
+
|
185
|
+
get_many(/!#{wfid}$/, {})
|
186
|
+
end
|
187
|
+
|
169
188
|
protected
|
170
189
|
|
171
190
|
def design_doc
|
@@ -215,6 +234,42 @@ module Ruote::Couch
|
|
215
234
|
"&include_docs=true#{query_options(opts)}")
|
216
235
|
end
|
217
236
|
|
237
|
+
# This method is called by CouchStorage#query
|
238
|
+
#
|
239
|
+
def query_workitems (criteria)
|
240
|
+
|
241
|
+
offset = criteria.delete('offset')
|
242
|
+
limit = criteria.delete('limit')
|
243
|
+
|
244
|
+
wfid =
|
245
|
+
criteria.delete('wfid')
|
246
|
+
pname =
|
247
|
+
criteria.delete('participant_name') || criteria.delete('participant')
|
248
|
+
|
249
|
+
if criteria.empty? && (wfid.nil? ^ pname.nil?)
|
250
|
+
return by_participant(pname) if pname
|
251
|
+
return by_wfid(wfid) # if wfid
|
252
|
+
end
|
253
|
+
|
254
|
+
return get_many(nil, {}).collect { |hwi| Ruote::Workitem.new(hwi) } \
|
255
|
+
if criteria.empty?
|
256
|
+
|
257
|
+
cr = criteria.collect { |fname, fvalue| { fname => fvalue } }
|
258
|
+
|
259
|
+
opts = { :skip => offset, :limit => limit }
|
260
|
+
|
261
|
+
hwis = query_by_post(
|
262
|
+
"_design/ruote/_view/by_field?include_docs=true#{query_options(opts)}",
|
263
|
+
cr)
|
264
|
+
|
265
|
+
hwis = hwis.select { |hwi| hwi['fei']['wfid'] == wfid } if wfid
|
266
|
+
|
267
|
+
hwis = hwis.select { |hwi|
|
268
|
+
Ruote::StorageParticipant.matches?(hwi, pname, criteria) }
|
269
|
+
|
270
|
+
hwis.collect { |hwi| Ruote::Workitem.new(hwi) }
|
271
|
+
end
|
272
|
+
|
218
273
|
protected
|
219
274
|
|
220
275
|
def design_doc
|
@@ -237,11 +292,11 @@ module Ruote::Couch
|
|
237
292
|
|
238
293
|
emit(field, null);
|
239
294
|
|
240
|
-
var
|
241
|
-
|
242
|
-
emit(
|
295
|
+
var entry = {};
|
296
|
+
entry[field] = doc.fields[field]
|
297
|
+
emit(entry, null);
|
243
298
|
//
|
244
|
-
// have to use that
|
299
|
+
// have to use that 'entry' trick...
|
245
300
|
// else the field is named 'field'
|
246
301
|
}
|
247
302
|
}
|
data/lib/ruote/couch/storage.rb
CHANGED
@@ -31,12 +31,23 @@ require 'rufus/jig' # gem install rufus-jig
|
|
31
31
|
module Ruote
|
32
32
|
module Couch
|
33
33
|
|
34
|
+
#
|
35
|
+
# A CouchDB storage mechanism for ruote.
|
36
|
+
#
|
37
|
+
# The storage merely 'routes' work to Ruote::Couch::Database instances,
|
38
|
+
# one per document 'type' (expressions, msgs, schedules, variables, ...)
|
39
|
+
#
|
34
40
|
class CouchStorage
|
35
41
|
|
36
42
|
include Ruote::StorageBase
|
37
43
|
|
38
44
|
attr_reader :couch
|
39
45
|
|
46
|
+
# Hooks the storage to a CouchDB instance.
|
47
|
+
#
|
48
|
+
# The main option is 'prefix', which indicate which prefix should be
|
49
|
+
# added to all the database names used by this storage.
|
50
|
+
#
|
40
51
|
def initialize (host, port, options={})
|
41
52
|
|
42
53
|
@host = host
|
@@ -145,6 +156,11 @@ module Couch
|
|
145
156
|
@dbs['workitems'].by_field(field, value)
|
146
157
|
end
|
147
158
|
|
159
|
+
def query_workitems (criteria)
|
160
|
+
|
161
|
+
@dbs['workitems'].query_workitems(criteria)
|
162
|
+
end
|
163
|
+
|
148
164
|
protected
|
149
165
|
|
150
166
|
def put_configuration
|
data/lib/ruote/couch/version.rb
CHANGED
data/ruote-couch.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{ruote-couch}
|
8
|
-
s.version = "2.1.
|
8
|
+
s.version = "2.1.7"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["John Mettraux"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-02-15}
|
13
13
|
s.description = %q{CouchDB storage for ruote 2.1 (ruby workflow engine)}
|
14
14
|
s.email = %q{jmettraux@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -28,14 +28,8 @@ Gem::Specification.new do |s|
|
|
28
28
|
"lib/ruote/couch/storage.rb",
|
29
29
|
"lib/ruote/couch/version.rb",
|
30
30
|
"ruote-couch.gemspec",
|
31
|
-
"test/functional/ft_0_echo.rb",
|
32
|
-
"test/functional/test.rb",
|
33
31
|
"test/integration_connection.rb",
|
34
|
-
"test/
|
35
|
-
"test/test.rb",
|
36
|
-
"test/test_helper.rb",
|
37
|
-
"test/unit/test.rb",
|
38
|
-
"test/unit/ut_0_initial.rb"
|
32
|
+
"test/test.rb"
|
39
33
|
]
|
40
34
|
s.homepage = %q{http://github.com/jmettraux/ruote-couch}
|
41
35
|
s.rdoc_options = ["--charset=UTF-8"]
|
@@ -52,18 +46,21 @@ Gem::Specification.new do |s|
|
|
52
46
|
s.specification_version = 3
|
53
47
|
|
54
48
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
55
|
-
s.add_runtime_dependency(%q<ruote>, [">= 2.1.
|
56
|
-
s.add_runtime_dependency(%q<rufus-jig>, [">= 0.1.
|
49
|
+
s.add_runtime_dependency(%q<ruote>, [">= 2.1.7"])
|
50
|
+
s.add_runtime_dependency(%q<rufus-jig>, [">= 0.1.13"])
|
57
51
|
s.add_development_dependency(%q<yard>, [">= 0"])
|
52
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
58
53
|
else
|
59
|
-
s.add_dependency(%q<ruote>, [">= 2.1.
|
60
|
-
s.add_dependency(%q<rufus-jig>, [">= 0.1.
|
54
|
+
s.add_dependency(%q<ruote>, [">= 2.1.7"])
|
55
|
+
s.add_dependency(%q<rufus-jig>, [">= 0.1.13"])
|
61
56
|
s.add_dependency(%q<yard>, [">= 0"])
|
57
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
62
58
|
end
|
63
59
|
else
|
64
|
-
s.add_dependency(%q<ruote>, [">= 2.1.
|
65
|
-
s.add_dependency(%q<rufus-jig>, [">= 0.1.
|
60
|
+
s.add_dependency(%q<ruote>, [">= 2.1.7"])
|
61
|
+
s.add_dependency(%q<rufus-jig>, [">= 0.1.13"])
|
66
62
|
s.add_dependency(%q<yard>, [">= 0"])
|
63
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
67
64
|
end
|
68
65
|
end
|
69
66
|
|
data/test/test.rb
CHANGED
@@ -1,10 +1,7 @@
|
|
1
1
|
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
load File.dirname(__FILE__) + '/unit/test.rb'
|
9
|
-
load File.dirname(__FILE__) + '/functional/test.rb'
|
2
|
+
puts %{
|
3
|
+
~~~
|
4
|
+
please read the README about how to run ruote-dm tests
|
5
|
+
~~~
|
6
|
+
}
|
10
7
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruote-couch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Mettraux
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-
|
12
|
+
date: 2010-02-15 00:00:00 +09:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 2.1.
|
23
|
+
version: 2.1.7
|
24
24
|
version:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rufus-jig
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.1.
|
33
|
+
version: 0.1.13
|
34
34
|
version:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: yard
|
@@ -42,6 +42,16 @@ dependencies:
|
|
42
42
|
- !ruby/object:Gem::Version
|
43
43
|
version: "0"
|
44
44
|
version:
|
45
|
+
- !ruby/object:Gem::Dependency
|
46
|
+
name: jeweler
|
47
|
+
type: :development
|
48
|
+
version_requirement:
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: "0"
|
54
|
+
version:
|
45
55
|
description: CouchDB storage for ruote 2.1 (ruby workflow engine)
|
46
56
|
email: jmettraux@gmail.com
|
47
57
|
executables: []
|
@@ -63,14 +73,8 @@ files:
|
|
63
73
|
- lib/ruote/couch/storage.rb
|
64
74
|
- lib/ruote/couch/version.rb
|
65
75
|
- ruote-couch.gemspec
|
66
|
-
- test/functional/ft_0_echo.rb
|
67
|
-
- test/functional/test.rb
|
68
76
|
- test/integration_connection.rb
|
69
|
-
- test/path_helper.rb
|
70
77
|
- test/test.rb
|
71
|
-
- test/test_helper.rb
|
72
|
-
- test/unit/test.rb
|
73
|
-
- test/unit/ut_0_initial.rb
|
74
78
|
has_rdoc: true
|
75
79
|
homepage: http://github.com/jmettraux/ruote-couch
|
76
80
|
licenses: []
|
@@ -1,42 +0,0 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
# testing ruote-couch
|
4
|
-
#
|
5
|
-
# Fri Dec 11 22:06:25 JST 2009
|
6
|
-
#
|
7
|
-
|
8
|
-
require File.join(File.dirname(__FILE__), '..', 'test_helper.rb')
|
9
|
-
|
10
|
-
require 'ruote/engine'
|
11
|
-
require 'ruote/worker'
|
12
|
-
|
13
|
-
require File.join(File.dirname(__FILE__), '..', 'integration_connection.rb')
|
14
|
-
|
15
|
-
|
16
|
-
class FtInitialTest < Test::Unit::TestCase
|
17
|
-
|
18
|
-
def test_echo
|
19
|
-
|
20
|
-
#require 'ruote/storage/hash_storage'
|
21
|
-
#storage = Ruote::HashStorage.new
|
22
|
-
#require 'ruote/storage/fs_storage'
|
23
|
-
#storage = Ruote::FsStorage.new('work')
|
24
|
-
|
25
|
-
storage = new_storage(nil)
|
26
|
-
|
27
|
-
engine = Ruote::Engine.new(Ruote::Worker.new(storage))
|
28
|
-
|
29
|
-
engine.context[:noisy] = true
|
30
|
-
|
31
|
-
pdef = Ruote.process_definition :name => 'test' do
|
32
|
-
echo '* SEEN *'
|
33
|
-
end
|
34
|
-
|
35
|
-
wfid = engine.launch(pdef)
|
36
|
-
|
37
|
-
engine.wait_for(wfid)
|
38
|
-
|
39
|
-
#storage.purge!
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
data/test/functional/test.rb
DELETED
data/test/path_helper.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
# testing ruote-couch
|
4
|
-
#
|
5
|
-
# Thu Dec 10 11:04:02 JST 2009
|
6
|
-
#
|
7
|
-
|
8
|
-
ruote_lib = File.expand_path(
|
9
|
-
File.join(File.dirname(__FILE__), *%w[ .. .. ruote lib ]))
|
10
|
-
ruote_couch_lib = File.expand_path(
|
11
|
-
File.join(File.dirname(__FILE__), *%w[ .. lib ]))
|
12
|
-
|
13
|
-
[ ruote_lib, ruote_couch_lib ].each do |lib|
|
14
|
-
$:.unshift(lib) unless $:.include?(lib)
|
15
|
-
end
|
16
|
-
|
data/test/test_helper.rb
DELETED
data/test/unit/test.rb
DELETED
data/test/unit/ut_0_initial.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
# testing ruote-couch
|
4
|
-
#
|
5
|
-
# Thu Dec 10 11:07:56 JST 2009
|
6
|
-
#
|
7
|
-
|
8
|
-
require File.join(File.dirname(__FILE__), '..', 'test_helper.rb')
|
9
|
-
require File.join(File.dirname(__FILE__), '..', 'integration_connection.rb')
|
10
|
-
|
11
|
-
|
12
|
-
class UtInitialTest < Test::Unit::TestCase
|
13
|
-
|
14
|
-
def test_connect
|
15
|
-
|
16
|
-
storage = new_storage(nil)
|
17
|
-
|
18
|
-
v = storage.get_many('configurations')
|
19
|
-
|
20
|
-
#p v
|
21
|
-
|
22
|
-
assert_equal 1, v.size
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|