sequel 2.10.0 → 2.11.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 (78) hide show
  1. data/CHANGELOG +51 -1
  2. data/README.rdoc +2 -2
  3. data/Rakefile +2 -2
  4. data/doc/advanced_associations.rdoc +6 -18
  5. data/doc/release_notes/1.0.txt +38 -0
  6. data/doc/release_notes/1.1.txt +143 -0
  7. data/doc/release_notes/1.3.txt +101 -0
  8. data/doc/release_notes/1.4.0.txt +53 -0
  9. data/doc/release_notes/1.5.0.txt +155 -0
  10. data/doc/release_notes/2.0.0.txt +298 -0
  11. data/doc/release_notes/2.1.0.txt +271 -0
  12. data/doc/release_notes/2.10.0.txt +328 -0
  13. data/doc/release_notes/2.11.0.txt +215 -0
  14. data/doc/release_notes/2.2.0.txt +253 -0
  15. data/doc/release_notes/2.3.0.txt +88 -0
  16. data/doc/release_notes/2.4.0.txt +106 -0
  17. data/doc/release_notes/2.5.0.txt +137 -0
  18. data/doc/release_notes/2.6.0.txt +157 -0
  19. data/doc/release_notes/2.7.0.txt +166 -0
  20. data/doc/release_notes/2.8.0.txt +171 -0
  21. data/doc/release_notes/2.9.0.txt +97 -0
  22. data/lib/sequel_core/adapters/ado.rb +3 -0
  23. data/lib/sequel_core/adapters/db2.rb +0 -11
  24. data/lib/sequel_core/adapters/dbi.rb +0 -11
  25. data/lib/sequel_core/adapters/do.rb +0 -12
  26. data/lib/sequel_core/adapters/firebird.rb +21 -16
  27. data/lib/sequel_core/adapters/informix.rb +1 -11
  28. data/lib/sequel_core/adapters/jdbc.rb +1 -13
  29. data/lib/sequel_core/adapters/jdbc/h2.rb +3 -11
  30. data/lib/sequel_core/adapters/jdbc/mysql.rb +0 -17
  31. data/lib/sequel_core/adapters/jdbc/postgresql.rb +3 -15
  32. data/lib/sequel_core/adapters/mysql.rb +31 -27
  33. data/lib/sequel_core/adapters/odbc.rb +34 -28
  34. data/lib/sequel_core/adapters/openbase.rb +0 -11
  35. data/lib/sequel_core/adapters/oracle.rb +11 -9
  36. data/lib/sequel_core/adapters/postgres.rb +14 -17
  37. data/lib/sequel_core/adapters/shared/mssql.rb +6 -15
  38. data/lib/sequel_core/adapters/shared/mysql.rb +29 -14
  39. data/lib/sequel_core/adapters/shared/oracle.rb +4 -0
  40. data/lib/sequel_core/adapters/shared/postgres.rb +30 -35
  41. data/lib/sequel_core/adapters/shared/progress.rb +4 -0
  42. data/lib/sequel_core/adapters/shared/sqlite.rb +73 -13
  43. data/lib/sequel_core/adapters/sqlite.rb +8 -18
  44. data/lib/sequel_core/adapters/utils/date_format.rb +21 -0
  45. data/lib/sequel_core/{dataset → adapters/utils}/stored_procedures.rb +0 -0
  46. data/lib/sequel_core/{dataset → adapters/utils}/unsupported.rb +0 -0
  47. data/lib/sequel_core/core_ext.rb +1 -1
  48. data/lib/sequel_core/core_sql.rb +9 -4
  49. data/lib/sequel_core/database.rb +63 -62
  50. data/lib/sequel_core/dataset.rb +9 -4
  51. data/lib/sequel_core/dataset/convenience.rb +10 -9
  52. data/lib/sequel_core/dataset/prepared_statements.rb +1 -1
  53. data/lib/sequel_core/dataset/sql.rb +130 -36
  54. data/lib/sequel_core/schema/sql.rb +2 -2
  55. data/lib/sequel_core/sql.rb +44 -51
  56. data/lib/sequel_core/version.rb +1 -1
  57. data/lib/sequel_model/associations.rb +25 -17
  58. data/lib/sequel_model/base.rb +35 -7
  59. data/lib/sequel_model/caching.rb +1 -6
  60. data/lib/sequel_model/record.rb +23 -5
  61. data/lib/sequel_model/validations.rb +20 -5
  62. data/spec/adapters/firebird_spec.rb +6 -1
  63. data/spec/adapters/mysql_spec.rb +12 -0
  64. data/spec/adapters/postgres_spec.rb +2 -2
  65. data/spec/adapters/sqlite_spec.rb +81 -2
  66. data/spec/integration/dataset_test.rb +2 -2
  67. data/spec/integration/type_test.rb +12 -2
  68. data/spec/sequel_core/core_sql_spec.rb +46 -12
  69. data/spec/sequel_core/database_spec.rb +24 -12
  70. data/spec/sequel_core/dataset_spec.rb +82 -32
  71. data/spec/sequel_core/schema_spec.rb +16 -0
  72. data/spec/sequel_model/associations_spec.rb +89 -0
  73. data/spec/sequel_model/base_spec.rb +66 -0
  74. data/spec/sequel_model/eager_loading_spec.rb +32 -0
  75. data/spec/sequel_model/record_spec.rb +9 -9
  76. data/spec/sequel_model/spec_helper.rb +3 -0
  77. data/spec/sequel_model/validations_spec.rb +63 -3
  78. metadata +41 -4
data/CHANGELOG CHANGED
@@ -1,3 +1,53 @@
1
+ === 2.11.0 (2009-03-02)
2
+
3
+ * Optimize Model.[] by using static sql when possible, for a 30-40% speed increase (jeremyevans)
4
+
5
+ * Add Dataset#with_sql, which returns a clone of the datatset with static SQL (jeremyevans)
6
+
7
+ * Refactor Dataset#literal so it doesn't need to be overridden in subadapters, for a 20-25% performance increase (jeremyevans)
8
+
9
+ * Remove SQL::IrregularFunction, no longer used internally (jeremyevans)
10
+
11
+ * Allow String#lit to take arguments and return a SQL::PlaceholderLiteralString (jeremyevans)
12
+
13
+ * Add Model#set_associated_object, used by the many_to_one setter method, for easier overriding (jeremyevans)
14
+
15
+ * Allow use of database independent types when casting (jeremyevans)
16
+
17
+ * Give association datasets knowledge of the model object that created them and the related association reflection (jeremyevans)
18
+
19
+ * Make Dataset#select, #select_more, #order, #order_more, and #get take a block that yields a SQL::VirtualRow, similar to #filter (jeremyevans)
20
+
21
+ * Fix stored procedures in MySQL adapter when multiple arguments are used (clivecrous)
22
+
23
+ * Add :conditions association option, for easier filtering of associated objects (jeremyevans)
24
+
25
+ * Add :clone association option, for making clones of existing associations (jeremyevans)
26
+
27
+ * Handle typecasting invalid date strings (and possible other types) correctly (jeremyevans)
28
+
29
+ * Add :compress=>false option to MySQL adapter to turn off compression of client-server connection (tmm1)
30
+
31
+ * Set SQL_AUTO_IS_NULL=0 on MySQL connections, disable with :auto_is_null=>false (tmm1)
32
+
33
+ * Add :timeout option to MySQL adapter, default to 30 days (tmm1)
34
+
35
+ * Set MySQL encoding using Mysql#options so it works across reconnects (tmm1)
36
+
37
+ * Fully support blobs on SQLite (jeremyevans)
38
+
39
+ * Add String#to_sequel_blob, alias String#to_blob to that (jeremyevans)
40
+
41
+ * Fix default index names when a non-String or Symbol column is used (jeremyevans)
42
+
43
+ * Fix some ruby -w warnings (jeremyevans) (#259)
44
+
45
+ * Fix issues with default column values, table names, and quoting in the rename_column and drop_column support in shared SQLite adapter (jeremyevans)
46
+
47
+ * Add rename_column support to SQLite shared adapter (jmhodges)
48
+
49
+ * Add validates_inclusion_of validation (jdunphy)
50
+
1
51
  === 2.10.0 (2009-02-03)
2
52
 
3
53
  * Don't use a default schema any longer in the shared PostgreSQL adapter (jeremyevans)
@@ -68,7 +118,7 @@
68
118
 
69
119
  * Fix add_foreign_key for MySQL (jeremyevans, aphyr)
70
120
 
71
- * Correctly literalize BigDecimal NaN and (+-)Infinity values (#256) (jeremyevans)
121
+ * Correctly literalize BigDecimal NaN and (+-)Infinity values (jeremyevans) (#256)
72
122
 
73
123
  * Make Sequel raise an Error if you attempt to subclass Sequel::Model before setting up a database connection (jeremyevans)
74
124
 
data/README.rdoc CHANGED
@@ -228,7 +228,7 @@ You can also specify a custom WHERE clause using a string:
228
228
  You can use parameters in your string, as well (ActiveRecord style):
229
229
 
230
230
  posts.filter('(stamp < ?) AND (author != ?)', Date.today - 3, author_name)
231
- posts.filter{|o| (o.stamp < Date.today + 3) & ~{:author => author_name}} # same as above
231
+ posts.filter{|o| (o.stamp < Date.today - 3) & ~{:author => author_name}} # same as above
232
232
 
233
233
  Datasets can also be used as subqueries:
234
234
 
@@ -369,7 +369,7 @@ Models in Sequel are based on the Active Record pattern described by Martin Fowl
369
369
 
370
370
  Model classes are defined as regular Ruby classes:
371
371
 
372
- DB = Sequel.connect('sqlite:/blog.db')
372
+ DB = Sequel.connect('sqlite://blog.db')
373
373
  class Post < Sequel::Model
374
374
  end
375
375
 
data/Rakefile CHANGED
@@ -28,7 +28,7 @@ spec = Gem::Specification.new do |s|
28
28
  s.version = VERS
29
29
  s.platform = Gem::Platform::RUBY
30
30
  s.has_rdoc = true
31
- s.extra_rdoc_files = ["README.rdoc", "CHANGELOG", "COPYING"] + Dir["doc/*.rdoc"]
31
+ s.extra_rdoc_files = ["README.rdoc", "CHANGELOG", "COPYING"] + Dir["doc/*.rdoc"] + Dir['doc/release_notes/*.txt']
32
32
  s.rdoc_options += RDOC_OPTS
33
33
  s.summary = "The Database Toolkit for Ruby"
34
34
  s.description = s.summary
@@ -73,7 +73,7 @@ end
73
73
  Rake::RDocTask.new do |rdoc|
74
74
  rdoc.rdoc_dir = "rdoc"
75
75
  rdoc.options += RDOC_OPTS
76
- rdoc.rdoc_files.add %w"README.rdoc CHANGELOG COPYING lib/**/*.rb doc/*.rdoc"
76
+ rdoc.rdoc_files.add %w"README.rdoc CHANGELOG COPYING lib/**/*.rb doc/*.rdoc doc/release_notes/*.txt"
77
77
  end
78
78
 
79
79
  ### Website
@@ -152,11 +152,15 @@ otherwise modified:
152
152
  end
153
153
  Author.first.authorships_dataset.filter{|o| o.number < 10}.first
154
154
 
155
- You can extend a dataset with a module easily with :extend:
155
+ You can extend a dataset with a module easily with :extend. You can reference
156
+ the model object that created the association dataset via the dataset's
157
+ model_object method, and the related association reflection via the dataset's
158
+ association_reflection method:
156
159
 
157
160
  module FindOrCreate
158
161
  def find_or_create(vals)
159
- first(vals) || @opts[:models][nil].create(vals)
162
+ first(vals) || association_reflection.associated_class. \
163
+ create(vals.merge(association_reflection[:key]=>model_object.id))
160
164
  end
161
165
  end
162
166
  class Author < Sequel::Model
@@ -164,22 +168,6 @@ You can extend a dataset with a module easily with :extend:
164
168
  end
165
169
  Author.first.authorships_dataset.find_or_create(:name=>'Blah', :number=>10)
166
170
 
167
- However, note that the dataset doesn't have any knowledge of the model object
168
- that created it via the association, so if you want to use attributes of the
169
- model object, you'll have to use a closure:
170
-
171
- class Author < Sequel::Model
172
- one_to_many :authorships, :dataset=>(proc do
173
- key = pk
174
- ds = Authorship.filter(:author_id=>key)
175
- ds.meta_def(:find_or_create_by_name) do |name|
176
- first(:name=>name) || Authorship.create(:name=>name, :author_id=>key)
177
- end
178
- ds
179
- end)
180
- end
181
- Author.first.authorships_dataset.find_or_create_by_name('Bob')
182
-
183
171
  ===has_many :through associations
184
172
 
185
173
  many_to_many handles the usual case of a has_many :through with a belongs_to in
@@ -0,0 +1,38 @@
1
+ === New code organization
2
+
3
+ Sequel is now divided into two parts: sequel_core and sequel_model.
4
+ These two parts are distributed as two separate gems. The sequel gem
5
+ bundles sequel_core and sequel_model together. If you don't use
6
+ Sequel::Model in your code, you can just install and use sequel_core.
7
+
8
+ === New model hooks implementation
9
+
10
+ The hooks implementation have been rewritten from scratch, is much
11
+ more robust and offers a few new features:
12
+
13
+ * More ways to define hooks: hooks can now be defined by supplying a
14
+ block or a method name, or by overriding the hook instance method.
15
+
16
+ * Inheritable hooks: Hooks can now be inherited, which means that you
17
+ can define general hooks in a model superclass, and use them in
18
+ subclasses. You can also define global hooks on Sequel::Model that
19
+ will be invoked for all model classes.
20
+
21
+ * Hook chains can be broken by returning false from within the hook.
22
+
23
+ * New after_initialize hook, invoked after instance initialization.
24
+
25
+ * The hook invocation order can no longer be changed. Hooks are
26
+ invoked in order of definition, from the top of the class hierarchy
27
+ (that is, from Sequel::Model) down to the specific class.
28
+
29
+ === Miscellanea
30
+
31
+ * Removed deprecated adapter stubs, and all other deprecations in both
32
+ sequel_core and sequel_model.
33
+
34
+ * Fixed String#to_time to raise error correctly for invalid time
35
+ stamps.
36
+
37
+ * Fixed error behavior when parse_tree or ruby2ruby are not available.
38
+
@@ -0,0 +1,143 @@
1
+ === DRY Sequel models
2
+
3
+ With the new Sequel release you no longer need to explicitly specify
4
+ the table
5
+ name for each model class, assuming your model name is the singular of
6
+ the
7
+ table name (just like in ActiveRecord or DataMapper):
8
+
9
+ class UglyBug < Sequel::Model
10
+ end
11
+
12
+ UglyBug.table_name #=> :ugly_bugs
13
+
14
+ === New model validations and support for virtual attributes
15
+
16
+ Sequel model now include validation functionality which largly follows
17
+ the
18
+ validations offered in ActiveRecord. Validations can be checked
19
+ anytime by
20
+ calling Model#valid?, with validation errors accessible through
21
+ Model#errors:
22
+
23
+ class Item < Sequel::Model
24
+ validates_presence_of :name
25
+ end
26
+
27
+ my_item = Item.new
28
+ my_item.valid? #=> false
29
+ my_item.errors.full_messages #=> ["name is not present"]
30
+
31
+ The Model#save method has been changed to check for validity before
32
+ saving. If
33
+ the model instance is not valid, the #save method returns false
34
+ without saving
35
+ the instance. You can also bypass the validity test by calling
36
+ Model#save!
37
+ instead.
38
+
39
+ Model classes also now support virtual attributes, letting you assign
40
+ values to
41
+ any attribute (virtual or persistent) at initialization time:
42
+
43
+ class User < Sequel::Model
44
+ attr_accessor :password
45
+ end
46
+
47
+ u = User.new(:password => 'blah', ...)
48
+ u.password #=> 'blah'
49
+
50
+ Also, virtual attributes can be validated just like persistent
51
+ attributes.
52
+
53
+ === Other changes (long list!)
54
+
55
+ * Added Model#reload as alias to Model#refresh.
56
+
57
+ * Changed Model.create to accept a block (#126).
58
+
59
+ * Fixed Model#initialize to accept nil values (#115).
60
+
61
+ * Added Model#update_with_params method with support for virtual
62
+ attributes and auto-filtering of unrelated parameters, and changed
63
+ Model.create_with_params to support virtual attributes (#128).
64
+
65
+ * Fixed Model.dataset to correctly set the dataset if using implicit
66
+ naming or inheriting the superclass dataset (thanks celldee).
67
+
68
+ * Finalized support for virtual attributes.
69
+
70
+ * Fixed Model#set to work with string keys (#143).
71
+
72
+ * Fixed Model.create to correctly initialize instances marked as new
73
+ (#135).
74
+
75
+ * Fixed Model#initialize to convert string keys into symbol keys. This
76
+ also fixes problem with validating objects initialized with string
77
+ keys (#136).
78
+
79
+ * Added Dataset#table_exists? convenience method.
80
+
81
+ * Changed Dataset#group_and_count to accept multiple columns (#134).
82
+
83
+ * Added Dataset#select_all method.
84
+
85
+ * Added Dataset#select_more, Dataset#order_more methods (#129).
86
+
87
+ * Fixed Dataset#count to work correctly for grouped datasets (#144).
88
+
89
+ * Fixed joining datasets using aliased tables (#140).
90
+
91
+ * Added support for UNSIGNED constraint, used in MySQL? (#127).
92
+
93
+ * Implemented constraint definitions inside Database#create_table.
94
+
95
+ * Enhanced Database.connect to accept options with string keys, so it
96
+ can now accept options loaded from YAML files. Database.connect also
97
+ automatically converts :username option into :user for compatibility
98
+ with existing YAML configuration files for AR and DataMapper.
99
+
100
+ * Changed ODBC::Database to support connection using driver and
101
+ database name, also added support for untitled columns in
102
+ ODBC::Dataset (thanks Leonid Borisenko).
103
+
104
+ * Changed MySQL adapter to support specifying socket option.
105
+
106
+ * Fixed MySQL adapter to correctly format foreign key definitions
107
+ (#123).
108
+
109
+ * Changed MySQL::Dataset to allow HAVING clause on ungrouped datasets,
110
+ and put HAVING clause before ORDER BY clause (#133).
111
+
112
+ * Changed mysql adapter to default to localhost if :host option is not
113
+ specified (#114).
114
+
115
+ * Added String#to_date. Updated mysql adapter to use String#to_date
116
+ for mysql date types (thanks drfreeze).
117
+
118
+ * Fixed postgres adapter to define PGconn#async_exec as alias to #exec
119
+ if not defined (for pure-ruby postgres driver).
120
+
121
+ * Changed postgres adapter to quote column references using double
122
+ quotes.
123
+
124
+ * Applied patch for oracle adapter: fix behavior of limit and offset,
125
+ transactions, #table_exists?, #tables and additional specs (thanks
126
+ Liming Lian #122).
127
+
128
+ * Added support additional field types in postgresql adapter (#146).
129
+
130
+ * Added support for date field types in postgresql adapter (#145).
131
+
132
+ * Added support for limiting and paginating datasets with fixed SQL,
133
+ e.g. using Database#fetch.
134
+
135
+ * Added new Dataset#from_self method that returns a dataset selecting
136
+ from the original dataset.
137
+
138
+ * Allow for additional filters on a grouped dataset (#119 and #120)
139
+
140
+ * Refactored Sequelizer to use Proc#to_sexp (method provided by r2r).
141
+
142
+ * Fixed bin/sequel to require sequel_model if available.
143
+
@@ -0,0 +1,101 @@
1
+ === Better model associations
2
+
3
+ The latest release of sequel_model includes a new associations
4
+ functionality written by Jeremy Evans which replaces the old relations
5
+ code in previous versions. Please note that this version is not
6
+ completely backward-compatible and you should therefore upgrade with
7
+ caution.
8
+
9
+ The new implementation supports three kinds of relations: one_to_many,
10
+ many_to_one and many_to_many, which correspond to has_many, belongs_to
11
+ and has_and_belongs_to_many relations in ActiveRecord. In fact, the
12
+ new implementation includes aliases for ActiveRecord assocation macros
13
+ and is basically compatible with ActiveRecord conventions. It also
14
+ supports DRY implicit class name references. Here's a simple example:
15
+
16
+ class Author < Sequel::Model
17
+ has_many :books # equivalent to one_to_many
18
+ end
19
+
20
+ class Book < Sequel::Model
21
+ belongs_to :author # equivalent to many_to_one
22
+ has_and_belongs_to_many :categories # equivalent to many_to_many
23
+ end
24
+
25
+ class Category < Sequel::Model
26
+ has_and_belongs_to_many :books
27
+ end
28
+
29
+ These macros will create the following methods:
30
+
31
+ * Author#books, Author#add_book, Author#remove_book
32
+ * Book#author, Book#categories, Book#add_category,
33
+ Book#remove_category
34
+ * Category#books, Category#add_book, Category#remove_book
35
+
36
+ Unlike ActiveRecord, one_to_many and many_to_many association methods
37
+ return a dataset:
38
+
39
+ a = Author[1234]
40
+ a.books.sql #=> 'SELECT * FROM books WHERE (author_id = 1234)'
41
+
42
+ You can also tell Sequel to cache the association result set and
43
+ return it as an array:
44
+
45
+ class Author < Sequel::Model
46
+ has_many :books, :cache => true
47
+ end
48
+
49
+ Author[1234].books.class #=> Array
50
+
51
+ You can of course bypass the defaults and specify class names and key
52
+ names:
53
+
54
+ class Node < Sequel::Model
55
+ belongs_to :parent, :class => Node
56
+ belongs_to :session, :key => :producer_id
57
+ end
58
+
59
+ Another useful option is :order, which sets the order for the
60
+ association dataset:
61
+
62
+ class Author < Sequel::Model
63
+ has_many :books, :order => :title
64
+ end
65
+
66
+ Author[1234].books.sql #=> 'SELECT * FROM books WHERE (author_id =
67
+ 1234) ORDER BY title'
68
+
69
+ More information about associations can be found in the Sequel
70
+ documentation.
71
+
72
+ === Other changes
73
+
74
+ * Added configuration file for running specs (#186).
75
+
76
+ * Changed Database#drop_index to accept fixed arity (#173).
77
+
78
+ * Changed column definition sql to put UNSIGNED constraint before
79
+ unique in order to satisfy MySQL (#171).
80
+
81
+ * Enhanced MySQL adapter to support load data local infile_, added
82
+ compress option for mysql connection by default (#172).
83
+
84
+ * Fixed bug when inserting hashes in array tuples mode.
85
+
86
+ * Changed SQLite adapter to catch RuntimeError raised when executing a
87
+ statement and raise Error::InvalidStatement with the offending SQL and
88
+ error message (#188).
89
+
90
+ * Fixed Dataset#reverse to not raise for unordered dataset (#189).
91
+
92
+ * Added Dataset#unordered method and changed #order to remove order if
93
+ nil is specified (#190).
94
+
95
+ * Fixed reversing order of ASC expression (#164).
96
+
97
+ * Added support for :null => true option when defining table columns
98
+ (#192).
99
+
100
+ * Fixed Symbol#method_missing to accept variable arity (#185).
101
+
@@ -0,0 +1,53 @@
1
+ Eager loading for all types of associations:
2
+
3
+ Artist.eager(:albums).all
4
+ Album.eager(:artist, :genre, :tracks).all
5
+ Album.eager(:artist).eager(:genre).eager(:tracks).all
6
+ Album.filter(:year=>2008).eager(:artist).all
7
+
8
+ Eager loading supports cascading to an unlimited depth, and doesn't have
9
+ any aliasing issues:
10
+
11
+ Artist.eager(:albums=>:tracks).all
12
+ Artist.eager(:albums=>{:tracks=>:genre}).all
13
+
14
+ Unfortunately, eager loading comes at the expense of a small amount of
15
+ backward compatibility. If you were using uncached associations (the
16
+ default in sequel_model 0.5), they no longer work the same way. Now,
17
+ all associations act as if :cache=>true (which is now set for all
18
+ associations, so if you wrote a tool that worked with both cached and
19
+ uncached associations, it should still work).
20
+
21
+ One to many associations now populate the corresponding many to one
22
+ instance variable (even when eagerly loaded):
23
+
24
+ # Assuming: Album.one_to_many :tracks
25
+ album = Album.first
26
+ # This following code is only one query,
27
+ # not a query for the album and one for each track
28
+ album.tracks.each{|t| puts t.album.name}
29
+
30
+ ActiveRecord style has_many :through associations are now supported via
31
+ many_to_many. many_to_many will no longer select the entire result set,
32
+ just the columns of the associated table (and not the join table), so it
33
+ works for both has_and_belongs_to_many (simple join table) and has_many
34
+ :through (join table model) scenarios. If you want to include all or
35
+ part of the join table attributes, see the :select option for
36
+ many_to_many associations.
37
+
38
+ We reduced the number of gems from three (sequel, sequel_core,
39
+ sequel_model) to two (sequel, sequel_core). Basically, sequel_model is
40
+ now just sequel, and the old sequel gem metapackage is no longer. There
41
+ isn't a reason to have a gem metapackage for two gems when one
42
+ (sequel_model) depends on the other (sequel_core). This required a
43
+ version bump for the model part of sequel from 0.5.0.2 to 1.4.0 (since
44
+ the previous sequel gem version was 1.3).
45
+
46
+ Sequel 1.4.0 has fixes for 11 trackers issues, including fixes to the
47
+ MySQL and PostgreSQL adapters.
48
+
49
+ We have switched the source control repository for Sequel from Google
50
+ Code (which uses subversion) to github (which uses git). If you would
51
+ like to contribute to Sequel, please fork the github repository, make
52
+ your changes, and send a pull request. As before, posting patches on
53
+ the Google Code issue tracker is fine as well.