corefoundation 0.2.0 → 0.3.4
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/lib/corefoundation/array.rb +4 -5
- data/lib/corefoundation/base.rb +39 -143
- data/lib/corefoundation/data.rb +2 -6
- data/lib/corefoundation/date.rb +1 -1
- data/lib/corefoundation/dictionary.rb +3 -4
- data/lib/corefoundation/exceptions.rb +16 -0
- data/lib/corefoundation/memory.rb +47 -0
- data/lib/corefoundation/number.rb +2 -2
- data/lib/corefoundation/preferences.rb +134 -0
- data/lib/corefoundation/range.rb +10 -0
- data/lib/corefoundation/refinements.rb +121 -0
- data/lib/corefoundation/register.rb +24 -0
- data/lib/corefoundation/string.rb +6 -29
- data/lib/corefoundation/version.rb +1 -1
- data/lib/corefoundation.rb +38 -13
- metadata +72 -121
- data/CHANGELOG +0 -12
- data/README.md +0 -40
- data/lib/corefoundation/extensions.rb +0 -158
- data/spec/array_spec.rb +0 -92
- data/spec/boolean_spec.rb +0 -24
- data/spec/data_spec.rb +0 -30
- data/spec/date_spec.rb +0 -25
- data/spec/dictionary_spec.rb +0 -81
- data/spec/extensions_spec.rb +0 -127
- data/spec/null_spec.rb +0 -7
- data/spec/number_spec.rb +0 -52
- data/spec/spec_helper.rb +0 -10
- data/spec/string_spec.rb +0 -48
@@ -1,158 +0,0 @@
|
|
1
|
-
# Rubyinteger
|
2
|
-
class Integer
|
3
|
-
# Converts the Integer to a {CF::Number} using {CF::Number.from_i}
|
4
|
-
# @return [CF::Number]
|
5
|
-
def to_cf
|
6
|
-
CF::Number.from_i(self)
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
# Ruby float class
|
11
|
-
class Float
|
12
|
-
# Converts the Float to a {CF::Number} using {CF::Number.from_f}
|
13
|
-
# @return [CF::Number]
|
14
|
-
def to_cf
|
15
|
-
CF::Number.from_f(self)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
# Ruby array class
|
20
|
-
class Array
|
21
|
-
# Converts the Array to an immutable {CF::Array} by calling `to_cf` on each element it contains
|
22
|
-
# @return [CF::Number]
|
23
|
-
def to_cf
|
24
|
-
CF::Array.immutable(collect(&:to_cf))
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
# Ruby true class
|
29
|
-
class TrueClass
|
30
|
-
# Returns a CF::Boolean object representing true
|
31
|
-
# @return [CF::Boolean]
|
32
|
-
def to_cf
|
33
|
-
CF::Boolean::TRUE
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
# Ruby false class
|
38
|
-
class FalseClass
|
39
|
-
# Returns a CF::Boolean object representing false
|
40
|
-
# @return [CF::Boolean]
|
41
|
-
def to_cf
|
42
|
-
CF::Boolean::FALSE
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
# Ruby String class
|
47
|
-
class String
|
48
|
-
# Returns a {CF::String} or {CF::Data} representing the string.
|
49
|
-
# If {#binary?} returns true a {CF::Data} is returned, if not a {CF::String} is returned
|
50
|
-
#
|
51
|
-
# If you want a {CF::Data} with the contents of a non binary string, use {#to_cf_data}
|
52
|
-
#
|
53
|
-
# @return [CF::String, CF::Data]
|
54
|
-
def to_cf
|
55
|
-
self.binary? ? self.to_cf_data : self.to_cf_string
|
56
|
-
end
|
57
|
-
|
58
|
-
# @!method binary?
|
59
|
-
#
|
60
|
-
# used to determine whether {#to_cf} should return a {CF::String} or a {CF::Data}. On ruby 1.9 and above this simply
|
61
|
-
# checks whether the encoding is ascii-8bit or not.
|
62
|
-
#
|
63
|
-
# On ruby 1.8.7
|
64
|
-
#
|
65
|
-
# - A string is binary if you call {#binary!} with the default argument of true
|
66
|
-
# - A string is not binary if you call {#binary!} with the argument false
|
67
|
-
#
|
68
|
-
# If you have never called {#binary!} then a string is binary if Iconv does not think it is valid utf-8
|
69
|
-
# @return whether the string is handled as binary data or not
|
70
|
-
#
|
71
|
-
if '<3'.respond_to? :encoding
|
72
|
-
def binary?
|
73
|
-
encoding == Encoding::ASCII_8BIT
|
74
|
-
end
|
75
|
-
else
|
76
|
-
def binary?
|
77
|
-
unless defined? @cf_is_binary
|
78
|
-
begin
|
79
|
-
::Iconv.conv('UTF-8', 'UTF-8', self)
|
80
|
-
return false if self.frozen?
|
81
|
-
@cf_is_binary = false
|
82
|
-
rescue Iconv::IllegalSequence
|
83
|
-
return true if self.frozen?
|
84
|
-
@cf_is_binary = true
|
85
|
-
end
|
86
|
-
end
|
87
|
-
@cf_is_binary
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
if '<3'.respond_to? :encoding
|
92
|
-
# On ruby 1.8.7 sets or clears the flag used by {#binary?}. On ruby 1.9 the string's encoding is forced.
|
93
|
-
# @see #binary?
|
94
|
-
#
|
95
|
-
# @note There is no advantage to using this over the standard encoding methods unless you wish to retain 1.8.7 compatibility
|
96
|
-
#
|
97
|
-
# @param [optional, Boolean, Encoding] bin On ruby 1.8.7 only boolean values are admissible. On ruby 1.9 you can pass a specific encoding to force.
|
98
|
-
# If you pass `true` then `Encoding::ASCII_BIT` is used, if you pass `false` then `Encoding::UTF_8`
|
99
|
-
#
|
100
|
-
def binary!(bin=true)
|
101
|
-
if bin == true
|
102
|
-
self.force_encoding Encoding::ASCII_8BIT
|
103
|
-
else
|
104
|
-
# default to utf-8
|
105
|
-
self.force_encoding( (bin == false) ? "UTF-8" : bin)
|
106
|
-
end
|
107
|
-
self
|
108
|
-
end
|
109
|
-
else
|
110
|
-
# On ruby 1.8.7 sets or clears the flag used by {#binary?}. On ruby 1.9 the string's encoding is forced.
|
111
|
-
# @see #binary?
|
112
|
-
#
|
113
|
-
# @note There is no advantage to using this over the standard encoding methods unless you wish to retain 1.8.7 compatibility
|
114
|
-
#
|
115
|
-
# @param [optional, Boolean, Encoding] bin On ruby 1.8.7 only boolean values are admissible. On ruby 1.9 you can pass a specific encoding to force.
|
116
|
-
# If you pass `true` then `Encoding::ASCII_BIT` is used, if you pass `false` then `Encoding::UTF_8`
|
117
|
-
#
|
118
|
-
def binary!(bin=true)
|
119
|
-
@cf_is_binary = !! bin
|
120
|
-
self
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
# Returns a {CF::String} representing the string
|
125
|
-
# @return [CF::String]
|
126
|
-
def to_cf_string
|
127
|
-
CF::String.from_string self
|
128
|
-
end
|
129
|
-
|
130
|
-
# Returns a {CF::Data} representing the string
|
131
|
-
# @return [CF::Data]
|
132
|
-
def to_cf_data
|
133
|
-
CF::Data.from_string self
|
134
|
-
end
|
135
|
-
|
136
|
-
end
|
137
|
-
|
138
|
-
# Ruby Time class
|
139
|
-
class Time
|
140
|
-
# Returns a {CF::Date} representing the time.
|
141
|
-
# @return [CF::Date]
|
142
|
-
def to_cf
|
143
|
-
CF::Date.from_time(self)
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
# Ruby Hash class
|
148
|
-
class Hash
|
149
|
-
# Converts the Hash to an mutable {CF::Dictionary} by calling `to_cf` on each key and value it contains
|
150
|
-
# @return [CF::Dictionary]
|
151
|
-
def to_cf
|
152
|
-
CF::Dictionary.mutable.tap do |r|
|
153
|
-
each do |k,v|
|
154
|
-
r[k.to_cf] = v.to_cf
|
155
|
-
end
|
156
|
-
end
|
157
|
-
end
|
158
|
-
end
|
data/spec/array_spec.rb
DELETED
@@ -1,92 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe CF::Array do
|
4
|
-
describe 'mutable' do
|
5
|
-
subject { CF::Array.mutable}
|
6
|
-
|
7
|
-
it { should be_a(CF::Array)}
|
8
|
-
it { should be_mutable}
|
9
|
-
|
10
|
-
describe '[]=' do
|
11
|
-
it 'should raise when trying to store a non cf value' do
|
12
|
-
expect {subject[0] = 123}.to raise_error(TypeError)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
describe '<<' do
|
17
|
-
it 'should raise when trying to store a non cf value' do
|
18
|
-
expect {subject << 123}.to raise_error(TypeError)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
|
24
|
-
describe 'immutable' do
|
25
|
-
it 'should raise if all of the array elements are not cf values' do
|
26
|
-
expect {CF::Array.immutable([CF::Boolean::TRUE, 1])}.to raise_error(TypeError)
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'should return an immutable cfarray' do
|
30
|
-
CF::Array.immutable([CF::Boolean::TRUE]).should be_a(CF::Array)
|
31
|
-
end
|
32
|
-
|
33
|
-
context 'with an immutable array' do
|
34
|
-
subject { CF::Array.immutable([CF::Boolean::TRUE, CF::String.from_string('123')])}
|
35
|
-
|
36
|
-
describe '[]=' do
|
37
|
-
it 'should raise TypeError' do
|
38
|
-
expect {subject[0] = CF::Boolean::TRUE}.to raise_error(TypeError)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
describe '<<' do
|
43
|
-
it 'should raise TypeError' do
|
44
|
-
expect {subject << CF::Boolean::TRUE}.to raise_error(TypeError)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
context "with an array" do
|
51
|
-
subject { CF::Array.immutable([CF::Boolean::TRUE, CF::String.from_string('123')])}
|
52
|
-
|
53
|
-
describe '[]' do
|
54
|
-
it 'should return the typecast value at the index' do
|
55
|
-
subject[1].should be_a(CF::String)
|
56
|
-
subject[1].should == CF::String.from_string('123')
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
|
61
|
-
describe 'length' do
|
62
|
-
it 'should return the count of items in the dictionary' do
|
63
|
-
subject.length.should == 2
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
describe 'to_ruby' do
|
68
|
-
it 'should return the result of calling to ruby on its contents' do
|
69
|
-
subject.to_ruby.should == [true, '123']
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
describe 'each' do
|
74
|
-
it 'should iterate over each value' do
|
75
|
-
values = []
|
76
|
-
subject.each do |v|
|
77
|
-
values << v
|
78
|
-
end
|
79
|
-
values[0].should == CF::Boolean::TRUE
|
80
|
-
values[1].should == CF::String.from_string('123')
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
it 'should be enumerable' do
|
85
|
-
values = {}
|
86
|
-
subject.each_with_index do |value, index|
|
87
|
-
values[index] = value
|
88
|
-
end
|
89
|
-
values.should == {0 => CF::Boolean::TRUE, 1 => CF::String.from_string('123')}
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
data/spec/boolean_spec.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe CF do
|
4
|
-
|
5
|
-
|
6
|
-
describe CF::Boolean do
|
7
|
-
describe 'value' do
|
8
|
-
it 'should return true for CF::Boolean::TRUE' do
|
9
|
-
CF::Boolean::TRUE.value.should == true
|
10
|
-
end
|
11
|
-
it 'should return false for CF::Boolean::FALSE' do
|
12
|
-
CF::Boolean::FALSE.value.should == false
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
describe 'to_ruby' do
|
17
|
-
it 'should behave like value' do
|
18
|
-
CF::Boolean::FALSE.to_ruby.should == false
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
data/spec/data_spec.rb
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
|
4
|
-
describe CF::Data do
|
5
|
-
subject {CF::Data.from_string('A CF string')}
|
6
|
-
describe '#to_s' do
|
7
|
-
it 'should return a binary ruby string' do
|
8
|
-
ruby_string = subject.to_s
|
9
|
-
ruby_string.should == 'A CF string'
|
10
|
-
if CF::String::HAS_ENCODING
|
11
|
-
ruby_string.encoding.should == Encoding::ASCII_8BIT
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
describe '#size' do
|
17
|
-
it 'should return the size in bytes of the cfdata' do
|
18
|
-
subject.size.should == 11
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe 'to_ruby' do
|
23
|
-
it 'should behave like to_s' do
|
24
|
-
subject.to_ruby.should == 'A CF string'
|
25
|
-
if 'A CF string'.respond_to? "encoding"
|
26
|
-
subject.to_ruby.encoding.should == Encoding::ASCII_8BIT
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
data/spec/date_spec.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe CF::Date do
|
4
|
-
describe('from_time') do
|
5
|
-
it 'should create a cf date from a time' do
|
6
|
-
CF::Date.from_time(Time.now).should be_a(CF::Date)
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
describe('to_time') do
|
11
|
-
it 'should return a time' do
|
12
|
-
t = CF::Date.from_time(Time.now).to_time
|
13
|
-
t.should be_a(Time)
|
14
|
-
t.should be_within(0.01).of(Time.now)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe 'to_ruby' do
|
19
|
-
it 'should behave like to_time' do
|
20
|
-
t = CF::Date.from_time(Time.now).to_ruby
|
21
|
-
t.should be_a(Time)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
data/spec/dictionary_spec.rb
DELETED
@@ -1,81 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
|
4
|
-
describe CF::Dictionary do
|
5
|
-
describe 'mutable' do
|
6
|
-
it 'should return a cf dictionary' do
|
7
|
-
CF::Dictionary.mutable.should be_a(CF::Dictionary)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
describe 'hash access' do
|
12
|
-
subject {CF::Dictionary.mutable}
|
13
|
-
|
14
|
-
it 'should return nil when the key does not exist' do
|
15
|
-
subject['doesnotexist'].should be_nil
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'should raise when trying to store a non cf value' do
|
19
|
-
expect {subject[CF::String.from_string('key')]=1}.to raise_error(TypeError)
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'should raise when trying to store a non cf key' do
|
23
|
-
expect {subject[1]=CF::String.from_string('value')}.to raise_error(TypeError)
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'should allow storing and retrieving a cf key pair' do
|
27
|
-
subject[CF::String.from_string('key')] = CF::String.from_string('value')
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'should instantiate the correct type on retrieval' do
|
31
|
-
subject[CF::String.from_string('key')] = CF::String.from_string('value')
|
32
|
-
subject[CF::String.from_string('key')].should be_a(CF::String)
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'should coerce string keys' do
|
36
|
-
subject['key'] = CF::String.from_string('value')
|
37
|
-
subject['key'].to_s.should == 'value'
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
describe 'merge!' do
|
42
|
-
subject { CF::Dictionary.mutable.tap {|dict| dict['1'] = CF::Boolean::TRUE; dict['2'] = CF::Boolean::FALSE}}
|
43
|
-
it 'should merge the argument into the receiver' do
|
44
|
-
argument = {'1' => false, 'foo' => 'bar'}.to_cf
|
45
|
-
subject.merge! argument
|
46
|
-
subject.to_ruby.should == {'1' => false, '2' => false, 'foo' => 'bar'}
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
describe 'length' do
|
51
|
-
it 'should return the count of items in the dictionary' do
|
52
|
-
dict = CF::Dictionary.mutable
|
53
|
-
dict['one'] = CF::Boolean::TRUE
|
54
|
-
dict['two'] = CF::Boolean::TRUE
|
55
|
-
|
56
|
-
dict.length.should == 2
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
describe 'enumeration' do
|
61
|
-
subject { CF::Dictionary.mutable.tap {|dict| dict['1'] = CF::Boolean::TRUE; dict['2'] = CF::Boolean::FALSE}}
|
62
|
-
|
63
|
-
it 'should yield each key value pair in the dictionary' do
|
64
|
-
hash = {}
|
65
|
-
subject.each do |k,v|
|
66
|
-
hash[k] = v
|
67
|
-
end
|
68
|
-
hash.should == {CF::String.from_string('1') => CF::Boolean::TRUE,
|
69
|
-
CF::String.from_string('2') => CF::Boolean::FALSE}
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
describe 'to_ruby' do
|
74
|
-
subject { CF::Dictionary.mutable.tap {|dict| dict['1'] = CF::Boolean::TRUE; dict['2'] = CF::Array.immutable([CF::Boolean::FALSE])}}
|
75
|
-
|
76
|
-
it 'should return a ruby hash where keys and values have been converted to ruby types' do
|
77
|
-
subject.to_ruby.should == {'1' => true, '2' => [false]}
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
end
|
data/spec/extensions_spec.rb
DELETED
@@ -1,127 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
describe 'extensions' do
|
5
|
-
context 'with an integer' do
|
6
|
-
it 'should return a cfnumber' do
|
7
|
-
1.to_cf.should be_a(CF::Number)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
context 'with a float' do
|
12
|
-
it 'should return a cfnumber' do
|
13
|
-
(1.0).to_cf.should be_a(CF::Number)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
describe String do
|
18
|
-
uber = [195, 188, 98, 101, 114]
|
19
|
-
|
20
|
-
describe 'to_cf' do
|
21
|
-
|
22
|
-
unless defined? RUBY_ENGINE and RUBY_ENGINE == 'jruby'
|
23
|
-
context 'with data incorrectly marked as non binary' do
|
24
|
-
it 'returns nil' do
|
25
|
-
[0xff, 0xff, 0xff].pack("C*").binary!(false).to_cf.should be_nil
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
context 'with a non binary string' do
|
31
|
-
it 'should return a cf string' do
|
32
|
-
'123'.to_cf.should be_a(CF::String)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
context 'with a string marked as binary' do
|
37
|
-
it 'should return a cf data' do
|
38
|
-
'123'.binary!.to_cf.should be_a(CF::Data)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
context 'with a binary string' do
|
43
|
-
it 'should return a cf data' do
|
44
|
-
[0xff, 0xff, 0xff].pack("C*").to_cf.should be_a(CF::Data)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
context 'with a utf-8 string' do
|
49
|
-
it 'should return a cfstring' do
|
50
|
-
uber.pack("C*").should_not be_a(CF::String)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
describe 'binary?' do
|
56
|
-
|
57
|
-
it 'should return false on a plain ascii string' do
|
58
|
-
'123'.should_not be_binary
|
59
|
-
end
|
60
|
-
|
61
|
-
if CF::String::HAS_ENCODING
|
62
|
-
it 'should return false on valid utf data' do
|
63
|
-
"\xc3\xc9".should_not be_binary
|
64
|
-
end
|
65
|
-
else
|
66
|
-
it 'should return false on valid utf data' do
|
67
|
-
uber.pack("C*").should_not be_binary
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
it 'should return false on string forced to non binary' do
|
72
|
-
"\xc3\xc9".binary!(false).should_not be_binary
|
73
|
-
end
|
74
|
-
|
75
|
-
it 'should return true if binary! has been called' do
|
76
|
-
'123'.binary!.should be_binary
|
77
|
-
end
|
78
|
-
|
79
|
-
if CF::String::HAS_ENCODING
|
80
|
-
it 'should return true for ascii 8bit strings' do
|
81
|
-
'123'.encode(Encoding::ASCII_8BIT).should be_binary
|
82
|
-
end
|
83
|
-
else
|
84
|
-
it 'should return true for data that cannot be converted to utf8' do
|
85
|
-
"\xff\xff\xff".should be_binary
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
end
|
91
|
-
|
92
|
-
context 'with true' do
|
93
|
-
it 'should return CF::Boolean::TRUE' do
|
94
|
-
true.to_cf.should == CF::Boolean::TRUE
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
context 'with false' do
|
99
|
-
it 'should return CF::Boolean::FALSE' do
|
100
|
-
false.to_cf.should == CF::Boolean::FALSE
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
context 'with a time' do
|
105
|
-
it 'should return a CFDate' do
|
106
|
-
Time.now.to_cf.should be_a(CF::Date)
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
context 'with an array' do
|
111
|
-
it 'should return a cfarray containing cf objects' do
|
112
|
-
cf_array = [true, 1, 'hello'].to_cf
|
113
|
-
cf_array.should be_a(CF::Array)
|
114
|
-
cf_array[0].should == CF::Boolean::TRUE
|
115
|
-
cf_array[1].should be_a(CF::Number)
|
116
|
-
cf_array[2].should == CF::String.from_string('hello')
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
context 'with a dictionary' do
|
121
|
-
it 'should return a cfdictionary containing cf objects' do
|
122
|
-
cf_hash = {'key_1' => true, 'key_2' => false}.to_cf
|
123
|
-
cf_hash['key_1'].should == CF::Boolean::TRUE
|
124
|
-
cf_hash['key_2'].should == CF::Boolean::FALSE
|
125
|
-
end
|
126
|
-
end
|
127
|
-
end
|
data/spec/null_spec.rb
DELETED
data/spec/number_spec.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe CF::Number do
|
4
|
-
|
5
|
-
describe 'to_ruby' do
|
6
|
-
context 'with a number created from a float' do
|
7
|
-
subject {CF::Number.from_f('3.1415')}
|
8
|
-
it 'should return a float' do
|
9
|
-
subject.to_ruby.should be_within(0.0000001).of(3.14150)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
context 'with a number created from a int' do
|
13
|
-
subject {CF::Number.from_i('31415')}
|
14
|
-
it 'should return a int' do
|
15
|
-
subject.to_ruby.should == 31415
|
16
|
-
subject.to_ruby.should be_a(Integer)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'should be comparable' do
|
22
|
-
(CF::Number.from_f('3.1415') <= CF::Number.from_i(4)).should be_true
|
23
|
-
end
|
24
|
-
|
25
|
-
describe('from_f') do
|
26
|
-
it 'should create a cf number from a float' do
|
27
|
-
CF::Number.from_f('3.1415').should be_a(CF::Number)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
describe('from_i') do
|
32
|
-
it 'should create a cf number from a 32 bit sized int' do
|
33
|
-
CF::Number.from_i(2**30).should be_a(CF::Number)
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'should create a cf number from a 64 bit sized int' do
|
37
|
-
CF::Number.from_i(2**60).should be_a(CF::Number)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
describe('to_i') do
|
42
|
-
it 'should return a ruby integer representing the cfnumber' do
|
43
|
-
CF::Number.from_i(2**60).to_i.should == 2**60
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
describe('to_f') do
|
48
|
-
it 'should return a ruby float representing the cfnumber' do
|
49
|
-
CF::Number.from_f(3.1415).to_f.should be_within(0.0000001).of(3.14150)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
data/spec/spec_helper.rb
DELETED
data/spec/string_spec.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe CF::String do
|
4
|
-
|
5
|
-
describe 'from_string' do
|
6
|
-
it 'should return a CF::String' do
|
7
|
-
CF::String.from_string('A CF string').should be_a(CF::String)
|
8
|
-
end
|
9
|
-
|
10
|
-
# The intent is to force feed CF::String with an invalid utf-8 string
|
11
|
-
# but jruby doesn't seem to allow this to be constructed
|
12
|
-
unless defined? RUBY_ENGINE and RUBY_ENGINE == 'jruby'
|
13
|
-
context 'with invalid data' do
|
14
|
-
it 'returns nil' do
|
15
|
-
if CF::String::HAS_ENCODING
|
16
|
-
CF::String.from_string("\xff\xff\xff".force_encoding('UTF-8')).should be_nil
|
17
|
-
else
|
18
|
-
CF::String.from_string("\xff\xff\xff").should be_nil
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe '#to_s' do
|
26
|
-
it 'should return a utf ruby string' do
|
27
|
-
ruby_string = CF::String.from_string('A CF string').to_s
|
28
|
-
ruby_string.should == 'A CF string'
|
29
|
-
if CF::String::HAS_ENCODING
|
30
|
-
ruby_string.encoding.should == Encoding::UTF_8
|
31
|
-
else
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
describe 'to_ruby' do
|
37
|
-
it 'should behave like to_s' do
|
38
|
-
CF::String.from_string('A CF string').to_ruby.should == 'A CF string'
|
39
|
-
if CF::String::HAS_ENCODING
|
40
|
-
CF::String.from_string('A CF string').to_ruby.encoding.should == Encoding::UTF_8
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'should be comparable' do
|
46
|
-
CF::String.from_string('aaa').should <= CF::String.from_string('zzz')
|
47
|
-
end
|
48
|
-
end
|