ff1 1.2.6 → 1.2.7

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: '08a90d97f68acff2dc2a91b37b171d0f9df02cf57d4c754cf9cafd0f4bc0ac99'
4
- data.tar.gz: a36f31971be3e026ed3b593958c70cbfced3e3075c25a905798bba08a93b709e
3
+ metadata.gz: 71afb6323a419b0916d942aebde5f19bfa5396dbf44ffa631eff6a942b686ca2
4
+ data.tar.gz: ff57e228e1e2a16ba28384102cdbc7a14fc46c4089d8b4aea2e6226739e15b50
5
5
  SHA512:
6
- metadata.gz: c091310e5b8cb9f79fa1067f1a597f9f6c8b0cb19379e72d9349287ec76644228aabb9f5b7de0c4f943e8aacee584c66070374d58e758c0d8fefe52acabb2e84
7
- data.tar.gz: c2483bc35f1d6bbb38cf79ab8b9813a1e2d0ef827655c19da1a77604fa1a2c4478d7af6cc79a1b479bc42a8b333f0a2ba101ffe0fb097d123691d52602a018d3
6
+ metadata.gz: a576582e6f503dd1b81baac07f4a095b70a3eddaa1547e352118e2f8814734e3d10071a758bb14d6a9c5ad1256f7cff2faa03d63f73479c8288ddf1c8dd3f839
7
+ data.tar.gz: 54d9e13bd33917747bab54644cc5f8ce6669c2a5f8f257125c45436baf1ca998671fe2f0c99ec8daf5ef6c7b8c3e7e4e242377b535d2995d5cfddd0433bce120
data/lib/ff1/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
 
3
3
  module FF1
4
4
  # Current version of the FF1 gem
5
- VERSION = '1.2.6'
5
+ VERSION = '1.2.7'
6
6
  end
@@ -16,25 +16,23 @@ module Ff1
16
16
  include Rails::Generators::Actions
17
17
  source_root File.expand_path('templates', __dir__)
18
18
 
19
- argument :models, type: :array, default: [], banner: 'model1 model2'
20
-
19
+ argument :models, type: :array, default: [], banner: "model1 model2"
20
+
21
21
  class_option :deleted_at_column, type: :string, default: 'deleted_at',
22
- desc: 'Name of the deleted_at timestamp column'
23
-
24
- class_option :ff1_deleted_column, type: :string, default: 'ff1_deleted',
25
- desc: 'Name of the FF1 deleted boolean column'
26
-
22
+ desc: 'Name of the deleted_at timestamp column'
23
+
24
+
27
25
  class_option :add_indexes, type: :boolean, default: true,
28
- desc: 'Add database indexes for performance'
26
+ desc: 'Add database indexes for performance'
29
27
 
30
28
  # Required for Rails::Generators::Migration
31
- def self.next_migration_number(_path)
32
- Time.now.strftime('%Y%m%d%H%M%S')
29
+ def self.next_migration_number(path)
30
+ Time.now.strftime("%Y%m%d%H%M%S")
33
31
  end
34
32
 
35
33
  def generate_migration
36
34
  if models.empty?
37
- say 'Generating FF1 configuration initializer...'
35
+ say "Generating FF1 configuration initializer..."
38
36
  generate_initializer
39
37
  else
40
38
  models.each do |model_name|
@@ -47,19 +45,19 @@ module Ff1
47
45
 
48
46
  def generate_initializer
49
47
  template 'initializer.rb', 'config/initializers/ff1.rb'
50
- say 'FF1 initializer created at config/initializers/ff1.rb', :green
51
- say ''
52
- say 'Next steps:', :blue
53
- say '1. Set your encryption key in the initializer'
54
- say '2. Run: rails generate ff1:install ModelName for each model you want to enable'
55
- say '3. Run: rails db:migrate'
48
+ say "FF1 initializer created at config/initializers/ff1.rb", :green
49
+ say ""
50
+ say "Next steps:", :blue
51
+ say "1. Set your encryption key in the initializer"
52
+ say "2. Run: rails generate ff1:install ModelName for each model you want to enable"
53
+ say "3. Run: rails db:migrate"
56
54
  end
57
55
 
58
56
  def generate_model_migration(model_name)
59
57
  model_class_name = model_name.camelize
60
- table_name = model_name.underscore.pluralize
61
- migration_name = "add_ff1_columns_to_#{table_name}"
62
- migration_class_name = "AddFf1ColumnsTo#{model_class_name.pluralize}"
58
+ @table_name = model_name.underscore.pluralize
59
+ migration_name = "add_ff1_columns_to_#{@table_name}"
60
+ @migration_class_name = "AddFf1ColumnsTo#{model_class_name.pluralize}"
63
61
 
64
62
  # Check if model exists
65
63
  begin
@@ -70,32 +68,24 @@ module Ff1
70
68
 
71
69
  # Generate migration file
72
70
  migration_template 'migration.rb.erb',
73
- "db/migrate/#{timestamp}_#{migration_name}.rb",
74
- migration_class_name: migration_class_name,
75
- table_name: table_name,
76
- deleted_at_column: deleted_at_column,
77
- ff1_deleted_column: ff1_deleted_column,
78
- add_indexes: add_indexes?
71
+ "db/migrate/#{timestamp}_#{migration_name}.rb"
79
72
 
80
73
  say "Migration created for #{model_class_name}", :green
81
74
  say "Run 'rails db:migrate' to apply the changes", :blue
82
75
  end
83
76
 
84
77
  def timestamp
85
- Time.now.strftime('%Y%m%d%H%M%S')
78
+ Time.now.strftime("%Y%m%d%H%M%S")
86
79
  end
87
80
 
88
81
  def deleted_at_column
89
82
  options['deleted_at_column']
90
83
  end
91
84
 
92
- def ff1_deleted_column
93
- options['ff1_deleted_column']
94
- end
95
85
 
96
86
  def add_indexes?
97
87
  options['add_indexes']
98
88
  end
99
89
  end
100
90
  end
101
- end
91
+ end
@@ -5,13 +5,13 @@ FF1::ActiveRecord.configure do |config|
5
5
  # Global encryption key - REQUIRED
6
6
  # Should be 16, 24, or 32 bytes for AES-128/192/256
7
7
  # Store securely using Rails credentials or environment variables
8
- #
8
+ #
9
9
  # Example using Rails credentials:
10
10
  # config.global_key = Rails.application.credentials.ff1_encryption_key
11
- #
11
+ #
12
12
  # Example using environment variable:
13
13
  # config.global_key = ENV['FF1_ENCRYPTION_KEY']&.b
14
- #
14
+ #
15
15
  # For development/testing only (DO NOT use in production):
16
16
  config.global_key = SecureRandom.bytes(32) if Rails.env.development? || Rails.env.test?
17
17
 
@@ -23,16 +23,20 @@ FF1::ActiveRecord.configure do |config|
23
23
  # Column names for soft delete functionality
24
24
  config.deleted_at_column = :deleted_at
25
25
  config.ff1_deleted_column = :ff1_deleted
26
+
27
+ # Hide soft-deleted records from default queries (default: true)
28
+ # Set to false to include soft-deleted records in queries by default
29
+ config.hide_deleted_by_default = true
26
30
  end
27
31
 
28
32
  # Example model integration:
29
33
  #
30
34
  # class User < ApplicationRecord
31
35
  # include FF1::ActiveRecord
32
- #
36
+ #
33
37
  # # Encrypt email and phone with reversible encryption
34
38
  # ff1_encrypt :email, :phone, mode: :reversible
35
- #
39
+ #
36
40
  # # Encrypt SSN with irreversible encryption
37
41
  # ff1_encrypt :ssn, mode: :irreversible
38
42
  # end
@@ -41,11 +45,11 @@ end
41
45
  # user = User.create(email: 'user@example.com', ssn: '123-45-6789')
42
46
  # puts user.email # Automatically decrypted for reversible columns
43
47
  # puts user.ssn # Shows "[ENCRYPTED]" for irreversible columns
44
- #
48
+ #
45
49
  # # GDPR compliant deletion
46
50
  # user.destroy # Soft deletes with irreversible encryption
47
- #
51
+ #
48
52
  # # Query scopes
49
53
  # User.ff1_active # Non-deleted users
50
54
  # User.ff1_deleted # Soft-deleted users
51
- # User.ff1_all # All users (active + deleted)
55
+ # User.ff1_all # All users (active + deleted)
@@ -1,15 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class <%= migration_class_name %> < ActiveRecord::Migration[<%= ActiveRecord::Migration.current_version %>]
3
+ class <%= @migration_class_name %> < ActiveRecord::Migration[<%= ActiveRecord::Migration.current_version %>]
4
4
  def change
5
- add_column :<%= table_name %>, :<%= deleted_at_column %>, :datetime, null: true
6
- add_column :<%= table_name %>, :<%= ff1_deleted_column %>, :boolean, null: false, default: false
5
+ add_column :<%= @table_name %>, :<%= deleted_at_column %>, :datetime, null: true
7
6
 
8
7
  <% if add_indexes? %>
9
- add_index :<%= table_name %>, :<%= deleted_at_column %>
10
- add_index :<%= table_name %>, :<%= ff1_deleted_column %>
11
- add_index :<%= table_name %>, [:<%= ff1_deleted_column %>, :<%= deleted_at_column %>],
12
- name: 'index_<%= table_name %>_on_ff1_deletion'
8
+ add_index :<%= @table_name %>, :<%= deleted_at_column %>
13
9
  <% end %>
14
10
  end
15
11
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ff1
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.6
4
+ version: 1.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ahmed Abdellatif