Tweaks to the Sinatra extension helper to make it more in line with the Sinatra guidelines for writing extensions

This commit is contained in:
Ben Atkins 2013-08-15 11:00:55 -04:00
parent e81d1d435b
commit 6ec14d7695
5 changed files with 59 additions and 59 deletions

View File

@ -69,7 +69,7 @@ If you're using the modular [Sinatra::Base](http://www.sinatrarb.com/intro.html#
require 'sinatra/base'
class BlehApp < Sinatra::Base
register PaperTrail::Sinatra
register Sinatra::PaperTrail
end
```

View File

@ -6,6 +6,10 @@ require 'paper_trail/cleaner'
Dir[File.join(File.dirname(__FILE__), 'paper_trail', 'frameworks', '*.rb')].each { |file| require file }
Dir[File.join(File.dirname(__FILE__), 'paper_trail', 'serializers', '*.rb')].each { |file| require file }
# Require all frameworks
# require 'paper_trail/frameworks/rails'
# require 'paper_trail/frameworks/sinatra' if defined?(Sinatra)
# PaperTrail's module methods can be called in both models and controllers.
module PaperTrail
extend PaperTrail::Cleaner

View File

@ -1,9 +1,9 @@
module PaperTrail
module Sinatra
module Sinatra
module PaperTrail
# Register this module inside your Sinatra application to gain access to controller-level methods used by PaperTrail
def self.registered(app)
app.helpers PaperTrail::Sinatra
app.helpers Sinatra::PaperTrail
app.before { set_paper_trail_whodunnit }
end
@ -26,10 +26,6 @@ module PaperTrail
end
end
end
if defined?(Sinatra)
module Sinatra
register PaperTrail::Sinatra
end
register Sinatra::PaperTrail if defined?(register)
end

View File

@ -0,0 +1,43 @@
require 'test_helper'
require 'sinatra/base'
# --- Tests for modular `Sinatra::Base` style ----
class BaseApp < Sinatra::Base
ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => File.expand_path('../../dummy/db/test.sqlite3', __FILE__))
register Sinatra::PaperTrail
get '/test' do
Widget.create!(:name => 'foo')
'Hello'
end
def current_user
'foobar'
end
end
class ModularSinatraTest < ActiveSupport::TestCase
include Rack::Test::Methods
def app
@app ||= BaseApp
end
test 'baseline' do
assert_nil Widget.first
assert_nil Widget.create.versions.first.whodunnit
end
context "`PaperTrail::Sinatra` in a `Sinatra::Base` application" do
should "sets the `user_for_paper_trail` from the `current_user` method" do
get '/test'
assert_equal 'Hello', last_response.body
widget = Widget.first
assert_not_nil widget
assert_equal 1, widget.versions.size
assert_equal 'foobar', widget.versions.first.whodunnit
end
end
end

View File

@ -1,62 +1,23 @@
require 'test_helper'
require 'sinatra/base'
# --- Tests for modular `Sinatra::Base` style ----
class BaseApp < Sinatra::Base
ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => File.expand_path('../../dummy/db/test.sqlite3', __FILE__))
register PaperTrail::Sinatra
get '/test' do
w = Widget.create!(:name => 'foo')
'Hello'
end
def current_user
'foobar'
end
end
class PaperTrailModularSinatraTest < ActiveSupport::TestCase
include Rack::Test::Methods
def app
@app ||= BaseApp
end
test 'baseline' do
assert_nil Widget.first
assert_nil Widget.create.versions.first.whodunnit
end
context "`PaperTrail::Sinatra` in a `Sinatra::Base` application" do
should "sets the `user_for_paper_trail` from the `current_user` method" do
get '/test'
assert_equal 'Hello', last_response.body
widget = Widget.first
assert_not_nil widget
assert_equal 1, widget.versions.size
assert_equal 'foobar', widget.versions.first.whodunnit
end
end
end
require 'sinatra'
# --- Tests for non-modular `Sinatra::Application` style ----
class Sinatra::Application
ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => File.expand_path('../../dummy/db/test.sqlite3', __FILE__))
register Sinatra::PaperTrail # we shouldn't actually need this line if I'm not mistaken but the tests seem to fail without it ATM
get '/test' do
w = Widget.create!(:name => 'foo')
'Hello'
Widget.create!(:name => 'foo')
'Hai'
end
def current_user
'raboof'
end
end
class PaperTrailSinatraTest < ActiveSupport::TestCase
class SinatraTest < ActiveSupport::TestCase
include Rack::Test::Methods
def app
@ -70,13 +31,9 @@ class PaperTrailSinatraTest < ActiveSupport::TestCase
context "`PaperTrail::Sinatra` in a `Sinatra::Application` application" do
def app
@app ||= BaseApp
end
should "sets the `user_for_paper_trail` from the `current_user` method" do
get '/test'
assert_equal 'Hello', last_response.body
assert_equal 'Hai', last_response.body
widget = Widget.first
assert_not_nil widget
assert_equal 1, widget.versions.size