serve 0.11.7 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.rdoc CHANGED
@@ -1,5 +1,17 @@
1
1
  = Change Log
2
2
 
3
+ == 1.0.0 (November 3, 2010)
4
+
5
+ * Various tweaks and fixes [jlong]
6
+ * Added `serve convert` command for converting Compass projects. [revans]
7
+ * Added `serve create` command for bootstrapping projects. See README for details. Yay! [revans]
8
+ * Added option to use Thin if Mongrel isn't installed [benatkin]
9
+
10
+ == 0.11.7 (July 22, 2010)
11
+
12
+ * Use latest version of Rack
13
+ * Use Mongrel instead of Webrick by default
14
+
3
15
  == 0.11.6 (June 13, 2010)
4
16
 
5
17
  * Support for activesupport 3.x [railsjedi]
data/Gemfile CHANGED
@@ -1,14 +1,19 @@
1
- source "http://gemcutter.org"
1
+ source "http://rubygems.org"
2
2
 
3
- gem "jeweler"
4
- gem "rake"
5
- gem "rspec", "1.3.0"
6
- gem "rack", "1.1.0"
3
+ gem 'rake', '~> 0.8.7'
4
+ gem 'rack', '~> 1.2.1'
7
5
 
8
6
  # activesupport 2.x
9
- # gem "activesupport", "2.3.5"
7
+ # gem 'activesupport', '2.3.5'
10
8
 
11
- # activesupport 3.x
12
- gem "activesupport", ">= 3.0.0.beta"
13
- gem "tzinfo"
14
- gem "i18n"
9
+ # activesupport 3.0.x
10
+ gem 'activesupport', '~> 3.0.1'
11
+ gem 'tzinfo', '~> 0.3.23'
12
+ gem 'i18n', '~> 0.4.2'
13
+
14
+ group :development do
15
+ gem 'jeweler', '~> 1.4.0'
16
+ gem 'haml', '~> 3.0.23'
17
+ gem 'compass', '~> 0.10.6'
18
+ gem 'rspec', '~> 2.0.1'
19
+ end
data/Gemfile.lock CHANGED
@@ -1,31 +1,45 @@
1
1
  GEM
2
- remote: http://gemcutter.org/
2
+ remote: http://rubygems.org/
3
3
  specs:
4
- activesupport (3.0.0.beta4)
5
- gemcutter (0.5.0)
6
- json_pure
4
+ activesupport (3.0.1)
5
+ compass (0.10.6)
6
+ haml (>= 3.0.4)
7
+ diff-lcs (1.1.2)
8
+ gemcutter (0.6.1)
7
9
  git (1.2.5)
8
- i18n (0.4.1)
10
+ haml (3.0.23)
11
+ i18n (0.4.2)
9
12
  jeweler (1.4.0)
10
13
  gemcutter (>= 0.1.0)
11
14
  git (>= 1.2.5)
12
15
  rubyforge (>= 2.0.0)
13
- json_pure (1.4.3)
14
- rack (1.1.0)
16
+ json_pure (1.4.6)
17
+ rack (1.2.1)
15
18
  rake (0.8.7)
16
- rspec (1.3.0)
19
+ rspec (2.0.1)
20
+ rspec-core (~> 2.0.1)
21
+ rspec-expectations (~> 2.0.1)
22
+ rspec-mocks (~> 2.0.1)
23
+ rspec-core (2.0.1)
24
+ rspec-expectations (2.0.1)
25
+ diff-lcs (>= 1.1.2)
26
+ rspec-mocks (2.0.1)
27
+ rspec-core (~> 2.0.1)
28
+ rspec-expectations (~> 2.0.1)
17
29
  rubyforge (2.0.4)
18
30
  json_pure (>= 1.1.7)
19
- tzinfo (0.3.22)
31
+ tzinfo (0.3.23)
20
32
 
21
33
  PLATFORMS
22
34
  ruby
23
35
 
24
36
  DEPENDENCIES
25
- activesupport (>= 3.0.0.beta)
26
- i18n
27
- jeweler
28
- rack (= 1.1.0)
29
- rake
30
- rspec (= 1.3.0)
31
- tzinfo
37
+ activesupport (~> 3.0.1)
38
+ compass (~> 0.10.6)
39
+ haml (~> 3.0.23)
40
+ i18n (~> 0.4.2)
41
+ jeweler (~> 1.4.0)
42
+ rack (~> 1.2.1)
43
+ rake (~> 0.8.7)
44
+ rspec (~> 2.0.1)
45
+ tzinfo (~> 0.3.23)
data/LICENSE CHANGED
@@ -1,4 +1,5 @@
1
- Copyright (c) 2007-2009 John W. Long and Adam I. Williams
1
+ Copyright (c) 2007-2010 John W. Long and Adam I. Williams
2
+ Portions contributed by Robert Evans and others
2
3
 
3
4
  Permission is hereby granted, free of charge, to any person obtaining
4
5
  a copy of this software and associated documentation files (the
data/README.rdoc CHANGED
@@ -1,6 +1,7 @@
1
1
  = Serve - A Rapid Prototyping Framework for Web Applications
2
2
 
3
- Serve is a small Rack-based web server that makes it easy to serve HTML, ERB, or HAML from any directory.
3
+ Serve is a small Rack-based web server that makes it easy to serve HTML, ERB,
4
+ or HAML from any directory.
4
5
 
5
6
  But Serve is much more than a simple web server.
6
7
 
@@ -35,7 +36,8 @@ appropriate libraries are installed.
35
36
 
36
37
  == Installation
37
38
 
38
- Serve is distributed as a Ruby gem and can be installed from the command prompt. Just type:
39
+ Serve is distributed as a Ruby gem and can be installed from the command
40
+ prompt. Just type:
39
41
 
40
42
  gem install serve
41
43
 
@@ -53,7 +55,8 @@ You may also want to google "command prompt windows" if you are on a PC or
53
55
 
54
56
  == Usage
55
57
 
56
- Once the gem is installed the `serve` command will be available from the command prompt. To launch Serve, just type the command and press enter:
58
+ Once the gem is installed the `serve` command will be available from the
59
+ command prompt. To launch Serve, just type the command and press enter:
57
60
 
58
61
  serve
59
62
 
@@ -65,7 +68,8 @@ at the following address:
65
68
  Once the server is going it will output a running log of its activity. To
66
69
  stop the server at any time, type CTRL+C at the command prompt. By default the
67
70
  serve command serves up files from the current directory. To change this
68
- behavior, `cd` to the appropriate directory before starting serve or pass the directory as the final parameter to the command:
71
+ behavior, `cd` to the appropriate directory before starting serve or pass the
72
+ directory as the final parameter to the command:
69
73
 
70
74
  serve project_directory
71
75
 
@@ -80,57 +84,83 @@ computer) or port specify those options on the command line:
80
84
  serve 192.168.1.6:4000 # a custom IP and port
81
85
 
82
86
  For your convenience if the file "script/server" exists in the current
83
- directory the serve command will start that instead of launching a WEBrick
87
+ directory the serve command will start that instead of launching a Ruby Web
84
88
  server. You can specify the environment that you want to start the server with
85
89
  as an option on the command line:
86
90
 
87
91
  serve production # start script/server in production mode
88
92
 
89
93
 
90
- == Rack and Passenger
94
+ == Creating a New Serve Project
91
95
 
92
- Advanced users may also want to run Serve as a Rack application. To do this
93
- you will need to create a "config.ru" file in the root of your Serve project.
94
- Here is an example "config.ru" file:
96
+ For simple projects, you don't need to structure your files in a specific
97
+ way. All ERB, Haml, and Sass files will be processed wherever they are found
98
+ in the project root. But for more complex projects you may want to use Serve
99
+ with a `config.ru` file so that you can take advantage of other Rack
100
+ middleware and structure the project in a Rack compatible way.
95
101
 
96
- #\ -p 4000
97
-
98
- gem 'activesupport/all'
99
- gem 'serve'
100
-
101
- require 'serve'
102
- require 'serve/rack'
103
-
104
- # Middleware
105
- use Rack::ShowStatus # Nice looking 404s and other messages
106
- use Rack::ShowExceptions # Nice looking errors
107
-
108
- # The project root directory
109
- root = File.dirname(__FILE__)
110
-
111
- # Rack Application
112
- run Rack::Cascade.new([
113
- Serve::RackAdapter.new(root), # Handle ERB, HAML, and other Serve files
114
- Rack::Directory.new(root) # Directory listings and everything else
115
- ])
102
+ To create a new Rack-based Serve project in the "mockups" directory, type the
103
+ following on the command line:
104
+
105
+ serve create mockups # create a new project in the mockups directory
106
+
107
+ This will create a new project with the following directory structure:
108
+
109
+ mockups/
110
+ |
111
+ +-- config.ru # Rack configuration file
112
+ |
113
+ +-- compass.config # Compass configuration file
114
+ |
115
+ +-- public/ # Directories for static assets
116
+ | |
117
+ | +-- stylesheets/ # Compiled stylesheets
118
+ | |
119
+ | +-- images/
120
+ | |
121
+ | `-- javascripts/
122
+ |
123
+ +-- sass/ # Store Sass source files here
124
+ | |
125
+ | `-- application.sass # Example Sass file for application
126
+ |
127
+ +-- tmp/ # Needed for Passenger (mod_passenger)
128
+ | |
129
+ | `-- restart.txt
130
+ |
131
+ `-- views/ # Store your ERB, Haml, etc. here
132
+ |
133
+ +-- _layout.html.erb # Example layout
134
+ |
135
+ +-- hello.html.erb # Example view
136
+ |
137
+ `-- view_helpers.rb # Example view helpers
138
+
139
+ If you would like to generate the project with a specific JavaScript framework
140
+ you can do so with the <tt>-j</tt> flag:
141
+
142
+ serve create mockups -j prototype
143
+
144
+ Available frameworks are: <tt>jquery</tt>, <tt>jquery-ui</tt>,
145
+ <tt>mootools</tt>, <tt>prototype</tt>, and <tt>scriptaculous</tt>.
146
+
147
+ The `serve create` command can be executed multiple times or on an existing
148
+ project without negative consequences.
149
+
150
+
151
+ == Upgrading a Compass Project to a Serve Project
116
152
 
117
- Assuming that you have Rack installed, you will then be able to start your
118
- application with the `rackup` command. Type `rackup --help` for more
119
- information.
153
+ If you are a Compass user you can convert an existing Compass project to a
154
+ Serve project with the "convert" sub-command:
120
155
 
121
- If you would like to run Serve as a Rack application with Passenger you will
122
- need to create two additional directories: "tmp" and "public". In the temp
123
- directory put an empty "restart.txt" file. In the public directory put your
124
- static assets like images and javascripts (anything that does not require
125
- special processing by Serve). You may also want to replace the last four lines of "config.ru" with a single reference to the Serve::RackAdapter:
156
+ serve convert mockups
126
157
 
127
- run Serve::RackAdapter.new(root)
158
+ This will rename and move a number of files for you and will turn your Compass
159
+ project into a Serve project.
128
160
 
129
- By default, Passenger applications serve static assets from the "public"
130
- directory so there is no need to use the Rack::Directory application to handle
131
- those. If you need directory listings your Web server probably provides
132
- something specifically for this purpose and there is no need to rely on Rack
133
- for this.
161
+ Note that after upgrading a Compass project, you will no longer need to use
162
+ the `compass watch` command to generate your stylesheets. Your stylesheets
163
+ will be compiled on the fly with Serve.
134
164
 
135
165
 
136
166
  == File Types
@@ -149,7 +179,7 @@ redirect :: Redirects to the URL contained in the document
149
179
 
150
180
  == View Helpers
151
181
 
152
- If you drop a file called "view_helpers.rb" in the root of a project, you can
182
+ If you drop a file called "view_helpers.rb" in your views directory, you can
153
183
  define custom helpers for your Haml and ERB views. Just create a ViewHelpers
154
184
  module and define your helper methods there:
155
185
 
@@ -159,7 +189,8 @@ module and define your helper methods there:
159
189
  end
160
190
  end
161
191
 
162
- Helpers have full access to the request and response objects so you can
192
+ Helpers have full access to the request and response objects so you can easily
193
+ read and manipulate headers.
163
194
 
164
195
 
165
196
  == More Information
@@ -177,5 +208,5 @@ http://github.com/jlong/serve
177
208
  == License
178
209
 
179
210
  Serve is released under the MIT license and is copyright (c) 2007-2010
180
- John W. Long and Adam I. Williams. A copy of the MIT license can be found in
181
- the LICENSE file.
211
+ John W. Long and Adam I. Williams. Portions have been contributed by Robert
212
+ Evans and others. A copy of the MIT license can be found in the LICENSE file.
data/Rakefile CHANGED
@@ -6,6 +6,4 @@ load 'tasks/rdoc.rake'
6
6
  load 'tasks/rspec.rake'
7
7
  load 'tasks/undefine.rake'
8
8
 
9
- #Dir['tasks/**/*.rake'].each { |rake| load rake }
10
-
11
- task :default => :spec
9
+ task :default => :spec
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.11.7
1
+ 1.0.0
@@ -18,6 +18,12 @@ module Serve
18
18
  def run(args = ARGV)
19
19
  @options = parse(args)
20
20
  case
21
+ when options[:create]
22
+ require 'serve/project'
23
+ Serve::Project.new(options[:create]).create
24
+ when options[:convert]
25
+ require 'serve/project'
26
+ Serve::Project.new(options[:convert]).convert
21
27
  when options[:version]
22
28
  puts version
23
29
  when options[:help]
@@ -43,6 +49,8 @@ module Serve
43
49
  args = normalize_args(args)
44
50
  options[:help] = extract_boolean(args, '-h', '--help')
45
51
  options[:version] = extract_boolean(args, '-v', '--version')
52
+ options[:create] = extract_creation(args)
53
+ options[:convert] = extract_conversion(args)
46
54
  options[:environment] = extract_environment(args)
47
55
  options[:root] = extract_root(args)
48
56
  options[:address] = extract_address(args)
@@ -58,23 +66,34 @@ module Serve
58
66
  def help
59
67
  program = File.basename($0)
60
68
  [
69
+ "Serve is a rapid prototyping framework for Web applications. This is a basic ",
70
+ "help message containing pointers to more information.",
71
+ " ",
61
72
  "Usage:",
73
+ " #{program} -h/--help",
74
+ " #{program} -v/--version",
62
75
  " #{program} [port] [environment] [directory]",
63
76
  " #{program} [address:port] [environment] [directory]",
64
77
  " #{program} [address] [port] [environment] [directory]",
65
- " #{program} [options]",
78
+ " #{program} command [arguments] [options]",
79
+ " ",
80
+ "Examples:",
81
+ " #{program} # start server on port 4000",
82
+ " #{program} 2100 # start server on port 2100",
83
+ " #{program} create mockups # create a Serve project in mockups directory",
84
+ " #{program} convert mockups # convert a Compass project in mockups",
66
85
  " ",
67
86
  "Description:",
68
- " Starts a WEBrick server on the specified address and port with its document ",
69
- " root set to the current working directory. (Optionally, you can specify the ",
87
+ " Starts a web server on the specified address and port with its document root ",
88
+ " set to the current working directory. (Optionally, you can specify the ",
70
89
  " directory as the last parameter.) By default the command uses 0.0.0.0 for ",
71
90
  " the address and 4000 for the port. This means that once the command has ",
72
91
  " been started you can access the documents in the current directory with any ",
73
- " Web browser at:",
92
+ " web browser at:",
74
93
  " ",
75
94
  " http://localhost:4000/",
76
95
  " ",
77
- " If the haml, redcloth, or bluecloth gems are installed the command can serve ",
96
+ " If the haml, redcloth, or bluecloth gems are installed the command can handle ",
78
97
  " Haml, Sass, SCSS, Textile, and Markdown for documents with haml, sass, scss, ",
79
98
  " textile, and markdown file extensions.",
80
99
  " ",
@@ -82,15 +101,31 @@ module Serve
82
101
  " script will start that instead.",
83
102
  " ",
84
103
  " If a Rack configuration file (config.ru) exists in the current directory the ",
85
- " script will start that using the rackup command.",
104
+ " script will start that using the `rackup` command.",
86
105
  " ",
87
106
  " A Rails or Rack app will start with the environment specified or the ",
88
107
  " development environment if none is specified. Rails and Rack apps are ",
89
108
  " started by default on port 3000.",
90
109
  " ",
110
+ "Additional Commands:",
111
+ " In addition the functionality listed above the following commands are ",
112
+ " supported by Serve.",
113
+ " ",
114
+ " create",
115
+ " Creates a new Rack-based Serve project with support for Haml, Sass, and",
116
+ " Compass with the appropriate directory structure and configuration files.",
117
+ " ",
118
+ " convert",
119
+ " Converts an existing Compass project into a Rack-based Serve project.",
120
+ " ",
91
121
  "Options:",
92
- " -h, --help Show this message and quit.",
93
- " -v, --version Show the program version number and quit."
122
+ " -j, --javascript The name of the JavaScript Framework you'd like to use.",
123
+ " (Only valid for create and convert commands.)",
124
+ " -h, --help Show this message and quit.",
125
+ " -v, --version Show the program version number and quit.",
126
+ " ",
127
+ "Further information:",
128
+ " http://github.com/jlong/serve/blob/master/README.rdoc"
94
129
  ].join("\n")
95
130
  end
96
131
 
@@ -130,6 +165,36 @@ module Serve
130
165
  Dir.pwd
131
166
  end
132
167
 
168
+ def extract_javascript_framework(args, *opts)
169
+ framework = nil
170
+ opts.each do |opt|
171
+ framework = args.pop if args.delete(opt)
172
+ end
173
+ framework
174
+ end
175
+
176
+ def extract_creation(args)
177
+ if args.delete('create')
178
+ framework = extract_javascript_framework(args, '-j', '--javascript')
179
+ args.reverse!
180
+ {
181
+ :framework => framework,
182
+ :name => (args.first ? args.pop : 'mockups'),
183
+ :directory => (args.first ? File.expand_path(args.pop) : Dir.pwd)
184
+ }
185
+ end
186
+ end
187
+
188
+ def extract_conversion(args)
189
+ if args.delete('convert')
190
+ framework = extract_javascript_framework(args, '-j', '--javascript')
191
+ {
192
+ :directory => (args.first ? File.expand_path(args.pop) : Dir.pwd),
193
+ :framework => framework
194
+ }
195
+ end
196
+ end
197
+
133
198
  def rails_script_server
134
199
  @rails_server_script ||= options[:root] + '/script/server'
135
200
  end
@@ -165,10 +230,28 @@ module Serve
165
230
  Rack::Directory.new(root)
166
231
  ])
167
232
  end
168
- mongrel = Rack::Handler.get('mongrel')
169
- mongrel.run app, :Port => options[:port], :Host => options[:address] do |server|
170
- puts "Mongrel #{Mongrel::Const::MONGREL_VERSION} available at #{options[:address]}:#{options[:port]}"
233
+ begin
234
+ # Try Thin
235
+ thin = Rack::Handler.get('thin')
236
+ thin.run app, :Port => options[:port], :Host => options[:address] do |server|
237
+ puts "Thin #{Thin::VERSION::STRING} available at http://#{options[:address]}:#{options[:port]}"
238
+ end
239
+ rescue LoadError
240
+ begin
241
+ # Then Mongrel
242
+ mongrel = Rack::Handler.get('mongrel')
243
+ mongrel.run app, :Port => options[:port], :Host => options[:address] do |server|
244
+ puts "Mongrel #{Mongrel::Const::MONGREL_VERSION} available at http://#{options[:address]}:#{options[:port]}"
245
+ end
246
+ rescue LoadError
247
+ # Then WEBrick
248
+ puts "Install Mongrel or Thin for better performance."
249
+ webrick = Rack::Handler.get('webrick')
250
+ webrick.run app, :Port => options[:port], :Host => options[:address] do |server|
251
+ trap("INT") { server.shutdown }
252
+ end
253
+ end
171
254
  end
172
255
  end
173
256
  end
174
- end
257
+ end