idy 1.1.0 → 1.2.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: 48f9d830da49d857d4e7a933837f63a82be37a0bf8b79bb254ce9894e929c778
4
- data.tar.gz: 7d564312480c2cd78a406669d90eb3e1b9a2f7a6a9d0675b131851c1aff1cfe0
3
+ metadata.gz: 5c1011342e7f8209b6c228fd8942f1d4e5b95032a2e30d541d0440c9edc9c9b8
4
+ data.tar.gz: a3033d0cc45ddde615174dc662e1c33f21e24a33739d1e4ae7b7cfa454a993d4
5
5
  SHA512:
6
- metadata.gz: f20232384684b4aed106783643f6561ce92bc657430f24f15a34f8f0c38fe6ab7b706cbe5238bfa6e85636494470c0d78ab7c0e8635809eaaaab80508997d10b
7
- data.tar.gz: 96ed2ff410876d03c33b74c6337df37e0a454d4a1602581384ce3d13ef0cb7a6ffc71ad4254f9498353e25c513bef612a5017fcf20905cce64fcf48f48cb7eb3
6
+ metadata.gz: e4972508e537e35f40bcc2126f738ffb31b1181e7d322d80375f1f7fce30dca31ca732130384017c22af25a7d1f74bcb0c344588adbaaffdd38ddd932910a1ea
7
+ data.tar.gz: b42199aa35fb78fb891e893ee3975964f1b02f84675ac0be0b7da6f9031732c8d1af5762fa8ab25d13b25070e9d22c1754da2e078285c42437465bc93e35e1dc
data/CHANGELOG.md CHANGED
@@ -1,33 +1,52 @@
1
+ ## v1.2.0
2
+
3
+ ### Fixes
4
+
5
+ - Allows namespaced class to be obfuscated. [#10](https://github.com/wbotelhos/idy/pull/10) by [vitobotta](https://github.com/vitobotta)
6
+
7
+ ### Updates
8
+
9
+ - Adds all previous version on the [Releases page](https://github.com/wbotelhos/idy/releases);
10
+ - Adds coverage via [Codecov](https://app.codecov.io/gh/wbotelhos/idy);
11
+ - Moves the CI to [Github Actions](https://github.com/wbotelhos/idy/actions);
12
+ - Removes spec files from the gem to keep the package smaller;
13
+
1
14
  ## v1.1.0
2
15
 
3
- - Updates
4
- - Does not restrict Rails version;
5
- - Does not restrict Hashids version;
6
- - Bump Ruby version to 2.6.4;
16
+ ### Updates
17
+
18
+ - Does not restrict Rails version;
19
+ - Does not restrict Hashids version;
20
+ - Bump Ruby version to 2.6.4;
7
21
 
8
22
  ## v1.0.0
9
23
 
10
- - News
11
- - Drops overrided `find` method to avoid find on a hash that looks like a number issue [#1](https://github.com/wbotelhos/idy/issues/1)
24
+ ### Break Changes
25
+
26
+ - Drops `find` override method to avoid finding on a hash that looks like a number issue [#1](https://github.com/wbotelhos/idy/issues/1)
12
27
 
13
28
  ## v0.1.3
14
29
 
15
- - features
16
- - Added `find` method to find directly via idy returning `nil` when record is not found;
17
- - Added `find!` method to find directly via idy raising error when record is not found.
30
+ ### Features
31
+
32
+ - Added `find` method to find directly via idy returning `nil` when the record is not found;
33
+ - Added `find!` method to find directly via idy raising an error when the record is not found.
34
+
35
+ ### Fixes
18
36
 
19
- - bug fixes
20
- - String that is integer like is not passed to original find method.
37
+ - String that is integer-like is not passed to the original find method.
21
38
 
22
39
  ## v0.1.2
23
40
 
24
- - bug fixes
25
- - Set options on a prefixed var to avoid conflict.
41
+ ### Fixes
42
+
43
+ - Set options on a prefixed var to avoid conflict.
26
44
 
27
45
  ## v0.1.1
28
46
 
29
- - bug fixes
30
- - v0.1.0 had problem on `push`.
47
+ ### Fixes
48
+
49
+ - v0.1.0 had a problem with `push`.
31
50
 
32
51
  ## v0.1.0
33
52
 
data/README.md CHANGED
@@ -1,7 +1,10 @@
1
1
  # Idy
2
2
 
3
- [![Build Status](https://travis-ci.org/wbotelhos/idy.svg)](https://travis-ci.org/wbotelhos/idy)
3
+ [![CI](https://github.com/wbotelhos/idy/workflows/CI/badge.svg)](https://github.com/wbotelhos/idy/actions)
4
4
  [![Gem Version](https://badge.fury.io/rb/idy.svg)](https://badge.fury.io/rb/idy)
5
+ [![Maintainability](https://api.codeclimate.com/v1/badges/f312587b4f126bb13e85/maintainability)](https://codeclimate.com/github/wbotelhos/idy/maintainability)
6
+ [![Coverage](https://codecov.io/gh/wbotelhos/idy/branch/main/graph/badge.svg)](https://codecov.io/gh/wbotelhos/idy)
7
+ [![Sponsor](https://img.shields.io/badge/sponsor-%3C3-green)](https://www.patreon.com/wbotelhos)
5
8
 
6
9
  An ID obfuscator for ActiveRecord.
7
10
 
@@ -144,13 +147,31 @@ Article.findy! 'missing'
144
147
  # ActiveRecord::RecordNotFound: Couldn't find Article with 'idy'="missing"
145
148
  ```
146
149
 
150
+ ## Functions
151
+
152
+ You can encode a number manually:
153
+
154
+ ```ruby
155
+ Model.idy_encode(idy)
156
+ ```
157
+
158
+ You can decode an idy in case you want to use the ActiveRecord methods with the original ID:
159
+
160
+ ```ruby
161
+ Model.idy_decode(idy)
162
+ ```
163
+
164
+ ## Testing
165
+ Check if your model responds to idy method:
166
+
167
+ ### RSpec
168
+ ```ruby
169
+ it { is_expected.to respond_to(:idy) }
170
+ ```
171
+
147
172
  ## Inspiration
148
173
 
149
- It was inpired and improved from:
174
+ It was inspired and improved from:
150
175
 
151
176
  - [obfuscate_id](https://github.com/namick/obfuscate_id)
152
177
  - [hashids_uri](https://github.com/danieldraper/hashids_uri)
153
-
154
- ## Love it!
155
-
156
- Via [PayPal](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=X8HEP2878NDEG&item_name=idy) or [Gratipay](https://liberapay.com/idy/donate). Thanks! (:
data/lib/idy/extension.rb CHANGED
@@ -46,7 +46,7 @@ module Idy
46
46
  def idy_default_salt
47
47
  alphabet = Array('a'..'z')
48
48
 
49
- indexes = name.downcase.split('').map do |char|
49
+ indexes = name.downcase.tr(':', '').split('').map do |char|
50
50
  alphabet.index(char) + 1
51
51
  end
52
52
 
data/lib/idy/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Idy
4
- VERSION = '1.1.0'
4
+ VERSION = '1.2.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: idy
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Washington Botelho
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-03 00:00:00.000000000 Z
11
+ date: 2022-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: codecov
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: database_cleaner
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -126,7 +140,10 @@ description: An ID obfuscator for ActiveRecord.
126
140
  email: wbotelhos@gmail.com
127
141
  executables: []
128
142
  extensions: []
129
- extra_rdoc_files: []
143
+ extra_rdoc_files:
144
+ - CHANGELOG.md
145
+ - LICENSE
146
+ - README.md
130
147
  files:
131
148
  - CHANGELOG.md
132
149
  - LICENSE
@@ -134,31 +151,11 @@ files:
134
151
  - lib/idy.rb
135
152
  - lib/idy/extension.rb
136
153
  - lib/idy/version.rb
137
- - spec/lib/idy/extension/findy_bump_spec.rb
138
- - spec/lib/idy/extension/findy_spec.rb
139
- - spec/lib/idy/extension/idy_decode_spec.rb
140
- - spec/lib/idy/extension/idy_default_salt_spec.rb
141
- - spec/lib/idy/extension/idy_encode_spec.rb
142
- - spec/lib/idy/extension/idy_spec.rb
143
- - spec/lib/idy/extension/options_spec.rb
144
- - spec/lib/idy/extension/salt_spec.rb
145
- - spec/lib/idy/extension/to_param_spec.rb
146
- - spec/rails_helper.rb
147
- - spec/support/common.rb
148
- - spec/support/database_cleaner.rb
149
- - spec/support/db/migrate/create_tables.rb
150
- - spec/support/migrate.rb
151
- - spec/support/models/abcdefghijklm.rb
152
- - spec/support/models/article.rb
153
- - spec/support/models/clean.rb
154
- - spec/support/models/comment.rb
155
- - spec/support/models/post.rb
156
- - spec/support/models/user.rb
157
154
  homepage: https://github.com/wbotelhos/idy
158
155
  licenses:
159
156
  - MIT
160
157
  metadata: {}
161
- post_install_message:
158
+ post_install_message:
162
159
  rdoc_options: []
163
160
  require_paths:
164
161
  - lib
@@ -173,28 +170,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
173
170
  - !ruby/object:Gem::Version
174
171
  version: '0'
175
172
  requirements: []
176
- rubygems_version: 3.0.6
177
- signing_key:
173
+ rubygems_version: 3.2.22
174
+ signing_key:
178
175
  specification_version: 4
179
176
  summary: An ID obfuscator for ActiveRecord.
180
- test_files:
181
- - spec/support/migrate.rb
182
- - spec/support/models/article.rb
183
- - spec/support/models/abcdefghijklm.rb
184
- - spec/support/models/clean.rb
185
- - spec/support/models/comment.rb
186
- - spec/support/models/post.rb
187
- - spec/support/models/user.rb
188
- - spec/support/common.rb
189
- - spec/support/db/migrate/create_tables.rb
190
- - spec/support/database_cleaner.rb
191
- - spec/lib/idy/extension/idy_spec.rb
192
- - spec/lib/idy/extension/to_param_spec.rb
193
- - spec/lib/idy/extension/salt_spec.rb
194
- - spec/lib/idy/extension/options_spec.rb
195
- - spec/lib/idy/extension/idy_encode_spec.rb
196
- - spec/lib/idy/extension/idy_decode_spec.rb
197
- - spec/lib/idy/extension/findy_spec.rb
198
- - spec/lib/idy/extension/findy_bump_spec.rb
199
- - spec/lib/idy/extension/idy_default_salt_spec.rb
200
- - spec/rails_helper.rb
177
+ test_files: []
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Article, '#findy!' do
6
- context 'when a hash is given' do
7
- context 'when record is found' do
8
- let!(:record) { described_class.create id: 1 }
9
- let!(:hash) { 'My' }
10
-
11
- it 'finds the record' do
12
- expect(described_class.findy!(hash)).to eq record
13
- end
14
- end
15
-
16
- context 'when record is not found' do
17
- let!(:hash) { 'My' }
18
-
19
- it 'raises' do
20
- message = %(Couldn't find User with 'idy'="My")
21
-
22
- expect { described_class.findy!(hash) }.to raise_error ActiveRecord::RecordNotFound, message
23
- end
24
- end
25
- end
26
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Article, '#findy' do
6
- context 'when a hash is given' do
7
- context 'when record is found' do
8
- let!(:record) { described_class.create id: 1 }
9
- let!(:hash) { 'My' }
10
-
11
- it 'finds the record' do
12
- expect(described_class.findy(hash)).to eq record
13
- end
14
- end
15
-
16
- context 'when record is not found' do
17
- let!(:hash) { 'My' }
18
-
19
- it 'returns nil' do
20
- expect(described_class.findy(hash)).to be_nil
21
- end
22
- end
23
- end
24
- end
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Article, '#idy_decode' do
6
- context 'with no given salt' do
7
- it 'undos the obfuscation of id with default class salt' do
8
- expect(described_class.idy_decode('My')).to eq 1
9
- end
10
- end
11
-
12
- context 'with empty salt' do
13
- let!(:salt) { '' }
14
-
15
- it 'undos the obfuscation of id with given salt' do
16
- expect(described_class.idy_decode('jR', salt: salt)).to eq 1
17
- end
18
- end
19
-
20
- context 'with salt' do
21
- context 'when is string' do
22
- let!(:salt) { 'salt' }
23
-
24
- it 'undos the obfuscation of id with given salt' do
25
- expect(described_class.idy_decode('XG', salt: salt)).to eq 1
26
- end
27
- end
28
-
29
- context 'when is number' do
30
- let!(:salt) { 1 }
31
-
32
- it 'undos the obfuscation of id with given salt as string' do
33
- expect(described_class.idy_decode('kL', salt: 1)).to eq 1
34
- end
35
- end
36
- end
37
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Abcdefghijklm, '#idy_default_salt' do
6
- context 'when class name has a big length' do
7
- it 'is bases on the first 10 class letter position index on alphabet' do
8
- expect(described_class.idy_default_salt).to eq '12345678910'
9
- end
10
- end
11
- end
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Article, '#idy_encode' do
6
- context 'with no given salt' do
7
- let!(:model) { described_class.new id: 1 }
8
-
9
- it 'obfuscates the id with default class salt' do
10
- expect(model.class.idy_encode(model.id)).to eq 'My'
11
- end
12
- end
13
-
14
- context 'with empty salt' do
15
- let!(:model) { described_class.new id: 1 }
16
- let!(:salt) { '' }
17
-
18
- it 'obfuscates the id with empty salt' do
19
- expect(model.class.idy_encode(model.id, salt: salt)).to eq 'jR'
20
- end
21
- end
22
-
23
- context 'with salt' do
24
- let!(:model) { described_class.new id: 1 }
25
-
26
- context 'when is string' do
27
- let!(:salt) { 'salt' }
28
-
29
- it 'obfuscates the id with given salt' do
30
- expect(model.class.idy_encode(model.id, salt: salt)).to eq 'XG'
31
- end
32
- end
33
-
34
- context 'when is number' do
35
- let!(:salt) { 1 }
36
-
37
- it 'obfuscates the id with given salt as string' do
38
- expect(model.class.idy_encode(model.id, salt: salt)).to eq 'kL'
39
- end
40
- end
41
- end
42
-
43
- context 'with nil id' do
44
- let!(:model) { described_class.new }
45
-
46
- it 'returns nil' do
47
- expect(model.class.idy_encode(model.id)).to be_nil
48
- end
49
- end
50
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Article, '.idy' do
6
- subject { described_class.new id: 1 }
7
-
8
- it 'returns the encoded id' do
9
- expect(subject.idy).to eq 'My'
10
- end
11
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Article, '.idy_options' do
6
- context 'when options is not given' do
7
- it 'returns a default options with a salt generated based on model name' do
8
- expect(described_class.idy_options).to eq(salt: article_default_salt)
9
- end
10
- end
11
-
12
- context 'when salt is given' do
13
- it 'returns a default options with a salt equal the given one' do
14
- expect(Comment.idy_options).to eq(salt: 'salt')
15
- end
16
- end
17
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Clean, ':salt' do
6
- describe '#salt' do
7
- before { allow(described_class).to receive(:idy_options).and_return(salt: :salty) }
8
-
9
- it 'fetchs the salt options' do
10
- expect(described_class.salt).to eq(:salty)
11
- end
12
- end
13
-
14
- describe '.salt' do
15
- before { allow(described_class).to receive(:salt).and_return :salt }
16
-
17
- it 'delegates to class method' do
18
- expect(described_class.new.salt).to eq :salt
19
- end
20
- end
21
- end
@@ -1,51 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Clean, '.to_param' do
6
- context 'when object does not acts as idy' do
7
- subject { described_class.new id: 1 }
8
-
9
- it 'behaves as default' do
10
- expect(subject.to_param).to eq '1'
11
- end
12
- end
13
-
14
- context 'when object acts as idy' do
15
- context 'with no given salt' do
16
- let!(:model_1) { Article.new id: 1 }
17
-
18
- it 'generates a hash' do
19
- expect(model_1.to_param).to eq 'My'
20
- end
21
-
22
- context 'with comparison' do
23
- let!(:model_2) { Post.new }
24
-
25
- context 'with other object with same id' do
26
- before { model_2.id = 1 }
27
-
28
- it 'generates different hash' do
29
- expect(model_1.to_param).not_to eq model_2.to_param
30
- end
31
- end
32
- end
33
-
34
- context 'when object is not persisted' do
35
- context 'when has no id' do
36
- subject { Article.new }
37
-
38
- specify { expect(subject.to_param).to be_nil }
39
- end
40
-
41
- context 'when has id' do
42
- subject { Article.new id: 1 }
43
-
44
- it 'generates a hash' do
45
- expect(model_1.to_param).to eq 'My'
46
- end
47
- end
48
- end
49
- end
50
- end
51
- end
data/spec/rails_helper.rb DELETED
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- ENV['RAILS_ENV'] ||= 'test'
4
-
5
- require 'active_record/railtie'
6
- require 'idy'
7
- require 'pry-byebug'
8
-
9
- ActiveRecord::Base.establish_connection adapter: :sqlite3, database: ':memory:'
10
-
11
- Dir[File.expand_path('support/**/*.rb', __dir__)].each { |file| require file }
12
-
13
- def article_default_salt
14
- '1182093125'
15
- end
16
-
17
- def clean_default_salt
18
- '3125114'
19
- end
20
-
21
- def comment_default_salt
22
- ''
23
- end
24
-
25
- def user_default_salt
26
- '1182093125'
27
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rspec/rails'
4
-
5
- RSpec.configure do |config|
6
- config.filter_run_when_matching :focus
7
-
8
- config.disable_monkey_patching!
9
-
10
- config.order = :random
11
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'database_cleaner'
4
-
5
- RSpec.configure do |config|
6
- config.before :suite do
7
- DatabaseCleaner.strategy = :transaction
8
-
9
- DatabaseCleaner.clean_with :transaction
10
- end
11
-
12
- config.before do
13
- DatabaseCleaner.start
14
- end
15
-
16
- config.around do |spec|
17
- DatabaseCleaner.cleaning do
18
- spec.run
19
- end
20
- end
21
- end
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class CreateTables < ActiveRecord::Migration[5.0]
4
- def change
5
- create_table :abcdefghijklms do |t|
6
- end
7
-
8
- create_table :articles do |t|
9
- t.string :title
10
- end
11
-
12
- create_table :cleans do |t|
13
- end
14
-
15
- create_table :comments do |t|
16
- t.string :body
17
-
18
- t.references :article, index: true, foreign_key: true
19
- end
20
-
21
- create_table :posts do |t|
22
- t.string :title
23
- end
24
-
25
- create_table :users do |t|
26
- t.string :name
27
- end
28
- end
29
- end
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'support/db/migrate/create_tables'
4
-
5
- CreateTables.new.change
@@ -1,4 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Abcdefghijklm < ActiveRecord::Base
4
- end
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Article < ::ActiveRecord::Base
4
- idy
5
-
6
- has_many :comments
7
- end
@@ -1,4 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Clean < ::ActiveRecord::Base
4
- end
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Comment < ::ActiveRecord::Base
4
- idy salt: 'salt'
5
-
6
- belongs_to :article
7
- end
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Post < ::ActiveRecord::Base
4
- idy
5
- end
@@ -1,4 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class User < ::ActiveRecord::Base
4
- end