diff --git a/lib/gon-sinatra.rb b/lib/gon-sinatra.rb
index 9a0d6b8..c6b3995 100644
--- a/lib/gon-sinatra.rb
+++ b/lib/gon-sinatra.rb
@@ -1,77 +1,12 @@
require 'sinatra'
+require 'gon/sinatra/store'
require 'gon/sinatra/helpers'
require 'gon/sinatra/rabl'
module Gon
module Sinatra
- class << self
- def all_variables
- @request_env[:gon]
- end
-
- def clear
- @request_env[:gon] = {}
- end
-
- def request_env=(environment)
- @request_env = environment
- @request_env[:gon] ||= {}
- end
-
- def request_env
- if defined?(@request_env)
- return @request_env
- end
- end
-
- def request
- @request_id if defined? @request_id
- end
-
- def request=(request_id)
- @request_id = request_id
- end
-
- def method_missing(m, *args, &block)
- if ( m.to_s =~ /=$/ )
- if public_methods.include? m.to_s[0..-2].to_sym
- raise "You can't use Gon public methods for storing data"
- end
- set_variable(m.to_s.delete('='), args[0])
- else
- get_variable(m.to_s)
- end
- end
-
- def get_variable(name)
- @request_env[:gon][name]
- end
-
- def set_variable(name, value)
- @request_env[:gon][name] = value
- end
-
- def rabl(view_path, options = {})
- unless options[:instance]
- raise ArgumentError.new("You should pass :instance in options: :instance => self")
- end
-
- rabl_data = Gon::Sinatra::Rabl.parse_rabl(view_path, options[:instance])
-
- if options[:as]
- set_variable(options[:as].to_s, rabl_data)
- elsif rabl_data.is_a? Hash
- rabl_data.each do |key, value|
- set_variable(key, value)
- end
- else
- set_variable('rabl', rabl_data)
- end
- end
-
- def jbuilder(view_path, options = {})
- raise NoMethodError.new("Not available for sinatra")
- end
+ def self.registered(base)
+ base.helpers(Gon::Sinatra::GonHelpers, Gon::Sinatra::Helpers)
end
end
end
diff --git a/lib/gon/sinatra/helpers.rb b/lib/gon/sinatra/helpers.rb
index ccc6683..e0de7ab 100644
--- a/lib/gon/sinatra/helpers.rb
+++ b/lib/gon/sinatra/helpers.rb
@@ -4,8 +4,8 @@ module Gon
module Sinatra
module Helpers
def include_gon(options = {})
- if Gon::Sinatra.request_env && Gon::Sinatra.all_variables.present?
- data = Gon::Sinatra.all_variables
+ if gon.all_variables.present?
+ data = gon.all_variables
namespace = options[:namespace] || 'gon'
script = ""
+ instance.include_gon.should == ""
end
it 'returns exception if try to set public method as variable' do
- Gon::Sinatra.clear
- lambda { Gon::Sinatra.all_variables = 123 }.should raise_error
+ @gon.clear
+ lambda { @gon.all_variables = 123 }.should raise_error
end
it 'should be threadsafe' do
- instance1 = Sinatra::Base.new!
- instance2 = Sinatra::Base.new!
+ instance1 = app()
+ instance2 = app()
instance1.gon.test = "foo"
instance2.gon.test = "bar"
instance1.gon.test.should == "foo"
end
-
it 'render json from rabl template' do
- Gon::Sinatra.clear
+ @gon.clear
@objects = [1,2]
Gon::Sinatra.rabl 'spec/test_data/sample.rabl', :instance => self
Gon::Sinatra.objects.length.should == 2