Class: Passcard::Grid
- Inherits:
-
Object
- Object
- Passcard::Grid
- Extended by:
- Forwardable
- Defined in:
- lib/passcard/grid.rb
Instance Method Summary collapse
- #==(g2) ⇒ Object
- #[](*args) ⇒ Object
- #alphanumeric? ⇒ Boolean
- #at(rows: [], cols: []) ⇒ Object
- #col_size ⇒ Object
- #cols_at(*cols) ⇒ Object
- #has_symbols? ⇒ Boolean
-
#initialize(arr) ⇒ Grid
constructor
A new instance of Grid.
- #inspect ⇒ Object
- #length ⇒ Object
- #numeric? ⇒ Boolean
- #print(*args) ⇒ Object
- #raise_if_invalid_array! ⇒ Object
-
#rotate(r: 0, c: 0) ⇒ Object
Returns new grid by rotating self so that the element at cnt in self is the first element of the new grid.
- #row_size ⇒ Object
- #rows_at(*rows) ⇒ Object
- #size ⇒ Object
- #slice(coord1, coord2) ⇒ Object
- #to_a ⇒ Object
- #to_s ⇒ Object
- #to_str ⇒ Object
- #to_vstr ⇒ Object
- #transpose ⇒ Object
Constructor Details
#initialize(arr) ⇒ Grid
Returns a new instance of Grid.
9 10 11 12 |
# File 'lib/passcard/grid.rb', line 9 def initialize(arr) @arr = arr raise_if_invalid_array! end |
Instance Method Details
#==(g2) ⇒ Object
14 15 16 |
# File 'lib/passcard/grid.rb', line 14 def ==(g2) self.to_a == g2.to_a && g2.is_a?(self.class) end |
#[](*args) ⇒ Object
18 19 20 |
# File 'lib/passcard/grid.rb', line 18 def [](*args) self.rows_at(*args) end |
#alphanumeric? ⇒ Boolean
67 68 69 |
# File 'lib/passcard/grid.rb', line 67 def alphanumeric? to_str =~ /\A[a-z0-9]+\z/i end |
#at(rows: [], cols: []) ⇒ Object
48 49 50 51 52 53 |
# File 'lib/passcard/grid.rb', line 48 def at(rows: [], cols: []) return self if rows.empty? && cols.empty? return self.rows_at(*rows) if cols.empty? return self.cols_at(*cols) if rows.empty? self.rows_at(*rows).cols_at(*cols) end |
#col_size ⇒ Object
26 27 28 |
# File 'lib/passcard/grid.rb', line 26 def col_size @arr.any? ? @arr[0].size : 0 end |
#cols_at(*cols) ⇒ Object
43 44 45 46 |
# File 'lib/passcard/grid.rb', line 43 def cols_at(*cols) cols = cols.map{|a| a.respond_to?(:to_a) ? a.to_a : a} self.class.new @arr.map{|a| cols.flatten.map{|c| a[c % a.length]}} end |
#has_symbols? ⇒ Boolean
71 72 73 74 75 |
# File 'lib/passcard/grid.rb', line 71 def has_symbols? return false if empty? return false if alphanumeric? (to_str.chars - ('!'..'~').to_a).empty? end |
#inspect ⇒ Object
107 108 109 110 111 |
# File 'lib/passcard/grid.rb', line 107 def inspect chars = to_str[0..36] + (length > 36 ? "...." : "") chars = "" if length == 0 "#{self.class}[rows=#{row_size},cols=#{col_size},length=#{length}]{\"#{chars}\"}" end |
#length ⇒ Object
34 35 36 |
# File 'lib/passcard/grid.rb', line 34 def length row_size * col_size end |
#numeric? ⇒ Boolean
63 64 65 |
# File 'lib/passcard/grid.rb', line 63 def numeric? to_str =~ /\A[0-9]+\z/ end |
#print(*args) ⇒ Object
101 102 103 104 105 |
# File 'lib/passcard/grid.rb', line 101 def print(*args) = args.last.is_a?(Hash) ? args.pop : {} puts(col_size > 40 || [:concise] ? to_s.gsub(" ", '') : to_s) return self end |
#raise_if_invalid_array! ⇒ Object
114 115 116 117 118 119 |
# File 'lib/passcard/grid.rb', line 114 def raise_if_invalid_array! valid = @arr.is_a?(Array) valid &&= @arr.reject{|r| r.is_a?(Array)}.empty? valid &&= @arr.join.length == @arr.size * (@arr[0].size rescue 0) raise Passcard::Error, "A Grid requires 2D array" unless valid end |
#rotate(r: 0, c: 0) ⇒ Object
Returns new grid by rotating self so that the element at cnt in self is the first element of the new grid. If cnt is negative then it rotates in the opposite direction.
81 82 83 |
# File 'lib/passcard/grid.rb', line 81 def rotate(r: 0, c: 0) self.class.new @arr.rotate(r).map{|row| row.rotate(c)} end |
#row_size ⇒ Object
22 23 24 |
# File 'lib/passcard/grid.rb', line 22 def row_size @arr.size end |
#rows_at(*rows) ⇒ Object
38 39 40 41 |
# File 'lib/passcard/grid.rb', line 38 def rows_at(*rows) rows = rows.map{|a| a.respond_to?(:to_a) ? a.to_a : a} self.class.new rows.flatten.map{|a| @arr[a % @arr.size]} end |
#size ⇒ Object
30 31 32 |
# File 'lib/passcard/grid.rb', line 30 def size [row_size, col_size] end |
#slice(coord1, coord2) ⇒ Object
55 56 57 |
# File 'lib/passcard/grid.rb', line 55 def slice(coord1, coord2) self.rows_at(coord1[0]...coord2[0]).cols_at(coord1[1]...coord2[1]) end |
#to_a ⇒ Object
85 86 87 |
# File 'lib/passcard/grid.rb', line 85 def to_a @arr end |
#to_s ⇒ Object
97 98 99 |
# File 'lib/passcard/grid.rb', line 97 def to_s @arr.map{|x| x.join(" ")}.join("\n") end |
#to_str ⇒ Object
89 90 91 |
# File 'lib/passcard/grid.rb', line 89 def to_str @arr.join end |
#to_vstr ⇒ Object
93 94 95 |
# File 'lib/passcard/grid.rb', line 93 def to_vstr transpose.to_str end |
#transpose ⇒ Object
59 60 61 |
# File 'lib/passcard/grid.rb', line 59 def transpose self.class.new @arr.transpose end |