Sha256: f6fe2d7e673e3b36efb13ef1994e40bdc5050e02db591b8698d541fe5f84f793

Contents?: true

Size: 1.03 KB

Versions: 3

Compression:

Stored size: 1.03 KB

Contents

require 'active_support/core_ext'

module Kashiwamochi

  class Sort
    DIRS = {:asc => 'asc', :desc => 'desc'}.freeze

    def initialize(key, dir = nil)
      self.key = key
      self.dir = dir
    end

    def key
      @key
    end

    def key=(value)
      @key = Sort.sanitize(value)
    end

    def dir
      @dir
    end

    def dir=(value)
      @dir = Sort.sanitize_dir(value)
    end

    def toggle!
      @dir = asc? ? DIRS[:desc] : DIRS[:asc]
      self
    end

    def toggle
      self.dup.toggle!
    end

    def asc?
      @dir == DIRS[:asc]
    end

    def desc?
      @dir == DIRS[:desc]
    end

    def valid?
      @key.present?
    end

    def to_query
      "#{key} #{dir}"
    end

    def inspect
      "#<Sort #{key}: #{dir}>"
    end

    def self.sanitize(value)
      value.to_s.strip
    end

    def self.sanitize_dir(dir)
      sanitize(dir).downcase != DIRS[:desc] ? DIRS[:asc] : DIRS[:desc]
    end

    def self.parse(value)
      key, dir = sanitize(value).split(/\s+/, 2)
      new(key, dir)
    end
  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
kashiwamochi-0.2.2 lib/kashiwamochi/sort.rb
kashiwamochi-0.2.1 lib/kashiwamochi/sort.rb
kashiwamochi-0.2.0 lib/kashiwamochi/sort.rb