sequel_core 1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. data/CHANGELOG +1003 -0
  2. data/COPYING +18 -0
  3. data/README +81 -0
  4. data/Rakefile +176 -0
  5. data/bin/sequel +41 -0
  6. data/lib/sequel_core.rb +59 -0
  7. data/lib/sequel_core/adapters/adapter_skeleton.rb +68 -0
  8. data/lib/sequel_core/adapters/ado.rb +100 -0
  9. data/lib/sequel_core/adapters/db2.rb +158 -0
  10. data/lib/sequel_core/adapters/dbi.rb +126 -0
  11. data/lib/sequel_core/adapters/informix.rb +87 -0
  12. data/lib/sequel_core/adapters/jdbc.rb +108 -0
  13. data/lib/sequel_core/adapters/mysql.rb +269 -0
  14. data/lib/sequel_core/adapters/odbc.rb +145 -0
  15. data/lib/sequel_core/adapters/odbc_mssql.rb +93 -0
  16. data/lib/sequel_core/adapters/openbase.rb +90 -0
  17. data/lib/sequel_core/adapters/oracle.rb +99 -0
  18. data/lib/sequel_core/adapters/postgres.rb +519 -0
  19. data/lib/sequel_core/adapters/sqlite.rb +192 -0
  20. data/lib/sequel_core/array_keys.rb +296 -0
  21. data/lib/sequel_core/connection_pool.rb +152 -0
  22. data/lib/sequel_core/core_ext.rb +59 -0
  23. data/lib/sequel_core/core_sql.rb +191 -0
  24. data/lib/sequel_core/database.rb +433 -0
  25. data/lib/sequel_core/dataset.rb +409 -0
  26. data/lib/sequel_core/dataset/convenience.rb +321 -0
  27. data/lib/sequel_core/dataset/sequelizer.rb +354 -0
  28. data/lib/sequel_core/dataset/sql.rb +586 -0
  29. data/lib/sequel_core/exceptions.rb +45 -0
  30. data/lib/sequel_core/migration.rb +191 -0
  31. data/lib/sequel_core/model.rb +8 -0
  32. data/lib/sequel_core/pretty_table.rb +73 -0
  33. data/lib/sequel_core/schema.rb +8 -0
  34. data/lib/sequel_core/schema/schema_generator.rb +131 -0
  35. data/lib/sequel_core/schema/schema_sql.rb +131 -0
  36. data/lib/sequel_core/worker.rb +58 -0
  37. data/spec/adapters/informix_spec.rb +139 -0
  38. data/spec/adapters/mysql_spec.rb +330 -0
  39. data/spec/adapters/oracle_spec.rb +130 -0
  40. data/spec/adapters/postgres_spec.rb +189 -0
  41. data/spec/adapters/sqlite_spec.rb +345 -0
  42. data/spec/array_keys_spec.rb +679 -0
  43. data/spec/connection_pool_spec.rb +356 -0
  44. data/spec/core_ext_spec.rb +67 -0
  45. data/spec/core_sql_spec.rb +301 -0
  46. data/spec/database_spec.rb +812 -0
  47. data/spec/dataset_spec.rb +2381 -0
  48. data/spec/migration_spec.rb +261 -0
  49. data/spec/pretty_table_spec.rb +66 -0
  50. data/spec/rcov.opts +4 -0
  51. data/spec/schema_generator_spec.rb +86 -0
  52. data/spec/schema_spec.rb +230 -0
  53. data/spec/sequelizer_spec.rb +448 -0
  54. data/spec/spec.opts +5 -0
  55. data/spec/spec_helper.rb +44 -0
  56. data/spec/worker_spec.rb +96 -0
  57. metadata +162 -0
@@ -0,0 +1,44 @@
1
+ require 'rubygems'
2
+ require File.join(File.dirname(__FILE__), "../lib/sequel_core")
3
+
4
+ class MockDataset < Sequel::Dataset
5
+ def insert(*args)
6
+ @db.execute insert_sql(*args)
7
+ end
8
+
9
+ def update(*args)
10
+ @db.execute update_sql(*args)
11
+ end
12
+
13
+ def fetch_rows(sql)
14
+ @db.execute(sql)
15
+ yield({:id => 1, :x => 1})
16
+ end
17
+ end
18
+
19
+ class MockDatabase < Sequel::Database
20
+ attr_reader :sqls
21
+
22
+ def execute(sql)
23
+ @sqls ||= []
24
+ @sqls << sql
25
+ end
26
+
27
+ def reset
28
+ @sqls = []
29
+ end
30
+
31
+ def transaction; yield; end
32
+
33
+ def dataset; MockDataset.new(self); end
34
+ end
35
+
36
+ class SchemaDummyDatabase < Sequel::Database
37
+ attr_reader :sqls
38
+
39
+ def execute(sql)
40
+ @sqls ||= []
41
+ @sqls << sql
42
+ end
43
+ end
44
+
@@ -0,0 +1,96 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ context "A worker" do
4
+ setup do
5
+ @w = Sequel::Worker.new
6
+ end
7
+
8
+ teardown do
9
+ sleep 0.1
10
+ @w.join if @w
11
+ end
12
+
13
+ specify "should be a thread" do
14
+ @w.should be_a_kind_of(Thread)
15
+ end
16
+
17
+ specify "should be alive until it is joined" do
18
+ @w.should be_alive
19
+ end
20
+
21
+ specify "should be busy if any jobs are pending" do
22
+ @w.should_not be_busy
23
+ @w.add {sleep 0.5}
24
+ @w.should be_busy
25
+ end
26
+
27
+ specify "should accept jobs and perform them in the correct order" do
28
+ values = []
29
+ @w.add {values << 1}
30
+ @w.async {values << 2}
31
+ @w << proc {values << 3}
32
+
33
+ @w.join
34
+ values.should == [1, 2, 3]
35
+ end
36
+
37
+ specify "should isolate errors and hold them in #errors" do
38
+ values = []
39
+ @w.add {values << 1}
40
+ @w.async {values << 2}
41
+ @w.async {raise "bad bad bad"}
42
+ @w << proc {values << 3}
43
+
44
+ @w.join
45
+ values.should == [1, 2, 3]
46
+ @w.errors.size.should == 1
47
+ @w.errors.first.message.should == 'bad bad bad'
48
+ end
49
+ end
50
+
51
+ context "A worker with a given db" do
52
+ setup do
53
+ @db = MockDatabase.new
54
+ @m = Module.new do
55
+ def transaction
56
+ execute('BEGIN')
57
+ yield
58
+ execute('COMMIT')
59
+ rescue
60
+ execute('ROLLBACK')
61
+ end
62
+ end
63
+ @db.extend(@m)
64
+ @w = Sequel::Worker.new(@db)
65
+ end
66
+
67
+ teardown do
68
+ @w.join if @w
69
+ end
70
+
71
+ specify "should wrap everything in a transaction" do
72
+ @w.async {@db[:items] << {:x => 1}}
73
+ @w.join
74
+ @w = nil
75
+ @db.sqls.should == [
76
+ 'BEGIN',
77
+ 'INSERT INTO items (x) VALUES (1)',
78
+ 'COMMIT'
79
+ ]
80
+ end
81
+
82
+ specify "should rollback the transaction if any error is raised" do
83
+ @w.async {@db[:items] << {:x => 1}}
84
+ @w.async {sleep 0.2; raise "that's bad"}
85
+ @w.async {@db[:items] << {:x => 2}}
86
+ @w.join
87
+ @db.sqls.should == [
88
+ 'BEGIN',
89
+ 'INSERT INTO items (x) VALUES (1)',
90
+ 'INSERT INTO items (x) VALUES (2)',
91
+ 'ROLLBACK'
92
+ ]
93
+ @w.errors.size.should == 1
94
+ @w.errors.first.message.should == "that's bad"
95
+ end
96
+ end
metadata ADDED
@@ -0,0 +1,162 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sequel_core
3
+ version: !ruby/object:Gem::Version
4
+ version: "1.0"
5
+ platform: ruby
6
+ authors:
7
+ - Sharon Rosner
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-01-02 00:00:00 +02:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: metaid
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: "0"
23
+ version:
24
+ - !ruby/object:Gem::Dependency
25
+ name: RubyInline
26
+ version_requirement:
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: 3.6.6
32
+ version:
33
+ - !ruby/object:Gem::Dependency
34
+ name: ParseTree
35
+ version_requirement:
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 2.1.1
41
+ version:
42
+ - !ruby/object:Gem::Dependency
43
+ name: ruby2ruby
44
+ version_requirement:
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: "0"
50
+ version:
51
+ description: Database access for Ruby
52
+ email: ciconia@gmail.com
53
+ executables:
54
+ - sequel
55
+ extensions: []
56
+
57
+ extra_rdoc_files:
58
+ - README
59
+ - CHANGELOG
60
+ - COPYING
61
+ files:
62
+ - COPYING
63
+ - README
64
+ - Rakefile
65
+ - bin/sequel
66
+ - spec/adapters
67
+ - spec/adapters/informix_spec.rb
68
+ - spec/adapters/mysql_spec.rb
69
+ - spec/adapters/oracle_spec.rb
70
+ - spec/adapters/postgres_spec.rb
71
+ - spec/adapters/sqlite_spec.rb
72
+ - spec/array_keys_spec.rb
73
+ - spec/connection_pool_spec.rb
74
+ - spec/core_ext_spec.rb
75
+ - spec/core_sql_spec.rb
76
+ - spec/database_spec.rb
77
+ - spec/dataset_spec.rb
78
+ - spec/migration_spec.rb
79
+ - spec/pretty_table_spec.rb
80
+ - spec/rcov.opts
81
+ - spec/schema_generator_spec.rb
82
+ - spec/schema_spec.rb
83
+ - spec/sequelizer_spec.rb
84
+ - spec/spec.opts
85
+ - spec/spec_helper.rb
86
+ - spec/worker_spec.rb
87
+ - lib/sequel_core
88
+ - lib/sequel_core/adapters
89
+ - lib/sequel_core/adapters/adapter_skeleton.rb
90
+ - lib/sequel_core/adapters/ado.rb
91
+ - lib/sequel_core/adapters/db2.rb
92
+ - lib/sequel_core/adapters/dbi.rb
93
+ - lib/sequel_core/adapters/informix.rb
94
+ - lib/sequel_core/adapters/jdbc.rb
95
+ - lib/sequel_core/adapters/mysql.rb
96
+ - lib/sequel_core/adapters/odbc.rb
97
+ - lib/sequel_core/adapters/odbc_mssql.rb
98
+ - lib/sequel_core/adapters/openbase.rb
99
+ - lib/sequel_core/adapters/oracle.rb
100
+ - lib/sequel_core/adapters/postgres.rb
101
+ - lib/sequel_core/adapters/sqlite.rb
102
+ - lib/sequel_core/array_keys.rb
103
+ - lib/sequel_core/connection_pool.rb
104
+ - lib/sequel_core/core_ext.rb
105
+ - lib/sequel_core/core_sql.rb
106
+ - lib/sequel_core/database.rb
107
+ - lib/sequel_core/dataset
108
+ - lib/sequel_core/dataset/convenience.rb
109
+ - lib/sequel_core/dataset/sequelizer.rb
110
+ - lib/sequel_core/dataset/sql.rb
111
+ - lib/sequel_core/dataset.rb
112
+ - lib/sequel_core/exceptions.rb
113
+ - lib/sequel_core/migration.rb
114
+ - lib/sequel_core/model.rb
115
+ - lib/sequel_core/pretty_table.rb
116
+ - lib/sequel_core/schema
117
+ - lib/sequel_core/schema/schema_generator.rb
118
+ - lib/sequel_core/schema/schema_sql.rb
119
+ - lib/sequel_core/schema.rb
120
+ - lib/sequel_core/worker.rb
121
+ - lib/sequel_core.rb
122
+ - CHANGELOG
123
+ has_rdoc: true
124
+ homepage: http://sequel.rubyforge.org
125
+ post_install_message:
126
+ rdoc_options:
127
+ - --quiet
128
+ - --title
129
+ - "Sequel: Database access for Ruby"
130
+ - --opname
131
+ - index.html
132
+ - --line-numbers
133
+ - --main
134
+ - README
135
+ - --inline-source
136
+ - --exclude
137
+ - ^(examples|extras)/
138
+ - --exclude
139
+ - lib/sequel_core.rb
140
+ require_paths:
141
+ - lib
142
+ required_ruby_version: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: 1.8.4
147
+ version:
148
+ required_rubygems_version: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: "0"
153
+ version:
154
+ requirements: []
155
+
156
+ rubyforge_project: sequel
157
+ rubygems_version: 1.0.1
158
+ signing_key:
159
+ specification_version: 2
160
+ summary: Database access for Ruby
161
+ test_files: []
162
+