protected_attributes_continued 1.4.0 → 1.5.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:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 70d4e141e5ed0d0cb72742bcd0508f91ecf6eb8c1d245179b2304d8d7a339342
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 89934e992683f95f7cf059c349360895041c4f8f7a9502c3e15032ef7e6e1be2
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: a80e1481d125eb604db6992002f5bfb8e679c4bc69daa05b8b58f54c807c29e0b1750b782377898d748dc0304e65ae6ee479b57219c341d8702637d56d4c9b1a
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 8f8e18e1468746c56ff4628af838666b0a367e64b52226146bec33404b5260c04a90776132797e06457fcda94ca5fb931638520e0fd26ac55e5b2badfa772b62
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -3,11 +3,9 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
            <a href='https://travis-ci.org/westonganger/protected_attributes_continued' target='_blank'><img height='21' style='border:0px;height:21px;' src='https://api.travis-ci.org/westonganger/protected_attributes_continued.svg?branch=master' border='0' alt='Build Status' /></a>
         
     | 
| 
       4 
4 
     | 
    
         
             
            <a href='https://rubygems.org/gems/protected_attributes_continued' target='_blank'><img height='21' style='border:0px;height:21px;' src='https://ruby-gem-downloads-badge.herokuapp.com/protected_attributes_continued?label=rubygems&type=total&total_label=downloads&color=brightgreen' border='0' alt='RubyGems Downloads' /></a>
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
            This is the community continued version of `protected_attributes 
     | 
| 
      
 6 
     | 
    
         
            +
            > This is the community continued version of `protected_attributes` for Rails 5+. I recommend you only use it to support legacy portions of your application that you do not want to upgrade. The Rails team dropped this feature and switched to `strong_parameters` because of security issues. However some applications simply cannot be upgraded or security like this is a non-issue. To continue supporting this feature going forward lets continue the work here.
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
            Protect attributes from mass-assignment in Active Record models.
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
            This plugin adds the class methods `attr_accessible` and `attr_protected` to your models to be able to declare white or black lists of attributes.
         
     | 
| 
      
 8 
     | 
    
         
            +
            Protect attributes from mass-assignment in Active Record models. This gem adds the class methods `attr_accessible` and `attr_protected` to declare white or black lists of attributes.
         
     | 
| 
       11 
9 
     | 
    
         | 
| 
       12 
10 
     | 
    
         | 
| 
       13 
11 
     | 
    
         
             
            ## Installation
         
     | 
| 
         @@ -98,7 +96,6 @@ config.active_record.mass_assignment_sanitizer = :strict 
     | 
|
| 
       98 
96 
     | 
    
         | 
| 
       99 
97 
     | 
    
         
             
            Any protected attributes violation raises `ActiveModel::MassAssignmentSecurity::Error` then.
         
     | 
| 
       100 
98 
     | 
    
         | 
| 
       101 
     | 
    
         
            -
             
     | 
| 
       102 
99 
     | 
    
         
             
            ## Contributing
         
     | 
| 
       103 
100 
     | 
    
         | 
| 
       104 
101 
     | 
    
         
             
            We use the `appraisal` gem for testing multiple versions of `Rails`. Please use the following steps to test using `appraisal`.
         
     | 
| 
         @@ -112,25 +109,24 @@ Created & Maintained by [Weston Ganger](https://westonganger.com) - [@westongang 
     | 
|
| 
       112 
109 
     | 
    
         | 
| 
       113 
110 
     | 
    
         
             
            Originally forked from the dead/unmaintained `protected_attributes` gem by the Rails team.
         
     | 
| 
       114 
111 
     | 
    
         | 
| 
       115 
     | 
    
         
            -
            ## A  
     | 
| 
      
 112 
     | 
    
         
            +
            ## A Simple and Similar strong_params Alternative
         
     | 
| 
       116 
113 
     | 
    
         | 
| 
       117 
     | 
    
         
            -
            While I do utilize this gem in some legacy projects I have adopted  
     | 
| 
      
 114 
     | 
    
         
            +
            While I do utilize this gem in some legacy projects. The latest approach I have adopted is similar to this gem but only utilizes Rails built-in `strong_params` which is a much more future proof way of doing things. The following is an example implementation.
         
     | 
| 
       118 
115 
     | 
    
         | 
| 
       119 
116 
     | 
    
         
             
            ```ruby
         
     | 
| 
      
 117 
     | 
    
         
            +
            ### Model
         
     | 
| 
       120 
118 
     | 
    
         
             
            class Post < ActiveRecord::Base
         
     | 
| 
       121 
     | 
    
         
            -
             
     | 
| 
       122 
119 
     | 
    
         
             
              def self.strong_params(params)
         
     | 
| 
       123 
120 
     | 
    
         
             
                params.permit(:post).permit(:name, :content, :published_at)
         
     | 
| 
       124 
121 
     | 
    
         
             
              end
         
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
       126 
122 
     | 
    
         
             
            end
         
     | 
| 
       127 
123 
     | 
    
         | 
| 
      
 124 
     | 
    
         
            +
            ### Controller
         
     | 
| 
       128 
125 
     | 
    
         
             
            class PostsController < ApplicationController
         
     | 
| 
       129 
     | 
    
         
            -
             
     | 
| 
       130 
126 
     | 
    
         
             
              def create
         
     | 
| 
       131 
     | 
    
         
            -
                @post = Post.new
         
     | 
| 
       132 
     | 
    
         
            -
             
     | 
| 
       133 
     | 
    
         
            -
                @post. 
     | 
| 
      
 127 
     | 
    
         
            +
                @post = Post.new(Post.strong_params(params))
         
     | 
| 
      
 128 
     | 
    
         
            +
                
         
     | 
| 
      
 129 
     | 
    
         
            +
                @post.save
         
     | 
| 
       134 
130 
     | 
    
         | 
| 
       135 
131 
     | 
    
         
             
                respond_with @post
         
     | 
| 
       136 
132 
     | 
    
         
             
              end
         
     | 
| 
         @@ -142,6 +138,5 @@ class PostsController < ApplicationController 
     | 
|
| 
       142 
138 
     | 
    
         | 
| 
       143 
139 
     | 
    
         
             
                respond_with @post
         
     | 
| 
       144 
140 
     | 
    
         
             
              end
         
     | 
| 
       145 
     | 
    
         
            -
             
     | 
| 
       146 
141 
     | 
    
         
             
            end
         
     | 
| 
       147 
142 
     | 
    
         
             
            ```
         
     | 
| 
         @@ -96,6 +96,25 @@ module ActiveRecord 
     | 
|
| 
       96 
96 
     | 
    
         
             
                  undef :build_record
         
     | 
| 
       97 
97 
     | 
    
         
             
                  undef :options_for_through_record if respond_to?(:options_for_through_record, false)
         
     | 
| 
       98 
98 
     | 
    
         | 
| 
      
 99 
     | 
    
         
            +
                  if ActiveRecord.version >= Gem::Version.new('5.2.3')
         
     | 
| 
      
 100 
     | 
    
         
            +
                    undef :build_through_record
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
                    def build_through_record(record)
         
     | 
| 
      
 103 
     | 
    
         
            +
                      @through_records[record.object_id] ||= begin
         
     | 
| 
      
 104 
     | 
    
         
            +
                        ensure_mutable
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
                        attributes = through_scope_attributes
         
     | 
| 
      
 107 
     | 
    
         
            +
                        attributes[source_reflection.name] = record
         
     | 
| 
      
 108 
     | 
    
         
            +
                        attributes[source_reflection.foreign_type] = options[:source_type] if options[:source_type]
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
                        # Pass in `without_protection: true` here because `options_for_through_record`
         
     | 
| 
      
 111 
     | 
    
         
            +
                        # was removed in https://github.com/rails/rails/pull/35799
         
     | 
| 
      
 112 
     | 
    
         
            +
                        through_association.build(attributes, without_protection: true)
         
     | 
| 
      
 113 
     | 
    
         
            +
                      end
         
     | 
| 
      
 114 
     | 
    
         
            +
                    end
         
     | 
| 
      
 115 
     | 
    
         
            +
                    private :build_through_record
         
     | 
| 
      
 116 
     | 
    
         
            +
                  end
         
     | 
| 
      
 117 
     | 
    
         
            +
             
     | 
| 
       99 
118 
     | 
    
         
             
                  def build_record(attributes, options = {})
         
     | 
| 
       100 
119 
     | 
    
         
             
                    ensure_not_nested
         
     | 
| 
       101 
120 
     | 
    
         | 
| 
         @@ -54,6 +54,7 @@ module ActiveRecord 
     | 
|
| 
       54 
54 
     | 
    
         | 
| 
       55 
55 
     | 
    
         
             
                  def assign_nested_attributes_for_one_to_one_association(association_name, attributes, assignment_opts = {})
         
     | 
| 
       56 
56 
     | 
    
         
             
                    options = self.nested_attributes_options[association_name]
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
       57 
58 
     | 
    
         
             
                    if attributes.class.name == 'ActionController::Parameters'
         
     | 
| 
       58 
59 
     | 
    
         
             
                      attributes = attributes.to_unsafe_h
         
     | 
| 
       59 
60 
     | 
    
         
             
                    elsif !attributes.is_a?(Hash) && !attributes.is_a?(Array)
         
     | 
| 
         @@ -62,8 +63,7 @@ module ActiveRecord 
     | 
|
| 
       62 
63 
     | 
    
         | 
| 
       63 
64 
     | 
    
         
             
                    attributes = attributes.with_indifferent_access
         
     | 
| 
       64 
65 
     | 
    
         | 
| 
       65 
     | 
    
         
            -
                    if 
     | 
| 
       66 
     | 
    
         
            -
                        (options[:update_only] || record.id.to_s == attributes['id'].to_s)
         
     | 
| 
      
 66 
     | 
    
         
            +
                    if (options[:update_only] || !attributes['id'].blank?) && (record = send(association_name)) && (options[:update_only] || record.id.to_s == attributes['id'].to_s)
         
     | 
| 
       67 
67 
     | 
    
         
             
                      assign_to_or_mark_for_destruction(record, attributes, options[:allow_destroy], assignment_opts) unless call_reject_if(association_name, attributes)
         
     | 
| 
       68 
68 
     | 
    
         | 
| 
       69 
69 
     | 
    
         
             
                    elsif attributes['id'].present? && !assignment_opts[:without_protection]
         
     | 
| 
         @@ -122,6 +122,12 @@ module ActiveRecord 
     | 
|
| 
       122 
122 
     | 
    
         
             
                    end
         
     | 
| 
       123 
123 
     | 
    
         | 
| 
       124 
124 
     | 
    
         
             
                    attributes_collection.each do |attributes|
         
     | 
| 
      
 125 
     | 
    
         
            +
                      if attributes.class.name == 'ActionController::Parameters'
         
     | 
| 
      
 126 
     | 
    
         
            +
                        attributes = attributes.to_unsafe_h
         
     | 
| 
      
 127 
     | 
    
         
            +
                      elsif !attributes.is_a?(Hash) && !attributes.is_a?(Array)
         
     | 
| 
      
 128 
     | 
    
         
            +
                        raise ArgumentError, "ActionController::Parameters or Hash or Array expected, got #{attributes.class.name} (#{attributes.inspect})"
         
     | 
| 
      
 129 
     | 
    
         
            +
                      end
         
     | 
| 
      
 130 
     | 
    
         
            +
                      
         
     | 
| 
       125 
131 
     | 
    
         
             
                      attributes = attributes.with_indifferent_access
         
     | 
| 
       126 
132 
     | 
    
         | 
| 
       127 
133 
     | 
    
         
             
                      if attributes['id'].blank?
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: protected_attributes_continued
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.5.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Weston Ganger
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2019-08-16 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: activemodel
         
     | 
| 
         @@ -154,7 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       154 
154 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       155 
155 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       156 
156 
     | 
    
         
             
            requirements: []
         
     | 
| 
       157 
     | 
    
         
            -
            rubygems_version: 3.0. 
     | 
| 
      
 157 
     | 
    
         
            +
            rubygems_version: 3.0.3
         
     | 
| 
       158 
158 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       159 
159 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       160 
160 
     | 
    
         
             
            summary: Protect attributes from mass assignment in Active Record models
         
     |