Class: IndexPath

Inherits:
Object show all
Defined in:
lib/cocoa/sugarcube-indexpath/indexpath.rb

Overview

This class is used in ‘switch` statements. Easy pattern matching, so instead of `if index_path.section == N && index_path.row = X`, you can use `when IndexPath[section, row]`.

Example:

case index_path
when IndexPath[0, 0]  # first section, first row
when IndexPath[1]     # second section, any row
when IndexPath[2, 0..N]  # third section, 0..Nth rows
when IndexPath[2]     # all other in third section
end

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(values) ⇒ IndexPath

Returns a new instance of IndexPath.



20
21
22
# File 'lib/cocoa/sugarcube-indexpath/indexpath.rb', line 20

def initialize values
  @values = values
end

Class Method Details

.[](*values) ⇒ Object



16
17
18
# File 'lib/cocoa/sugarcube-indexpath/indexpath.rb', line 16

def self.[] *values
  IndexPath.new values
end

Instance Method Details

#===(other) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/cocoa/sugarcube-indexpath/indexpath.rb', line 24

def === other
  return true if super

  if other.is_a? NSIndexPath
    other = other.to_a
  end

  if other.is_a? Enumerable
    ret = true
    other_i = 0
    @values.each do |val|
      next_val = other[other_i]
      other_i += 1
      unless val == true || val === next_val
        ret = false
        break
      end
    end

    return ret
  end
  return false
end