ruote-dm 2.1.10 → 2.1.11

Sign up to get free protection for your applications and to get access to all the features.
@@ -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)