bitmap_compiler 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6b886f6b74288b45633834252af0f68cf8c132c2
4
- data.tar.gz: e917bfbf7d12ac7c0c3b9a4ff59b8b543a4e6af7
3
+ metadata.gz: aafbe44681ab6a478eca0daa40fb3f8f64090dc3
4
+ data.tar.gz: 0f4e958a789fe9811eea5c5da73b5336c1b59237
5
5
  SHA512:
6
- metadata.gz: d5cf3c89cf783bb2684d2fe5bd6587508aa592782c6122a39234b87225b27c17a3de3a04118c9c1f9cd82cf25ea486a993424fcdf2491ee97db75bb1d9001a27
7
- data.tar.gz: 84de4e9ceca35c8c0ca0c1816a44960b9ecde19cd8a5b790411bc9fc4ed37a7811e8e46a00805a66320ed6a5c1cc0da944eceab9214442bad5ba341404318c77
6
+ metadata.gz: 39b0bfe42961adc68ca05abe7c9a0d73fa5f06910c61f406b59439a4cedbec3b33c97c7cd03834e0185700a59ed80ff7190a4739ed8910c70ff4be6e1806915e
7
+ data.tar.gz: 34b775a0ff3ce50a9ed9aca5789473e3e2f099e09f09f9362f25243cd09b4f33cf0799b832275c4aa1cf398a6923f35566a685e6507357df0030500bcb4b4471
@@ -3,12 +3,19 @@
3
3
  ## HEAD Unreleased
4
4
  ### Latest update: 2018-08-29
5
5
 
6
+ ### Chores
7
+
8
+ - [PR #11](https://github.com/vbrazo/bitmap_compiler/pull/11) Add gem version badge [@vbrazo](https://github.com/vbrazo)
9
+
6
10
  ### Documentation
7
11
 
12
+ - [PR #12](https://github.com/vbrazo/bitmap_compiler/pull/12) Add documentation for classes [@vbrazo](https://github.com/vbrazo)
8
13
  - [PR #10](https://github.com/vbrazo/bitmap_compiler/pull/10) Update README.md [@vbrazo](https://github.com/vbrazo)
9
14
 
10
15
  ### Feature Request/Enhancement
11
-
16
+
17
+ - [PR #14](https://github.com/vbrazo/bitmap_compiler/pull/14) Add CLI missing specs [@vbrazo](https://github.com/vbrazo)
18
+ - [PR #13](https://github.com/vbrazo/bitmap_compiler/pull/13) Use Error classes instead of printing the output [@vbrazo](https://github.com/vbrazo)
12
19
  - [PR #9](https://github.com/vbrazo/bitmap_compiler/pull/9) Add CLI [@vbrazo](https://github.com/vbrazo)
13
20
  - [PR #8](https://github.com/vbrazo/bitmap_compiler/pull/8) Add Error Pattern and its subclasses [@vbrazo](https://github.com/vbrazo)
14
21
  - [PR #7](https://github.com/vbrazo/bitmap_compiler/pull/7) Add BitmapController actions [@vbrazo](https://github.com/vbrazo)
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bitmap_compiler (0.1.0)
4
+ bitmap_compiler (0.2.0)
5
5
  thor
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -1,17 +1,15 @@
1
- [![Build Status](https://travis-ci.org/vbrazo/bitmap_compiler.svg?branch=master)](https://travis-ci.org/vbrazo/bitmap_compiler) [![Maintainability](https://api.codeclimate.com/v1/badges/1cc557f6b323fd458c12/maintainability)](https://codeclimate.com/github/vbrazo/bitmap_compiler/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/1cc557f6b323fd458c12/test_coverage)](https://codeclimate.com/github/vbrazo/bitmap_compiler/test_coverage)
1
+ # Bitmap Compiler [![Build Status](https://travis-ci.org/vbrazo/bitmap_compiler.svg?branch=master)](https://travis-ci.org/vbrazo/bitmap_compiler) [![Gem Version](https://badge.fury.io/rb/bitmap_compiler.svg)](https://badge.fury.io/rb/bitmap_compiler) [![Maintainability](https://api.codeclimate.com/v1/badges/1cc557f6b323fd458c12/maintainability)](https://codeclimate.com/github/vbrazo/bitmap_compiler/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/1cc557f6b323fd458c12/test_coverage)](https://codeclimate.com/github/vbrazo/bitmap_compiler/test_coverage)
2
2
 
3
- # BitmapCompiler
4
-
5
- This is the Bitmap compiler gem! It aims to build a Bitmap given an input file.
3
+ This is the Bitmap compiler gem! It aims to build a bitmap given an input file.
6
4
 
7
5
  You can check on `spec/support` folder to see examples. The supported commands are:
8
6
 
9
7
  ```
10
- I M N - Create a new M x N image with all pixels coloured white (O).
11
- C - Clears the table, setting all pixels to white (O).
12
- L X Y C - Colours the pixel (X,Y) with colour C.
13
- V X Y1 Y2 C - Draw a vertical segment of colour C in column X between rows Y1 and Y2 (inclusive).
14
- H X1 X2 Y C - Draw a horizontal segment of colour C in row Y between columns X1 and X2 (inclusive).
8
+ I M N - Create a new M x N image with all pixels coloured white (O)
9
+ C - Clears the table, setting all pixels to white (O)
10
+ L X Y C - Colours the pixel (X,Y) with colour C
11
+ V X Y1 Y2 C - Draw a vertical segment of colour C in column X between rows Y1 and Y2 (inclusive)
12
+ H X1 X2 Y C - Draw a horizontal segment of colour C in row Y between columns X1 and X2 (inclusive)
15
13
  S - Show the contents of the current image
16
14
  ```
17
15
 
@@ -41,37 +39,22 @@ OWOOO
41
39
  OWOOO
42
40
  ```
43
41
 
44
- ## Installation
45
-
46
- Add this line to your application's Gemfile:
47
-
48
- ```ruby
49
- gem 'bitmap_compiler'
50
- ```
51
-
52
- And then execute:
53
-
54
- $ bundle
55
-
56
- Or install it yourself as:
57
-
58
- $ gem install bitmap_compiler
59
-
60
42
  ## Usage
61
43
 
62
- You can use the application programmatically by installing the gem and using on the Ruby environment (You can run `bin/console` for this). Check the examples folder for more examples.
44
+ ### Ruby console
45
+
46
+ You can use the application programmatically by installing the gem and using on the Ruby environment (You can run `bin/console` for this). If you want to test the Editor class after launching the console, just run:
63
47
 
64
48
  ```ruby
65
49
  BitmapCompiler::Core::Editor.new.run('spec/support/show.txt')
66
50
  ```
67
51
 
68
- There is also a CLI provided that can be used.
69
-
70
52
  ### CLI
71
53
 
72
54
  The application also has a CLI built-in that can be used directly on any *nix terminal.
73
55
 
74
56
  ```
57
+ $ bitmap_compiler process_file -f=spec/support/show.txt
75
58
  $ bitmap_compiler process_file --file=spec/support/show.txt
76
59
  ```
77
60
 
@@ -81,9 +64,31 @@ Use the help command for more information.
81
64
  $ bitmap_compiler help process_file
82
65
  ```
83
66
 
67
+ ### Rails
68
+
69
+ Add this line to your application's Gemfile:
70
+
71
+ ```ruby
72
+ gem 'bitmap_compiler'
73
+ ```
74
+
75
+ And then execute:
76
+
77
+ $ bundle
78
+
79
+ Or install it yourself as:
80
+
81
+ $ gem install bitmap_compiler
82
+
83
+ After that you should be able to use the `Editor` class in your `rails console` or inside your application:
84
+
85
+ ```ruby
86
+ BitmapCompiler::Core::Editor.new.run("Specify the file path")
87
+ ```
88
+
84
89
  ## Development
85
90
 
86
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `bundle exec rspec spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
91
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `bundle exec rspec spec` to run the tests.
87
92
 
88
93
  ## Contributing
89
94
 
@@ -92,3 +97,4 @@ See [CONTRIBUTING.md](https://github.com/vbrazo/bitmap_compiler/blob/master/CONT
92
97
  ## License
93
98
 
94
99
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
100
+
@@ -17,5 +17,5 @@ require 'bitmap_compiler/core/errors/unknown_command_error'
17
17
  require 'bitmap_compiler/core/editor'
18
18
  require 'bitmap_compiler/core/output'
19
19
 
20
- # Bitmap gem global module
20
+ # BitmapCompiler global module
21
21
  module BitmapCompiler; end
@@ -2,10 +2,11 @@
2
2
 
3
3
  require 'thor'
4
4
 
5
- # Class responsible for handle the command line interface
5
+ # Responsibility: handle the command line interface
6
6
  module BitmapCompiler
7
7
  class CLI < Thor
8
8
  desc 'process_file BITMAP', 'Bitmap compiler via CLI'
9
+
9
10
  option :file, type: :string, aliases: [:f]
10
11
 
11
12
  # CLI method to call the Editor
@@ -18,8 +19,6 @@ module BitmapCompiler
18
19
 
19
20
  private
20
21
 
21
- attr_reader :bitmap_compiler
22
-
23
22
  def bitmap_compiler
24
23
  @bitmap_compiler ||= BitmapCompiler::Core::Editor.new
25
24
  end
@@ -1,5 +1,6 @@
1
1
  module BitmapCompiler
2
2
  module Core
3
+ # Bitmap entity
3
4
  class Bitmap
4
5
  MIN_WIDTH = MIN_HEIGHT = 1
5
6
  MAX_WIDTH = MAX_HEIGHT = 250
@@ -1,6 +1,6 @@
1
- # BitmapCompiler shares role behavior
2
1
  module BitmapCompiler
3
2
  module Core
3
+ # BitmapActions shares role behavior
4
4
  module BitmapActions
5
5
  def change_color(row:, column:, color: Bitmap::STANDARD_COLOR)
6
6
  return image_not_found unless bitmap
@@ -8,7 +8,7 @@ module BitmapCompiler
8
8
  if bitmap.change_pixel(row, column, color)
9
9
  return_output
10
10
  else
11
- return_output(message: InvalidPixelError.new.message)
11
+ raise BitmapCompiler::Core::Errors::InvalidPixelError
12
12
  end
13
13
  end
14
14
 
@@ -18,7 +18,7 @@ module BitmapCompiler
18
18
  if bitmap.clear
19
19
  return_output
20
20
  else
21
- return_output(message: ImageNotClearedError.new.message)
21
+ raise BitmapCompiler::Core::Errors::ImageNotClearedError
22
22
  end
23
23
  end
24
24
 
@@ -27,7 +27,7 @@ module BitmapCompiler
27
27
  args[:height].between?(Bitmap::MIN_HEIGHT, Bitmap::MAX_HEIGHT)
28
28
  return_output(bitmap: Bitmap.new(args[:width], args[:height]))
29
29
  else
30
- return_output(message: InvalidDimensionsError.new.message)
30
+ raise BitmapCompiler::Core::Errors::InvalidDimensionsError
31
31
  end
32
32
  end
33
33
 
@@ -47,12 +47,12 @@ module BitmapCompiler
47
47
 
48
48
  return_output
49
49
  else
50
- return_output(message: InvalidCoordinatesError.new.message)
50
+ raise Errors::InvalidCoordinatesError
51
51
  end
52
52
  end
53
53
 
54
54
  def change_vertical_line(row:, start_column:, end_column:, color: Bitmap::STANDARD_COLOR)
55
- return image_not_found unless bitmap
55
+ image_not_found unless bitmap
56
56
 
57
57
  if bitmap.valid_vertical_line_coordinates?(row, start_column, end_column)
58
58
  (start_column..end_column).each do |column_index|
@@ -61,18 +61,18 @@ module BitmapCompiler
61
61
 
62
62
  return_output
63
63
  else
64
- return_output(message: InvalidCoordinatesError.new.message)
64
+ raise BitmapCompiler::Core::Errors::InvalidCoordinatesError
65
65
  end
66
66
  end
67
67
 
68
68
  def unknown_command
69
- return_output(message: UnknownCommandError.new.message)
69
+ raise BitmapCompiler::Core::Errors::UnknownCommandError
70
70
  end
71
71
 
72
72
  private
73
73
 
74
74
  def image_not_found
75
- return_output(message: NoImageFoundError.new.message)
75
+ raise BitmapCompiler::Core::Errors::NoImageFoundError
76
76
  end
77
77
 
78
78
  def return_output(args = {})
@@ -2,6 +2,7 @@
2
2
 
3
3
  module BitmapCompiler
4
4
  module Core
5
+ # Responsibility: execute commands
5
6
  class BitmapController
6
7
  include BitmapActions
7
8
 
@@ -19,10 +20,12 @@ module BitmapCompiler
19
20
  create_bitmap(bitmap_hash)
20
21
  when 'C'
21
22
  clear
23
+ when 'L'
24
+ change_color(pixel_hash)
22
25
  when 'V'
23
- change_vertical_line(change_vertical_line_hash)
26
+ change_vertical_line(vertical_line_hash)
24
27
  when 'H'
25
- change_horizontal_line(change_horizontal_line_hash)
28
+ change_horizontal_line(horizontal_line_hash)
26
29
  when 'S'
27
30
  print
28
31
  else
@@ -39,7 +42,7 @@ module BitmapCompiler
39
42
  }
40
43
  end
41
44
 
42
- def change_horizontal_line_hash
45
+ def horizontal_line_hash
43
46
  {
44
47
  start_row: Integer(input[1]),
45
48
  end_row: Integer(input[2]),
@@ -48,7 +51,15 @@ module BitmapCompiler
48
51
  }
49
52
  end
50
53
 
51
- def change_vertical_line_hash
54
+ def pixel_hash
55
+ {
56
+ row: Integer(input[1]),
57
+ column: Integer(input[2]),
58
+ color: input[3]
59
+ }
60
+ end
61
+
62
+ def vertical_line_hash
52
63
  {
53
64
  row: Integer(input[1]),
54
65
  start_column: Integer(input[2]),
@@ -2,6 +2,7 @@
2
2
 
3
3
  module BitmapCompiler
4
4
  module Core
5
+ # Responsibility: process the files
5
6
  class Editor
6
7
  attr_reader :bitmap
7
8
 
@@ -10,7 +11,7 @@ module BitmapCompiler
10
11
  end
11
12
 
12
13
  def run(file)
13
- raise IncorrectFileError if file.nil? || !File.exist?(file)
14
+ raise BitmapCompiler::Core::Errors::IncorrectFileError if file.nil? || !File.exist?(file)
14
15
 
15
16
  File.open(file).each { |line| process_line(line.chomp) }
16
17
  end
@@ -26,7 +27,7 @@ module BitmapCompiler
26
27
  private
27
28
 
28
29
  def bitmap_controller
29
- BitmapController.new(bitmap)
30
+ @bitmap_controller ||= BitmapController.new(bitmap)
30
31
  end
31
32
 
32
33
  def execute(input)
@@ -1,8 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # BitmapError is a Template Method Pattern for our Error classes
4
- class BitmapError < StandardError
5
- def message
6
- raise NotImplementedError
3
+ # Template Method Pattern for our Error classes
4
+ module BitmapCompiler
5
+ module Core
6
+ module Errors
7
+ class BitmapError < StandardError
8
+ def message
9
+ raise NotImplementedError
10
+ end
11
+ end
12
+ end
7
13
  end
8
14
  end
@@ -1,7 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class ImageNotClearedError < BitmapError
4
- def message
5
- 'Unable to clear Image'
3
+ module BitmapCompiler
4
+ module Core
5
+ module Errors
6
+ class ImageNotClearedError < BitmapError
7
+ def message
8
+ 'Unable to clear Image'
9
+ end
10
+ end
11
+ end
6
12
  end
7
13
  end
@@ -1,7 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class IncorrectFileError < BitmapError
4
- def message
5
- 'Incorrect File'
3
+ module BitmapCompiler
4
+ module Core
5
+ module Errors
6
+ class IncorrectFileError < BitmapError
7
+ def message
8
+ 'Incorrect File'
9
+ end
10
+ end
11
+ end
6
12
  end
7
13
  end
@@ -1,7 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class InvalidCoordinatesError < BitmapError
4
- def message
5
- 'Invalid Coordinates'
3
+ module BitmapCompiler
4
+ module Core
5
+ module Errors
6
+ class InvalidCoordinatesError < BitmapError
7
+ def message
8
+ 'Invalid Coordinates'
9
+ end
10
+ end
11
+ end
6
12
  end
7
13
  end
@@ -1,7 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class InvalidDimensionsError < BitmapError
4
- def message
5
- 'Invalid height and/or width'
3
+ module BitmapCompiler
4
+ module Core
5
+ module Errors
6
+ class InvalidDimensionsError < BitmapError
7
+ def message
8
+ 'Invalid height and/or width'
9
+ end
10
+ end
11
+ end
6
12
  end
7
13
  end
@@ -1,7 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class InvalidPixelError < BitmapError
4
- def message
5
- 'Invalid Pixel'
3
+ module BitmapCompiler
4
+ module Core
5
+ module Errors
6
+ class InvalidPixelError < BitmapError
7
+ def message
8
+ 'Invalid Pixel'
9
+ end
10
+ end
11
+ end
6
12
  end
7
13
  end
@@ -1,7 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class NoImageFoundError < BitmapError
4
- def message
5
- 'Image Not Found'
3
+ module BitmapCompiler
4
+ module Core
5
+ module Errors
6
+ class NoImageFoundError < BitmapError
7
+ def message
8
+ 'Image Not Found'
9
+ end
10
+ end
11
+ end
6
12
  end
7
13
  end
@@ -1,7 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class UnknownCommandError < BitmapError
4
- def message
5
- 'Unknown Command'
3
+ module BitmapCompiler
4
+ module Core
5
+ module Errors
6
+ class UnknownCommandError < BitmapError
7
+ def message
8
+ 'Unknown Command'
9
+ end
10
+ end
11
+ end
6
12
  end
7
13
  end
@@ -2,6 +2,7 @@
2
2
 
3
3
  module BitmapCompiler
4
4
  module Core
5
+ # Output entity
5
6
  class Output
6
7
  attr_reader :bitmap, :message
7
8
 
@@ -1,3 +1,3 @@
1
1
  module BitmapCompiler
2
- VERSION = '0.1.0'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bitmap_compiler
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
  - Vitor Oliveira
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-08-30 00:00:00.000000000 Z
11
+ date: 2018-08-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor