drawille 0.0.1 → 0.1.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.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MDIyMDkxN2Y3YmYxYWEzMDMwZDBlNGQ5MDE1MzAyZTM5MWNlZDZjMA==
5
+ data.tar.gz: !binary |-
6
+ Y2VmODE0YmRhMzZmNzI1NGZmOTAwNmUxODEzNDM0MTQwNDcwY2NiMQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ ZGYxYTk4OTQyZWIzYzRlMzBmNjhhMjdjZDc1OTdlMzZmN2IzYTNkNzE5NTI5
10
+ MGUwMjc1NjU1OGY2ZGEzNWFlNGEzNzliY2U2NjY3MmI0MDNjNWFkZGRlODg5
11
+ YzZlOTlhMzRkODZmZjY1M2VjODY1MmMzMzQ3ZTNjZDRhMDE1NWM=
12
+ data.tar.gz: !binary |-
13
+ MjJhOGU4MjJkMGQ1NmMyMDkzNDViYjY1Mjc0MjlhZDc3ODk1YWVkZWIzYmNl
14
+ YWViOTc3ODZmYWIzMWZmNDliY2EwM2UzODE2YjY4MzgxMWM0ZjE1Yzk0N2Rl
15
+ MDdmYjhkY2RmYjg0ZGFkMjY1MTJkOGQxYzNjM2MzMzk1YjlhY2Q=
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- # Specify your gem's dependencies in ruby-drawille.gemspec
3
+ # Specify your gem's dependencies in drawille.gemspec
4
4
  gemspec
data/README.md CHANGED
@@ -11,7 +11,7 @@ Drawing in terminal with Unicode [Braille][] characters. Implementation based on
11
11
 
12
12
  Add this line to your application's Gemfile:
13
13
 
14
- gem 'ruby-drawille'
14
+ gem 'drawille'
15
15
 
16
16
  And then execute:
17
17
 
@@ -19,7 +19,7 @@ And then execute:
19
19
 
20
20
  Or install it yourself as:
21
21
 
22
- $ gem install ruby-drawille
22
+ $ gem install drawille
23
23
 
24
24
  ## Usage
25
25
 
data/Rakefile CHANGED
@@ -1 +1,7 @@
1
1
  require "bundler/gem_tasks"
2
+
3
+ require 'rspec/core/rake_task'
4
+
5
+ RSpec::Core::RakeTask.new(:spec)
6
+
7
+ task :default => :spec
@@ -1,15 +1,15 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'ruby-drawille/version'
4
+ require 'drawille/version'
5
5
 
6
6
  Gem::Specification.new do |gem|
7
7
  gem.name = "drawille"
8
8
  gem.version = Drawille::VERSION
9
9
  gem.authors = ["Marcin Skirzynski"]
10
- gem.email = ["marcin.skirzynski@gmail.com"]
11
- gem.description = %q{Drawing in terminal with Unicode Braille characters.}
10
+ gem.description = %q{Drawing in terminal.}
12
11
  gem.summary = %q{Drawing in terminal with Unicode Braille characters.}
12
+ gem.license = "MIT"
13
13
  gem.homepage = "https://github.com/maerch/ruby-drawille"
14
14
 
15
15
  gem.files = `git ls-files`.split($/)
@@ -1,10 +1,12 @@
1
1
  # -*- encoding: utf-8 -*-
2
- require "ruby-drawille/version"
2
+ require "drawille/version"
3
3
 
4
4
  module Drawille
5
5
 
6
6
  class Canvas
7
7
 
8
+ attr_reader :chars
9
+
8
10
  PIXEL_MAP = [[0x01, 0x08],
9
11
  [0x02, 0x10],
10
12
  [0x04, 0x20],
@@ -25,6 +27,27 @@ module Drawille
25
27
  @chars[py][px] |= PIXEL_MAP[y % 4][x % 2]
26
28
  end
27
29
 
30
+ def unset x, y
31
+ x, y, px, py = convert x, y
32
+ @chars[py][px] &= ~PIXEL_MAP[y % 4][x % 2]
33
+ end
34
+
35
+ def get x, y
36
+ x, y, px, py = convert x, y
37
+ @chars[py][px] & PIXEL_MAP[y % 4][x % 2] != 0
38
+ end
39
+
40
+ def []= x, y, bool
41
+ bool ? set(x, y) : unset(x, y)
42
+ end
43
+
44
+ alias_method :[], :get
45
+
46
+ def toggle x, y
47
+ x, y, px, py = convert x, y
48
+ @chars[py][px] & PIXEL_MAP[y % 4][x % 2] == 0 ? set(x, y) : unset(x, y)
49
+ end
50
+
28
51
  def row y, options={}
29
52
  row = @chars[y]
30
53
  min = options[:min_x] || row.keys.min
@@ -45,6 +68,10 @@ module Drawille
45
68
  rows(options).join("\n")
46
69
  end
47
70
 
71
+ def char x, y
72
+ to_braille @chars[y][x]
73
+ end
74
+
48
75
  private
49
76
 
50
77
  def convert x, y
@@ -1,3 +1,3 @@
1
1
  module Drawille
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -0,0 +1,107 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ describe Drawille do
5
+ subject { Drawille::Canvas.new }
6
+
7
+ describe '#set' do
8
+ it 'sets pixel in the first char in the first row' do
9
+ set_and_check_char (0..1), (0..3), 0, 0
10
+ end
11
+
12
+ it 'sets pixel in the third char in the first row' do
13
+ set_and_check_char (4..5), (0..3), 2, 0
14
+ end
15
+
16
+ it 'sets pixel in the second char in the second row' do
17
+ set_and_check_char (2..3), (4..7), 1, 1
18
+ end
19
+ end
20
+
21
+ describe "#unset" do
22
+ it 'sets and unsets a pixel' do
23
+ subject.set(0, 0)
24
+ expect(subject.char(0, 0)).to eq BRAILLE[0]
25
+ subject.unset(0, 0)
26
+ expect(subject.char(0, 0)).to eq BRAILLE.last
27
+ end
28
+
29
+ it 'sets four pixel but only unsets one' do
30
+ subject.set(0, 0)
31
+ subject.set(0, 1)
32
+ subject.set(1, 0)
33
+ subject.set(1, 1)
34
+ expect(subject.char(0, 0)).to eq BRAILLE[3]
35
+ subject.unset(1, 1)
36
+ expect(subject.char(0, 0)).to eq BRAILLE[2]
37
+ end
38
+ end
39
+
40
+ describe "#get" do
41
+ it 'returns the state of a pixel' do
42
+ subject.set(1, 1)
43
+ expect(subject.get(0, 0)).to eq false
44
+ expect(subject.get(1, 1)).to eq true
45
+ end
46
+ end
47
+
48
+ describe "#toggle" do
49
+ it 'toggles a pixel' do
50
+ subject.toggle(0, 0)
51
+ subject.toggle(1, 0)
52
+ expect(subject.char(0, 0)).to eq BRAILLE[1]
53
+ subject.toggle(1, 0)
54
+ expect(subject.char(0, 0)).to eq BRAILLE[0]
55
+ subject.toggle(0, 0)
56
+ expect(subject.char(0, 0)).to eq BRAILLE.last
57
+ end
58
+ end
59
+
60
+ describe "#clear" do
61
+ it 'clears the canvas' do
62
+ subject.set(0, 0)
63
+ subject.set(2, 0)
64
+ expect(subject.char(0, 0)).to eq BRAILLE[0]
65
+ expect(subject.char(1, 0)).to eq BRAILLE[0]
66
+ subject.clear
67
+ expect(subject.char(0, 0)).to eq BRAILLE.last
68
+ expect(subject.char(1, 0)).to eq BRAILLE.last
69
+ end
70
+ end
71
+
72
+ describe '#[]' do
73
+ it 'works with alternate syntax' do
74
+ subject[0, 0] = true
75
+ expect(subject.char(0, 0)).to eq BRAILLE[0]
76
+ expect(subject[0, 0]).to eq true
77
+ expect(subject[1, 0]).to eq false
78
+ subject[0, 0] = false
79
+ expect(subject.char(0, 0)).to eq BRAILLE.last
80
+ expect(subject[0, 0]).to eq false
81
+ end
82
+ end
83
+
84
+ describe "#rows" do
85
+ it 'has over 9 columns and 3 rows' do
86
+ subject.set(0, 1)
87
+ subject.set(4, 4)
88
+ subject.set(8, 5)
89
+ subject.set(16, 8)
90
+
91
+ expect(subject.rows.size).to eq 3
92
+ subject.rows.each do |row|
93
+ expect(row.length).to eq 9
94
+ end
95
+ end
96
+ end
97
+
98
+ describe "#frame" do
99
+ it 'prints a happy sinus' do
100
+ (0..1800).step(10).each do |x|
101
+ subject.set(x/10, 10 + Math.sin(x * Math::PI / 180) * 10)
102
+ end
103
+ expect(subject.frame).to eq IO.read("spec/sinus.dat")
104
+ end
105
+ end
106
+ end
107
+
data/spec/sinus.dat ADDED
@@ -0,0 +1,6 @@
1
+ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠒⠉⠑⠢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠒⠉⠑⠢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠒⠉⠑⠢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠒⠉⠑⠢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠒⠉⠑⠢⠀⠀⠀
2
+ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡐⠁⠀⠀⠀⠀⠑⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡐⠁⠀⠀⠀⠀⠑⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡐⠁⠀⠀⠀⠀⠑⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡐⠁⠀⠀⠀⠀⠑⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡐⠁⠀⠀⠀⠀⠑⡀⠀
3
+ ⠄⠀⠀⠀⠀⠀⠀⠀⠀⠌⠀⠀⠀⠀⠀⠀⠀⠈⠄⠀⠀⠀⠀⠀⠀⠀⠀⠌⠀⠀⠀⠀⠀⠀⠀⠈⠄⠀⠀⠀⠀⠀⠀⠀⠀⠌⠀⠀⠀⠀⠀⠀⠀⠈⠄⠀⠀⠀⠀⠀⠀⠀⠀⠌⠀⠀⠀⠀⠀⠀⠀⠈⠄⠀⠀⠀⠀⠀⠀⠀⠀⠌⠀⠀⠀⠀⠀⠀⠀⠈⠄
4
+ ⠈⢂⠀⠀⠀⠀⠀⢀⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢂⠀⠀⠀⠀⠀⢀⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢂⠀⠀⠀⠀⠀⢀⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢂⠀⠀⠀⠀⠀⢀⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢂⠀⠀⠀⠀⠀⢀⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
5
+ ⠀⠀⠡⣀⠀⢀⡠⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠡⣀⠀⢀⡠⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠡⣀⠀⢀⡠⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠡⣀⠀⢀⡠⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠡⣀⠀⢀⡠⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
6
+ ⠀⠀⠀⠀⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
@@ -0,0 +1,15 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'drawille'
3
+
4
+ BRAILLE = %w[⠁ ⠉ ⠋ ⠛ ⠟ ⠿ ⡿ ⣿ ⠀]
5
+
6
+ def set_and_check_char px_range, py_range, cx, cy
7
+ i = 0
8
+ py_range.each do |y|
9
+ px_range.each do |x|
10
+ subject.set(x, y)
11
+ expect(subject.char(cx, cy)).to eq BRAILLE[i]
12
+ i += 1
13
+ end
14
+ end
15
+ end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: drawille
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
5
- prerelease:
4
+ version: 0.1.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Marcin Skirzynski
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-05-21 00:00:00.000000000 Z
11
+ date: 2014-05-22 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rspec
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ! '>='
20
18
  - !ruby/object:Gem::Version
@@ -22,14 +20,12 @@ dependencies:
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ! '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
- description: Drawing in terminal with Unicode Braille characters.
31
- email:
32
- - marcin.skirzynski@gmail.com
27
+ description: Drawing in terminal.
28
+ email:
33
29
  executables: []
34
30
  extensions: []
35
31
  extra_rdoc_files: []
@@ -39,31 +35,37 @@ files:
39
35
  - LICENSE.txt
40
36
  - README.md
41
37
  - Rakefile
42
- - lib/ruby-drawille.rb
43
- - lib/ruby-drawille/version.rb
44
- - ruby-drawille.gemspec
38
+ - drawille.gemspec
39
+ - lib/drawille.rb
40
+ - lib/drawille/version.rb
41
+ - spec/drawille_spec.rb
42
+ - spec/sinus.dat
43
+ - spec/spec_helper.rb
45
44
  homepage: https://github.com/maerch/ruby-drawille
46
- licenses: []
45
+ licenses:
46
+ - MIT
47
+ metadata: {}
47
48
  post_install_message:
48
49
  rdoc_options: []
49
50
  require_paths:
50
51
  - lib
51
52
  required_ruby_version: !ruby/object:Gem::Requirement
52
- none: false
53
53
  requirements:
54
54
  - - ! '>='
55
55
  - !ruby/object:Gem::Version
56
56
  version: '0'
57
57
  required_rubygems_version: !ruby/object:Gem::Requirement
58
- none: false
59
58
  requirements:
60
59
  - - ! '>='
61
60
  - !ruby/object:Gem::Version
62
61
  version: '0'
63
62
  requirements: []
64
63
  rubyforge_project:
65
- rubygems_version: 1.8.24
64
+ rubygems_version: 2.2.2
66
65
  signing_key:
67
- specification_version: 3
66
+ specification_version: 4
68
67
  summary: Drawing in terminal with Unicode Braille characters.
69
- test_files: []
68
+ test_files:
69
+ - spec/drawille_spec.rb
70
+ - spec/sinus.dat
71
+ - spec/spec_helper.rb