ulid-rails 0.3.0 → 1.0.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 +4 -4
- data/.env +1 -0
- data/.github/workflows/lint.yml +15 -0
- data/.github/workflows/test.yml +21 -0
- data/.gitignore +1 -0
- data/.standard.yml +4 -0
- data/CHANGELOG.md +24 -2
- data/Gemfile +3 -3
- data/README.md +20 -9
- data/Rakefile +1 -1
- data/bin/run_tests +4 -9
- data/docker-compose.yml +14 -9
- data/gemfiles/5.0.gemfile +6 -0
- data/gemfiles/5.1.gemfile +6 -0
- data/gemfiles/5.2.gemfile +5 -3
- data/gemfiles/6.0.gemfile +5 -3
- data/gemfiles/6.1.gemfile +8 -0
- data/lib/ulid/rails/errors.rb +5 -0
- data/lib/ulid/rails/formatter.rb +1 -1
- data/lib/ulid/rails/patch.rb +2 -2
- data/lib/ulid/rails/type.rb +22 -5
- data/lib/ulid/rails/validator.rb +12 -0
- data/lib/ulid/rails/version.rb +1 -1
- data/lib/ulid/rails.rb +17 -14
- data/ulid-rails.gemspec +22 -12
- metadata +46 -20
- data/.travis.yml +0 -7
- data/bin/wait-for-it.sh +0 -178
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ad104e01d6ca64c2430e444ea5d900dcabf387200d177edf90be642bbebe3eaf
|
|
4
|
+
data.tar.gz: 28dc14190454edd67f047908981940d2741fb6cd7da2b416a4631cd0ea651e8d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f7e03ce00d239548a353a0fb5d1601d8af16303a384fd7c20176065a34a4a3345b8fda3bcc1c18d140858edda8e7544638226037bc2d20c74a1341de3ac62d9d
|
|
7
|
+
data.tar.gz: 0c7a894e1124d72608f9e493ce7db594780715c1c0e0a69345970d59b093dcf10bc4bc4b1f21f5db9a48bc4862838cb06851485958b19caa4f8085fb1227eacb
|
|
@@ -0,0 +1,15 @@
|
|
|
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
|
|
@@ -0,0 +1,21 @@
|
|
|
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
CHANGED
data/.standard.yml
ADDED
data/CHANGELOG.md
CHANGED
|
@@ -1,10 +1,32 @@
|
|
|
1
1
|
# ulid-rails CHANGELOG
|
|
2
2
|
|
|
3
|
-
## 0.
|
|
3
|
+
## 1.0.0
|
|
4
|
+
|
|
5
|
+
- Drop support for Rails 4.2.
|
|
6
|
+
|
|
7
|
+
### Breaking Changes
|
|
8
|
+
|
|
9
|
+
- `primary_key` option has been removed. You need to specify `auto_generate: true` to automatically fill your primary key columns.
|
|
10
|
+
|
|
11
|
+
## 0.6.0
|
|
12
|
+
|
|
13
|
+
- Add support for Rails 4.2, 5.0 and 5.1.
|
|
14
|
+
|
|
15
|
+
## 0.5.0
|
|
16
|
+
|
|
17
|
+
- Ensure ULID order respects timestamp order to millisecond precision.
|
|
18
|
+
- Validation of ULID format when setting value. A wrong format value will trigger a `ULID::Rails::ArgumentError`.
|
|
19
|
+
|
|
20
|
+
## 0.4.0
|
|
21
|
+
|
|
22
|
+
- Support old ruby versions
|
|
23
|
+
- Fix auto_generate #2
|
|
24
|
+
|
|
25
|
+
## 0.3.0
|
|
4
26
|
|
|
5
27
|
- Support PostgresQL
|
|
6
28
|
|
|
7
|
-
## 0.2
|
|
29
|
+
## 0.2.0
|
|
8
30
|
|
|
9
31
|
### Breaking Changes
|
|
10
32
|
|
data/Gemfile
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
source "https://rubygems.org"
|
|
2
2
|
|
|
3
|
-
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
|
|
3
|
+
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
|
|
4
4
|
|
|
5
5
|
# Specify your gem's dependencies in ulid-rails.gemspec
|
|
6
6
|
gemspec
|
|
7
7
|
|
|
8
|
-
version = ENV[
|
|
9
|
-
eval_gemfile File.expand_path("../gemfiles/#{version}.gemfile", __FILE__)
|
|
8
|
+
version = ENV["AR_VERSION"] || "6.0"
|
|
9
|
+
eval_gemfile File.expand_path("../gemfiles/#{version}.gemfile", __FILE__)
|
data/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ULID::Rails
|
|
2
2
|
|
|
3
|
-
This gem makes it possible to use [ULID](https://github.com/ulid/spec) for DB
|
|
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
5
|
|
|
6
6
|
## Installation
|
|
@@ -27,7 +27,7 @@ Specify `id: false` to `create_table` and add `id` column as 16-byte binary type
|
|
|
27
27
|
```ruby
|
|
28
28
|
def change
|
|
29
29
|
create_table :users, id: false do |t|
|
|
30
|
-
t.binary :id, limit: 16, primary_key: true
|
|
30
|
+
t.binary :id, limit: 16, primary_key: true
|
|
31
31
|
# ...
|
|
32
32
|
end
|
|
33
33
|
end
|
|
@@ -41,7 +41,7 @@ Just add the below lines to your models.
|
|
|
41
41
|
```ruby
|
|
42
42
|
class MyModel < ApplicationRecord
|
|
43
43
|
include ULID::Rails
|
|
44
|
-
ulid :id,
|
|
44
|
+
ulid :id, auto_generate: true # The first argument is the ULID column name
|
|
45
45
|
end
|
|
46
46
|
```
|
|
47
47
|
|
|
@@ -53,7 +53,7 @@ Since ULID includes milli seconds precision timestamp, you don't need to store `
|
|
|
53
53
|
```ruby
|
|
54
54
|
class MyModel < ApplicationRecord
|
|
55
55
|
include ULID::Rails
|
|
56
|
-
ulid :id,
|
|
56
|
+
ulid :id, auto_generate: true # The first argument is the ULID column name
|
|
57
57
|
|
|
58
58
|
# defines `created_at` method which extract timestamp value from id column.
|
|
59
59
|
# This way you don't need physical `created_at` column.
|
|
@@ -63,7 +63,7 @@ end
|
|
|
63
63
|
|
|
64
64
|
### `created_at` virtual column
|
|
65
65
|
|
|
66
|
-
**MySQL Only (for now)**
|
|
66
|
+
**MySQL 5.7 and higher Only (for now)**
|
|
67
67
|
|
|
68
68
|
You can define a "virtual column" in MySQL DB that acts same as a physical column.
|
|
69
69
|
Defining the virtual `created_at` is kind of comlicated so this gem provides a helper method for it.
|
|
@@ -82,14 +82,13 @@ end
|
|
|
82
82
|
|
|
83
83
|
### Auto-generate ULID
|
|
84
84
|
|
|
85
|
-
If `
|
|
86
|
-
|
|
85
|
+
If `auto_generate` is `true`, ULID is auto-generated before create by default.
|
|
86
|
+
If not specified, the default is `false`.
|
|
87
87
|
|
|
88
88
|
```
|
|
89
89
|
class Model < ApplicationRecord
|
|
90
|
-
ulid :id,
|
|
90
|
+
ulid :id, auto_generate: true # auto-generate enabled
|
|
91
91
|
ulid :foreign_key # auto-generate disabled
|
|
92
|
-
ulid :ulid, auto_generate: true # non primary, auto-generate enabled
|
|
93
92
|
end
|
|
94
93
|
```
|
|
95
94
|
|
|
@@ -114,6 +113,18 @@ Just run the below command to test with all supported DB engines.
|
|
|
114
113
|
$ docker-compose run test
|
|
115
114
|
```
|
|
116
115
|
|
|
116
|
+
Or run with a specific ActiveRecord version
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
$ docker-compose run -e AR_VERSION=6.1 test
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Or run tests locally, without docker-compose
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
$ AR_VERSION=4.2 bundle update && AR_VERSION=4.2 bundle exec rake test
|
|
126
|
+
```
|
|
127
|
+
|
|
117
128
|
## License
|
|
118
129
|
|
|
119
130
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/Rakefile
CHANGED
data/bin/run_tests
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
|
|
3
|
+
set -e
|
|
4
|
+
|
|
3
5
|
test_with_db() {
|
|
4
6
|
echo "Testing with $1"
|
|
5
7
|
DB=$1 bundle exec rake
|
|
@@ -7,17 +9,10 @@ test_with_db() {
|
|
|
7
9
|
|
|
8
10
|
test_with_db "sqlite3"
|
|
9
11
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
# Most features should work with MySQL 5.6 but I couldn't properly set it up in test.
|
|
13
|
-
# $DIR/wait-for-it.sh mysql56:3306
|
|
14
|
-
# test_with_db "mysql56"
|
|
12
|
+
test_with_db "mysql56"
|
|
15
13
|
|
|
16
|
-
$DIR/wait-for-it.sh mysql57:3306
|
|
17
14
|
test_with_db "mysql57"
|
|
18
15
|
|
|
19
|
-
$DIR/wait-for-it.sh mysql80:3306
|
|
20
16
|
test_with_db "mysql80"
|
|
21
17
|
|
|
22
|
-
|
|
23
|
-
test_with_db "pg12"
|
|
18
|
+
test_with_db "pg12"
|
data/docker-compose.yml
CHANGED
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|
version: '3.6'
|
|
2
2
|
services:
|
|
3
3
|
test:
|
|
4
|
-
image: ruby
|
|
5
|
-
command: sh -c "rm Gemfile.lock && bundle install && bin/run_tests"
|
|
4
|
+
image: "ruby:${RUBY_VERSION}"
|
|
5
|
+
command: sh -c "rm -f Gemfile.lock && bundle install && bin/run_tests"
|
|
6
6
|
depends_on:
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
pg12:
|
|
8
|
+
condition: service_healthy
|
|
9
|
+
mysql56:
|
|
10
|
+
condition: service_healthy
|
|
11
|
+
mysql57:
|
|
12
|
+
condition: service_healthy
|
|
13
|
+
mysql80:
|
|
14
|
+
condition: service_healthy
|
|
11
15
|
working_dir: /app
|
|
12
16
|
volumes:
|
|
13
17
|
- bundle:/usr/local/bundle
|
|
14
18
|
- .:/app
|
|
15
|
-
|
|
19
|
+
|
|
16
20
|
mysql56:
|
|
17
21
|
image: mysql:5.6
|
|
18
22
|
environment:
|
|
@@ -38,7 +42,8 @@ services:
|
|
|
38
42
|
environment:
|
|
39
43
|
PGDATA: /data
|
|
40
44
|
POSTGRES_DB: db
|
|
45
|
+
POSTGRES_HOST_AUTH_METHOD: trust
|
|
41
46
|
healthcheck:
|
|
42
|
-
test: echo "\\l" | psql -U
|
|
47
|
+
test: echo "\\l" | psql -U postgres
|
|
43
48
|
volumes:
|
|
44
|
-
bundle:
|
|
49
|
+
bundle:
|
data/gemfiles/5.2.gemfile
CHANGED
data/gemfiles/6.0.gemfile
CHANGED
data/lib/ulid/rails/formatter.rb
CHANGED
data/lib/ulid/rails/patch.rb
CHANGED
|
@@ -4,8 +4,8 @@ module ULID
|
|
|
4
4
|
module Migrations
|
|
5
5
|
def virtual_ulid_timestamp(timestamp_column_name, ulid_column_name)
|
|
6
6
|
virtual timestamp_column_name,
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
type: :datetime,
|
|
8
|
+
as: "FROM_UNIXTIME(CONV(HEX(#{ulid_column_name} >> 80), 16, 10) / 1000.0)"
|
|
9
9
|
end
|
|
10
10
|
end
|
|
11
11
|
end
|
data/lib/ulid/rails/type.rb
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
require "active_model/type"
|
|
2
2
|
require "ulid/rails/formatter"
|
|
3
|
+
require "ulid/rails/validator"
|
|
4
|
+
require "ulid/rails/errors"
|
|
3
5
|
|
|
4
6
|
module ULID
|
|
5
7
|
module Rails
|
|
@@ -8,17 +10,22 @@ module ULID
|
|
|
8
10
|
alias_method :hex, :to_s
|
|
9
11
|
end
|
|
10
12
|
|
|
11
|
-
def initialize(formatter = Formatter)
|
|
13
|
+
def initialize(formatter = Formatter, validator = Validator)
|
|
12
14
|
@formatter = formatter
|
|
15
|
+
@validator = validator
|
|
13
16
|
super()
|
|
14
17
|
end
|
|
15
18
|
|
|
16
|
-
def
|
|
19
|
+
def assert_valid_value(value)
|
|
20
|
+
raise ArgumentError, "`#{value}` is not a ULID format" unless @validator.is_valid?(value)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def deserialize(value)
|
|
17
24
|
return nil if value.nil?
|
|
18
25
|
|
|
19
26
|
value = value.to_s if value.is_a?(Data)
|
|
20
|
-
value = value.
|
|
21
|
-
value = value[2
|
|
27
|
+
value = value.unpack1("H*") if value.encoding == Encoding::ASCII_8BIT
|
|
28
|
+
value = value[2..-1] if value.start_with?("\\x")
|
|
22
29
|
|
|
23
30
|
value.length == 32 ? @formatter.format(value) : super
|
|
24
31
|
end
|
|
@@ -26,13 +33,23 @@ module ULID
|
|
|
26
33
|
def serialize(value)
|
|
27
34
|
return if value.nil?
|
|
28
35
|
|
|
29
|
-
case
|
|
36
|
+
case adapter
|
|
30
37
|
when "mysql2", "sqlite3"
|
|
31
38
|
Data.new(@formatter.unformat(value))
|
|
32
39
|
when "postgresql"
|
|
33
40
|
Data.new([@formatter.unformat(value)].pack("H*"))
|
|
34
41
|
end
|
|
35
42
|
end
|
|
43
|
+
|
|
44
|
+
private
|
|
45
|
+
|
|
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]
|
|
51
|
+
end
|
|
52
|
+
end
|
|
36
53
|
end
|
|
37
54
|
end
|
|
38
55
|
end
|
data/lib/ulid/rails/version.rb
CHANGED
data/lib/ulid/rails.rb
CHANGED
|
@@ -12,30 +12,33 @@ module ULID
|
|
|
12
12
|
extend ActiveSupport::Concern
|
|
13
13
|
|
|
14
14
|
class_methods do
|
|
15
|
-
def ulid(column_name,
|
|
15
|
+
def ulid(column_name, auto_generate: false)
|
|
16
16
|
attribute column_name, ULID::Rails::Type.new
|
|
17
17
|
|
|
18
|
-
auto_generate = auto_generate.nil? ? primary_key : false
|
|
19
18
|
if auto_generate
|
|
20
19
|
before_create do
|
|
21
20
|
send("#{column_name}=", ULID.generate) if send(column_name).nil?
|
|
22
21
|
end
|
|
23
22
|
end
|
|
23
|
+
end
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
25
|
+
def ulid_extract_timestamp(ulid_column, timestamp_column = :created_at)
|
|
26
|
+
define_method timestamp_column do
|
|
27
|
+
at = begin
|
|
28
|
+
super()
|
|
29
|
+
rescue
|
|
30
|
+
nil
|
|
31
|
+
end
|
|
32
|
+
if !at && (id_val = send(ulid_column))
|
|
33
|
+
Time.zone.at((Base32::Crockford.decode(id_val) >> 80) / 1000.0)
|
|
34
|
+
else
|
|
35
|
+
at
|
|
33
36
|
end
|
|
37
|
+
end
|
|
34
38
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
end
|
|
39
|
+
if timestamp_column.to_s == "created_at"
|
|
40
|
+
define_singleton_method(:timestamp_attributes_for_create) do
|
|
41
|
+
[]
|
|
39
42
|
end
|
|
40
43
|
end
|
|
41
44
|
end
|
data/ulid-rails.gemspec
CHANGED
|
@@ -3,22 +3,31 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
|
3
3
|
require "ulid/rails/version"
|
|
4
4
|
|
|
5
5
|
Gem::Specification.new do |spec|
|
|
6
|
-
spec.name
|
|
7
|
-
spec.version
|
|
8
|
-
spec.
|
|
9
|
-
spec.
|
|
6
|
+
spec.name = "ulid-rails"
|
|
7
|
+
spec.version = ULID::Rails::VERSION
|
|
8
|
+
spec.required_ruby_version = ">= 2.5.0"
|
|
9
|
+
spec.authors = ["Kazunori Kajihiro", "Zendesk"]
|
|
10
|
+
spec.email = ["kazunori.kajihiro@gmail.com", "ruby-core@zendesk.com"]
|
|
10
11
|
|
|
11
|
-
spec.summary
|
|
12
|
-
spec.description
|
|
13
|
-
spec.
|
|
12
|
+
spec.summary = "ULID for rails"
|
|
13
|
+
spec.description = "ULID for rails"
|
|
14
|
+
spec.homepage = "https://github.com/k2nr/ulid-rails/"
|
|
15
|
+
spec.license = "MIT"
|
|
16
|
+
|
|
17
|
+
spec.metadata = {
|
|
18
|
+
"changelog_uri" => "https://github.com/k2nr/ulid-rails/blob/master/CHANGELOG.md",
|
|
19
|
+
"source_code_uri" => "https://github.com/k2nr/ulid-rails/",
|
|
20
|
+
"bug_tracker_uri" => "https://github.com/k2nr/ulid-rails/issues",
|
|
21
|
+
"rubygems_mfa_required" => "true"
|
|
22
|
+
}
|
|
14
23
|
|
|
15
24
|
# Specify which files should be added to the gem when it is released.
|
|
16
25
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
|
17
|
-
spec.files
|
|
26
|
+
spec.files = Dir.chdir(File.expand_path("..", __FILE__)) do
|
|
18
27
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
19
28
|
end
|
|
20
|
-
spec.bindir
|
|
21
|
-
spec.executables
|
|
29
|
+
spec.bindir = "exe"
|
|
30
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
22
31
|
spec.require_paths = ["lib"]
|
|
23
32
|
|
|
24
33
|
spec.add_dependency "ulid", "~> 1.0"
|
|
@@ -26,7 +35,8 @@ Gem::Specification.new do |spec|
|
|
|
26
35
|
spec.add_dependency "activesupport", ">= 5.0"
|
|
27
36
|
spec.add_dependency "activemodel", ">= 5.0"
|
|
28
37
|
spec.add_dependency "activerecord", ">= 5.0"
|
|
29
|
-
spec.add_development_dependency "bundler"
|
|
30
|
-
spec.add_development_dependency "rake"
|
|
38
|
+
spec.add_development_dependency "bundler"
|
|
39
|
+
spec.add_development_dependency "rake"
|
|
31
40
|
spec.add_development_dependency "minitest", "~> 5.0"
|
|
41
|
+
spec.add_development_dependency "standard", "~> 1.3.0"
|
|
32
42
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ulid-rails
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 1.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Kazunori Kajihiro
|
|
8
|
-
|
|
8
|
+
- Zendesk
|
|
9
|
+
autorequire:
|
|
9
10
|
bindir: exe
|
|
10
11
|
cert_chain: []
|
|
11
|
-
date:
|
|
12
|
+
date: 2021-11-23 00:00:00.000000000 Z
|
|
12
13
|
dependencies:
|
|
13
14
|
- !ruby/object:Gem::Dependency
|
|
14
15
|
name: ulid
|
|
@@ -84,30 +85,30 @@ dependencies:
|
|
|
84
85
|
name: bundler
|
|
85
86
|
requirement: !ruby/object:Gem::Requirement
|
|
86
87
|
requirements:
|
|
87
|
-
- - "
|
|
88
|
+
- - ">="
|
|
88
89
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: '
|
|
90
|
+
version: '0'
|
|
90
91
|
type: :development
|
|
91
92
|
prerelease: false
|
|
92
93
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
94
|
requirements:
|
|
94
|
-
- - "
|
|
95
|
+
- - ">="
|
|
95
96
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: '
|
|
97
|
+
version: '0'
|
|
97
98
|
- !ruby/object:Gem::Dependency
|
|
98
99
|
name: rake
|
|
99
100
|
requirement: !ruby/object:Gem::Requirement
|
|
100
101
|
requirements:
|
|
101
|
-
- - "
|
|
102
|
+
- - ">="
|
|
102
103
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: '
|
|
104
|
+
version: '0'
|
|
104
105
|
type: :development
|
|
105
106
|
prerelease: false
|
|
106
107
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
108
|
requirements:
|
|
108
|
-
- - "
|
|
109
|
+
- - ">="
|
|
109
110
|
- !ruby/object:Gem::Version
|
|
110
|
-
version: '
|
|
111
|
+
version: '0'
|
|
111
112
|
- !ruby/object:Gem::Dependency
|
|
112
113
|
name: minitest
|
|
113
114
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -122,15 +123,33 @@ dependencies:
|
|
|
122
123
|
- - "~>"
|
|
123
124
|
- !ruby/object:Gem::Version
|
|
124
125
|
version: '5.0'
|
|
126
|
+
- !ruby/object:Gem::Dependency
|
|
127
|
+
name: standard
|
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
|
129
|
+
requirements:
|
|
130
|
+
- - "~>"
|
|
131
|
+
- !ruby/object:Gem::Version
|
|
132
|
+
version: 1.3.0
|
|
133
|
+
type: :development
|
|
134
|
+
prerelease: false
|
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
136
|
+
requirements:
|
|
137
|
+
- - "~>"
|
|
138
|
+
- !ruby/object:Gem::Version
|
|
139
|
+
version: 1.3.0
|
|
125
140
|
description: ULID for rails
|
|
126
141
|
email:
|
|
127
142
|
- kazunori.kajihiro@gmail.com
|
|
143
|
+
- ruby-core@zendesk.com
|
|
128
144
|
executables: []
|
|
129
145
|
extensions: []
|
|
130
146
|
extra_rdoc_files: []
|
|
131
147
|
files:
|
|
148
|
+
- ".env"
|
|
149
|
+
- ".github/workflows/lint.yml"
|
|
150
|
+
- ".github/workflows/test.yml"
|
|
132
151
|
- ".gitignore"
|
|
133
|
-
- ".
|
|
152
|
+
- ".standard.yml"
|
|
134
153
|
- CHANGELOG.md
|
|
135
154
|
- Gemfile
|
|
136
155
|
- LICENSE.txt
|
|
@@ -139,21 +158,29 @@ files:
|
|
|
139
158
|
- bin/console
|
|
140
159
|
- bin/run_tests
|
|
141
160
|
- bin/setup
|
|
142
|
-
- bin/wait-for-it.sh
|
|
143
161
|
- docker-compose.yml
|
|
162
|
+
- gemfiles/5.0.gemfile
|
|
163
|
+
- gemfiles/5.1.gemfile
|
|
144
164
|
- gemfiles/5.2.gemfile
|
|
145
165
|
- gemfiles/6.0.gemfile
|
|
166
|
+
- gemfiles/6.1.gemfile
|
|
146
167
|
- lib/ulid/rails.rb
|
|
168
|
+
- lib/ulid/rails/errors.rb
|
|
147
169
|
- lib/ulid/rails/formatter.rb
|
|
148
170
|
- lib/ulid/rails/patch.rb
|
|
149
171
|
- lib/ulid/rails/type.rb
|
|
172
|
+
- lib/ulid/rails/validator.rb
|
|
150
173
|
- lib/ulid/rails/version.rb
|
|
151
174
|
- ulid-rails.gemspec
|
|
152
|
-
homepage:
|
|
175
|
+
homepage: https://github.com/k2nr/ulid-rails/
|
|
153
176
|
licenses:
|
|
154
177
|
- MIT
|
|
155
|
-
metadata:
|
|
156
|
-
|
|
178
|
+
metadata:
|
|
179
|
+
changelog_uri: https://github.com/k2nr/ulid-rails/blob/master/CHANGELOG.md
|
|
180
|
+
source_code_uri: https://github.com/k2nr/ulid-rails/
|
|
181
|
+
bug_tracker_uri: https://github.com/k2nr/ulid-rails/issues
|
|
182
|
+
rubygems_mfa_required: 'true'
|
|
183
|
+
post_install_message:
|
|
157
184
|
rdoc_options: []
|
|
158
185
|
require_paths:
|
|
159
186
|
- lib
|
|
@@ -161,16 +188,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
161
188
|
requirements:
|
|
162
189
|
- - ">="
|
|
163
190
|
- !ruby/object:Gem::Version
|
|
164
|
-
version:
|
|
191
|
+
version: 2.5.0
|
|
165
192
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
166
193
|
requirements:
|
|
167
194
|
- - ">="
|
|
168
195
|
- !ruby/object:Gem::Version
|
|
169
196
|
version: '0'
|
|
170
197
|
requirements: []
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
signing_key:
|
|
198
|
+
rubygems_version: 3.2.29
|
|
199
|
+
signing_key:
|
|
174
200
|
specification_version: 4
|
|
175
201
|
summary: ULID for rails
|
|
176
202
|
test_files: []
|
data/.travis.yml
DELETED
data/bin/wait-for-it.sh
DELETED
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Use this script to test if a given TCP host/port are available
|
|
3
|
-
|
|
4
|
-
WAITFORIT_cmdname=${0##*/}
|
|
5
|
-
|
|
6
|
-
echoerr() { if [[ $WAITFORIT_QUIET -ne 1 ]]; then echo "$@" 1>&2; fi }
|
|
7
|
-
|
|
8
|
-
usage()
|
|
9
|
-
{
|
|
10
|
-
cat << USAGE >&2
|
|
11
|
-
Usage:
|
|
12
|
-
$WAITFORIT_cmdname host:port [-s] [-t timeout] [-- command args]
|
|
13
|
-
-h HOST | --host=HOST Host or IP under test
|
|
14
|
-
-p PORT | --port=PORT TCP port under test
|
|
15
|
-
Alternatively, you specify the host and port as host:port
|
|
16
|
-
-s | --strict Only execute subcommand if the test succeeds
|
|
17
|
-
-q | --quiet Don't output any status messages
|
|
18
|
-
-t TIMEOUT | --timeout=TIMEOUT
|
|
19
|
-
Timeout in seconds, zero for no timeout
|
|
20
|
-
-- COMMAND ARGS Execute command with args after the test finishes
|
|
21
|
-
USAGE
|
|
22
|
-
exit 1
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
wait_for()
|
|
26
|
-
{
|
|
27
|
-
if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then
|
|
28
|
-
echoerr "$WAITFORIT_cmdname: waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT"
|
|
29
|
-
else
|
|
30
|
-
echoerr "$WAITFORIT_cmdname: waiting for $WAITFORIT_HOST:$WAITFORIT_PORT without a timeout"
|
|
31
|
-
fi
|
|
32
|
-
WAITFORIT_start_ts=$(date +%s)
|
|
33
|
-
while :
|
|
34
|
-
do
|
|
35
|
-
if [[ $WAITFORIT_ISBUSY -eq 1 ]]; then
|
|
36
|
-
nc -z $WAITFORIT_HOST $WAITFORIT_PORT
|
|
37
|
-
WAITFORIT_result=$?
|
|
38
|
-
else
|
|
39
|
-
(echo > /dev/tcp/$WAITFORIT_HOST/$WAITFORIT_PORT) >/dev/null 2>&1
|
|
40
|
-
WAITFORIT_result=$?
|
|
41
|
-
fi
|
|
42
|
-
if [[ $WAITFORIT_result -eq 0 ]]; then
|
|
43
|
-
WAITFORIT_end_ts=$(date +%s)
|
|
44
|
-
echoerr "$WAITFORIT_cmdname: $WAITFORIT_HOST:$WAITFORIT_PORT is available after $((WAITFORIT_end_ts - WAITFORIT_start_ts)) seconds"
|
|
45
|
-
break
|
|
46
|
-
fi
|
|
47
|
-
sleep 1
|
|
48
|
-
done
|
|
49
|
-
return $WAITFORIT_result
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
wait_for_wrapper()
|
|
53
|
-
{
|
|
54
|
-
# In order to support SIGINT during timeout: http://unix.stackexchange.com/a/57692
|
|
55
|
-
if [[ $WAITFORIT_QUIET -eq 1 ]]; then
|
|
56
|
-
timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --quiet --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT &
|
|
57
|
-
else
|
|
58
|
-
timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT &
|
|
59
|
-
fi
|
|
60
|
-
WAITFORIT_PID=$!
|
|
61
|
-
trap "kill -INT -$WAITFORIT_PID" INT
|
|
62
|
-
wait $WAITFORIT_PID
|
|
63
|
-
WAITFORIT_RESULT=$?
|
|
64
|
-
if [[ $WAITFORIT_RESULT -ne 0 ]]; then
|
|
65
|
-
echoerr "$WAITFORIT_cmdname: timeout occurred after waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT"
|
|
66
|
-
fi
|
|
67
|
-
return $WAITFORIT_RESULT
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
# process arguments
|
|
71
|
-
while [[ $# -gt 0 ]]
|
|
72
|
-
do
|
|
73
|
-
case "$1" in
|
|
74
|
-
*:* )
|
|
75
|
-
WAITFORIT_hostport=(${1//:/ })
|
|
76
|
-
WAITFORIT_HOST=${WAITFORIT_hostport[0]}
|
|
77
|
-
WAITFORIT_PORT=${WAITFORIT_hostport[1]}
|
|
78
|
-
shift 1
|
|
79
|
-
;;
|
|
80
|
-
--child)
|
|
81
|
-
WAITFORIT_CHILD=1
|
|
82
|
-
shift 1
|
|
83
|
-
;;
|
|
84
|
-
-q | --quiet)
|
|
85
|
-
WAITFORIT_QUIET=1
|
|
86
|
-
shift 1
|
|
87
|
-
;;
|
|
88
|
-
-s | --strict)
|
|
89
|
-
WAITFORIT_STRICT=1
|
|
90
|
-
shift 1
|
|
91
|
-
;;
|
|
92
|
-
-h)
|
|
93
|
-
WAITFORIT_HOST="$2"
|
|
94
|
-
if [[ $WAITFORIT_HOST == "" ]]; then break; fi
|
|
95
|
-
shift 2
|
|
96
|
-
;;
|
|
97
|
-
--host=*)
|
|
98
|
-
WAITFORIT_HOST="${1#*=}"
|
|
99
|
-
shift 1
|
|
100
|
-
;;
|
|
101
|
-
-p)
|
|
102
|
-
WAITFORIT_PORT="$2"
|
|
103
|
-
if [[ $WAITFORIT_PORT == "" ]]; then break; fi
|
|
104
|
-
shift 2
|
|
105
|
-
;;
|
|
106
|
-
--port=*)
|
|
107
|
-
WAITFORIT_PORT="${1#*=}"
|
|
108
|
-
shift 1
|
|
109
|
-
;;
|
|
110
|
-
-t)
|
|
111
|
-
WAITFORIT_TIMEOUT="$2"
|
|
112
|
-
if [[ $WAITFORIT_TIMEOUT == "" ]]; then break; fi
|
|
113
|
-
shift 2
|
|
114
|
-
;;
|
|
115
|
-
--timeout=*)
|
|
116
|
-
WAITFORIT_TIMEOUT="${1#*=}"
|
|
117
|
-
shift 1
|
|
118
|
-
;;
|
|
119
|
-
--)
|
|
120
|
-
shift
|
|
121
|
-
WAITFORIT_CLI=("$@")
|
|
122
|
-
break
|
|
123
|
-
;;
|
|
124
|
-
--help)
|
|
125
|
-
usage
|
|
126
|
-
;;
|
|
127
|
-
*)
|
|
128
|
-
echoerr "Unknown argument: $1"
|
|
129
|
-
usage
|
|
130
|
-
;;
|
|
131
|
-
esac
|
|
132
|
-
done
|
|
133
|
-
|
|
134
|
-
if [[ "$WAITFORIT_HOST" == "" || "$WAITFORIT_PORT" == "" ]]; then
|
|
135
|
-
echoerr "Error: you need to provide a host and port to test."
|
|
136
|
-
usage
|
|
137
|
-
fi
|
|
138
|
-
|
|
139
|
-
WAITFORIT_TIMEOUT=${WAITFORIT_TIMEOUT:-15}
|
|
140
|
-
WAITFORIT_STRICT=${WAITFORIT_STRICT:-0}
|
|
141
|
-
WAITFORIT_CHILD=${WAITFORIT_CHILD:-0}
|
|
142
|
-
WAITFORIT_QUIET=${WAITFORIT_QUIET:-0}
|
|
143
|
-
|
|
144
|
-
# check to see if timeout is from busybox?
|
|
145
|
-
WAITFORIT_TIMEOUT_PATH=$(type -p timeout)
|
|
146
|
-
WAITFORIT_TIMEOUT_PATH=$(realpath $WAITFORIT_TIMEOUT_PATH 2>/dev/null || readlink -f $WAITFORIT_TIMEOUT_PATH)
|
|
147
|
-
if [[ $WAITFORIT_TIMEOUT_PATH =~ "busybox" ]]; then
|
|
148
|
-
WAITFORIT_ISBUSY=1
|
|
149
|
-
WAITFORIT_BUSYTIMEFLAG="-t"
|
|
150
|
-
|
|
151
|
-
else
|
|
152
|
-
WAITFORIT_ISBUSY=0
|
|
153
|
-
WAITFORIT_BUSYTIMEFLAG=""
|
|
154
|
-
fi
|
|
155
|
-
|
|
156
|
-
if [[ $WAITFORIT_CHILD -gt 0 ]]; then
|
|
157
|
-
wait_for
|
|
158
|
-
WAITFORIT_RESULT=$?
|
|
159
|
-
exit $WAITFORIT_RESULT
|
|
160
|
-
else
|
|
161
|
-
if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then
|
|
162
|
-
wait_for_wrapper
|
|
163
|
-
WAITFORIT_RESULT=$?
|
|
164
|
-
else
|
|
165
|
-
wait_for
|
|
166
|
-
WAITFORIT_RESULT=$?
|
|
167
|
-
fi
|
|
168
|
-
fi
|
|
169
|
-
|
|
170
|
-
if [[ $WAITFORIT_CLI != "" ]]; then
|
|
171
|
-
if [[ $WAITFORIT_RESULT -ne 0 && $WAITFORIT_STRICT -eq 1 ]]; then
|
|
172
|
-
echoerr "$WAITFORIT_cmdname: strict mode, refusing to execute subprocess"
|
|
173
|
-
exit $WAITFORIT_RESULT
|
|
174
|
-
fi
|
|
175
|
-
exec "${WAITFORIT_CLI[@]}"
|
|
176
|
-
else
|
|
177
|
-
exit $WAITFORIT_RESULT
|
|
178
|
-
fi
|