ruote-dm 2.1.10 → 2.1.11

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,8 +2,19 @@
2
2
  = ruote-dm - CHANGELOG.txt
3
3
 
4
4
 
5
+ == ruote-dm 2.1.11 released 2010/10/01
6
+
7
+ - get_many(x, y, descending => true)
8
+ - adapted for engines.processes pagination
9
+ - ! added 'wfi' column to Document table
10
+ - workitems.by_participant() :skip and :limit support
11
+ - get_many(x, y, :skip => 10) support
12
+ - get_many(x, y, :count => true) support
13
+
14
+
5
15
  == ruote-dm 2.1.10 released 2010/06/15
6
16
 
17
+ - multi-workers hardened
7
18
  - :ide key, :length => 255 for MySQL (thanks irfn)
8
19
  - _rev now starting at 1 (instead of 0)
9
20
 
@@ -3,15 +3,16 @@
3
3
 
4
4
  == authors
5
5
 
6
- - John Mettraux http://jmettraux.wordpress.com
7
- - Jordan Ritter (http://github.com/jpr5)
6
+ - John Mettraux - http://github.com/jmettraux
7
+ - Jordan Ritter - http://github.com/jpr5
8
8
 
9
9
 
10
10
  == contributors
11
11
 
12
- - irfn (debugging on MySQL)
13
- - asm (many bug reports)
14
- - Kenneth Kalmer (http://www.opensourcery.co.za/)
12
+ - Torsten Schoenebaum - http://github.com/tosch
13
+ - Irfan (debugging on MySQL) - http://github.com/irfn
14
+ - asm (many bug reports) - http://github.com/asm
15
+ - Kenneth Kalmer - (http://www.opensourcery.co.za/)
15
16
 
16
17
 
17
18
  == many thanks to
@@ -28,7 +28,7 @@ To create the tables in the database :
28
28
  Ruote::Dm::Document.auto_migrate!
29
29
 
30
30
 
31
- Tested with dm 0.9.2 and dm 1.0.0, with the postgresql and the msyql adapters.
31
+ Tested with dm 1.0.2, with the postgresql and the msyql adapters.
32
32
 
33
33
 
34
34
  == running tests
@@ -42,13 +42,18 @@ assuming you have
42
42
 
43
43
  get into ruote/ and do
44
44
 
45
- ruby test/unit/storage.rb --dm
45
+ ruby test/unit/storage.rb -- --dm
46
46
 
47
47
  * functional tests :
48
48
 
49
49
  get into ruote/ and do
50
50
 
51
- ruby test/functional/test.rb --dm
51
+ ruby test/functional/test.rb -- --dm
52
+
53
+
54
+ == known issues
55
+
56
+ It works well on OSX, but test/functional/ct_2_cancel.rb is failing. Since OSX isn't a often met server platform, we haven't investigated further.
52
57
 
53
58
 
54
59
  == license
data/Rakefile CHANGED
@@ -34,6 +34,7 @@ datamapper storage for ruote (a ruby workflow engine)
34
34
 
35
35
  gem.add_dependency 'ruote', ">= #{Ruote::Dm::VERSION}"
36
36
  gem.add_dependency 'dm-core'
37
+ gem.add_dependency 'dm-migrations'
37
38
  #gem.add_dependency 'dm-aggregates'
38
39
  #gem.add_dependency 'dm-types'
39
40
  gem.add_development_dependency 'yard'
@@ -48,33 +49,30 @@ Jeweler::GemcutterTasks.new
48
49
  #
49
50
  # DOC
50
51
 
51
- begin
52
-
53
- require 'yard'
52
+ #
53
+ # make sure to have rdoc 2.5.x to run that
54
+ #
55
+ require 'rake/rdoctask'
56
+ Rake::RDocTask.new do |rd|
54
57
 
55
- YARD::Rake::YardocTask.new do |doc|
56
- doc.options = [
57
- '-o', 'html/ruote-dm', '--title',
58
- "ruote-dm #{Ruote::Dm::VERSION}"
59
- ]
60
- end
58
+ rd.main = 'README.rdoc'
59
+ rd.rdoc_dir = 'rdoc/ruote-dm_rdoc'
61
60
 
62
- rescue LoadError
61
+ rd.rdoc_files.include(
62
+ 'README.rdoc', 'CHANGELOG.txt', 'CREDITS.txt', 'lib/**/*.rb')
63
63
 
64
- task :yard do
65
- abort "YARD is not available : sudo gem install yard"
66
- end
64
+ rd.title = "ruote-dm #{Ruote::Dm::VERSION}"
67
65
  end
68
66
 
69
67
 
70
68
  #
71
69
  # TO THE WEB
72
70
 
73
- task :upload_website => [ :clean, :yard ] do
71
+ task :upload_rdoc => [ :clean, :rdoc ] do
74
72
 
75
73
  account = 'jmettraux@rubyforge.org'
76
74
  webdir = '/var/www/gforge-projects/ruote'
77
75
 
78
- sh "rsync -azv -e ssh html/ruote-dm #{account}:#{webdir}/"
76
+ sh "rsync -azv -e ssh rdoc/ruote-dm_rdoc #{account}:#{webdir}/"
79
77
  end
80
78
 
data/TODO.txt CHANGED
@@ -5,11 +5,12 @@
5
5
  [o] `--> init _rev at 1 (like ruote-redis)
6
6
  [o] `--> then investigate ct_X weaknesses (transactions ?)
7
7
  [o] `--> then investigate ct_X weaknesses
8
+ [x] storage.close
8
9
 
9
10
  [ ] storage : control #save result
10
11
  [ ] examine indices (index) (participant_name ?) perf perf perf
11
12
 
12
13
  [ ] write example on how to use active-record to "read" workitems
13
14
 
14
- [ ] crunner.sh 2 weakness
15
+ [x] crunner.sh 2 weakness... only weak on OSX
15
16
 
@@ -45,6 +45,7 @@ module Dm
45
45
  property :typ, String, :key => true, :required => true
46
46
  property :doc, Text, :length => 2**32 - 1, :required => true, :lazy => false
47
47
 
48
+ property :wfid, String, :index => true
48
49
  property :participant_name, String, :length => 512
49
50
 
50
51
  def to_h
@@ -175,22 +176,23 @@ module Dm
175
176
 
176
177
  q = { :typ => type }
177
178
 
178
- if l = opts[:limit]
179
- q[:limit] = l
180
- end
179
+ if l = opts[:limit]; q[:limit] = l; end
180
+ if s = opts[:skip]; q[:offset] = s; end
181
181
 
182
- if key
183
- q[:ide.like] = if m = key.source.match(/(.+)\$$/)
184
- "%#{m[1]}"
185
- elsif m = key.source.match(/^\^(.+)/)
186
- "#{m[1]}%"
187
- else
188
- "%#{key.source}%"
189
- end
190
- end
182
+ keys = key ? Array(key) : nil
183
+ q[:wfid] = keys if keys && keys.first.is_a?(String)
191
184
 
192
185
  DataMapper.repository(@repository) do
193
- Document.all(q).collect { |d| d.to_h }
186
+
187
+ return Document.all(q).count if opts[:count]
188
+
189
+ docs = Document.all(q)
190
+ docs = docs.reverse if opts[:descending]
191
+ docs = docs.collect { |d| d.to_h }
192
+
193
+ keys && keys.first.is_a?(Regexp) ?
194
+ docs.select { |doc| keys.find { |key| key.match(doc['_id']) } } :
195
+ docs
194
196
  end
195
197
  end
196
198
 
@@ -242,15 +244,15 @@ module Dm
242
244
  # A provision made for workitems, allow to query them directly by
243
245
  # participant name.
244
246
  #
245
- def by_participant (type, participant_name)
247
+ def by_participant (type, participant_name, opts)
246
248
 
247
249
  raise NotImplementedError if type != 'workitems'
248
250
 
249
- Document.all(
251
+ query = {
250
252
  :typ => type, :participant_name => participant_name
251
- ).collect { |d|
252
- d.to_h
253
- }
253
+ }.merge(opts)
254
+
255
+ Document.all(query).collect { |d| d.to_h }
254
256
  end
255
257
 
256
258
  # Querying workitems by field (warning, goes deep into the JSON structure)
@@ -268,6 +270,10 @@ module Dm
268
270
 
269
271
  def query_workitems (criteria)
270
272
 
273
+ cr = { :typ => 'workitems' }
274
+
275
+ return Document.all(cr).count if criteria['count']
276
+
271
277
  offset = criteria.delete('offset')
272
278
  limit = criteria.delete('limit')
273
279
 
@@ -276,8 +282,6 @@ module Dm
276
282
  pname =
277
283
  criteria.delete('participant_name') || criteria.delete('participant')
278
284
 
279
- cr = { :typ => 'workitems' }
280
-
281
285
  cr[:ide.like] = "%!#{wfid}" if wfid
282
286
  cr[:offset] = offset if offset
283
287
  cr[:limit] = limit if limit
@@ -290,7 +294,7 @@ module Dm
290
294
  ([ 'doc LIKE ?' ] * likes.size).join(' AND '), *likes
291
295
  ] unless likes.empty?
292
296
 
293
- Document.all(cr).collect { |d| d.to_h }
297
+ Document.all(cr).collect { |d| Ruote::Workitem.new(d.to_h) }
294
298
  end
295
299
 
296
300
  protected
@@ -304,10 +308,16 @@ module Dm
304
308
  :doc => Rufus::Json.encode(doc.merge(
305
309
  '_rev' => rev,
306
310
  'put_at' => Ruote.now_to_utc_s)),
311
+ :wfid => extract_wfid(doc),
307
312
  :participant_name => doc['participant_name']
308
313
  ).save!
309
314
  end
310
315
 
316
+ def extract_wfid (doc)
317
+
318
+ doc['wfid'] || (doc['fei'] ? doc['fei']['wfid'] : nil)
319
+ end
320
+
311
321
  def do_get (type, key)
312
322
 
313
323
  Document.first(:typ => type, :ide => key, :order => :rev.desc)
@@ -1,7 +1,7 @@
1
1
 
2
2
  module Ruote
3
3
  module Dm
4
- VERSION = '2.1.10'
4
+ VERSION = '2.1.11'
5
5
  end
6
6
  end
7
7
 
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{ruote-dm}
8
- s.version = "2.1.10"
8
+ s.version = "2.1.11"
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-06-15}
12
+ s.date = %q{2010-10-01}
13
13
  s.description = %q{datamapper storage for ruote (a ruby workflow engine)}
14
14
  s.email = %q{jmettraux@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -35,7 +35,7 @@ Gem::Specification.new do |s|
35
35
  s.rdoc_options = ["--charset=UTF-8"]
36
36
  s.require_paths = ["lib"]
37
37
  s.rubyforge_project = %q{ruote}
38
- s.rubygems_version = %q{1.3.5}
38
+ s.rubygems_version = %q{1.3.6}
39
39
  s.summary = %q{datamapper storage for ruote (a ruby workflow engine)}
40
40
  s.test_files = [
41
41
  "test/test.rb"
@@ -46,21 +46,24 @@ Gem::Specification.new do |s|
46
46
  s.specification_version = 3
47
47
 
48
48
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
49
- s.add_runtime_dependency(%q<ruote>, [">= 2.1.10"])
49
+ s.add_runtime_dependency(%q<ruote>, [">= 2.1.11"])
50
50
  s.add_runtime_dependency(%q<dm-core>, [">= 0"])
51
+ s.add_runtime_dependency(%q<dm-migrations>, [">= 0"])
51
52
  s.add_development_dependency(%q<yard>, [">= 0"])
52
53
  s.add_development_dependency(%q<rake>, [">= 0"])
53
54
  s.add_development_dependency(%q<jeweler>, [">= 0"])
54
55
  else
55
- s.add_dependency(%q<ruote>, [">= 2.1.10"])
56
+ s.add_dependency(%q<ruote>, [">= 2.1.11"])
56
57
  s.add_dependency(%q<dm-core>, [">= 0"])
58
+ s.add_dependency(%q<dm-migrations>, [">= 0"])
57
59
  s.add_dependency(%q<yard>, [">= 0"])
58
60
  s.add_dependency(%q<rake>, [">= 0"])
59
61
  s.add_dependency(%q<jeweler>, [">= 0"])
60
62
  end
61
63
  else
62
- s.add_dependency(%q<ruote>, [">= 2.1.10"])
64
+ s.add_dependency(%q<ruote>, [">= 2.1.11"])
63
65
  s.add_dependency(%q<dm-core>, [">= 0"])
66
+ s.add_dependency(%q<dm-migrations>, [">= 0"])
64
67
  s.add_dependency(%q<yard>, [">= 0"])
65
68
  s.add_dependency(%q<rake>, [">= 0"])
66
69
  s.add_dependency(%q<jeweler>, [">= 0"])
@@ -19,10 +19,12 @@ elsif ARGV.include?('-ls') || ARGV.include?('--ls')
19
19
  end
20
20
 
21
21
  DataMapper.setup(:default, 'postgres://localhost/ruote_test')
22
+ #DataMapper.setup(:default, 'mysql://root:root@localhost/ruote_test')
22
23
  #DataMapper.setup(:default, 'sqlite3::memory:')
23
24
  #DataMapper.setup(:default, 'sqlite3:ruote_test.db')
24
25
 
25
26
  #DataMapper.repository(:default) do
27
+ # require 'dm-migrations' # gem install dm-migrations
26
28
  # Ruote::Dm::Document.all.destroy! rescue nil
27
29
  # Ruote::Dm::Document.auto_upgrade!
28
30
  #end
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruote-dm
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.10
4
+ prerelease: false
5
+ segments:
6
+ - 2
7
+ - 1
8
+ - 11
9
+ version: 2.1.11
5
10
  platform: ruby
6
11
  authors:
7
12
  - John Mettraux
@@ -9,59 +14,83 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2010-06-15 00:00:00 +09:00
17
+ date: 2010-10-01 00:00:00 +09:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: ruote
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ">="
22
26
  - !ruby/object:Gem::Version
23
- version: 2.1.10
24
- version:
27
+ segments:
28
+ - 2
29
+ - 1
30
+ - 11
31
+ version: 2.1.11
32
+ type: :runtime
33
+ version_requirements: *id001
25
34
  - !ruby/object:Gem::Dependency
26
35
  name: dm-core
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ version: "0"
27
44
  type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
45
+ version_requirements: *id002
46
+ - !ruby/object:Gem::Dependency
47
+ name: dm-migrations
48
+ prerelease: false
49
+ requirement: &id003 !ruby/object:Gem::Requirement
30
50
  requirements:
31
51
  - - ">="
32
52
  - !ruby/object:Gem::Version
53
+ segments:
54
+ - 0
33
55
  version: "0"
34
- version:
56
+ type: :runtime
57
+ version_requirements: *id003
35
58
  - !ruby/object:Gem::Dependency
36
59
  name: yard
37
- type: :development
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
60
+ prerelease: false
61
+ requirement: &id004 !ruby/object:Gem::Requirement
40
62
  requirements:
41
63
  - - ">="
42
64
  - !ruby/object:Gem::Version
65
+ segments:
66
+ - 0
43
67
  version: "0"
44
- version:
68
+ type: :development
69
+ version_requirements: *id004
45
70
  - !ruby/object:Gem::Dependency
46
71
  name: rake
47
- type: :development
48
- version_requirement:
49
- version_requirements: !ruby/object:Gem::Requirement
72
+ prerelease: false
73
+ requirement: &id005 !ruby/object:Gem::Requirement
50
74
  requirements:
51
75
  - - ">="
52
76
  - !ruby/object:Gem::Version
77
+ segments:
78
+ - 0
53
79
  version: "0"
54
- version:
80
+ type: :development
81
+ version_requirements: *id005
55
82
  - !ruby/object:Gem::Dependency
56
83
  name: jeweler
57
- type: :development
58
- version_requirement:
59
- version_requirements: !ruby/object:Gem::Requirement
84
+ prerelease: false
85
+ requirement: &id006 !ruby/object:Gem::Requirement
60
86
  requirements:
61
87
  - - ">="
62
88
  - !ruby/object:Gem::Version
89
+ segments:
90
+ - 0
63
91
  version: "0"
64
- version:
92
+ type: :development
93
+ version_requirements: *id006
65
94
  description: datamapper storage for ruote (a ruby workflow engine)
66
95
  email: jmettraux@gmail.com
67
96
  executables: []
@@ -98,18 +127,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
98
127
  requirements:
99
128
  - - ">="
100
129
  - !ruby/object:Gem::Version
130
+ segments:
131
+ - 0
101
132
  version: "0"
102
- version:
103
133
  required_rubygems_version: !ruby/object:Gem::Requirement
104
134
  requirements:
105
135
  - - ">="
106
136
  - !ruby/object:Gem::Version
137
+ segments:
138
+ - 0
107
139
  version: "0"
108
- version:
109
140
  requirements: []
110
141
 
111
142
  rubyforge_project: ruote
112
- rubygems_version: 1.3.5
143
+ rubygems_version: 1.3.6
113
144
  signing_key:
114
145
  specification_version: 3
115
146
  summary: datamapper storage for ruote (a ruby workflow engine)