animatedledstrip-client 0.0.0 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/animation.rb +109 -80
- data/lib/animation_data.rb +87 -64
- data/lib/animation_sender.rb +46 -26
- data/lib/color_container.rb +45 -25
- data/lib/direction.rb +34 -14
- data/test/test_animation.rb +121 -0
- data/test/test_animation_data.rb +200 -0
- data/test/test_animation_sender.rb +32 -0
- data/test/test_direction.rb +31 -0
- metadata +96 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fca5e042206c2c7fe45a3ea6c83b1345d88b34d54d5fee12a6177ceb8dc2d0d4
|
4
|
+
data.tar.gz: e0f5367687ab1291b2ef73d7423179099d06ca54e320ca450eb1d7cd1a42b087
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e6373bbf682ee21597645bd5307be3d7ed42e8089c49bc5f73318e9b458af7362568b8b904bfbeb6204a8205df6e75452e12b85ebf90d15a98c815b880333bcf
|
7
|
+
data.tar.gz: 6484a4a776ae1968b9073a1b8f4edd14e09ea1fc9b15afc533ce82da69d14fe57e93d589ea7e5531aa93e1abf69b37ee059fe7f4bc75f81c474ef96446197484
|
data/lib/animation.rb
CHANGED
@@ -1,80 +1,109 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
1
|
+
# Copyright (c) 2019-2020 AnimatedLEDStrip
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
20
|
+
|
21
|
+
module Animation
|
22
|
+
COLOR = 0
|
23
|
+
CUSTOM_ANIMATION = 1
|
24
|
+
CUSTOM_REPETITIVE_ANIMATION = 2
|
25
|
+
ALTERNATE = 3
|
26
|
+
BOUNCE = 4
|
27
|
+
BOUNCE_TO_COLOR = 5
|
28
|
+
CAT_TOY = 6
|
29
|
+
CAT_TOY_TO_COLOR = 7
|
30
|
+
FADE_TO_COLOR = 8
|
31
|
+
FIREWORKS = 9
|
32
|
+
METEOR = 10
|
33
|
+
MULTIPIXEL_RUN = 11
|
34
|
+
MULTIPIXEL_RUN_TO_COLOR = 12
|
35
|
+
RIPPLE = 13
|
36
|
+
PIXEL_MARATHON = 14
|
37
|
+
PIXEL_RUN = 15
|
38
|
+
SMOOTH_CHASE = 16
|
39
|
+
SMOOTH_FADE = 17
|
40
|
+
SPARKLE = 18
|
41
|
+
SPARKLE_FADE = 19
|
42
|
+
SPARKLE_TO_COLOR = 20
|
43
|
+
SPLAT = 21
|
44
|
+
STACK = 22
|
45
|
+
STACK_OVERFLOW = 23
|
46
|
+
WIPE = 24
|
47
|
+
END_ANIMATION = 25
|
48
|
+
|
49
|
+
# @return [String]
|
50
|
+
def self.string(animation)
|
51
|
+
case animation
|
52
|
+
when COLOR
|
53
|
+
'COLOR'
|
54
|
+
when CUSTOM_ANIMATION
|
55
|
+
'CUSTOMANIMATION'
|
56
|
+
when CUSTOM_REPETITIVE_ANIMATION
|
57
|
+
'CUSTOMREPETITIVEANIMATION'
|
58
|
+
when ALTERNATE
|
59
|
+
'ALTERNATE'
|
60
|
+
when BOUNCE
|
61
|
+
'BOUNCE'
|
62
|
+
when BOUNCE_TO_COLOR
|
63
|
+
'BOUNCETOCOLOR'
|
64
|
+
when CAT_TOY
|
65
|
+
'CATTOY'
|
66
|
+
when CAT_TOY_TO_COLOR
|
67
|
+
'CATTOYTOCOLOR'
|
68
|
+
when FADE_TO_COLOR
|
69
|
+
'FADETOCOLOR'
|
70
|
+
when FIREWORKS
|
71
|
+
'FIREWORKS'
|
72
|
+
when METEOR
|
73
|
+
'METEOR'
|
74
|
+
when MULTIPIXEL_RUN
|
75
|
+
'MULTIPIXELRUN'
|
76
|
+
when MULTIPIXEL_RUN_TO_COLOR
|
77
|
+
'MULTIPIXELRUNTOCOLOR'
|
78
|
+
when RIPPLE
|
79
|
+
'RIPPLE'
|
80
|
+
when PIXEL_MARATHON
|
81
|
+
'PIXELMARATHON'
|
82
|
+
when PIXEL_RUN
|
83
|
+
'PIXELRUN'
|
84
|
+
when SMOOTH_CHASE
|
85
|
+
'SMOOTHCHASE'
|
86
|
+
when SMOOTH_FADE
|
87
|
+
'SMOOTHFADE'
|
88
|
+
when SPARKLE
|
89
|
+
'SPARKLE'
|
90
|
+
when SPARKLE_FADE
|
91
|
+
'SPARKLEFADE'
|
92
|
+
when SPARKLE_TO_COLOR
|
93
|
+
'SPARKLETOCOLOR'
|
94
|
+
when SPLAT
|
95
|
+
'SPLAT'
|
96
|
+
when STACK
|
97
|
+
'STACK'
|
98
|
+
when STACK_OVERFLOW
|
99
|
+
'STACKOVERFLOW'
|
100
|
+
when WIPE
|
101
|
+
'WIPE'
|
102
|
+
when END_ANIMATION
|
103
|
+
'ENDANIMATION'
|
104
|
+
else
|
105
|
+
'COLOR'
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
data/lib/animation_data.rb
CHANGED
@@ -1,64 +1,87 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
1
|
+
# Copyright (c) 2019-2020 AnimatedLEDStrip
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
20
|
+
|
21
|
+
require_relative 'animation'
|
22
|
+
require_relative 'direction'
|
23
|
+
require_relative 'color_container'
|
24
|
+
|
25
|
+
class AnimationData
|
26
|
+
attr_accessor :animation, :colors, :center,
|
27
|
+
:continuous, :delay, :delay_mod,
|
28
|
+
:direction, :distance, :end_pixel,
|
29
|
+
:id, :spacing, :start_pixel
|
30
|
+
|
31
|
+
def initialize
|
32
|
+
@animation = Animation::COLOR
|
33
|
+
@colors = []
|
34
|
+
@center = -1
|
35
|
+
@continuous = nil
|
36
|
+
@delay = -1
|
37
|
+
@delay_mod = 1.0
|
38
|
+
@direction = Direction::FORWARD
|
39
|
+
@distance = -1
|
40
|
+
@end_pixel = -1
|
41
|
+
@id = ''
|
42
|
+
@spacing = -1
|
43
|
+
@start_pixel = 0
|
44
|
+
end
|
45
|
+
|
46
|
+
def add_color(color)
|
47
|
+
raise TypeError unless color.is_a? ColorContainer
|
48
|
+
|
49
|
+
colors.push(color)
|
50
|
+
end
|
51
|
+
|
52
|
+
# @return [String]
|
53
|
+
def json
|
54
|
+
raise TypeError unless @animation.is_a? Integer
|
55
|
+
raise TypeError unless @colors.is_a? Array
|
56
|
+
raise TypeError unless @center.is_a? Integer
|
57
|
+
unless @continuous.is_a?(TrueClass) || @continuous.is_a?(FalseClass) || @continuous.nil?
|
58
|
+
raise TypeError
|
59
|
+
end
|
60
|
+
raise TypeError unless @delay.is_a? Integer
|
61
|
+
raise TypeError unless @delay_mod.is_a? Float
|
62
|
+
raise TypeError unless @direction.is_a? Integer
|
63
|
+
raise TypeError unless @distance.is_a? Integer
|
64
|
+
raise TypeError unless @end_pixel.is_a? Integer
|
65
|
+
raise TypeError unless @id.is_a? String
|
66
|
+
raise TypeError unless @spacing.is_a? Integer
|
67
|
+
raise TypeError unless @start_pixel.is_a? Integer
|
68
|
+
|
69
|
+
@colors.each { |cc| raise TypeError unless cc.is_a? ColorContainer }
|
70
|
+
|
71
|
+
str = "DATA:{\"animation\":\"#{Animation.string(@animation)}\","\
|
72
|
+
'"colors":['
|
73
|
+
@colors.each { |cc| str += "#{cc.json}," }
|
74
|
+
str.delete_suffix! ','
|
75
|
+
str + '],'\
|
76
|
+
"\"center\":#{@center},"\
|
77
|
+
"\"continuous\":#{@continuous.nil? ? 'null' : @continuous},"\
|
78
|
+
"\"delay\":#{@delay},"\
|
79
|
+
"\"delayMod\":#{delay_mod},"\
|
80
|
+
"\"direction\":\"#{Direction.string(@direction)}\","\
|
81
|
+
"\"distance\":#{@distance},"\
|
82
|
+
"\"endPixel\":#{@end_pixel},"\
|
83
|
+
"\"id\":\"#{@id}\","\
|
84
|
+
"\"spacing\":#{@spacing},"\
|
85
|
+
"\"startPixel\":#{@start_pixel}}"
|
86
|
+
end
|
87
|
+
end
|
data/lib/animation_sender.rb
CHANGED
@@ -1,26 +1,46 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
1
|
+
# Copyright (c) 2019-2020 AnimatedLEDStrip
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
20
|
+
|
21
|
+
require 'socket'
|
22
|
+
require_relative 'animation_data'
|
23
|
+
|
24
|
+
class AnimationSender
|
25
|
+
attr_accessor :address, :port
|
26
|
+
|
27
|
+
def initialize(address, port)
|
28
|
+
@address = address
|
29
|
+
@port = port
|
30
|
+
end
|
31
|
+
|
32
|
+
def start
|
33
|
+
@socket = TCPSocket.new @address, @port
|
34
|
+
end
|
35
|
+
|
36
|
+
def end
|
37
|
+
@socket.close
|
38
|
+
end
|
39
|
+
|
40
|
+
def send_animation(animation)
|
41
|
+
raise TypeError unless animation.is_a? AnimationData
|
42
|
+
|
43
|
+
@socket.write animation.json
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
data/lib/color_container.rb
CHANGED
@@ -1,25 +1,45 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
1
|
+
# Copyright (c) 2019-2020 AnimatedLEDStrip
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
20
|
+
|
21
|
+
class ColorContainer
|
22
|
+
attr_accessor :colors
|
23
|
+
|
24
|
+
def initialize
|
25
|
+
@colors = []
|
26
|
+
end
|
27
|
+
|
28
|
+
# @return [String]
|
29
|
+
def json
|
30
|
+
@colors.each { |c| raise TypeError unless c.is_a? Integer }
|
31
|
+
str = '{"colors":['
|
32
|
+
@colors.each do |c|
|
33
|
+
str.concat(c.to_s, ',')
|
34
|
+
end
|
35
|
+
str.delete_suffix! ','
|
36
|
+
str + ']}'
|
37
|
+
end
|
38
|
+
|
39
|
+
def add_color(color)
|
40
|
+
raise TypeError unless color.is_a? Integer
|
41
|
+
|
42
|
+
@colors.push(color)
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
data/lib/direction.rb
CHANGED
@@ -1,15 +1,35 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
1
|
+
# Copyright (c) 2019-2020 AnimatedLEDStrip
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
20
|
+
|
21
|
+
module Direction
|
22
|
+
FORWARD = 0
|
23
|
+
BACKWARD = 1
|
24
|
+
|
25
|
+
def self.string(direction)
|
26
|
+
case direction
|
27
|
+
when FORWARD
|
28
|
+
'FORWARD'
|
29
|
+
when BACKWARD
|
30
|
+
'BACKWARD'
|
31
|
+
else
|
32
|
+
'FORWARD'
|
33
|
+
end
|
34
|
+
end
|
15
35
|
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
# Copyright (c) 2019-2020 AnimatedLEDStrip
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
20
|
+
|
21
|
+
require_relative 'helper'
|
22
|
+
require 'minitest/autorun'
|
23
|
+
require_relative '../lib/animation'
|
24
|
+
|
25
|
+
class AnimationTest < Minitest::Test
|
26
|
+
def test_color_string
|
27
|
+
assert_equal 'COLOR', Animation.string(Animation::COLOR)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_custom_animation_string
|
31
|
+
assert_equal 'CUSTOMANIMATION', Animation.string(Animation::CUSTOM_ANIMATION)
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_custom_rep_anim_string
|
35
|
+
assert_equal 'CUSTOMREPETITIVEANIMATION', Animation.string(Animation::CUSTOM_REPETITIVE_ANIMATION)
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_alternate_string
|
39
|
+
assert_equal 'ALTERNATE', Animation.string(Animation::ALTERNATE)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_bounce_string
|
43
|
+
assert_equal 'BOUNCE', Animation.string(Animation::BOUNCE)
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_bounce_to_color_string
|
47
|
+
assert_equal 'BOUNCETOCOLOR', Animation.string(Animation::BOUNCE_TO_COLOR)
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_cat_toy_string
|
51
|
+
assert_equal 'CATTOY', Animation.string(Animation::CAT_TOY)
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_meteor_string
|
55
|
+
assert_equal 'METEOR', Animation.string(Animation::METEOR)
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_multipixel_run_string
|
59
|
+
assert_equal 'MULTIPIXELRUN', Animation.string(Animation::MULTIPIXEL_RUN)
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_multipixel_rtc_string
|
63
|
+
assert_equal 'MULTIPIXELRUNTOCOLOR', Animation.string(Animation::MULTIPIXEL_RUN_TO_COLOR)
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_ripple_string
|
67
|
+
assert_equal 'RIPPLE', Animation.string(Animation::RIPPLE)
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_pixel_marathon_string
|
71
|
+
assert_equal 'PIXELMARATHON', Animation.string(Animation::PIXEL_MARATHON)
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_pixel_run_string
|
75
|
+
assert_equal 'PIXELRUN', Animation.string(Animation::PIXEL_RUN)
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_smooth_chase_string
|
79
|
+
assert_equal 'SMOOTHCHASE', Animation.string(Animation::SMOOTH_CHASE)
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_smooth_fade_string
|
83
|
+
assert_equal 'SMOOTHFADE', Animation.string(Animation::SMOOTH_FADE)
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_sparkle_string
|
87
|
+
assert_equal 'SPARKLE', Animation.string(Animation::SPARKLE)
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_sparkle_fade_string
|
91
|
+
assert_equal 'SPARKLEFADE', Animation.string(Animation::SPARKLE_FADE)
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_sparkle_to_color_string
|
95
|
+
assert_equal 'SPARKLETOCOLOR', Animation.string(Animation::SPARKLE_TO_COLOR)
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_splat_string
|
99
|
+
assert_equal 'SPLAT', Animation.string(Animation::SPLAT)
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_stack_string
|
103
|
+
assert_equal 'STACK', Animation.string(Animation::STACK)
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_stack_overflow_string
|
107
|
+
assert_equal 'STACKOVERFLOW', Animation.string(Animation::STACK_OVERFLOW)
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_wipe_string
|
111
|
+
assert_equal 'WIPE', Animation.string(Animation::WIPE)
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_end_animation_string
|
115
|
+
assert_equal 'ENDANIMATION', Animation.string(Animation::END_ANIMATION)
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_default_string
|
119
|
+
assert_equal 'COLOR', Animation.string(-1)
|
120
|
+
end
|
121
|
+
end
|
@@ -0,0 +1,200 @@
|
|
1
|
+
# Copyright (c) 2019-2020 AnimatedLEDStrip
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
20
|
+
|
21
|
+
require_relative 'helper'
|
22
|
+
require 'minitest'
|
23
|
+
require_relative '../lib/animation_data'
|
24
|
+
|
25
|
+
class AnimationDataTest < Minitest::Test
|
26
|
+
def test_initialization
|
27
|
+
anim = AnimationData.new
|
28
|
+
|
29
|
+
assert_equal Animation::COLOR, anim.animation
|
30
|
+
assert_equal(-1, anim.center)
|
31
|
+
assert_nil anim.continuous
|
32
|
+
assert_equal(-1, anim.delay)
|
33
|
+
assert_equal 1.0, anim.delay_mod
|
34
|
+
assert_equal Direction::FORWARD, anim.direction
|
35
|
+
assert_equal(-1, anim.distance)
|
36
|
+
assert_equal(-1, anim.end_pixel)
|
37
|
+
assert_equal '', anim.id
|
38
|
+
assert_equal(-1, anim.spacing)
|
39
|
+
assert_equal 0, anim.start_pixel
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_add_color
|
43
|
+
cc = ColorContainer.new
|
44
|
+
cc.add_color(0xFF)
|
45
|
+
|
46
|
+
anim = AnimationData.new
|
47
|
+
anim.add_color(cc)
|
48
|
+
|
49
|
+
assert anim.colors.include? cc
|
50
|
+
|
51
|
+
assert_raises TypeError do
|
52
|
+
anim.add_color(0xFF)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_json
|
57
|
+
anim = AnimationData.new
|
58
|
+
anim.animation = Animation::METEOR
|
59
|
+
anim.center = 50
|
60
|
+
anim.continuous = false
|
61
|
+
anim.delay = 10
|
62
|
+
anim.delay_mod = 1.5
|
63
|
+
anim.direction = Direction::BACKWARD
|
64
|
+
anim.distance = 45
|
65
|
+
anim.end_pixel = 200
|
66
|
+
anim.id = 'TEST'
|
67
|
+
anim.spacing = 5
|
68
|
+
anim.start_pixel = 15
|
69
|
+
|
70
|
+
cc = ColorContainer.new
|
71
|
+
cc2 = ColorContainer.new
|
72
|
+
cc.add_color 0xFF
|
73
|
+
cc.add_color 0xFF00
|
74
|
+
cc2.add_color 0xFF0000
|
75
|
+
|
76
|
+
anim.add_color cc
|
77
|
+
anim.add_color cc2
|
78
|
+
|
79
|
+
assert_equal 'DATA:{"animation":"METEOR","colors":[{'\
|
80
|
+
'"colors":[255,65280]},{"colors":[16711680]}],"center":50,'\
|
81
|
+
'"continuous":false,"delay":10,"delayMod":1.5,'\
|
82
|
+
'"direction":"BACKWARD","distance":45,"endPixel":200,'\
|
83
|
+
'"id":"TEST","spacing":5,"startPixel":15}', anim.json
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_json_animation_failure
|
87
|
+
anim = AnimationData.new
|
88
|
+
|
89
|
+
anim.animation = 'A'
|
90
|
+
assert_raises TypeError do
|
91
|
+
anim.json
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_json_center_failure
|
96
|
+
anim = AnimationData.new
|
97
|
+
|
98
|
+
anim.center = 'A'
|
99
|
+
assert_raises TypeError do
|
100
|
+
anim.json
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_json_continuous_failure
|
105
|
+
anim = AnimationData.new
|
106
|
+
|
107
|
+
anim.continuous = 'A'
|
108
|
+
assert_raises TypeError do
|
109
|
+
anim.json
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_json_delay_failure
|
114
|
+
anim = AnimationData.new
|
115
|
+
|
116
|
+
anim.delay = 'A'
|
117
|
+
assert_raises TypeError do
|
118
|
+
anim.json
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def test_json_delay_mod_failure
|
123
|
+
anim = AnimationData.new
|
124
|
+
|
125
|
+
anim.delay_mod = 'A'
|
126
|
+
assert_raises TypeError do
|
127
|
+
anim.json
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
def test_json_direction_failure
|
132
|
+
anim = AnimationData.new
|
133
|
+
|
134
|
+
anim.direction = 'A'
|
135
|
+
assert_raises TypeError do
|
136
|
+
anim.json
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
def test_json_distance_failure
|
141
|
+
anim = AnimationData.new
|
142
|
+
|
143
|
+
anim.distance = 'A'
|
144
|
+
assert_raises TypeError do
|
145
|
+
anim.json
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
def test_json_end_pixel_failure
|
150
|
+
anim = AnimationData.new
|
151
|
+
|
152
|
+
anim.end_pixel = 'A'
|
153
|
+
assert_raises TypeError do
|
154
|
+
anim.json
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_json_id_failure
|
159
|
+
skip
|
160
|
+
anim = AnimationData.new
|
161
|
+
|
162
|
+
anim.continuous = nil
|
163
|
+
assert_raises TypeError do
|
164
|
+
anim.json
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
def test_json_spacing_failure
|
169
|
+
anim = AnimationData.new
|
170
|
+
|
171
|
+
anim.spacing = 'A'
|
172
|
+
assert_raises TypeError do
|
173
|
+
anim.json
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
def test_json_start_pixel_failure
|
178
|
+
anim = AnimationData.new
|
179
|
+
|
180
|
+
anim.start_pixel = 'A'
|
181
|
+
assert_raises TypeError do
|
182
|
+
anim.json
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
def test_json_colors_failure
|
187
|
+
anim = AnimationData.new
|
188
|
+
|
189
|
+
anim.colors = anim.colors.append 'A'
|
190
|
+
|
191
|
+
assert_raises TypeError do
|
192
|
+
anim.json
|
193
|
+
end
|
194
|
+
|
195
|
+
anim.colors = 'A'
|
196
|
+
assert_raises TypeError do
|
197
|
+
anim.json
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# Copyright (c) 2019-2020 AnimatedLEDStrip
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
20
|
+
|
21
|
+
require_relative 'helper'
|
22
|
+
require 'minitest'
|
23
|
+
require_relative '../lib/animation_sender'
|
24
|
+
|
25
|
+
class AnimationSenderTest < Minitest::Test
|
26
|
+
def test_initialization
|
27
|
+
sender = AnimationSender.new '10.0.0.254', 5
|
28
|
+
|
29
|
+
assert_equal '10.0.0.254', sender.address
|
30
|
+
assert_equal 5, sender.port
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# Copyright (c) 2019-2020 AnimatedLEDStrip
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
20
|
+
|
21
|
+
require_relative 'helper'
|
22
|
+
require 'minitest'
|
23
|
+
require_relative '../lib/direction'
|
24
|
+
|
25
|
+
class DirectionTest < Minitest::Test
|
26
|
+
def test_direction_string
|
27
|
+
assert_equal 'FORWARD', Direction.string(Direction::FORWARD)
|
28
|
+
assert_equal 'BACKWARD', Direction.string(Direction::BACKWARD)
|
29
|
+
assert_equal 'FORWARD', Direction.string(-1)
|
30
|
+
end
|
31
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: animatedledstrip-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Max Narvaez
|
@@ -9,7 +9,91 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
date: 2019-11-05 00:00:00.000000000 Z
|
12
|
-
dependencies:
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: json
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: simplecov
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: url
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: minitest
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: mocha
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
13
97
|
description:
|
14
98
|
email:
|
15
99
|
executables: []
|
@@ -21,6 +105,10 @@ files:
|
|
21
105
|
- lib/animation_sender.rb
|
22
106
|
- lib/color_container.rb
|
23
107
|
- lib/direction.rb
|
108
|
+
- test/test_animation.rb
|
109
|
+
- test/test_animation_data.rb
|
110
|
+
- test/test_animation_sender.rb
|
111
|
+
- test/test_direction.rb
|
24
112
|
homepage:
|
25
113
|
licenses: []
|
26
114
|
metadata: {}
|
@@ -40,8 +128,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
40
128
|
version: '0'
|
41
129
|
requirements: []
|
42
130
|
rubyforge_project:
|
43
|
-
rubygems_version: 2.7.
|
131
|
+
rubygems_version: 2.7.7
|
44
132
|
signing_key:
|
45
133
|
specification_version: 4
|
46
134
|
summary: Library for connecting to an AnimatedLEDStripServer
|
47
|
-
test_files:
|
135
|
+
test_files:
|
136
|
+
- test/test_animation.rb
|
137
|
+
- test/test_animation_data.rb
|
138
|
+
- test/test_animation_sender.rb
|
139
|
+
- test/test_direction.rb
|