sequel 0.0.4 → 0.0.5

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/CHANGELOG CHANGED
@@ -1,3 +1,11 @@
1
+ *0.0.5*
2
+
3
+ * Added Dataset#[] method. Refactored Model#find and Model#[].
4
+
5
+ * Renamed Pool#conn_maker to Pool#connection_proc.
6
+
7
+ * Added automatic require 'sequel' to all adapters for convenience.
8
+
1
9
  *0.0.4*
2
10
 
3
11
  * Added preliminary MySQL support.
data/README CHANGED
@@ -1,6 +1,8 @@
1
- == about Sequel
1
+ == Serquel: Concise ORM for Ruby
2
2
 
3
- Sequel is an ORM framework for Ruby. Sequel provides thread safety, connection pooling, and a DSL for constructing queries and table schemas.
3
+ Sequel is an ORM framework for Ruby. Sequel provides thread safety, connection pooling, and a concise DSL for constructing queries and table schemas.
4
+
5
+ Sequel makes it easy to deal with multiple records without having to break your teeth on SQL.
4
6
 
5
7
  == Resources
6
8
 
@@ -31,7 +33,7 @@ Sequel currently supports:
31
33
 
32
34
  == The Sequel Console
33
35
 
34
- Sequel now includes an IRB console for quick'n'dirty access to databases. You can use it like this:
36
+ Sequel includes an IRB console for quick'n'dirty access to databases. You can use it like this:
35
37
 
36
38
  sequel sqlite:///test.db
37
39
 
@@ -41,6 +43,12 @@ You get an IRB session with the database object stored in DB.
41
43
 
42
44
  === Connecting to a database
43
45
 
46
+ Before connecting to a database, you should require the corresponding adaptor, for example:
47
+
48
+ require 'sequel/sqlite'
49
+
50
+ Note: you don't need to require 'sequel' separately before that, as each adapter requires 'sequel' if it hasn't yet been required.
51
+
44
52
  There are two ways to create a connection to a database. The easier way is to provide a connection URL:
45
53
 
46
54
  DB = Sequel.connect("sqlite:///blog.db")
@@ -59,7 +67,7 @@ The second, more verbose, way is to create an instance of a database class:
59
67
  DB.execute("create table t (a text, b text)")
60
68
  DB.execute("insert into t values ('a', 'b')")
61
69
 
62
- Or more succintly:
70
+ Or more succinctly:
63
71
 
64
72
  DB << "create table t (a text, b text)"
65
73
  DB << "insert into t values ('a', 'b')"
@@ -101,6 +109,10 @@ You can also retrieve the first record in a dataset:
101
109
 
102
110
  posts.first
103
111
 
112
+ Or retrieve a single record with a specific value:
113
+
114
+ posts[:id => 1]
115
+
104
116
  If the dataset is ordered, you can also ask for the last record:
105
117
 
106
118
  posts.order(:stamp).last
data/Rakefile CHANGED
@@ -6,9 +6,9 @@ require 'fileutils'
6
6
  include FileUtils
7
7
 
8
8
  NAME = "sequel"
9
- VERS = "0.0.4"
9
+ VERS = "0.0.5"
10
10
  CLEAN.include ['**/.*.sw?', 'pkg/*', '.config', 'doc/*', 'coverage/*']
11
- RDOC_OPTS = ['--quiet', '--title', "Sequel Documentation",
11
+ RDOC_OPTS = ['--quiet', '--title', "Sequel: Concise ORM for Ruby",
12
12
  "--opname", "index.html",
13
13
  "--line-numbers",
14
14
  "--main", "README",
data/bin/sequel CHANGED
@@ -7,7 +7,7 @@ db = ARGV.shift
7
7
 
8
8
  if db.nil? || db.empty?
9
9
  puts "Usage: sequel <connection string>"
10
- puts "Sequel, an simple ORM framework for Ruby."
10
+ puts "Sequel: Concise ORM for Ruby."
11
11
  puts
12
12
  puts "Examples:"
13
13
  puts " sequel sqlite:///blog.db"
@@ -3,13 +3,13 @@ require 'thread'
3
3
  module Sequel
4
4
  class ConnectionPool
5
5
  attr_reader :max_size, :mutex
6
- attr_accessor :conn_maker
6
+ attr_accessor :connection_proc
7
7
  attr_reader :available_connections, :allocated, :created_count
8
8
 
9
9
  def initialize(max_size = 4, &block)
10
10
  @max_size = max_size
11
11
  @mutex = Mutex.new
12
- @conn_maker = block
12
+ @connection_proc = block
13
13
 
14
14
  @available_connections = []
15
15
  @allocated = {}
@@ -41,7 +41,7 @@ module Sequel
41
41
 
42
42
  def acquire(thread)
43
43
  @mutex.synchronize do
44
- @allocated[thread] ||= available
44
+ @allocated[thread] = available
45
45
  end
46
46
  end
47
47
 
@@ -52,7 +52,7 @@ module Sequel
52
52
  def make_new
53
53
  if @created_count < @max_size
54
54
  @created_count += 1
55
- @conn_maker.call
55
+ @connection_proc.call
56
56
  end
57
57
  end
58
58
 
@@ -357,6 +357,10 @@ module Sequel
357
357
  limit(num).all
358
358
  end
359
359
  end
360
+
361
+ def [](condition)
362
+ where(condition).first
363
+ end
360
364
 
361
365
  def last(num = 1)
362
366
  raise RuntimeError, 'No order specified' unless
data/lib/sequel/model.rb CHANGED
@@ -126,6 +126,12 @@ module Sequel
126
126
  get_hooks(:after_create) << block
127
127
  end
128
128
 
129
+ def self.find(cond)
130
+ dataset[cond.is_a?(Hash) ? cond : {primary_key => cond}]
131
+ end
132
+
133
+ class << self; alias_method :[], :find; end
134
+
129
135
  ############################################################################
130
136
 
131
137
  attr_reader :values, :pkey
@@ -135,7 +141,7 @@ module Sequel
135
141
  end
136
142
 
137
143
  def primary_key
138
- model.primary_key
144
+ self.class.primary_key
139
145
  end
140
146
 
141
147
  def initialize(values)
@@ -154,10 +160,6 @@ module Sequel
154
160
  self
155
161
  end
156
162
 
157
- def self.find(cond)
158
- dataset.filter(cond).first # || (raise RuntimeError, "Record not found.")
159
- end
160
-
161
163
  def self.each(&block); dataset.each(&block); end
162
164
  def self.all; dataset.all; end
163
165
  def self.filter(*arg); dataset.filter(*arg); end
@@ -172,10 +174,6 @@ module Sequel
172
174
  end
173
175
  def self.delete_all; dataset.delete; end
174
176
 
175
- def self.[](key)
176
- find key.is_a?(Hash) ? key : {primary_key => key}
177
- end
178
-
179
177
  def self.create(values = nil)
180
178
  db.transaction do
181
179
  obj = find(primary_key => dataset.insert(values))
data/lib/sequel/mysql.rb CHANGED
@@ -1,3 +1,7 @@
1
+ if !Object.const_defined?('Sequel')
2
+ require File.join(File.dirname(__FILE__), '../sequel')
3
+ end
4
+
1
5
  require 'mysql'
2
6
 
3
7
  module Sequel
@@ -8,7 +12,7 @@ module Sequel
8
12
 
9
13
  def initialize(opts = {})
10
14
  super
11
- @pool.conn_maker = proc do
15
+ @pool.connection_proc = proc do
12
16
  Mysql.real_connect(@opts[:host], @opts[:user], @opts[:password],
13
17
  @opts[:database], @opts[:port])
14
18
  end
@@ -1,3 +1,7 @@
1
+ if !Object.const_defined?('Sequel')
2
+ require File.join(File.dirname(__FILE__), '../sequel')
3
+ end
4
+
1
5
  require 'postgres'
2
6
 
3
7
  class PGconn
@@ -103,7 +107,7 @@ module Sequel
103
107
 
104
108
  def initialize(opts = {})
105
109
  super
106
- @pool.conn_maker = proc do
110
+ @pool.connection_proc = proc do
107
111
  PGconn.connect(
108
112
  @opts[:host] || 'localhost',
109
113
  @opts[:port] || 5432,
data/lib/sequel/sqlite.rb CHANGED
@@ -1,3 +1,7 @@
1
+ if !Object.const_defined?('Sequel')
2
+ require File.join(File.dirname(__FILE__), '../sequel')
3
+ end
4
+
1
5
  require 'sqlite3'
2
6
  require 'metaid'
3
7
 
@@ -8,7 +12,7 @@ module Sequel
8
12
 
9
13
  def initialize(opts = {})
10
14
  super
11
- @pool.conn_maker = proc do
15
+ @pool.connection_proc = proc do
12
16
  db = SQLite3::Database.new(@opts[:database])
13
17
  db.type_translation = true
14
18
  db
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.2
3
3
  specification_version: 1
4
4
  name: sequel
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.4
7
- date: 2007-03-20 00:00:00 +02:00
6
+ version: 0.0.5
7
+ date: 2007-03-21 00:00:00 +02:00
8
8
  summary: ORM framework for Ruby.
9
9
  require_paths:
10
10
  - lib
@@ -51,7 +51,7 @@ test_files: []
51
51
  rdoc_options:
52
52
  - --quiet
53
53
  - --title
54
- - Sequel Documentation
54
+ - "Sequel: Concise ORM for Ruby"
55
55
  - --opname
56
56
  - index.html
57
57
  - --line-numbers