sinatra-dm 0.1.2 → 0.1.3

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/sinatra-dm.gemspec CHANGED
@@ -1,15 +1,15 @@
1
1
  # Generated by jeweler
2
- # DO NOT EDIT THIS FILE
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{sinatra-dm}
8
- s.version = "0.1.2"
8
+ s.version = "0.1.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["kematzy"]
12
- s.date = %q{2009-11-06}
12
+ s.date = %q{2010-02-22}
13
13
  s.description = %q{Sinatra Extension for working with DataMapper (another Sinatra-Sequel Rip-off)}
14
14
  s.email = %q{kematzy@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -24,12 +24,13 @@ Gem::Specification.new do |s|
24
24
  "Rakefile",
25
25
  "VERSION",
26
26
  "lib/sinatra/dm.rb",
27
- "lib/sinatra/dm/rake.rb",
28
27
  "sinatra-dm.gemspec",
29
- "spec/dm_model.rb",
28
+ "spec/dm_bootstrap.rb",
30
29
  "spec/fixtures/db/.gitignore",
30
+ "spec/fixtures/db/custom/.gitignore",
31
31
  "spec/fixtures/log/.gitignore",
32
- "spec/sinatra/dm_spec.rb",
32
+ "spec/sinatra/dm_mysql_spec.rb",
33
+ "spec/sinatra/dm_sqlite3_spec.rb",
33
34
  "spec/spec_helper.rb"
34
35
  ]
35
36
  s.homepage = %q{http://github.com/kematzy/sinatra-dm}
@@ -38,8 +39,9 @@ Gem::Specification.new do |s|
38
39
  s.rubygems_version = %q{1.3.5}
39
40
  s.summary = %q{Sinatra Extension for working with DataMapper}
40
41
  s.test_files = [
41
- "spec/dm_model.rb",
42
- "spec/sinatra/dm_spec.rb",
42
+ "spec/dm_bootstrap.rb",
43
+ "spec/sinatra/dm_mysql_spec.rb",
44
+ "spec/sinatra/dm_sqlite3_spec.rb",
43
45
  "spec/spec_helper.rb"
44
46
  ]
45
47
 
@@ -50,15 +52,19 @@ Gem::Specification.new do |s|
50
52
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
51
53
  s.add_runtime_dependency(%q<sinatra>, [">= 0.10.1"])
52
54
  s.add_runtime_dependency(%q<dm-core>, [">= 0.10.1"])
55
+ s.add_runtime_dependency(%q<kematzy-tasks>, [">= 0.1.0"])
53
56
  s.add_development_dependency(%q<sinatra-tests>, [">= 0.1.5"])
54
57
  else
55
58
  s.add_dependency(%q<sinatra>, [">= 0.10.1"])
56
59
  s.add_dependency(%q<dm-core>, [">= 0.10.1"])
60
+ s.add_dependency(%q<kematzy-tasks>, [">= 0.1.0"])
57
61
  s.add_dependency(%q<sinatra-tests>, [">= 0.1.5"])
58
62
  end
59
63
  else
60
64
  s.add_dependency(%q<sinatra>, [">= 0.10.1"])
61
65
  s.add_dependency(%q<dm-core>, [">= 0.10.1"])
66
+ s.add_dependency(%q<kematzy-tasks>, [">= 0.1.0"])
62
67
  s.add_dependency(%q<sinatra-tests>, [">= 0.1.5"])
63
68
  end
64
69
  end
70
+
@@ -0,0 +1,14 @@
1
+ class ::Post
2
+ include DataMapper::Resource
3
+ property :id, Serial
4
+ property :name, String
5
+ end
6
+
7
+ def dm_bootstrap(identifier='')
8
+
9
+ DataMapper.auto_migrate!
10
+
11
+ Post.create!(:name => "#{identifier}Post1" )
12
+ Post.create!(:name => "#{identifier}Post2" )
13
+ Post.create!(:name => "#{identifier}Post3" )
14
+ end
@@ -0,0 +1,148 @@
1
+
2
+ require File.expand_path(File.dirname(__FILE__) + '../../spec_helper')
3
+
4
+ describe "Sinatra" do
5
+
6
+ describe "DM" do
7
+
8
+ describe "when using a MySQL db" do
9
+
10
+ class MySQLTestApp < Sinatra::Base
11
+ register(Sinatra::DataMapperExtension)
12
+
13
+ # NOTE:: :dm_logger_level & :dm_logger_path must be set before :database
14
+ # in order to use custom settings
15
+ set :dm_logger_level, :debug
16
+ set :dm_logger_path, "#{fixtures_path}/log/dm.mysql_test_app.log"
17
+
18
+ # NB!! sets the connection to an existing db [sinatra_dm_tests]
19
+ # in a standard install MySQL db (ie: unsecured) without a password
20
+ set :database, 'mysql://root:@localhost/sinatra_dm_tests'
21
+
22
+ ## ROUTES TEST (IF DATA COMES THROUGH)
23
+ get '/db-mysql' do
24
+ Post.all.map(&:name).join(', ') # Post1, Post2,...
25
+ end
26
+
27
+ end
28
+
29
+ before(:each) do
30
+ class ::Test::Unit::TestCase
31
+ def app; ::MySQLTestApp.new ; end
32
+ end
33
+ @app = app
34
+
35
+ dm_bootstrap('MySQL-Test') ## INIT THE TABLES AND LOAD THE DATA
36
+ end
37
+
38
+ after(:each) do
39
+ class ::Test::Unit::TestCase
40
+ def app; nil ; end
41
+ end
42
+ @app = nil
43
+ end
44
+
45
+ describe "Configurations" do
46
+
47
+ it "should set :db_dir to [../db] (NB! unused value when using MySQL)" do
48
+ MySQLTestApp.db_dir.should == "#{fixtures_path}/db"
49
+ end
50
+
51
+ it "should set :dm_logger_level to :debug" do
52
+ MySQLTestApp.dm_logger_level.should == :debug
53
+ end
54
+
55
+ it "should set :dm_logger_path to [../log/dm.mysql_test_app.log]" do
56
+ MySQLTestApp.dm_logger_path.should == "#{fixtures_path}/log/dm.mysql_test_app.log"
57
+ end
58
+
59
+ it "should set :dm_setup_context to :default" do
60
+ MySQLTestApp.dm_setup_context.should == :default
61
+ end
62
+
63
+ it "should set :dm_database_url to [mysql://]" do
64
+ MySQLTestApp.dm_database_url.should == "mysql://root:@localhost/sinatra_dm_tests"
65
+ end
66
+
67
+ end #/ Configurations
68
+
69
+
70
+ describe "Helper method " do
71
+
72
+ describe "#database" do
73
+
74
+ it "should return an MySQL Adapter" do
75
+ app.database.should be_a_kind_of(DataMapper::Adapters::MysqlAdapter)
76
+ end
77
+
78
+ describe "and the MySQL Adapter " do
79
+
80
+ it "should be configured with the correct DB host [localhost]" do
81
+ app.database.options['host'].should == "localhost"
82
+ end
83
+
84
+ it "should be configured with the correct DB path [/sinatra_dm_tests]" do
85
+ app.database.options['path'].should == "/sinatra_dm_tests"
86
+ end
87
+
88
+ it "should be configured with the correct DB user [root]" do
89
+ app.database.options['user'].should == "root"
90
+ end
91
+
92
+ it "should be configured with the correct DB password [ (empty)]" do
93
+ app.database.options['password'].should == ""
94
+ end
95
+
96
+ it "should be configured with the correct setup [:default]" do
97
+ app.database.name.should == :default
98
+ end
99
+
100
+ end #/ and the MySQL Adapter
101
+
102
+
103
+ end #/ #database
104
+
105
+ describe "#db_logger" do
106
+
107
+ it "should be a DataMapper::Logger Object" do
108
+ app.db_logger.should be_a_kind_of(DataMapper::Logger)
109
+ end
110
+
111
+ it "should have the correct log path [../log/dm.mysql_test_app.log]" do
112
+ app.db_logger.init_args[0].should == "#{fixtures_path}/log/dm.mysql_test_app.log"
113
+ end
114
+
115
+ it "should have the correct log level [:debug]" do
116
+ app.db_logger.init_args[1].should == :debug
117
+ end
118
+
119
+ it "should write log messages to the log file" do
120
+ custom_message = "__INFO_MYSQL_MESSAGE__ written at [#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}]"
121
+ app.db_logger.info(custom_message)
122
+ IO.read(app.db_logger.init_args[0]).should match(/#{Regexp.escape(custom_message)}/)
123
+ end
124
+
125
+ it "should write debug log messages to the log file" do
126
+ custom_message = "__DEBUG_MYSQL_MESSAGE__ written at [#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}]"
127
+ app.db_logger.debug(custom_message)
128
+ IO.read(app.db_logger.init_args[0]).should match(/#{Regexp.escape(custom_message)}/)
129
+ end
130
+
131
+ end #/ #db_logger
132
+
133
+ end #/ Helper method
134
+
135
+
136
+ describe "DB Queries" do
137
+
138
+ it "should return the data from the database" do
139
+ get("/db-mysql")
140
+ body.should == "MySQL-TestPost1, MySQL-TestPost2, MySQL-TestPost3"
141
+ end
142
+
143
+ end #/ DB Queries
144
+
145
+
146
+ end #/ when using a MySQL
147
+ end #/ DM
148
+ end #/ Sinatra
@@ -0,0 +1,308 @@
1
+
2
+ require File.expand_path(File.dirname(__FILE__) + '../../spec_helper')
3
+
4
+ describe "Sinatra" do
5
+
6
+ describe "DM" do
7
+
8
+ describe "when using a SQLite3 db" do
9
+
10
+ describe "and using Default Settings" do
11
+
12
+ class MyTestApp < Sinatra::Base
13
+ register(Sinatra::DataMapperExtension)
14
+
15
+ # NOTE:: need to set this for the logger to function
16
+ set :environment, ENV['RACK_ENV'].to_sym || :test
17
+
18
+ # NOTE:: The database configuration must be set
19
+ # in order for the DataMapper.auto_migrate! /auto_upgrade! migrations work
20
+ set :database, dm_database_url
21
+
22
+ ## ROUTES TEST (IF DATA COMES THROUGH)
23
+ get '/db-default' do
24
+ Post.all.map(&:name).join(', ') # Post1, Post2,...
25
+ end
26
+
27
+ end
28
+
29
+ before(:each) do
30
+ class ::Test::Unit::TestCase
31
+ def app; ::MyTestApp.new ; end
32
+ end
33
+ @app = app
34
+
35
+ dm_bootstrap('SQLite3-Default') ## INIT THE TABLES AND LOAD THE DATA
36
+ end
37
+
38
+ after(:each) do
39
+ class ::Test::Unit::TestCase
40
+ def app; nil ; end
41
+ end
42
+ @app = nil
43
+ end
44
+
45
+ describe "Configuration" do
46
+
47
+ it "should set :db_dir to ../db" do
48
+ MyTestApp.db_dir.should == "#{fixtures_path}/db"
49
+ end
50
+
51
+ it "should set :dm_logger_level to :debug" do
52
+ MyTestApp.dm_logger_level.should == :debug
53
+ end
54
+
55
+ it "should set :dm_logger_path to [../log/dm.< environment >.log]" do
56
+ MyTestApp.dm_logger_path.should == "#{fixtures_path}/log/dm.test.log"
57
+ end
58
+
59
+ it "should set :dm_setup_context to :default" do
60
+ MyTestApp.dm_setup_context.should == :default
61
+ end
62
+
63
+ it "should set :dm_database_url to [../db/db.< environment >.db]" do
64
+ MyTestApp.dm_database_url.should == "sqlite3://#{fixtures_path}/db/db.test.db"
65
+ end
66
+
67
+ end #/ Configuration
68
+
69
+ describe "Helpers" do
70
+
71
+ describe "#database" do
72
+
73
+ it "should return an SQLite3 Adapter" do
74
+ app.database.should be_a_kind_of(DataMapper::Adapters::Sqlite3Adapter)
75
+ end
76
+
77
+ it "should be configured with the correct DB path [../db/db.< environment >.db]" do
78
+ app.database.options['path'].should == "#{fixtures_path}/db/db.test.db"
79
+ end
80
+
81
+ it "should be configured with the correct setup [:default]" do
82
+ app.database.name.should == :default
83
+ end
84
+
85
+ end #/ #database
86
+
87
+ describe "#db_logger" do
88
+
89
+ it "should be a DataMapper::Logger Object" do
90
+ app.db_logger.should be_a_kind_of(DataMapper::Logger)
91
+ end
92
+
93
+ it "should have the correct log path [../log/dm.< environment >.log]" do
94
+ app.db_logger.init_args[0].should == "#{fixtures_path}/log/dm.test.log"
95
+ end
96
+
97
+ it "should have the correct log level [:debug]" do
98
+ app.db_logger.init_args[1].should == :debug
99
+ end
100
+
101
+ it "should write log messages to the log file" do
102
+ custom_message = "__DEBUG_DEFAULT_MESSAGE__ written at [#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}]"
103
+ app.db_logger.debug(custom_message)
104
+ IO.read(app.db_logger.init_args[0]).should match(/#{Regexp.escape(custom_message)}/)
105
+ end
106
+
107
+ end #/ #db_logger
108
+
109
+ end #/ Helpers
110
+
111
+
112
+ describe "Class Methods" do
113
+
114
+ describe "#database_logger" do
115
+
116
+ it "should be a DataMapper::Logger Object" do
117
+ MyTestApp.database_logger.should be_a_kind_of(DataMapper::Logger)
118
+ end
119
+
120
+ it "should have the correct log path [../log/dm.< environment >.log]" do
121
+ MyTestApp.database_logger.init_args[0].should == "#{fixtures_path}/log/dm.test.log"
122
+ end
123
+
124
+ it "should write log messages to the log file" do
125
+ custom_message = "__DEBUG_CLASS_METHOD_DEFAULT_MESSAGE__ written at [#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}]"
126
+ MyTestApp.database_logger.debug(custom_message)
127
+ IO.read(MyTestApp.database_logger.init_args[0]).should match(/#{Regexp.escape(custom_message)}/)
128
+ end
129
+
130
+ end #/ #database_logger
131
+
132
+ describe "#database" do
133
+
134
+ it "should return an SQLite3 Adapter" do
135
+ MyTestApp.database.should be_a_kind_of(DataMapper::Adapters::Sqlite3Adapter)
136
+ end
137
+
138
+ it "should be configured with the correct DB path [../db/db.< environment >.db]" do
139
+ MyTestApp.database.options['path'].should == "#{fixtures_path}/db/db.test.db"
140
+ end
141
+
142
+ it "should be configured with the correct setup [:default]" do
143
+ MyTestApp.database.name.should == :default
144
+ end
145
+
146
+ end #/ #database
147
+
148
+ describe "#database=" do
149
+
150
+ it "should allow changing the DB settings" do
151
+ lambda {
152
+ MyTestApp.database = "sqlite3://#{fixtures_path}/db/db.class_method.db", :class_method
153
+ }.should_not raise_error(Exception)
154
+ MyTestApp.database.options['path'].should == "#{fixtures_path}/db/db.class_method.db"
155
+ MyTestApp.database.name.should == :class_method
156
+ end
157
+
158
+ it "should throw ArgumentError when using the wrong syntax ..App.database(vars, vars)" do
159
+ lambda {
160
+ MyTestApp.database("sqlite3://#{fixtures_path}/db/db.class_method.db", :class_method)
161
+ }.should raise_error(ArgumentError)
162
+ end
163
+
164
+ end #/ #database=
165
+
166
+ end #/ Class Methods
167
+
168
+
169
+ describe "DB Queries" do
170
+
171
+ it "should return the data from the database" do
172
+ get("/db-default")
173
+ body.should == "SQLite3-DefaultPost1, SQLite3-DefaultPost2, SQLite3-DefaultPost3"
174
+ end
175
+
176
+ end #/ DB Queries
177
+
178
+ end #/ and using Default Settings
179
+
180
+
181
+ describe "and using Custom Settings" do
182
+
183
+ class MyCustomTestApp < Sinatra::Base
184
+ register(Sinatra::DataMapperExtension)
185
+
186
+ # NOTE:: :dm_logger_level & :dm_logger_path must be set before :database
187
+ # in order to use custom settings
188
+ set :db_dir, "#{fixtures_path}/db/custom"
189
+ set :dm_logger_level, :info
190
+ set :dm_logger_path, "#{fixtures_path}/log/dm.my_custom_test_app.log"
191
+ set :dm_setup_context, :custom
192
+ set :dm_database_url, lambda { "sqlite3://#{db_dir}/db.my_custom_test_app.db" }
193
+
194
+ # NOTE:: The database configuration must be set
195
+ # in order for the DataMapper.auto_migrate! /auto_upgrade! migrations work
196
+ set :database, dm_database_url
197
+
198
+ ## ROUTES TEST (IF DATA COMES THROUGH)
199
+ get '/db-custom' do
200
+ Post.all.map(&:name).join(', ') # Post1, Post2,...
201
+ end
202
+
203
+ end
204
+
205
+ before(:each) do
206
+ class ::Test::Unit::TestCase
207
+ def app; ::MyCustomTestApp.new ; end
208
+ end
209
+ @app = app
210
+
211
+ dm_bootstrap('SQLite3-Custom') ## INIT THE TABLES AND LOAD THE DATA
212
+ end
213
+
214
+ after(:each) do
215
+ class ::Test::Unit::TestCase
216
+ def app; nil ; end
217
+ end
218
+ @app = nil
219
+ end
220
+
221
+ describe "Configurations" do
222
+
223
+ it "should set :db_dir to ../db/custom" do
224
+ MyCustomTestApp.db_dir.should == "#{fixtures_path}/db/custom"
225
+ end
226
+
227
+ it "should set :dm_logger_level to :info" do
228
+ MyCustomTestApp.dm_logger_level.should == :info
229
+ end
230
+
231
+ it "should set :dm_logger_path to [../log/dm.my_custom_test_app.log]" do
232
+ MyCustomTestApp.dm_logger_path.should == "#{fixtures_path}/log/dm.my_custom_test_app.log"
233
+ end
234
+
235
+ it "should set :dm_setup_context to :custom" do
236
+ MyCustomTestApp.dm_setup_context.should == :custom
237
+ end
238
+
239
+ it "should set :dm_database_url to [../db/db.my_custom_test_app.db]" do
240
+ MyCustomTestApp.dm_database_url.should == "sqlite3://#{fixtures_path}/db/custom/db.my_custom_test_app.db"
241
+ end
242
+
243
+ end #/ Configurations
244
+
245
+
246
+ describe "Helper method " do
247
+
248
+ describe "#database" do
249
+
250
+ it "should return an SQLite3 Adapter" do
251
+ app.database.should be_a_kind_of(DataMapper::Adapters::Sqlite3Adapter)
252
+ end
253
+
254
+ it "should be configured with the correct DB path [../db/db.my_custom_test_app.db]" do
255
+ app.database.options['path'].should == "#{fixtures_path}/db/custom/db.my_custom_test_app.db"
256
+ end
257
+
258
+ it "should be configured with the correct setup [:custom]" do
259
+ app.database.name.should == :custom
260
+ end
261
+
262
+ end #/ #database
263
+
264
+ describe "#db_logger" do
265
+
266
+ it "should be a DataMapper::Logger Object" do
267
+ app.db_logger.should be_a_kind_of(DataMapper::Logger)
268
+ end
269
+
270
+ it "should have the correct log path [../log/dm.my_custom_test_app.log]" do
271
+ app.db_logger.init_args[0].should == "#{fixtures_path}/log/dm.my_custom_test_app.log"
272
+ end
273
+
274
+ it "should have the correct log level [:info]" do
275
+ app.db_logger.init_args[1].should == :info
276
+ end
277
+
278
+ it "should write log messages to the log file" do
279
+ custom_message = "__INFO_CUSTOM_MESSAGE__ written at [#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}]"
280
+ app.db_logger.info(custom_message)
281
+ IO.read(app.db_logger.init_args[0]).should match(/#{Regexp.escape(custom_message)}/)
282
+ end
283
+
284
+ it "should NOT write debug log messages to the log file" do
285
+ custom_message = "__DEBUG_CUSTOM_MESSAGE__ written at [#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}]"
286
+ app.db_logger.debug(custom_message)
287
+ IO.read(app.db_logger.init_args[0]).should_not match(/#{Regexp.escape(custom_message)}/)
288
+ end
289
+
290
+ end #/ #db_logger
291
+
292
+ end #/ Helper method
293
+
294
+
295
+ describe "DB Queries" do
296
+
297
+ it "should return the data from the database" do
298
+ get("/db-custom")
299
+ body.should == "SQLite3-CustomPost1, SQLite3-CustomPost2, SQLite3-CustomPost3"
300
+ end
301
+
302
+ end #/ DB Queries
303
+
304
+ end #/ and using Custom Settings
305
+
306
+ end #/ when using a SQLite3 db
307
+ end #/ DM
308
+ end #/ Sinatra