ulid-rails 1.1.1 → 2.0.0.pre.2

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: 5af3537525b91e1c92af1b6ea6bdc8a5a872943a1cb5c8d895f50addb0ae7508
4
- data.tar.gz: 0032d5ad04a924b166bbcf10b1fa9d01a5222aa57175fca0b645dd5df05eee70
3
+ metadata.gz: 40792a9dc420058bbd9a61da6808df142a4649ed4f032973e669f989a8680190
4
+ data.tar.gz: b3de361dda87bddc9c4119e19225bf6738fc73775c5ef51e0edb027de81a6e70
5
5
  SHA512:
6
- metadata.gz: 3d2855d4fd84b86d85191104aeee9e8574bf3a29bf095c4fec622c611db9c19694db182476d9bd89c2f78f98193c6b8f2fbadf4045fe6240a0d0f0091f30ff19
7
- data.tar.gz: 02ebc48788b7d39f5d1684802a2941b10e237d880885c63e311d76493d02f6a5956ba98b54c77c9d54014eec0306ac4df9f91d78324279c621623500bbaf002b
6
+ metadata.gz: 762e47b12d8ae6b72c3c7ffe7bba234791c47bd5116ae1ce540ff18a3c7aa3cece358f3579de9f133374af39396c0315d1c1e486281aadd704acf0f6fbca336e
7
+ data.tar.gz: 86162930acbfb620571fc3aa4451eef4a7407d118f8a64846e6fe32f0ee53e068c36f35503ad0ef6742bb4ecc0e89ae2a66f440603d337b31267002863d68414
data/CHANGELOG.md CHANGED
@@ -2,6 +2,16 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 2.0.0.pre.2
6
+
7
+ - Drop support for Rails 5.0 and Rails 5.1.
8
+ - Fix various issues when calling `#where` with non-String values, or multiple ULID values.
9
+ - The following modules/classes have been removed:
10
+ - `ULID::Rails::Formatter`
11
+ - `ULID::Rails::Validator`
12
+ - `ULID::Rails::Patch::FinderMethods`
13
+ - `ULID::Rails::Patch::SchemaStatements`
14
+
5
15
  ## 1.1.1
6
16
 
7
17
  - Drop support for ruby 2.6.
data/README.md CHANGED
@@ -162,13 +162,9 @@ $ docker-compose run -e AR_VERSION=6.1 test
162
162
  Or run tests locally, without docker-compose
163
163
 
164
164
  ```
165
- $ 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
166
166
  ```
167
167
 
168
- ## Known issues
169
-
170
- - ActiveRecord 5.0 and 5.1 do not work properly with some data association loading methods. For example, eager loading with limit/offset on a model that has a ulid ID. Refer to test cases that are skiped for AR 5.0 and 5.1.
171
-
172
168
  ## License
173
169
 
174
170
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -8,46 +8,6 @@ module ULID
8
8
  as: "FROM_UNIXTIME(CONV(HEX(#{ulid_column_name} >> 80), 16, 10) / 1000.0)"
9
9
  end
10
10
  end
11
-
12
- module FinderMethods
13
- def limited_ids_for(relation)
14
- id_rows = super
15
- if klass.attribute_types[primary_key].is_a? ULID::Rails::Type
16
- id_rows.map do |id|
17
- klass.attribute_types[primary_key].deserialize id
18
- end
19
- else
20
- id_rows
21
- end
22
- end
23
- end
24
-
25
- module SchemaStatements
26
- def distinct_relation_for_primary_key(relation) # :nodoc:
27
- values = columns_for_distinct(
28
- visitor.compile(relation.table[relation.primary_key]),
29
- relation.order_values
30
- )
31
-
32
- limited = relation.reselect(values).distinct!
33
- limited_ids = select_rows(limited.arel, "SQL").map(&:last)
34
-
35
- if relation.klass.attribute_types[relation.primary_key].is_a? ULID::Rails::Type
36
- limited_ids.map! do |id|
37
- relation.klass.attribute_types[relation.primary_key].deserialize id
38
- end
39
- end
40
-
41
- if limited_ids.empty?
42
- relation.none!
43
- else
44
- relation.where!(relation.primary_key => limited_ids)
45
- end
46
-
47
- relation.limit_value = relation.offset_value = nil
48
- relation
49
- end
50
- end
51
11
  end
52
12
  end
53
13
  end
@@ -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,68 +1,74 @@
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
- case adapter
27
- when "mysql2"
28
- if value.is_a?(Data)
29
- value = value.to_s
30
- elsif value.is_a?(String)
31
- value = value.unpack1("H*")
32
- end
33
- when "postgresql"
34
- if value.is_a?(Data)
35
- value = value.to_s
36
- value = value.unpack1("H*")
37
- end
38
- value = value[2..-1] if value.start_with?("\\x")
39
- when "sqlite3"
40
- if value.is_a?(Data)
41
- value = value.to_s
42
- end
43
- end
44
-
45
- value.length == 32 ? @formatter.format(value) : super
30
+ super
46
31
  end
47
32
 
48
- def serialize(value)
49
- 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)
50
37
 
51
- case adapter
52
- when "mysql2", "sqlite3"
53
- Data.new(@formatter.unformat(value))
54
- when "postgresql"
55
- 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)
56
43
  end
57
44
  end
58
45
 
59
- private
46
+ class Data < ActiveModel::Type::Binary::Data
47
+ def self.from_serialized(data)
48
+ deserialized = Base32::Crockford.encode(data.hex).rjust(26, "0")
49
+ new(deserialized)
50
+ end
60
51
 
61
- def adapter
62
- if ::ActiveRecord::Base.respond_to?(:connection_db_config)
63
- ::ActiveRecord::Base.connection_db_config.configuration_hash[:adapter]
64
- else
65
- ::ActiveRecord::Base.connection_config[:adapter]
52
+ def self.valid_ulid?(str)
53
+ return true if str.nil?
54
+
55
+ str.length == 26 && Base32::Crockford.valid?(str)
56
+ end
57
+
58
+ def initialize(value)
59
+ @value = nil
60
+ super if self.class.valid_ulid?(value)
61
+ end
62
+
63
+ attr_reader :value
64
+
65
+ def hex
66
+ return nil if @value.nil?
67
+
68
+ hexed = Base32::Crockford.decode(@value).to_s(16).rjust(32, "0")
69
+ raise ArgumentError if hexed.length > 32
70
+
71
+ hexed
66
72
  end
67
73
  end
68
74
  end
@@ -1,5 +1,5 @@
1
1
  module ULID
2
2
  module Rails
3
- VERSION = "1.1.1"
3
+ VERSION = "2.0.0.pre.2"
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,15 +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
- case ActiveRecord::VERSION::MAJOR
50
- when 5
51
- ActiveRecord::FinderMethods.prepend(Patch::FinderMethods) unless ActiveRecord::VERSION::MINOR < 2
52
- when 6
53
- ActiveRecord::FinderMethods.prepend(Patch::FinderMethods)
54
- when 7
55
- ActiveRecord::ConnectionAdapters::SchemaStatements.prepend(Patch::SchemaStatements)
56
- end
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)
57
54
  end
58
55
  end
data/ulid-rails.gemspec CHANGED
@@ -9,8 +9,8 @@ Gem::Specification.new do |spec|
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,20 +22,28 @@ 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
49
  spec.add_development_dependency "rubocop-minitest"
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.1.1
4
+ version: 2.0.0.pre.2
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: 2023-05-25 00:00:00.000000000 Z
12
+ date: 2023-09-07 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
@@ -151,7 +165,7 @@ dependencies:
151
165
  - - "~>"
152
166
  - !ruby/object:Gem::Version
153
167
  version: 1.16.0
154
- description: ULID for rails
168
+ description: ULID for Rails
155
169
  email:
156
170
  - kazunori.kajihiro@gmail.com
157
171
  - ruby-core@zendesk.com
@@ -159,34 +173,15 @@ executables: []
159
173
  extensions: []
160
174
  extra_rdoc_files: []
161
175
  files:
162
- - ".env"
163
- - ".github/workflows/lint.yml"
164
- - ".github/workflows/test.yml"
165
- - ".gitignore"
166
- - ".rubocop.yml"
167
- - ".standard.yml"
168
176
  - CHANGELOG.md
169
- - Gemfile
170
177
  - LICENSE.txt
171
178
  - README.md
172
- - Rakefile
173
- - bin/console
174
- - bin/run_tests
175
- - bin/setup
176
- - docker-compose.yml
177
- - gemfiles/5.0.gemfile
178
- - gemfiles/5.1.gemfile
179
- - gemfiles/5.2.gemfile
180
- - gemfiles/6.0.gemfile
181
- - gemfiles/6.1.gemfile
182
- - gemfiles/7.0.5.gemfile
183
- - gemfiles/7.0.gemfile
184
179
  - lib/ulid/rails.rb
185
180
  - lib/ulid/rails/errors.rb
186
- - lib/ulid/rails/formatter.rb
187
181
  - lib/ulid/rails/patch.rb
182
+ - lib/ulid/rails/postgresql_type.rb
183
+ - lib/ulid/rails/sqlite_type.rb
188
184
  - lib/ulid/rails/type.rb
189
- - lib/ulid/rails/validator.rb
190
185
  - lib/ulid/rails/version.rb
191
186
  - ulid-rails.gemspec
192
187
  homepage: https://github.com/k2nr/ulid-rails/
@@ -208,12 +203,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
208
203
  version: 2.5.0
209
204
  required_rubygems_version: !ruby/object:Gem::Requirement
210
205
  requirements:
211
- - - ">="
206
+ - - ">"
212
207
  - !ruby/object:Gem::Version
213
- version: '0'
208
+ version: 1.3.1
214
209
  requirements: []
215
210
  rubygems_version: 3.4.12
216
211
  signing_key:
217
212
  specification_version: 4
218
- summary: ULID for rails
213
+ summary: ULID for Rails
219
214
  test_files: []
data/.env DELETED
@@ -1 +0,0 @@
1
- RUBY_VERSION=2.7
@@ -1,20 +0,0 @@
1
- ---
2
- name: Linting
3
-
4
- on:
5
- pull_request:
6
- push:
7
- branches:
8
- - master
9
- workflow_dispatch:
10
-
11
- jobs:
12
- standardrb:
13
- runs-on: ubuntu-latest
14
- steps:
15
- - uses: actions/checkout@v3
16
- - uses: ruby/setup-ruby@v1
17
- with:
18
- ruby-version: "3.1"
19
- bundler-cache: true
20
- - run: bundle exec rubocop
@@ -1,36 +0,0 @@
1
- ---
2
- name: Tests
3
-
4
- on:
5
- pull_request:
6
- push:
7
- branches:
8
- - master
9
- workflow_dispatch:
10
-
11
- jobs:
12
- tests:
13
- name: ActiveRecord ${{ matrix.activerecord-version }} / Ruby ${{ matrix.ruby-version }}
14
- runs-on: ubuntu-latest
15
- strategy:
16
- fail-fast: false
17
- matrix:
18
- activerecord-version: ["5.0", "5.1", "5.2", "6.0", "6.1", "7.0", "7.0.5"]
19
- ruby-version: ["2.7", "3.0", "3.1", "3.2"]
20
- exclude:
21
- - {activerecord-version: "5.0", ruby-version: "3.0"}
22
- - {activerecord-version: "5.0", ruby-version: "3.1"}
23
- - {activerecord-version: "5.0", ruby-version: "3.2"}
24
- - {activerecord-version: "5.1", ruby-version: "3.0"}
25
- - {activerecord-version: "5.1", ruby-version: "3.1"}
26
- - {activerecord-version: "5.1", ruby-version: "3.2"}
27
- - {activerecord-version: "5.2", ruby-version: "3.0"}
28
- - {activerecord-version: "5.2", ruby-version: "3.1"}
29
- - {activerecord-version: "5.2", ruby-version: "3.2"}
30
- - {activerecord-version: "6.0", ruby-version: "3.1"}
31
- steps:
32
- - uses: actions/checkout@v3
33
- - run: docker-compose run test
34
- env:
35
- RUBY_VERSION: ${{ matrix.ruby-version }}
36
- AR_VERSION: ${{ matrix.activerecord-version }}
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/.rubocop.yml DELETED
@@ -1,12 +0,0 @@
1
- require:
2
- - rubocop-minitest
3
- - standard
4
-
5
- inherit_gem:
6
- rubocop-minitest: config/default.yml
7
- standard: config/base.yml
8
-
9
- AllCops:
10
- NewCops: enable
11
- Exclude:
12
- - 'vendor/**/*'
data/.standard.yml DELETED
@@ -1,4 +0,0 @@
1
- ruby_version: 2.3
2
- ignore:
3
- - 'vendor/**/*'
4
- - 'gemfiles/vendor/**/*'
data/Gemfile DELETED
@@ -1,2 +0,0 @@
1
- version = ENV["AR_VERSION"] || "6.0"
2
- 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,51 +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
- environment:
7
- - AR_VERSION=${AR_VERSION}
8
- depends_on:
9
- pg12:
10
- condition: service_healthy
11
- mysql56:
12
- condition: service_healthy
13
- mysql57:
14
- condition: service_healthy
15
- mysql80:
16
- condition: service_healthy
17
- working_dir: /app
18
- volumes:
19
- - bundle:/usr/local/bundle
20
- - .:/app
21
-
22
- mysql56:
23
- image: mysql:5.6
24
- environment:
25
- MYSQL_ROOT_PASSWORD: password
26
- command: --innodb-large-prefix --innodb-file-format=barracuda
27
- healthcheck:
28
- test: mysql --password=password -e "show databases;"
29
- mysql57:
30
- image: mysql:5.7
31
- environment:
32
- MYSQL_ROOT_PASSWORD: password
33
- healthcheck:
34
- test: mysql --password=password -e "show databases;"
35
- mysql80:
36
- image: mysql:8.0
37
- command: --default-authentication-plugin=mysql_native_password
38
- environment:
39
- MYSQL_ROOT_PASSWORD: password
40
- healthcheck:
41
- test: mysql --password=password -e "show databases;"
42
- pg12:
43
- image: postgres:12
44
- environment:
45
- PGDATA: /data
46
- POSTGRES_DB: db
47
- POSTGRES_HOST_AUTH_METHOD: trust
48
- healthcheck:
49
- test: echo "\\l" | psql -U postgres
50
- volumes:
51
- bundle:
data/gemfiles/5.0.gemfile DELETED
@@ -1,10 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gemspec path: ".."
4
-
5
- gem "activesupport", "~> 5.0.0"
6
- gem "activemodel", "~> 5.0.0"
7
- gem "activerecord", "~> 5.0.0"
8
- gem "sqlite3", "~> 1.3.6"
9
- gem "mysql2", ">= 0.3.18", "< 0.6.0"
10
- gem "pg", ">= 0.18", "< 2.0"
data/gemfiles/5.1.gemfile DELETED
@@ -1,10 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gemspec path: ".."
4
-
5
- gem "activesupport", "~> 5.1.0"
6
- gem "activemodel", "~> 5.1.0"
7
- gem "activerecord", "~> 5.1.0"
8
- gem "sqlite3", "~> 1.3", ">= 1.3.6"
9
- gem "mysql2", ">= 0.3.18", "< 0.6.0"
10
- gem "pg", ">= 0.18", "< 2.0"
data/gemfiles/5.2.gemfile DELETED
@@ -1,10 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gemspec path: ".."
4
-
5
- gem "activesupport", "~> 5.2.0"
6
- gem "activemodel", "~> 5.2.0"
7
- gem "activerecord", "~> 5.2.0"
8
- gem "sqlite3", "~> 1.3", ">= 1.3.6"
9
- gem "mysql2", ">= 0.4.4", "< 0.6.0"
10
- gem "pg", ">= 0.18", "< 2.0"
data/gemfiles/6.0.gemfile DELETED
@@ -1,10 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gemspec path: ".."
4
-
5
- gem "activesupport", "~> 6.0.0"
6
- gem "activemodel", "~> 6.0.0"
7
- gem "activerecord", "~> 6.0.0"
8
- gem "sqlite3", "~> 1.4"
9
- gem "mysql2", ">= 0.4.4"
10
- gem "pg", ">= 0.18", "< 2.0"
data/gemfiles/6.1.gemfile DELETED
@@ -1,10 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gemspec path: ".."
4
-
5
- gem "activesupport", "~> 6.1.0"
6
- gem "activemodel", "~> 6.1.0"
7
- gem "activerecord", "~> 6.1.0"
8
- gem "sqlite3", "~> 1.4"
9
- gem "mysql2", "~> 0.5"
10
- gem "pg", "~> 1.1"
@@ -1,10 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gemspec path: ".."
4
-
5
- gem "activesupport", "~> 7.0.5"
6
- gem "activemodel", "~> 7.0.5"
7
- gem "activerecord", "~> 7.0.5"
8
- gem "sqlite3", "~> 1.4"
9
- gem "mysql2", "~> 0.5"
10
- gem "pg", "~> 1.1"
data/gemfiles/7.0.gemfile DELETED
@@ -1,10 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gemspec path: ".."
4
-
5
- gem "activesupport", "~> 7.0.0", "< 7.0.5"
6
- gem "activemodel", "~> 7.0.0", "< 7.0.5"
7
- gem "activerecord", "~> 7.0.0", "< 7.0.5"
8
- gem "sqlite3", "~> 1.4"
9
- gem "mysql2", "~> 0.5"
10
- gem "pg", "~> 1.1"
@@ -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