savage 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,8 +3,8 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
3
3
  include Savage
4
4
 
5
5
  describe SubPath do
6
- it 'should have a commands list' do
7
- SubPath.new.respond_to?(:commands).should == true
6
+ it 'should have a directions list' do
7
+ SubPath.new.respond_to?(:directions).should == true
8
8
  end
9
9
  it 'should have a move_to method' do
10
10
  SubPath.new.respond_to?(:move_to).should == true
@@ -36,15 +36,43 @@ describe SubPath do
36
36
  it 'should have a to_command method' do
37
37
  SubPath.new.respond_to?(:to_command).should == true
38
38
  end
39
+ it 'should be able to be constructed empty' do
40
+ lambda { SubPath.new }.should_not raise_error
41
+ end
42
+ it 'should be able to be constructed with a starting point (absolute move to)' do
43
+ path = SubPath.new(100,200)
44
+ path.directions.length.should == 1
45
+ path.directions.last.class.should == Directions::MoveTo
46
+ end
47
+ it 'should be able to build itself in a block' do
48
+ path = SubPath.new(100,200) do |p|
49
+ p.line_to 300, 400
50
+ p.cubic_curve_to 500,600,700,800,900,1000
51
+ p.arc_to 100,200,123,1,1,300,400
52
+ end
53
+ path.directions[0].class.should == Directions::MoveTo
54
+ path.directions[1].class.should == Directions::LineTo
55
+ path.directions[2].class.should == Directions::CubicCurveTo
56
+ path.directions[3].class.should == Directions::ArcTo
57
+
58
+ path2 = SubPath.new do |p|
59
+ p.line_to 300, 400
60
+ p.cubic_curve_to 500,600,700,800,900,1000
61
+ p.arc_to 100,200,123,1,1,300,400
62
+ end
63
+ path2.directions[0].class.should == Directions::LineTo
64
+ path2.directions[1].class.should == Directions::CubicCurveTo
65
+ path2.directions[2].class.should == Directions::ArcTo
66
+ end
39
67
  describe '#closed?' do
40
- it 'should be true if the last direction in the commands list is of type ClosePath' do
68
+ it 'should be true if the last direction in the directions list is of type ClosePath' do
41
69
  path = SubPath.new
42
70
  path.move_to 100, 300
43
71
  path.line_to 243, 21
44
72
  path.close_path
45
73
  path.closed?.should == true
46
74
  end
47
- it 'should be false if the last direction in the commands list is of any other type or absent' do
75
+ it 'should be false if the last direction in the directions list is of any other type or absent' do
48
76
  path = SubPath.new
49
77
  path.move_to 100, 300
50
78
  path.line_to 234, 21
@@ -54,39 +82,54 @@ describe SubPath do
54
82
  end
55
83
  end
56
84
  describe '#to_command' do
57
- it 'should output the concatenation of all the subcommands if no two are the same in sequence' do
58
- path = SubPath.new
59
- path.move_to 100, 200
60
- path.horizontal_to -200
61
- path.quadratic_curve_to 342, -341.23, 405, 223
62
- path.line_to -342.002, 231.42
63
- path.close_path
64
- path.to_command.should == 'M100 200H-200Q342-341.23 405 223L-342.002 231.42Z'
85
+ before :each do
86
+ @path = SubPath.new
87
+ @dir_1 = @path.move_to 100, 200
88
+ end
89
+ it 'should output the concatenation of all the subdirections if no two are the same in sequence' do
90
+ dir_2 = @path.horizontal_to -200
91
+ dir_3 = @path.quadratic_curve_to 342, -341.23, 405, 223
92
+ dir_4 = @path.line_to -342.002, 231.42
93
+ dir_5 = @path.close_path
94
+ @path.to_command.should == @dir_1.to_command << dir_2.to_command << dir_3.to_command << dir_4.to_command << dir_5.to_command
65
95
  end
66
96
  it 'should strip the command code if the previous code was the same as the present' do
67
- path = SubPath.new
68
- com1 = path.move_to 100, 200
69
- com2 = path.horizontal_to -200
70
- com4 = path.line_to -342.002, 231.42
71
- com4 = path.line_to -234, 502
72
- path.to_command.should == 'M100 200H-200L-342.002 231.42-234 502'
97
+ dir_2 = @path.horizontal_to -200
98
+ dir_3 = @path.line_to -342.002, 231.42
99
+ dir_4 = @path.line_to -234, 502
100
+ @path.to_command.should == @dir_1.to_command << dir_2.to_command << dir_3.to_command << dir_4.to_command[1..-1]
73
101
  end
74
- it 'should strip the command code if the previous code was a MoveTo and the current code is a LineTo' do
75
- path = SubPath.new
76
- com1 = path.move_to 100, 200
77
- com4 = path.line_to -342.002, 231.42
78
- com4 = path.line_to -234, 502
79
- path.to_command.should == 'M100 200-342.002 231.42-234 502'
102
+ it 'should not strip the command code if the previous code was the same as the present, but of different absoluteness' do
103
+ dir_2 = @path.horizontal_to -200
104
+ dir_3 = @path.line_to -342.002, 231.42
105
+ dir_4 = @path.line_to -234, 502, false
106
+ @path.to_command.should == @dir_1.to_command << dir_2.to_command << dir_3.to_command << dir_4.to_command
107
+ end
108
+ it 'should strip the command code if the previous code was a MoveTo and the current code is an absolute LineTo' do
109
+ dir_2 = @path.line_to -342.002, 231.42
110
+ dir_3 = @path.line_to -234, 502
111
+ @path.to_command.should == @dir_1.to_command << dir_2.to_command[1..-1] << dir_3.to_command[1..-1]
112
+ end
113
+ it 'should not strip the command code if the previous code was a MoveTo and the current code is a relative LineTo' do
114
+ dir_2 = @path.line_to -342.002, 231.42, false
115
+ dir_3 = @path.line_to -234, 502
116
+ @path.to_command.should == @dir_1.to_command << dir_2.to_command << dir_3.to_command
117
+ end
118
+ it 'should add leading whitespace if the first coordinate of the code-stripped direction is not negative' do
119
+ dir_2 = @path.horizontal_to -200
120
+ dir_3 = @path.line_to -342.002, 231.42
121
+ dir_4 = @path.line_to 234, 502
122
+ @path.to_command.should == @dir_1.to_command << dir_2.to_command << dir_3.to_command << dir_4.to_command[1..-1].insert(0,' ')
80
123
  end
81
124
  end
82
- describe 'move_to' do
125
+ describe '#move_to' do
83
126
  before :each do
84
127
  @path = SubPath.new
85
128
  end
86
129
  context 'when the command list is empty' do
87
- it 'should add a MoveTo command on to the commands list' do
130
+ it 'should add a MoveTo command on to the directions list' do
88
131
  this_move = @path.move_to(100,200)
89
- @path.commands.should == [this_move]
132
+ @path.directions.should == [this_move]
90
133
  end
91
134
  it 'should return the newly created MoveTo command' do
92
135
  @path.move_to(100,200).class.should == Directions::MoveTo
@@ -96,7 +139,7 @@ describe SubPath do
96
139
  it 'does something' do
97
140
  first_move = @path.move_to(200,400)
98
141
  @path.move_to(100,200)
99
- @path.commands.should == [first_move]
142
+ @path.directions.should == [first_move]
100
143
  end
101
144
  it 'should return nil' do
102
145
  @path.move_to(200,400)
@@ -104,9 +147,9 @@ describe SubPath do
104
147
  end
105
148
  end
106
149
  end
107
- describe '#commands' do
150
+ describe '#directions' do
108
151
  it 'should be able to access items via the bracket operator' do
109
- SubPath.new.commands.respond_to?(:[]).should == true
152
+ SubPath.new.directions.respond_to?(:[]).should == true
110
153
  end
111
154
  end
112
155
  end
@@ -6,16 +6,24 @@ share_as :DirectionShared do
6
6
  it 'should have an absolute? method' do
7
7
  @dir.respond_to?(:absolute?).should == true
8
8
  end
9
+ it 'should have a command_code method' do
10
+ @dir.respond_to?(:command_code).should == true
11
+ end
9
12
  describe '#to_command' do
13
+ it "should start with the command\'s command code" do
14
+ @dir.to_command[0,1].should == @dir.command_code
15
+ end
16
+ it 'should only have one alphabetical command code' do
17
+ @dir.to_command.match(/[A-Za-z]/).size.should == 1
18
+ end
19
+ end
20
+ describe '#command_code' do
10
21
  it 'should start with a lower-case letter when not absolute' do
11
22
  rel_dir = create_relative
12
- extract_command(rel_dir.to_command).should == command_code.downcase
23
+ rel_dir.command_code.should == command_code.downcase
13
24
  end
14
25
  it 'should start with a capital letter when absolute' do
15
- extract_command(@dir.to_command).should == command_code.upcase
16
- end
17
- it 'should only have one alphabetical command code' do
18
- @dir.to_command.match(/[A-Za-z]/).size.should == 1
26
+ @dir.command_code.should == command_code.upcase
19
27
  end
20
28
  end
21
29
  end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
7
+ - 2
8
8
  - 0
9
- version: 0.1.0
9
+ version: 0.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Jeremy Holland
@@ -48,8 +48,8 @@ files:
48
48
  - Rakefile
49
49
  - VERSION
50
50
  - lib/savage.rb
51
- - lib/savage/core_extensions/string.rb
52
51
  - lib/savage/direction.rb
52
+ - lib/savage/direction_proxy.rb
53
53
  - lib/savage/directions/arc_to.rb
54
54
  - lib/savage/directions/close_path.rb
55
55
  - lib/savage/directions/coordinate_target.rb
@@ -60,6 +60,7 @@ files:
60
60
  - lib/savage/directions/point_target.rb
61
61
  - lib/savage/directions/quadratic_curve_to.rb
62
62
  - lib/savage/directions/vertical_to.rb
63
+ - lib/savage/parser.rb
63
64
  - lib/savage/path.rb
64
65
  - lib/savage/sub_path.rb
65
66
  - lib/savage/utils.rb
@@ -73,6 +74,7 @@ files:
73
74
  - spec/savage/directions/point_spec.rb
74
75
  - spec/savage/directions/quadratic_curve_spec.rb
75
76
  - spec/savage/directions/vertical_to_spec.rb
77
+ - spec/savage/parser_spec.rb
76
78
  - spec/savage/path_spec.rb
77
79
  - spec/savage/sub_path_spec.rb
78
80
  - spec/savage_spec.rb
@@ -122,6 +124,7 @@ test_files:
122
124
  - spec/savage/directions/point_spec.rb
123
125
  - spec/savage/directions/quadratic_curve_spec.rb
124
126
  - spec/savage/directions/vertical_to_spec.rb
127
+ - spec/savage/parser_spec.rb
125
128
  - spec/savage/path_spec.rb
126
129
  - spec/savage/sub_path_spec.rb
127
130
  - spec/savage_spec.rb
@@ -1,8 +0,0 @@
1
- class String
2
- def constantize
3
- unless /\A(?:::)?([A-Z]\w*(?:::[A-Z]\w*)*)\z/ =~ self
4
- raise NameError, "#{self.inspect} is not a valid constant name!"
5
- end
6
- Object.module_eval("::#{$1}", __FILE__, __LINE__)
7
- end
8
- end