wd_sinatra 1.0.6 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.travis.yml +1 -4
- data/CHANGELOG.md +20 -0
- data/Gemfile +0 -2
- data/LICENSE +4 -2
- data/README.md +28 -19
- data/bin/wd_sinatra +7 -25
- data/lib/wd_sinatra/app_loader.rb +12 -20
- data/lib/wd_sinatra/sinatra_ext.rb +8 -7
- data/lib/wd_sinatra/test_helpers.rb +1 -1
- data/lib/wd_sinatra/version.rb +2 -4
- data/templates/Gemfile +16 -11
- data/templates/{Rakefile → Rakefile.tt} +4 -4
- data/templates/Thorfile +14 -8
- data/templates/api/hello_world.rb +17 -10
- data/templates/bin/console +1 -1
- data/templates/config.ru.tt +6 -0
- data/templates/config/sinatra_config.rb.tt +50 -0
- data/templates/lib/{app.rb → app.rb.tt} +4 -1
- data/templates/lib/hooks.rb +25 -15
- data/templates/test/{test_helpers.rb → test_helpers.rb.tt} +8 -6
- data/test/test_helper.rb +0 -4
- data/test/ws_list_ext_test.rb +6 -6
- data/wd-sinatra.gemspec +11 -7
- metadata +72 -104
- data/templates/config.ru +0 -5
- data/templates/config/middleware.rb +0 -16
- data/templates/config/sinatra_config.rb +0 -18
- data/templates/lib/body_parser.rb +0 -24
- data/templates/lib/tasks/doc.rake +0 -39
- data/templates/lib/tasks/doc_generator/bootstrap/.gitignore +0 -4
- data/templates/lib/tasks/doc_generator/bootstrap/LICENSE +0 -176
- data/templates/lib/tasks/doc_generator/bootstrap/Makefile +0 -47
- data/templates/lib/tasks/doc_generator/bootstrap/README.md +0 -105
- data/templates/lib/tasks/doc_generator/bootstrap/bootstrap.css +0 -2467
- data/templates/lib/tasks/doc_generator/bootstrap/bootstrap.min.css +0 -356
- data/templates/lib/tasks/doc_generator/bootstrap/docs/assets/css/docs.css +0 -317
- data/templates/lib/tasks/doc_generator/bootstrap/docs/assets/ico/bootstrap-apple-114x114.png +0 -0
- data/templates/lib/tasks/doc_generator/bootstrap/docs/assets/ico/bootstrap-apple-57x57.png +0 -0
- data/templates/lib/tasks/doc_generator/bootstrap/docs/assets/ico/bootstrap-apple-72x72.png +0 -0
- data/templates/lib/tasks/doc_generator/bootstrap/docs/assets/ico/favicon.ico +0 -0
- data/templates/lib/tasks/doc_generator/bootstrap/docs/assets/img/bird.png +0 -0
- data/templates/lib/tasks/doc_generator/bootstrap/docs/assets/img/browsers.png +0 -0
- data/templates/lib/tasks/doc_generator/bootstrap/docs/assets/img/example-diagram-01.png +0 -0
- data/templates/lib/tasks/doc_generator/bootstrap/docs/assets/img/example-diagram-02.png +0 -0
- data/templates/lib/tasks/doc_generator/bootstrap/docs/assets/img/example-diagram-03.png +0 -0
- data/templates/lib/tasks/doc_generator/bootstrap/docs/assets/img/grid-18px.png +0 -0
- data/templates/lib/tasks/doc_generator/bootstrap/docs/assets/img/twitter-logo-no-bird.png +0 -0
- data/templates/lib/tasks/doc_generator/bootstrap/docs/assets/js/application.js +0 -52
- data/templates/lib/tasks/doc_generator/bootstrap/docs/assets/js/google-code-prettify/prettify.css +0 -94
- data/templates/lib/tasks/doc_generator/bootstrap/docs/assets/js/google-code-prettify/prettify.js +0 -28
- data/templates/lib/tasks/doc_generator/bootstrap/docs/index.html +0 -2037
- data/templates/lib/tasks/doc_generator/bootstrap/docs/javascript.html +0 -798
- data/templates/lib/tasks/doc_generator/bootstrap/examples/container-app.html +0 -119
- data/templates/lib/tasks/doc_generator/bootstrap/examples/fluid.html +0 -122
- data/templates/lib/tasks/doc_generator/bootstrap/examples/hero.html +0 -79
- data/templates/lib/tasks/doc_generator/bootstrap/js/bootstrap-alerts.js +0 -124
- data/templates/lib/tasks/doc_generator/bootstrap/js/bootstrap-buttons.js +0 -64
- data/templates/lib/tasks/doc_generator/bootstrap/js/bootstrap-dropdown.js +0 -55
- data/templates/lib/tasks/doc_generator/bootstrap/js/bootstrap-modal.js +0 -260
- data/templates/lib/tasks/doc_generator/bootstrap/js/bootstrap-popover.js +0 -90
- data/templates/lib/tasks/doc_generator/bootstrap/js/bootstrap-scrollspy.js +0 -107
- data/templates/lib/tasks/doc_generator/bootstrap/js/bootstrap-tabs.js +0 -80
- data/templates/lib/tasks/doc_generator/bootstrap/js/bootstrap-twipsy.js +0 -321
- data/templates/lib/tasks/doc_generator/bootstrap/js/tests/index.html +0 -40
- data/templates/lib/tasks/doc_generator/bootstrap/js/tests/unit/bootstrap-alerts.js +0 -41
- data/templates/lib/tasks/doc_generator/bootstrap/js/tests/unit/bootstrap-buttons.js +0 -42
- data/templates/lib/tasks/doc_generator/bootstrap/js/tests/unit/bootstrap-dropdown.js +0 -52
- data/templates/lib/tasks/doc_generator/bootstrap/js/tests/unit/bootstrap-modal.js +0 -151
- data/templates/lib/tasks/doc_generator/bootstrap/js/tests/unit/bootstrap-popover.js +0 -76
- data/templates/lib/tasks/doc_generator/bootstrap/js/tests/unit/bootstrap-scrollspy.js +0 -31
- data/templates/lib/tasks/doc_generator/bootstrap/js/tests/unit/bootstrap-tabs.js +0 -77
- data/templates/lib/tasks/doc_generator/bootstrap/js/tests/unit/bootstrap-twipsy.js +0 -81
- data/templates/lib/tasks/doc_generator/bootstrap/js/tests/vendor/qunit.css +0 -232
- data/templates/lib/tasks/doc_generator/bootstrap/js/tests/vendor/qunit.js +0 -1510
- data/templates/lib/tasks/doc_generator/bootstrap/lib/bootstrap.less +0 -26
- data/templates/lib/tasks/doc_generator/bootstrap/lib/forms.less +0 -479
- data/templates/lib/tasks/doc_generator/bootstrap/lib/mixins.less +0 -222
- data/templates/lib/tasks/doc_generator/bootstrap/lib/patterns.less +0 -1060
- data/templates/lib/tasks/doc_generator/bootstrap/lib/reset.less +0 -141
- data/templates/lib/tasks/doc_generator/bootstrap/lib/scaffolding.less +0 -139
- data/templates/lib/tasks/doc_generator/bootstrap/lib/tables.less +0 -224
- data/templates/lib/tasks/doc_generator/bootstrap/lib/type.less +0 -187
- data/templates/lib/tasks/doc_generator/bootstrap/lib/variables.less +0 -60
- data/templates/lib/tasks/doc_generator/template.erb +0 -156
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: bcfdd3f7270b9b8af82313f82834e1a552ce38b0
|
4
|
+
data.tar.gz: 329ae8fdcadd521ca9b2e9897bc345f3845dcdf1
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7de8b03a85a980d0c46f5745a41d40ee6bdaef49fada627559f8ebdfc047a81cc8d445c69d2177c9e34e30e8e13858f4cfe3ba20e37e0fe68ecb6fe538ad938f
|
7
|
+
data.tar.gz: 9b5d02e48b015b6c811927d80f3f81dc7bf8a361483490f3209232c904a3811853ea1d2e6865fbed5bb3599f1dc9ac04f4752c9c158d10bb0b11993b02e98363
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,25 @@
|
|
1
1
|
# Weasel Diesel Sinatra Changelog
|
2
2
|
|
3
|
+
## 2.0.0:
|
4
|
+
### Major Changes (Backwards Incompatible)
|
5
|
+
* Switch generated Sinatra app from classic to modular style.
|
6
|
+
* Set content_type depending on service.formats and http accept header.
|
7
|
+
* Drop support for ruby `1.8.7`.
|
8
|
+
|
9
|
+
### New Features
|
10
|
+
* Replace custom BodyParser with `rack-parser` middleware.
|
11
|
+
* Use `rerun` gem for auto code reloading in development/test.
|
12
|
+
* Wrap doc generation from WeaselDiesel::CLI. Documentation is
|
13
|
+
generated via thor now, instead of rake.
|
14
|
+
* Update doc generation to support optional namespaces.
|
15
|
+
* Simpler, more compact documentation template.
|
16
|
+
Removes `WD::Response::Element#to_html` and Bootstrap dependencies.
|
17
|
+
* Remove activesupport as a dependency, use inflecto for inflection support.
|
18
|
+
|
19
|
+
### Resolved issues
|
20
|
+
* Fix conflict with current Sinatra's `template`.
|
21
|
+
* Fix ul tag not rendering in doc generator.
|
22
|
+
|
3
23
|
## 1.0.6
|
4
24
|
* Updated various dependencies to get the latest versions of WD, Rack,
|
5
25
|
Sinatra to get the bug & security fixes.
|
data/Gemfile
CHANGED
data/LICENSE
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
MIT: http://mattaimonetti.mit-license.org
|
2
|
+
|
3
|
+
Copyright (c) 2013 Matt Aimonetti
|
2
4
|
|
3
5
|
MIT License
|
4
6
|
|
@@ -19,4 +21,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
19
21
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
22
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
23
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
24
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
[![Build Status](https://secure.travis-ci.org/mattetti/wd-sinatra.png?branch=master)](https://next.travis-ci.org/mattetti/wd-sinatra)
|
4
4
|
|
5
|
-
Weasel
|
5
|
+
Weasel Diesel Sinatra app gem, allowing you to generate/update sinatra apps using the [Weasel-Diesel](https://github.com/mattetti/Weasel-Diesel) DSL.
|
6
6
|
|
7
7
|
|
8
8
|
## Installation
|
@@ -38,16 +38,15 @@ The app is now ready to use, to start it you can use rack:
|
|
38
38
|
This will start the server on port 9292 and the default GET `/hello_world` service will be available at: `http://localhost:9292/hello_world'.
|
39
39
|
|
40
40
|
Note that the code won't be reloading automatically in the server when
|
41
|
-
you make a modification to the source code. For that,
|
42
|
-
|
43
|
-
|
44
|
-
differently and it seems more sensitive to let them pick the way they
|
45
|
-
like the most.
|
41
|
+
you make a modification to the source code. For that, we include
|
42
|
+
[rerun](https://github.com/alexch/rerun), which is only enabled in the
|
43
|
+
development and test environments. Use it like this:
|
46
44
|
|
45
|
+
$ bundle exec rerun -- rackup
|
47
46
|
|
48
47
|
### Generating a new service
|
49
48
|
|
50
|
-
You need to have thor installed for that, you might want to add it
|
49
|
+
You need to have thor and active support installed for that, you might want to add it to
|
51
50
|
your gemfile.
|
52
51
|
|
53
52
|
$ thor :service get /foo/bar foo_bar.rb
|
@@ -73,15 +72,19 @@ $abspath/../../bin/console
|
|
73
72
|
|
74
73
|
### ORM
|
75
74
|
|
76
|
-
By default the generated app doesn't come with any ORMs, but if you want to use ActiveRecord, you can use
|
77
|
-
|
75
|
+
By default the generated app doesn't come with any ORMs, but if you want to use ActiveRecord, you can use these gems:
|
76
|
+
|
77
|
+
* [wd_sinatra_active_record](https://github.com/mattetti/wd_sinatra_active_record)
|
78
|
+
* [wd_sinatra_sequel](https://github.com/kamui/wd_sinatra_sequel)
|
78
79
|
|
79
80
|
|
80
81
|
### Documentation generation
|
81
82
|
|
82
|
-
|
83
|
+
```bash
|
84
|
+
$ thor generate_doc <DESTINATION PATH>
|
85
|
+
```
|
83
86
|
|
84
|
-
To generate documentation for the APIs you created in the api folder.
|
87
|
+
To generate documentation for the APIs you created in the api folder. The destination is optional, 'doc' is the default.
|
85
88
|
|
86
89
|
### Testing
|
87
90
|
|
@@ -156,7 +159,7 @@ TODO see Weasel Diesel for now and the generated service example.
|
|
156
159
|
|
157
160
|
### app.rb
|
158
161
|
|
159
|
-
The `
|
162
|
+
The `lib/app.rb` file is being required after the environment is set
|
160
163
|
but before the models are loaded. This is the perfect place to load
|
161
164
|
custom libraries and set your datastore.
|
162
165
|
|
@@ -201,22 +204,28 @@ These hooks have access to the entire request context, including the
|
|
201
204
|
`service` being called. You can use the service `extra` option to set
|
202
205
|
some custom settings that can then be used in this pre dispatch hook.
|
203
206
|
|
204
|
-
In the default generated application,
|
205
|
-
|
206
|
-
|
207
|
+
In the default generated application, [rack-parser](https://github.com/achiu/rack-parser)
|
208
|
+
is used to parse the body of json requests. By default, this uses the `JSON`
|
209
|
+
to parse the body. This can be [overwritten](https://github.com/achiu/rack-parser#content-type-parsing)
|
210
|
+
if you choose.
|
211
|
+
|
212
|
+
Say you want to use [Oj](https://github.com/ohler55/oj) instead. To do
|
213
|
+
that, edit the `config/sinatra_config.rb` file and change the following:
|
207
214
|
|
208
215
|
```ruby
|
209
|
-
|
216
|
+
use Rack::Parser
|
210
217
|
```
|
211
218
|
|
212
219
|
to:
|
213
220
|
|
214
221
|
```ruby
|
215
|
-
|
222
|
+
use Rack::Parser, :parsers => {
|
223
|
+
'application/json' => proc { |body| Oj.dump body }
|
224
|
+
}
|
216
225
|
```
|
217
226
|
|
218
|
-
Of course, you'll need to require `
|
219
|
-
Gemfile if
|
227
|
+
Of course, you'll need to `require 'oj'` first and add it to your
|
228
|
+
Gemfile if use Bundler.
|
220
229
|
|
221
230
|
|
222
231
|
## Update
|
data/bin/wd_sinatra
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require "rubygems"
|
3
3
|
require "thor/group"
|
4
|
+
require "inflecto"
|
4
5
|
|
5
6
|
class WdSinatra < Thor::Group
|
6
7
|
include Thor::Actions
|
@@ -14,37 +15,18 @@ class WdSinatra < Thor::Group
|
|
14
15
|
File.expand_path(File.join('..', 'templates'), File.dirname(__FILE__))
|
15
16
|
end
|
16
17
|
|
17
|
-
def
|
18
|
-
directory "
|
18
|
+
def create_app
|
19
|
+
directory ".", "#{name}"
|
19
20
|
end
|
20
21
|
|
21
|
-
def
|
22
|
-
directory "config", "#{name}/config"
|
23
|
-
end
|
24
|
-
|
25
|
-
def create_bin_directory
|
26
|
-
directory "bin", "#{name}/bin"
|
22
|
+
def chmod_bin_console
|
27
23
|
chmod "#{name}/bin/console", 0755
|
28
24
|
end
|
29
25
|
|
30
|
-
|
31
|
-
|
26
|
+
protected
|
27
|
+
def name_const
|
28
|
+
@name_const ||= Inflecto.camelize(name.gsub(/\W/, '_').squeeze('_'))
|
32
29
|
end
|
33
|
-
|
34
|
-
def create_api_directory
|
35
|
-
directory "api", "#{name}/api"
|
36
|
-
end
|
37
|
-
|
38
|
-
def create_test_directory
|
39
|
-
directory "test", "#{name}/test"
|
40
|
-
end
|
41
|
-
|
42
|
-
def create_files
|
43
|
-
%W{Rakefile Gemfile config.ru Guardfile Thorfile}.each do |filename|
|
44
|
-
copy_file filename, "#{name}/#{filename}"
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
30
|
end
|
49
31
|
|
50
32
|
WdSinatra.start
|
@@ -1,10 +1,7 @@
|
|
1
|
-
if RUBY_VERSION =~ /1.8/
|
2
|
-
require 'rubygems'
|
3
|
-
require 'backports'
|
4
|
-
end
|
5
1
|
require 'bundler'
|
6
2
|
Bundler.setup
|
7
3
|
require 'logger'
|
4
|
+
require 'sinatra/base'
|
8
5
|
require 'weasel_diesel'
|
9
6
|
require 'wd_sinatra/ws_list_ext'
|
10
7
|
|
@@ -12,20 +9,18 @@ module WDSinatra
|
|
12
9
|
module AppLoader
|
13
10
|
module_function
|
14
11
|
|
15
|
-
# Boot
|
16
|
-
def server(
|
17
|
-
|
18
|
-
unless @
|
19
|
-
console(root_path)
|
20
|
-
load_middleware
|
21
|
-
set_sinatra_routes
|
12
|
+
# Boot server
|
13
|
+
def server(sinatra_app=nil)
|
14
|
+
raise StandardError, "WDSinatra::AppLoader#setup must be run first." unless root_path
|
15
|
+
unless @server_loaded
|
22
16
|
set_sinatra_settings
|
17
|
+
set_sinatra_routes(sinatra_app)
|
23
18
|
load_hooks
|
19
|
+
@server_loaded = true
|
24
20
|
end
|
25
21
|
end
|
26
22
|
|
27
|
-
|
28
|
-
def console(root_path)
|
23
|
+
def setup(root_path)
|
29
24
|
@root = root_path
|
30
25
|
unless @booted
|
31
26
|
set_env
|
@@ -84,7 +79,7 @@ module WDSinatra
|
|
84
79
|
def load_lib_dependencies
|
85
80
|
# WeaselDiesel is the web service DSL gem used to define services.
|
86
81
|
require 'weasel_diesel'
|
87
|
-
require 'sinatra'
|
82
|
+
require 'sinatra/base'
|
88
83
|
require 'wd_sinatra/sinatra_ext'
|
89
84
|
end
|
90
85
|
|
@@ -106,12 +101,9 @@ module WDSinatra
|
|
106
101
|
end
|
107
102
|
end
|
108
103
|
|
109
|
-
def set_sinatra_routes
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
def load_middleware
|
114
|
-
require File.join(root_path, 'config', 'middleware')
|
104
|
+
def set_sinatra_routes(sinatra_app)
|
105
|
+
sinatra_app ||= Sinatra::Base
|
106
|
+
WSList.sorted_for_sinatra_load.each{|api| api.load_sinatra_route(sinatra_app) }
|
115
107
|
end
|
116
108
|
|
117
109
|
def set_sinatra_settings
|
@@ -57,11 +57,11 @@ class WeaselDiesel
|
|
57
57
|
@request = app.request
|
58
58
|
@response = app.response
|
59
59
|
@service = service
|
60
|
-
|
60
|
+
|
61
61
|
begin
|
62
62
|
# raises an exception if the params are not valid
|
63
|
-
# otherwise update the app params with potentially new params (using default values)
|
64
|
-
# note that if a type is mentioned for a params, the object will be cast to this object type
|
63
|
+
# otherwise update the app params with potentially new params (using default values)
|
64
|
+
# note that if a type is mentioned for a params, the object will be cast to this object type
|
65
65
|
#
|
66
66
|
# removing the fake sinatra params since v1.3 added this. (should be eventually removed)
|
67
67
|
if app.params['splat']
|
@@ -73,7 +73,7 @@ class WeaselDiesel
|
|
73
73
|
@params = params_preprocessor_hook(@params) if self.respond_to?(:params_preprocessor_hook)
|
74
74
|
@params = ParamsVerification.validate!(@params, service.defined_params)
|
75
75
|
@params = params_postprocessor_hook(@params) if self.respond_to?(:params_postprocessor_hook)
|
76
|
-
rescue
|
76
|
+
rescue ParamsVerification::ParamError => e
|
77
77
|
LOGGER.error e.message
|
78
78
|
LOGGER.error "passed params: #{app.params.inspect}"
|
79
79
|
if self.respond_to?(:params_exception_handler)
|
@@ -89,7 +89,7 @@ class WeaselDiesel
|
|
89
89
|
|
90
90
|
# Forwarding some methods to the underlying app object
|
91
91
|
def_delegators :app, :settings, :halt, :compile_template, :session
|
92
|
-
|
92
|
+
|
93
93
|
private ##################################################
|
94
94
|
|
95
95
|
end # of RequestHandler
|
@@ -109,7 +109,8 @@ class WeaselDiesel
|
|
109
109
|
@alpha_handler
|
110
110
|
end
|
111
111
|
|
112
|
-
def load_sinatra_route
|
112
|
+
def load_sinatra_route(sinatra_app=nil)
|
113
|
+
sinatra_app ||= Sinatra::Base
|
113
114
|
service = self
|
114
115
|
upcase_verb = service.verb.to_s.upcase
|
115
116
|
unless ENV['DONT_PRINT_ROUTES']
|
@@ -120,7 +121,7 @@ class WeaselDiesel
|
|
120
121
|
# Define the route directly to save some object allocations on the critical path
|
121
122
|
# Note that we are using a private API to define the route and that unlike sinatra usual DSL
|
122
123
|
# we do NOT define a HEAD route for every GET route.
|
123
|
-
|
124
|
+
sinatra_app.send(:route, upcase_verb, self.url) do
|
124
125
|
env['wd.service'] = service
|
125
126
|
service.handler.dispatch(self)
|
126
127
|
end
|
data/lib/wd_sinatra/version.rb
CHANGED
data/templates/Gemfile
CHANGED
@@ -1,21 +1,26 @@
|
|
1
|
-
source "
|
1
|
+
source "https://rubygems.org"
|
2
2
|
|
3
|
-
# web engine
|
4
|
-
gem "sinatra", "1.3.2"
|
5
|
-
# service DSL
|
6
|
-
gem "weasel_diesel"
|
7
3
|
gem "wd_sinatra"
|
8
|
-
|
4
|
+
gem "inflecto"
|
5
|
+
# gem "wd_newrelic_rpm", :require => "newrelic_rpm"
|
9
6
|
|
10
|
-
gem
|
11
|
-
gem
|
7
|
+
gem "backports", ">= 2.3.0", :platforms => "ruby_18"
|
8
|
+
gem "json", :platforms => "ruby_18"
|
12
9
|
|
13
10
|
group :development, :test do
|
14
|
-
gem "rack-test", "0.6.1"
|
11
|
+
gem "rack-test", ">= 0.6.1"
|
15
12
|
# gem "foreman"
|
16
13
|
# gem "puma"
|
17
|
-
gem "minitest"
|
18
|
-
# gem "guard-puma"
|
14
|
+
gem "minitest", "~> 4.7.4"
|
19
15
|
# gem "guard-minitest"
|
20
16
|
gem "rake"
|
17
|
+
|
18
|
+
gem "rerun"
|
19
|
+
# You can optionally comment out libraries not matching your OS platform
|
20
|
+
# Even if you don't, only the gem supported by your OS will be used by rerun
|
21
|
+
gem "rb-fsevent", ">= 0.9.3" # Mac OS X
|
22
|
+
gem "rb-inotify", ">= 0.9" # Linux
|
23
|
+
gem "rb-kqueue", ">= 0.2" # FreeBSD, NetBSD, OpenBSD, and Darwin
|
24
|
+
require "rbconfig"
|
25
|
+
gem "wdm", ">= 0.1.0" if RbConfig::CONFIG["target_os"] =~ /mswin|mingw/i # Windows
|
21
26
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'rbconfig'
|
2
1
|
require 'rake/testtask'
|
3
2
|
require 'rubygems'
|
4
3
|
require 'bundler'
|
@@ -19,7 +18,7 @@ task :default => :test
|
|
19
18
|
task :setup_app do
|
20
19
|
ENV['DONT_CONNECT'] ||= 'true'
|
21
20
|
begin
|
22
|
-
WDSinatra::AppLoader.
|
21
|
+
WDSinatra::AppLoader.setup(root)
|
23
22
|
rescue Exception => e
|
24
23
|
if defined?(ActiveRecord) && e.is_a?(ActiveRecord::ConnectionNotEstablished)
|
25
24
|
ENV['DONT_CONNECT'] == 'true' ? print(e.message+"\n") : raise(e)
|
@@ -31,12 +30,13 @@ end
|
|
31
30
|
|
32
31
|
task :environment do
|
33
32
|
ENV['DONT_CONNECT'] = nil
|
34
|
-
WDSinatra::AppLoader.
|
33
|
+
WDSinatra::AppLoader.setup(root)
|
34
|
+
WDSinatra::AppLoader.server(<%= name_const %>)
|
35
35
|
end
|
36
36
|
|
37
37
|
desc "Print the available routes"
|
38
38
|
task :routes do
|
39
|
-
WDSinatra::AppLoader.
|
39
|
+
WDSinatra::AppLoader.setup(root)
|
40
40
|
print "Available routes: \n"
|
41
41
|
WSList.all.each do |service|
|
42
42
|
print "#{service.http_verb.upcase}\t#{service.url}\n"
|
data/templates/Thorfile
CHANGED
@@ -1,11 +1,17 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
$:.unshift File.expand_path("../lib", __FILE__)
|
3
3
|
require 'bundler'
|
4
|
-
require '
|
4
|
+
require 'inflecto'
|
5
|
+
require 'weasel_diesel/cli'
|
5
6
|
|
6
7
|
class Default < Thor
|
7
8
|
include Thor::Actions
|
8
|
-
|
9
|
+
|
10
|
+
desc "generate_doc DESTINATION_PATH", "Generate HTML documentation"
|
11
|
+
def generate_doc(destination_path="doc")
|
12
|
+
WeaselDiesel::CLI.new.generate_doc('api', destination_path)
|
13
|
+
end
|
14
|
+
|
9
15
|
desc "service VERB URI FILENAME", "Generate scaffolding for a new service"
|
10
16
|
def service(verb, route, path)
|
11
17
|
route = route.gsub(/^\//, "") # strip leading forward slash
|
@@ -16,10 +22,10 @@ class Default < Thor
|
|
16
22
|
service.formats :json
|
17
23
|
service.http_verb :#{verb.downcase}
|
18
24
|
service.disable_auth # on by default
|
19
|
-
|
25
|
+
|
20
26
|
# INPUT
|
21
27
|
service.param.string :name, :default => 'World', :doc => "The name of the person to greet."
|
22
|
-
|
28
|
+
|
23
29
|
# OUTPUT
|
24
30
|
service.response do |response|
|
25
31
|
response.object do |obj|
|
@@ -27,13 +33,13 @@ class Default < Thor
|
|
27
33
|
obj.datetime :at, :doc => "The timestamp of when the message was dispatched"
|
28
34
|
end
|
29
35
|
end
|
30
|
-
|
36
|
+
|
31
37
|
# DOCUMENTATION
|
32
38
|
service.documentation do |doc|
|
33
39
|
doc.overall "This service provides a simple hello world implementation example."
|
34
40
|
doc.example "<code>curl -I 'http://localhost:9292/hello_world?name=Matt'</code>"
|
35
41
|
end
|
36
|
-
|
42
|
+
|
37
43
|
# ACTION/IMPLEMENTATION
|
38
44
|
service.implementation do
|
39
45
|
halt 501, "Not Implemented, which is a pity, I'm sure"
|
@@ -41,8 +47,8 @@ class Default < Thor
|
|
41
47
|
end
|
42
48
|
RUBY
|
43
49
|
end
|
44
|
-
|
45
|
-
class_name =
|
50
|
+
|
51
|
+
class_name = Inflecto.classify(path_without_suffix).gsub(/::/, '') # strip modules; just want a unique class name for spec
|
46
52
|
create_file(File.join("test", "integration", "#{path_without_suffix}_test.rb")) do
|
47
53
|
<<-RUBY.gsub(/^\s{6}/, '')
|
48
54
|
require 'test_helpers'
|