miguel 0.1.0 → 0.2.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 61b3d0863a5a9089a0d0721ada2efdb173dbfe98
4
- data.tar.gz: d30974c4416aa48a0f9c1698877fc4851c875d3b
3
+ metadata.gz: db64f119440c5bd20619f533da327d507a3eeba4
4
+ data.tar.gz: 6e01ec299c5885be17dfd67e392310aec359e490
5
5
  SHA512:
6
- metadata.gz: 7036e0cea3a88e677c17dbb8cb0775b11771b74c21e38fc032326f36029347c321893e6b1fd646027b374a53707701fc75d22e75bd15dc051375775c850c0ec5
7
- data.tar.gz: 878b6ff4b7cf5f457da0207de21335783c9a806e3fc059694cf71dbc8c7de29e1e3d3fcc16ab3fa1f3410df85688c7a4f9339f0c79921847a8c12016b4b1447e
6
+ metadata.gz: 9256996f5840ec7d95c46c537120dccbdd40ab13ba9e679eaef08145f38b104389792c841697a13b62bdc3a892d36c2ef90d5fa2ce9265aeb410eb50bc66e40e
7
+ data.tar.gz: 7ad8d557c2c4aacbe3e9a5152f252517148920a8aa6cc5cba5775cd9ccb009d8b42157fe160dbe3864d9f2900643a1eeef2c1201ad003c43b7509198b8a7a4dd
data/.travis.yml CHANGED
@@ -3,11 +3,15 @@
3
3
  language: ruby
4
4
  rvm:
5
5
  - ruby-head
6
- - 2.2.3
7
- - 2.1.7
6
+ - 2.6.3
7
+ - 2.5.5
8
+ - 2.4.6
9
+ - 2.3.8
10
+ - 2.2.10
11
+ - 2.1.10
8
12
  - 2.0.0
9
13
  - 1.9.3
10
- - rbx-2
14
+ - rbx-3
11
15
  - jruby-head
12
16
  - jruby-19mode
13
17
  gemfile: .travis.gemfile
@@ -15,9 +19,12 @@ env:
15
19
  global:
16
20
  # travis encrypt CODECLIMATE_REPO_TOKEN=???
17
21
  secure: WjkizgQWf8gx1KIfPsX99TR6uJgnF9ybHUtu/kz0JHWYNif8IJ7qsO+kCXzdGtTiwMgQL4cHzYqbGa6VAiiPQMmG9NPLZ1Q4STLW9W4afg2lOqQmyGk0iSapEu/YXlWM6kZW4IcY/4BG8DzgfJnzy6+4yWBGZFdMwcpJEVZpy02c3Y6RBsrFJ6wz1BpWZR8bHaFXrLzfpHeS8t8h1OYetf1RLg9MvPvankkoIBBxw6ahV9QhG1O2cXyzlfH30wQA90stTFOybUkJ/hVLlCXyxEbjuhUKTWeU4s/Uw5XhA3k5ll0GWyaTUQU3aSWwTDv2Z/dncwR2y8RMuGJqHVLcTz2jtb+NINncrYq5ybGUaCNpdJea7/OS4R6M9t2VS666j5dPN4tVsTgyAONzgHHEmTYwHk3s9s4EKyoHAl398Kv/dazwSmBasvc1kIDzsi6n83k4MHMSNFTBlA4Jz0LaQ7Qx0hxS7MIsGhDmVeeEOQOw1idof6hQdBCpcLfO9NCxqRFWYAgK99U5mXjqRWBeQGyEwrtgbvyweanDrFfHtVEQpUrW1Do4zNz9jZ+MS43hKViu3loH3y20w8Vi96UXWoDp/RreLGMpM33V3xzCC+U3Ex1Dckoq0TgQ8RFD3U/d0KdQJ02B8C3iRmNqD43jGJEJl5USnT58gwgPumLwoCs=
22
+ after_success:
23
+ - bundle exec codeclimate-test-reporter
18
24
  matrix:
19
25
  allow_failures:
20
26
  - rvm: ruby-head
27
+ - rvm: rbx-3
21
28
  - rvm: jruby-19mode
22
29
  - rvm: jruby-head
23
30
  before_script:
data/README.md CHANGED
@@ -139,6 +139,8 @@ Finally, the `timestamps` helper can be used to create the
139
139
  If you pass the `mysql_timestamps: true` option to `define`,
140
140
  the `update_time` timestamp will have the MySQL auto-update feature enabled,
141
141
  and timestamps will use the `'0000-00-00 00:00:00'` default by default.
142
+ The latter can be also enabled and disabled explicitly by setting
143
+ the `zero_timestamps` option to `true` or `false`, respectively.
142
144
 
143
145
  ## Using the command
144
146
 
@@ -208,7 +210,7 @@ and adjust the schema description accordingly.
208
210
 
209
211
  ## Credits
210
212
 
211
- Copyright © 2015 Patrik Rak
213
+ Copyright © 2015-2019 Patrik Rak
212
214
 
213
215
  Miguel is released under the MIT license.
214
216
 
@@ -45,6 +45,8 @@ module Miguel
45
45
  return :integer, :unsigned => true, :default_size => 10
46
46
  when /\Abigint\(\d+\)\z/
47
47
  return :bigint, :default_size => 20
48
+ when /\Abigint\(\d+\) unsigned\z/
49
+ return :bigint, :unsigned => true, :default_size => 20
48
50
  when /\Adecimal\(\d+,\d+\)\z/
49
51
  return :decimal, :default_size => [ 10, 0 ]
50
52
  when /\A(enum|set)\((.*)\)\z/
data/lib/miguel/schema.rb CHANGED
@@ -158,7 +158,7 @@ module Miguel
158
158
  # Default options implied for certain types.
159
159
  DEFAULT_OPTS = {
160
160
  :string => { :size => 255, :text => false },
161
- :bigint => { :size => 20 },
161
+ :bigint => { :size => 20, :unsigned => false },
162
162
  :decimal => { :size => [ 10, 0 ] },
163
163
  :integer => { :unsigned => false },
164
164
  :time => { :only_time => true },
@@ -302,7 +302,7 @@ module Miguel
302
302
 
303
303
  # The +method_missing+ doesn't take care of constant like methods (like String :name),
304
304
  # so those have to be defined explicitly for each such supported type.
305
- for type in Sequel::Schema::Generator::GENERIC_TYPES
305
+ for type in (defined?(Sequel::Schema::CreateTableGenerator) ? Sequel::Schema::CreateTableGenerator::GENERIC_TYPES : Sequel::Schema::Generator::GENERIC_TYPES)
306
306
  class_eval( "def #{type}(*args) ; @table.add_definition(:#{type},*args) ; end", __FILE__, __LINE__ )
307
307
  end
308
308
 
@@ -317,7 +317,7 @@ module Miguel
317
317
  # automatically updated, and let the create one to be set manually.
318
318
  # Also, Sequel doesn't currently honor :on_update for column definitions,
319
319
  # so we have to use default literal to make it work. Sigh.
320
- timestamp :create_time, :null => false, :default => ZERO_TIME
320
+ timestamp :create_time, :null => false, :default => ( opts[ :zero_timestamps ] == false ? DEFAULT_TIME : ZERO_TIME )
321
321
  timestamp :update_time, :null => false, :default => Sequel.lit( 'CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP' )
322
322
  else
323
323
  Time :create_time
@@ -371,9 +371,9 @@ module Miguel
371
371
  end
372
372
 
373
373
  # Add foreign key definition.
374
- def add_foreign_key( columns, table_name, *args )
375
- add_column( :integer, columns, *args ) unless columns.is_a? Array
376
- @foreign_keys << ForeignKey.new( columns, table_name, *args )
374
+ def add_foreign_key( columns, table_name, opts = {} )
375
+ add_column( opts[:type] || :integer, columns, opts ) unless columns.is_a? Array
376
+ @foreign_keys << ForeignKey.new( columns, table_name, opts )
377
377
  end
378
378
 
379
379
  # Add definition of column, index or foreign key.
@@ -580,7 +580,7 @@ module Miguel
580
580
  # we have to be careful to turn off the MySQL autoupdate behavior.
581
581
  # That's why we have to set defaults explicitly.
582
582
 
583
- default_time = opts[ :mysql_timestamps ] ? ZERO_TIME : DEFAULT_TIME
583
+ default_time = ( opts[ :zero_timestamps ] || ( opts[ :mysql_timestamps ] && opts[ :zero_timestamps ].nil? ) ) ? ZERO_TIME : DEFAULT_TIME
584
584
  set_defaults :Time, :timestamp, :default => default_time
585
585
  set_defaults :Time?, :timestamp, :default => nil
586
586
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Miguel
4
4
  MAJOR = 0
5
- MINOR = 1
5
+ MINOR = 2
6
6
  PATCH = 0
7
7
  VERSION = [ MAJOR, MINOR, PATCH ].join( '.' ).freeze
8
8
  end
data/miguel.gemspec CHANGED
@@ -4,7 +4,7 @@ require File.expand_path( '../lib/miguel/version', __FILE__ )
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = 'miguel'
7
- s.version = Miguel::VERSION
7
+ s.version = Miguel::VERSION + '.pre1'
8
8
  s.summary = 'Database migrator and migration generator for Sequel.'
9
9
  s.description = <<EOT
10
10
  This gem makes it easy to create and maintain an up-to-date database schema
data/test/data/schema.rb CHANGED
@@ -76,6 +76,11 @@ Miguel::Schema.define( use_defaults: false ) do
76
76
  index :user_id
77
77
  end
78
78
 
79
+ table :bigint do
80
+ primary_key :id, type: :bigint
81
+ foreign_key :bigint_id, :bigint, type: :bigint
82
+ end if mysql
83
+
79
84
  table :reuse do
80
85
  primary_key :user_id
81
86
  foreign_key [:user_id], :users
data/test/helper.rb CHANGED
@@ -6,18 +6,17 @@ def jruby?
6
6
  defined?( RUBY_ENGINE ) and RUBY_ENGINE == 'jruby'
7
7
  end
8
8
 
9
- if ENV[ 'COVERAGE' ]
10
- require 'simplecov'
11
- SimpleCov.start
12
- end
13
-
14
9
  begin
15
10
  require 'codeclimate-test-reporter'
16
- CodeClimate::TestReporter.start
17
11
  ENV[ 'COVERAGE' ] = 'on'
18
12
  rescue LoadError
19
13
  end unless jruby?
20
14
 
15
+ if ENV[ 'COVERAGE' ]
16
+ require 'simplecov'
17
+ SimpleCov.start
18
+ end
19
+
21
20
  # Setup helpers.
22
21
 
23
22
  DATA_DIR = File.expand_path( "#{__FILE__}/../data" )
@@ -35,7 +34,7 @@ class Bacon::Context
35
34
  end
36
35
 
37
36
  def lines( s )
38
- s.to_s.lines.map.with_index{ |l, i| "#{i}:#{l.strip}" }
37
+ s.to_s.lines.map.with_index{ |l, i| "#{i}:#{l.strip}" } << :EOF
39
38
  end
40
39
 
41
40
  def match( a, b )
@@ -15,6 +15,10 @@ describe Miguel::Importer do
15
15
  {},
16
16
  { unsigned_keys: true },
17
17
  { mysql_timestamps: true },
18
+ { mysql_timestamps: true, zero_timestamps: true },
19
+ { mysql_timestamps: true, zero_timestamps: false },
20
+ { zero_timestamps: true },
21
+ { zero_timestamps: false },
18
22
  ]
19
23
  when :postgres
20
24
  [ signed_unsigned: true ]
data/test/test_schema.rb CHANGED
@@ -229,6 +229,65 @@ describe Miguel::Schema do
229
229
  end
230
230
  end
231
231
 
232
+ should 'control zero timestamps explicitly' do
233
+ match_schema <<-EOT, zero_timestamps: false do
234
+ table :timestamps do
235
+ timestamp :t1, :null => false, :default => "2000-01-01 00:00:00"
236
+ timestamp :t2, :null => true, :default => nil
237
+ timestamp :create_time, :null => false, :default => "2000-01-01 00:00:00"
238
+ timestamp :update_time, :null => false, :default => "2000-01-01 00:00:00"
239
+ end
240
+ EOT
241
+ table :timestamps do
242
+ Time :t1
243
+ Time? :t2
244
+ timestamps
245
+ end
246
+ end
247
+ match_schema <<-EOT, zero_timestamps: true do
248
+ table :timestamps do
249
+ timestamp :t1, :null => false, :default => "0000-00-00 00:00:00"
250
+ timestamp :t2, :null => true, :default => nil
251
+ timestamp :create_time, :null => false, :default => "0000-00-00 00:00:00"
252
+ timestamp :update_time, :null => false, :default => "0000-00-00 00:00:00"
253
+ end
254
+ EOT
255
+ table :timestamps do
256
+ Time :t1
257
+ Time? :t2
258
+ timestamps
259
+ end
260
+ end
261
+ match_schema <<-EOT, mysql_timestamps: true, zero_timestamps: true do
262
+ table :timestamps do
263
+ timestamp :t1, :null => false, :default => "0000-00-00 00:00:00"
264
+ timestamp :t2, :null => true, :default => nil
265
+ timestamp :create_time, :null => false, :default => "0000-00-00 00:00:00"
266
+ timestamp :update_time, :null => false, :default => Sequel.lit("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
267
+ end
268
+ EOT
269
+ table :timestamps do
270
+ Time :t1
271
+ Time? :t2
272
+ timestamps
273
+ end
274
+ end
275
+ match_schema <<-EOT, mysql_timestamps: true, zero_timestamps: false do
276
+ table :timestamps do
277
+ timestamp :t1, :null => false, :default => "2000-01-01 00:00:00"
278
+ timestamp :t2, :null => true, :default => nil
279
+ timestamp :create_time, :null => false, :default => "2000-01-01 00:00:00"
280
+ timestamp :update_time, :null => false, :default => Sequel.lit("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
281
+ end
282
+ EOT
283
+ table :timestamps do
284
+ Time :t1
285
+ Time? :t2
286
+ timestamps
287
+ end
288
+ end
289
+ end
290
+
232
291
  should 'support auto-incrementing primary keys' do
233
292
  match_schema <<-EOT do
234
293
  table :pk do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: miguel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0.pre1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Patrik Rak
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-06 00:00:00.000000000 Z
11
+ date: 2019-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sequel
@@ -146,9 +146,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
146
146
  version: 1.9.3
147
147
  required_rubygems_version: !ruby/object:Gem::Requirement
148
148
  requirements:
149
- - - ">="
149
+ - - ">"
150
150
  - !ruby/object:Gem::Version
151
- version: '0'
151
+ version: 1.3.1
152
152
  requirements: []
153
153
  rubyforge_project:
154
154
  rubygems_version: 2.4.5.1