strelka 0.0.1.pre.219 → 0.0.1.pre.224

Sign up to get free protection for your applications and to get access to all the features.
data.tar.gz.sig CHANGED
Binary file
data/Rakefile CHANGED
@@ -31,6 +31,7 @@ hoespec = Hoe.spec 'strelka' do
31
31
  self.dependency 'uuidtools', '~> 2.1'
32
32
  self.dependency 'configurability', '~> 1.0'
33
33
  self.dependency 'pluginfactory', '~> 1.0'
34
+ self.dependency 'loggability', '~> 0.0'
34
35
 
35
36
  self.dependency 'hoe-deveiate', '~> 0.1', :developer
36
37
  self.dependency 'hoe-manualgen', '~> 0.3', :developer
data/bin/strelka CHANGED
@@ -293,7 +293,9 @@ class Strelka::CLICommand
293
293
  fork do
294
294
  self.log.debug " in the child."
295
295
  Strelka.load_config( self.options.config ) if self.options.config
296
- Kernel.load( path )
296
+ apps = Strelka::App.load( path )
297
+ self.log.debug " loaded: %p" % [ apps ]
298
+ apps.first.run
297
299
  end
298
300
 
299
301
  message "started. Waiting for shutdown."
data/lib/strelka.rb CHANGED
@@ -3,9 +3,11 @@
3
3
  # encoding: utf-8
4
4
 
5
5
  require 'mongrel2'
6
+ require 'loggability'
6
7
  require 'configurability'
7
8
  require 'configurability/config'
8
9
 
10
+
9
11
  # A Ruby application framework for Mongrel2[http://mongrel2.org/].
10
12
  #
11
13
  # == Author/s
@@ -16,20 +18,16 @@ require 'configurability/config'
16
18
  # :main: README.rdoc
17
19
  #
18
20
  module Strelka
21
+ extend Loggability
22
+
23
+ # Loggability API -- Set up this module as a log host.
24
+ log_as :strelka
19
25
 
20
26
  # Library version constant
21
27
  VERSION = '0.0.1'
22
28
 
23
29
  # Version-control revision constant
24
- REVISION = %q$Revision: 5bd05add55ad $
25
-
26
-
27
- require 'strelka/logging'
28
- extend Strelka::Logging
29
-
30
- # Combine Strelka, Mongrel2, and Configurability logging
31
- Mongrel2.logger = Strelka.logger
32
- Configurability.logger = Strelka.logger
30
+ REVISION = %q$Revision: 4f0cbd7b3070 $
33
31
 
34
32
  require 'strelka/constants'
35
33
  include Strelka::Constants
@@ -73,7 +71,7 @@ module Strelka
73
71
  ### Convenience method -- Load the Configurability::Config from +configfile+
74
72
  ### and install it.
75
73
  def self::load_config( configfile, defaults={} )
76
- Strelka.log.info "Loading universal config from %p" % [ configfile ]
74
+ self.log.info "Loading universal config from %p" % [ configfile ]
77
75
  self.config = Configurability::Config.load( configfile, defaults )
78
76
  self.config.install
79
77
  end
data/lib/strelka/app.rb CHANGED
@@ -4,6 +4,7 @@
4
4
 
5
5
  require 'rubygems' # For the Rubygems API
6
6
 
7
+ require 'loggability'
7
8
  require 'configurability'
8
9
  require 'mongrel2/handler'
9
10
  require 'strelka' unless defined?( Strelka )
@@ -13,13 +14,15 @@ require 'strelka/plugins'
13
14
 
14
15
  # The Strelka HTTP application base class.
15
16
  class Strelka::App < Mongrel2::Handler
16
- extend Configurability,
17
+ extend Loggability,
18
+ Configurability,
17
19
  Strelka::MethodUtilities,
18
20
  Strelka::PluginLoader
19
- include Strelka::Loggable,
20
- Strelka::Constants,
21
+ include Strelka::Constants,
21
22
  Strelka::ResponseHelpers
22
23
 
24
+ # Loggability API -- set up logging
25
+ log_to :strelka
23
26
 
24
27
  # Configurability API -- use the 'app' section of the config file.
25
28
  config_key :app
@@ -59,10 +62,10 @@ class Strelka::App < Mongrel2::Handler
59
62
  def self::run( appid=nil )
60
63
  appid ||= self.default_appid
61
64
 
62
- Strelka.logger.level = Logger::DEBUG if self.devmode?
63
- Strelka.logger.formatter = Strelka::Logging::ColorFormatter.new( Strelka.logger ) if $stderr.tty?
65
+ Loggability.level = :debug if self.devmode?
66
+ Loggability.format_with( :color ) if $stderr.tty?
64
67
 
65
- Strelka.log.info "Starting up with appid %p." % [ appid ]
68
+ self.log.info "Starting up with appid %p." % [ appid ]
66
69
  super( appid )
67
70
  end
68
71
 
@@ -167,6 +170,15 @@ class Strelka::App < Mongrel2::Handler
167
170
  end
168
171
 
169
172
 
173
+ ### Returns +true+ if the application has been configured to run in 'developer mode'.
174
+ ### Developer mode is mostly informational by default (it just makes logging more
175
+ ### verbose), but plugins and such might alter their behavior based on this setting.
176
+ def self::devmode?
177
+ return @devmode
178
+ end
179
+ singleton_method_alias :in_devmode?, :devmode?
180
+
181
+
170
182
  ### Configure the App. Override this if you wish to add additional configuration
171
183
  ### to the 'app' section of the config that will be passed to you when the config
172
184
  ### is loaded.
@@ -181,15 +193,6 @@ class Strelka::App < Mongrel2::Handler
181
193
  end
182
194
 
183
195
 
184
- ### Returns +true+ if the application has been configured to run in 'developer mode'.
185
- ### Developer mode is mostly informational by default (it just makes logging more
186
- ### verbose), but plugins and such might alter their behavior based on this setting.
187
- def self::devmode?
188
- return @devmode
189
- end
190
- singleton_method_alias :in_devmode?, :devmode?
191
-
192
-
193
196
  #
194
197
  # :section: Application declarative methods
195
198
  #
@@ -2,6 +2,8 @@
2
2
  # vim: set nosta noet ts=4 sw=4:
3
3
  #encoding: utf-8
4
4
 
5
+ require 'loggability'
6
+
5
7
  require 'strelka' unless defined?( Strelka )
6
8
  require 'strelka/app' unless defined?( Strelka::App )
7
9
  require 'strelka/plugins'
@@ -238,10 +240,15 @@ require 'strelka/authprovider'
238
240
  module Strelka::App::Auth
239
241
  extend Strelka::Plugin,
240
242
  Strelka::MethodUtilities,
241
- Configurability
242
- include Strelka::Loggable,
243
- Strelka::Constants
243
+ Configurability,
244
+ Loggability
245
+ include Strelka::Constants
246
+
247
+ # Loggability API -- set up logging under the 'strelka' log host
248
+ log_to :strelka
249
+
244
250
 
251
+ # Plugins API -- Set up load order
245
252
  run_before :routing, :restresources
246
253
  run_after :templating, :errors, :sessions
247
254
 
@@ -2,6 +2,8 @@
2
2
  # vim: set nosta noet ts=4 sw=4:
3
3
  # encoding: utf-8
4
4
 
5
+ require 'loggability'
6
+
5
7
  require 'strelka' unless defined?( Strelka )
6
8
  require 'strelka/app' unless defined?( Strelka::App )
7
9
 
@@ -80,10 +82,15 @@ require 'strelka/plugins'
80
82
  # routing strategies.
81
83
  #
82
84
  module Strelka::App::Routing
83
- extend Strelka::Plugin
84
- include Strelka::Loggable,
85
- Strelka::Constants
85
+ extend Loggability,
86
+ Strelka::Plugin
87
+ include Strelka::Constants
88
+
89
+
90
+ # Loggability API -- set up logging under the 'strelka' log host
91
+ log_to :strelka
86
92
 
93
+ # Plugins API -- set up load order
87
94
  run_after :templating, :filters, :parameters
88
95
 
89
96
 
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ require 'loggability'
4
+
3
5
  require 'strelka' unless defined?( Strelka )
4
6
  require 'strelka/app' unless defined?( Strelka::App )
5
7
 
@@ -80,20 +82,25 @@ require 'strelka/httpresponse/session'
80
82
  module Strelka::App::Sessions
81
83
  extend Strelka::Plugin,
82
84
  Strelka::MethodUtilities,
83
- Configurability
84
- include Strelka::Loggable,
85
- Strelka::Constants
85
+ Configurability,
86
+ Loggability
87
+ include Strelka::Constants
86
88
 
87
- # Default options to pass to the session object
88
- DEFAULT_OPTIONS = {}
89
+ # Loggability API -- set up logging under the 'strelka' log host
90
+ log_to :strelka
89
91
 
90
92
  # Configurability API -- specify which section of the config this class gets
91
93
  config_key :sessions
92
94
 
93
- # Specify load order; run as late as possible so other plugins can use the session
95
+ # Plugins API -- Specify load order; run as late as possible so other plugins
96
+ # can use the session
94
97
  run_after :templating, :filters, :parameters
95
98
 
96
99
 
100
+ # Default options to pass to the session object
101
+ DEFAULT_OPTIONS = {}
102
+
103
+
97
104
  ##
98
105
  # What session class to use (Class object)
99
106
  singleton_attr_writer :session_class
@@ -40,13 +40,16 @@ require 'strelka/mixins'
40
40
  #
41
41
  #
42
42
  class Strelka::AuthProvider
43
- extend Strelka::Delegation
43
+ extend Loggability,
44
+ Strelka::Delegation
44
45
  include PluginFactory,
45
- Strelka::Loggable,
46
46
  Strelka::Constants,
47
47
  Strelka::AbstractClass,
48
48
  Strelka::ResponseHelpers
49
49
 
50
+ # Loggability API -- set up logging under the 'strelka' log host
51
+ log_to :strelka
52
+
50
53
 
51
54
  ### PluginFactory API -- return the Array of directories to search for concrete
52
55
  ### AuthProvider classes.
@@ -1,6 +1,7 @@
1
1
  # -*- ruby -*-
2
2
  # vim: set nosta noet ts=4 sw=4:
3
3
 
4
+ require 'loggability'
4
5
  require 'configurability'
5
6
 
6
7
  require 'strelka' unless defined?( Strelka )
@@ -30,10 +31,10 @@ require 'strelka/mixins'
30
31
  # kmurgen: "MZj9+VhZ8C9+aJhmwp+kWBL76Vs="
31
32
  #
32
33
  class Strelka::AuthProvider::Basic < Strelka::AuthProvider
33
- extend Configurability,
34
+ extend Loggability,
35
+ Configurability,
34
36
  Strelka::MethodUtilities
35
- include Strelka::Constants,
36
- Strelka::Loggable
37
+ include Strelka::Constants
37
38
 
38
39
  # Configurability API - set the section of the config
39
40
  config_key :auth
@@ -2,6 +2,7 @@
2
2
  # vim: set nosta noet ts=4 sw=4:
3
3
 
4
4
  require 'ipaddr'
5
+ require 'loggability'
5
6
  require 'configurability'
6
7
 
7
8
  require 'strelka' unless defined?( Strelka )
@@ -19,12 +20,16 @@ require 'strelka/mixins'
19
20
  # - 127.0.0.0/8
20
21
  # - 10.5.3.0/22
21
22
  class Strelka::AuthProvider::HostAccess < Strelka::AuthProvider
23
+ extend Loggability
22
24
  include Configurability,
23
25
  Strelka::Constants,
24
- Strelka::Loggable,
25
26
  Strelka::MethodUtilities
26
27
 
27
28
 
29
+ # Loggability API -- set up logging under the 'strelka' log host
30
+ log_to :strelka
31
+
32
+
28
33
  # The default list of netblocks to allow
29
34
  DEFAULT_ALLOWED_NETBLOCKS = %w[127.0.0.0/8]
30
35
 
@@ -5,6 +5,7 @@
5
5
  require 'date'
6
6
  require 'time'
7
7
  require 'uri'
8
+ require 'loggability'
8
9
 
9
10
  require 'strelka' unless defined?( Strelka )
10
11
  require 'strelka/mixins'
@@ -21,7 +22,11 @@ require 'strelka/mixins'
21
22
  # reserved.
22
23
  #
23
24
  class Strelka::Cookie
24
- include Strelka::Loggable
25
+ extend Loggability
26
+
27
+ # Loggability API -- set up logging under the 'strelka' log host
28
+ log_to :strelka
29
+
25
30
 
26
31
  # The format of the date field
27
32
  COOKIE_DATE_FORMAT = '%a, %d %b %Y %H:%M:%S GMT'
@@ -5,6 +5,7 @@
5
5
  require 'yajl'
6
6
  require 'yaml'
7
7
  require 'uri'
8
+ require 'loggability'
8
9
 
9
10
  require 'mongrel2/httprequest'
10
11
  require 'strelka' unless defined?( Strelka )
@@ -14,10 +15,13 @@ require 'strelka/mixins'
14
15
 
15
16
  # An HTTP request class.
16
17
  class Strelka::HTTPRequest < Mongrel2::HTTPRequest
17
- include Strelka::Loggable,
18
- Strelka::Constants,
18
+ extend Loggability
19
+ include Strelka::Constants,
19
20
  Strelka::ResponseHelpers,
20
- Strelka::DataUtilities
21
+ Strelka::DataUtilities
22
+
23
+ # Loggability API -- set up logging under the 'strelka' log host
24
+ log_to :strelka
21
25
 
22
26
  # Set Mongrel2 to use Strelka's request class for HTTP requests
23
27
  register_request_type( self, *HTTP::RFC2616_VERBS )
@@ -152,6 +156,13 @@ class Strelka::HTTPRequest < Mongrel2::HTTPRequest
152
156
  end
153
157
 
154
158
 
159
+ ### A convenience method for redirecting a request to another URI.
160
+ def redirect( uri, perm=false )
161
+ code = perm ? HTTP::MOVED_PERMANENTLY : HTTP::MOVED_TEMPORARILY
162
+ finish_with( code, "redirect from #{self.uri.path} to #{uri}", :location => uri )
163
+ end
164
+
165
+
155
166
  #########
156
167
  protected
157
168
  #########
@@ -2,6 +2,7 @@
2
2
  # vim: set nosta noet ts=4 sw=4:
3
3
  # encoding: utf-8
4
4
 
5
+ require 'loggability'
5
6
  require 'strelka/mixins'
6
7
  require 'strelka/httprequest'
7
8
 
@@ -49,11 +50,15 @@ class Strelka::HTTPRequest
49
50
  # * Mahlon E. Smith <mahlon@martini.nu>
50
51
  #
51
52
  class AcceptParam
53
+ extend Loggability
52
54
  include Comparable,
53
- Strelka::Loggable,
54
55
  Strelka::AbstractClass
55
56
 
56
57
 
58
+ # Loggability API -- set up logging under the 'strelka' log host
59
+ log_to :strelka
60
+
61
+
57
62
  # The default quality value (weight) if none is specified
58
63
  Q_DEFAULT = 1.0
59
64
 
@@ -61,6 +61,14 @@ module Strelka::HTTPRequest::Session
61
61
  end
62
62
 
63
63
 
64
+ ### Purge the request's session from the session store.
65
+ def destroy_session
66
+ self.log.debug "Removing session id %s" % [ self.session.session_id ]
67
+ Strelka::App::Sessions.session_class.delete_session_data( self.session.session_id )
68
+ @session = nil
69
+ end
70
+
71
+
64
72
  ### Set the request's session object.
65
73
  def session=( new_session )
66
74
  new_session.namespace = self.session_namespace
@@ -2,15 +2,20 @@
2
2
  # vim: set nosta noet ts=4 sw=4:
3
3
  # encoding: utf-8
4
4
 
5
+ require 'loggability'
5
6
  require 'mongrel2/httpresponse'
6
7
  require 'strelka' unless defined?( Strelka )
7
8
  require 'strelka/cookieset'
8
9
 
9
10
  # An HTTP response class.
10
11
  class Strelka::HTTPResponse < Mongrel2::HTTPResponse
11
- include Strelka::Loggable,
12
- Strelka::Constants,
13
- Strelka::DataUtilities
12
+ extend Loggability
13
+ include Strelka::Constants,
14
+ Strelka::DataUtilities
15
+
16
+
17
+ # Loggability API -- set up logging under the 'strelka' log host
18
+ log_to :strelka
14
19
 
15
20
 
16
21
  # Pattern for matching a 'charset' parameter in a media-type string, such as the
@@ -2,90 +2,12 @@
2
2
  # vim: set nosta noet ts=4 sw=4:
3
3
  # encoding: utf-8
4
4
 
5
- require 'logger'
6
-
7
5
  require 'strelka' unless defined?( Strelka )
8
6
  require 'strelka/constants'
9
7
 
10
8
 
11
9
  module Strelka
12
10
 
13
- # Add logging to a Strelka class. Including classes get #log and
14
- # #log_debug methods.
15
- #
16
- # class MyClass
17
- # include Inversion::Loggable
18
- #
19
- # def a_method
20
- # self.log.debug "Doing a_method stuff..."
21
- # end
22
- # end
23
- #
24
- module Loggable
25
-
26
- # A logging proxy class that wraps calls to the logger into calls that include
27
- # the name of the calling class.
28
- class ClassNameProxy
29
-
30
- ### Create a new proxy for the given +klass+.
31
- def initialize( klass, force_debug=false )
32
- @classname = klass.name
33
- @force_debug = force_debug
34
- end
35
-
36
- ### Delegate debug messages to the global logger with the appropriate class name.
37
- def debug( msg=nil, &block )
38
- Strelka.logger.add( Logger::DEBUG, msg, @classname, &block )
39
- end
40
-
41
- ### Delegate info messages to the global logger with the appropriate class name.
42
- def info( msg=nil, &block )
43
- return self.debug( msg, &block ) if @force_debug
44
- Strelka.logger.add( Logger::INFO, msg, @classname, &block )
45
- end
46
-
47
- ### Delegate warn messages to the global logger with the appropriate class name.
48
- def warn( msg=nil, &block )
49
- return self.debug( msg, &block ) if @force_debug
50
- Strelka.logger.add( Logger::WARN, msg, @classname, &block )
51
- end
52
-
53
- ### Delegate error messages to the global logger with the appropriate class name.
54
- def error( msg=nil, &block )
55
- return self.debug( msg, &block ) if @force_debug
56
- Strelka.logger.add( Logger::ERROR, msg, @classname, &block )
57
- end
58
-
59
- ### Delegate fatal messages to the global logger with the appropriate class name.
60
- def fatal( msg=nil, &block )
61
- Strelka.logger.add( Logger::FATAL, msg, @classname, &block )
62
- end
63
-
64
- end # ClassNameProxy
65
-
66
- #########
67
- protected
68
- #########
69
-
70
- ### Copy constructor -- clear the original's log proxy.
71
- def initialize_copy( original )
72
- @log_proxy = @log_debug_proxy = nil
73
- super
74
- end
75
-
76
- ### Return the proxied logger.
77
- def log
78
- @log_proxy ||= ClassNameProxy.new( self.class )
79
- end
80
-
81
- ### Return a proxied "debug" logger that ignores other level specification.
82
- def log_debug
83
- @log_debug_proxy ||= ClassNameProxy.new( self.class, true )
84
- end
85
-
86
- end # module Loggable
87
-
88
-
89
11
  # Hides your class's ::new method and adds a +pure_virtual+ method generator for
90
12
  # defining API methods. If subclasses of your class don't provide implementations of
91
13
  # "pure_virtual" methods, NotImplementedErrors will be raised if they are called.
@@ -351,6 +273,7 @@ module Strelka
351
273
 
352
274
  # A collection of functions for generating responses.
353
275
  module ResponseHelpers
276
+ include Strelka::Constants
354
277
 
355
278
  ### Abort the current execution and return a response with the specified
356
279
  ### http_status code immediately. The specified +message+ will be logged,
@@ -375,9 +298,13 @@ module Strelka
375
298
  end
376
299
 
377
300
  # Log using the instance logger if possible, else use the global one
378
- logger = self.respond_to?( :log ) ? self.log : Strelka.log
379
- logmethod = status_info[:status] > 399 ? logger.method(:error) : logger.method(:info)
380
- logmethod.call "Finishing with status %d: %s" % [ status_info[:status], status_info[:message] ]
301
+ logmsg = "Finishing with status %d: %s" % [ status_info[:status], status_info[:message] ]
302
+ if status_info[:status] > 399
303
+ self.log.info( logmsg )
304
+ else
305
+ self.log.error( logmsg )
306
+ end
307
+
381
308
 
382
309
  throw :finish, status_info
383
310
  end
@@ -8,6 +8,7 @@ require 'uri'
8
8
  require 'forwardable'
9
9
  require 'date'
10
10
  require 'formvalidator'
11
+ require 'loggability'
11
12
 
12
13
  require 'strelka/mixins'
13
14
  require 'strelka' unless defined?( Strelka )
@@ -52,8 +53,12 @@ require 'strelka/app' unless defined?( Strelka::App )
52
53
  # end
53
54
  #
54
55
  class Strelka::ParamValidator < ::FormValidator
55
- extend Forwardable
56
- include Strelka::Loggable
56
+ extend Forwardable,
57
+ Loggability
58
+
59
+ # Loggability API -- set up logging under the 'strelka' log host
60
+ log_to :strelka
61
+
57
62
 
58
63
  # Options that are passed as Symbols to .param
59
64
  FLAGS = [ :required, :untaint ]
@@ -2,6 +2,7 @@
2
2
  # vim: set nosta noet ts=4 sw=4:
3
3
  # encoding: utf-8
4
4
 
5
+ require 'loggability'
5
6
  require 'pluginfactory'
6
7
 
7
8
  require 'strelka' unless defined?( Strelka )
@@ -23,9 +24,13 @@ require 'strelka/mixins'
23
24
  # <tt>strelka/router/{something}.rb</tt>, and be sure to override the
24
25
  # #add_route and #route_request methods.
25
26
  class Strelka::Router
27
+ extend Loggability
26
28
  include PluginFactory,
27
- Strelka::Loggable,
28
- Strelka::AbstractClass
29
+ Strelka::AbstractClass
30
+
31
+ # Loggability API -- set up logging under the 'strelka' log host
32
+ log_to :strelka
33
+
29
34
 
30
35
  ### PluginFactory API -- return the Array of directories to search for plugins.
31
36
  def self::derivative_dirs
@@ -2,14 +2,16 @@
2
2
  # vim: set nosta noet ts=4 sw=4:
3
3
  # encoding: utf-8
4
4
 
5
+ require 'loggability'
6
+
5
7
  require 'strelka' unless defined?( Strelka )
6
8
  require 'strelka/app' unless defined?( Strelka::App )
7
9
  require 'strelka/router'
8
10
 
9
11
  # Simple (dumb?) request router for Strelka::App-based applications.
10
12
  class Strelka::Router::Default < Strelka::Router
11
- include Strelka::Loggable,
12
- Strelka::Constants,
13
+ extend Loggability
14
+ include Strelka::Constants,
13
15
  Strelka::ResponseHelpers
14
16
 
15
17
  ### Create a new router that will route requests according to the specified
@@ -2,6 +2,8 @@
2
2
  # vim: set nosta noet ts=4 sw=4:
3
3
  # encoding: utf-8
4
4
 
5
+ require 'loggability'
6
+
5
7
  require 'strelka' unless defined?( Strelka )
6
8
  require 'strela/app' unless defined?( Strelka::App )
7
9
 
@@ -24,7 +26,11 @@ require 'strelka/router/default'
24
26
  # end # class MyApp
25
27
  #
26
28
  class Strelka::Router::Exclusive < Strelka::Router::Default
27
- include Strelka::Loggable
29
+ extend Loggability
30
+
31
+ # Loggability API -- set up logging under the 'strelka' log host
32
+ log_to :strelka
33
+
28
34
 
29
35
  ######
30
36
  public
@@ -3,6 +3,7 @@
3
3
 
4
4
  require 'digest/sha1'
5
5
  require 'pluginfactory'
6
+ require 'loggability'
6
7
 
7
8
  require 'strelka' unless defined?( Strelka )
8
9
  require 'strelka/mixins'
@@ -42,9 +43,12 @@ require 'strelka/mixins'
42
43
  #
43
44
  #
44
45
  class Strelka::Session
46
+ extend Loggability
45
47
  include PluginFactory,
46
- Strelka::Loggable,
47
- Strelka::AbstractClass
48
+ Strelka::AbstractClass
49
+
50
+ # Loggability API -- set up logging under the 'strelka' log host
51
+ log_to :strelka
48
52
 
49
53
 
50
54
  ### PluginFactory API -- return the Array of directories to search for concrete
@@ -1,6 +1,7 @@
1
1
  # -*- ruby -*-
2
2
  # vim: set nosta noet ts=4 sw=4:
3
3
 
4
+ require 'loggability'
4
5
  require 'securerandom'
5
6
  require 'forwardable'
6
7
  require 'sequel'
@@ -14,10 +15,14 @@ require 'strelka/session/default'
14
15
  # any database that Sequel supports. It defaults to non-persistent, in memory Sqlite.
15
16
  #
16
17
  class Strelka::Session::Db < Strelka::Session::Default
17
- include Strelka::Loggable
18
- extend Forwardable,
18
+ extend Loggability,
19
+ Forwardable,
19
20
  Strelka::MethodUtilities
20
21
 
22
+ # Loggability API -- set up logging under the 'strelka' log host
23
+ log_to :strelka
24
+
25
+
21
26
  # Class-instance variables
22
27
  @table_name = :sessions
23
28
  @db = nil
@@ -59,7 +64,7 @@ class Strelka::Session::Db < Strelka::Session::Default
59
64
  @db = options[ :connect ].nil? ?
60
65
  Mongrel2::Config.in_memory_db :
61
66
  Sequel.connect( options[:connect] )
62
- @db.logger = Strelka.logger
67
+ @db.logger = Loggability[ Mongrel2 ].proxy_for( @db )
63
68
 
64
69
  self.initialize_sessions_table
65
70
  end
@@ -1,6 +1,7 @@
1
1
  # -*- ruby -*-
2
2
  # vim: set nosta noet ts=4 sw=4:
3
3
 
4
+ require 'loggability'
4
5
  require 'securerandom'
5
6
  require 'forwardable'
6
7
 
@@ -17,11 +18,11 @@ require 'strelka/mixins'
17
18
  # The following methods are delegated to the inner Hash via the #namespaced_hash method:
18
19
  # #[], #[]=, #delete, #key?
19
20
  class Strelka::Session::Default < Strelka::Session
20
- extend Forwardable,
21
+ extend Loggability,
22
+ Forwardable,
21
23
  Strelka::MethodUtilities,
22
24
  Strelka::Delegation
23
- include Strelka::Loggable,
24
- Strelka::DataUtilities
25
+ include Strelka::DataUtilities
25
26
 
26
27
  # Default configuration
27
28
  DEFAULT_COOKIE_OPTIONS = {
data/spec/lib/helpers.rb CHANGED
@@ -83,35 +83,28 @@ module Strelka::SpecHelpers
83
83
 
84
84
  ### Reset the logging subsystem to its default state.
85
85
  def reset_logging
86
- Strelka.reset_logger
87
- Mongrel2.reset_logger
86
+ Loggability.formatter = nil
87
+ Loggability.output_to( $stderr )
88
+ Loggability.level = :fatal
88
89
  end
89
90
 
90
91
 
91
92
  ### Alter the output of the default log formatter to be pretty in SpecMate output
92
93
  def setup_logging( level=Logger::FATAL )
93
94
 
94
- # Turn symbol-style level config into Logger's expected Fixnum level
95
- if Strelka::Logging::LOG_LEVELS.key?( level.to_s )
96
- level = Strelka::Logging::LOG_LEVELS[ level.to_s ]
97
- end
98
-
99
- logger = Logger.new( $stderr )
100
- Strelka.logger = logger
101
- Strelka.logger.level = level
102
- Mongrel2.logger.level = level
103
-
104
95
  # Only do this when executing from a spec in TextMate
105
96
  if ENV['HTML_LOGGING'] || (ENV['TM_FILENAME'] && ENV['TM_FILENAME'] =~ /_spec\.rb/)
106
- Thread.current['logger-output'] = []
107
- logdevice = ArrayLogger.new( Thread.current['logger-output'] )
108
- Strelka.logger = Logger.new( logdevice )
109
- # Strelka.logger.level = level
110
- Strelka.logger.formatter = Strelka::Logging::HtmlFormatter.new( logger )
111
- Mongrel2.logger = Strelka.logger
97
+ logarray = []
98
+ Thread.current['logger-output'] = logarray
99
+ Loggability.output_to( logarray )
100
+ Loggability.format_as( :html )
101
+ Loggability.level = :debug
102
+ else
103
+ Loggability.level = level
112
104
  end
113
105
  end
114
106
 
107
+
115
108
  ### Set up a Mongrel2 configuration database according to the specified +dbspec+.
116
109
  ### Set up a Mongrel2 configuration database in memory.
117
110
  def setup_config_db
@@ -110,13 +110,18 @@ describe Strelka::HTTPRequest::Session, "-extended request" do
110
110
  context "and a corresponding entry in the database" do
111
111
 
112
112
  before( :each ) do
113
- Strelka::Session::Default.sessions[ @sess_id ] = {}
113
+ @req.session[ :test ] = true
114
114
  end
115
115
 
116
116
  it "knows that it has a session" do
117
117
  @req.should have_session()
118
118
  end
119
119
 
120
+ it "can purge the session from the database" do
121
+ @req.should have_session()
122
+ @req.destroy_session
123
+ @req.should_not have_session()
124
+ end
120
125
  end
121
126
 
122
127
  end
@@ -65,6 +65,16 @@ describe Strelka::HTTPRequest do
65
65
  @req.notes[:routing][:route].should be_a( Hash )
66
66
  end
67
67
 
68
+ it "can redirect the request to a different URI" do
69
+ uri = 'http://www.google.com/'
70
+ expect {
71
+ @req.redirect( uri )
72
+ }.to finish_with( HTTP::MOVED_TEMPORARILY, nil, :location => uri )
73
+
74
+ expect {
75
+ @req.redirect( uri, true )
76
+ }.to finish_with( HTTP::MOVED_PERMANENTLY, nil, :location => uri )
77
+ end
68
78
  end
69
79
 
70
80
 
@@ -21,40 +21,6 @@ require 'strelka/mixins'
21
21
  describe Strelka, "mixins" do
22
22
 
23
23
 
24
- describe Strelka::Loggable do
25
- before(:each) do
26
- @logfile = StringIO.new('')
27
- Strelka.logger = Logger.new( @logfile )
28
-
29
- @test_class = Class.new do
30
- include Strelka::Loggable
31
-
32
- def log_test_message( level, msg )
33
- self.log.send( level, msg )
34
- end
35
-
36
- def logdebug_test_message( msg )
37
- self.log_debug.debug( msg )
38
- end
39
- end
40
- @obj = @test_class.new
41
- end
42
-
43
-
44
- it "is able to output to the log via its #log method" do
45
- @obj.log_test_message( :debug, "debugging message" )
46
- @logfile.rewind
47
- @logfile.read.should =~ /debugging message/
48
- end
49
-
50
- it "is able to output to the log via its #log_debug method" do
51
- @obj.logdebug_test_message( "sexydrownwatch" )
52
- @logfile.rewind
53
- @logfile.read.should =~ /sexydrownwatch/
54
- end
55
- end
56
-
57
-
58
24
  describe Strelka::AbstractClass do
59
25
 
60
26
  context "mixed into a class" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: strelka
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.pre.219
4
+ version: 0.0.1.pre.224
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -36,7 +36,7 @@ cert_chain:
36
36
  YUhDS0xaZFNLai9SSHVUT3QrZ2JsUmV4OEZBaDhOZUEKY21saFhlNDZwWk5K
37
37
  Z1dLYnhaYWg4NWpJang5NWhSOHZPSStOQU01aUg5a09xSzEzRHJ4YWNUS1Bo
38
38
  cWo1UGp3RgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
39
- date: 2012-05-04 00:00:00.000000000 Z
39
+ date: 2012-05-07 00:00:00.000000000 Z
40
40
  dependencies:
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: trollop
@@ -182,6 +182,22 @@ dependencies:
182
182
  - - ~>
183
183
  - !ruby/object:Gem::Version
184
184
  version: '1.0'
185
+ - !ruby/object:Gem::Dependency
186
+ name: loggability
187
+ requirement: !ruby/object:Gem::Requirement
188
+ none: false
189
+ requirements:
190
+ - - ~>
191
+ - !ruby/object:Gem::Version
192
+ version: '0.0'
193
+ type: :runtime
194
+ prerelease: false
195
+ version_requirements: !ruby/object:Gem::Requirement
196
+ none: false
197
+ requirements:
198
+ - - ~>
199
+ - !ruby/object:Gem::Version
200
+ version: '0.0'
185
201
  - !ruby/object:Gem::Dependency
186
202
  name: hoe-mercurial
187
203
  requirement: !ruby/object:Gem::Requirement
metadata.gz.sig CHANGED
Binary file