ff1 1.2.6 → 1.2.8

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: dbd66784cc326ed2e53b409756fe1dcf64e7925c3053454dee46f13a48fe5ec5
4
+ data.tar.gz: 38a4f59abd2e32073f539b5a4f1c289655caf058adf3b49476389ff64d557e94
5
5
  SHA512:
6
- metadata.gz: c091310e5b8cb9f79fa1067f1a597f9f6c8b0cb19379e72d9349287ec76644228aabb9f5b7de0c4f943e8aacee584c66070374d58e758c0d8fefe52acabb2e84
7
- data.tar.gz: c2483bc35f1d6bbb38cf79ab8b9813a1e2d0ef827655c19da1a77604fa1a2c4478d7af6cc79a1b479bc42a8b333f0a2ba101ffe0fb097d123691d52602a018d3
6
+ metadata.gz: 24ee99f7b50375729a26e8b895c034f9d60f3595e18586d1029911eee866280f48085b1f83d4f05e53df90055925aea65698e4cac3a00de24383b37f81b3c4fd
7
+ data.tar.gz: af3e1aedf71412bc8b899f76d8172c1496bc09ad46e0b40d332047a3f0ddd8b3c7d9c361885d4ccbde3cb400967fa20440ae1a8de1fdab4e41f066ab12ef185e
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.8'
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,21 @@ 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_number = self.class.next_migration_number(nil)
60
+ migration_name = "add_ff1_columns_to_#{@table_name}"
61
+ @migration_file_name = "#{@migration_number}_#{migration_name}"
62
+ @migration_class_name = @migration_file_name.camelize
63
63
 
64
64
  # Check if model exists
65
65
  begin
@@ -70,32 +70,24 @@ module Ff1
70
70
 
71
71
  # Generate migration file
72
72
  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?
73
+ "db/migrate/#{@migration_file_name}.rb"
79
74
 
80
75
  say "Migration created for #{model_class_name}", :green
81
76
  say "Run 'rails db:migrate' to apply the changes", :blue
82
77
  end
83
78
 
84
79
  def timestamp
85
- Time.now.strftime('%Y%m%d%H%M%S')
80
+ Time.now.strftime("%Y%m%d%H%M%S")
86
81
  end
87
82
 
88
83
  def deleted_at_column
89
84
  options['deleted_at_column']
90
85
  end
91
86
 
92
- def ff1_deleted_column
93
- options['ff1_deleted_column']
94
- end
95
87
 
96
88
  def add_indexes?
97
89
  options['add_indexes']
98
90
  end
99
91
  end
100
92
  end
101
- end
93
+ 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.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ahmed Abdellatif