effective_datatables 2.3.1 → 2.3.2
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 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: f1a04998ee9c940102f9df4a951d72bce9e4df41
         | 
| 4 | 
            +
              data.tar.gz: 8344057c6f04c15bdf157b1e712634a3ffcaf73d
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 49182f2222e7299401a32bbc36ed197fe3e4e3ed08d3811f4b0136f3e99216172ae6240bde97b255ed9aec62b1702c785494da8f69a610f834da6699a432d951
         | 
| 7 | 
            +
              data.tar.gz: 827c9fdd9c2ed56210216634e480e1a857283a67d59005dda710ac59fb3db237ca9e4a718dbfa1553583cc80d3fbb83fded0aaaae24611796ade1b1f62e6af84
         | 
| @@ -100,6 +100,38 @@ module Effective | |
| 100 100 | 
             
                      klass.where(conditions.join(' OR '), term: "%#{term}%", num: term.to_i).joins(inverse.name).pluck(inverse.foreign_key)
         | 
| 101 101 | 
             
                    end
         | 
| 102 102 |  | 
| 103 | 
            +
                    collection.public_send(sql_op, id: ids)
         | 
| 104 | 
            +
             | 
| 105 | 
            +
                  when :has_and_belongs_to_many
         | 
| 106 | 
            +
                    reflection = collection.klass.reflect_on_association(table_column[:name].to_sym)
         | 
| 107 | 
            +
                    raise "unable to find #{collection.klass.name} :has_and_belongs_to_many :#{table_column[:name]} association" unless reflection
         | 
| 108 | 
            +
             | 
| 109 | 
            +
                    obj = reflection.build_association({})
         | 
| 110 | 
            +
                    klass = obj.class
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                    inverse = reflection.inverse_of || klass.reflect_on_association(collection.table_name) || obj.class.reflect_on_association(collection.table_name.singularize)
         | 
| 113 | 
            +
                    raise "unable to find #{klass.name} has_and_belongs_to_many :#{collection.table_name} or belongs_to :#{collection.table_name.singularize} associations" unless inverse
         | 
| 114 | 
            +
             | 
| 115 | 
            +
                    ids = if [:select, :grouped_select].include?(table_column[:filter][:type])
         | 
| 116 | 
            +
                      # Treat the search term as one or more IDs
         | 
| 117 | 
            +
                      inverse_ids = term.split(',').map { |term| (term = term.to_i) == 0 ? nil : term }.compact
         | 
| 118 | 
            +
                      return collection unless inverse_ids.present?
         | 
| 119 | 
            +
             | 
| 120 | 
            +
                      klass.where(id: inverse_ids).flat_map { |klass| (klass.send(inverse.name).pluck(:id) rescue []) }
         | 
| 121 | 
            +
                    else
         | 
| 122 | 
            +
                      # Treat the search term as a string.
         | 
| 123 | 
            +
             | 
| 124 | 
            +
                      klass_columns = if (table_column[:column] == klass.table_name) # No custom column has been defined
         | 
| 125 | 
            +
                        klass.columns.map { |col| col.name if col.text? }.compact  # Search all database text? columns
         | 
| 126 | 
            +
                      else
         | 
| 127 | 
            +
                        [table_column[:column].gsub("#{klass.table_name}.", '')] # table_column :order_items, column: 'order_items.title'
         | 
| 128 | 
            +
                      end
         | 
| 129 | 
            +
             | 
| 130 | 
            +
                      conditions = klass_columns.map { |col_name| "#{klass.table_name}.#{col_name} #{ilike} :term" }
         | 
| 131 | 
            +
             | 
| 132 | 
            +
                      klass.where(conditions.join(' OR '), term: "%#{term}%", num: term.to_i).flat_map { |klass| (klass.send(inverse.name).pluck(:id) rescue []) }
         | 
| 133 | 
            +
                    end
         | 
| 134 | 
            +
             | 
| 103 135 | 
             
                    collection.public_send(sql_op, id: ids)
         | 
| 104 136 | 
             
                  when :obfuscated_id
         | 
| 105 137 | 
             
                    if (deobfuscated_id = collection.deobfuscate(term)) == term # We weren't able to deobfuscate it, so this is an Invalid ID
         | 
| @@ -30,11 +30,18 @@ module Effective | |
| 30 30 | 
             
                      retval
         | 
| 31 31 | 
             
                    end
         | 
| 32 32 |  | 
| 33 | 
            -
                    # has_manys
         | 
| 34 | 
            -
                    has_manys =  | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 33 | 
            +
                    # Figure out has_manys and has_many_belongs_to_many's
         | 
| 34 | 
            +
                    has_manys = {}
         | 
| 35 | 
            +
                    has_and_belongs_to_manys = {}
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                    (collection.klass.reflect_on_all_associations() rescue []).each do |reflect|
         | 
| 38 | 
            +
                      if reflect.macro == :has_many
         | 
| 39 | 
            +
                        klass = reflect.klass || (reflect.build_association({}).class)
         | 
| 40 | 
            +
                        has_manys[reflect.name.to_s] = { klass: klass }
         | 
| 41 | 
            +
                      elsif reflect.macro == :has_and_belongs_to_many
         | 
| 42 | 
            +
                        klass = reflect.klass || (reflect.build_association({}).class)
         | 
| 43 | 
            +
                        has_and_belongs_to_manys[reflect.name.to_s] = { klass: klass }
         | 
| 44 | 
            +
                      end
         | 
| 38 45 | 
             
                    end
         | 
| 39 46 |  | 
| 40 47 | 
             
                    table_columns = cols.each_with_index do |(name, _), index|
         | 
| @@ -68,6 +75,8 @@ module Effective | |
| 68 75 | 
             
                          end
         | 
| 69 76 | 
             
                        elsif has_manys.key?(name)
         | 
| 70 77 | 
             
                          :has_many
         | 
| 78 | 
            +
                        elsif has_and_belongs_to_manys.key?(name)
         | 
| 79 | 
            +
                          :has_and_belongs_to_many
         | 
| 71 80 | 
             
                        elsif cols[name][:bulk_actions_column]
         | 
| 72 81 | 
             
                          :bulk_actions_column
         | 
| 73 82 | 
             
                        elsif name.include?('_address') && (collection_class.new rescue nil).respond_to?(:effective_addresses)
         | 
| @@ -105,7 +114,7 @@ module Effective | |
| 105 114 | 
             
                        cols[name][:sql_as_column] = true
         | 
| 106 115 | 
             
                      end
         | 
| 107 116 |  | 
| 108 | 
            -
                      cols[name][:filter] = initialize_table_column_filter(cols[name], belong_tos[name], has_manys[name])
         | 
| 117 | 
            +
                      cols[name][:filter] = initialize_table_column_filter(cols[name], belong_tos[name], has_manys[name], has_and_belongs_to_manys[name])
         | 
| 109 118 |  | 
| 110 119 | 
             
                      if cols[name][:partial]
         | 
| 111 120 | 
             
                        cols[name][:partial_local] ||= (sql_table.try(:name) || cols[name][:partial].split('/').last(2).first.presence || 'obj').singularize.to_sym
         | 
| @@ -127,7 +136,7 @@ module Effective | |
| 127 136 | 
             
                    end
         | 
| 128 137 | 
             
                  end
         | 
| 129 138 |  | 
| 130 | 
            -
                  def initialize_table_column_filter(column, belongs_to, has_many)
         | 
| 139 | 
            +
                  def initialize_table_column_filter(column, belongs_to, has_many, has_and_belongs_to_manys)
         | 
| 131 140 | 
             
                    filter = column[:filter]
         | 
| 132 141 | 
             
                    col_type = column[:type]
         | 
| 133 142 | 
             
                    sql_column = column[:column].to_s.upcase
         | 
| @@ -181,6 +190,18 @@ module Effective | |
| 181 190 | 
             
                          end
         | 
| 182 191 | 
             
                        )
         | 
| 183 192 | 
             
                      }
         | 
| 193 | 
            +
                    when :has_and_belongs_to_many
         | 
| 194 | 
            +
                      {
         | 
| 195 | 
            +
                        type: :select,
         | 
| 196 | 
            +
                        multiple: true,
         | 
| 197 | 
            +
                        values: (
         | 
| 198 | 
            +
                          if has_and_belongs_to_manys[:klass].respond_to?(:datatables_filter)
         | 
| 199 | 
            +
                            Proc.new { has_and_belongs_to_manys[:klass].datatables_filter }
         | 
| 200 | 
            +
                          else
         | 
| 201 | 
            +
                            Proc.new { has_and_belongs_to_manys[:klass].all.map { |obj| [obj.to_s, obj.id] }.sort { |x, y| x[0] <=> y[0] } }
         | 
| 202 | 
            +
                          end
         | 
| 203 | 
            +
                        )
         | 
| 204 | 
            +
                      }
         | 
| 184 205 | 
             
                    when :effective_address
         | 
| 185 206 | 
             
                      {type: :string}
         | 
| 186 207 | 
             
                    when :effective_roles
         | 
| @@ -119,7 +119,9 @@ module Effective | |
| 119 119 | 
             
                        elsif opts[:type] == :belongs_to_polymorphic
         | 
| 120 120 | 
             
                          (obj.send(name) rescue nil)
         | 
| 121 121 | 
             
                        elsif opts[:type] == :has_many
         | 
| 122 | 
            -
                          (obj.send(name). | 
| 122 | 
            +
                          (obj.send(name).map { |obj| obj.to_s }.join('<br>') rescue BLANK)
         | 
| 123 | 
            +
                        elsif opts[:type] == :has_and_belongs_to_many
         | 
| 124 | 
            +
                          (obj.send(name).map { |obj| obj.to_s }.join('<br>') rescue BLANK)
         | 
| 123 125 | 
             
                        elsif opts[:type] == :bulk_actions_column
         | 
| 124 126 | 
             
                          BLANK
         | 
| 125 127 | 
             
                        elsif opts[:type] == :obfuscated_id
         |