serve 0.11.7 → 1.0.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.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