swift 0.7.1 → 0.7.2

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -30,12 +30,8 @@ end
30
30
  task :test => :check_dependencies
31
31
  task :default => :test
32
32
 
33
- require 'rake/rdoctask'
34
- Rake::RDocTask.new do |rdoc|
35
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
36
-
37
- rdoc.rdoc_dir = 'rdoc'
38
- rdoc.title = "swift #{version}"
39
- rdoc.rdoc_files.include('README*')
40
- rdoc.rdoc_files.include('lib/**/*.rb')
33
+ require 'yard'
34
+ YARD::Rake::YardocTask.new do |yard|
35
+ yard.files = ['lib/**/*.rb']
41
36
  end
37
+
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.1
1
+ 0.7.2
@@ -21,6 +21,9 @@ extern VALUE eSwiftConnectionError;
21
21
  } \
22
22
  catch (dbi::Error &error) { \
23
23
  rb_raise(eSwiftRuntimeError, "%s", error.what()); \
24
+ } \
25
+ catch (std::bad_alloc &error) { \
26
+ rb_raise(rb_eNoMemError, "%s", error.what()); \
24
27
  }
25
28
 
26
29
  #include "adapter.h"
@@ -7,8 +7,69 @@ require_relative 'swift/header'
7
7
  require_relative 'swift/scheme'
8
8
  require_relative 'swift/type'
9
9
 
10
+ # A rational rudimentary object relational mapper.
11
+ #
12
+ # == Synopsis
13
+ # require 'swift'
14
+ # require 'swift/migrations'
15
+ #
16
+ # Swift.trace true # Debugging.
17
+ # Swift.setup :default, Swift::DB::Postgres, db: 'swift'
18
+ #
19
+ # class User < Swift::Scheme
20
+ # store :users
21
+ # attribute :id, Swift::Type::Integer, serial: true, key: true
22
+ # attribute :name, Swift::Type::String
23
+ # attribute :email, Swift::Type::String
24
+ # end # User
25
+ #
26
+ # # Migrate it.
27
+ # User.migrate!
28
+ #
29
+ # # Create
30
+ # User.create name: 'Apple Arthurton', email: 'apple@arthurton.local' # => User
31
+ #
32
+ # # Get by key.
33
+ # user = User.get id: 1
34
+ #
35
+ # # Alter attribute and update in one.
36
+ # user.update name: 'Jimmy Arthurton'
37
+ #
38
+ # # Alter attributes and update.
39
+ # user.name = 'Apple Arthurton'
40
+ # user.update
41
+ #
42
+ # # Destroy
43
+ # user.destroy
44
+ #
45
+ # == See
46
+ # * README.rdoc has more usage examples.
47
+ # * API.rdoc is a public API overview.
10
48
  module Swift
11
49
  class << self
50
+
51
+ # Setup a new DB connection.
52
+ #
53
+ # You almost certainly want to setup a <tt>:default</tt> named adapter. The <tt>:default</tt> scope will be used
54
+ # for unscoped calls to <tt>Swift.db</tt>.
55
+ #
56
+ # @example
57
+ # Swift.setup :default, Swift::DB::Postgres, db: 'db1'
58
+ # Swift.setup :other, Swift::DB::Postgres, db: 'db2'
59
+ #
60
+ # @param [Symbol] name Adapter name.
61
+ # @param [Swift::Adapter] type Concrete adapter subclass. See Swift::DB
62
+ # @param [Hash] options Connection options
63
+ # @option options [String] :db Name.
64
+ # @option options [String] :user (*nix login user)
65
+ # @option options [String] :password ('')
66
+ # @option options [String] :host ('localhost')
67
+ # @option options [Integer] :port (DB default)
68
+ # @option options [String] :timezone (*nix TZ format) See http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
69
+ # @return [Swift::Adapter]
70
+ #
71
+ # @see Swift::DB
72
+ # @see Swift::Adapter
12
73
  def setup name, type, options = {}
13
74
  unless type.kind_of?(Class) && type < Swift::Adapter
14
75
  raise TypeError, "Expected +type+ Swift::Adapter subclass but got #{type.inspect}"
@@ -16,8 +77,25 @@ module Swift
16
77
  (@repositories ||= {})[name] = type.new(options)
17
78
  end
18
79
 
80
+ # Fetch or scope a block to a specific DB by name.
81
+ #
82
+ # @example
83
+ # Swift.db :other do |other|
84
+ # # Inside this block all these are the same:
85
+ # # other
86
+ # # Swift.db
87
+ # # Swift.db :other
88
+ #
89
+ # other_users = User.prepare('select * from users where age > ?')
90
+ # other_users.execute(32)
91
+ # end
92
+ #
93
+ # @param [Symbol] name Adapter name.
94
+ # @param [Proc] &block Scope this block to the named adapter instead of <tt>:default</tt>.
95
+ # @return [Swift::Adapter]
96
+ #--
97
+ # I pilfered the logic from DM but I don't really understand what is/isn't thread safe.
19
98
  def db name = nil, &block
20
- # I pilfered the logic from DM but I don't really understand what is/isn't thread safe.
21
99
  scopes = (Thread.current[:swift_db] ||= [])
22
100
  repository = if name || scopes.empty?
23
101
  @repositories[name || :default] or raise "Unknown db '#{name || :default}', did you forget to #setup?"
@@ -36,6 +114,11 @@ module Swift
36
114
  repository
37
115
  end
38
116
 
117
+ # List of known Swift::Schema classes.
118
+ #
119
+ # Handy if you are brewing stuff like migrations and need a list of defined schema subclasses.
120
+ #
121
+ # @return [Array<Swift::Schema>]
39
122
  def schema
40
123
  @schema ||= []
41
124
  end
@@ -1,22 +1,96 @@
1
1
  module Swift
2
+
3
+ # Adapter.
4
+ #
5
+ # @abstract
6
+ # @see Swift::DB See Swift::DB for concrete adapters.
7
+ # @todo For the time being all adapters are SQL and DBIC++ centric. It would be super easy to abstract though I
8
+ # don't know if you would be better off doing it at the Ruby or DBIC++ level (or both).
9
+ #--
10
+ # TODO: Extension methods are undocumented.
2
11
  class Adapter
3
12
  attr_reader :options
4
13
 
14
+ # Select by id(s).
15
+ #
16
+ # @example Single key.
17
+ # Swift.db.get(User, id: 12)
18
+ # @example Complex primary key.
19
+ # Swift.db.get(UserAddress, user_id: 12, address_id: 15)
20
+ #
21
+ # @param [Swift::Scheme] scheme Concrete scheme subclass to load.
22
+ # @param [Hash] keys Hash of id(s) <tt>{id_name: value}</tt>.
23
+ # @return [Swift::Scheme, nil]
24
+ # @see Swift::Scheme.get
25
+ #--
26
+ # NOTE: Not significantly shorter than Scheme.db.first(User, 'id = ?', 12)
5
27
  def get scheme, keys
6
28
  relation = scheme.new(keys)
7
29
  prepare_get(scheme).execute(*relation.tuple.values_at(*scheme.header.keys)).first
8
30
  end
9
31
 
32
+ # Select one or more.
33
+ #
34
+ # @example All.
35
+ # Swif.db.all(User)
36
+ # @example All with conditions and binds.
37
+ # Swift.db.all(User, ':name = ? and :age > ?', 'Apple Arthurton', 32)
38
+ # @example Block form iterator.
39
+ # Swift.db.all(User, ':age > ?', 32) do |user|
40
+ # puts user.name
41
+ # end
42
+ #
43
+ # @param [Swift::Scheme] scheme Concrete scheme subclass to load.
44
+ # @param [String] conditions Optional SQL 'where' fragment.
45
+ # @param [Object, ...] *binds Optional bind values that accompany conditions SQL fragment.
46
+ # @param [Proc] &block Optional 'each' iterator block.
47
+ # @return [Swift::Result]
48
+ # @see Swift::Scheme.all
10
49
  def all scheme, conditions = '', *binds, &block
11
50
  where = "where #{exchange_names(scheme, conditions)}" unless conditions.empty?
12
51
  prepare(scheme, "select * from #{scheme.store} #{where}").execute(*binds, &block)
13
52
  end
14
53
 
54
+ # Select one.
55
+ #
56
+ # @example First.
57
+ # Swif.db.first(User)
58
+ # @example First with conditions and binds.
59
+ # Swift.db.first(User, ':name = ? and :age > ?', 'Apple Arthurton', 32)
60
+ # @example Block form iterator.
61
+ # Swift.db.first(User, ':age > ?', 32) do |user|
62
+ # puts user.name
63
+ # end
64
+ #
65
+ # @param [Swift::Scheme] scheme Concrete scheme subclass to load.
66
+ # @param [String] conditions Optional SQL 'where' fragment.
67
+ # @param [Object, ...] *binds Optional bind values that accompany conditions SQL fragment.
68
+ # @param [Proc] &block Optional 'each' iterator block.
69
+ # @return [Swift::Scheme, nil]
70
+ # @see Swift::Scheme.first
15
71
  def first scheme, conditions = '', *binds, &block
16
72
  where = "where #{exchange_names(scheme, conditions)}" unless conditions.empty?
17
73
  prepare(scheme, "select * from #{scheme.store} #{where} limit 1").execute(*binds, &block).first
18
74
  end
19
75
 
76
+ # Create one or more.
77
+ #
78
+ # @example Scheme.
79
+ # user = User.new(name: 'Apply Arthurton', age: 32)
80
+ # Swift.db.create(User, user)
81
+ # @example Coerce hash to scheme.
82
+ # Swif.db.create(User, name: 'Apple Arthurton', age: 32)
83
+ # @example Multiple relations.
84
+ # apple = User.new(name: 'Apple Arthurton', age: 32)
85
+ # benny = User.new(name: 'Benny Arthurton', age: 30)
86
+ # Swift.db.first(User, apple, benny)
87
+ # @example Coerce multiple relations.
88
+ # Swift.db.first(User, {name: 'Apple Arthurton', age: 32}, {name: 'Benny Arthurton', age: 30})
89
+ #
90
+ # @param [Swift::Scheme] scheme Concrete scheme subclass to load.
91
+ # @param [Swift::Scheme, Hash> *relations Scheme or tuple hash. Hashes will be coerced into scheme via Swift::Scheme#new
92
+ # @return [Array<Swift::Scheme>]
93
+ # @see Swift::Scheme.create
20
94
  def create scheme, *relations
21
95
  statement = prepare_create(scheme)
22
96
  relations.map do |relation|
@@ -28,6 +102,29 @@ module Swift
28
102
  end
29
103
  end
30
104
 
105
+ # Update one or more.
106
+ #
107
+ # @example Scheme.
108
+ # user = Swift.db.create(User, name: 'Apply Arthurton', age: 32)
109
+ # user.name = 'Arthur Appleton'
110
+ # Swift.db.update(User, user)
111
+ # @example Coerce hash to scheme.
112
+ # user = Swift.db.create(User, name: 'Apply Arthurton', age: 32)
113
+ # user.name = 'Arthur Appleton'
114
+ # Swif.db.update(User, user.tuple)
115
+ # @example Multiple relations.
116
+ # apple = Swift.db.create(User, name: 'Apple Arthurton', age: 32)
117
+ # benny = Swift.db.create(User, name: 'Benny Arthurton', age: 30)
118
+ # Swift.db.update(User, apple, benny)
119
+ # @example Coerce multiple relations.
120
+ # apple = Swift.db.create(User, name: 'Apple Arthurton', age: 32)
121
+ # benny = Swift.db.create(User, name: 'Benny Arthurton', age: 30)
122
+ # Swift.db.update(User, apple.tuple, benny.tuple)
123
+ #
124
+ # @param [Swift::Scheme] scheme Concrete scheme subclass to load.
125
+ # @param [Swift::Scheme, Hash> *relations Scheme or tuple hash. Hashes will be coerced into scheme via Swift::Scheme#new
126
+ # @return [Array<Swift::Scheme>]
127
+ # @see Swift::Scheme#update
31
128
  def update scheme, *relations
32
129
  statement = prepare_update(scheme)
33
130
  relations.map do |relation|
@@ -37,6 +134,28 @@ module Swift
37
134
  end
38
135
  end
39
136
 
137
+ # Destroy one or more.
138
+ #
139
+ # @example Scheme.
140
+ # user = Swift.db.create(User, name: 'Apply Arthurton', age: 32)
141
+ # user.name = 'Arthur Appleton'
142
+ # Swift.db.destroy(User, user)
143
+ # @example Coerce hash to scheme.
144
+ # user = Swift.db.create(User, name: 'Apply Arthurton', age: 32)
145
+ # user.name = 'Arthur Appleton'
146
+ # Swif.db.destroy(User, user.tuple)
147
+ # @example Multiple relations.
148
+ # apple = Swift.db.create(User, name: 'Apple Arthurton', age: 32)
149
+ # benny = Swift.db.create(User, name: 'Benny Arthurton', age: 30)
150
+ # Swift.db.destroy(User, apple, benny)
151
+ # @example Coerce multiple relations.
152
+ # apple = Swift.db.create(User, name: 'Apple Arthurton', age: 32)
153
+ # benny = Swift.db.create(User, name: 'Benny Arthurton', age: 30)
154
+ # Swift.db.destroy(User, apple.tuple, benny.tuple)
155
+ #
156
+ # @param [Swift::Scheme] scheme Concrete scheme subclass to load.
157
+ # @param [Swift::Scheme, Hash] *relations Scheme or tuple hash. Hashes will be coerced into scheme via Swift::Scheme#new
158
+ # @see Swift::Scheme#destroy
40
159
  def destroy scheme, *relations
41
160
  statement = prepare_destroy(scheme)
42
161
  relations.map do |relation|
@@ -53,14 +172,10 @@ module Swift
53
172
  fields = scheme.header.map{|p| field_definition(p)}.join(', ')
54
173
  fields += ", primary key (#{keys.join(', ')})" unless keys.empty?
55
174
 
56
- drop_store scheme.store
175
+ execute("drop table if exists #{scheme.store}")
57
176
  execute("create table #{scheme.store} (#{fields})")
58
177
  end
59
178
 
60
- def drop_store name
61
- execute("drop table if exists #{name}")
62
- end
63
-
64
179
  protected
65
180
  def exchange_names scheme, query
66
181
  query.gsub(/:(\w+)/){ scheme.send($1.to_sym).field }
@@ -1,9 +1,25 @@
1
1
  module Swift
2
+
3
+ # An attribute (column) definition.
2
4
  #--
3
5
  # NOTE: Default method is defined in the extension.
4
6
  class Attribute
5
7
  attr_reader :name, :field, :key, :serial
6
8
 
9
+ # @example
10
+ # user = Class.new(Swift::Scheme)
11
+ # Swift::Attribute.new(user, :name, Swift::Type::String)
12
+ #
13
+ # @param [Swift::Scheme] scheme
14
+ # @param [Symbol] name
15
+ # @param [Hash] options
16
+ # @option options [Object, Proc] :default
17
+ # @option options [Symbol] :field
18
+ # @option options [TrueClass, FalseClass] :key
19
+ # @option options [TrueClass, FalseClass] :serial
20
+ #
21
+ # @see Swift::Scheme
22
+ # @see Swift::Type
7
23
  def initialize scheme, name, options = {}
8
24
  @name = name
9
25
  @default = options.fetch(:default, nil)
@@ -13,6 +29,7 @@ module Swift
13
29
  define_scheme_methods(scheme)
14
30
  end
15
31
 
32
+ # Evals attribute accessors for this attribute into the scheme.
16
33
  def define_scheme_methods scheme
17
34
  scheme.class_eval <<-RUBY, __FILE__, __LINE__ + 1
18
35
  def #{name}; tuple.fetch(:#{field}, nil) end
@@ -36,14 +36,18 @@ module Swift
36
36
  false
37
37
  end
38
38
 
39
- def drop_store name
40
- exists_sql =<<-SQL
41
- select count(*) as exists from syscat.tables where tabschema = CURRENT_SCHEMA and tabname = '#{name.upcase}'
39
+ def migrate!
40
+ keys = scheme.header.keys
41
+ fields = scheme.header.map{|p| field_definition(p)}.join(', ')
42
+ fields += ", primary key (#{keys.join(', ')})" unless keys.empty?
43
+
44
+ sql = <<-SQL
45
+ select count(*) as exists from syscat.tables
46
+ where tabschema = CURRENT_SCEMA and tabname = '#{scheme.store.upcase}'
42
47
  SQL
43
48
 
44
- execute(exists_sql.strip) do |r|
45
- execute("drop table #{name}") if r[:exists] > 0
46
- end
49
+ execute(sql) {|result| execute("drop table #{scheme.store}") if result[:exists] > 0 }
50
+ execute("create table #{scheme.store} (#{fields})")
47
51
  end
48
52
 
49
53
  def field_type attribute
@@ -1,23 +1,62 @@
1
1
  module Swift
2
+
3
+ # A relation (instance) definition.
4
+ #
5
+ # @example A user scheme.
6
+ # class User < Swift::Scheme
7
+ # store :users
8
+ # attribute :id, Swift::Type::Integer, serial: true, key: true
9
+ # attribute :name, Swift::Type::String
10
+ # attribute :email, Swift::Type::String
11
+ # attribute :updated_at, Swift::Type::Time
12
+ # end # User
13
+ #
14
+ # @todo Tuple should be renamed tuples (plural?)
2
15
  class Scheme
3
16
  attr_accessor :tuple
4
17
  alias_method :scheme, :class
5
18
 
19
+ # @example
20
+ # User.new(
21
+ # name: 'Apple Arthurton',
22
+ # email: 'apple@arthurton.local',
23
+ # updated_at: Time.now
24
+ # )
25
+ # @param [Hash] options Create relation and set attributes. <tt>{name: value}</tt>
6
26
  def initialize options = {}
7
27
  @tuple = scheme.header.new_tuple
8
28
  options.each{|k, v| send(:"#{k}=", v)}
9
29
  end
10
30
 
31
+ # @example
32
+ # apple = User.create(
33
+ # name: 'Apple Arthurton',
34
+ # email: 'apple@arthurton.local',
35
+ # updated_at: Time.now
36
+ # )
37
+ # apple.update(name: 'Arthur Appleton')
38
+ #
39
+ # @param [Hash] options Update attributes. <tt>{name: value}</tt>
11
40
  def update options = {}
12
41
  options.each{|k, v| send(:"#{k}=", v)}
13
42
  Swift.db.update(scheme, self)
14
43
  end
15
44
 
45
+ # @example
46
+ # apple = User.create(
47
+ # name: 'Apple Arthurton',
48
+ # email: 'apple@arthurton.local',
49
+ # updated_at: Time.now
50
+ # )
51
+ # apple.destroy
16
52
  def destroy
17
53
  Swift.db.destroy(scheme, self)
18
54
  end
19
55
 
20
56
  class << self
57
+ # Attribute set.
58
+ #
59
+ # @return [Swift::Header]
21
60
  attr_accessor :header
22
61
 
23
62
  def inherited klass
@@ -32,27 +71,83 @@ module Swift
32
71
  scheme
33
72
  end
34
73
 
74
+ # Define a new attribute for this scheme.
75
+ #
76
+ # @see Swift::Attribute#new
35
77
  def attribute name, type, options = {}
36
78
  header.push(attribute = type.new(self, name, options))
37
79
  (class << self; self end).send(:define_method, name, lambda{ attribute })
38
80
  end
39
81
 
82
+ # Define the store (table).
83
+ #
84
+ # @param [Symbol] name Storage name.
85
+ # @return [Symbol]
40
86
  def store name = nil
41
87
  name ? @store = name : @store
42
88
  end
43
89
 
90
+ # Create (insert).
91
+ #
92
+ # @example
93
+ # apple = User.create(
94
+ # name: 'Apple Arthurton',
95
+ # email: 'apple@arthurton.local',
96
+ # updated_at: Time.now
97
+ # )
98
+ #
99
+ # @param [Hash] options Create with attributes. <tt>{name: value}</tt>
44
100
  def create options = {}
45
101
  Swift.db.create(self, options)
46
102
  end
47
103
 
104
+ # Select by id(s).
105
+ #
106
+ # @example Single key.
107
+ # User.get(id: 12)
108
+ # @example Complex primary key.
109
+ # UserAddress.get(user_id: 12, address_id: 15)
110
+ #
111
+ # @param [Hash] keys Hash of id(s) <tt>{id_name: value}</tt>.
112
+ # @return [Swift::Scheme, nil]
48
113
  def get keys
49
114
  Swift.db.get(self, keys)
50
115
  end
51
116
 
117
+ # Select one or more.
118
+ #
119
+ # @example All.
120
+ # User.all
121
+ # @example All with conditions and binds.
122
+ # User.all(':name = ? and :age > ?', 'Apple Arthurton', 32)
123
+ # @example Block form iterator.
124
+ # User.all(':age > ?', 32) do |user|
125
+ # puts user.name
126
+ # end
127
+ #
128
+ # @param [String] conditions Optional SQL 'where' fragment.
129
+ # @param [Object, ...] *binds Optional bind values that accompany conditions SQL fragment.
130
+ # @param [Proc] &block Optional 'each' iterator block.
131
+ # @return [Swift::Result]
52
132
  def all conditions = '', *binds, &block
53
133
  Swift.db.all(self, conditions, *binds, &block)
54
134
  end
55
135
 
136
+ # Select one.
137
+ #
138
+ # @example First.
139
+ # User.first
140
+ # @example First with conditions and binds.
141
+ # User.first(':name = ? and :age > ?', 'Apple Arthurton', 32)
142
+ # @example Block form iterator.
143
+ # User.first(User, 'age > ?', 32) do |user|
144
+ # puts user.name
145
+ # end
146
+ #
147
+ # @param [String] conditions Optional SQL 'where' fragment.
148
+ # @param [Object, ...] *binds Optional bind values that accompany conditions SQL fragment.
149
+ # @param [Proc] &block Optional 'each' iterator block.
150
+ # @return [Swift::Scheme, nil]
56
151
  def first conditions = '', *binds, &block
57
152
  Swift.db.first(self, conditions, *binds, &block)
58
153
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{swift}
8
- s.version = "0.7.1"
8
+ s.version = "0.7.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Shane Hanna", "Bharanee 'Barney' Rathna"]
12
- s.date = %q{2010-09-24}
12
+ s.date = %q{2010-10-02}
13
13
  s.description = %q{A rational rudimentary database abstraction.}
14
14
  s.email = ["shane.hanna@gmail.com", "deepfryed@gmail.com"]
15
15
  s.extensions = ["ext/extconf.rb"]
@@ -74,20 +74,20 @@ Gem::Specification.new do |s|
74
74
  s.rubygems_version = %q{1.3.6}
75
75
  s.summary = %q{A rational rudimentary database abstraction.}
76
76
  s.test_files = [
77
- "test/test_pool.rb",
78
- "test/test_io.rb",
79
- "test/test_validations.rb",
80
- "test/test_transactions.rb",
81
- "test/test_adapter.rb",
82
- "test/test_identity_map.rb",
77
+ "test/test_adapter.rb",
78
+ "test/test_scheme.rb",
79
+ "test/test_types.rb",
83
80
  "test/test_error.rb",
84
- "test/helper.rb",
81
+ "test/test_io.rb",
85
82
  "test/test_encoding.rb",
83
+ "test/test_transactions.rb",
84
+ "test/test_validations.rb",
86
85
  "test/test_timestamps.rb",
87
- "test/test_scheme.rb",
88
- "test/test_types.rb",
89
- "examples/scheme.rb",
86
+ "test/helper.rb",
87
+ "test/test_identity_map.rb",
88
+ "test/test_pool.rb",
90
89
  "examples/async.rb",
90
+ "examples/scheme.rb",
91
91
  "examples/db.rb"
92
92
  ]
93
93
 
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 7
8
- - 1
9
- version: 0.7.1
8
+ - 2
9
+ version: 0.7.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Shane Hanna
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-09-24 00:00:00 +10:00
18
+ date: 2010-10-02 00:00:00 +10:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -136,18 +136,18 @@ signing_key:
136
136
  specification_version: 3
137
137
  summary: A rational rudimentary database abstraction.
138
138
  test_files:
139
- - test/test_pool.rb
140
- - test/test_io.rb
141
- - test/test_validations.rb
142
- - test/test_transactions.rb
143
139
  - test/test_adapter.rb
144
- - test/test_identity_map.rb
140
+ - test/test_scheme.rb
141
+ - test/test_types.rb
145
142
  - test/test_error.rb
146
- - test/helper.rb
143
+ - test/test_io.rb
147
144
  - test/test_encoding.rb
145
+ - test/test_transactions.rb
146
+ - test/test_validations.rb
148
147
  - test/test_timestamps.rb
149
- - test/test_scheme.rb
150
- - test/test_types.rb
151
- - examples/scheme.rb
148
+ - test/helper.rb
149
+ - test/test_identity_map.rb
150
+ - test/test_pool.rb
152
151
  - examples/async.rb
152
+ - examples/scheme.rb
153
153
  - examples/db.rb