ulid-rails 1.0.0 → 2.1.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ad104e01d6ca64c2430e444ea5d900dcabf387200d177edf90be642bbebe3eaf
4
- data.tar.gz: 28dc14190454edd67f047908981940d2741fb6cd7da2b416a4631cd0ea651e8d
3
+ metadata.gz: 68a14806c3289d3d6df925f84d498397db548eb23001772055ca287901de4439
4
+ data.tar.gz: c945755a7ce0accec78102f7e2f77743c7af016d9914679b42d8812be6efd315
5
5
  SHA512:
6
- metadata.gz: f7e03ce00d239548a353a0fb5d1601d8af16303a384fd7c20176065a34a4a3345b8fda3bcc1c18d140858edda8e7544638226037bc2d20c74a1341de3ac62d9d
7
- data.tar.gz: 0c7a894e1124d72608f9e493ce7db594780715c1c0e0a69345970d59b093dcf10bc4bc4b1f21f5db9a48bc4862838cb06851485958b19caa4f8085fb1227eacb
6
+ metadata.gz: f5a91f4489c8d7c52c498e47f84abe4aaf79d2c7047d686bd84001601ce59548843e2df25e33f0926def71941d5a0139b67728b8c422b5025083d0e7a5571840
7
+ data.tar.gz: 665f1d233db7086447e626f96136139d5b86729f552327cb8e163092ea2590b769269d15a3e480fceebff68610da2f8c11973ce8bad46337dfa551d94a5744d1
data/CHANGELOG.md CHANGED
@@ -1,5 +1,34 @@
1
1
  # ulid-rails CHANGELOG
2
2
 
3
+ ## Unreleased
4
+
5
+ ## 2.1.0
6
+
7
+ - Make `ULID::Rails::Type::Data.valid_ulid?` more strict in what is accepted as valid and not.
8
+
9
+ ## 2.0.0
10
+
11
+ - Ensure compatibility with the Trilogy database adapter.
12
+ - Drop support for Rails 5.0 and Rails 5.1.
13
+ - Ensure compatibility with Rails 7.1.
14
+ - Fix various issues when calling `#where` with non-String values, or multiple ULID values.
15
+ - The following modules/classes have been removed:
16
+ - `ULID::Rails::Formatter`
17
+ - `ULID::Rails::Validator`
18
+ - `ULID::Rails::Patch::FinderMethods`
19
+ - `ULID::Rails::Patch::SchemaStatements`
20
+
21
+ ## 1.1.1
22
+
23
+ - Drop support for ruby 2.6.
24
+ - Fix compatibility with ActiveRecord 7.0.5+.
25
+
26
+ ## 1.1.0
27
+
28
+ - Fix eager loading with limit/offset on models that have ulid primary key. The fix only applies to ActiveRecord 5.2, 6 and 7 (#38).
29
+ - Add support for Ruby 3.1.
30
+ - Add support for ActiveRecord 7.
31
+
3
32
  ## 1.0.0
4
33
 
5
34
  - Drop support for Rails 4.2.
@@ -11,6 +40,7 @@
11
40
  ## 0.6.0
12
41
 
13
42
  - Add support for Rails 4.2, 5.0 and 5.1.
43
+ - Known Issue: AREL expressions incorrectly serialize ULID values in Rails 4.2 (#27).
14
44
 
15
45
  ## 0.5.0
16
46
 
data/README.md CHANGED
@@ -2,24 +2,28 @@
2
2
 
3
3
  This gem makes it possible to use [ULID](https://github.com/ulid/spec) for DB in a Ruby on Rails app.
4
4
 
5
-
6
5
  ## Installation
7
6
 
8
-
9
7
  ```ruby
10
8
  gem 'ulid-rails'
11
9
  ```
12
10
 
13
11
  And then execute:
14
12
 
15
- $ bundle
13
+ ```
14
+ $ bundle
15
+ ```
16
16
 
17
17
  Or install it yourself as:
18
18
 
19
- $ gem install ulid-rails
19
+ ```
20
+ $ gem install ulid-rails
21
+ ```
20
22
 
21
23
  ## Usage
22
24
 
25
+ First, load up the gem with `require 'ulid/rails'`.
26
+
23
27
  ### Migrations
24
28
 
25
29
  Specify `id: false` to `create_table` and add `id` column as 16-byte binary type.
@@ -33,6 +37,7 @@ Specify `id: false` to `create_table` and add `id` column as 16-byte binary type
33
37
  end
34
38
  ```
35
39
 
40
+ **MySQL note:** You can also declare the `id` column as `t.column :id, 'binary(16)'` when using MySQL, given that the syntax in the example will generate a SQL that makes the id as `VARBINARY(16)` instead of `BINARY(16)`.
36
41
 
37
42
  ### Model Changes
38
43
 
@@ -103,6 +108,41 @@ You need to specicfy `type` option
103
108
  end
104
109
  ```
105
110
 
111
+ ### Many to many associations
112
+
113
+ Please note that this library doesn't work properly with `has_and_belongs_to_many` associations.
114
+
115
+ Our recommendation is to be explicit and instead use the `has_many, through: join_class` association.
116
+ Notice that for it to work properly you must specify the `has_many` to the join class in the main classes of the association,
117
+ and your join class must have `belongs_to` main classes defined as shown in the example below:
118
+
119
+ ```ruby
120
+ class User < ActiveRecord::Base
121
+ include ULID::Rails
122
+ ulid :id, auto_generate: true
123
+
124
+ has_many :user_articles
125
+ has_many :articles, through: :user_articles
126
+ end
127
+
128
+ class UserArticle < ActiveRecord::Base
129
+ include ULID::Rails
130
+ ulid :id, auto_generate: true
131
+ ulid :user_id
132
+ ulid :article_id
133
+
134
+ belongs_to :user
135
+ belongs_to :article
136
+ end
137
+
138
+ class Article < ActiveRecord::Base
139
+ include ULID::Rails
140
+ ulid :id, auto_generate: true
141
+
142
+ has_many :user_articles
143
+ end
144
+ ```
145
+
106
146
  ## Development
107
147
 
108
148
  ### Run tests
@@ -122,7 +162,7 @@ $ docker-compose run -e AR_VERSION=6.1 test
122
162
  Or run tests locally, without docker-compose
123
163
 
124
164
  ```
125
- $ AR_VERSION=4.2 bundle update && AR_VERSION=4.2 bundle exec rake test
165
+ $ AR_VERSION=6.1 bundle update && AR_VERSION=6.1 bundle exec rake test
126
166
  ```
127
167
 
128
168
  ## License
@@ -0,0 +1,39 @@
1
+ require_relative "type"
2
+
3
+ module ULID
4
+ module Rails
5
+ class PostgresqlType < Type
6
+ class Data < ULID::Rails::Type::Data
7
+ def hex
8
+ hexed = super
9
+ return nil if hexed.nil?
10
+ [hexed].pack("H*")
11
+ end
12
+
13
+ alias_method :to_s, :hex
14
+ end
15
+
16
+ # Inspired by active_record/connection_adapters/postgresql/oid/bytea
17
+ def deserialize(value)
18
+ case value
19
+ when nil
20
+ nil
21
+ when ULID::Rails::Type::Data
22
+ super(value.value)
23
+ else
24
+ super(PG::Connection.unescape_bytea(value))
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def cast_string_to_ulid(value)
31
+ if value.is_a?(String) && value.length == 34 && value.start_with?("\\x")
32
+ Data.from_serialized(value[2..])
33
+ else
34
+ super(value, data_class: PostgresqlType::Data)
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,21 @@
1
+ require_relative "type"
2
+
3
+ module ULID
4
+ module Rails
5
+ class SqliteType < Type
6
+ class Data < ULID::Rails::Type::Data
7
+ alias_method :to_s, :hex
8
+ end
9
+
10
+ private
11
+
12
+ def cast_string_to_ulid(value)
13
+ if value.is_a?(String) && value.length == 32
14
+ Data.from_serialized(value)
15
+ else
16
+ super(value, data_class: SqliteType::Data)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,53 +1,80 @@
1
1
  require "active_model/type"
2
- require "ulid/rails/formatter"
3
- require "ulid/rails/validator"
2
+ require "base32/crockford"
4
3
  require "ulid/rails/errors"
5
4
 
6
5
  module ULID
7
6
  module Rails
8
7
  class Type < ActiveModel::Type::Binary
9
- class Data < ActiveModel::Type::Binary::Data
10
- alias_method :hex, :to_s
8
+ def assert_valid_value(value)
9
+ raise ArgumentError, "`#{value}` is not a ULID format" unless Data.valid_ulid?(value)
11
10
  end
12
11
 
13
- def initialize(formatter = Formatter, validator = Validator)
14
- @formatter = formatter
15
- @validator = validator
16
- super()
12
+ def cast(value)
13
+ return nil if value.nil?
14
+
15
+ str = value.is_a?(Data) ? value.value : value
16
+
17
+ cast_string_to_ulid(str).value
17
18
  end
18
19
 
19
- def assert_valid_value(value)
20
- raise ArgumentError, "`#{value}` is not a ULID format" unless @validator.is_valid?(value)
20
+ def serialize(value)
21
+ return value if value.is_a?(Data)
22
+ return nil unless value.is_a?(String)
23
+
24
+ cast_string_to_ulid(value)
21
25
  end
22
26
 
23
27
  def deserialize(value)
24
28
  return nil if value.nil?
25
29
 
26
- value = value.to_s if value.is_a?(Data)
27
- value = value.unpack1("H*") if value.encoding == Encoding::ASCII_8BIT
28
- value = value[2..-1] if value.start_with?("\\x")
29
-
30
- value.length == 32 ? @formatter.format(value) : super
30
+ super
31
31
  end
32
32
 
33
- def serialize(value)
34
- return if value.nil?
33
+ private
34
+
35
+ def cast_string_to_ulid(value, data_class: Data)
36
+ raise ArgumentError if !value.is_a?(String)
35
37
 
36
- case adapter
37
- when "mysql2", "sqlite3"
38
- Data.new(@formatter.unformat(value))
39
- when "postgresql"
40
- Data.new([@formatter.unformat(value)].pack("H*"))
38
+ if data_class.valid_ulid?(value)
39
+ data_class.new(value)
40
+ else
41
+ data = value.unpack1("H*")
42
+ data_class.from_serialized(data)
41
43
  end
42
44
  end
43
45
 
44
- private
46
+ class Data < ActiveModel::Type::Binary::Data
47
+ INVALID_CHARACTERS_REGEX = /[ilou]/i.freeze
48
+ VALID_INITIAL_CHARACTER_REGEX = /^[0-7]/i.freeze
45
49
 
46
- def adapter
47
- if ::ActiveRecord::Base.respond_to?(:connection_db_config)
48
- ::ActiveRecord::Base.connection_db_config.configuration_hash[:adapter]
49
- else
50
- ::ActiveRecord::Base.connection_config[:adapter]
50
+ def self.from_serialized(data)
51
+ deserialized = Base32::Crockford.encode(data.hex).rjust(26, "0")
52
+ new(deserialized)
53
+ end
54
+
55
+ def self.valid_ulid?(str)
56
+ return true if str.nil?
57
+ return false unless str.length == 26
58
+ return false if INVALID_CHARACTERS_REGEX.match?(str)
59
+ return false unless VALID_INITIAL_CHARACTER_REGEX.match?(str)
60
+
61
+ Base32::Crockford.valid?(str)
62
+ end
63
+
64
+ def initialize(value)
65
+ @value = nil
66
+ super if self.class.valid_ulid?(value)
67
+ end
68
+
69
+ attr_reader :value
70
+
71
+ def hex
72
+ return nil if @value.nil?
73
+
74
+ hexed = Base32::Crockford.decode(@value).to_s(16).rjust(32, "0")
75
+ raise ArgumentError if hexed.length > 32
76
+
77
+ hexed
51
78
  end
52
79
  end
53
80
  end
@@ -1,5 +1,5 @@
1
1
  module ULID
2
2
  module Rails
3
- VERSION = "1.0.0"
3
+ VERSION = "2.1.0"
4
4
  end
5
5
  end
data/lib/ulid/rails.rb CHANGED
@@ -5,6 +5,8 @@ require "ulid"
5
5
  require "base32/crockford"
6
6
  require "ulid/rails/version"
7
7
  require "ulid/rails/type"
8
+ require "ulid/rails/postgresql_type"
9
+ require "ulid/rails/sqlite_type"
8
10
  require "ulid/rails/patch"
9
11
 
10
12
  module ULID
@@ -13,7 +15,7 @@ module ULID
13
15
 
14
16
  class_methods do
15
17
  def ulid(column_name, auto_generate: false)
16
- attribute column_name, ULID::Rails::Type.new
18
+ attribute column_name, :ulid
17
19
 
18
20
  if auto_generate
19
21
  before_create do
@@ -44,7 +46,10 @@ module ULID
44
46
  end
45
47
  end
46
48
 
47
- ActiveModel::Type.register(:ulid, ULID::Rails::Type)
48
- ActiveRecord::ConnectionAdapters::TableDefinition.send :include, Patch::Migrations
49
+ ActiveRecord::Type.register(:ulid, ULID::Rails::Type, override: false)
50
+ ActiveRecord::Type.register(:ulid, ULID::Rails::PostgresqlType, adapter: :postgresql)
51
+ ActiveRecord::Type.register(:ulid, ULID::Rails::SqliteType, adapter: :sqlite)
52
+ ActiveRecord::Type.register(:ulid, ULID::Rails::SqliteType, adapter: :sqlite3)
53
+ ActiveRecord::ConnectionAdapters::TableDefinition.include(Patch::Migrations)
49
54
  end
50
55
  end
data/ulid-rails.gemspec CHANGED
@@ -5,12 +5,12 @@ require "ulid/rails/version"
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "ulid-rails"
7
7
  spec.version = ULID::Rails::VERSION
8
- spec.required_ruby_version = ">= 2.5.0"
8
+ spec.required_ruby_version = ">= 2.6.0"
9
9
  spec.authors = ["Kazunori Kajihiro", "Zendesk"]
10
10
  spec.email = ["kazunori.kajihiro@gmail.com", "ruby-core@zendesk.com"]
11
11
 
12
- spec.summary = "ULID for rails"
13
- spec.description = "ULID for rails"
12
+ spec.summary = "ULID for Rails"
13
+ spec.description = "ULID for Rails"
14
14
  spec.homepage = "https://github.com/k2nr/ulid-rails/"
15
15
  spec.license = "MIT"
16
16
 
@@ -22,21 +22,30 @@ Gem::Specification.new do |spec|
22
22
  }
23
23
 
24
24
  # Specify which files should be added to the gem when it is released.
25
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
26
- spec.files = Dir.chdir(File.expand_path("..", __FILE__)) do
27
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
28
- end
29
- spec.bindir = "exe"
30
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
+ spec.files = %w[
26
+ CHANGELOG.md
27
+ LICENSE.txt
28
+ README.md
29
+ lib/ulid/rails.rb
30
+ lib/ulid/rails/errors.rb
31
+ lib/ulid/rails/patch.rb
32
+ lib/ulid/rails/postgresql_type.rb
33
+ lib/ulid/rails/sqlite_type.rb
34
+ lib/ulid/rails/type.rb
35
+ lib/ulid/rails/version.rb
36
+ ulid-rails.gemspec
37
+ ]
31
38
  spec.require_paths = ["lib"]
32
39
 
33
40
  spec.add_dependency "ulid", "~> 1.0"
34
41
  spec.add_dependency "base32-crockford", "~> 0.1"
35
- spec.add_dependency "activesupport", ">= 5.0"
36
- spec.add_dependency "activemodel", ">= 5.0"
37
- spec.add_dependency "activerecord", ">= 5.0"
42
+ spec.add_dependency "activesupport", ">= 5.2"
43
+ spec.add_dependency "activemodel", ">= 5.2"
44
+ spec.add_dependency "activerecord", ">= 5.2"
38
45
  spec.add_development_dependency "bundler"
46
+ spec.add_development_dependency "pry-byebug"
39
47
  spec.add_development_dependency "rake"
40
48
  spec.add_development_dependency "minitest", "~> 5.0"
41
- spec.add_development_dependency "standard", "~> 1.3.0"
49
+ spec.add_development_dependency "rubocop-minitest"
50
+ spec.add_development_dependency "standard", "~> 1.32.0"
42
51
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ulid-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kazunori Kajihiro
8
8
  - Zendesk
9
9
  autorequire:
10
- bindir: exe
10
+ bindir: bin
11
11
  cert_chain: []
12
- date: 2021-11-23 00:00:00.000000000 Z
12
+ date: 2023-12-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ulid
@@ -45,42 +45,42 @@ dependencies:
45
45
  requirements:
46
46
  - - ">="
47
47
  - !ruby/object:Gem::Version
48
- version: '5.0'
48
+ version: '5.2'
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - ">="
54
54
  - !ruby/object:Gem::Version
55
- version: '5.0'
55
+ version: '5.2'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: activemodel
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - ">="
61
61
  - !ruby/object:Gem::Version
62
- version: '5.0'
62
+ version: '5.2'
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - ">="
68
68
  - !ruby/object:Gem::Version
69
- version: '5.0'
69
+ version: '5.2'
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: activerecord
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
74
  - - ">="
75
75
  - !ruby/object:Gem::Version
76
- version: '5.0'
76
+ version: '5.2'
77
77
  type: :runtime
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
81
  - - ">="
82
82
  - !ruby/object:Gem::Version
83
- version: '5.0'
83
+ version: '5.2'
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: bundler
86
86
  requirement: !ruby/object:Gem::Requirement
@@ -95,6 +95,20 @@ dependencies:
95
95
  - - ">="
96
96
  - !ruby/object:Gem::Version
97
97
  version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: pry-byebug
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
98
112
  - !ruby/object:Gem::Dependency
99
113
  name: rake
100
114
  requirement: !ruby/object:Gem::Requirement
@@ -123,21 +137,35 @@ dependencies:
123
137
  - - "~>"
124
138
  - !ruby/object:Gem::Version
125
139
  version: '5.0'
140
+ - !ruby/object:Gem::Dependency
141
+ name: rubocop-minitest
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
126
154
  - !ruby/object:Gem::Dependency
127
155
  name: standard
128
156
  requirement: !ruby/object:Gem::Requirement
129
157
  requirements:
130
158
  - - "~>"
131
159
  - !ruby/object:Gem::Version
132
- version: 1.3.0
160
+ version: 1.32.0
133
161
  type: :development
134
162
  prerelease: false
135
163
  version_requirements: !ruby/object:Gem::Requirement
136
164
  requirements:
137
165
  - - "~>"
138
166
  - !ruby/object:Gem::Version
139
- version: 1.3.0
140
- description: ULID for rails
167
+ version: 1.32.0
168
+ description: ULID for Rails
141
169
  email:
142
170
  - kazunori.kajihiro@gmail.com
143
171
  - ruby-core@zendesk.com
@@ -145,31 +173,15 @@ executables: []
145
173
  extensions: []
146
174
  extra_rdoc_files: []
147
175
  files:
148
- - ".env"
149
- - ".github/workflows/lint.yml"
150
- - ".github/workflows/test.yml"
151
- - ".gitignore"
152
- - ".standard.yml"
153
176
  - CHANGELOG.md
154
- - Gemfile
155
177
  - LICENSE.txt
156
178
  - README.md
157
- - Rakefile
158
- - bin/console
159
- - bin/run_tests
160
- - bin/setup
161
- - docker-compose.yml
162
- - gemfiles/5.0.gemfile
163
- - gemfiles/5.1.gemfile
164
- - gemfiles/5.2.gemfile
165
- - gemfiles/6.0.gemfile
166
- - gemfiles/6.1.gemfile
167
179
  - lib/ulid/rails.rb
168
180
  - lib/ulid/rails/errors.rb
169
- - lib/ulid/rails/formatter.rb
170
181
  - lib/ulid/rails/patch.rb
182
+ - lib/ulid/rails/postgresql_type.rb
183
+ - lib/ulid/rails/sqlite_type.rb
171
184
  - lib/ulid/rails/type.rb
172
- - lib/ulid/rails/validator.rb
173
185
  - lib/ulid/rails/version.rb
174
186
  - ulid-rails.gemspec
175
187
  homepage: https://github.com/k2nr/ulid-rails/
@@ -188,15 +200,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
188
200
  requirements:
189
201
  - - ">="
190
202
  - !ruby/object:Gem::Version
191
- version: 2.5.0
203
+ version: 2.6.0
192
204
  required_rubygems_version: !ruby/object:Gem::Requirement
193
205
  requirements:
194
206
  - - ">="
195
207
  - !ruby/object:Gem::Version
196
208
  version: '0'
197
209
  requirements: []
198
- rubygems_version: 3.2.29
210
+ rubygems_version: 3.4.22
199
211
  signing_key:
200
212
  specification_version: 4
201
- summary: ULID for rails
213
+ summary: ULID for Rails
202
214
  test_files: []
data/.env DELETED
@@ -1 +0,0 @@
1
- RUBY_VERSION=2.6
@@ -1,15 +0,0 @@
1
- ---
2
- name: Linting
3
- on: [push, pull_request]
4
- jobs:
5
- standardrb:
6
- env:
7
- AR_VERSION: "5.2"
8
- runs-on: ubuntu-latest
9
- steps:
10
- - uses: actions/checkout@v2
11
- - uses: ruby/setup-ruby@v1
12
- with:
13
- ruby-version: 3.0
14
- bundler-cache: true
15
- - run: bundle exec standardrb
@@ -1,21 +0,0 @@
1
- ---
2
- name: Tests
3
- on: [push, pull_request]
4
- jobs:
5
- tests:
6
- runs-on: ubuntu-latest
7
- strategy:
8
- matrix:
9
- activerecord-version: ["5.0", "5.1", "5.2", "6.0", "6.1"]
10
- ruby-version: ["2.6", "2.7", "3.0"]
11
- exclude:
12
- - activerecord-version: "5.0"
13
- ruby-version: "3.0"
14
- - activerecord-version: "5.1"
15
- ruby-version: "3.0"
16
- - activerecord-version: "5.2"
17
- ruby-version: "3.0"
18
- steps:
19
- - uses: actions/checkout@v2
20
- - name: Test ActiveRecord ${{ matrix.activerecord-version }} and Ruby ${{ matrix.ruby-version }}
21
- run: RUBY_VERSION=${{ matrix.ruby-version }} docker-compose run -e AR_VERSION=${{ matrix.activerecord-version }} test
data/.gitignore DELETED
@@ -1,10 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /_yardoc/
4
- /coverage/
5
- /doc/
6
- /pkg/
7
- /spec/reports/
8
- /tmp/
9
- /Gemfile.lock
10
- /gemfiles/*.gemfile.lock
data/.standard.yml DELETED
@@ -1,4 +0,0 @@
1
- ruby_version: 2.3
2
- ignore:
3
- - 'vendor/**/*'
4
- - 'gemfiles/vendor/**/*'
data/Gemfile DELETED
@@ -1,9 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
-
5
- # Specify your gem's dependencies in ulid-rails.gemspec
6
- gemspec
7
-
8
- version = ENV["AR_VERSION"] || "6.0"
9
- eval_gemfile File.expand_path("../gemfiles/#{version}.gemfile", __FILE__)
data/Rakefile DELETED
@@ -1,10 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
3
-
4
- Rake::TestTask.new(:test) do |t|
5
- t.libs << "test"
6
- t.libs << "lib"
7
- t.test_files = FileList["test/**/*_test.rb"]
8
- end
9
-
10
- task default: :test
data/bin/console DELETED
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "bundler/setup"
4
- require "ulid/rails"
5
-
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require "irb"
14
- IRB.start(__FILE__)
data/bin/run_tests DELETED
@@ -1,18 +0,0 @@
1
- #!/bin/bash
2
-
3
- set -e
4
-
5
- test_with_db() {
6
- echo "Testing with $1"
7
- DB=$1 bundle exec rake
8
- }
9
-
10
- test_with_db "sqlite3"
11
-
12
- test_with_db "mysql56"
13
-
14
- test_with_db "mysql57"
15
-
16
- test_with_db "mysql80"
17
-
18
- test_with_db "pg12"
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here
data/docker-compose.yml DELETED
@@ -1,49 +0,0 @@
1
- version: '3.6'
2
- services:
3
- test:
4
- image: "ruby:${RUBY_VERSION}"
5
- command: sh -c "rm -f Gemfile.lock && bundle install && bin/run_tests"
6
- depends_on:
7
- pg12:
8
- condition: service_healthy
9
- mysql56:
10
- condition: service_healthy
11
- mysql57:
12
- condition: service_healthy
13
- mysql80:
14
- condition: service_healthy
15
- working_dir: /app
16
- volumes:
17
- - bundle:/usr/local/bundle
18
- - .:/app
19
-
20
- mysql56:
21
- image: mysql:5.6
22
- environment:
23
- MYSQL_ROOT_PASSWORD: password
24
- command: --innodb-large-prefix --innodb-file-format=barracuda
25
- healthcheck:
26
- test: mysql --password=password -e "show databases;"
27
- mysql57:
28
- image: mysql:5.7
29
- environment:
30
- MYSQL_ROOT_PASSWORD: password
31
- healthcheck:
32
- test: mysql --password=password -e "show databases;"
33
- mysql80:
34
- image: mysql:8.0
35
- command: --default-authentication-plugin=mysql_native_password
36
- environment:
37
- MYSQL_ROOT_PASSWORD: password
38
- healthcheck:
39
- test: mysql --password=password -e "show databases;"
40
- pg12:
41
- image: postgres:12
42
- environment:
43
- PGDATA: /data
44
- POSTGRES_DB: db
45
- POSTGRES_HOST_AUTH_METHOD: trust
46
- healthcheck:
47
- test: echo "\\l" | psql -U postgres
48
- volumes:
49
- bundle:
data/gemfiles/5.0.gemfile DELETED
@@ -1,6 +0,0 @@
1
- gem "activesupport", "~> 5.0"
2
- gem "activemodel", "~> 5.0"
3
- gem "activerecord", "~> 5.0"
4
- gem "sqlite3", "~> 1.3.6"
5
- gem "mysql2", ">= 0.3.18", "< 0.6.0"
6
- gem "pg", ">= 0.18", "< 2.0"
data/gemfiles/5.1.gemfile DELETED
@@ -1,6 +0,0 @@
1
- gem "activesupport", "~> 5.1"
2
- gem "activemodel", "~> 5.1"
3
- gem "activerecord", "~> 5.1"
4
- gem "sqlite3", "~> 1.3", ">= 1.3.6"
5
- gem "mysql2", ">= 0.3.18", "< 0.6.0"
6
- gem "pg", ">= 0.18", "< 2.0"
data/gemfiles/5.2.gemfile DELETED
@@ -1,8 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gem "activesupport", "~> 5.2"
4
- gem "activemodel", "~> 5.2"
5
- gem "activerecord", "~> 5.2"
6
- gem "sqlite3", "~> 1.3.6"
7
- gem "mysql2"
8
- gem "pg"
data/gemfiles/6.0.gemfile DELETED
@@ -1,8 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gem "activesupport", "~> 6.0"
4
- gem "activemodel", "~> 6.0"
5
- gem "activerecord", "~> 6.0"
6
- gem "sqlite3", "~> 1.4.1"
7
- gem "mysql2"
8
- gem "pg"
data/gemfiles/6.1.gemfile DELETED
@@ -1,8 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gem "activesupport", "~> 6.1.0"
4
- gem "activemodel", "~> 6.1.0"
5
- gem "activerecord", "~> 6.1.0"
6
- gem "sqlite3", "~> 1.4.2"
7
- gem "mysql2"
8
- gem "pg"
@@ -1,16 +0,0 @@
1
- require "base32/crockford"
2
-
3
- module ULID
4
- module Rails
5
- module Formatter
6
- def self.format(v)
7
- sanitized = v.delete("-").hex
8
- Base32::Crockford.encode(sanitized).rjust(26, "0")
9
- end
10
-
11
- def self.unformat(v)
12
- Base32::Crockford.decode(v).to_s(16).rjust(32, "0")
13
- end
14
- end
15
- end
16
- end
@@ -1,12 +0,0 @@
1
- require "base32/crockford"
2
-
3
- module ULID
4
- module Rails
5
- module Validator
6
- def self.is_valid?(v)
7
- return true if v.nil?
8
- v.length == 26 && Base32::Crockford.valid?(v)
9
- end
10
- end
11
- end
12
- end