hashid-rails 1.2.2 → 1.3.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/.github/workflows/ruby.yml +35 -0
- data/CHANGELOG.md +3 -0
- data/README.md +23 -3
- data/lib/hashid/rails.rb +21 -4
- data/lib/hashid/rails/configuration.rb +4 -2
- data/lib/hashid/rails/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff1db9b357cb0791da90ba58f86c3193d8f02fa9585099c18a90edb274bb4dbe
|
4
|
+
data.tar.gz: 11b31881df97678fda33e38eb42153b245b9f0672e823f3cae57219586a178b9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9fedf05af138f2efbeb4e1caedafc0ab844946cba287e085bd4446f49a218f4f44926602b36d26a5d06b2792d49f7b0e37121230c561d6b13ad351fa8e3e56f0
|
7
|
+
data.tar.gz: db9d9f9740bca29e8b0bf33ac2d1598a98a34516368a7d503bf10bfe71f8cbc147819934675eb1dda46bfddf32acff25705a0133f4ddc85a2f424e4842e41426
|
@@ -0,0 +1,35 @@
|
|
1
|
+
name: build
|
2
|
+
|
3
|
+
on: [push, pull_request]
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
build:
|
7
|
+
runs-on: ubuntu-latest
|
8
|
+
|
9
|
+
steps:
|
10
|
+
- uses: actions/checkout@v1
|
11
|
+
|
12
|
+
- name: Install Ruby (2.6)
|
13
|
+
uses: actions/setup-ruby@v1
|
14
|
+
with:
|
15
|
+
ruby-version: 2.6.x
|
16
|
+
|
17
|
+
- name: Install SQLite
|
18
|
+
run: sudo apt install -y libsqlite3-dev
|
19
|
+
|
20
|
+
- name: Setup Code Climate test-reporter
|
21
|
+
run: |
|
22
|
+
curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
23
|
+
chmod +x ./cc-test-reporter
|
24
|
+
./cc-test-reporter before-build
|
25
|
+
|
26
|
+
- name: Build and test with RSpec
|
27
|
+
run: |
|
28
|
+
gem install bundler
|
29
|
+
bundle install --jobs 4 --retry 3
|
30
|
+
bundle exec rspec
|
31
|
+
|
32
|
+
- name: Publish code coverage
|
33
|
+
run: |
|
34
|
+
export GIT_BRANCH="${GITHUB_REF/refs\/heads\//}"
|
35
|
+
./cc-test-reporter after-build -r ${{secrets.CC_TEST_REPORTER_ID}}
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Hashid Rails
|
2
2
|
[](https://badge.fury.io/rb/hashid-rails)
|
3
|
-
|
3
|
+

|
4
4
|
[](https://codeclimate.com/github/jcypret/hashid-rails)
|
5
5
|
[](https://codeclimate.com/github/jcypret/hashid-rails/coverage)
|
6
6
|
|
@@ -54,7 +54,7 @@ model.hashid
|
|
54
54
|
#=> "yLA6m0oM"
|
55
55
|
```
|
56
56
|
|
57
|
-
Additionally, the `to_param` method is
|
57
|
+
Additionally, the `to_param` method is overridden to use hashid instead of id.
|
58
58
|
This means methods that take advantage of implicit ID will automatically work
|
59
59
|
with hashids.
|
60
60
|
|
@@ -94,8 +94,9 @@ default options.
|
|
94
94
|
|
95
95
|
```ruby
|
96
96
|
Hashid::Rails.configure do |config|
|
97
|
-
# The salt to use for generating hashid. Prepended with table name.
|
97
|
+
# The salt to use for generating hashid. Prepended with pepper (table name).
|
98
98
|
config.salt = ""
|
99
|
+
config.pepper = table_name
|
99
100
|
|
100
101
|
# The minimum length of generated hashids
|
101
102
|
config.min_hash_length = 6
|
@@ -113,6 +114,22 @@ Hashid::Rails.configure do |config|
|
|
113
114
|
end
|
114
115
|
```
|
115
116
|
|
117
|
+
### Model-Level Config
|
118
|
+
|
119
|
+
You can also customize the hashid configuration at the model level.
|
120
|
+
`hashid_config` supports all the same options as the `Hashid::Rails.configure`
|
121
|
+
block and allows for each model to have a different config. This can be useful
|
122
|
+
for setting a custom salt/pepper. For instance, the pepper defaults to the table
|
123
|
+
name, so if you rename the table, you can keep the same hashids by setting the
|
124
|
+
pepper to the old table name.
|
125
|
+
|
126
|
+
```ruby
|
127
|
+
class Model < ActiveRecord::Base
|
128
|
+
include Hashid::Rails
|
129
|
+
hashid_config pepper: "old_table_name"
|
130
|
+
end
|
131
|
+
```
|
132
|
+
|
116
133
|
## Upgrading from Pre-1.0
|
117
134
|
|
118
135
|
The 1.0 release of this gem introduced hashid signing to prevent
|
@@ -147,3 +164,6 @@ and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
|
147
164
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
148
165
|
4. Push to the branch (`git push origin my-new-feature`)
|
149
166
|
5. Create a new Pull Request
|
167
|
+
|
168
|
+
> NOTE: If it's a significant feature or change, consider creating an Issue for
|
169
|
+
> discussion before opening a PR.
|
data/lib/hashid/rails.rb
CHANGED
@@ -36,6 +36,23 @@ module Hashid
|
|
36
36
|
alias to_param hashid
|
37
37
|
|
38
38
|
module ClassMethods
|
39
|
+
def hashid_config(options = {})
|
40
|
+
config = Hashid::Rails.configuration.dup
|
41
|
+
config.pepper = table_name
|
42
|
+
options.each do |attr, value|
|
43
|
+
config.public_send("#{attr}=", value)
|
44
|
+
end
|
45
|
+
@hashid_configuration = config
|
46
|
+
end
|
47
|
+
|
48
|
+
def hashid_configuration
|
49
|
+
@hashid_configuration || hashid_config
|
50
|
+
end
|
51
|
+
|
52
|
+
def reset_hashid_config
|
53
|
+
@hashid_configuration = nil
|
54
|
+
end
|
55
|
+
|
39
56
|
def relation
|
40
57
|
super.tap { |r| r.extend ClassMethods }
|
41
58
|
end
|
@@ -71,7 +88,7 @@ module Hashid
|
|
71
88
|
uniq_ids = ids.flatten.compact.uniq
|
72
89
|
uniq_ids = uniq_ids.first unless expects_array || uniq_ids.size > 1
|
73
90
|
|
74
|
-
if
|
91
|
+
if hashid_configuration.override_find
|
75
92
|
super(decode_id(uniq_ids, fallback: true))
|
76
93
|
else
|
77
94
|
super
|
@@ -89,11 +106,11 @@ module Hashid
|
|
89
106
|
private
|
90
107
|
|
91
108
|
def hashids
|
92
|
-
Hashids.new(*
|
109
|
+
Hashids.new(*hashid_configuration.to_args)
|
93
110
|
end
|
94
111
|
|
95
112
|
def hashid_encode(id)
|
96
|
-
if
|
113
|
+
if hashid_configuration.sign_hashids
|
97
114
|
hashids.encode(HASHID_TOKEN, id)
|
98
115
|
else
|
99
116
|
hashids.encode(id)
|
@@ -104,7 +121,7 @@ module Hashid
|
|
104
121
|
fallback_value = fallback ? id : nil
|
105
122
|
decoded_hashid = hashids.decode(id.to_s)
|
106
123
|
|
107
|
-
if
|
124
|
+
if hashid_configuration.sign_hashids
|
108
125
|
valid_hashid?(decoded_hashid) ? decoded_hashid.last : fallback_value
|
109
126
|
else
|
110
127
|
decoded_hashid.first || fallback_value
|
@@ -4,6 +4,7 @@ module Hashid
|
|
4
4
|
module Rails
|
5
5
|
class Configuration
|
6
6
|
attr_accessor :salt,
|
7
|
+
:pepper,
|
7
8
|
:min_hash_length,
|
8
9
|
:alphabet,
|
9
10
|
:override_find,
|
@@ -11,6 +12,7 @@ module Hashid
|
|
11
12
|
|
12
13
|
def initialize
|
13
14
|
@salt = ""
|
15
|
+
@pepper = ""
|
14
16
|
@min_hash_length = 6
|
15
17
|
@alphabet = "abcdefghijklmnopqrstuvwxyz" \
|
16
18
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZ" \
|
@@ -19,8 +21,8 @@ module Hashid
|
|
19
21
|
@sign_hashids = true
|
20
22
|
end
|
21
23
|
|
22
|
-
def
|
23
|
-
["#{
|
24
|
+
def to_args
|
25
|
+
["#{pepper}#{salt}", min_hash_length, alphabet]
|
24
26
|
end
|
25
27
|
end
|
26
28
|
end
|
data/lib/hashid/rails/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hashid-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Cypret
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-10-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -148,6 +148,7 @@ executables: []
|
|
148
148
|
extensions: []
|
149
149
|
extra_rdoc_files: []
|
150
150
|
files:
|
151
|
+
- ".github/workflows/ruby.yml"
|
151
152
|
- ".gitignore"
|
152
153
|
- ".rspec"
|
153
154
|
- ".rubocop.yml"
|
@@ -182,8 +183,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
182
183
|
- !ruby/object:Gem::Version
|
183
184
|
version: '0'
|
184
185
|
requirements: []
|
185
|
-
|
186
|
-
rubygems_version: 2.7.6
|
186
|
+
rubygems_version: 3.0.3
|
187
187
|
signing_key:
|
188
188
|
specification_version: 4
|
189
189
|
summary: Use Hashids in your Rails app models.
|