sequel_core 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.
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
+