active_record_pretty_key 0.1.1
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 +7 -0
- data/VERSION +1 -0
- data/lib/active_record_pretty_key/concern.rb +23 -0
- data/lib/active_record_pretty_key/pretty_key_ticket.rb +43 -0
- data/lib/active_record_pretty_key/version.rb +7 -0
- data/lib/active_record_pretty_key.rb +13 -0
- data/lib/generators/active_record_pretty_key/install/install_generator.rb +24 -0
- data/lib/generators/active_record_pretty_key/install/templates/create_tickets.erb +11 -0
- metadata +109 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: fa0c741c251d8d3acde833ff8620ffbea369f74544d1feda3507684596d327de
|
4
|
+
data.tar.gz: 9be0117695b9d2268c7ba3e930a28983ea50fb19326ce5aabfc6e914bda3c8c5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4bd0c1ac8f56f770bd90e010467f3aae5e345f316554d657ef7086b7ff288825a5b9a2545c261c495bede196445b54f0566b5d8dd8d8e53ba17926f3bce167aa
|
7
|
+
data.tar.gz: 6c3e23c905e21f50d625dd22b84d26232f99222d473d79afc4f89e05db2ccc2f4830ccc8a6f1910fe4b5da5e00da733fc98c66664ce741c5a65341a2b38fa2b0
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.1
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ActiveRecordPrettyKey
|
4
|
+
module Concern
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
before_create :generate_pretty_key
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def generate_pretty_key
|
14
|
+
pk_attribute = self.class.primary_key
|
15
|
+
return if pk_attribute.nil? || self.class.attribute_types[pk_attribute].nil? || self.class.attribute_types[pk_attribute].type != :string
|
16
|
+
|
17
|
+
# Ensure PrettyKeyTicket is available
|
18
|
+
return unless defined?(ActiveRecordPrettyKey::PrettyKeyTicket)
|
19
|
+
|
20
|
+
self.assign_attributes(pk_attribute => ActiveRecordPrettyKey::PrettyKeyTicket.next_sqid) unless self.attributes[pk_attribute].present?
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ActiveRecordPrettyKey
|
4
|
+
class PrettyKeyTicket < ActiveRecord::Base
|
5
|
+
self.table_name = "pretty_key_tickets"
|
6
|
+
@sqids = Sqids.new(
|
7
|
+
min_length: 4,
|
8
|
+
alphabet: defined?(Rails) && Rails.application.respond_to?(:credentials) ?
|
9
|
+
(Rails.application.credentials.dig(:sqids, :alphabet) || Sqids::DEFAULT_ALPHABET) :
|
10
|
+
Sqids::DEFAULT_ALPHABET,
|
11
|
+
)
|
12
|
+
|
13
|
+
# Generate a new unique ID that works with PostgreSQL, MySQL, and SQLite
|
14
|
+
def self.next_id
|
15
|
+
transaction do
|
16
|
+
# Detect database type
|
17
|
+
adapter = connection.adapter_name.downcase
|
18
|
+
|
19
|
+
if [ "postgresql", "postgis" ].include?(adapter)
|
20
|
+
# PostgreSQL approach
|
21
|
+
result = connection.execute(
|
22
|
+
"INSERT INTO pretty_key_tickets (stub) VALUES ('a')
|
23
|
+
ON CONFLICT (stub) DO UPDATE SET id = currval('pretty_key_tickets_id_seq')
|
24
|
+
RETURNING id"
|
25
|
+
)
|
26
|
+
result[0]["id"]
|
27
|
+
elsif [ "mysql", "mysql2" ].include?(adapter)
|
28
|
+
# MySQL approach
|
29
|
+
connection.execute("REPLACE INTO pretty_key_tickets (stub) VALUES ('a');")
|
30
|
+
connection.execute("SELECT LAST_INSERT_ID()").first[0]
|
31
|
+
else
|
32
|
+
# SQLite approach (and fallback for others)
|
33
|
+
connection.execute("REPLACE INTO pretty_key_tickets (stub) VALUES ('a');")
|
34
|
+
last.id
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.next_sqid
|
40
|
+
@sqids.encode([ self.next_id ])
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "active_record"
|
4
|
+
require "active_support/concern"
|
5
|
+
require "sqids"
|
6
|
+
require_relative "active_record_pretty_key/pretty_key_ticket"
|
7
|
+
require_relative "active_record_pretty_key/concern"
|
8
|
+
# require_relative "active_record_pretty_key/version"
|
9
|
+
|
10
|
+
|
11
|
+
module ActiveRecordPrettyKey
|
12
|
+
class Error < StandardError; end
|
13
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails/generators"
|
4
|
+
|
5
|
+
module ActiveRecordPrettyKey
|
6
|
+
module Generators
|
7
|
+
class InstallGenerator < Rails::Generators::Base
|
8
|
+
source_root File.expand_path("templates", __dir__)
|
9
|
+
desc "Creates the tickets table migration for active_record_pretty_key"
|
10
|
+
|
11
|
+
def create_migration
|
12
|
+
template "create_tickets.erb", "db/migrate/#{Time.now.utc.strftime("%Y%m%d%H%M%S")}_create_pretty_key_tickets.rb"
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def migration_version
|
18
|
+
if ActiveRecord::VERSION::MAJOR >= 5
|
19
|
+
"[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class CreatePrettyKeyTickets < ActiveRecord::Migration<%= migration_version %>
|
2
|
+
def change
|
3
|
+
create_table :pretty_key_tickets, id: :bigint do |t|
|
4
|
+
t.string :stub, limit: 1, null: false
|
5
|
+
end
|
6
|
+
add_index :pretty_key_tickets, :stub, unique: true
|
7
|
+
|
8
|
+
# Seed initial value
|
9
|
+
execute "INSERT INTO pretty_key_tickets (stub) VALUES ('a')"
|
10
|
+
end
|
11
|
+
end
|
metadata
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: active_record_pretty_key
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Stuart Yamartino
|
8
|
+
- John Nagro
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activerecord
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 6.0.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 6.0.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activesupport
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 6.0.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 6.0.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: sqids
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.1'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.1'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: thor
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.0'
|
69
|
+
description: ActiveRecordPrettyKey provides functionality to generate and manage pretty,
|
70
|
+
human-readable keys for ActiveRecord models.
|
71
|
+
email:
|
72
|
+
- stu@stuyam.com
|
73
|
+
- john.nagro@gmail.com
|
74
|
+
executables: []
|
75
|
+
extensions: []
|
76
|
+
extra_rdoc_files: []
|
77
|
+
files:
|
78
|
+
- VERSION
|
79
|
+
- lib/active_record_pretty_key.rb
|
80
|
+
- lib/active_record_pretty_key/concern.rb
|
81
|
+
- lib/active_record_pretty_key/pretty_key_ticket.rb
|
82
|
+
- lib/active_record_pretty_key/version.rb
|
83
|
+
- lib/generators/active_record_pretty_key/install/install_generator.rb
|
84
|
+
- lib/generators/active_record_pretty_key/install/templates/create_tickets.erb
|
85
|
+
homepage: https://github.com/noreastergroup/active_record_pretty_key
|
86
|
+
licenses:
|
87
|
+
- MIT
|
88
|
+
metadata:
|
89
|
+
homepage_uri: https://github.com/noreastergroup/active_record_pretty_key
|
90
|
+
source_code_uri: https://github.com/noreastergroup/active_record_pretty_key
|
91
|
+
changelog_uri: https://github.com/noreastergroup/active_record_pretty_key/blob/main/CHANGELOG.md
|
92
|
+
rdoc_options: []
|
93
|
+
require_paths:
|
94
|
+
- lib
|
95
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: 2.7.0
|
100
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
requirements: []
|
106
|
+
rubygems_version: 3.6.7
|
107
|
+
specification_version: 4
|
108
|
+
summary: A gem for generating pretty keys in ActiveRecord models
|
109
|
+
test_files: []
|