sequel 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
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