lockbox 0.6.3 → 0.6.4
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/CHANGELOG.md +5 -0
 - data/README.md +1 -3
 - data/lib/lockbox.rb +5 -1
 - data/lib/lockbox/model.rb +25 -3
 - data/lib/lockbox/version.rb +1 -1
 - metadata +3 -3
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 06b9f5c13a4cbdab22a46664beaf453bffa923a7bbebd918adecea008ecbc797
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 42c68577c2f4b8b4d1b068c01f314893a069b6fd361bd06d87a0de6531636c94
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 138df2feafe849bfc5ba80818e1b3695eb107e1f37b0d6654467383bc1788d5803bc00cb753bd7d3a8d3f30773ef4ed3d05f0945a896529d8b685df55b0e10ae
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 29ad6a9cb2248489caec35bdc56fdbcb6d1d251a0833ec1d597e1e955ac17ccc07626f59ce92683843658fc45311571f495d044f6219075abfcef8b2783dd6a8
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | 
         @@ -336,9 +336,7 @@ def license 
     | 
|
| 
       336 
336 
     | 
    
         
             
            end
         
     | 
| 
       337 
337 
     | 
    
         
             
            ```
         
     | 
| 
       338 
338 
     | 
    
         | 
| 
       339 
     | 
    
         
            -
            #### Migrating Existing Files 
     | 
| 
       340 
     | 
    
         
            -
             
     | 
| 
       341 
     | 
    
         
            -
            **Note:** This feature is experimental. Please try it in a non-production environment and [share](https://github.com/ankane/lockbox/issues/44) how it goes.
         
     | 
| 
      
 339 
     | 
    
         
            +
            #### Migrating Existing Files
         
     | 
| 
       342 
340 
     | 
    
         | 
| 
       343 
341 
     | 
    
         
             
            Lockbox makes it easy to encrypt existing files without downtime.
         
     | 
| 
       344 
342 
     | 
    
         | 
    
        data/lib/lockbox.rb
    CHANGED
    
    | 
         @@ -34,11 +34,15 @@ if defined?(ActiveSupport.on_load) 
     | 
|
| 
       34 
34 
     | 
    
         | 
| 
       35 
35 
     | 
    
         
             
                extend Lockbox::Model
         
     | 
| 
       36 
36 
     | 
    
         
             
                extend Lockbox::Model::Attached
         
     | 
| 
      
 37 
     | 
    
         
            +
                # alias_method is private in Ruby < 2.5
         
     | 
| 
      
 38 
     | 
    
         
            +
                singleton_class.send(:alias_method, :encrypts, :lockbox_encrypts) if ActiveRecord::VERSION::MAJOR < 7
         
     | 
| 
       37 
39 
     | 
    
         
             
                ActiveRecord::Calculations.prepend Lockbox::Calculations
         
     | 
| 
       38 
40 
     | 
    
         
             
              end
         
     | 
| 
       39 
41 
     | 
    
         | 
| 
       40 
42 
     | 
    
         
             
              ActiveSupport.on_load(:mongoid) do
         
     | 
| 
       41 
43 
     | 
    
         
             
                Mongoid::Document::ClassMethods.include(Lockbox::Model)
         
     | 
| 
      
 44 
     | 
    
         
            +
                # alias_method is private in Ruby < 2.5
         
     | 
| 
      
 45 
     | 
    
         
            +
                Mongoid::Document::ClassMethods.send(:alias_method, :encrypts, :lockbox_encrypts)
         
     | 
| 
       42 
46 
     | 
    
         
             
              end
         
     | 
| 
       43 
47 
     | 
    
         
             
            end
         
     | 
| 
       44 
48 
     | 
    
         | 
| 
         @@ -106,7 +110,7 @@ module Lockbox 
     | 
|
| 
       106 
110 
     | 
    
         | 
| 
       107 
111 
     | 
    
         
             
              def self.encrypts_action_text_body(**options)
         
     | 
| 
       108 
112 
     | 
    
         
             
                ActiveSupport.on_load(:action_text_rich_text) do
         
     | 
| 
       109 
     | 
    
         
            -
                  ActionText::RichText. 
     | 
| 
      
 113 
     | 
    
         
            +
                  ActionText::RichText.lockbox_encrypts :body, **options
         
     | 
| 
       110 
114 
     | 
    
         
             
                end
         
     | 
| 
       111 
115 
     | 
    
         
             
              end
         
     | 
| 
       112 
116 
     | 
    
         
             
            end
         
     | 
    
        data/lib/lockbox/model.rb
    CHANGED
    
    | 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Lockbox
         
     | 
| 
       2 
2 
     | 
    
         
             
              module Model
         
     | 
| 
       3 
     | 
    
         
            -
                def  
     | 
| 
      
 3 
     | 
    
         
            +
                def lockbox_encrypts(*attributes, **options)
         
     | 
| 
       4 
4 
     | 
    
         
             
                  # support objects
         
     | 
| 
       5 
5 
     | 
    
         
             
                  # case options[:type]
         
     | 
| 
       6 
6 
     | 
    
         
             
                  # when Date
         
     | 
| 
         @@ -149,16 +149,38 @@ module Lockbox 
     | 
|
| 
       149 
149 
     | 
    
         
             
                          # needed for in-place modifications
         
     | 
| 
       150 
150 
     | 
    
         
             
                          # assigned attributes are encrypted on assignment
         
     | 
| 
       151 
151 
     | 
    
         
             
                          # and then again here
         
     | 
| 
       152 
     | 
    
         
            -
                           
     | 
| 
      
 152 
     | 
    
         
            +
                          def lockbox_sync_attributes
         
     | 
| 
       153 
153 
     | 
    
         
             
                            self.class.lockbox_attributes.each do |_, lockbox_attribute|
         
     | 
| 
       154 
154 
     | 
    
         
             
                              attribute = lockbox_attribute[:attribute]
         
     | 
| 
       155 
155 
     | 
    
         | 
| 
       156 
     | 
    
         
            -
                              if attribute_changed_in_place?(attribute)
         
     | 
| 
      
 156 
     | 
    
         
            +
                              if attribute_changed_in_place?(attribute) || (send("#{attribute}_changed?") && !send("#{lockbox_attribute[:encrypted_attribute]}_changed?"))
         
     | 
| 
       157 
157 
     | 
    
         
             
                                send("#{attribute}=", send(attribute))
         
     | 
| 
       158 
158 
     | 
    
         
             
                              end
         
     | 
| 
       159 
159 
     | 
    
         
             
                            end
         
     | 
| 
       160 
160 
     | 
    
         
             
                          end
         
     | 
| 
       161 
161 
     | 
    
         | 
| 
      
 162 
     | 
    
         
            +
                          # safety check
         
     | 
| 
      
 163 
     | 
    
         
            +
                          [:_create_record, :_update_record].each do |method_name|
         
     | 
| 
      
 164 
     | 
    
         
            +
                            unless private_method_defined?(method_name) || method_defined?(method_name)
         
     | 
| 
      
 165 
     | 
    
         
            +
                              raise Lockbox::Error, "Expected #{method_name} to be defined. Please report an issue."
         
     | 
| 
      
 166 
     | 
    
         
            +
                            end
         
     | 
| 
      
 167 
     | 
    
         
            +
                          end
         
     | 
| 
      
 168 
     | 
    
         
            +
             
     | 
| 
      
 169 
     | 
    
         
            +
                          def _create_record(*)
         
     | 
| 
      
 170 
     | 
    
         
            +
                            lockbox_sync_attributes
         
     | 
| 
      
 171 
     | 
    
         
            +
                            super
         
     | 
| 
      
 172 
     | 
    
         
            +
                          end
         
     | 
| 
      
 173 
     | 
    
         
            +
             
     | 
| 
      
 174 
     | 
    
         
            +
                          def _update_record(*)
         
     | 
| 
      
 175 
     | 
    
         
            +
                            lockbox_sync_attributes
         
     | 
| 
      
 176 
     | 
    
         
            +
                            super
         
     | 
| 
      
 177 
     | 
    
         
            +
                          end
         
     | 
| 
      
 178 
     | 
    
         
            +
             
     | 
| 
      
 179 
     | 
    
         
            +
                          def [](attr_name)
         
     | 
| 
      
 180 
     | 
    
         
            +
                            send(attr_name) if self.class.lockbox_attributes.any? { |_, la| la[:attribute] == attr_name.to_s }
         
     | 
| 
      
 181 
     | 
    
         
            +
                            super
         
     | 
| 
      
 182 
     | 
    
         
            +
                          end
         
     | 
| 
      
 183 
     | 
    
         
            +
             
     | 
| 
       162 
184 
     | 
    
         
             
                          def update_columns(attributes)
         
     | 
| 
       163 
185 
     | 
    
         
             
                            return super unless attributes.is_a?(Hash)
         
     | 
| 
       164 
186 
     | 
    
         | 
    
        data/lib/lockbox/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: lockbox
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.6. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.6.4
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Andrew Kane
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2021- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2021-04-06 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies: []
         
     | 
| 
       13 
13 
     | 
    
         
             
            description:
         
     | 
| 
       14 
14 
     | 
    
         
             
            email: andrew@ankane.org
         
     | 
| 
         @@ -58,7 +58,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       58 
58 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       59 
59 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       60 
60 
     | 
    
         
             
            requirements: []
         
     | 
| 
       61 
     | 
    
         
            -
            rubygems_version: 3. 
     | 
| 
      
 61 
     | 
    
         
            +
            rubygems_version: 3.2.3
         
     | 
| 
       62 
62 
     | 
    
         
             
            signing_key:
         
     | 
| 
       63 
63 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       64 
64 
     | 
    
         
             
            summary: Modern encryption for Ruby and Rails
         
     |