under-os-core 1.4.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 +7 -0
- data/README.md +26 -0
- data/lib/core/json.rb +19 -0
- data/lib/core/numeric.rb +23 -0
- data/lib/core/object.rb +5 -0
- data/lib/core/string.rb +72 -0
- data/lib/under-os-core.rb +40 -0
- data/lib/under_os.rb +5 -0
- data/lib/under_os/app.rb +29 -0
- data/lib/under_os/color.rb +184 -0
- data/lib/under_os/config.rb +10 -0
- data/lib/under_os/delegate.rb +10 -0
- data/lib/under_os/events.rb +85 -0
- data/lib/under_os/file.rb +110 -0
- data/lib/under_os/point.rb +50 -0
- data/lib/under_os/screen.rb +9 -0
- data/lib/under_os/timer.rb +65 -0
- data/spec/core/json_spec.rb +32 -0
- data/spec/core/numeric_spec.rb +37 -0
- data/spec/core/string_spec.rb +101 -0
- data/spec/under_os/color_spec.rb +133 -0
- data/spec/under_os/events_spec.rb +71 -0
- data/spec/under_os/file_spec.rb +98 -0
- data/spec/under_os/point_spec.rb +156 -0
- data/spec/under_os/screen_spec.rb +11 -0
- data/spec/under_os/timer_spec.rb +93 -0
- data/under-os-core.gemspec +20 -0
- metadata +93 -0
@@ -0,0 +1,133 @@
|
|
1
|
+
describe UnderOs::Color do
|
2
|
+
def from(*args)
|
3
|
+
UnderOs::Color.new(*args)
|
4
|
+
end
|
5
|
+
|
6
|
+
describe '#initialize' do
|
7
|
+
it "should initialize from a UIColor" do
|
8
|
+
color = from(UIColor.blueColor)
|
9
|
+
color.ui.should == UIColor.blueColor
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should always return the same instance" do
|
13
|
+
color1 = from(UIColor.blackColor)
|
14
|
+
color2 = from(UIColor.blackColor)
|
15
|
+
|
16
|
+
color1.should === color2
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should work with rgba arrays of integers" do
|
20
|
+
from(0, 0, 255, 1.0).should == UIColor.blueColor
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should work with rgba arrays of floats" do
|
24
|
+
from(0.0, 0.0, 1.0, 1.0).should == UIColor.blueColor
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should work with rgb arrays of integers" do
|
28
|
+
from(0, 0, 255).should == UIColor.blueColor
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should work with rgb arrays of floats" do
|
32
|
+
from(0.0, 0.0, 1.0).should == UIColor.blueColor
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should work with string color names" do
|
36
|
+
from('blue').should == UIColor.blueColor
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should work with symbol color names" do
|
40
|
+
from(:blue).should == UIColor.blueColor
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should work with string hex colors" do
|
44
|
+
from('#ff8000').should == UIColor.orangeColor
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should work with short hand colors" do
|
48
|
+
from('#ff0').should == UIColor.yellowColor
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should work with rgb() strings" do
|
52
|
+
from('rgb(10, 20, 30)').to_rgba.should == [10, 20, 30, 1.0]
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should work with rgba() strings" do
|
56
|
+
from('rgba(100, 200, 250, 0.5)').to_rgba.should == [100, 200, 250, 0.5]
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'should work with flaot color circle params' do
|
60
|
+
from(0.23).to_s.should == '#9eff00'
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'should work with integer (in degrees) color circle params' do
|
64
|
+
from(23).to_s.should == '#9eff00'
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe '#to_rgba' do
|
69
|
+
it "should extract the data correctly" do
|
70
|
+
from(UIColor.blueColor).to_rgba.should == [0, 0, 255, 1.0]
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe '#to_rgb' do
|
75
|
+
it "should extract the data correctly" do
|
76
|
+
from(UIColor.yellowColor).to_rgb.should == [255, 255, 0]
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe '#to_hex' do
|
81
|
+
it "should extract the data correctly" do
|
82
|
+
from(UIColor.orangeColor).to_hex.should == '#ff8000'
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe '#to_s' do
|
87
|
+
it "should extract the data correctly" do
|
88
|
+
from(UIColor.brownColor).to_s.should == '#996633'
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
describe '#==' do
|
93
|
+
it "should work with other colors" do
|
94
|
+
from(UIColor.blueColor).should == from(UIColor.blueColor)
|
95
|
+
from(UIColor.blueColor).should.not == from(UIColor.orangeColor)
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should work with UIColors" do
|
99
|
+
from(UIColor.blueColor).should == UIColor.blueColor
|
100
|
+
from(UIColor.blueColor).should.not == UIColor.orangeColor
|
101
|
+
end
|
102
|
+
|
103
|
+
it "should work with RGB arrays" do
|
104
|
+
from(UIColor.blueColor).should == [0, 0, 255]
|
105
|
+
from(UIColor.blueColor).should.not == [0, 255, 0]
|
106
|
+
end
|
107
|
+
|
108
|
+
it "should work with RGBA arrays" do
|
109
|
+
from(UIColor.blueColor).should == [0, 0, 255, 1.0]
|
110
|
+
from(UIColor.blueColor).should.not == [0, 255, 0, 1.0]
|
111
|
+
end
|
112
|
+
|
113
|
+
it "should work with string names" do
|
114
|
+
from(UIColor.blueColor).should == 'blue'
|
115
|
+
from(UIColor.blueColor).should.not == 'orange'
|
116
|
+
end
|
117
|
+
|
118
|
+
it "should work with symbol names" do
|
119
|
+
from(UIColor.blueColor).should == :blue
|
120
|
+
from(UIColor.blueColor).should.not == :orange
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should work with hex values" do
|
124
|
+
from(UIColor.blueColor).should == '#0000ff'
|
125
|
+
from(UIColor.blueColor).should.not == '#00ff00'
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should work with short hex values" do
|
129
|
+
from(UIColor.blueColor).should == '#00f'
|
130
|
+
from(UIColor.blueColor).should.not == '#0f0'
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
describe UnderOs::Events do
|
2
|
+
class Dummy
|
3
|
+
include UnderOs::Events
|
4
|
+
end
|
5
|
+
|
6
|
+
before do
|
7
|
+
@dummy = Dummy.new
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "#on" do
|
11
|
+
it "should add event listeners" do
|
12
|
+
@dummy.on(:smth) { }
|
13
|
+
UnderOs::Events::Listeners.all(@dummy, :smth).size.should == 1
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should return the object itself back" do
|
17
|
+
@dummy.on(:smth) { }.should.be.same_as @dummy
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "#off" do
|
22
|
+
it "should remove event listeners" do
|
23
|
+
@dummy.on(:smth) { }
|
24
|
+
@dummy.off(:smth)
|
25
|
+
UnderOs::Events::Listeners.all(@dummy, :smth).size.should == 0
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should return the object itself back" do
|
29
|
+
@dummy.off(:smth).should.be.same_as @dummy
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "#emit" do
|
34
|
+
it "should emit events" do
|
35
|
+
kicked = false
|
36
|
+
@dummy.on(:smth) { kicked = true }
|
37
|
+
@dummy.emit(:smth)
|
38
|
+
kicked.should == true
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should return the object itself back" do
|
42
|
+
@dummy.emit(:smth).should.be.same_as @dummy
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should accept optional params" do
|
46
|
+
event = nil
|
47
|
+
@dummy.on(:smth) { |e| event = e }
|
48
|
+
@dummy.emit(:smth, param1: 1, param2: 2)
|
49
|
+
event.params.should == {param1: 1, param2: 2}
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe 'UnderOs::Events::Event' do
|
54
|
+
before do
|
55
|
+
@event = UnderOs::Events::Event.new('event-name', param1: 1, param2: 2)
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should give access to it's name" do
|
59
|
+
@event.name.should == :"event-name"
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should give access to it's params" do
|
63
|
+
@event.params.should == {param1: 1, param2: 2}
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should magically pass all the missing requests to the params" do
|
67
|
+
@event.param1.should == 1
|
68
|
+
@event.param2.should == 2
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
describe UnderOs::File do
|
2
|
+
before do
|
3
|
+
@existing_path = NSBundle.mainBundle.pathForResource("under-os.css", ofType:nil)
|
4
|
+
end
|
5
|
+
|
6
|
+
describe '.exists?' do
|
7
|
+
it "returns true for existing files" do
|
8
|
+
UnderOs::File.exists?(@existing_path).should == true
|
9
|
+
end
|
10
|
+
|
11
|
+
it "returns false for non existing files" do
|
12
|
+
UnderOs::File.exists?("non-existing.file").should == false
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '.size' do
|
17
|
+
it "returns file size" do
|
18
|
+
UnderOs::File.size(@existing_path).should > 0
|
19
|
+
end
|
20
|
+
|
21
|
+
it "raises an error when exessing a non-existing file" do
|
22
|
+
-> {
|
23
|
+
UnderOs::File.size("non-existing.file")
|
24
|
+
}.should.raise(StandardError)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '.read' do
|
29
|
+
it "reads files content" do
|
30
|
+
content = UnderOs::File.read(@existing_path)
|
31
|
+
content.class.should == String
|
32
|
+
content.size.should > 0
|
33
|
+
end
|
34
|
+
|
35
|
+
it "raises an error when read a non-existing file" do
|
36
|
+
-> {
|
37
|
+
UnderOs::File.read("non-existing.file")
|
38
|
+
}.should.raise(StandardError)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe '.write' do
|
43
|
+
before do
|
44
|
+
UnderOs::File.delete('test.txt')
|
45
|
+
@result = UnderOs::File.write('test.txt', 'stuff')
|
46
|
+
end
|
47
|
+
|
48
|
+
it "creates new files" do
|
49
|
+
UnderOs::File.exists?('test.txt').should == true
|
50
|
+
end
|
51
|
+
|
52
|
+
it "writes stuff into files" do
|
53
|
+
UnderOs::File.read('test.txt').should == 'stuff'
|
54
|
+
end
|
55
|
+
|
56
|
+
it "overwrites existing files" do
|
57
|
+
UnderOs::File.write('test.txt', 'new stuff')
|
58
|
+
UnderOs::File.read('test.txt').should == 'new stuff'
|
59
|
+
end
|
60
|
+
|
61
|
+
it "returns a new File object" do
|
62
|
+
@result.class.should == UnderOs::File
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe '.size' do
|
67
|
+
it "returns the file size" do
|
68
|
+
UnderOs::File.write('test.txt', '12345')
|
69
|
+
UnderOs::File.size('test.txt').should == 5
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe '.delete' do
|
74
|
+
before do
|
75
|
+
UnderOs::File.write('test.txt', 'stuff')
|
76
|
+
end
|
77
|
+
|
78
|
+
it "deletes files" do
|
79
|
+
UnderOs::File.delete('test.txt')
|
80
|
+
UnderOs::File.exists?('test.txt').should == false
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
describe '.tmp' do
|
85
|
+
before do
|
86
|
+
@file = UnderOs::File.tmp("test.txt")
|
87
|
+
end
|
88
|
+
|
89
|
+
it "creates a new File instance" do
|
90
|
+
@file.class.should == UnderOs::File
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should locate it in the tmp directory" do
|
94
|
+
@file.path.to_s.should == "#{NSTemporaryDirectory()}test.txt"
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
@@ -0,0 +1,156 @@
|
|
1
|
+
describe UnderOs::Point do
|
2
|
+
|
3
|
+
describe '#initialize' do
|
4
|
+
it "should eat numbers" do
|
5
|
+
point = UnderOs::Point.new(10, 20)
|
6
|
+
point.x.should == 10
|
7
|
+
point.y.should == 20
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should eat hashes" do
|
11
|
+
point = UnderOs::Point.new(x: 20, y: 30)
|
12
|
+
point.x.should == 20
|
13
|
+
point.y.should == 30
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should eat hashes with string keys" do
|
17
|
+
point = UnderOs::Point.new('x' => 30, 'y' => 40)
|
18
|
+
point.x.should == 30
|
19
|
+
point.y.should == 40
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should eat other opints" do
|
23
|
+
other_point = UnderOs::Point.new(x: 40, y: 50)
|
24
|
+
new_point = UnderOs::Point.new(other_point)
|
25
|
+
new_point.x.should == other_point.x
|
26
|
+
new_point.y.should == other_point.y
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#==' do
|
31
|
+
before do
|
32
|
+
@point = UnderOs::Point.new(x: 50, y: 60)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should allow comparison to another point" do
|
36
|
+
@point.should == UnderOs::Point.new(x: 50, y: 60)
|
37
|
+
@point.should.not == UnderOs::Point.new(x: 60, y: 50)
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should allow comparison to a hash" do
|
41
|
+
@point.should == {x: 50, y: 60}
|
42
|
+
@point.should.not == {x: 60, y: 50}
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe '#*' do
|
47
|
+
it "should allow to multiply pointers by a factor" do
|
48
|
+
point = UnderOs::Point.new(x: 15, y: 25)
|
49
|
+
new_point = point * 2
|
50
|
+
new_point.should.not == point
|
51
|
+
new_point.should == {x: 30, y: 50}
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe "#+" do
|
56
|
+
before do
|
57
|
+
@point = UnderOs::Point.new(x: 10, y: 20)
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "with another point" do
|
61
|
+
before do
|
62
|
+
@new_point = @point + UnderOs::Point.new(x: 11, y: 22)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should make an instance of a Point" do
|
66
|
+
@new_point.class.should == UnderOs::Point
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should apply changes correctly" do
|
70
|
+
@new_point.x.should == 21
|
71
|
+
@new_point.y.should == 42
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe "with a number" do
|
76
|
+
before do
|
77
|
+
@new_point = @point + 4
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should make an instance of a Point" do
|
81
|
+
@new_point.class.should == UnderOs::Point
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should apply changes correctly" do
|
85
|
+
@new_point.x.should == 14
|
86
|
+
@new_point.y.should == 24
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe "with a Hash" do
|
91
|
+
before do
|
92
|
+
@new_point = @point + {x: 6, y: 8}
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should make an instance of a Point" do
|
96
|
+
@new_point.class.should == UnderOs::Point
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should apply changes correctly" do
|
100
|
+
@new_point.x.should == 16
|
101
|
+
@new_point.y.should == 28
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe "#-" do
|
107
|
+
before do
|
108
|
+
@point = UnderOs::Point.new(x: 10, y: 20)
|
109
|
+
end
|
110
|
+
|
111
|
+
describe "with another point" do
|
112
|
+
before do
|
113
|
+
@new_point = @point - UnderOs::Point.new(x: 2, y: 4)
|
114
|
+
end
|
115
|
+
|
116
|
+
it "should make an instance of a Point" do
|
117
|
+
@new_point.class.should == UnderOs::Point
|
118
|
+
end
|
119
|
+
|
120
|
+
it "should apply changes correctly" do
|
121
|
+
@new_point.x.should == 8
|
122
|
+
@new_point.y.should == 16
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
describe "with a number" do
|
127
|
+
before do
|
128
|
+
@new_point = @point - 4
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should make an instance of a Point" do
|
132
|
+
@new_point.class.should == UnderOs::Point
|
133
|
+
end
|
134
|
+
|
135
|
+
it "should apply changes correctly" do
|
136
|
+
@new_point.x.should == 6
|
137
|
+
@new_point.y.should == 16
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
describe "with a Hash" do
|
142
|
+
before do
|
143
|
+
@new_point = @point - {x: 6, y: 8}
|
144
|
+
end
|
145
|
+
|
146
|
+
it "should make an instance of a Point" do
|
147
|
+
@new_point.class.should == UnderOs::Point
|
148
|
+
end
|
149
|
+
|
150
|
+
it "should apply changes correctly" do
|
151
|
+
@new_point.x.should == 4
|
152
|
+
@new_point.y.should == 12
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|