sinatra-gen 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,9 @@
1
+ == 0.2.0 2008-12-23
2
+
3
+ * 1 major enhancement
4
+ * application actions can now be specified
5
+ on the command line. See README for more info.
6
+
1
7
  == 0.1.1 2008-12-16
2
8
 
3
9
  * 1 major enhancement
data/README.rdoc CHANGED
@@ -14,13 +14,41 @@ user into any specific frameworks/dev practices.
14
14
 
15
15
  Run:
16
16
 
17
- sinatra-gen [appname] [options]
17
+ sinatra-gen [appname] [actions] [options]
18
18
 
19
19
  e.g.
20
20
 
21
- sinatra-gen mysinatrapp --vendor --init --test=shoulda --views=haml
21
+ sinatra-gen mysinatrapp get:/ post:/:id --vendor --init --test=shoulda --views=haml
22
22
 
23
- Options (can also be obtained by running sinatra-gen with no arguments):
23
+ === Actions
24
+
25
+ !! NEW as of 0.2.0 (12/23/08)
26
+
27
+ For even faster app development you specify actions to include in your app when generating.
28
+ Actions are written out as
29
+
30
+ http_method:path
31
+
32
+ And are seperated by spaces. For example:
33
+
34
+ get:/ post:/:id put:/update/*
35
+
36
+ Will be added you your app as:
37
+
38
+ get '/' do
39
+ end
40
+
41
+ post '/:id' do
42
+ end
43
+
44
+ put '/update/*' do
45
+ end
46
+
47
+ It will also generate test skeletons in the test framework of your choosing.
48
+
49
+ === Options
50
+
51
+ (can also be obtained by running sinatra-gen with no arguments):
24
52
 
25
53
  -v, --version Show the sinatra-gen version number and quit.
26
54
  -d, --vendor Extract the latest sinatra to vendor/sinatra
@@ -47,4 +75,8 @@ To run the app without using the vendor option, the sinatra gem must be installe
47
75
 
48
76
  == INSTALL:
49
77
 
50
- sudo gem install sintra-gen
78
+ sudo gem install sintra-gen
79
+
80
+ You can also install directly from github:
81
+
82
+ sudo gem install quirkey-sinatra-gen -s http://gems.github.com
@@ -5,7 +5,7 @@ class SinatraAppGenerator < RubiGen::Base
5
5
 
6
6
  default_options :author => nil
7
7
 
8
- attr_accessor :app_name, :vendor, :tiny, :git, :git_init, :test_framework, :view_framework, :install_scripts, :cap
8
+ attr_accessor :app_name, :vendor, :tiny, :git, :git_init, :test_framework, :view_framework, :install_scripts, :cap, :actions
9
9
 
10
10
  def initialize(runtime_args, runtime_options = {})
11
11
  super
@@ -13,6 +13,7 @@ class SinatraAppGenerator < RubiGen::Base
13
13
  @destination_root = File.expand_path(args.shift)
14
14
  self.app_name = base_name
15
15
  extract_options
16
+ parse_actions(args)
16
17
  end
17
18
 
18
19
  def manifest
@@ -102,6 +103,9 @@ EOS
102
103
  app_name.classify
103
104
  end
104
105
 
106
+ def parse_actions(*action_args)
107
+ @actions = action_args.flatten.collect { |a| a.split(':', 2) }
108
+ end
105
109
 
106
110
  # Installation skeleton. Intermediate directories are automatically
107
111
  # created so don't sweat their absence here.
@@ -12,6 +12,14 @@ set :public, 'public'
12
12
  set :views, 'views'
13
13
  <%- end -%>
14
14
 
15
+ <%- unless actions.empty? -%>
16
+ <%- actions.each do |meth, path| -%>
17
+ <%= meth %> '<%= path %>' do
18
+ end
19
+
20
+ <%- end -%>
21
+ <%- else -%>
15
22
  get '/' do
16
23
  <%= view_framework -%> :index
17
- end
24
+ end
25
+ <%- end -%>
@@ -1,10 +1,19 @@
1
1
  require 'test_helper'
2
2
 
3
3
  describe '<%= klass_name %>' do
4
+
5
+ <%- unless actions.empty? -%>
6
+ <% actions.each do |meth, path| %>
7
+ it 'should <%= meth %> <%= path %>' do
8
+ <%= meth %>_it '<%= path %>'
9
+ @response.should be_ok
10
+ end
4
11
 
12
+ <%- end -%>
13
+ <%- else -%>
5
14
  it 'should load the index' do
6
15
  get_it '/'
7
16
  @response.should be_ok
8
17
  end
9
-
18
+ <%- end -%>
10
19
  end
@@ -3,6 +3,20 @@ require 'test_helper'
3
3
  class <%= klass_name -%>Test < Test::Unit::TestCase
4
4
 
5
5
  context "<%= klass_name -%>" do
6
+ <%- unless actions.empty? -%>
7
+ <% actions.each do |meth, path| %>
8
+ context "<%= meth %> <%= path %>" do
9
+ setup do
10
+ <%= meth %>_it '<%= path %>'
11
+ end
12
+
13
+ should "respond" do
14
+ assert @response.body
15
+ end
16
+ end
17
+
18
+ <%- end -%>
19
+ <%- else -%>
6
20
  context "getting the index" do
7
21
  setup do
8
22
  get_it '/'
@@ -12,6 +26,7 @@ class <%= klass_name -%>Test < Test::Unit::TestCase
12
26
  assert @response.body
13
27
  end
14
28
  end
29
+ <%- end -%>
15
30
  end
16
31
 
17
32
  end
@@ -2,9 +2,19 @@ require 'test_helper'
2
2
 
3
3
  describe '<%= klass_name %>' do
4
4
 
5
+ <%- unless actions.empty? -%>
6
+ <% actions.each do |meth, path| %>
7
+ it 'should <%= meth %> <%= path %>' do
8
+ <%= meth %>_it '<%= path %>'
9
+ should.be.ok
10
+ end
11
+
12
+ <%- end -%>
13
+ <%- else -%>
5
14
  it 'should load the index' do
6
15
  get_it '/'
7
16
  should.be.ok
8
17
  end
18
+ <%- end -%>
9
19
 
10
20
  end
@@ -2,8 +2,17 @@ require 'test_helper'
2
2
 
3
3
  class <%= klass_name -%>Test < Test::Unit::TestCase
4
4
 
5
+ <%- unless actions.empty? -%>
6
+ <% actions.each do |meth, path| %>
7
+ def test_<%= meth %>_<%= path.to_s.gsub(/[^a-z0-9\_]/, '') %>_should
8
+ <%= meth %>_it '<%= path %>'
9
+ end
10
+
11
+ <%- end -%>
12
+ <%- else -%>
5
13
  def test_my_default
6
14
  get_it '/'
7
15
  end
16
+ <%- end -%>
8
17
 
9
18
  end
data/lib/sinatra-gen.rb CHANGED
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__)) unless
2
2
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
3
 
4
4
  module SinatraGen
5
- VERSION = '0.1.1'
5
+ VERSION = '0.2.0'
6
6
  end
data/sinatra-gen.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{sinatra-gen}
5
- s.version = "0.1.1"
5
+ s.version = "0.2.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Aaron Quint"]
9
- s.date = %q{2008-12-16}
9
+ s.date = %q{2008-12-23}
10
10
  s.default_executable = %q{sinatra-gen}
11
11
  s.description = %q{sinatra-gen generates a common file structure and basic app files for a web app utilizing the sinatra framework. For more information on sinatra, check out http://sinatra.rubyforge.org}
12
12
  s.email = ["aaron@quirkey.com"]
@@ -11,20 +11,6 @@ class TestSinatraAppGenerator < Test::Unit::TestCase
11
11
  bare_teardown
12
12
  end
13
13
 
14
- # Some generator-related assertions:
15
- # assert_generated_file(name, &block) # block passed the file contents
16
- # assert_directory_exists(name)
17
- # assert_generated_class(name, &block)
18
- # assert_generated_module(name, &block)
19
- # assert_generated_test_for(name, &block)
20
- # The assert_generated_(class|module|test_for) &block is passed the body of the class/module within the file
21
- # assert_has_method(body, *methods) # check that the body has a list of methods (methods with parentheses not supported yet)
22
- #
23
- # Other helper methods are:
24
- # app_root_files - put this in teardown to show files generated by the test method (e.g. p app_root_files)
25
- # bare_setup - place this in setup method to create the APP_ROOT folder for each test
26
- # bare_teardown - place this in teardown method to destroy the TMP_ROOT or APP_ROOT folder after each test
27
-
28
14
  def test_generate_app_without_options
29
15
  run_generator('sinatra_app', [APP_ROOT], sources)
30
16
  assert_basic_paths_and_files
@@ -146,6 +132,28 @@ class TestSinatraAppGenerator < Test::Unit::TestCase
146
132
  assert_generated_file 'script/generate'
147
133
  end
148
134
 
135
+ def test_generate_app_with_actions_and_no_options
136
+ run_generator('sinatra_app', [APP_ROOT, 'get:/', 'post:/users/:id', 'put:/users/*'], sources)
137
+ assert_basic_paths_and_files
138
+ assert_generated_file 'app.rb' do |app_contents|
139
+ assert_match(/get '\/' do/, app_contents)
140
+ assert_match(/post '\/users\/\:id' do/, app_contents)
141
+ assert_match(/put '\/users\/\*' do/, app_contents)
142
+ end
143
+ end
144
+
145
+ def test_generate_app_with_actions_and_options
146
+ run_generator('sinatra_app', [APP_ROOT, 'get:/', 'post:/users/:id', '--tiny', 'put:/users/*'], sources)
147
+ assert_generated_file 'config.ru'
148
+ assert_generated_file 'app.rb'
149
+ assert_generated_file 'Rakefile'
150
+ assert_generated_file 'app.rb' do |app_contents|
151
+ assert_match(/get '\/' do/, app_contents)
152
+ assert_match(/post '\/users\/\:id' do/, app_contents)
153
+ assert_match(/put '\/users\/\*' do/, app_contents)
154
+ end
155
+ end
156
+
149
157
  private
150
158
  def assert_basic_paths_and_files
151
159
  assert_directory_exists 'lib'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra-gen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Quint
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-12-18 00:00:00 -05:00
12
+ date: 2008-12-23 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency