wd_sinatra 0.2.6 → 0.3.0

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.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Weasel Diesel Sinatra Changelog
2
2
 
3
+ ## 0.3.0
4
+
5
+ * Added a service generator using thor. `$ thor :service get /foo/bar foo_bar.rb` (Thanks DrNic)
6
+
3
7
  ## 0.2.6
4
8
 
5
9
  * Added a few basic disabled settings for newrelic and airbrake.
data/README.md CHANGED
@@ -42,6 +42,16 @@ While it's a nice feature to have, a lot of developers like to do that
42
42
  differently and it seems more sensitive to let them pick the way they
43
43
  like the most.
44
44
 
45
+
46
+ ### Generating a new service
47
+
48
+ You need to have thor installed for that, you might want to add it yo
49
+ your gemfile.
50
+
51
+ $ thor :service get /foo/bar foo_bar.rb
52
+
53
+ This command will create a service and a failing test for it.
54
+
45
55
  ### Console
46
56
 
47
57
  $ bundle exec bin/console
@@ -130,7 +140,6 @@ properly composed:
130
140
  TestApi.post '/people/:id', :id => 123
131
141
  ```
132
142
 
133
-
134
143
  ## Writing a service
135
144
 
136
145
  TODO see Weasel Diesel for now and the generated service example.
data/bin/wd_sinatra CHANGED
@@ -40,10 +40,9 @@ class WdSinatra < Thor::Group
40
40
  end
41
41
 
42
42
  def create_files
43
- copy_file "Rakefile", "#{name}/Rakefile"
44
- copy_file "Gemfile", "#{name}/Gemfile"
45
- copy_file "config.ru", "#{name}/config.ru"
46
- copy_file "Guardfile", "#{name}/Guardfile"
43
+ %W{Rakefile Gemfile config.ru Guardfile Thorfile}.each do |filename|
44
+ copy_file filename, "#{name}/#{filename}"
45
+ end
47
46
  end
48
47
 
49
48
  end
@@ -1,5 +1,5 @@
1
1
  module WD
2
2
  module Sinatra
3
- VERSION = "0.2.6"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
@@ -0,0 +1,59 @@
1
+ # encoding: utf-8
2
+ $:.unshift File.expand_path("../lib", __FILE__)
3
+ require 'bundler'
4
+ require 'active_support/inflector'
5
+
6
+ class Default < Thor
7
+ include Thor::Actions
8
+
9
+ desc "service VERB URI FILENAME", "Generate scaffolding for a new service"
10
+ def service(verb, route, path)
11
+ route = route.gsub(/^\//, "") # strip leading forward slash
12
+ path_without_suffix = path.gsub(/\.rb$/, "")
13
+ create_file(File.join("api", "#{path_without_suffix}.rb")) do
14
+ <<-RUBY.gsub(/^\s{6}/, '')
15
+ describe_service "#{route}" do |service|
16
+ service.formats :json
17
+ service.http_verb :#{verb.downcase}
18
+ service.disable_auth # on by default
19
+
20
+ # INPUT
21
+ service.param.string :name, :default => 'World', :doc => "The name of the person to greet."
22
+
23
+ # OUTPUT
24
+ service.response do |response|
25
+ response.object do |obj|
26
+ obj.string :message, :doc => "The greeting message sent back. Defaults to 'World'"
27
+ obj.datetime :at, :doc => "The timestamp of when the message was dispatched"
28
+ end
29
+ end
30
+
31
+ # DOCUMENTATION
32
+ service.documentation do |doc|
33
+ doc.overall "This service provides a simple hello world implementation example."
34
+ doc.example "<code>curl -I 'http://localhost:9292/hello_world?name=Matt'</code>"
35
+ end
36
+
37
+ # ACTION/IMPLEMENTATION
38
+ service.implementation do
39
+ halt 501, "Not Implemented, which is a pity, I'm sure"
40
+ end
41
+ end
42
+ RUBY
43
+ end
44
+
45
+ class_name = path_without_suffix.classify.gsub(/::/, '') # strip modules; just want a unique class name for spec
46
+ create_file(File.join("test", "integration", "#{path_without_suffix}_test.rb")) do
47
+ <<-RUBY.gsub(/^\s{6}/, '')
48
+ require 'test_helpers'
49
+
50
+ class #{class_name}Spec < MiniTest::Spec
51
+ it "performs request" do
52
+ TestApi.#{verb} "/#{route}", {}
53
+ assert_api_response
54
+ end
55
+ end
56
+ RUBY
57
+ end
58
+ end
59
+ end
@@ -1,5 +1,6 @@
1
1
  ENV['RACK_ENV'] ||= 'test'
2
2
  require 'test/unit'
3
+ require 'minitest/spec'
3
4
  require 'rack'
4
5
  require 'rack/test'
5
6
  require 'json'
metadata CHANGED
@@ -1,47 +1,60 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: wd_sinatra
3
- version: !ruby/object:Gem::Version
4
- version: 0.2.6
3
+ version: !ruby/object:Gem::Version
4
+ hash: 19
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Matt Aimonetti
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2012-06-13 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
17
+
18
+ date: 2012-06-20 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
15
21
  name: weasel_diesel
16
- requirement: &70297591787320 !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
17
24
  none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
31
+ version: "0"
22
32
  type: :runtime
23
- prerelease: false
24
- version_requirements: *70297591787320
25
- - !ruby/object:Gem::Dependency
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
26
35
  name: thor
27
- requirement: &70297591786900 !ruby/object:Gem::Requirement
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
28
38
  none: false
29
- requirements:
30
- - - ! '>='
31
- - !ruby/object:Gem::Version
32
- version: '0'
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
45
+ version: "0"
33
46
  type: :runtime
34
- prerelease: false
35
- version_requirements: *70297591786900
36
- description: Weasel-Diesel Sinatra app gem, allowing you to generate/update sinatra
37
- apps using the Weasel Diesel DSL
38
- email:
47
+ version_requirements: *id002
48
+ description: Weasel-Diesel Sinatra app gem, allowing you to generate/update sinatra apps using the Weasel Diesel DSL
49
+ email:
39
50
  - mattaimonetti@gmail.com
40
- executables:
51
+ executables:
41
52
  - wd_sinatra
42
53
  extensions: []
54
+
43
55
  extra_rdoc_files: []
44
- files:
56
+
57
+ files:
45
58
  - .gitignore
46
59
  - CHANGELOG.md
47
60
  - Gemfile
@@ -58,6 +71,7 @@ files:
58
71
  - templates/Gemfile
59
72
  - templates/Guardfile
60
73
  - templates/Rakefile
74
+ - templates/Thorfile
61
75
  - templates/api/hello_world.rb
62
76
  - templates/bin/console
63
77
  - templates/config.ru
@@ -133,27 +147,36 @@ files:
133
147
  - wd-sinatra.gemspec
134
148
  homepage: https://github.com/mattetti/wd_sinatra
135
149
  licenses: []
150
+
136
151
  post_install_message:
137
152
  rdoc_options: []
138
- require_paths:
153
+
154
+ require_paths:
139
155
  - lib
140
- required_ruby_version: !ruby/object:Gem::Requirement
156
+ required_ruby_version: !ruby/object:Gem::Requirement
141
157
  none: false
142
- requirements:
143
- - - ! '>='
144
- - !ruby/object:Gem::Version
145
- version: '0'
146
- required_rubygems_version: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - ">="
160
+ - !ruby/object:Gem::Version
161
+ hash: 3
162
+ segments:
163
+ - 0
164
+ version: "0"
165
+ required_rubygems_version: !ruby/object:Gem::Requirement
147
166
  none: false
148
- requirements:
149
- - - ! '>='
150
- - !ruby/object:Gem::Version
151
- version: '0'
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ hash: 3
171
+ segments:
172
+ - 0
173
+ version: "0"
152
174
  requirements: []
175
+
153
176
  rubyforge_project:
154
- rubygems_version: 1.8.16
177
+ rubygems_version: 1.8.18
155
178
  signing_key:
156
179
  specification_version: 3
157
- summary: Weasel-Diesel Sinatra app gem, allowing you to generate/update sinatra apps
158
- using the Weasel Diesel DSL
180
+ summary: Weasel-Diesel Sinatra app gem, allowing you to generate/update sinatra apps using the Weasel Diesel DSL
159
181
  test_files: []
182
+