uuidable 0.2.7 → 1.0.0

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
  SHA256:
3
- metadata.gz: 5489f3847a7ef3968a0ad1ddcf4bd77f9c153c08391f1d63070afee0fbcb02e5
4
- data.tar.gz: adef06e351d4d5825fee4b0aab147939c1a9d0ae2968b49372b4035d1631e3cd
3
+ metadata.gz: 8f081ae636a60448b89df948da41feb1b11bfdc8a338d79b2c6c407732b2f3f8
4
+ data.tar.gz: 0a878578bbcb7d31c48a8688feeeaef4ac1d5aff333dc7b0b9087f27668d9680
5
5
  SHA512:
6
- metadata.gz: da3b6260780ff74cb22d6d27e7c9fc933264ee7984bf148356f1d7fcfea7bd6cd1631d18c75c68142e61bb3ea9287e8d0703b2bfd5d0233b7a45e9ada1bb47cd
7
- data.tar.gz: 86dfaf11f23a287c0d710f5dfbf17721b0dbbb8e59527d738ac7eaf67d815c45ecbeb5f8be792f4591e4df0177abccb0268d4ee8a84975b29a288a824f074b31
6
+ metadata.gz: bc2257a1ce64b2e4d3a69b50fd5600b8737c1e9ad733b05cf989ec247115bcd4b002a3a564502e0a69686b37f1421a22972494471aee5d5c91ae2c9fe6b27127
7
+ data.tar.gz: 1c3870cfe1234a8197a8f8d79746b8ba4c2bde15b3d61b83658c52548a2c9a4cd223141a11ac0585cfd8c545aaed7576e266155ecc4158a2d84a8d45e4927e14
@@ -0,0 +1,25 @@
1
+ name: Build + publish
2
+
3
+ on:
4
+ push:
5
+ tags: [ v* ]
6
+ jobs:
7
+ build:
8
+ name: Build + Publish
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@v1
12
+
13
+ - name: Release Gem
14
+ if: contains(github.ref, 'refs/tags/v')
15
+ uses: cadwallion/publish-rubygems-action@master
16
+ env:
17
+ RUBYGEMS_API_KEY: ${{secrets.RUBYGEMS_API_KEY}}
18
+ RELEASE_COMMAND: bundle exec rake release
19
+ # steps:
20
+ # - uses: actions/checkout@v3
21
+ # - name: Set up Ruby
22
+ # uses: ruby/setup-ruby@v1
23
+ # with:
24
+ # ruby-version: .ruby-version
25
+ # bundler-cache: true
@@ -0,0 +1,37 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: Test
9
+
10
+ on:
11
+ push:
12
+ branches: [ '*' ]
13
+
14
+ permissions:
15
+ contents: read
16
+
17
+ jobs:
18
+ test:
19
+ runs-on: ${{ matrix.os }}-latest
20
+ strategy:
21
+ matrix:
22
+ os: [ubuntu, macos]
23
+ ruby-version: ['2.7', '3.0', '3.1']
24
+
25
+ steps:
26
+ - uses: actions/checkout@v3
27
+ - name: Set up Ruby
28
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
29
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
30
+ uses: ruby/setup-ruby@v1
31
+ with:
32
+ ruby-version: ${{ matrix.ruby-version }}
33
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
34
+ - name: Run rubocop
35
+ run: bundle exec rubocop
36
+ - name: Run tests
37
+ run: bundle exec rake
data/.gitignore CHANGED
@@ -6,3 +6,4 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ /.history/
data/.rubocop.yml CHANGED
@@ -1,11 +1,14 @@
1
- Metrics/LineLength:
2
- Max: 120
1
+ AllCops:
2
+ NewCops: disable
3
+
4
+ Layout/LineLength:
5
+ Max: 140
3
6
 
4
7
  Metrics/CyclomaticComplexity:
5
8
  Max: 10
6
9
 
7
10
  Metrics/MethodLength:
8
- Max: 20
11
+ Max: 30
9
12
 
10
13
  Metrics/AbcSize:
11
14
  Max: 25
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in uuidable.gemspec
data/Gemfile.lock CHANGED
@@ -1,38 +1,30 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- uuidable (0.2.7)
4
+ uuidable (1.0.0)
5
5
  activerecord (>= 4.2, < 7.2)
6
+ mysql-binuuid-rails (>= 1.3, < 2)
6
7
  uuidtools (>= 2.1, < 3)
7
8
 
8
9
  GEM
9
10
  remote: https://rubygems.org/
10
11
  specs:
11
- activemodel (7.1.3.4)
12
- activesupport (= 7.1.3.4)
13
- activerecord (7.1.3.4)
14
- activemodel (= 7.1.3.4)
15
- activesupport (= 7.1.3.4)
16
- timeout (>= 0.4.0)
17
- activesupport (7.1.3.4)
18
- base64
19
- bigdecimal
12
+ activemodel (7.0.4.1)
13
+ activesupport (= 7.0.4.1)
14
+ activerecord (7.0.4.1)
15
+ activemodel (= 7.0.4.1)
16
+ activesupport (= 7.0.4.1)
17
+ activesupport (7.0.4.1)
20
18
  concurrent-ruby (~> 1.0, >= 1.0.2)
21
- connection_pool (>= 2.2.5)
22
- drb
23
19
  i18n (>= 1.6, < 2)
24
20
  minitest (>= 5.1)
25
- mutex_m
26
21
  tzinfo (~> 2.0)
27
- addressable (2.4.0)
28
- ast (2.3.0)
22
+ addressable (2.8.0)
23
+ public_suffix (>= 2.0.2, < 5.0)
24
+ ast (2.4.2)
29
25
  backports (3.6.8)
30
- base64 (0.2.0)
31
- bigdecimal (3.1.8)
32
- concurrent-ruby (1.3.4)
33
- connection_pool (2.4.1)
34
- diff-lcs (1.2.5)
35
- drb (2.2.1)
26
+ concurrent-ruby (1.1.10)
27
+ diff-lcs (1.5.0)
36
28
  ethon (0.8.1)
37
29
  ffi (>= 1.3.0)
38
30
  faraday (0.9.2)
@@ -48,49 +40,55 @@ GEM
48
40
  net-http-persistent (>= 2.7)
49
41
  net-http-pipeline
50
42
  highline (1.7.8)
51
- i18n (1.14.5)
43
+ i18n (1.12.0)
52
44
  concurrent-ruby (~> 1.0)
53
45
  json (2.3.1)
54
46
  launchy (2.4.3)
55
47
  addressable (~> 2.3)
56
- minitest (5.25.0)
48
+ minitest (5.17.0)
57
49
  multi_json (1.11.2)
58
50
  multipart-post (2.0.0)
59
- mutex_m (0.2.0)
51
+ mysql-binuuid-rails (1.3.0)
52
+ activerecord (>= 5)
60
53
  net-http-persistent (2.9.4)
61
54
  net-http-pipeline (1.0.1)
62
- parallel (1.12.0)
63
- parser (2.4.0.2)
64
- ast (~> 2.3)
65
- powerpack (0.1.1)
55
+ parallel (1.22.1)
56
+ parser (3.1.2.0)
57
+ ast (~> 2.4.1)
58
+ public_suffix (4.0.7)
66
59
  pusher-client (0.6.2)
67
60
  json
68
61
  websocket (~> 1.0)
69
- rainbow (2.2.2)
70
- rake
71
- rake (13.0.1)
72
- rspec (3.4.0)
73
- rspec-core (~> 3.4.0)
74
- rspec-expectations (~> 3.4.0)
75
- rspec-mocks (~> 3.4.0)
76
- rspec-core (3.4.3)
77
- rspec-support (~> 3.4.0)
78
- rspec-expectations (3.4.0)
62
+ rainbow (3.1.1)
63
+ rake (13.0.6)
64
+ regexp_parser (2.5.0)
65
+ rexml (3.2.5)
66
+ rspec (3.11.0)
67
+ rspec-core (~> 3.11.0)
68
+ rspec-expectations (~> 3.11.0)
69
+ rspec-mocks (~> 3.11.0)
70
+ rspec-core (3.11.0)
71
+ rspec-support (~> 3.11.0)
72
+ rspec-expectations (3.11.0)
79
73
  diff-lcs (>= 1.2.0, < 2.0)
80
- rspec-support (~> 3.4.0)
81
- rspec-mocks (3.4.1)
74
+ rspec-support (~> 3.11.0)
75
+ rspec-mocks (3.11.1)
82
76
  diff-lcs (>= 1.2.0, < 2.0)
83
- rspec-support (~> 3.4.0)
84
- rspec-support (3.4.1)
85
- rubocop (0.50.0)
77
+ rspec-support (~> 3.11.0)
78
+ rspec-support (3.11.0)
79
+ rubocop (1.32.0)
80
+ json (~> 2.3)
86
81
  parallel (~> 1.10)
87
- parser (>= 2.3.3.1, < 3.0)
88
- powerpack (~> 0.1)
89
- rainbow (>= 2.2.2, < 3.0)
82
+ parser (>= 3.1.0.0)
83
+ rainbow (>= 2.2.2, < 4.0)
84
+ regexp_parser (>= 1.8, < 3.0)
85
+ rexml (>= 3.2.5, < 4.0)
86
+ rubocop-ast (>= 1.19.1, < 2.0)
90
87
  ruby-progressbar (~> 1.7)
91
- unicode-display_width (~> 1.0, >= 1.0.1)
92
- ruby-progressbar (1.9.0)
93
- timeout (0.4.1)
88
+ unicode-display_width (>= 1.4.0, < 3.0)
89
+ rubocop-ast (1.19.1)
90
+ parser (>= 3.1.1.0)
91
+ ruby-progressbar (1.11.0)
94
92
  travis (1.8.2)
95
93
  backports
96
94
  faraday (~> 0.9)
@@ -102,9 +100,9 @@ GEM
102
100
  typhoeus (~> 0.6, >= 0.6.8)
103
101
  typhoeus (0.8.0)
104
102
  ethon (>= 0.8.0)
105
- tzinfo (2.0.6)
103
+ tzinfo (2.0.5)
106
104
  concurrent-ruby (~> 1.0)
107
- unicode-display_width (1.3.0)
105
+ unicode-display_width (2.2.0)
108
106
  uuidtools (2.2.0)
109
107
  websocket (1.2.2)
110
108
 
@@ -112,7 +110,7 @@ PLATFORMS
112
110
  ruby
113
111
 
114
112
  DEPENDENCIES
115
- bundler (~> 1.11)
113
+ bundler (~> 2.4)
116
114
  rake (~> 13.0)
117
115
  rspec (~> 3.0)
118
116
  rubocop
@@ -120,4 +118,4 @@ DEPENDENCIES
120
118
  uuidable!
121
119
 
122
120
  BUNDLED WITH
123
- 1.17.3
121
+ 2.4.22
data/README.md CHANGED
@@ -1,4 +1,6 @@
1
- # Uuidable [![Build Status](https://travis-ci.org/flant/uuidable.svg?branch=master)](https://travis-ci.org/flant/uuidable)
1
+ # Uuidable
2
+
3
+ [![Build](https://github.com/flant/uuidable/actions/workflows/ruby.yml/badge.svg)](https://github.com/flant/uuidable/actions/workflows/ruby.yml) [![Gem Version](https://badge.fury.io/rb/uuidable.svg)](https://badge.fury.io/rb/uuidable)
2
4
 
3
5
  With this gem you can use UUID instead of id in routes. But id is still primary key.
4
6
 
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
2
4
  require 'rspec/core/rake_task'
3
5
 
data/bin/console CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'bundler/setup'
4
5
  require 'uuidable'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Uuidable
2
4
  # ActiveRecord mixin
3
5
  module ActiveRecord
@@ -7,7 +9,7 @@ module Uuidable
7
9
 
8
10
  module Finder
9
11
  def find(*args)
10
- if args.first && args.first.is_a?(String) && args.first.match(UUIDTools::UUID_REGEXP)
12
+ if args.first.is_a?(String) && args.first&.match(UUIDTools::UUID_REGEXP)
11
13
  find_by_uuid!(*args)
12
14
  else
13
15
  super
@@ -19,8 +21,23 @@ module Uuidable
19
21
  module ClassMethods
20
22
  include Finder
21
23
 
22
- def uuidable(as_param: true)
23
- after_initialize { self.uuid = Uuidable.generate_uuid if attributes.keys.include?('uuid') && uuid.blank? }
24
+ def uuidable(as_param: true) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
25
+ # Configure all uuid columns for MySQL. Database may not be connected (i.e. on assets precompile), so we must supress errors.
26
+ conn_config = respond_to?(:connection_db_config) ? connection_db_config.configuration_hash : connection_config
27
+ if conn_config[:adapter].include?('mysql')
28
+ begin
29
+ columns.select { |c| c.type == :binary && c.limit == 16 && c.name.include?('uuid') }.each do |column|
30
+ attribute column.name.to_sym, MySQLBinUUID::Type.new
31
+ end
32
+ rescue ::ActiveRecord::ConnectionNotEstablished, Mysql2::Error::ConnectionError, ::ActiveRecord::NoDatabaseError # rubocop:disable Lint/SuppressedException
33
+ end
34
+ end
35
+
36
+ after_initialize do
37
+ self.uuid = Uuidable.generate_uuid if attributes.keys.include?('uuid') && uuid.blank?
38
+ self.uuid__old = uuid if respond_to?(:uuid__old)
39
+ end
40
+
24
41
  validates :uuid, presence: true, uniqueness: true, if: :uuid_changed?
25
42
 
26
43
  if as_param
@@ -44,6 +61,6 @@ module Uuidable
44
61
  end
45
62
 
46
63
  ActiveSupport.on_load(:active_record) do
47
- ActiveRecord::Base.send(:include, Uuidable::ActiveRecord)
48
- ActiveRecord::Relation.send(:prepend, Uuidable::ActiveRecord::Finder)
64
+ ActiveRecord::Base.include Uuidable::ActiveRecord
65
+ ActiveRecord::Relation.prepend Uuidable::ActiveRecord::Finder
49
66
  end
@@ -1,31 +1,33 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Uuidable
2
4
  COLUMN_NAME = :uuid
3
5
  COLUMN_TYPE = :binary
4
- COLUMN_OPTIONS = { limit: 36, null: false }.freeze
6
+ COLUMN_OPTIONS = { limit: 16, null: false }.freeze
5
7
  INDEX_OPTIONS = { unique: true }.freeze
6
8
 
7
9
  # Module adds method to table definition
8
10
  module TableDefinition
9
- def uuid(opts = {})
11
+ def uuid(column_name = COLUMN_NAME, **opts)
10
12
  index_opts = opts.delete(:index)
11
13
  index_opts = {} if index_opts.nil?
12
14
 
13
- column_name = opts.delete(:column_name) || COLUMN_NAME
15
+ column_name ||= opts.delete(:column_name)
14
16
 
15
- column column_name, COLUMN_TYPE, COLUMN_OPTIONS.merge(opts)
16
- index column_name, INDEX_OPTIONS.merge(index_opts) if index_opts
17
+ column column_name, COLUMN_TYPE, **COLUMN_OPTIONS.merge(opts)
18
+ index column_name, **INDEX_OPTIONS.merge(index_opts) if index_opts
17
19
  end
18
20
  end
19
21
 
20
22
  # Module adds method to alter table migration
21
23
  module Migration
22
- def add_uuid_column(table_name, opts = {})
24
+ def add_uuid_column(table_name, column_name = COLUMN_NAME, **opts)
23
25
  index_opts = opts.delete(:index)
24
26
  index_opts = {} if index_opts == true
25
27
 
26
- column_name = opts.delete(:column_name) || COLUMN_NAME
28
+ column_name ||= opts.delete(:column_name)
27
29
 
28
- add_column table_name, column_name, COLUMN_TYPE, COLUMN_OPTIONS.merge(opts)
30
+ add_column table_name, column_name, COLUMN_TYPE, **COLUMN_OPTIONS.merge(opts)
29
31
 
30
32
  add_uuid_index(table_name, index_opts.merge(column_name: column_name)) if index_opts
31
33
  end
@@ -33,13 +35,13 @@ module Uuidable
33
35
  def add_uuid_index(table_name, opts = {})
34
36
  column_name = opts.delete(:column_name) || COLUMN_NAME
35
37
 
36
- add_index table_name, column_name, INDEX_OPTIONS.merge(opts)
38
+ add_index table_name, column_name, **INDEX_OPTIONS.merge(opts)
37
39
  end
38
40
  end
39
41
  end
40
42
 
41
43
  if defined? ActiveRecord::ConnectionAdapters::TableDefinition
42
- ActiveRecord::ConnectionAdapters::TableDefinition.send :include, Uuidable::TableDefinition
44
+ ActiveRecord::ConnectionAdapters::TableDefinition.include Uuidable::TableDefinition
43
45
  end
44
46
 
45
- ActiveRecord::Migration.send :include, Uuidable::Migration if defined? ActiveRecord::Migration
47
+ ActiveRecord::Migration.include Uuidable::Migration if defined? ActiveRecord::Migration
@@ -0,0 +1,143 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable all
4
+ module Uuidable
5
+ module V1MigrationHelpers
6
+ NEW_POSTFIX = '__new'
7
+ OLD_POSTFIX = '__old'
8
+
9
+ # Will create uuid columns with new type, move data from pre-v1 column and then move pre-v1 to *__old.
10
+ # WARNING: will only work on MySQL 8+.
11
+ def uuidable_migrate_uuid_columns_to_v1(table_name, columns_options = {}, **opts)
12
+ columns_options.stringify_keys!
13
+ uuid_columns = connection.columns(table_name).select do |column|
14
+ (columns_options.blank? || columns_options.key?(column.name)) &&
15
+ valid_column_for_migration?(column, **opts)
16
+ end
17
+
18
+ return if uuid_columns.blank?
19
+
20
+ indexes = indexes_with_columns(table_name, uuid_columns)
21
+
22
+ change_table table_name, bulk: true do |t|
23
+ uuid_columns.each do |column|
24
+ options = columns_options[column.name] || { null: column.null }
25
+ t.column :"#{column.name}#{NEW_POSTFIX}", :binary, **COLUMN_OPTIONS.merge(options).merge(after: column.name)
26
+ end
27
+ end
28
+
29
+ update = uuid_columns.map do |column, _opts|
30
+ <<~SQL
31
+ `#{table_name}`.`#{column.name}#{NEW_POSTFIX}` = IF(
32
+ IS_UUID(`#{table_name}`.`#{column.name}`),
33
+ UUID_TO_BIN(`#{table_name}`.`#{column.name}`),
34
+ `#{table_name}`.`#{column.name}`
35
+ )
36
+ SQL
37
+ end.join(', ')
38
+
39
+ execute "UPDATE `#{table_name}` SET #{update}"
40
+
41
+ change_table table_name, bulk: true do |t|
42
+ uuid_columns.each do |column|
43
+ t.rename column.name, :"#{column.name}#{OLD_POSTFIX}"
44
+ t.rename :"#{column.name}#{NEW_POSTFIX}", column.name
45
+ end
46
+
47
+ indexes.each do |ind|
48
+ t.remove_index name: ind.name
49
+ end
50
+ end
51
+
52
+ # recreate indexes with new column
53
+ change_table table_name, bulk: true do |t|
54
+ indexes.each do |ind|
55
+ t.index ind.columns, name: ind.name, unique: ind.unique
56
+ end
57
+ end
58
+ end
59
+
60
+ # WARNING: will only work until *__old columns is not deleted!
61
+ def uuidable_rollback_uuid_columns_from_v1(table_name, *columns)
62
+ columns.map!(&:to_s)
63
+ indexes = indexes(table_name)
64
+
65
+ uuid_columns = connection.columns(table_name).select do |column|
66
+ (columns.blank? || columns.include?(column.name)) &&
67
+ valid_column_for_migration?(column, limit: 16)
68
+ end
69
+
70
+ return if uuid_columns.blank?
71
+
72
+ indexes = indexes_with_columns(table_name, uuid_columns)
73
+
74
+ change_table table_name, bulk: true do |t|
75
+ uuid_columns.each do |column|
76
+ t.rename column.name, :"#{column.name}#{NEW_POSTFIX}"
77
+ t.rename :"#{column.name}#{OLD_POSTFIX}", column.name
78
+ end
79
+
80
+ indexes.each do |ind|
81
+ t.remove_index name: ind.name
82
+ end
83
+ end
84
+
85
+ change_table table_name, bulk: true do |t|
86
+ uuid_columns.each do |column|
87
+ t.remove :"#{column.name}#{NEW_POSTFIX}"
88
+ end
89
+
90
+ indexes.each do |ind|
91
+ t.index name: ind.name, unique: ind.unique
92
+ end
93
+ end
94
+ end
95
+
96
+ def uuidable_migrate_all_pre_v1_uuid_columns!
97
+ tables.each do |table_name|
98
+ uuidable_migrate_uuid_columns_to_v1 table_name
99
+ end
100
+ end
101
+
102
+ def uuidable_rollback_all_pre_v1_uuid_columns!
103
+ tables.each do |table_name|
104
+ uuidable_rollback_uuid_columns_from_v1 table_name
105
+ end
106
+ end
107
+
108
+ # WARNING: this is irreversible migration! It will drop all *uuid__old columns and their indexes in all tables!
109
+ def uuidable_drop_all_pre_v1_uuid_columns!
110
+ tables.each do |table_name|
111
+ indexes = indexes(table_name)
112
+ change_table table_name, bulk: true do |t|
113
+ connection.columns(table_name).each do |column|
114
+ next unless column.name.include?(OLD_POSTFIX)
115
+
116
+ indexes.each do |ind|
117
+ next unless ind.columns.include?(column.name)
118
+
119
+ t.remove_index name: ind.name
120
+ end
121
+
122
+ t.remove column.name
123
+ end
124
+ end
125
+ end
126
+ end
127
+
128
+ def valid_column_for_migration?(column, limit: 36, skip_type_check: false)
129
+ column.name.include?('uuid') &&
130
+ !column.name.include?(NEW_POSTFIX) &&
131
+ !column.name.include?(OLD_POSTFIX) &&
132
+ (skip_type_check || (
133
+ column.type == :binary &&
134
+ column.limit == limit
135
+ ))
136
+ end
137
+
138
+ def indexes_with_columns(table_name, columns)
139
+ indexes(table_name).select { |ind| (ind.columns & columns.map(&:name)).any? }
140
+ end
141
+ end
142
+ end
143
+ # rubocop:enable all
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Uuidable
2
- VERSION = '0.2.7'.freeze
4
+ VERSION = '1.0.0'
3
5
  end
data/lib/uuidable.rb CHANGED
@@ -1,7 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'uuidable/version'
2
- require 'active_support'
4
+ require 'active_model'
3
5
  require 'uuidtools'
4
6
 
7
+ require 'mysql-binuuid-rails'
8
+
5
9
  # Main module
6
10
  module Uuidable
7
11
  module_function
@@ -12,4 +16,5 @@ module Uuidable
12
16
  end
13
17
 
14
18
  require 'uuidable/migration'
19
+ require 'uuidable/v1_migration_helpers'
15
20
  require 'uuidable/active_record'
data/uuidable.gemspec CHANGED
@@ -1,4 +1,6 @@
1
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
5
  require 'uuidable/version'
4
6
 
@@ -18,11 +20,14 @@ Gem::Specification.new do |spec|
18
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
21
  spec.require_paths = ['lib']
20
22
 
21
- spec.add_development_dependency 'bundler', '~> 1.11'
23
+ spec.required_ruby_version = '>= 2.7'
24
+
25
+ spec.add_development_dependency 'bundler', '~> 2.4'
22
26
  spec.add_development_dependency 'rake', '~> 13.0'
23
27
  spec.add_development_dependency 'rspec', '~> 3.0'
24
28
  spec.add_development_dependency 'travis', '~> 1.8', '>= 1.8.2'
25
29
 
26
30
  spec.add_dependency 'activerecord', '>= 4.2', '< 7.2'
31
+ spec.add_dependency 'mysql-binuuid-rails', '>= 1.3', '< 2'
27
32
  spec.add_dependency 'uuidtools', '>= 2.1', '< 3'
28
33
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uuidable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.7
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergey Gnuskov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-08-14 00:00:00.000000000 Z
11
+ date: 2024-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.11'
19
+ version: '2.4'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.11'
26
+ version: '2.4'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -92,6 +92,26 @@ dependencies:
92
92
  - - "<"
93
93
  - !ruby/object:Gem::Version
94
94
  version: '7.2'
95
+ - !ruby/object:Gem::Dependency
96
+ name: mysql-binuuid-rails
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '1.3'
102
+ - - "<"
103
+ - !ruby/object:Gem::Version
104
+ version: '2'
105
+ type: :runtime
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '1.3'
112
+ - - "<"
113
+ - !ruby/object:Gem::Version
114
+ version: '2'
95
115
  - !ruby/object:Gem::Dependency
96
116
  name: uuidtools
97
117
  requirement: !ruby/object:Gem::Requirement
@@ -119,11 +139,12 @@ executables: []
119
139
  extensions: []
120
140
  extra_rdoc_files: []
121
141
  files:
142
+ - ".github/workflows/gem-push.yml"
143
+ - ".github/workflows/ruby.yml"
122
144
  - ".gitignore"
123
145
  - ".overcommit.yml"
124
146
  - ".rspec"
125
147
  - ".rubocop.yml"
126
- - ".travis.yml"
127
148
  - Gemfile
128
149
  - Gemfile.lock
129
150
  - LICENSE.txt
@@ -134,6 +155,7 @@ files:
134
155
  - lib/uuidable.rb
135
156
  - lib/uuidable/active_record.rb
136
157
  - lib/uuidable/migration.rb
158
+ - lib/uuidable/v1_migration_helpers.rb
137
159
  - lib/uuidable/version.rb
138
160
  - uuidable.gemspec
139
161
  homepage: https://github.com/flant/uuidable
@@ -148,14 +170,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
148
170
  requirements:
149
171
  - - ">="
150
172
  - !ruby/object:Gem::Version
151
- version: '0'
173
+ version: '2.7'
152
174
  required_rubygems_version: !ruby/object:Gem::Requirement
153
175
  requirements:
154
176
  - - ">="
155
177
  - !ruby/object:Gem::Version
156
178
  version: '0'
157
179
  requirements: []
158
- rubygems_version: 3.1.6
180
+ rubygems_version: 3.5.3
159
181
  signing_key:
160
182
  specification_version: 4
161
183
  summary: Helps using uuid everywhere in routes instead of id for ActiveRecord models.
data/.travis.yml DELETED
@@ -1,15 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.5.1
4
- before_install: gem install bundler -v 1.17.3
5
- script:
6
- - bundle exec rubocop
7
- - bundle exec rspec
8
- deploy:
9
- provider: rubygems
10
- api_key:
11
- secure: UrlqP2DVITJ7IfNWyJAL1981jzQlrRaBoOINDvaea1fSf54U0Bf4zvhiad/5ZMml8dv07sLnp4+gDyZW2jnxae+44A4BxxOYD8UGmEztSjFfQrR6Mbe7vapTatJ4r86c5kv/ea/seUQyy4JgR7cy6MlsFj6HJIw01IiIz3XDMF0hL0C2PXwtCnWgamgnDE6Eqrj/DJ2qhJf/8ELl53N/4fPfnFZKNXzUHhqJqNFgXmoQ092dhkkjmwSZqg0KyANLC1zMW0fqBGpX29/b2QCw0AQDWDlRstA6y2MaVnCGmAE37xZBbO7w03g1Neyjovoz2SklR3z16zmFMx/b6MGDTmnFtMFD6rNn0Paac5zO8U9UmrL4kCUicF9muekneh26Ba9IBIUc/BjujK+yzRHVX3ycdhKz263P1m5PrmJk4VO6OZxSN7rjHPHoz5dy864h1kfhQUQ7o/RxpN5N5i9/fUHH88dYq8mELRQtZGJl3DqJrv6S2NN67/3VLsbPD2LoO01YMKhJmu6MKQzcjGYaA/wjdPWHVsoORvWEY0oWEMrI8qIOCDQH9D1JPyhBUF35jgKI4AcgLNkboByKXdyZD+qklsy8pCl4BtQHtpowZ5/UOp1wi9K5RkU9AwD4RqNz5czliTyjOn5kICdgrdBk6LmU280sdynSlyxOK6AA1g4=
12
- gem: uuidable
13
- on:
14
- tags: true
15
- repo: flant/uuidable