ruote-kit 2.1.10 → 2.1.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. data/.gitignore +2 -0
  2. data/CHANGELOG.txt +10 -0
  3. data/Gemfile +21 -5
  4. data/LICENSE.txt +20 -0
  5. data/README.rdoc +132 -80
  6. data/Rakefile +4 -15
  7. data/TODO.txt +12 -0
  8. data/config.ru +22 -14
  9. data/lib/ruote-kit/application.rb +46 -22
  10. data/lib/ruote-kit/helpers/json_helpers.rb +280 -0
  11. data/lib/ruote-kit/helpers/link_helpers.rb +117 -0
  12. data/lib/ruote-kit/helpers/misc_helpers.rb +35 -0
  13. data/lib/ruote-kit/helpers/pagination_helpers.rb +30 -0
  14. data/lib/ruote-kit/helpers/render_helpers.rb +39 -92
  15. data/lib/ruote-kit/public/_ruote/images/favicon.ico +0 -0
  16. data/lib/ruote-kit/public/_ruote/images/ruote.png +0 -0
  17. data/lib/ruote-kit/public/_ruote/images/ruote_buttons.png +0 -0
  18. data/lib/ruote-kit/public/_ruote/javascripts/jquery-1.4.2.min.js +154 -0
  19. data/lib/ruote-kit/public/_ruote/javascripts/rk.js +40 -0
  20. data/lib/ruote-kit/public/_ruote/javascripts/ruote-fluo-editor.js +548 -0
  21. data/lib/ruote-kit/public/_ruote/javascripts/ruote-fluo.js +32 -1
  22. data/lib/ruote-kit/public/_ruote/stylesheets/reset.css +53 -0
  23. data/lib/ruote-kit/public/_ruote/stylesheets/rk.css +355 -16
  24. data/lib/ruote-kit/public/_ruote/stylesheets/ruote-fluo-editor.css +108 -0
  25. data/lib/ruote-kit/resources/errors.rb +46 -43
  26. data/lib/ruote-kit/resources/expressions.rb +92 -35
  27. data/lib/ruote-kit/resources/participants.rb +53 -0
  28. data/lib/ruote-kit/resources/processes.rb +68 -36
  29. data/lib/ruote-kit/resources/schedules.rb +27 -0
  30. data/lib/ruote-kit/resources/workitems.rb +93 -31
  31. data/lib/ruote-kit/spec/ruote_helpers.rb +25 -16
  32. data/lib/ruote-kit/version.rb +3 -1
  33. data/lib/ruote-kit/views/_pagination.html.haml +38 -0
  34. data/lib/ruote-kit/views/_tree_editor.html.haml +52 -0
  35. data/lib/ruote-kit/views/error.html.haml +69 -0
  36. data/lib/ruote-kit/views/errors.html.haml +28 -12
  37. data/lib/ruote-kit/views/expression.html.haml +161 -30
  38. data/lib/ruote-kit/views/expressions.html.haml +26 -21
  39. data/lib/ruote-kit/views/http_error.html.haml +11 -0
  40. data/lib/ruote-kit/views/index.html.haml +4 -0
  41. data/lib/ruote-kit/views/layout.html.haml +52 -32
  42. data/lib/ruote-kit/views/participants.html.haml +79 -0
  43. data/lib/ruote-kit/views/process.html.haml +109 -42
  44. data/lib/ruote-kit/views/process_launched.html.haml +6 -2
  45. data/lib/ruote-kit/views/processes.html.haml +55 -24
  46. data/lib/ruote-kit/views/processes_new.html.haml +36 -0
  47. data/lib/ruote-kit/views/schedules.html.haml +42 -0
  48. data/lib/ruote-kit/views/workitem.html.haml +83 -29
  49. data/lib/ruote-kit/views/workitems.html.haml +42 -19
  50. data/lib/ruote-kit.rb +17 -88
  51. data/ruote-kit.gemspec +68 -80
  52. data/spec/it_has_an_engine.rb +69 -0
  53. data/spec/resources/errors_spec.rb +198 -270
  54. data/spec/resources/expressions_spec.rb +308 -52
  55. data/spec/resources/index_spec.rb +28 -16
  56. data/spec/resources/participants_spec.rb +102 -0
  57. data/spec/resources/processes_spec.rb +218 -104
  58. data/spec/resources/schedules_spec.rb +97 -0
  59. data/spec/resources/workitems_spec.rb +195 -100
  60. data/spec/ruote-kit_configure_spec.rb +32 -75
  61. data/spec/spec.opts +0 -1
  62. data/spec/spec_helper.rb +31 -92
  63. data/spec/webapp_helpers_spec.rb +309 -0
  64. metadata +87 -152
  65. data/lib/ruote-kit/configuration.rb +0 -83
  66. data/lib/ruote-kit/helpers/engine_helpers.rb +0 -24
  67. data/lib/ruote-kit/helpers/form_helpers.rb +0 -11
  68. data/lib/ruote-kit/helpers/launch_item_parser.rb +0 -59
  69. data/lib/ruote-kit/helpers/navigation_helpers.rb +0 -54
  70. data/lib/ruote-kit/helpers.rb +0 -9
  71. data/lib/ruote-kit/public/_ruote/images/bg.gif +0 -0
  72. data/lib/ruote-kit/public/_ruote/images/bg_button_left.gif +0 -0
  73. data/lib/ruote-kit/public/_ruote/images/bg_button_left_cancel.gif +0 -0
  74. data/lib/ruote-kit/public/_ruote/images/bg_button_left_submit.gif +0 -0
  75. data/lib/ruote-kit/public/_ruote/images/bg_button_right.gif +0 -0
  76. data/lib/ruote-kit/public/_ruote/javascripts/SimplyButtons.js +0 -191
  77. data/lib/ruote-kit/public/_ruote/javascripts/fluo-dial.js +0 -149
  78. data/lib/ruote-kit/public/_ruote/stylesheets/SimplyButtons.css +0 -226
  79. data/lib/ruote-kit/public/_ruote/stylesheets/base.css +0 -336
  80. data/lib/ruote-kit/public/_ruote/stylesheets/style.css +0 -393
  81. data/lib/ruote-kit/views/launch_process.html.haml +0 -19
  82. data/lib/ruote-kit/views/process_failed_to_launch.html.haml +0 -7
  83. data/lib/ruote-kit/views/resource_not_found.html.haml +0 -7
  84. data/spec/helpers/render_helpers_spec.rb +0 -214
  85. data/spec/ruote-kit_spec.rb +0 -4
  86. data/spec/views/expressions.html.haml_spec.rb +0 -31
  87. data/spec/views/launch_process.html.haml_spec.rb +0 -22
  88. data/spec/views/process.html.haml_spec.rb +0 -17
  89. data/spec/views/process_launched.html.haml_spec.rb +0 -16
  90. data/spec/views/processes.html.haml_spec.rb +0 -31
  91. data/spec/views/workitems.html.haml_spec.rb +0 -69
data/.gitignore CHANGED
@@ -1,8 +1,10 @@
1
1
  *.swp
2
2
  work*/
3
+ ruote_work*/
3
4
  .DS_Store
4
5
  .yardoc
5
6
  doc/*
6
7
  pkg/*
7
8
  .bundle/*
8
9
  nbproject/*
10
+ Gemfile.lock
data/CHANGELOG.txt ADDED
@@ -0,0 +1,10 @@
1
+
2
+ = ruote-kit - CHANGELOG.txt
3
+
4
+
5
+ == ruote-kit - 2.1.11 not yet released
6
+
7
+ - RuoteKit.run_worker(storage) will not return (since it will let the worker
8
+ run in the current thread)
9
+ - /participants resource
10
+
data/Gemfile CHANGED
@@ -1,28 +1,43 @@
1
+
1
2
  # Dependencies for ruote-kit
3
+
2
4
  source :gemcutter
3
5
 
4
6
  # ruote-kit itself
7
+
5
8
  gem 'bundler'
6
9
  gem 'sinatra'
7
10
  gem 'sinatra-respond_to'
8
11
  gem 'haml'
9
12
 
13
+ # more servers
14
+
15
+ gem 'thin'
16
+ # for rackup -s thin
17
+
10
18
  # json support
11
19
  #
12
20
  # you should choose one of the following three or add another backend supported
13
21
  # by Rufus::Json (http://github.com/jmettraux/rufus-json/)
14
22
  #
15
- # gem 'json_pure' # safest all-around choice
16
- # gem 'yajl-ruby' # the fastest, but using c code
17
- # gem 'json' # not bad, but using c code and sometimes broken
23
+ # gem 'json_pure' # safest all-around choice
24
+ # gem 'yajl-ruby' # the fastest, but using c code
25
+ # gem 'json' # not bad, but using c code and sometimes broken
26
+ # gem 'json-jruby' # for jruby
18
27
  #
19
28
  # needed, uses one of the above as backend
20
- gem 'rufus-json', '>= 0.2.3'
29
+
30
+ gem 'yajl-ruby', :require => 'yajl'
31
+ gem 'rufus-json', '>= 0.2.5'
21
32
 
22
33
  # ruote
23
- gem 'ruote', '>= 2.1.10'
34
+
35
+ gem 'ruote', '~> 2.1.11'
36
+ #gem 'ruote', :git => 'git://github.com/jmettraux/ruote.git', :branch => 'ruote2.1'
37
+ #gem 'ruote', :path => '~/w/ruote/'
24
38
 
25
39
  # Testing environment requirements
40
+
26
41
  group :test do
27
42
  gem 'rspec', :require => "spec"
28
43
  gem 'rack-test'
@@ -33,3 +48,4 @@ end
33
48
  group :build do
34
49
  gem 'jeweler'
35
50
  end
51
+
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009-2010 Kenneth Kalmer (Internet Exchange CC, Clear Planet Information Solutions Pty Ltd)
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ 'Software'), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
18
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
19
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
20
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc CHANGED
@@ -1,3 +1,4 @@
1
+
1
2
  = ruote-kit (RESTful ruote & middleware)
2
3
 
3
4
  * http://kit.rubyforge.org/ruote (soon)
@@ -13,41 +14,38 @@ Follow development:
13
14
  * http://opensourcery.co.za
14
15
  * @kennethkalmer on Twitter
15
16
 
16
- == Alpha Status
17
+ == Dependencies
17
18
 
18
- ruote-kit is under heavy development and will likely change violently over the
19
- coming weeks (albeit for the better).
19
+ ruote-kit uses Bundler[http://gembundler.com/] to setup and maintain its
20
+ environment. Before running ruote-kit for the first time you need to install
21
+ Bundler (gem install bundler) and then run:
20
22
 
21
- Dependencies you currently need are:
23
+ $ bundle install
22
24
 
23
- * bundler 0.9.5 or later (gem install bundler)
24
- * sinatra
25
- * sinatra-respond_to
26
- * haml
27
- * rufus-json[http://github.com/jmettraux/rufus-json] and a compatible backend
28
- * rspec (only to run the specs)
25
+ Bundler will download all the required gems and install them for you.
29
26
 
30
- ruote-kit uses bundler to setup and maintain its environment. Before running
31
- ruote-kit for the first time you need to install bundler and then run:
27
+ Have a look at the Gemfile if you want to see the various dependencies.
32
28
 
33
- $ bundle install
29
+ == Getting started quickly
34
30
 
35
- Bundler will download all the required gems and install them for you. To
36
- bundle the gems you can simply run 'bundle lock' and all the gems will be
37
- unpacked in .bundle
31
+ === Using the source
38
32
 
39
- == Getting started quickly
33
+ * Get the source files using git
34
+ $ git clone http://github.com/kennethkalmer/ruote-kit.git && cd ruote-kit
35
+ * Make sure every dependency is resolved
36
+ $ bundle install
37
+ * Get going
38
+ $ rackup
40
39
 
41
- === Using the RubyGem
40
+ === Using the RubyGem / Bundler
42
41
 
43
- * Install the gem and its dependencies
44
- $ gem install ruote-kit
45
42
  * You'll need an empty directory
46
43
  $ mkdir my-ruote-kit && cd my-ruote-kit
47
44
  * There are two files needed in that directory: Gemfile and config.ru
48
45
  * Gemfile
49
46
  source :gemcutter
50
- gem 'ruote-kit'
47
+ gem 'ruote', '~> 2.1.11'
48
+ gem 'ruote-kit', '~> 2.1.11'
51
49
  * config.ru
52
50
  begin
53
51
  # Try to require the preresolved locked set of gems.
@@ -60,32 +58,24 @@ unpacked in .bundle
60
58
  end
61
59
 
62
60
  # load json backend
63
- require 'yajl-ruby' # best choice as fastest, but uses a c module
61
+ require 'yajl-ruby' # fastest, but uses a c module
64
62
  # require 'json_pure' # should work everywhere
65
63
 
66
64
  require 'ruote-kit'
67
65
 
68
- RuoteKit.configure do |config|
69
- config.register { catchall }
66
+ RuoteKit.engine = Ruote::Engine.new(
67
+ Ruote::Worker.new(
68
+ Ruote::FsStorage.new('ruote_work')))
69
+
70
+ RuoteKit.engine.register do
71
+ catchall
70
72
  end
71
73
 
72
74
  use Rack::CommonLogger
73
75
  use Rack::Lint
74
76
 
75
77
  run RuoteKit::Application
76
- * Just to make sure every dependency is resolved
77
- $ bundle check
78
- * If there are missing dependencies (there shouldn't be any if the gem
79
- installation succeeded)
80
- $ bundle install
81
- * Get going
82
- $ rackup
83
-
84
- === Using the source
85
-
86
- * Get the source files using git
87
- $ git clone http://github.com/kennethkalmer/ruote-kit.git && cd ruote-kit
88
- * Make sure every dependency is resolved
78
+ * Install all needed gems
89
79
  $ bundle install
90
80
  * Get going
91
81
  $ rackup
@@ -104,17 +94,12 @@ rack middleware stack without issues.
104
94
 
105
95
  Example:
106
96
 
107
- RuoteKit.configure do |config|
108
- # make changes if needed
109
- # Register participants if needed
110
- config.register do
111
- participant :toto do |wi|
112
- # ...
113
- end
114
- # register the catchall participant if needed
115
- require 'ruote/part/storage_participant'
116
- catchall Ruote::StorageParticipant
117
- end
97
+ RuoteKit.engine = Ruote::Engine.new(
98
+ Ruote::Worker.new(
99
+ Ruote::FsStorage.new('ruote_work')))
100
+
101
+ RuoteKit.engine.register do
102
+ catchall
118
103
  end
119
104
 
120
105
 
@@ -127,23 +112,38 @@ See http://github.com/tosch/ruote-on-rails for an example Rails app.
127
112
 
128
113
  == Configuring ruote-kit & ruote
129
114
 
130
- ruote-kit can be configured using RuoteKit#configure, after which it will start
131
- the engine. From that point the engine is accessible through RuoteKit.engine.
115
+ ruote-kit itself needs only little configuration, the only thing to do is to
116
+ bind a ruote engine to use. That engine may be configured, see
117
+ http://ruote.rubyforge.org/configuration.html for details.
132
118
 
133
- Without any configuration ruote-kit will use file system persistence, and save
134
- the work in a sub-folder of the current working directory named +work_<env>+,
135
- where +env+ is the RACK_ENV or RAILS_ENV.
119
+ When using the source version, you'll have to edit the +config.ru+ file if you
120
+ want to change the engine configuration. It defaults to use file system
121
+ persistence and runs a
122
+ worker[http://ruote.rubyforge.org/configuration.html#worker] within the engine.
123
+ The persistence files will be stored in a sub directory called
124
+ "ruote_work_#{ENV}".
125
+
126
+ When using the gem version or plugging ruote-kit into your rack stack, you'll
127
+ have to bind the ruote engine to use yourself. See the examples above.
136
128
 
137
129
  === Registration of participants
138
130
 
139
- ruote participants may be registered within the block given to
140
- RuoteKit#configure by the RuoteKit::Configuration#register method. It expects a
141
- block containing of +participant+ and one or less +catchall+ calls (see example
142
- above).
131
+ ruote participants may be registered using the register method of the engine.
132
+ It expects a block containing of +participant+ and one or less +catchall+ calls.
133
+
134
+ require 'ruote/part/no_op_participant'
135
+
136
+ RuoteKit.engine.register do
137
+ participant 'no-op', Ruote::NoOpParticipant
138
+ catchall
139
+ end
143
140
 
144
141
  Note that all +participant+ calls after a +catchall+ one are pretty useless:
145
142
  The catchall will eat all their cookies.
146
143
 
144
+ If you want to learn more about ruote's participants, have a look at
145
+ http://ruote.rubyforge.org/participants.html .
146
+
147
147
  == The +workitems+ resource
148
148
 
149
149
  The +workitems+ resource relies on the Ruote::StorageParticipant. You'll have to
@@ -153,25 +153,65 @@ the resource. Example:
153
153
  require 'ruote/part/storage_participant'
154
154
  RuoteKit.engine.register_participant :storage, Ruote::StorageParticipant
155
155
 
156
- You may also use the catchall participant provided by RuoteKit. It's named '.+',
156
+ You may also use the catchall participant provided by ruote. It's named '.+',
157
157
  so it will catch all workitems for any participant mentioned in your workflow
158
158
  definitions which are not already caught by another (previously) registered
159
159
  participant. So make sure to register the catchall after your own participants.
160
160
  The catchall participant may be registered by calling +catchall+ within the
161
- block given to RuoteKit::Configuration#register (this will use
162
- Ruote::StorageParticipant as participant implementation, you may use any options
163
- of Ruote::Engine#register_participant to overwrite that default -- see the
164
- example above).
161
+ block given to Ruote::Engine#register (this will use Ruote::StorageParticipant
162
+ as participant implementation, you may use any options of
163
+ Ruote::Engine#register_participant to overwrite that default -- see the example
164
+ above).
165
165
 
166
166
  == Running workers
167
167
 
168
- If you're using ruote-kit as part of your rack stack you'll need to start at
169
- least one worker separately or the workflows won't be executed. You won't need
170
- more than one worker unless you are running hundreds of processes at the same
171
- time.
172
-
173
- To run a worker you need to setup a worker script similar to the rake example
174
- below:
168
+ Always make sure to have a running ruote
169
+ worker[http://ruote.rubyforge.org/configuration.html#worker] for your storage.
170
+ The shipped config.ru takes care of that, but if you use the gem version or use
171
+ ruote-kit as part of your rack stack, you'll need to make sure there is a
172
+ running worker.
173
+
174
+ Perhaps it's best to give some more explanations about the architecture of ruote
175
+ here. Ruote's engine class is shallow, just a few methods that insert launch and
176
+ reply orders in the storage and read it when querying for process statuses. You
177
+ see: The storage is important, it is used as communications backend between the
178
+ various parts of ruote. The engine class and the storage are not enough, though.
179
+ The real work is done by one or more workers which query the storage for things
180
+ to do (note: it is unlikely that you will ever need more than one worker for one
181
+ ruote instance; ruote isn't fast, but it's faster than most human processes, so
182
+ that you'll won't need more than one worker unless you are running hundreds of
183
+ processes at the same time ).
184
+
185
+ Ruote ships with one worker implementation (you won't need more) and various
186
+ different storages. Have a look at
187
+ http://ruote.rubyforge.org/configuration.html#storage for an overview.
188
+
189
+ In the most examples above, the worker instance is bound to the engine which
190
+ is given to RuoteKit.engine:
191
+
192
+ RuoteKit.engine = Ruote::Engine.new(
193
+ Ruote::Worker.new(
194
+ Ruote::FsStorage.new('ruote_work')))
195
+
196
+ That is fine, especially when there is only one instance of the app running or
197
+ the storage implementation supports multiple workers, because if there is more
198
+ than one instance of the app running, there will be more than one worker
199
+ operating on the same storage.
200
+
201
+ If you want to use a storage implementation which doesn't support multiple
202
+ workers (Ruote::FsStorage under Windows, for example), you should start a
203
+ dedicated worker in its own instance. In config.ru (or whereever you configure
204
+ the engine to be used by ruote-kit), instanciate the engine without a worker:
205
+
206
+ RuoteKit.engine = Ruote::Engine.new(
207
+ Ruote::FsStorage.new('ruote_work'))
208
+
209
+ ruote-kit or your rack app will start with no problems, you may even launch
210
+ processes, but they'll never show up under /_ruote/processes: There is no worker
211
+ which processes the launch requests stored in the storage.
212
+
213
+ To run a worker you need to setup a worker script similar to the rake task
214
+ example below:
175
215
 
176
216
  require 'rake'
177
217
  require 'ruote-kit'
@@ -179,22 +219,22 @@ below:
179
219
  desc "Run a ruote-kit worker"
180
220
  task :ruote_kit_worker do
181
221
 
182
- RuoteKit.configure do |config|
183
- # Setup your configuration
184
- end
185
-
186
- RuoteKit.run_worker!
222
+ RuoteKit.run_worker(Ruote::FsStorage.new('ruote_work'))
187
223
  end
188
224
 
189
- This will only work correctly if using the default file system persistence.
190
- Support for ruote-couch[http://github.com/jmettraux/ruote-couch] is coming
191
- soon.
225
+ Make sure to configure the storage in the same way as in the rest of the
226
+ application or you won't get what you expect ;-)
227
+
228
+ You also should consider using a separate worker instance when you're running
229
+ ruote-kit or you're rack app in an environment like Passenger: You won't be sure
230
+ the app runs all the time, so it's likely that scheduled events will be missed
231
+ (better: triggered too late). If you don't want to start a separate worker
232
+ process, configure Passenger in a way that your app won't be killed in a very
233
+ long time and make sure your storage implementation supports multiple workers.
192
234
 
193
235
  == Feedback & bug reports
194
236
 
195
- Please bear in mind that the project is still in its alpha days. Keep bug reports
196
- and suggestions limited to the google group and #ruote channel, at least for the
197
- time being.
237
+ Feedback and bug reports are welcome on the mailing-list[http://groups.google.com/group/openwferu-users], or on the #ruote IRC channel at Freenode.net.
198
238
 
199
239
  Please do not hesitate to come back with *any* feedback.
200
240
 
@@ -222,3 +262,15 @@ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
222
262
  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
223
263
  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
224
264
  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
265
+
266
+ == libraries used
267
+
268
+ - rack, http://rack.rubyforge.org/
269
+ - sinatra, http://www.sinatrarb.com/
270
+ - sinatra-respond_to, http://github.com/cehoffman/sinatra-respond_to
271
+ - haml, http://haml-lang.com/
272
+ - yajl-ruby, http://github.com/brianmario/yajl-ruby
273
+ - jquery, http://jquery.com/
274
+
275
+ many thanks to the authors and contributors
276
+
data/Rakefile CHANGED
@@ -5,7 +5,7 @@ require "rubygems"
5
5
  require "bundler"
6
6
  Bundler.setup(:default, :test, :build)
7
7
 
8
- require 'lib/ruote-kit/version'
8
+ require File.join(File.dirname(__FILE__), 'lib/ruote-kit/version')
9
9
 
10
10
  begin
11
11
  require 'jeweler'
@@ -15,25 +15,14 @@ begin
15
15
  gemspec.summary = 'ruote workflow engine, wrapped in a loving rack embrace'
16
16
  gemspec.description = 'ruote-kit is a RESTful Rack app for the ruote workflow engine'
17
17
  gemspec.email = 'kenneth.kalmer@gmail.com'
18
- gemspec.homepage = 'http://github.com/kennethkalmer/ruote-kit'
19
- gemspec.authors = ['kenneth.kalmer@gmail.com', 'John Mettraux']
18
+ gemspec.homepage = 'http://github.com/tosch/ruote-kit'
19
+ gemspec.authors = [ 'kenneth.kalmer@gmail.com', 'Torsten Schoenebaum', 'John Mettraux' ]
20
20
  gemspec.extra_rdoc_files.include '*.txt'
21
21
 
22
22
  gemspec.files.include 'lib/ruote-kit/public/**/*'
23
23
  gemspec.executables.clear
24
24
 
25
- gemspec.add_dependency 'bundler', '>=0.9.5'
26
- gemspec.add_dependency 'sinatra', '>=0.9.4'
27
- gemspec.add_dependency 'sinatra-respond_to', '>=0.4.0'
28
- gemspec.add_dependency 'haml', '>= 2.2.5'
29
- gemspec.add_dependency 'rufus-json', '>= 0.2.3'
30
- gemspec.add_dependency 'ruote', '>= 2.1.10'
31
- gemspec.add_development_dependency 'rake'
32
- gemspec.add_development_dependency 'rspec'
33
- gemspec.add_development_dependency 'jeweler'
34
- gemspec.add_development_dependency 'webrat'
35
- gemspec.add_development_dependency 'test-unit', '~> 1.2.3'
36
- gemspec.add_development_dependency 'rack-test'
25
+ gemspec.add_bundler_dependencies
37
26
  end
38
27
  Jeweler::GemcutterTasks.new
39
28
  rescue LoadError
data/TODO.txt ADDED
@@ -0,0 +1,12 @@
1
+
2
+ [o] fix re_apply issue https://gist.github.com/e68fcb4eef2ee66b9081
3
+ [o] pagination for /workitems
4
+ [o] pagination for /processes
5
+ [o] pagination for /errors
6
+ [o] PUT /expressions fluo-editor integration
7
+
8
+ [ ] error : replay_at_error OK but reply too
9
+ [ ] expression : re_apply OK but reply too
10
+
11
+ [ ] If-Match etag
12
+
data/config.ru CHANGED
@@ -1,16 +1,21 @@
1
1
 
2
+ # bundler
3
+
2
4
  begin
3
- # Try to require the preresolved locked set of gems.
5
+ # try to require the preresolved locked set of gems.
4
6
  require ::File.expand_path('.bundle/environment', __FILE__)
5
7
  rescue LoadError
6
- # Fall back on doing an unlocked resolve at runtime.
8
+ # fall back on doing an unlocked resolve at runtime.
7
9
  require 'rubygems'
8
10
  require 'bundler'
9
11
  Bundler.setup(:default)
10
12
  end
11
13
 
12
- # load json support
14
+
15
+ # json
16
+ #
13
17
  # try yajl-ruby first, and json after that
18
+
14
19
  begin
15
20
  require 'yajl'
16
21
  rescue LoadError
@@ -24,26 +29,29 @@ end
24
29
 
25
30
  require 'rufus-json'
26
31
 
27
- $:.unshift 'lib'
28
32
 
33
+ # ruote-kit
34
+
35
+ $:.unshift 'lib'
29
36
  require 'ruote-kit'
30
37
 
31
- # Chance to configure ruote-kit
32
- RuoteKit.configure do |config|
33
38
 
34
- # storage mode
35
- #config.mode = :transient
39
+ # ruote
36
40
 
37
- # run a worker
38
- config.run_worker = true
41
+ require 'ruote/storage/fs_storage'
39
42
 
40
- config.register do
41
- # With this rackup I bundle as catchall, making it easy to experiment
42
- catchall
43
- end
43
+ RuoteKit.engine = Ruote::Engine.new(
44
+ Ruote::Worker.new(
45
+ Ruote::FsStorage.new(
46
+ "ruote_work_#{RuoteKit.env}")))
47
+
48
+ RuoteKit.engine.register do
49
+ catchall
44
50
  end
45
51
 
46
52
 
53
+ # rack middlewares, business as usual...
54
+
47
55
  use Rack::CommonLogger
48
56
  use Rack::Lint
49
57
  use Rack::ShowExceptions
@@ -1,55 +1,79 @@
1
+
2
+ # license is MIT, see LICENSE.txt
3
+
1
4
  require 'sinatra/respond_to'
2
5
  require 'haml'
3
6
 
4
- Sinatra::Application.register Sinatra::RespondTo
5
-
6
7
  module RuoteKit
7
8
  class Application < Sinatra::Application
8
9
 
9
- # Delay these a bit
10
+ register Sinatra::RespondTo
11
+
12
+ # delay these a bit
13
+
10
14
  configure do
11
- # We want to support Rails
12
- if defined?( Rails )
15
+
16
+ # we want to support Rails
17
+
18
+ if defined?(Rails)
13
19
  set :environment, Rails.env
14
20
  disable :raise_errors unless Rails.env == 'development'
15
21
  end
16
-
17
- RuoteKit.ensure_engine!
18
22
  end
19
23
 
20
- set :views, File.join( File.dirname( __FILE__), 'views' )
24
+ set :limit, 100
25
+
26
+ set :views, File.join(File.dirname(__FILE__), 'views')
21
27
 
22
- use Rack::Static, :urls => ['/_ruote/images', '/_ruote/javascripts', '/_ruote/stylesheets'], :root => File.join( File.dirname(__FILE__), 'public' )
23
- use Rack::MethodOverride
28
+ use(
29
+ Rack::Static,
30
+ :urls => %w[ /_ruote/images /_ruote/javascripts /_ruote/stylesheets ],
31
+ :root => File.join(File.dirname(__FILE__), 'public'))
32
+ use(
33
+ Rack::MethodOverride)
34
+
35
+ Dir[File.join(File.dirname(__FILE__), 'helpers/*.rb')].each { |r| load r }
24
36
 
25
37
  helpers do
26
- include RuoteKit::Helpers::EngineHelpers
27
- include RuoteKit::Helpers::FormHelpers
28
- include RuoteKit::Helpers::LaunchItemParser
29
- include RuoteKit::Helpers::NavigationHelpers
38
+ include RuoteKit::Helpers::LinkHelpers
39
+ include RuoteKit::Helpers::JsonHelpers
40
+ include RuoteKit::Helpers::MiscHelpers
30
41
  include RuoteKit::Helpers::RenderHelpers
42
+ include RuoteKit::Helpers::PaginationHelpers
31
43
  end
32
44
 
33
45
  before do
34
- # We allow the Accept header to be set to 'application/json'
35
- format :json if env["HTTP_ACCEPT"] && env["HTTP_ACCEPT"] == "application/json"
46
+
47
+ # we allow the Accept header to be set to 'application/json'
48
+
49
+ if env['HTTP_ACCEPT'] && env['HTTP_ACCEPT'] == 'application/json'
50
+ format :json
51
+ end
36
52
  end
37
53
 
38
- unless defined?( Rails )
39
- # Handle 404's ourselves when not in Rails
54
+ unless defined?(Rails)
55
+
56
+ # handle 404s ourselves when not in Rails
57
+
40
58
  not_found do
41
- resource_not_found
59
+ http_error(404)
42
60
  end
43
61
  end
44
62
 
45
63
  get '/_ruote/?' do
64
+
46
65
  respond_to do |format|
47
- format.html { haml :index }
48
- format.json { json :misc, "ruote-kit" => "welcome", "version" => RuoteKit::VERSION }
66
+
67
+ format.html do
68
+ haml :index
69
+ end
70
+ format.json do
71
+ json :misc, 'ruote-kit' => 'welcome', 'version' => RuoteKit::VERSION
72
+ end
49
73
  end
50
74
  end
51
75
 
52
- Dir[ File.dirname(__FILE__) + '/resources/*.rb' ].each { |r| load r }
76
+ Dir[File.join(File.dirname(__FILE__), 'resources/*.rb')].each { |r| load r }
53
77
  end
54
78
  end
55
79