barretina 0.1.1 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1a14199b8ed783109c50e50c1e6450a253d569175f59c9c7e617f426c066f90e
4
- data.tar.gz: d876a0ae30b5e760cb7092d79dc853e0aff3356ceadfa854f09344bddedac232
3
+ metadata.gz: ffc7c0e9a4bd67952488271345c86b2ac78177de604ca0c66df617c2243c8be4
4
+ data.tar.gz: 578af134723316525a9c79de0094c8395d43671e67ea17cbe19c74a1d2b5d492
5
5
  SHA512:
6
- metadata.gz: ab8ed15ac6d25231aba161fd7012650228f5e3bb2d99891b5216ba9748eb686b72a2141ad97178174cf351abdb8439af580c0bb9fd0e2a574b0e559ff359ccea
7
- data.tar.gz: a4b839a148076f4fc73fbb811301b32946ea9fcd2f53e01fd16f2d93620a2c97e23ba80d62874ca25fe467b28e344eeac10840deba89e62b3871c6ca865a3810
6
+ metadata.gz: 869f990d92768bf90b2cdbafddc91afba9bac0220bce72e8967c6413e44e329b54e6f26f05a78202a4861f990d37c83540decd03666a4032be840033e78ad4e5
7
+ data.tar.gz: 1769112e3d0abe5967e7a11d425481d3156d44d5d515f98c3a89e9158be7513e9b7a58498f335ff2d4f42906b039f6164cff569f32e034272d354d5e24120204
data/Gemfile CHANGED
@@ -4,6 +4,4 @@ source "https://rubygems.org"
4
4
 
5
5
  gemspec
6
6
 
7
- gem "ruby2d", "~> 0.12.1"
8
-
9
- gem "irb", "~> 1.15"
7
+ gem "minitest", "~> 5.25"
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- barretina (0.1.0)
4
+ barretina (0.1.2)
5
5
  irb (~> 1.15)
6
6
  ruby2d (~> 0.12.1)
7
7
 
@@ -9,22 +9,23 @@ GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
11
  date (3.4.1)
12
- erb (5.0.1)
13
- io-console (0.8.0)
12
+ erb (5.0.2)
13
+ io-console (0.8.1)
14
14
  irb (1.15.2)
15
15
  pp (>= 0.6.0)
16
16
  rdoc (>= 4.0.0)
17
17
  reline (>= 0.4.2)
18
+ minitest (5.25.5)
18
19
  pp (0.6.2)
19
20
  prettyprint
20
21
  prettyprint (0.2.0)
21
22
  psych (5.2.6)
22
23
  date
23
24
  stringio
24
- rdoc (6.14.0)
25
+ rdoc (6.14.2)
25
26
  erb
26
27
  psych (>= 4.0.0)
27
- reline (0.6.1)
28
+ reline (0.6.2)
28
29
  io-console (~> 0.5)
29
30
  ruby2d (0.12.1)
30
31
  stringio (3.1.7)
@@ -35,8 +36,7 @@ PLATFORMS
35
36
 
36
37
  DEPENDENCIES
37
38
  barretina!
38
- irb (~> 1.15)
39
- ruby2d (~> 0.12.1)
39
+ minitest (~> 5.25)
40
40
 
41
41
  BUNDLED WITH
42
42
  2.6.9
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- Barretina
1
+ Barretina v0.2.0
2
2
  =========
3
3
  **WORK IN PROGRESS**
4
4
 
@@ -18,6 +18,13 @@ I write in a diary every big commit, and I summarize the evolution of the projec
18
18
 
19
19
  [If you feel some interest, take a look to it now: it's free!](diary.md)
20
20
 
21
+ ## Index of contents
22
+
23
+ - [BCM: Barretina Console Mode](#bcm-barretina-console-mode)
24
+ - [Run BCM](#run-bcm)
25
+ - [Tests](#tests)
26
+ - [Run tests](#run-tests)
27
+
21
28
  ## BCM: Barretina Console Mode
22
29
 
23
30
  BCM is a way to run all Barretina's code without the graphic interface. I created with the intention to test while I work on this project.
@@ -38,3 +45,26 @@ bcm:002:0> q = VectorSpace::Vector.new 2, -3
38
45
  bcm:003:0> p + q
39
46
  -> #<Vector (3, 2)>
40
47
  ```
48
+
49
+ ## Tests
50
+
51
+ I use [Minitest](https://github.com/minitest/minitest) to create some unit tests.
52
+
53
+ ### Run tests
54
+
55
+ At the moment, you can run the tests manually as a Ruby file. Eg:
56
+
57
+ ```
58
+ $ ruby test/barretina/vector_space/test_vector.rb
59
+ Run options: --seed 5323
60
+
61
+ # Running:
62
+
63
+ .........
64
+
65
+ Finished in 0.003157s, 2851.0290 runs/s, 19006.8599 assertions/s.
66
+
67
+ 9 runs, 60 assertions, 0 failures, 0 errors, 0 skips
68
+ ```
69
+
70
+ Eventually, I will reorganize in a Rake file.
data/bin/barretina ADDED
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'bundler/setup'
5
+ require 'barretina'
6
+ require 'barretina/canvas'
7
+
8
+ set(
9
+ title: Barretina::TITLE,
10
+ background: '#AAAAAA',
11
+ diagnostics: true,
12
+ width: 1000,
13
+ height: 600,
14
+ # viewport_width: 500,
15
+ # viewport_height: 300,
16
+ resizable: true
17
+ )
18
+
19
+ show
data/bin/bcm CHANGED
@@ -5,6 +5,8 @@ require 'bundler/setup'
5
5
  require 'barretina'
6
6
  require 'irb'
7
7
 
8
+ include Barretina::VectorSpace
9
+ include Barretina::VectorSpace2D
8
10
 
9
11
  puts "\e[1mBCM\e[0m - Barretina Console Mode"
10
12
 
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ruby2d'
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Barretina
4
+ module VectorSpace
5
+ class Line
6
+ attr_accessor :p, :q
7
+
8
+ def initialize p, q
9
+ @p = p
10
+ @q = q
11
+ end
12
+
13
+ def length
14
+ v = @q - @p
15
+ Math.sqrt( v.coordenates.map{ |n| n**2 }.sum )
16
+ end
17
+
18
+ def == line
19
+ @p == line.p && @q == line.q
20
+ end
21
+
22
+ def != line
23
+ @p != line.p || @q != line.q
24
+ end
25
+
26
+ def to_s
27
+ "#{@p}-#{@q}"
28
+ end
29
+
30
+ private
31
+ def inspect
32
+ "#<Line #{self}>"
33
+ end
34
+ end
35
+ end
36
+ end
@@ -1,57 +1,65 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module VectorSpace
4
- class Vector
5
- attr_accessor :coordenates
6
-
7
- def initialize *args
8
- @coordenates = args
9
- end
10
-
11
- def dimension
12
- coordenates.count
13
- end
3
+ module Barretina
4
+ module VectorSpace
5
+ class Vector
6
+ def self.[](*args)
7
+ Vector.new *args
8
+ end
14
9
 
15
- def + vector
16
- add(vector, &:sum)
17
- end
10
+ attr_accessor :coordenates
18
11
 
19
- def - vector
20
- add(vector) { |array| array.inject(:-) }
21
- end
22
-
23
- def * scalar
24
- Vector.new *coordenates.map { |c| c * scalar }
25
- rescue => e
26
- raise "Scalar value must be a Numeric instance (recomended Integer or Float), not a #{scalar.class}" unless scalar.is_a? Numeric
27
- raise e
28
- end
12
+ def initialize *args
13
+ @coordenates = args
14
+ end
29
15
 
30
- def == vector
31
- coordenates == vector.coordenates
32
- rescue => e
33
- raise "Impossible compare a #{vector.class} to a SpaceVector::Vector" unless vector.is_a? Vector
34
- raise e
35
- end
16
+ def dimension
17
+ coordenates.count
18
+ end
36
19
 
37
- def != vector
38
- !(self==vector)
39
- end
20
+ def + vector
21
+ add(vector, &:sum)
22
+ end
40
23
 
41
- def to_s
42
- "(#{coordenates.join(', ')})"
43
- end
24
+ def - vector
25
+ add(vector) { |array| array.inject(:-) }
26
+ end
44
27
 
45
- private
46
- def inspect
47
- "#<Vector #{self}>"
28
+ def * scalar
29
+ Vector.new *coordenates.map { |c| c * scalar }
30
+ rescue => e
31
+ raise "Scalar value must be a Numeric instance (recomended Integer or Float), not a #{scalar.class}" unless scalar.is_a? Numeric
32
+ raise e
48
33
  end
49
34
 
50
- def add vector, &block
51
- Vector.new *[coordenates, vector.coordenates].transpose.map(&block)
35
+ def == vector
36
+ coordenates == vector.coordenates
52
37
  rescue => e
53
- raise "Impossible add or substract a #{vector.class} to a SpaceVector::Vector" unless vector.is_a? Vector
38
+ raise "Impossible compare a #{vector.class} to a SpaceVector::Vector" unless vector.is_a? Vector
54
39
  raise e
55
40
  end
41
+
42
+ def != vector
43
+ !(self==vector)
44
+ end
45
+
46
+ def to_s
47
+ "(#{coordenates.join(', ')})"
48
+ end
49
+
50
+ private
51
+ def inspect
52
+ "#<Vector #{self}>"
53
+ end
54
+
55
+ def add vector, &block
56
+ Vector.new *[coordenates, vector.coordenates].transpose.map(&block)
57
+ rescue IndexError => e
58
+ raise IndexError, "Impossible add or substract vectors with different dimesions"
59
+ rescue => e
60
+ raise "Impossible add or substract a #{vector.class} to a SpaceVector::Vector" unless vector.is_a? Vector
61
+ raise e
62
+ end
63
+ end
56
64
  end
57
65
  end
@@ -1,5 +1,9 @@
1
- require_relative 'vector_space/extenders'
1
+ # frozen_string_literal: true
2
+
2
3
  require_relative 'vector_space/vector'
4
+ require_relative 'vector_space/line'
3
5
 
4
- module VectorSpace
6
+ module Barretina
7
+ module VectorSpace
8
+ end
5
9
  end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Barretina
4
+ module VectorSpace2D
5
+ class Line2D < VectorSpace::Line
6
+ def length
7
+ v = @q - @p
8
+ Math.sqrt( v.x**2 + v.y**2 )
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Barretina
4
+ module VectorSpace2D
5
+ class Polygon
6
+ attr_reader :lines, :vertices
7
+
8
+ def initialize *vertices
9
+ @vertices = vertices
10
+ generate_lines
11
+ end
12
+
13
+ def add_vertex vector
14
+ @vertices << vector
15
+ generate_lines
16
+ end
17
+
18
+ def insert_vertex vector, index
19
+ @vertices.insert index, vector
20
+ generate_lines
21
+ end
22
+
23
+ private
24
+ def generate_lines
25
+ @lines = []
26
+ @vertices.each_with_index do |v, i|
27
+ @lines << Line2D.new(v, @vertices[i-1])
28
+ end
29
+ end
30
+
31
+ def inspect
32
+ "#<Polygon #{@vertices.join(' ')}>"
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,71 @@
1
+ module Barretina
2
+ module VectorSpace2D
3
+ class Vector2D < VectorSpace::Vector
4
+ class << self
5
+ def [](x, y)
6
+ Vector2D.new x, y
7
+ end
8
+
9
+ def zero
10
+ Vector2D.new 0, 0
11
+ end
12
+ end
13
+
14
+ def initialize x, y
15
+ @coordenates = [x, y]
16
+ end
17
+
18
+ def coordenates= coor
19
+ @coordenates = coor[0..1]
20
+ end
21
+
22
+ def x
23
+ @coordenates[0]
24
+ end
25
+
26
+ def y
27
+ @coordenates[1]
28
+ end
29
+
30
+ def x= x
31
+ @coordenates[0] = x
32
+ end
33
+
34
+ def y= y
35
+ @coordenates[1] = y
36
+ end
37
+
38
+ def + vector
39
+ Vector2D.new( x + vector.x, y + vector.y )
40
+ end
41
+
42
+ def - vector
43
+ Vector2D.new( x - vector.x, y - vector.y )
44
+ end
45
+
46
+ def * scalar
47
+ Vector2D.new( x * scalar, y * scalar)
48
+ end
49
+
50
+ def == vector
51
+ x == vector.x && y == vector.y
52
+ end
53
+
54
+ def != vector
55
+ x != vector.x || y != vector.y
56
+ end
57
+
58
+ def add! vector
59
+ @coordenates = [ x + vector.x, y + vector.y ]
60
+ end
61
+
62
+ def substract! vector
63
+ @coordenates = [ x - vector.x, y - vector.y ]
64
+ end
65
+
66
+ def scalar! scalar
67
+ @coordenates = [ x * scalar, y * scalar ]
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'vector_space'
4
+ require_relative 'vector_space_2d/vector_2d'
5
+ require_relative 'vector_space_2d/line_2d'
6
+ require_relative 'vector_space_2d/polygon'
7
+
8
+ module Barretina
9
+ module VectorSpace2D
10
+ end
11
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Barretina
4
- VERSION = "0.1.1"
4
+ VERSION = "0.2.0"
5
5
  end
data/lib/barretina.rb CHANGED
@@ -1 +1,8 @@
1
- require 'barretina/vector_space'
1
+ # frozen_string_literal: true
2
+
3
+ require 'barretina/vector_space'
4
+ require 'barretina/vector_space_2d'
5
+
6
+ module Barretina
7
+ TITLE = "Barretina v#{VERSION}"
8
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: barretina
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ricard Ferrero
@@ -54,11 +54,17 @@ files:
54
54
  - Gemfile.lock
55
55
  - LICENSE
56
56
  - README.md
57
+ - bin/barretina
57
58
  - bin/bcm
58
59
  - lib/barretina.rb
60
+ - lib/barretina/canvas.rb
59
61
  - lib/barretina/vector_space.rb
60
- - lib/barretina/vector_space/extenders.rb
62
+ - lib/barretina/vector_space/line.rb
61
63
  - lib/barretina/vector_space/vector.rb
64
+ - lib/barretina/vector_space_2d.rb
65
+ - lib/barretina/vector_space_2d/line_2d.rb
66
+ - lib/barretina/vector_space_2d/polygon.rb
67
+ - lib/barretina/vector_space_2d/vector_2d.rb
62
68
  - lib/barretina/version.rb
63
69
  homepage: https://github.com/ricard-ferrero/barretina
64
70
  licenses:
@@ -1,11 +0,0 @@
1
- [Integer, Float].each do |numerical|
2
- numerical.class_eval do
3
- alias_method :__multiply__, :*
4
- private :__multiply__
5
-
6
- def * n
7
- return n * self if n.is_a? VectorSpace::Vector
8
- __multiply__ n
9
- end
10
- end
11
- end