sinatra-logger 0.1.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/.document ADDED
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/.gitignore ADDED
@@ -0,0 +1,23 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+ doc
21
+
22
+ ## PROJECT::SPECIFIC
23
+ spec/fixtures/log/*.log
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 kematzy
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,168 @@
1
+ = Sinatra::Logger
2
+
3
+ A Sinatra extension that makes logging within Your apps easy.
4
+
5
+
6
+ == Installation
7
+
8
+ # Add Gemcutter to your RubyGems sources
9
+ $ gem sources -a http://gemcutter.com
10
+
11
+ $ (sudo)? gem install sinatra-logger
12
+
13
+ == Dependencies
14
+
15
+ This Gem depends upon the following:
16
+
17
+ === Runtime:
18
+
19
+ * sinatra ( >= 1.0.a )
20
+ * logger
21
+
22
+ === Development & Tests:
23
+
24
+ * rspec (>= 1.3.0 )
25
+ * rack-test (>= 0.5.3)
26
+ * rspec_hpricot_matchers (>= 0.1.0)
27
+ * sinatra-tests (>= 0.1.6)
28
+
29
+
30
+ == Getting Started
31
+
32
+ To get logging in your app, just register the extension
33
+ in your sub-classed Sinatra app:
34
+
35
+ class YourApp < Sinatra::Base
36
+
37
+ register(Sinatra::Logger)
38
+ <snip...>
39
+ end
40
+
41
+ Then in your App's route or helper method declarations, just use the <tt>#logger</tt>...
42
+
43
+ get '/some/route' do
44
+ logger.debug("some informative message goes here")
45
+ <snip...>
46
+ end
47
+
48
+ helpers do
49
+ def some_helper_method
50
+ logger.info("some equally informative message goes here")
51
+ <snip...>
52
+ end
53
+ end
54
+
55
+
56
+ That's pretty painless, no?
57
+
58
+
59
+ === Logging Levels
60
+
61
+ The <b>default Log level</b> is <tt>:warn</tt>.
62
+
63
+ All the available logging levels are those of Logger[http://ruby-doc.org/stdlib/libdoc/logger/rdoc/classes/Logger.html], which are:
64
+
65
+ * <tt>logger.fatal(msg)</tt> - - (FATAL) - an unhandleable error that results in a program crash
66
+
67
+ * <tt>logger.error(msg)</tt> - - (ERROR) - a handleable error condition
68
+
69
+ * <tt>logger.warn(msg)</tt> - - (WARN) - a warning
70
+
71
+ * <tt>logger.info(msg)</tt> - - (INFO) - generic (useful) information about system operation
72
+
73
+ * <tt>logger.debug(msg)</tt> - - (DEBUG) - low-level information for developers
74
+
75
+
76
+ OK, by now you might be asking yourself,
77
+
78
+ <em>"So where does the log messages go then ?"</em>.
79
+
80
+
81
+ === Logging Locations
82
+
83
+ By default the logger will log it's message to the following path:
84
+
85
+ < the root of your app >/log/< environment >.log
86
+
87
+ In other words if your app's root is [ <tt>/home/www/your-great-app/</tt> ] and it's
88
+ running in <tt>:production</tt> mode, then the log location would become:
89
+
90
+ /home/www/your-great-app/log/production.log
91
+
92
+ <b>NB!</b> this extension takes for granted that you have a ../log/ directory with write access at the root of your app.
93
+
94
+
95
+ === Custom Logging Location
96
+
97
+ If the defaults are NOT for you, then just do...
98
+
99
+ class YourApp < Sinatra::Base
100
+
101
+ register(Sinatra::Logger)
102
+
103
+ set: :logger_log_file, lambda { "/path/2/your/log/file.ext" }
104
+
105
+ <snip...>
106
+
107
+ end
108
+
109
+
110
+ # the lambda { } is required, especially if you have variables in the path
111
+
112
+ ..., now your log messages will be written to that log file.
113
+
114
+
115
+ === Setting Log Level
116
+
117
+ Finally, to use a different Log level for your app, other than the default <tt>:warn</tt> just...
118
+
119
+ class YourApp < Sinatra::Base
120
+
121
+ register(Sinatra::Logger)
122
+
123
+ set: :logger_level, :fatal # or :error, :warn, :info, :debug
124
+ <snip...>
125
+ end
126
+
127
+
128
+ That's it. I hope that's easy enough.
129
+
130
+
131
+ == RTFM
132
+
133
+ If the above is not clear enough, please check the Specs for a better understanding.
134
+
135
+
136
+ == Errors / Bugs
137
+
138
+ If something is not behaving intuitively, it is a bug, and should be reported.
139
+ Report it here: http://github.com/kematzy/sinatra-logger/issues
140
+
141
+
142
+ == TODOs
143
+
144
+ * Making the logging work with Rack::CommonLogger, but still retain it's independence.
145
+
146
+ * Any other improvements you can think of.
147
+
148
+
149
+
150
+ == Note on Patches/Pull Requests
151
+
152
+ * Fork the project.
153
+ * Make your feature addition or bug fix.
154
+ * Add tests for it. This is important so I don't break it in a
155
+ future version unintentionally.
156
+ * Commit, do not mess with rakefile, version, or history.
157
+ * (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
158
+ * Send me a pull request. Bonus points for topic branches.
159
+
160
+ == Copyright
161
+
162
+ Copyright (c) 2010 kematzy. Released under the MIT License.
163
+
164
+ See LICENSE for details.
165
+
166
+ == Inspirational Source
167
+
168
+ * Monk Glue
data/Rakefile ADDED
@@ -0,0 +1,90 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "sinatra-logger"
8
+ gem.summary = %Q{Easy logging with Sinatra}
9
+ gem.description = %Q{A Sinatra extension that makes logging easy}
10
+ gem.email = "kematzy@gmail.com"
11
+ gem.homepage = "http://github.com/kematzy/sinatra-logger"
12
+ gem.authors = ["kematzy"]
13
+ gem.add_dependency( "sinatra", ">= 0.10.1")
14
+ gem.add_development_dependency( "rspec", ">= 1.3.0")
15
+ gem.add_development_dependency( "sinatra-tests", ">= 0.1.6")
16
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
17
+ end
18
+ Jeweler::GemcutterTasks.new
19
+ rescue LoadError
20
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
21
+ end
22
+
23
+ require 'spec/rake/spectask'
24
+ Spec::Rake::SpecTask.new(:spec) do |spec|
25
+ spec.libs << 'lib' << 'spec'
26
+ spec.spec_opts = ["--color", "--format", "specdoc", "--require", "spec/spec_helper.rb"]
27
+ spec.spec_files = FileList['spec/**/*_spec.rb']
28
+ end
29
+
30
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
31
+ spec.libs << 'lib' << 'spec'
32
+ spec.spec_opts = ["--color", "--format", "specdoc", "--require", "spec/spec_helper.rb"]
33
+ spec.pattern = 'spec/**/*_spec.rb'
34
+ spec.rcov = true
35
+ end
36
+
37
+ namespace :spec do
38
+
39
+ desc "Run all specifications quietly"
40
+ Spec::Rake::SpecTask.new(:quiet) do |t|
41
+ t.libs << "lib"
42
+ t.spec_opts = ["--color", "--require", "spec/spec_helper.rb"]
43
+ end
44
+
45
+ desc "Run specific spec (SPEC=/path/2/file)"
46
+ Spec::Rake::SpecTask.new(:select) do |t|
47
+ t.libs << "lib"
48
+ t.spec_files = [ENV["SPEC"]]
49
+ t.spec_opts = ["--color", "--format", "specdoc", "--require", "spec/spec_helper.rb"]
50
+ end
51
+
52
+ end
53
+
54
+ task :spec => :check_dependencies
55
+
56
+ task :default => :spec
57
+
58
+ require 'rake/rdoctask'
59
+ Rake::RDocTask.new do |rdoc|
60
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
61
+
62
+ rdoc.rdoc_dir = 'rdoc'
63
+ rdoc.title = "sinatra-logger #{version}"
64
+ rdoc.rdoc_files.include('README*')
65
+ rdoc.rdoc_files.include('lib/**/*.rb')
66
+ end
67
+
68
+
69
+ desc 'Build the rdoc HTML Files'
70
+ task :docs do
71
+ version = File.exist?('VERSION') ? IO.read('VERSION').chomp : "[Unknown]"
72
+
73
+ sh "sdoc -N --title 'Sinatra::Logger v#{version}' lib/ README.rdoc"
74
+ end
75
+
76
+ namespace :docs do
77
+
78
+ desc 'Remove rdoc products'
79
+ task :remove => [:clobber_rdoc]
80
+
81
+ desc 'Force a rebuild of the RDOC files'
82
+ task :rebuild => [:rerdoc]
83
+
84
+ desc 'Build docs, and open in browser for viewing (specify BROWSER)'
85
+ task :open => [:docs] do
86
+ browser = ENV["BROWSER"] || "safari"
87
+ sh "open -a #{browser} doc/index.html"
88
+ end
89
+
90
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,185 @@
1
+
2
+ require 'sinatra/base'
3
+ require 'logger'
4
+
5
+ module Sinatra
6
+
7
+ # = Sinatra::Logger
8
+ #
9
+ # A Sinatra extension that makes logging within Your apps easy.
10
+ #
11
+ #
12
+ # == Installation
13
+ #
14
+ # # Add Gemcutter to your RubyGems sources
15
+ # $ gem sources -a http://gemcutter.com
16
+ #
17
+ # $ (sudo)? gem install sinatra-logger
18
+ #
19
+ # == Dependencies
20
+ #
21
+ # This Gem depends upon the following:
22
+ #
23
+ # === Runtime:
24
+ #
25
+ # * sinatra ( >= 1.0.a )
26
+ # * logger
27
+ #
28
+ # === Development & Tests:
29
+ #
30
+ # * rspec (>= 1.3.0 )
31
+ # * rack-test (>= 0.5.3)
32
+ # * rspec_hpricot_matchers (>= 0.1.0)
33
+ # * sinatra-tests (>= 0.1.6)
34
+ #
35
+ #
36
+ # == Getting Started
37
+ #
38
+ # To get logging in your app, just register the extension
39
+ # in your sub-classed Sinatra app:
40
+ #
41
+ # class YourApp < Sinatra::Base
42
+ #
43
+ # register(Sinatra::Logger)
44
+ # <snip...>
45
+ # end
46
+ #
47
+ # Then in your App's route or helper method declarations, just use the <tt>#logger</tt>...
48
+ #
49
+ # get '/some/route' do
50
+ # logger.debug("some informative message goes here")
51
+ # <snip...>
52
+ # end
53
+ #
54
+ # helpers do
55
+ # def some_helper_method
56
+ # logger.info("some equally informative message goes here")
57
+ # <snip...>
58
+ # end
59
+ # end
60
+ #
61
+ #
62
+ # That's pretty painless, no?
63
+ #
64
+ #
65
+ # === Logging Levels
66
+ #
67
+ # The <b>default Log level</b> is <tt>:warn</tt>.
68
+ #
69
+ # All the available logging levels are those of Logger[http://ruby-doc.org/stdlib/libdoc/logger/rdoc/classes/Logger.html], which are:
70
+ #
71
+ # * <tt>logger.fatal(msg)</tt> - - (FATAL) - an unhandleable error that results in a program crash
72
+ #
73
+ # * <tt>logger.error(msg)</tt> - - (ERROR) - a handleable error condition
74
+ #
75
+ # * <tt>logger.warn(msg)</tt> - - (WARN) - a warning
76
+ #
77
+ # * <tt>logger.info(msg)</tt> - - (INFO) - generic (useful) information about system operation
78
+ #
79
+ # * <tt>logger.debug(msg)</tt> - - (DEBUG) - low-level information for developers
80
+ #
81
+ #
82
+ # OK, by now you might be asking yourself,
83
+ #
84
+ # <em>"So where does the log messages go then ?"</em>.
85
+ #
86
+ #
87
+ # === Logging Locations
88
+ #
89
+ # By default the logger will log it's message to the following path:
90
+ #
91
+ # < the root of your app >/log/< environment >.log
92
+ #
93
+ # In other words if your app's root is [ <tt>/home/www/your-great-app/</tt> ] and it's
94
+ # running in <tt>:production</tt> mode, then the log location would become:
95
+ #
96
+ # /home/www/your-great-app/log/production.log
97
+ #
98
+ # <b>NB!</b> this extension takes for granted that you have a ../log/ directory with write access at the root of your app.
99
+ #
100
+ #
101
+ # === Custom Logging Location
102
+ #
103
+ # If the defaults are NOT for you, then just do...
104
+ #
105
+ # class YourApp < Sinatra::Base
106
+ #
107
+ # register(Sinatra::Logger)
108
+ #
109
+ # set: :logger_log_file, lambda { "/path/2/your/log/file.ext" }
110
+ #
111
+ # <snip...>
112
+ #
113
+ # end
114
+ #
115
+ #
116
+ # # the lambda { } is required, especially if you have variables in the path
117
+ #
118
+ # ..., now your log messages will be written to that log file.
119
+ #
120
+ #
121
+ # === Setting Log Level
122
+ #
123
+ # Finally, to use a different Log level for your app, other than the default <tt>:warn</tt> just...
124
+ #
125
+ # class YourApp < Sinatra::Base
126
+ #
127
+ # register(Sinatra::Logger)
128
+ #
129
+ # set: :logger_level, :fatal # or :error, :warn, :info, :debug
130
+ # <snip...>
131
+ # end
132
+ #
133
+ #
134
+ # That's it. I hope that's easy enough.
135
+ #
136
+ module Logger
137
+
138
+ VERSION = '0.1.0'
139
+ ##
140
+ # Returns the version string for this extension
141
+ #
142
+ # ==== Examples
143
+ #
144
+ # Sinatra::Logger.version => 'Sinatra::Logger v0.1.0'
145
+ #
146
+ def self.version; "Sinatra::Logger v#{VERSION}"; end
147
+
148
+
149
+ module Helpers
150
+
151
+ ##
152
+ # Provides easy access to the Logger object throughout your
153
+ # application
154
+ #
155
+ # ==== Examples
156
+ #
157
+ # logger.warn("messsage")
158
+ #
159
+ #
160
+ # @api public
161
+ def logger
162
+ @logger ||= begin
163
+ @logger = ::Logger.new(self.class.logger_log_file)
164
+ @logger.level = ::Logger.const_get((self.class.logger_level || :warn).to_s.upcase)
165
+ @logger.datetime_format = "%Y-%m-%d %H:%M:%S"
166
+ @logger
167
+ end
168
+ end
169
+
170
+ end #/module Helpers
171
+
172
+
173
+ def self.registered(app)
174
+ app.helpers Sinatra::Logger::Helpers
175
+
176
+ # set the output log level
177
+ app.set :logger_level, :warn
178
+ # set the full path to the log file
179
+ app.set :logger_log_file, lambda { File.join(root, 'log', "#{environment}.log") }
180
+
181
+ end #/ self.registered
182
+
183
+ end #/module Logger
184
+
185
+ end #/ Sinatra
@@ -0,0 +1,61 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{sinatra-logger}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["kematzy"]
12
+ s.date = %q{2010-02-23}
13
+ s.description = %q{A Sinatra extension that makes logging easy}
14
+ s.email = %q{kematzy@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".gitignore",
22
+ "LICENSE",
23
+ "README.rdoc",
24
+ "Rakefile",
25
+ "VERSION",
26
+ "lib/sinatra/logger.rb",
27
+ "sinatra-logger.gemspec",
28
+ "spec/sinatra/logger_spec.rb",
29
+ "spec/spec.opts",
30
+ "spec/spec_helper.rb"
31
+ ]
32
+ s.homepage = %q{http://github.com/kematzy/sinatra-logger}
33
+ s.rdoc_options = ["--charset=UTF-8"]
34
+ s.require_paths = ["lib"]
35
+ s.rubygems_version = %q{1.3.6}
36
+ s.summary = %q{Easy logging with Sinatra}
37
+ s.test_files = [
38
+ "spec/sinatra/logger_spec.rb",
39
+ "spec/spec_helper.rb"
40
+ ]
41
+
42
+ if s.respond_to? :specification_version then
43
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
44
+ s.specification_version = 3
45
+
46
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
47
+ s.add_runtime_dependency(%q<sinatra>, [">= 0.10.1"])
48
+ s.add_development_dependency(%q<rspec>, [">= 1.3.0"])
49
+ s.add_development_dependency(%q<sinatra-tests>, [">= 0.1.6"])
50
+ else
51
+ s.add_dependency(%q<sinatra>, [">= 0.10.1"])
52
+ s.add_dependency(%q<rspec>, [">= 1.3.0"])
53
+ s.add_dependency(%q<sinatra-tests>, [">= 0.1.6"])
54
+ end
55
+ else
56
+ s.add_dependency(%q<sinatra>, [">= 0.10.1"])
57
+ s.add_dependency(%q<rspec>, [">= 1.3.0"])
58
+ s.add_dependency(%q<sinatra-tests>, [">= 0.1.6"])
59
+ end
60
+ end
61
+
@@ -0,0 +1,194 @@
1
+
2
+ require File.expand_path(File.dirname(File.dirname(__FILE__)) + '/spec_helper')
3
+
4
+ describe "Sinatra" do
5
+
6
+ class MyTestApp
7
+ register Sinatra::Logger
8
+
9
+ helpers do
10
+
11
+ def dummy_helper(level, message)
12
+ logger.send(level, message)
13
+ "Level: #{level}, Message: #{message}"
14
+ end
15
+ end
16
+
17
+ get '/logger/:msg' do
18
+ logger.warn("Message: #{params[:msg]}")
19
+ erb("Message: #{params[:msg]}", :layout => false )
20
+ end
21
+
22
+ end
23
+
24
+ it_should_behave_like "MyTestApp"
25
+
26
+ describe "Logger" do
27
+
28
+ describe "with Default Settings" do
29
+
30
+ before(:each) do
31
+ FileUtils.mkdir_p "#{fixtures_path}/log"
32
+ @log_file = "#{fixtures_path}/log/#{MyTestApp.environment}.log"
33
+ `touch #{@log_file}`
34
+ end
35
+
36
+ after(:each) do
37
+ `echo '' > #{@log_file}`
38
+ end
39
+
40
+ describe "Configuration" do
41
+
42
+ it "should set :logger_level to :warn" do
43
+ app.settings.logger_level.should == :warn
44
+ end
45
+
46
+ it "should set :logger_log_file to [../log/< environment >.log]" do
47
+ app.settings.logger_log_file.should == "#{fixtures_path}/log/test.log"
48
+ end
49
+
50
+ end #/ Configuration
51
+
52
+ describe "Helpers" do
53
+
54
+ describe "#logger" do
55
+
56
+ it "should create a #{MyTestApp.environment}.log file when initialized" do
57
+ test(?f, @log_file).should == true
58
+ end
59
+
60
+ it "should return an instance of Logger" do
61
+ app.should respond_to(:logger)
62
+ app.logger.should be_a_kind_of(::Logger)
63
+ end
64
+
65
+ it "should log when called from within a route" do
66
+ get('/logger/this-works')
67
+ body.should == "Message: this-works"
68
+ IO.read(@log_file).should match(/WARN -- : Message: this-works/)
69
+ end
70
+
71
+ it "should log when called from within helper methods" do
72
+ erb_app '<%= dummy_helper(:warn, "works too") %>'
73
+ IO.read(@log_file).should match(/WARN -- : works too/)
74
+ body.should == "Level: warn, Message: works too"
75
+ end
76
+
77
+ it "should NOT log lower levels" do
78
+ erb_app '<%= dummy_helper(:info, "default-info") %>'
79
+ IO.read(@log_file).should_not match(/INFO -- : default-info/)
80
+ body.should == "Level: info, Message: default-info"
81
+
82
+ erb_app '<%= dummy_helper(:debug, "default-debug") %>'
83
+ IO.read(@log_file).should_not match(/DEBUG -- : default-debug/)
84
+ body.should == "Level: debug, Message: default-debug"
85
+ end
86
+
87
+ end #/ #logger
88
+
89
+ end #/ Helpers
90
+
91
+ end #/ with Default Settings
92
+
93
+ describe "with Custom Settings" do
94
+
95
+ class MyCustomTestApp
96
+ register Sinatra::Logger
97
+
98
+ set :logger_level, :debug
99
+ set :logger_log_file, lambda { "#{fixtures_path}/log/custom.log" }
100
+
101
+ helpers do
102
+
103
+ def dummy_helper(level, message)
104
+ logger.send(level, message)
105
+ "Level: #{level}, Message: #{message}"
106
+ end
107
+ end
108
+
109
+ get '/customlogger/:msg' do
110
+ logger.warn("Message: #{params[:msg]}")
111
+ erb("CustomMessage: #{params[:msg]}", :layout => false )
112
+ end
113
+
114
+ end
115
+
116
+ before(:each) do
117
+ class ::Test::Unit::TestCase
118
+ def app; ::MyCustomTestApp.new ; end
119
+ end
120
+ @app = app
121
+
122
+ FileUtils.mkdir_p "#{fixtures_path}/log"
123
+ @custom_log_file = "#{fixtures_path}/log/custom.log"
124
+ `touch #{@custom_log_file}`
125
+ end
126
+
127
+ after(:each) do
128
+ class ::Test::Unit::TestCase
129
+ def app; nil ; end
130
+ end
131
+ @app = nil
132
+
133
+ `echo '' > #{@custom_log_file}`
134
+ end
135
+
136
+ describe "Configuration" do
137
+
138
+ it "should set :logger_level to :debug" do
139
+ app.settings.logger_level.should == :debug
140
+ end
141
+
142
+ it "should set :logger_log_file to [../log/custom.log]" do
143
+ app.settings.logger_log_file.should == "#{fixtures_path}/log/custom.log"
144
+ end
145
+
146
+ end #/ Configuration
147
+
148
+ describe "Helpers" do
149
+
150
+ describe "#logger" do
151
+
152
+ it "should create a custom.log file when initialised" do
153
+ test(?f, @custom_log_file).should == true
154
+ end
155
+
156
+ it "should return an instance of Logger" do
157
+ app.logger.should be_a_kind_of(::Logger)
158
+ end
159
+
160
+ it "should log when called from within a route" do
161
+ get('/customlogger/this-works')
162
+ body.should == "CustomMessage: this-works"
163
+ IO.read(@custom_log_file).should match(/WARN -- : Message: this-works/)
164
+ end
165
+
166
+ it "should log when called from within helper methods" do
167
+ erb_app '<%= dummy_helper(:info, "works as well") %>'
168
+ IO.read(@custom_log_file).should match(/INFO -- : works as well/)
169
+ body.should == "Level: info, Message: works as well"
170
+
171
+ erb_app '<%= dummy_helper(:warn, "works too") %>'
172
+ IO.read(@custom_log_file).should match(/WARN -- : works too/)
173
+ body.should == "Level: warn, Message: works too"
174
+ end
175
+
176
+ it "should log higher levels" do
177
+ erb_app '<%= dummy_helper(:info, "custom-info") %>'
178
+ IO.read(@custom_log_file).should match(/INFO -- : custom-info/)
179
+ body.should == "Level: info, Message: custom-info"
180
+
181
+ erb_app '<%= dummy_helper(:debug, "custom-debug") %>'
182
+ IO.read(@custom_log_file).should match(/DEBUG -- : custom-debug/)
183
+ body.should == "Level: debug, Message: custom-debug"
184
+ end
185
+
186
+ end #/ #logger
187
+
188
+ end #/ Helpers
189
+
190
+ end #/ with Custom Settings
191
+
192
+ end #/ Logger
193
+
194
+ end #/ Sinatra
data/spec/spec.opts ADDED
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,61 @@
1
+
2
+
3
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
4
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
+
6
+
7
+ #--
8
+ # DEPENDENCIES
9
+ #++
10
+ %w(
11
+ sinatra/base
12
+ fileutils
13
+ ).each {|lib| require lib }
14
+
15
+ #--
16
+ ## SINATRA EXTENSIONS
17
+ #++
18
+ %w(
19
+ sinatra/tests
20
+ sinatra/logger
21
+ ).each {|ext| require ext }
22
+
23
+
24
+ ENV['RACK_ENV'] = 'test'
25
+
26
+ Spec::Runner.configure do |config|
27
+ config.include RspecHpricotMatchers
28
+ config.include Sinatra::Tests::TestCase
29
+ config.include Sinatra::Tests::RSpec::SharedSpecs
30
+ end
31
+
32
+ def fixtures_path
33
+ "#{File.dirname(File.expand_path(__FILE__))}/fixtures"
34
+ end
35
+
36
+ class MyTestApp < Sinatra::Base
37
+ set :root, "#{fixtures_path}"
38
+ set :app_dir, "#{fixtures_path}/app"
39
+ set :public, "#{fixtures_path}/public"
40
+ set :views, "#{app_dir}/views"
41
+ enable :raise_errors
42
+
43
+ register(Sinatra::Tests)
44
+
45
+ end #/class MyTestApp
46
+
47
+ class MyCustomTestApp < Sinatra::Base
48
+ set :root, "#{fixtures_path}"
49
+ set :app_dir, "#{fixtures_path}/app"
50
+ set :public, "#{fixtures_path}/public"
51
+ set :views, "#{app_dir}/views"
52
+ enable :raise_errors
53
+
54
+ register(Sinatra::Tests)
55
+
56
+ end #/class MyCustomTestApp
57
+
58
+
59
+ class Test::Unit::TestCase
60
+ Sinatra::Base.set :environment, :test
61
+ end
metadata ADDED
@@ -0,0 +1,115 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sinatra-logger
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - kematzy
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-02-23 00:00:00 +08:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: sinatra
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ - 10
30
+ - 1
31
+ version: 0.10.1
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: rspec
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 1
43
+ - 3
44
+ - 0
45
+ version: 1.3.0
46
+ type: :development
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: sinatra-tests
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ segments:
56
+ - 0
57
+ - 1
58
+ - 6
59
+ version: 0.1.6
60
+ type: :development
61
+ version_requirements: *id003
62
+ description: A Sinatra extension that makes logging easy
63
+ email: kematzy@gmail.com
64
+ executables: []
65
+
66
+ extensions: []
67
+
68
+ extra_rdoc_files:
69
+ - LICENSE
70
+ - README.rdoc
71
+ files:
72
+ - .document
73
+ - .gitignore
74
+ - LICENSE
75
+ - README.rdoc
76
+ - Rakefile
77
+ - VERSION
78
+ - lib/sinatra/logger.rb
79
+ - sinatra-logger.gemspec
80
+ - spec/sinatra/logger_spec.rb
81
+ - spec/spec.opts
82
+ - spec/spec_helper.rb
83
+ has_rdoc: true
84
+ homepage: http://github.com/kematzy/sinatra-logger
85
+ licenses: []
86
+
87
+ post_install_message:
88
+ rdoc_options:
89
+ - --charset=UTF-8
90
+ require_paths:
91
+ - lib
92
+ required_ruby_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ segments:
97
+ - 0
98
+ version: "0"
99
+ required_rubygems_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ segments:
104
+ - 0
105
+ version: "0"
106
+ requirements: []
107
+
108
+ rubyforge_project:
109
+ rubygems_version: 1.3.6
110
+ signing_key:
111
+ specification_version: 3
112
+ summary: Easy logging with Sinatra
113
+ test_files:
114
+ - spec/sinatra/logger_spec.rb
115
+ - spec/spec_helper.rb