Sha256: a1546300c9355a733a4e8ecc46638f3e77c5e8d6eeca933e1d352ab8f1bdf78f

Contents?: true

Size: 1003 Bytes

Versions: 18

Compression:

Stored size: 1003 Bytes

Contents

module CompositePrimaryKeys
  ID_SEP     = ','
  ID_SET_SEP = ';'

  module ArrayExtension
    def to_composite_keys
      CompositeKeys.new(self)
    end
  end

  def self.normalize(ids)
    ids.map do |id|
      if id.is_a?(Array)
        normalize(id)
      elsif id.is_a?(String) && id.index(ID_SEP)
        id.split(ID_SEP)
      else
        id
      end
    end
  end

  class CompositeKeys < Array

    def self.parse(value)
      case value
      when Array
        value.to_composite_keys
      when String
        self.new(value.split(ID_SEP))
      else
        raise(ArgumentError, "Unsupported type: #{value}")
      end
    end

    def in(other)
      case other
        when Arel::SelectManager
          Arel::Nodes::In.new(self, other.ast)
      end
    end


    def to_s
      # Doing this makes it easier to parse Base#[](attr_name)
      join(ID_SEP)
    end
  end
end

Array.send(:include, CompositePrimaryKeys::ArrayExtension)

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
composite_primary_keys-12.0.1 lib/composite_primary_keys/composite_arrays.rb
composite_primary_keys-12.0.0 lib/composite_primary_keys/composite_arrays.rb
composite_primary_keys-12.0.0.rc5 lib/composite_primary_keys/composite_arrays.rb
composite_primary_keys-12.0.0.rc4 lib/composite_primary_keys/composite_arrays.rb
composite_primary_keys-12.0.0.rc3 lib/composite_primary_keys/composite_arrays.rb
composite_primary_keys-12.0.0.rc2 lib/composite_primary_keys/composite_arrays.rb
composite_primary_keys-12.0.0.rc1 lib/composite_primary_keys/composite_arrays.rb
composite_primary_keys-11.2.0 lib/composite_primary_keys/composite_arrays.rb
composite_primary_keys-11.1.0 lib/composite_primary_keys/composite_arrays.rb
composite_primary_keys-11.0.3 lib/composite_primary_keys/composite_arrays.rb
composite_primary_keys-11.0.2 lib/composite_primary_keys/composite_arrays.rb
composite_primary_keys-11.0.1 lib/composite_primary_keys/composite_arrays.rb
composite_primary_keys-11.0.0 lib/composite_primary_keys/composite_arrays.rb
composite_primary_keys-11.0.0.rc1 lib/composite_primary_keys/composite_arrays.rb
composite_primary_keys-11.0.0.beta4 lib/composite_primary_keys/composite_arrays.rb
composite_primary_keys-11.0.0.beta3 lib/composite_primary_keys/composite_arrays.rb
composite_primary_keys-11.0.0.beta2 lib/composite_primary_keys/composite_arrays.rb
composite_primary_keys-11.0.0.beta1 lib/composite_primary_keys/composite_arrays.rb