bitmapped 0.1.0 → 0.2.0

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.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +47 -18
  3. data/bitmapped.gemspec +6 -1
  4. data/lib/bitmapped/bitmap.rb +28 -100
  5. data/lib/bitmapped/cli.rb +1 -1
  6. data/lib/bitmapped/commands/base_command.rb +13 -0
  7. data/lib/bitmapped/commands/clear_command.rb +17 -0
  8. data/lib/bitmapped/commands/commands_helper.rb +25 -0
  9. data/lib/bitmapped/commands/exit_command.rb +16 -0
  10. data/lib/bitmapped/commands/fill_command.rb +44 -0
  11. data/lib/bitmapped/commands/horizontal_line_command.rb +29 -0
  12. data/lib/bitmapped/commands/initialiser_command.rb +18 -0
  13. data/lib/bitmapped/commands/invert_command.rb +26 -0
  14. data/lib/bitmapped/commands/mirror_command.rb +17 -0
  15. data/lib/bitmapped/commands/pixel_fill_command.rb +27 -0
  16. data/lib/bitmapped/commands/print_fancy_table_command.rb +22 -0
  17. data/lib/bitmapped/commands/print_table_command.rb +19 -0
  18. data/lib/bitmapped/commands/rotate_command.rb +17 -0
  19. data/lib/bitmapped/commands/vertical_line_command.rb +29 -0
  20. data/lib/bitmapped/exceptions.rb +1 -0
  21. data/lib/bitmapped/validators/validate_bitmap_initialised.rb +15 -0
  22. data/lib/bitmapped/validators/validate_column_row_input.rb +1 -0
  23. data/lib/bitmapped/validators/validate_coordinates.rb +20 -0
  24. data/lib/bitmapped/validators/validated_bitmap_size.rb +19 -0
  25. data/lib/bitmapped/validators/validation_helper.rb +4 -1
  26. data/lib/bitmapped/version.rb +1 -1
  27. data/spec/bitmap_spec.rb +129 -27
  28. data/spec/command/base_command_spec.rb +13 -0
  29. data/spec/validators/validate_bitmap_initialised_spec.rb +30 -0
  30. data/spec/validators/validate_column_row_input_spec.rb +5 -2
  31. data/spec/validators/validate_fill_input_spec.rb +5 -2
  32. data/spec/validators/validate_helper_spec.rb +5 -2
  33. data/spec/validators/validate_segment_input_spec.rb +5 -2
  34. metadata +93 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 99702c03528a066944f878c4b91150111a57109c
4
- data.tar.gz: bb7495610f144df0ed5ebbbf4073846add4a7984
3
+ metadata.gz: 6ae854b185764fafcc2611572e5f81ea11b88208
4
+ data.tar.gz: 018fab67547caaa3b04b021a37ed220c055623f5
5
5
  SHA512:
6
- metadata.gz: 310a13fb27eb9a4124623c7088e2de83bf4e323fe414e2721c35bff6ddaa6e9067e95bb48296b6562410816eca7ad31455ab5ece03416b9a58262bad8ae604c1
7
- data.tar.gz: 84f16acd5af696546e80aba724afa45d966dc0e1f7aed02643cf158c94b54d63b20acbfb21f98605fa868dc208eb6728b4d1283f86bca1ec9d16d853461daf42
6
+ metadata.gz: d52a23053a021241a06f78f5b8b73a2458a79d4ee5717762416915b06781ef354fcc05f908d0033395103a70b45758e605c1d42689e41032d11b0db4bf4af17c
7
+ data.tar.gz: 832a3211254842a262d95d5819312b383cc50d45c44f30c0827882c5f361c6a05866bad1b70c77394a19eefb6bca79cdc4b61f5317248fb7cf2655b67901769d
data/README.md CHANGED
@@ -18,6 +18,11 @@ Bitmapped accepts various commands to create and edit bitmap-like text images:
18
18
  | Vertically Line | Colors multiple cells on specified column between rows X Y | V | Column:Int, Row:X, Row:Y, Color:String |
19
19
  | Horizontal Line | Colors multiple cells on specified row between rows X Y | H | Row:X, Row:Y, Row:Int, Color:String |
20
20
  | Fill (Paint Bucket) | Fills a given cell and surrounding cells of the same color | F | Column:Int, Row:Int, Color:String |
21
+ | Show Table | Displays the table on the CLI | S | |
22
+ | Show Pretty Table | Displays a pretty table on the CLI | T | |
23
+ | Mirror | Mirrors the image along the vertical axis | M | |
24
+ | Rotate | Rotates the image 90 degrees clockwise | R | |
25
+ | Invert | Inverts image swapping colors with opposites (Z>A, Y>B, X>C etc)| N | |
21
26
  | Exit | Exits the program | X | |
22
27
 
23
28
 
@@ -26,26 +31,51 @@ Bitmapped accepts various commands to create and edit bitmap-like text images:
26
31
  > I 5 6
27
32
  > L 2 3 A
28
33
  > S
29
- +---+---+---+---+---+
30
- | 0 | 0 | 0 | 0 | 0 |
31
- | 0 | 0 | 0 | 0 | 0 |
32
- | 0 | 0 | 0 | 0 | 0 |
33
- | 0 | 0 | 0 | 0 | 0 |
34
- | 0 | 0 | 0 | 0 | 0 |
35
- | 0 | 0 | 0 | 0 | 0 |
36
- +---+---+---+---+---+
34
+ OOOOO
35
+ OOOOO
36
+ OAOOO
37
+ OOOOO
38
+ OOOOO
39
+ OOOOO
37
40
  > F 3 3 J
38
41
  > V 2 3 4 W
39
42
  > H 3 4 2 Z
40
43
  > S
41
- +---+---+---+---+---+
42
- | J | J | J | J | J |
43
- | J | J | Z | Z | J |
44
- | J | W | J | J | J |
45
- | J | W | J | J | J |
46
- | J | J | J | J | J |
47
- | J | J | J | J | J |
48
- +---+---+---+---+---+
44
+ JJJJJ
45
+ JJZZJ
46
+ JWJJJ
47
+ JWJJJ
48
+ JJJJJ
49
+ JJJJJ
50
+ > R
51
+ > S
52
+ JJJJJJ
53
+ JJWWJJ
54
+ JJJJZJ
55
+ JJJJZJ
56
+ JJJJJJ
57
+ > M
58
+ > S
59
+ JJJJJJ
60
+ JJWWJJ
61
+ JZJJJJ
62
+ JZJJJJ
63
+ JJJJJJ
64
+ > N
65
+ > S
66
+ QQQQQQ
67
+ QQDDQQ
68
+ QAQQQQ
69
+ QAQQQQ
70
+ QQQQQQ
71
+ > T
72
+ +---+---+---+---+---+---+
73
+ | Q | Q | Q | Q | Q | Q |
74
+ | Q | Q | D | D | Q | Q |
75
+ | Q | A | Q | Q | Q | Q |
76
+ | Q | A | Q | Q | Q | Q |
77
+ | Q | Q | Q | Q | Q | Q |
78
+ +---+---+---+---+---+---+
49
79
 
50
80
  ## Requirements
51
81
  Ruby 2.0+
@@ -55,8 +85,7 @@ Bitmapped accepts various commands to create and edit bitmap-like text images:
55
85
 
56
86
  ## TODO
57
87
 
58
- * Custom commands
59
- * Refactor Bitmap commands into objects with tests
88
+ * Refactor tests
60
89
 
61
90
  ### Copyright
62
91
 
data/bitmapped.gemspec CHANGED
@@ -5,7 +5,7 @@ require File.expand_path('../lib/bitmapped/version', __FILE__)
5
5
  Gem::Specification.new do |gem|
6
6
  gem.name = "bitmapped"
7
7
  gem.version = Bitmapped::VERSION
8
- gem.platform = Gem::Platform::RUBY
8
+ gem.platform = Gem::Platform::RUBY
9
9
  gem.summary = %q{Bitmap CLI program}
10
10
  gem.description = %q{Bitmap CLI program}
11
11
  gem.license = "MIT"
@@ -19,5 +19,10 @@ Gem::Specification.new do |gem|
19
19
  gem.require_paths = ['lib']
20
20
 
21
21
  gem.required_ruby_version = ">= 2.0.0"
22
+ gem.add_development_dependency 'bundler', '~> 1.0'
23
+ gem.add_development_dependency 'rake', '~> 0.8'
24
+ gem.add_development_dependency 'rdoc', '~> 3.0'
25
+ gem.add_development_dependency 'rspec', '~> 2.4'
26
+ gem.add_development_dependency 'rubygems-tasks', '~> 0.2'
22
27
  gem.add_runtime_dependency 'terminal-table', '~> 1.4', '>= 1.4.5'
23
28
  end
@@ -1,6 +1,6 @@
1
1
  Dir[File.join(File.dirname(__FILE__), 'validators', '*.rb')].each {|file| require file }
2
+ Dir[File.join(File.dirname(__FILE__), 'commands', '*.rb')].each {|file| require file }
2
3
 
3
- require 'terminal-table'
4
4
  require 'bitmapped/exceptions'
5
5
 
6
6
  module Bitmapped
@@ -12,111 +12,39 @@ module Bitmapped
12
12
  begin
13
13
  case input.shift
14
14
  when "I"
15
- self.columns, self.rows = Validators::ValidateColumnRowInput.parse_and_validate(input)
16
- self.pixels = populate_pixels(self.columns, self.rows)
17
- when "X"
18
- raise Interrupt
19
- when bitmap_available("C")
20
- self.pixels = populate_pixels(self.columns, self.rows)
21
- when bitmap_available("L")
22
- column, row, color = Validators::ValidateFillInput.parse_and_validate(input)
23
- color_command(column, row, color)
24
- when bitmap_available("V")
25
- column, start, finish, color = Validators::ValidateSegmentInput.parse_and_validate(input)
26
- vertical_command(column, start, finish, color)
27
- when bitmap_available("H")
28
- start, finish, row, color = Validators::ValidateSegmentInput.parse_and_validate(input)
29
- horizontal_command(start, finish, row, color)
30
- when bitmap_available("F")
31
- column, row, color = Validators::ValidateFillInput.parse_and_validate(input)
32
- fill_command(column, row, color)
33
- when bitmap_available("S")
34
- formatted_table
35
- when "C", "L", "V", "H", "F", "S"
36
- "Bitmap has not been initialised, run command 'I' with valid arguments"
15
+ Commands::InitialiserCommand.new.process_command(self, input)
16
+ when "X", "exit"
17
+ Commands::ExitCommand.new.process_command(self, input)
18
+ when "C"
19
+ Commands::ClearCommand.new.process_command(self, input)
20
+ when "L"
21
+ Commands::PixelFillCommand.new.process_command(self, input)
22
+ when "V"
23
+ Commands::VerticalLineCommand.new.process_command(self, input)
24
+ when "H"
25
+ Commands::HorizontalLineCommand.new.process_command(self, input)
26
+ when "F"
27
+ Commands::FillCommand.new.process_command(self, input)
28
+ when "S"
29
+ Commands::PrintTableCommand.new.process_command(self, input)
30
+ when "T"
31
+ Commands::PrintFancyTableCommand.new.process_command(self, input)
32
+ when "R"
33
+ Commands::RotateCommand.new.process_command(self, input)
34
+ when "M"
35
+ Commands::MirrorCommand.new.process_command(self, input)
36
+ when "N"
37
+ Commands::InvertCommand.new.process_command(self, input)
37
38
  else
38
39
  "Invalid Command"
39
40
  end
40
- rescue ParsingError => e
41
+ rescue BitmapNotInitialised => bni
42
+ "Bitmap has not been initialised, run command 'I' with valid arguments"
43
+ rescue ParsingError => pe
41
44
  "Invalid parameters"
42
- rescue InvalidCoordinatesError => e
45
+ rescue InvalidCoordinatesError => ice
43
46
  "Invalid co-ordinates"
44
47
  end
45
48
  end
46
-
47
- private
48
- def populate_pixels(x, y)
49
- Array.new(self.rows) { Array.new(self.columns) { "0" } }
50
- end
51
-
52
- def bitmap_available(command)
53
- lambda { |option| option == command && self.pixels }
54
- end
55
-
56
- def formatted_table
57
- self.table ||= Terminal::Table.new
58
- self.table.rows = self.pixels
59
- self.table
60
- # self.pixels.each { |row| puts row.join("") } # no fancy table
61
- end
62
-
63
- def color_command(x, y, color)
64
- x, y = coordinates_to_array_indexes(x, y)
65
- self.pixels[y][x] = color
66
- end
67
-
68
- def vertical_command(column, x, y, color)
69
- raise InvalidCoordinatesError unless (0 < column && column <= self.columns)
70
- x, y = coordinates_to_array_indexes(x, y)
71
- column = column - 1
72
- self.pixels[x..y].each { |row| row[column] = color }
73
- end
74
-
75
- def horizontal_command(x, y, row, color)
76
- raise InvalidCoordinatesError unless (0 < row && row <= self.rows)
77
- x, y = coordinates_to_array_indexes(x, y)
78
- row = row - 1
79
- self.pixels[row][x..y] = Array.new((x..y).size, color)
80
- end
81
-
82
- def fill_command(x, y, replacement_color)
83
- x, y = coordinates_to_array_indexes(x, y)
84
- target_color = self.pixels[x][y]
85
- queue = [[x,y]]
86
-
87
- until queue.empty?
88
- x, y = queue.pop
89
- next if (!valid_cooridinates(x+1, y+1) || self.pixels[x][y] != target_color)
90
- self.pixels[x][y] = replacement_color
91
- queue << [x+1, y] # east
92
- queue << [x-1, y] # west
93
- queue << [x, y+1] # south
94
- queue << [x, y-1] # north
95
-
96
- # and if we are doing 8-direction flood-fill...
97
- # queue << [x+1, y-1] # north-east
98
- # queue << [x-1, y-1] # north-west
99
- # queue << [x+1, y+1] # south-east
100
- # queue << [x-1, y+1] # south-west
101
- end
102
- end
103
-
104
- def valid_cooridinates(x, y)
105
- if (0 <= x && x <= self.columns) && (0 <= y && y <= self.rows)
106
- true
107
- else
108
- false
109
- end
110
- end
111
-
112
- def coordinates_to_array_indexes(x, y)
113
- x = x.to_i - 1
114
- y = y.to_i - 1
115
- if valid_cooridinates(x, y)
116
- [x, y]
117
- else
118
- raise InvalidCoordinatesError
119
- end
120
- end
121
49
  end
122
50
  end
data/lib/bitmapped/cli.rb CHANGED
@@ -12,7 +12,7 @@ module Bitmapped
12
12
 
13
13
  loop do
14
14
  input = split_input(Readline.readline("> "))
15
- puts bitmap.command(input)
15
+ bitmap.command(input)
16
16
  end
17
17
  rescue Interrupt => interrupt
18
18
  puts "\nExiting..."
@@ -0,0 +1,13 @@
1
+ module Bitmapped
2
+ module Commands
3
+ class BaseCommand
4
+ def command_id
5
+ raise NotImplementedError.new("You must implement command_id.")
6
+ end
7
+
8
+ def process_command(pixels, args)
9
+ raise NotImplementedError.new("You must implement process_command.")
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,17 @@
1
+ require 'bitmapped/commands/base_command'
2
+
3
+ module Bitmapped
4
+ module Commands
5
+ class ClearCommand < BaseCommand
6
+
7
+ def command_id
8
+ "C"
9
+ end
10
+
11
+ def process_command(bitmap, input)
12
+ Validators::ValidateBitmapInitialised.parse_and_validate(bitmap)
13
+ bitmap.pixels = Array.new(bitmap.rows) { Array.new(bitmap.columns) { "O" } }
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,25 @@
1
+ require 'bitmapped/commands/base_command'
2
+
3
+ module Bitmapped
4
+ module Commands
5
+ module CommandsHelper
6
+ def valid_cooridinates(bitmap, x, y)
7
+ if (0 <= x && x <= bitmap.columns) && (0 <= y && y <= bitmap.rows)
8
+ true
9
+ else
10
+ false
11
+ end
12
+ end
13
+
14
+ def coordinates_to_array_indexes(bitmap, x, y)
15
+ x = x.to_i - 1
16
+ y = y.to_i - 1
17
+ if valid_cooridinates(bitmap, x, y)
18
+ [x, y]
19
+ else
20
+ raise InvalidCoordinatesError
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,16 @@
1
+ require 'bitmapped/commands/base_command'
2
+
3
+ module Bitmapped
4
+ module Commands
5
+ class ExitCommand < BaseCommand
6
+
7
+ def command_id
8
+ "X"
9
+ end
10
+
11
+ def process_command(bitmap, input)
12
+ raise Interrupt
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,44 @@
1
+ require 'bitmapped/commands/base_command'
2
+ require 'bitmapped/commands/commands_helper'
3
+ require 'bitmapped/exceptions'
4
+
5
+ module Bitmapped
6
+ module Commands
7
+ class FillCommand < BaseCommand
8
+ include CommandsHelper
9
+
10
+ def command_id
11
+ "F"
12
+ end
13
+
14
+ def process_command(bitmap, input)
15
+ Validators::ValidateBitmapInitialised.parse_and_validate(bitmap)
16
+ column, row, color = Validators::ValidateFillInput.parse_and_validate(input)
17
+ fill_command(bitmap, column, row, color)
18
+ end
19
+
20
+ private
21
+ def fill_command(bitmap, x, y, replacement_color)
22
+ x, y = coordinates_to_array_indexes(bitmap, x, y)
23
+ target_color = bitmap.pixels[x][y]
24
+ queue = [[x,y]]
25
+
26
+ until queue.empty?
27
+ x, y = queue.pop
28
+ next if (!valid_cooridinates(bitmap, x+1, y+1) || bitmap.pixels[x][y] != target_color)
29
+ bitmap.pixels[x][y] = replacement_color
30
+ queue << [x+1, y] # east
31
+ queue << [x-1, y] # west
32
+ queue << [x, y+1] # south
33
+ queue << [x, y-1] # north
34
+
35
+ # and if we are doing 8-direction flood-fill...
36
+ # queue << [x+1, y-1] # north-east
37
+ # queue << [x-1, y-1] # north-west
38
+ # queue << [x+1, y+1] # south-east
39
+ # queue << [x-1, y+1] # south-west
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,29 @@
1
+ require 'bitmapped/commands/base_command'
2
+ require 'bitmapped/commands/commands_helper'
3
+ require 'bitmapped/exceptions'
4
+
5
+ module Bitmapped
6
+ module Commands
7
+ class HorizontalLineCommand < BaseCommand
8
+ include CommandsHelper
9
+
10
+ def command_id
11
+ "H"
12
+ end
13
+
14
+ def process_command(bitmap, input)
15
+ Validators::ValidateBitmapInitialised.parse_and_validate(bitmap)
16
+ column, start, finish, color = Validators::ValidateSegmentInput.parse_and_validate(input)
17
+ horizontal_command(bitmap, column, start, finish, color)
18
+ end
19
+
20
+ private
21
+ def horizontal_command(bitmap, x, y, row, color)
22
+ raise InvalidCoordinatesError unless (0 < row && row <= bitmap.rows)
23
+ x, y = coordinates_to_array_indexes(bitmap, x, y)
24
+ row = row - 1
25
+ bitmap.pixels[row][x..y] = Array.new((x..y).size, color)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,18 @@
1
+ require 'bitmapped/commands/base_command'
2
+
3
+ module Bitmapped
4
+ module Commands
5
+ class InitialiserCommand < BaseCommand
6
+
7
+ def command_id
8
+ "I"
9
+ end
10
+
11
+ def process_command(bitmap, input)
12
+ Validators::ValidateBitmapSize.parse_and_validate(input)
13
+ bitmap.columns, bitmap.rows = Validators::ValidateColumnRowInput.parse_and_validate(input)
14
+ bitmap.pixels = Array.new(bitmap.rows) { Array.new(bitmap.columns) { "O" } }
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,26 @@
1
+ require 'bitmapped/commands/base_command'
2
+
3
+ module Bitmapped
4
+ module Commands
5
+ class InvertCommand < BaseCommand
6
+
7
+ ALPHABET = [*'A'..'Z']
8
+
9
+ def command_id
10
+ "N"
11
+ end
12
+
13
+ def process_command(bitmap, input)
14
+ Validators::ValidateBitmapInitialised.parse_and_validate(bitmap)
15
+ bitmap.pixels.each_with_index do |row, index|
16
+ bitmap.pixels[index] = row.collect{ |color| invert_color(color) }
17
+ end
18
+ end
19
+
20
+ private
21
+ def invert_color(color)
22
+ ALPHABET[-(ALPHABET.index(color)+1)]
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,17 @@
1
+ require 'bitmapped/commands/base_command'
2
+
3
+ module Bitmapped
4
+ module Commands
5
+ class MirrorCommand < BaseCommand
6
+
7
+ def command_id
8
+ "R"
9
+ end
10
+
11
+ def process_command(bitmap, input)
12
+ Validators::ValidateBitmapInitialised.parse_and_validate(bitmap)
13
+ bitmap = bitmap.pixels.collect { |row| row.reverse! }
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,27 @@
1
+ require 'bitmapped/commands/base_command'
2
+ require 'bitmapped/commands/commands_helper'
3
+ require 'bitmapped/exceptions'
4
+
5
+ module Bitmapped
6
+ module Commands
7
+ class PixelFillCommand < BaseCommand
8
+ include CommandsHelper
9
+
10
+ def command_id
11
+ "L"
12
+ end
13
+
14
+ def process_command(bitmap, input)
15
+ Validators::ValidateBitmapInitialised.parse_and_validate(bitmap)
16
+ column, row, color = Validators::ValidateFillInput.parse_and_validate(input)
17
+ color_command(bitmap, column, row, color)
18
+ end
19
+
20
+ private
21
+ def color_command(bitmap, x, y, color)
22
+ x, y = coordinates_to_array_indexes(bitmap, x, y)
23
+ bitmap.pixels[y][x] = color
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,22 @@
1
+ require 'bitmapped/commands/base_command'
2
+
3
+ require 'terminal-table'
4
+
5
+ module Bitmapped
6
+ module Commands
7
+ class PrintFancyTableCommand < BaseCommand
8
+
9
+ def command_id
10
+ "T"
11
+ end
12
+
13
+ def process_command(bitmap, input)
14
+ Validators::ValidateBitmapInitialised.parse_and_validate(bitmap)
15
+ bitmap.table ||= Terminal::Table.new
16
+ bitmap.table.rows = bitmap.pixels
17
+ puts bitmap.table
18
+ bitmap.table
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,19 @@
1
+ require 'bitmapped/commands/base_command'
2
+
3
+ module Bitmapped
4
+ module Commands
5
+ class PrintTableCommand < BaseCommand
6
+
7
+ def command_id
8
+ "S"
9
+ end
10
+
11
+ def process_command(bitmap, input)
12
+ Validators::ValidateBitmapInitialised.parse_and_validate(bitmap)
13
+ table = bitmap.pixels.collect { |row| row.join("") }.join("\n")
14
+ puts table
15
+ table
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,17 @@
1
+ require 'bitmapped/commands/base_command'
2
+
3
+ module Bitmapped
4
+ module Commands
5
+ class RotateCommand < BaseCommand
6
+
7
+ def command_id
8
+ "R"
9
+ end
10
+
11
+ def process_command(bitmap, _)
12
+ Validators::ValidateBitmapInitialised.parse_and_validate(bitmap)
13
+ bitmap.pixels = bitmap.pixels.transpose.map &:reverse
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,29 @@
1
+ require 'bitmapped/commands/base_command'
2
+ require 'bitmapped/commands/commands_helper'
3
+ require 'bitmapped/exceptions'
4
+
5
+ module Bitmapped
6
+ module Commands
7
+ class VerticalLineCommand < BaseCommand
8
+ include CommandsHelper
9
+
10
+ def command_id
11
+ "V"
12
+ end
13
+
14
+ def process_command(bitmap, input)
15
+ Validators::ValidateBitmapInitialised.parse_and_validate(bitmap)
16
+ column, start, finish, color = Validators::ValidateSegmentInput.parse_and_validate(input)
17
+ vertical_command(bitmap, column, start, finish, color)
18
+ end
19
+
20
+ private
21
+ def vertical_command(bitmap, column, x, y, color)
22
+ raise InvalidCoordinatesError unless (0 < column && column <= bitmap.columns)
23
+ x, y = coordinates_to_array_indexes(bitmap, x, y)
24
+ column = column - 1
25
+ bitmap.pixels[x..y].each { |row| row[column] = color }
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,4 +1,5 @@
1
1
  module Bitmapped
2
2
  class ParsingError < StandardError; end
3
3
  class InvalidCoordinatesError < StandardError; end
4
+ class BitmapNotInitialised < StandardError; end
4
5
  end
@@ -0,0 +1,15 @@
1
+ require 'bitmapped/exceptions'
2
+ require 'bitmapped/validators/validation_helper'
3
+
4
+ module Bitmapped
5
+ module Validators
6
+ class ValidateBitmapInitialised
7
+
8
+ class << self
9
+ def parse_and_validate(bitmap)
10
+ raise BitmapNotInitialised unless bitmap.pixels
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -10,6 +10,7 @@ module Bitmapped
10
10
 
11
11
  columns = Integer(input[0])
12
12
  rows = Integer(input[1])
13
+
13
14
  [columns, rows]
14
15
  rescue ArgumentError => ae
15
16
  raise ParsingError
@@ -0,0 +1,20 @@
1
+ require 'bitmapped/exceptions'
2
+ require 'bitmapped/validators/validation_helper'
3
+
4
+ module Bitmapped
5
+ module Validators
6
+ class ValidateCoordinates
7
+ class << self
8
+ def parse_and_validate(bitmap, input)
9
+ begin
10
+ row = Integer(input[0])
11
+ column = Integer(input[1])
12
+ raise InvalidCoordinatesError unless bitmap.pixels[row][column]
13
+ rescue NoMethodError => nme
14
+ raise InvalidCoordinatesError
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ require 'bitmapped/exceptions'
2
+ require 'bitmapped/validators/validation_helper'
3
+
4
+ module Bitmapped
5
+ module Validators
6
+ class ValidateBitmapSize
7
+ class << self
8
+ def parse_and_validate(input)
9
+ begin
10
+ columns, rows = Validators::ValidateColumnRowInput.parse_and_validate(input)
11
+ raise ArgumentError unless ((0 < columns && columns <= 250) && (0 < rows && rows <= 250))
12
+ rescue ArgumentError => ae
13
+ raise ParsingError
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -3,10 +3,13 @@ require 'bitmapped/exceptions'
3
3
  module Bitmapped
4
4
  module Validators
5
5
  module ValidationHelper
6
+
7
+ ALPHABET = [*'A'..'Z']
8
+
6
9
  class << self
7
10
  def parse_color(color)
8
11
  color = color.strip
9
- if [*'A'..'Z'].include?(color)
12
+ if ALPHABET.include?(color)
10
13
  color
11
14
  else
12
15
  raise ParsingError
@@ -1,4 +1,4 @@
1
1
  module Bitmapped
2
2
  # bitmapped version
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
data/spec/bitmap_spec.rb CHANGED
@@ -1,3 +1,8 @@
1
+ # Since the refactoring this is more intergration test than unit test
2
+ # I'm going to leave this as is but if I had time it would be broken
3
+ # into indidual command unit tests, with all operations done in a few
4
+ # integration tests
5
+
1
6
  require 'spec_helper'
2
7
 
3
8
  require 'bitmapped/bitmap'
@@ -13,11 +18,13 @@ describe Bitmap do
13
18
  end
14
19
 
15
20
  describe 'the I command' do
21
+ let(:args) { ["I", "2", "3"] }
22
+ let(:second_args) { ["I", "3", "2"] }
23
+
16
24
  it 'initializes a grid of that size' do
17
- args = ["I", "2", "3"]
18
- pixels = [["0", "0"],
19
- ["0", "0"],
20
- ["0", "0"]]
25
+ pixels = [["O", "O"],
26
+ ["O", "O"],
27
+ ["O", "O"]]
21
28
 
22
29
  subject.command(args)
23
30
 
@@ -27,12 +34,10 @@ describe Bitmap do
27
34
  end
28
35
 
29
36
  it 'overwrites the old bitmap given the I command again' do
30
- first_args = ["I", "2", "3"]
31
- second_args = ["I", "3", "2"]
32
- pixels = [["0", "0", "0"],
33
- ["0", "0", "0"]]
37
+ pixels = [["O", "O", "O"],
38
+ ["O", "O", "O"]]
34
39
 
35
- subject.command(first_args)
40
+ subject.command(args)
36
41
  subject.command(second_args)
37
42
 
38
43
  expect(subject.columns).to eq(3)
@@ -55,8 +60,8 @@ describe Bitmap do
55
60
  setup_pixels(subject, 3, 2, "X")
56
61
  subject.command(["C"])
57
62
 
58
- expect(subject.pixels).to eq([["0", "0", "0"],
59
- ["0", "0", "0"]])
63
+ expect(subject.pixels).to eq([["O", "O", "O"],
64
+ ["O", "O", "O"]])
60
65
  end
61
66
  end
62
67
  end
@@ -73,8 +78,8 @@ describe Bitmap do
73
78
  subject.command(["L", "1", "2", "Z"])
74
79
  subject.command(["L", "2", "1", "Z"])
75
80
 
76
- expect(subject.pixels).to eq([["0", "Z", "0"],
77
- ["Z", "0", "0"]])
81
+ expect(subject.pixels).to eq([["O", "Z", "O"],
82
+ ["Z", "O", "O"]])
78
83
  end
79
84
 
80
85
  it 'returns an error when the coordinates are not valid' do
@@ -95,10 +100,10 @@ describe Bitmap do
95
100
  subject.command(["V", "3", "2", "4", "X"])
96
101
  subject.command(["V", "1", "1", "3", "Z"])
97
102
 
98
- expect(subject.pixels).to eq([["Z","0","0","0"],
99
- ["Z","0","X","0"],
100
- ["Z","0","X","0"],
101
- ["0","0","X","0"]]
103
+ expect(subject.pixels).to eq([["Z","O","O","O"],
104
+ ["Z","O","X","O"],
105
+ ["Z","O","X","O"],
106
+ ["O","O","X","O"]]
102
107
  )
103
108
  end
104
109
 
@@ -128,9 +133,9 @@ describe Bitmap do
128
133
  subject.command(["H", "2", "4", "2", "X"])
129
134
  subject.command(["H", "1", "4", "4", "Z"])
130
135
 
131
- expect(subject.pixels).to eq([["0","0","0","0"],
132
- ["0","X","X","X"],
133
- ["0","0","0","0"],
136
+ expect(subject.pixels).to eq([["O","O","O","O"],
137
+ ["O","X","X","X"],
138
+ ["O","O","O","O"],
134
139
  ["Z","Z","Z","Z"]]
135
140
  )
136
141
  end
@@ -171,16 +176,46 @@ describe Bitmap do
171
176
  describe 'the S command' do
172
177
  it_should_behave_like "a command requiring an initialised bitmap", "S"
173
178
 
179
+ context 'when the bitmap is initialised' do
180
+ before(:example) do
181
+ setup_pixels(subject, 4, 4)
182
+ end
183
+
184
+ let(:formatted_table) { %{OOOO
185
+ OOOO
186
+ OOOO
187
+ OOOO}.gsub(/[^\S\n]{2,}/, '')}
188
+
189
+ let(:filled_formatted_table) {%{JJJJ
190
+ JJJJ
191
+ JJJJ
192
+ JJJJ}.gsub(/[^\S\n]{2,}/, '')}
193
+
194
+ it 'should output a formatted table' do
195
+ expect(subject.command(["S"]).to_s).to eq(formatted_table)
196
+ end
197
+
198
+ it 'should output a correctly formatted table after fill command' do
199
+ subject.command(["F", "3", "3", "J"])
200
+
201
+ expect(subject.command(["S"]).to_s).to eq(filled_formatted_table)
202
+ end
203
+ end
204
+ end
205
+
206
+ describe 'the T command' do
207
+ it_should_behave_like "a command requiring an initialised bitmap", "T"
208
+
174
209
  context 'when the bitmap is initialised' do
175
210
  before(:example) do
176
211
  setup_pixels(subject, 4, 4)
177
212
  end
178
213
 
179
214
  let(:formatted_table) { %{+---+---+---+---+
180
- | 0 | 0 | 0 | 0 |
181
- | 0 | 0 | 0 | 0 |
182
- | 0 | 0 | 0 | 0 |
183
- | 0 | 0 | 0 | 0 |
215
+ | O | O | O | O |
216
+ | O | O | O | O |
217
+ | O | O | O | O |
218
+ | O | O | O | O |
184
219
  +---+---+---+---+}.gsub(/[^\S\n]{2,}/, '')}
185
220
 
186
221
  let(:filled_formatted_table) {%{+---+---+---+---+
@@ -191,18 +226,85 @@ describe Bitmap do
191
226
  +---+---+---+---+}.gsub(/[^\S\n]{2,}/, '')}
192
227
 
193
228
  it 'should output a formatted table' do
194
- expect(subject.command(["S"]).to_s).to eq(formatted_table)
229
+ expect(subject.command(["T"]).to_s).to eq(formatted_table)
195
230
  end
196
231
 
197
232
  it 'should output a correctly formatted table after fill command' do
198
233
  subject.command(["F", "3", "3", "J"])
199
234
 
200
- expect(subject.command(["S"]).to_s).to eq(filled_formatted_table)
235
+ expect(subject.command(["T"]).to_s).to eq(filled_formatted_table)
236
+ end
237
+ end
238
+ end
239
+
240
+ describe 'the rotate command' do
241
+ it_should_behave_like "a command requiring an initialised bitmap", "R"
242
+
243
+ context 'when the bitmap is initialised' do
244
+ before(:example) do
245
+ setup_pixels(subject, 4, 4)
246
+ end
247
+
248
+ it 'should rotate the bitmap 90 degrees clockwise' do
249
+ subject.command(["H", "1", "4", "1", "X"])
250
+ subject.command(["H", "1", "4", "4", "Z"])
251
+ subject.command(["R"])
252
+
253
+ expect(subject.pixels).to eq([["Z","O","O","X"],
254
+ ["Z","O","O","X"],
255
+ ["Z","O","O","X"],
256
+ ["Z","O","O","X"]])
257
+ end
258
+ end
259
+ end
260
+
261
+ describe 'the mirror command' do
262
+ it_should_behave_like "a command requiring an initialised bitmap", "M"
263
+
264
+ context 'when the bitmap is initialised' do
265
+ before(:example) do
266
+ setup_pixels(subject, 4, 4)
267
+ end
268
+
269
+ it 'should mirror the bitmap on the vertical axis' do
270
+ subject.command(["H", "1", "4", "1", "W"])
271
+ subject.command(["H", "1", "4", "4", "X"])
272
+ subject.command(["V", "1", "1", "4", "Y"])
273
+ subject.command(["V", "4", "1", "4", "Z"])
274
+ subject.command(["M"])
275
+
276
+ expect(subject.pixels).to eq([["Z","W","W","Y"],
277
+ ["Z","O","O","Y"],
278
+ ["Z","O","O","Y"],
279
+ ["Z","X","X","Y"]])
280
+ end
281
+ end
282
+ end
283
+
284
+ describe 'the invert command' do
285
+ it_should_behave_like "a command requiring an initialised bitmap", "N"
286
+
287
+ context 'when the bitmap is initialised' do
288
+ before(:example) do
289
+ setup_pixels(subject, 4, 4)
290
+ end
291
+
292
+ it 'should mirror the bitmap on the vertical axis' do
293
+ subject.command(["H", "1", "4", "1", "W"])
294
+ subject.command(["H", "1", "4", "4", "X"])
295
+ subject.command(["V", "1", "1", "4", "Y"])
296
+ subject.command(["V", "4", "1", "4", "Z"])
297
+ subject.command(["N"])
298
+
299
+ expect(subject.pixels).to eq([["B","D","D","A"],
300
+ ["B","L","L","A"],
301
+ ["B","L","L","A"],
302
+ ["B","C","C","A"]])
201
303
  end
202
304
  end
203
305
  end
204
306
 
205
- def setup_pixels(subject, columns, rows, color="0")
307
+ def setup_pixels(subject, columns, rows, color="O")
206
308
  subject.columns = columns
207
309
  subject.rows = rows
208
310
  subject.pixels = Array.new(rows) { Array.new(columns) { color } }
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'BaseCommand' do
4
+
5
+ subject { Commands::BaseCommand.new }
6
+
7
+ context 'as an abstract class' do
8
+ it 'raises a NotImplementedError on any methods called' do
9
+ expect{subject.command_id}.to raise_error(NotImplementedError)
10
+ expect{subject.process_command(nil, nil)}.to raise_error(NotImplementedError)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ require 'bitmapped/exceptions'
4
+
5
+ describe Validators::ValidateBitmapInitialised do
6
+
7
+ subject { Validators::ValidateBitmapInitialised }
8
+
9
+ context 'given an initialised bitmap' do
10
+
11
+ let(:bitmap) { Bitmap.new }
12
+
13
+ it 'should not raise a BitmapNotInitialised error' do
14
+ bitmap.command(["I", "4", "4"])
15
+
16
+ expect{subject.parse_and_validate(bitmap)}.to_not raise_error
17
+ end
18
+ end
19
+
20
+ context 'given an uninitialised bitmap' do
21
+
22
+ let(:invalid_inputs) { [["A", "2"], ["2", "Z"], ["99"]] }
23
+
24
+ it 'should raise a BitmapNotInitialised error' do
25
+ invalid_inputs.each do |input|
26
+ expect{Validators::ValidateColumnRowInput.parse_and_validate(input)}.to raise_error(ParsingError)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -3,6 +3,9 @@ require 'spec_helper'
3
3
  require 'bitmapped/exceptions'
4
4
 
5
5
  describe Validators::ValidateColumnRowInput do
6
+
7
+ subject { Validators::ValidateColumnRowInput }
8
+
6
9
  context 'given valid input' do
7
10
 
8
11
  let(:valid_inputs) { [["2", "2"], ["2", "3"], ["10", "99"]] }
@@ -10,7 +13,7 @@ describe Validators::ValidateColumnRowInput do
10
13
 
11
14
  it 'should return an array of parsed values' do
12
15
  valid_inputs.each_with_index do |input, index|
13
- expect(Validators::ValidateColumnRowInput.parse_and_validate(input)).to eq(outputs[index])
16
+ expect(subject.parse_and_validate(input)).to eq(outputs[index])
14
17
  end
15
18
  end
16
19
  end
@@ -21,7 +24,7 @@ describe Validators::ValidateColumnRowInput do
21
24
 
22
25
  it 'should return an error' do
23
26
  invalid_inputs.each do |input|
24
- expect{Validators::ValidateColumnRowInput.parse_and_validate(input)}.to raise_error(ParsingError)
27
+ expect{subject.parse_and_validate(input)}.to raise_error(ParsingError)
25
28
  end
26
29
  end
27
30
  end
@@ -3,6 +3,9 @@ require 'spec_helper'
3
3
  require 'bitmapped/exceptions'
4
4
 
5
5
  describe Validators::ValidateFillInput do
6
+
7
+ subject { Validators::ValidateFillInput }
8
+
6
9
  context 'given valid input' do
7
10
 
8
11
  let(:valid_inputs) { [["2", "2", "C"], ["2", "3", "X"], ["10", "99", "Y"]] }
@@ -10,7 +13,7 @@ describe Validators::ValidateFillInput do
10
13
 
11
14
  it 'should return an array of parsed values' do
12
15
  valid_inputs.each_with_index do |input, index|
13
- expect(Validators::ValidateFillInput.parse_and_validate(input)).to eq(outputs[index])
16
+ expect(subject.parse_and_validate(input)).to eq(outputs[index])
14
17
  end
15
18
  end
16
19
  end
@@ -21,7 +24,7 @@ describe Validators::ValidateFillInput do
21
24
 
22
25
  it 'should return an error' do
23
26
  invalid_inputs.each do |input|
24
- expect{Validators::ValidateFillInput.parse_and_validate(input)}.to raise_error(ParsingError)
27
+ expect{subject.parse_and_validate(input)}.to raise_error(ParsingError)
25
28
  end
26
29
  end
27
30
  end
@@ -3,6 +3,9 @@ require 'spec_helper'
3
3
  require 'bitmapped/exceptions'
4
4
 
5
5
  describe Validators::ValidationHelper do
6
+
7
+ subject { Validators::ValidationHelper }
8
+
6
9
  context 'given valid input' do
7
10
 
8
11
  let(:valid_inputs) { [" A", "B", "C "] }
@@ -10,7 +13,7 @@ describe Validators::ValidationHelper do
10
13
 
11
14
  it 'should return an array of parsed values' do
12
15
  valid_inputs.each_with_index do |input, index|
13
- expect(Validators::ValidationHelper.parse_color(input)).to eq(outputs[index])
16
+ expect(subject.parse_color(input)).to eq(outputs[index])
14
17
  end
15
18
  end
16
19
  end
@@ -21,7 +24,7 @@ describe Validators::ValidationHelper do
21
24
 
22
25
  it 'should return an error' do
23
26
  invalid_inputs.each do |input|
24
- expect{Validators::ValidationHelper.parse_color(input)}.to raise_error(ParsingError)
27
+ expect{subject.parse_color(input)}.to raise_error(ParsingError)
25
28
  end
26
29
  end
27
30
  end
@@ -3,6 +3,9 @@ require 'spec_helper'
3
3
  require 'bitmapped/exceptions'
4
4
 
5
5
  describe Validators::ValidateSegmentInput do
6
+
7
+ subject { Validators::ValidateSegmentInput }
8
+
6
9
  context 'given valid input' do
7
10
 
8
11
  let(:valid_inputs) { [["2", "2", "2", "C"], ["2", "3", "3", "X"], ["10", "99", "1000", "Y"]] }
@@ -10,7 +13,7 @@ describe Validators::ValidateSegmentInput do
10
13
 
11
14
  it 'should return an array of parsed values' do
12
15
  valid_inputs.each_with_index do |input, index|
13
- expect(Validators::ValidateSegmentInput.parse_and_validate(input)).to eq(outputs[index])
16
+ expect(subject.parse_and_validate(input)).to eq(outputs[index])
14
17
  end
15
18
  end
16
19
  end
@@ -21,7 +24,7 @@ describe Validators::ValidateSegmentInput do
21
24
 
22
25
  it 'should return an error' do
23
26
  invalid_inputs.each do |input|
24
- expect{Validators::ValidateSegmentInput.parse_and_validate(input)}.to raise_error(ParsingError)
27
+ expect{subject.parse_and_validate(input)}.to raise_error(ParsingError)
25
28
  end
26
29
  end
27
30
  end
metadata CHANGED
@@ -1,15 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bitmapped
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ashley Connor
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-26 00:00:00.000000000 Z
11
+ date: 2015-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.8'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.8'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rdoc
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.4'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.4'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubygems-tasks
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.2'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.2'
13
83
  - !ruby/object:Gem::Dependency
14
84
  name: terminal-table
15
85
  requirement: !ruby/object:Gem::Requirement
@@ -51,16 +121,35 @@ files:
51
121
  - lib/bitmapped.rb
52
122
  - lib/bitmapped/bitmap.rb
53
123
  - lib/bitmapped/cli.rb
124
+ - lib/bitmapped/commands/base_command.rb
125
+ - lib/bitmapped/commands/clear_command.rb
126
+ - lib/bitmapped/commands/commands_helper.rb
127
+ - lib/bitmapped/commands/exit_command.rb
128
+ - lib/bitmapped/commands/fill_command.rb
129
+ - lib/bitmapped/commands/horizontal_line_command.rb
130
+ - lib/bitmapped/commands/initialiser_command.rb
131
+ - lib/bitmapped/commands/invert_command.rb
132
+ - lib/bitmapped/commands/mirror_command.rb
133
+ - lib/bitmapped/commands/pixel_fill_command.rb
134
+ - lib/bitmapped/commands/print_fancy_table_command.rb
135
+ - lib/bitmapped/commands/print_table_command.rb
136
+ - lib/bitmapped/commands/rotate_command.rb
137
+ - lib/bitmapped/commands/vertical_line_command.rb
54
138
  - lib/bitmapped/exceptions.rb
139
+ - lib/bitmapped/validators/validate_bitmap_initialised.rb
55
140
  - lib/bitmapped/validators/validate_column_row_input.rb
141
+ - lib/bitmapped/validators/validate_coordinates.rb
56
142
  - lib/bitmapped/validators/validate_fill_input.rb
57
143
  - lib/bitmapped/validators/validate_segment_input.rb
144
+ - lib/bitmapped/validators/validated_bitmap_size.rb
58
145
  - lib/bitmapped/validators/validation_helper.rb
59
146
  - lib/bitmapped/version.rb
60
147
  - spec/bitmap_spec.rb
61
148
  - spec/bitmapped_spec.rb
149
+ - spec/command/base_command_spec.rb
62
150
  - spec/exceptions_spec.rb
63
151
  - spec/spec_helper.rb
152
+ - spec/validators/validate_bitmap_initialised_spec.rb
64
153
  - spec/validators/validate_column_row_input_spec.rb
65
154
  - spec/validators/validate_fill_input_spec.rb
66
155
  - spec/validators/validate_helper_spec.rb
@@ -92,8 +181,10 @@ summary: Bitmap CLI program
92
181
  test_files:
93
182
  - spec/bitmap_spec.rb
94
183
  - spec/bitmapped_spec.rb
184
+ - spec/command/base_command_spec.rb
95
185
  - spec/exceptions_spec.rb
96
186
  - spec/spec_helper.rb
187
+ - spec/validators/validate_bitmap_initialised_spec.rb
97
188
  - spec/validators/validate_column_row_input_spec.rb
98
189
  - spec/validators/validate_fill_input_spec.rb
99
190
  - spec/validators/validate_helper_spec.rb