pii_cipher 0.1.0 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f85ce2e6239e57922dc4d45337df8018d34ee1b292b1a069221e93398288b4b2
4
- data.tar.gz: 435efc9780eca17230aa06a348e2549759cb2b3aec65e4d598ef27488c2b6128
3
+ metadata.gz: 1dafee7ef8da28184899c8b2e5eb95ac0c593aade05297baff8a141c43440129
4
+ data.tar.gz: 15a4ab8b1d896f0dc4745bd338d3eb7a17dc213568af729158fa629d054a75ad
5
5
  SHA512:
6
- metadata.gz: a048a2bec3fa13cbb463b261790f92af92898d4e793200e12e0c257324f1a9d334b4f090b01e1a0c075a1ba25c4e8d159e71448a8db781b55899f3525942209a
7
- data.tar.gz: 285308387aee2a23193a0d0489f797752fc8b9e65f5db0e59d61bcecbf3106fc9b5b843b4ea1835ddf3923975ad397edc75366f1504b49ef1fb2347ae8938c76
6
+ metadata.gz: cb50341e3c09e83a3a1560770ca9f495ff0ea95658fbe5498b90e4c735060fa52b055488746e443ae6dc5f7fee27d0204f93d1f8f5fab994e4271901d0042da5
7
+ data.tar.gz: a3375e855c2e15bb708228be8f01504403944e4797aaed2fa3f755b8a57d478ee11d75a7dfcf3ad98eb698379623414f8b0711d3359e951a900e2b8ba75369f9
data/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.1.1] - 2026-06-29
4
+
5
+ - Fix precompiled-gem loading: `lib/pii_cipher.rb` now resolves the native binary
6
+ from its per-Ruby-ABI subdirectory (`lib/pii_cipher/<ver>/`), falling back to the
7
+ flat path for source builds. v0.1.0 precompiled gems failed to load with a
8
+ `LoadError` because no version-aware require existed.
9
+ - Widen precompiled coverage to every platform and stable Ruby version the rb-sys
10
+ toolchain supports (now including Ruby 3.4 and 4.0 and the linux-musl/Alpine
11
+ targets), so installing on the latest Ruby no longer falls back to a source build.
12
+
13
+ ## Pre-0.1.1 unreleased changes
14
+
3
15
  - Case-insensitive search by default (values are downcased before hashing); opt out with `case_sensitive: true`.
4
16
  - Configurable partial-search window via `gram_size:` (default 3).
5
17
  - Query rewriting now works on chained relations and scopes, not just direct `Model.where` calls.
data/Rakefile CHANGED
@@ -1,14 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "bundler/gem_tasks"
4
- require "rspec/core/rake_task"
5
-
6
- RSpec::Core::RakeTask.new(:spec)
7
-
8
- require "rubocop/rake_task"
9
-
10
- RuboCop::RakeTask.new
11
-
12
4
  require "rb_sys/extensiontask"
13
5
 
14
6
  task build: :compile
@@ -17,18 +9,23 @@ GEMSPEC = Gem::Specification.load("pii_cipher.gemspec")
17
9
 
18
10
  RbSys::ExtensionTask.new("pii_cipher", GEMSPEC) do |ext|
19
11
  ext.lib_dir = "lib/pii_cipher"
20
- ext.cross_compile = true
21
- ext.cross_platform = %w[
22
- x86_64-linux
23
- aarch64-linux
24
- x86_64-darwin
25
- arm64-darwin
26
- x64-mingw-ucrt
27
- ]
28
12
  ext.cross_compiling do |spec|
29
- # rb_sys is only needed to compile from source; pre-built gems don't need it
13
+ # rb_sys is only needed to compile from source; pre-built gems don't need it.
30
14
  spec.dependencies.reject! { |dep| dep.name == "rb_sys" }
31
15
  end
32
16
  end
33
17
 
34
- task default: %i[compile spec rubocop]
18
+ # The dev/test tasks below need gems that are absent inside the cross-compile
19
+ # build container (rb-sys-dock installs only the runtime deps). Guard them so
20
+ # the Rakefile still loads there and `rake native` / `rake compile` work.
21
+ begin
22
+ require "rspec/core/rake_task"
23
+ RSpec::Core::RakeTask.new(:spec)
24
+
25
+ require "rubocop/rake_task"
26
+ RuboCop::RakeTask.new
27
+
28
+ task default: %i[compile spec rubocop]
29
+ rescue LoadError
30
+ task default: :compile
31
+ end
@@ -1,4 +1,4 @@
1
- use magnus::{define_module, function, prelude::*, Error};
1
+ use magnus::{function, prelude::*, Error, Ruby};
2
2
  use hmac::{Hmac, Mac};
3
3
  use sha2::Sha256;
4
4
 
@@ -54,8 +54,8 @@ fn generate_blind_index(text: String, secret_key: String) -> String {
54
54
 
55
55
  // The Ruby initialization point
56
56
  #[magnus::init]
57
- fn init() -> Result<(), Error> {
58
- let module = define_module("PiiCipher")?;
57
+ fn init(ruby: &Ruby) -> Result<(), Error> {
58
+ let module = ruby.define_module("PiiCipher")?;
59
59
  module.define_singleton_method("generate_ngram_hashes", function!(generate_ngram_hashes, 3))?;
60
60
  module.define_singleton_method("generate_blind_index", function!(generate_blind_index, 2))?;
61
61
  Ok(())
@@ -49,11 +49,11 @@ module PiiCipher
49
49
  self.pii_cipher_configs = pii_cipher_configs.merge(new_configs)
50
50
 
51
51
  # Install callbacks and the query patch once per model.
52
- unless defined?(@_pii_cipher_configured) && @_pii_cipher_configured
53
- before_save :generate_pii_ciphers!
54
- PiiCipher.install_query_patch!
55
- @_pii_cipher_configured = true
56
- end
52
+ return if defined?(@_pii_cipher_configured) && @_pii_cipher_configured
53
+
54
+ before_save :generate_pii_ciphers!
55
+ PiiCipher.install_query_patch!
56
+ @_pii_cipher_configured = true
57
57
  end
58
58
  end
59
59
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PiiCipher
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  end
data/lib/pii_cipher.rb CHANGED
@@ -6,7 +6,16 @@ require_relative "pii_cipher/version"
6
6
  # 1. Load the compiled Rust extension. It defines:
7
7
  # PiiCipher.generate_ngram_hashes(text, secret, n) -> [hash, ...]
8
8
  # PiiCipher.generate_blind_index(text, secret) -> hash
9
- require_relative "pii_cipher/pii_cipher"
9
+ #
10
+ # Precompiled (native) gems ship the binary in a per-Ruby-ABI subdirectory
11
+ # (lib/pii_cipher/3.3/pii_cipher.bundle) so one gem can serve several Ruby
12
+ # versions. Source builds compile straight into lib/pii_cipher/pii_cipher.*.
13
+ # Try the version-specific path first, then fall back to the flat one.
14
+ begin
15
+ require_relative "pii_cipher/#{RUBY_VERSION[/\d+\.\d+/]}/pii_cipher"
16
+ rescue LoadError
17
+ require_relative "pii_cipher/pii_cipher"
18
+ end
10
19
 
11
20
  # 2. Load our Ruby logic
12
21
  require_relative "pii_cipher/active_record_ext"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pii_cipher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Selva Chezhian
@@ -11,21 +11,21 @@ cert_chain: []
11
11
  date: 2026-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rb_sys
14
+ name: activerecord
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.9.128
19
+ version: '7.1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 0.9.128
26
+ version: '7.1'
27
27
  - !ruby/object:Gem::Dependency
28
- name: activerecord
28
+ name: railties
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -39,19 +39,19 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '7.1'
41
41
  - !ruby/object:Gem::Dependency
42
- name: railties
42
+ name: rb_sys
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '7.1'
47
+ version: 0.9.128
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '7.1'
54
+ version: 0.9.128
55
55
  description: |
56
56
  PiiCipher lets you search encrypted PII columns in ActiveRecord without ever
57
57
  storing or querying plaintext. It generates HMAC-SHA256 blind indexes alongside