sinatra-mongo 0.0.2 → 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/Rakefile CHANGED
@@ -10,8 +10,9 @@ begin
10
10
  gem.email = "josh@technicalpickles.com"
11
11
  gem.homepage = "http://github.com/technicalpickles/sinatra-mongo"
12
12
  gem.authors = ["Joshua Nichols"]
13
- gem.version = "0.0.2"
13
+ gem.version = "0.1.0"
14
14
  gem.add_development_dependency "rspec", ">= 1.2.9"
15
+ gem.add_development_dependency "rack-test", ">= 0.5.3"
15
16
  gem.add_dependency "mongo"
16
17
  gem.add_dependency 'sinatra', '>= 0.9.4'
17
18
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
@@ -1,4 +1,4 @@
1
- require 'sinatra'
1
+ require 'sinatra/base'
2
2
  require 'mongo'
3
3
 
4
4
  module Sinatra
@@ -16,21 +16,24 @@ module Sinatra
16
16
  end
17
17
 
18
18
  def mongo
19
- url = URI(mongo_url)
20
- connection = Mongo::Connection.new(url.host, url.port)
21
- @mongo ||= begin
22
- mongo = connection.db(url.path[1..-1])
23
- if url.user && url.password
24
- mongo.authenticate(url.user, url.password)
25
- end
26
- mongo
27
- end
19
+ synchronize do
20
+ @mongo ||= (
21
+ url = URI(mongo_url)
22
+ connection = Mongo::Connection.new(url.host, url.port)
23
+ mongo = connection.db(url.path[1..-1], mongo_settings)
24
+ if url.user && url.password
25
+ mongo.authenticate(url.user, url.password)
26
+ end
27
+ mongo
28
+ )
29
+ end
28
30
  end
29
31
 
30
32
  protected
31
33
 
32
34
  def self.registered(app)
33
35
  app.set :mongo_url, ENV['MONGO_URL'] || 'mongo://127.0.0.1:27017/default'
36
+ app.set :mongo_settings, Hash.new
34
37
  app.helpers MongoHelper
35
38
  end
36
39
 
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{sinatra-mongo}
8
- s.version = "0.0.2"
8
+ s.version = "0.1.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Joshua Nichols"]
12
- s.date = %q{2009-12-10}
12
+ s.date = %q{2010-05-06}
13
13
  s.description = %q{= sinatra-mongo
14
14
 
15
15
  Extends Sinatra with an extension method for dealing with monogodb using the ruby driver.
@@ -63,28 +63,40 @@ Copyright (c) 2009 Joshua Nichols. See LICENSE for details.
63
63
  s.email = %q{josh@technicalpickles.com}
64
64
  s.extra_rdoc_files = [
65
65
  "LICENSE",
66
- "README.rdoc"
66
+ "README.rdoc"
67
67
  ]
68
68
  s.files = [
69
69
  ".document",
70
- ".gitignore",
71
- "LICENSE",
72
- "README.rdoc",
73
- "Rakefile",
74
- "lib/sinatra/mongo.rb",
75
- "sinatra-mongo.gemspec",
76
- "spec/sinatra-mongo_spec.rb",
77
- "spec/spec.opts",
78
- "spec/spec_helper.rb"
70
+ ".gitignore",
71
+ "LICENSE",
72
+ "README.rdoc",
73
+ "Rakefile",
74
+ "lib/sinatra/mongo.rb",
75
+ "sinatra-mongo.gemspec",
76
+ "spec/fixtures/classic_app.rb",
77
+ "spec/fixtures/modular_app.rb",
78
+ "spec/sinatra-mongo_classic_style_spec.rb",
79
+ "spec/sinatra-mongo_modular_style_spec.rb",
80
+ "spec/sinatra-mongo_spec.rb",
81
+ "spec/spec.opts",
82
+ "spec/spec_helper.rb",
83
+ "spec/support/rack_test.rb",
84
+ "spec/support/shared_examples.rb"
79
85
  ]
80
86
  s.homepage = %q{http://github.com/technicalpickles/sinatra-mongo}
81
87
  s.rdoc_options = ["--charset=UTF-8"]
82
88
  s.require_paths = ["lib"]
83
- s.rubygems_version = %q{1.3.5}
89
+ s.rubygems_version = %q{1.3.6}
84
90
  s.summary = %q{A light extension to sinatra for using mongo}
85
91
  s.test_files = [
92
+ "spec/fixtures/classic_app.rb",
93
+ "spec/fixtures/modular_app.rb",
94
+ "spec/sinatra-mongo_classic_style_spec.rb",
95
+ "spec/sinatra-mongo_modular_style_spec.rb",
86
96
  "spec/sinatra-mongo_spec.rb",
87
- "spec/spec_helper.rb"
97
+ "spec/spec_helper.rb",
98
+ "spec/support/rack_test.rb",
99
+ "spec/support/shared_examples.rb"
88
100
  ]
89
101
 
90
102
  if s.respond_to? :specification_version then
@@ -93,15 +105,18 @@ Copyright (c) 2009 Joshua Nichols. See LICENSE for details.
93
105
 
94
106
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
95
107
  s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
108
+ s.add_development_dependency(%q<rack-test>, [">= 0.5.3"])
96
109
  s.add_runtime_dependency(%q<mongo>, [">= 0"])
97
110
  s.add_runtime_dependency(%q<sinatra>, [">= 0.9.4"])
98
111
  else
99
112
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
113
+ s.add_dependency(%q<rack-test>, [">= 0.5.3"])
100
114
  s.add_dependency(%q<mongo>, [">= 0"])
101
115
  s.add_dependency(%q<sinatra>, [">= 0.9.4"])
102
116
  end
103
117
  else
104
118
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
119
+ s.add_dependency(%q<rack-test>, [">= 0.5.3"])
105
120
  s.add_dependency(%q<mongo>, [">= 0"])
106
121
  s.add_dependency(%q<sinatra>, [">= 0.9.4"])
107
122
  end
@@ -0,0 +1,8 @@
1
+ require 'sinatra'
2
+ require 'sinatra/mongo'
3
+
4
+ set :mongo, 'mongo://localhost:27017/sinatra-mongo-test'
5
+
6
+ get '/' do
7
+ mongo['test_collection'].find_one.inspect
8
+ end
@@ -0,0 +1,13 @@
1
+ require 'sinatra/base'
2
+ require 'sinatra/mongo'
3
+
4
+ class ModularApp < Sinatra::Base
5
+ register Sinatra::MongoExtension
6
+
7
+ set :mongo, 'mongo://localhost:27017/sinatra-mongo-test'
8
+
9
+ get '/' do
10
+ mongo['test_collection'].find_one.inspect
11
+ end
12
+ end
13
+
@@ -0,0 +1,13 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+ require 'fixtures/classic_app'
3
+
4
+ describe 'a classic style sinatra app' do
5
+ include Rack::Test::Methods
6
+
7
+ def app
8
+ Sinatra::Application
9
+ end
10
+
11
+ it_should_behave_like 'all sinatra-mongo test apps'
12
+
13
+ end
@@ -0,0 +1,13 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+ require 'fixtures/modular_app'
3
+
4
+ describe 'a modular style sinatra app' do
5
+ include Rack::Test::Methods
6
+
7
+ def app
8
+ ModularApp
9
+ end
10
+
11
+ it_should_behave_like 'all sinatra-mongo test apps'
12
+
13
+ end
@@ -1,7 +1,78 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
- describe "SinatraMongo" do
4
- it "fails" do
5
- fail "hey buddy, you should probably rename this file and start specing for real"
3
+ describe "Sinatra::MongoExtension" do
4
+ before(:each) do
5
+ @app = Sinatra.new
6
+ @app.register Sinatra::MongoExtension
7
+ end
8
+
9
+ describe '#mongo' do
10
+ it 'creates and returns a Mongo::DB instance' do
11
+ @app.mongo.should be_kind_of(Mongo::DB)
12
+ end
13
+
14
+ it 'defaults to a db on localhost called default' do
15
+ @app.mongo.connection.host.should == '127.0.0.1'
16
+ @app.mongo.connection.port.should == 27017
17
+ @app.mongo.name.should == 'default'
18
+ end
19
+
20
+ context 'mongo_url is set' do
21
+ before(:each) do
22
+ @mongo_url = 'mongo://127.0.0.1:27017/test'
23
+ @app.mongo = @mongo_url
24
+ end
25
+
26
+ it 'creates the Mongo::DB instance with the supplied uri' do
27
+ @app.mongo.connection.host.should == '127.0.0.1'
28
+ @app.mongo.connection.port.should == 27017
29
+ @app.mongo.name.should == 'test'
30
+ end
31
+ end
32
+ end
33
+
34
+ describe '#mongo=' do
35
+ before(:each) do
36
+ @mongo_uri = 'mongo://127.0.0.1:27017/test'
37
+ @mongo = mock('mongo')
38
+ @app.stub!(:mongo).and_return(@mongo)
39
+ end
40
+
41
+ it 'sets the mongo_url environment variable' do
42
+ @app.mongo = @mongo_uri
43
+ @app.mongo_url.should == @mongo_uri
44
+ end
45
+
46
+ it 'calls the #mongo method' do
47
+ @app.should_receive(:mongo)
48
+ @app.mongo = @mongo_uri
49
+ end
50
+ end
51
+ end
52
+
53
+ describe 'registration of the extension' do
54
+ before(:each) do
55
+ @app = Sinatra.new
56
+ end
57
+
58
+ it 'sets the mongo_url variable' do
59
+ @app.register(Sinatra::MongoExtension)
60
+ @app.mongo_url.should == 'mongo://127.0.0.1:27017/default'
61
+ end
62
+
63
+ context "ENV['MONGO_URL'] is set" do
64
+ before(:each) do
65
+ @mongo_url = 'mongo://127.0.0.1:27017/via_mongo_url_env'
66
+ ENV['MONGO_URL'] = @mongo_url
67
+ @app.register(Sinatra::MongoExtension)
68
+ end
69
+ it 'sets the mongo_url variable to the value of the env variable' do
70
+ @app.mongo_url.should == @mongo_url
71
+ end
72
+ end
73
+
74
+ it 'calls helpers with MongoHelper' do
75
+ @app.should_receive(:helpers).with(Sinatra::MongoHelper)
76
+ @app.register(Sinatra::MongoExtension)
6
77
  end
7
78
  end
@@ -1,9 +1,12 @@
1
1
  $LOAD_PATH.unshift(File.dirname(__FILE__))
2
2
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
- require 'sinatra-mongo'
3
+ require 'sinatra/mongo'
4
4
  require 'spec'
5
5
  require 'spec/autorun'
6
6
 
7
+ # Requires supporting files with custom matchers and macros, etc,
8
+ # in ./support/ and its subdirectories.
9
+ Dir[File.expand_path(File.join(File.dirname(__FILE__),'support','**','*.rb'))].each {|f| require f}
10
+
7
11
  Spec::Runner.configure do |config|
8
-
9
12
  end
@@ -0,0 +1 @@
1
+ require 'rack/test'
@@ -0,0 +1,17 @@
1
+ shared_examples_for 'all sinatra-mongo test apps' do
2
+ describe 'GET /' do
3
+ before(:each) do
4
+ 3.times { |i| mongo['test_collection'].insert({'x' => i }) }
5
+ end
6
+
7
+ after(:each) do
8
+ mongo['test_collection'].remove
9
+ end
10
+
11
+ it 'fetches and shows the first element in test_collection' do
12
+ get '/' do |response|
13
+ response.body.should match('"x"=>0')
14
+ end
15
+ end
16
+ end
17
+ end
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra-mongo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
5
10
  platform: ruby
6
11
  authors:
7
12
  - Joshua Nichols
@@ -9,39 +14,63 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2009-12-10 00:00:00 -05:00
17
+ date: 2010-05-06 00:00:00 -04:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: rspec
17
- type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ">="
22
26
  - !ruby/object:Gem::Version
27
+ segments:
28
+ - 1
29
+ - 2
30
+ - 9
23
31
  version: 1.2.9
24
- version:
32
+ type: :development
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: rack-test
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ - 5
44
+ - 3
45
+ version: 0.5.3
46
+ type: :development
47
+ version_requirements: *id002
25
48
  - !ruby/object:Gem::Dependency
26
49
  name: mongo
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
30
52
  requirements:
31
53
  - - ">="
32
54
  - !ruby/object:Gem::Version
55
+ segments:
56
+ - 0
33
57
  version: "0"
34
- version:
58
+ type: :runtime
59
+ version_requirements: *id003
35
60
  - !ruby/object:Gem::Dependency
36
61
  name: sinatra
37
- type: :runtime
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
62
+ prerelease: false
63
+ requirement: &id004 !ruby/object:Gem::Requirement
40
64
  requirements:
41
65
  - - ">="
42
66
  - !ruby/object:Gem::Version
67
+ segments:
68
+ - 0
69
+ - 9
70
+ - 4
43
71
  version: 0.9.4
44
- version:
72
+ type: :runtime
73
+ version_requirements: *id004
45
74
  description: |
46
75
  = sinatra-mongo
47
76
 
@@ -109,9 +138,15 @@ files:
109
138
  - Rakefile
110
139
  - lib/sinatra/mongo.rb
111
140
  - sinatra-mongo.gemspec
141
+ - spec/fixtures/classic_app.rb
142
+ - spec/fixtures/modular_app.rb
143
+ - spec/sinatra-mongo_classic_style_spec.rb
144
+ - spec/sinatra-mongo_modular_style_spec.rb
112
145
  - spec/sinatra-mongo_spec.rb
113
146
  - spec/spec.opts
114
147
  - spec/spec_helper.rb
148
+ - spec/support/rack_test.rb
149
+ - spec/support/shared_examples.rb
115
150
  has_rdoc: true
116
151
  homepage: http://github.com/technicalpickles/sinatra-mongo
117
152
  licenses: []
@@ -125,21 +160,29 @@ required_ruby_version: !ruby/object:Gem::Requirement
125
160
  requirements:
126
161
  - - ">="
127
162
  - !ruby/object:Gem::Version
163
+ segments:
164
+ - 0
128
165
  version: "0"
129
- version:
130
166
  required_rubygems_version: !ruby/object:Gem::Requirement
131
167
  requirements:
132
168
  - - ">="
133
169
  - !ruby/object:Gem::Version
170
+ segments:
171
+ - 0
134
172
  version: "0"
135
- version:
136
173
  requirements: []
137
174
 
138
175
  rubyforge_project:
139
- rubygems_version: 1.3.5
176
+ rubygems_version: 1.3.6
140
177
  signing_key:
141
178
  specification_version: 3
142
179
  summary: A light extension to sinatra for using mongo
143
180
  test_files:
181
+ - spec/fixtures/classic_app.rb
182
+ - spec/fixtures/modular_app.rb
183
+ - spec/sinatra-mongo_classic_style_spec.rb
184
+ - spec/sinatra-mongo_modular_style_spec.rb
144
185
  - spec/sinatra-mongo_spec.rb
145
186
  - spec/spec_helper.rb
187
+ - spec/support/rack_test.rb
188
+ - spec/support/shared_examples.rb