stasis 0.1.20 → 0.1.21

Sign up to get free protection for your applications and to get access to all the features.
data/bin/stasis CHANGED
@@ -16,12 +16,14 @@ options = slop.to_hash
16
16
  options.delete(:server) unless slop.server?
17
17
 
18
18
  if slop.development?
19
+ require 'stasis/dev_mode'
19
20
  Stasis::DevMode.new(Dir.pwd, options)
20
21
  elsif slop.only? && slop.public?
21
22
  Stasis.new(Dir.pwd, slop[:public], options).render(*slop[:only])
22
23
  elsif slop.only?
23
24
  Stasis.new(Dir.pwd, options).render(*slop[:only])
24
25
  elsif slop.server?
26
+ require 'stasis/server'
25
27
  Stasis::Server.new(Dir.pwd, options)
26
28
  elsif slop.public?
27
29
  Stasis.new(Dir.pwd, slop[:public], options).render(*(slop[:only].to_a))
data/lib/stasis.rb CHANGED
@@ -24,12 +24,12 @@ gem "tilt", "~> 1.3.3"
24
24
 
25
25
  $:.unshift File.dirname(__FILE__)
26
26
 
27
- # Require all Stasis library files.
27
+ # Require all Stasis library files, except for 'stasis/dev_mode' and
28
+ # 'stasis/server'. Those are demand-loaded when the corresponding command-line
29
+ # options are passed.
28
30
 
29
- require 'stasis/dev_mode'
30
31
  require 'stasis/options'
31
32
  require 'stasis/plugin'
32
- require 'stasis/server'
33
33
 
34
34
  require 'stasis/scope'
35
35
  require 'stasis/scope/action'
@@ -82,8 +82,9 @@ class Stasis
82
82
  load_paths unless options[:development]
83
83
 
84
84
  # Create plugin instances.
85
- @plugins = find_plugins.collect { |klass| klass.new(self) }
85
+ @plugins = Plugin.plugins.collect { |klass| klass.new(self) }
86
86
 
87
+ self.class.register_instance(self)
87
88
  load_controllers
88
89
  end
89
90
 
@@ -93,7 +94,7 @@ class Stasis
93
94
 
94
95
  # Reject paths that are directories or within the destination directory.
95
96
  @paths.reject! do |path|
96
- !File.file?(path) || path[0..@destination.length-1] == @destination
97
+ !File.file?(path) || path[0..@destination.length] == @destination+'/'
97
98
  end
98
99
 
99
100
  # Reject paths that are controllers.
@@ -270,13 +271,22 @@ class Stasis
270
271
  collect if render_options[:collect]
271
272
  end
272
273
 
274
+ def self.register_instance(inst)
275
+ @instances ||= []
276
+ @instances << inst
277
+ end
278
+
279
+ def add_plugin(plugin)
280
+ plugin = plugin.new(self)
281
+ plugins << plugin
282
+ controller._bind_plugin(plugin, :controller_method)
283
+ end
284
+
273
285
  # Add a plugin to all existing controller instances. This method should be called by
274
286
  # all external plugins.
275
287
  def self.register(plugin)
276
- ObjectSpace.each_object(::Stasis) do |stasis|
277
- plugin = plugin.new(stasis)
278
- stasis.plugins << plugin
279
- stasis.controller._bind_plugin(plugin, :controller_method)
288
+ @instances.each do |stasis|
289
+ stasis.add_plugin(plugin)
280
290
  end
281
291
  end
282
292
 
@@ -296,15 +306,4 @@ class Stasis
296
306
  end
297
307
  priorities.uniq.sort.each(&block)
298
308
  end
299
-
300
- # Returns an `Array` of `Stasis::Plugin` classes.
301
- def find_plugins
302
- plugins = []
303
- ObjectSpace.each_object(Class) do |klass|
304
- if klass < ::Stasis::Plugin
305
- plugins << klass
306
- end
307
- end
308
- plugins
309
- end
310
309
  end
@@ -38,11 +38,12 @@ class Stasis
38
38
  if options[:development].is_a?(::Integer)
39
39
  mime_types = WEBrick::HTTPUtils::DefaultMimeTypes
40
40
  mime_types.store 'js', 'application/javascript'
41
-
42
- server = WEBrick::HTTPServer.new(
41
+
42
+ outfile = (RUBY_PLATFORM =~ /mswin|mingw/) ? 'NUL:' : '/dev/null'
43
+ server = WEBrick::HTTPServer.new(
43
44
  :AccessLog => [ nil, nil ],
44
45
  :DocumentRoot => @stasis.destination,
45
- :Logger => WEBrick::Log.new("/dev/null"),
46
+ :Logger => WEBrick::Log.new(outfile),
46
47
  :MimeTypes => mime_types,
47
48
  :Port => options[:development]
48
49
  )
data/lib/stasis/plugin.rb CHANGED
@@ -1,6 +1,15 @@
1
1
  class Stasis
2
2
  class Plugin
3
- class <<self
3
+ class << self
4
+
5
+ def inherited(subclass)
6
+ @plugins ||= []
7
+ @plugins << subclass
8
+ end
9
+
10
+ def plugins
11
+ (@plugins || []).dup
12
+ end
4
13
 
5
14
  # `Hash` -- Keys are the "bind as" method names and values are the actual method
6
15
  # names on the `Plugin` instance.
@@ -1,4 +1,5 @@
1
1
  require 'spec_helper'
2
+ require 'stasis/server'
2
3
 
3
4
  describe Stasis::Server do
4
5
 
data/stasis.gemspec CHANGED
@@ -6,7 +6,7 @@ $:.unshift lib unless $:.include?(lib)
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "stasis"
9
- s.version = '0.1.20'
9
+ s.version = '0.1.21'
10
10
  s.platform = Gem::Platform::RUBY
11
11
  s.authors = [ 'Winton Welsh' ]
12
12
  s.email = [ 'mail@wintoni.us' ]
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stasis
3
3
  version: !ruby/object:Gem::Version
4
- hash: 51
4
+ hash: 49
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 20
10
- version: 0.1.20
9
+ - 21
10
+ version: 0.1.21
11
11
  platform: ruby
12
12
  authors:
13
13
  - Winton Welsh
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-02-19 00:00:00 Z
18
+ date: 2012-03-28 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  version_requirements: &id001 !ruby/object:Gem::Requirement