serve 1.1.0 → 1.1.1

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,9 @@
1
1
  = Change Log
2
2
 
3
+ == 1.1.1 (June 7, 2011)
4
+ * Fix: Allow create command to work without Git. Closes #24. [jlong]
5
+ * Add javascript and stylesheet include helpers [zaeleus]
6
+
3
7
  == 1.1.0 (May 25, 2010)
4
8
 
5
9
  * Use latest versions of dependencies [jlong]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.0
1
+ 1.1.1
data/lib/serve/project.rb CHANGED
@@ -157,6 +157,8 @@ module Serve #:nodoc:
157
157
  def git_config(key)
158
158
  value = `git config #{key}`.chomp
159
159
  value.empty? ? nil : value
160
+ rescue
161
+ nil
160
162
  end
161
163
 
162
164
  # Normalize the path of the target directory
@@ -178,7 +178,7 @@ module Serve #:nodoc:
178
178
  end
179
179
 
180
180
  def image(name, options = {})
181
- image_tag(append_image_extension("/images/#{name}"), options)
181
+ image_tag(ensure_path(ensure_extension(name, 'png'), 'images'), options)
182
182
  end
183
183
 
184
184
  def javascript_tag(content = nil, html_options = {})
@@ -193,8 +193,7 @@ module Serve #:nodoc:
193
193
  end
194
194
 
195
195
  def link_to_function(name, *args, &block)
196
- html_options = {}
197
- html_options = args.pop if args.last.is_a? Hash
196
+ html_options = extract_options!(args)
198
197
  function = args[0] || ''
199
198
  onclick = "#{"#{html_options[:onclick]}; " if html_options[:onclick]}#{function}; return false;"
200
199
  href = html_options[:href] || '#'
@@ -243,6 +242,61 @@ module Serve #:nodoc:
243
242
  content_tag "a", name || email_address_obfuscated, html_options.merge({ "href" => "mailto:#{email_address}#{extras}" })
244
243
  end
245
244
  end
245
+
246
+ # Generates JavaScript script tags for the sources given as arguments.
247
+ #
248
+ # If the .js extension is not given, it will be appended to the source.
249
+ #
250
+ # Examples
251
+ # javascript_include_tag 'application' # =>
252
+ # <script src="/javascripts/application.js" type="text/javascript" />
253
+ #
254
+ # javascript_include_tag 'https://cdn/jquery.js' # =>
255
+ # <script src="https://cdn/jquery.js" type="text/javascript" />
256
+ #
257
+ # javascript_include_tag 'application', 'books' # =>
258
+ # <script src="/javascripts/application.js" type="text/javascript" />
259
+ # <script src="/javascripts/books.js" type="text/javascript" />
260
+ #
261
+ def javascript_include_tag(*sources)
262
+ options = extract_options!(sources)
263
+
264
+ sources.map do |source|
265
+ content_tag('script', '', {
266
+ 'type' => 'text/javascript',
267
+ 'src' => ensure_path(ensure_extension(source, 'js'), 'javascripts')
268
+ }.merge(options))
269
+ end.join("\n")
270
+ end
271
+
272
+ # Generates stylesheet link tags for the sources given as arguments.
273
+ #
274
+ # If the .css extension is not given, it will be appended to the source.
275
+ #
276
+ # Examples
277
+ # stylesheet_link_tag 'screen' # =>
278
+ # <link href="/stylesheets/screen.css" media="screen" rel="stylesheet" type="text/css" />
279
+ #
280
+ # stylesheet_link_tag 'print', :media => 'print' # =>
281
+ # <link href="/stylesheets/print.css" media="print" rel="stylesheet" type="text/css" />
282
+ #
283
+ # stylesheet_link_tag 'application', 'books', 'authors' # =>
284
+ # <link href="/stylesheets/application.css" media="screen" rel="stylesheet" type="text/css" />
285
+ # <link href="/stylesheets/books.css" media="screen" rel="stylesheet" type="text/css" />
286
+ # <link href="/stylesheets/authors.css" media="screen" rel="stylesheet" type="text/css" />
287
+ #
288
+ def stylesheet_link_tag(*sources)
289
+ options = extract_options!(sources)
290
+
291
+ sources.map do |source|
292
+ tag('link', {
293
+ 'rel' => 'stylesheet',
294
+ 'type' => 'text/css',
295
+ 'media' => 'screen',
296
+ 'href' => ensure_path(ensure_extension(source, 'css'), 'stylesheets')
297
+ }.merge(options))
298
+ end.join("\n")
299
+ end
246
300
 
247
301
  private
248
302
 
@@ -267,13 +321,55 @@ module Serve #:nodoc:
267
321
  " #{attrs.sort * ' '}" unless attrs.empty?
268
322
  end
269
323
  end
270
-
271
- def append_image_extension(name)
272
- unless name =~ /\.(.*?)$/
273
- name + '.png'
274
- else
275
- name
324
+
325
+ # Ensures a proper extension is appended to the filename.
326
+ #
327
+ # If a URI with the http or https scheme name is given, it is assumed
328
+ # to be absolute and will not be altered.
329
+ #
330
+ # Examples
331
+ # ensure_extension('screen', 'css') => 'screen.css'
332
+ # ensure_extension('screen.css', 'css') => 'screen.css'
333
+ # ensure_extension('jquery.min', 'js') => 'jquery.min.js'
334
+ # ensure_extension('https://cdn/jquery', 'js') => 'https://cdn/jquery'
335
+ #
336
+ def ensure_extension(source, extension)
337
+ if source =~ /^https?:/ || source.end_with?(".#{extension}")
338
+ return source
339
+ end
340
+
341
+ "#{source}.#{extension}"
342
+ end
343
+
344
+ # Ensures the proper path to the given source.
345
+ #
346
+ # If the source begins at the root of the public directory or is a URI
347
+ # with the http or https scheme name, it is assumed to be absolute and
348
+ # will not be altered.
349
+ #
350
+ # Examples
351
+ # ensure_path('screen.css', 'stylesheets') => '/stylesheets/screen.css'
352
+ # ensure_path('/screen.css', 'stylesheets') => '/screen.css'
353
+ # ensure_path('http://cdn/jquery.js', 'javascripts') => 'http://cdn/jquery.js'
354
+ #
355
+ def ensure_path(source, path)
356
+ if source =~ /^(\/|https?)/
357
+ return source
276
358
  end
359
+
360
+ File.join('', path, source)
361
+ end
362
+
363
+ # Returns a hash of options if they exist at the end of an array.
364
+ #
365
+ # This is useful when working with splats.
366
+ #
367
+ # Examples
368
+ # extract_options!([1, 2, { :name => 'sunny' }]) => { :name => 'sunny' }
369
+ # extract_options!([1, 2, 3]) => {}
370
+ #
371
+ def extract_options!(array)
372
+ array.last.instance_of?(Hash) ? array.pop : {}
277
373
  end
278
374
  end
279
375
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: serve
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 1
9
- - 0
10
- version: 1.1.0
9
+ - 1
10
+ version: 1.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - John W. Long
@@ -17,7 +17,7 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2011-05-25 00:00:00 -04:00
20
+ date: 2011-06-07 00:00:00 -04:00
21
21
  default_executable: serve
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency