drawille 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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