aixm 0.1.3 → 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 +4 -4
- data/CHANGELOG.md +14 -0
- data/README.md +91 -11
- data/lib/aixm.rb +10 -0
- data/lib/aixm/base.rb +10 -0
- data/lib/aixm/component/base.rb +1 -1
- data/lib/aixm/component/class_layer.rb +0 -3
- data/lib/aixm/component/geometry.rb +0 -3
- data/lib/aixm/component/geometry/arc.rb +4 -8
- data/lib/aixm/component/geometry/base.rb +8 -0
- data/lib/aixm/component/geometry/border.rb +3 -8
- data/lib/aixm/component/geometry/circle.rb +5 -9
- data/lib/aixm/component/geometry/point.rb +6 -13
- data/lib/aixm/component/schedule.rb +8 -10
- data/lib/aixm/component/vertical_limits.rb +1 -4
- data/lib/aixm/document.rb +9 -6
- data/lib/aixm/f.rb +41 -0
- data/lib/aixm/feature/airspace.rb +5 -9
- data/lib/aixm/feature/base.rb +6 -0
- data/lib/aixm/feature/navigational_aid/base.rb +46 -0
- data/lib/aixm/feature/navigational_aid/designated_point.rb +69 -0
- data/lib/aixm/feature/navigational_aid/dme.rb +54 -0
- data/lib/aixm/feature/navigational_aid/marker.rb +41 -0
- data/lib/aixm/feature/navigational_aid/ndb.rb +56 -0
- data/lib/aixm/feature/navigational_aid/tacan.rb +54 -0
- data/lib/aixm/feature/navigational_aid/vor.rb +92 -0
- data/lib/aixm/refinements.rb +23 -2
- data/lib/aixm/shortcuts.rb +12 -5
- data/lib/aixm/version.rb +1 -1
- data/lib/aixm/xy.rb +9 -6
- data/lib/aixm/z.rb +22 -11
- data/spec/factory.rb +87 -4
- data/spec/lib/aixm/component/class_layer_spec.rb +6 -6
- data/spec/lib/aixm/component/geometry/arc_spec.rb +16 -16
- data/spec/lib/aixm/component/geometry/border_spec.rb +4 -4
- data/spec/lib/aixm/component/geometry/circle_spec.rb +10 -10
- data/spec/lib/aixm/component/geometry/point_spec.rb +4 -4
- data/spec/lib/aixm/component/geometry_spec.rb +21 -21
- data/spec/lib/aixm/component/schedule_spec.rb +6 -6
- data/spec/lib/aixm/component/vertical_limits_spec.rb +18 -18
- data/spec/lib/aixm/document_spec.rb +220 -30
- data/spec/lib/aixm/f_spec.rb +58 -0
- data/spec/lib/aixm/feature/airspace_spec.rb +5 -5
- data/spec/lib/aixm/feature/navigational_aid/base_spec.rb +37 -0
- data/spec/lib/aixm/feature/navigational_aid/designated_point_spec.rb +43 -0
- data/spec/lib/aixm/feature/navigational_aid/dme_spec.rb +43 -0
- data/spec/lib/aixm/feature/navigational_aid/marker_spec.rb +44 -0
- data/spec/lib/aixm/feature/navigational_aid/ndb_spec.rb +54 -0
- data/spec/lib/aixm/feature/navigational_aid/tacan_spec.rb +43 -0
- data/spec/lib/aixm/feature/navigational_aid/vor_spec.rb +58 -0
- data/spec/lib/aixm/refinements_spec.rb +27 -0
- data/spec/lib/aixm/xy_spec.rb +29 -23
- data/spec/lib/aixm/z_spec.rb +33 -17
- metadata +29 -2
@@ -0,0 +1,58 @@
|
|
1
|
+
require_relative '../../spec_helper'
|
2
|
+
|
3
|
+
describe AIXM::F do
|
4
|
+
describe :initialize do
|
5
|
+
it "must parse valid unit" do
|
6
|
+
subject = AIXM.f(123.35, :mhz)
|
7
|
+
subject.freq.must_equal 123.35
|
8
|
+
subject.unit.must_equal :mhz
|
9
|
+
end
|
10
|
+
|
11
|
+
it "won't parse invalid unit" do
|
12
|
+
-> { AIXM.f(123.35, :foo) }.must_raise ArgumentError
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe :to_digest do
|
17
|
+
it "must return digest of payload" do
|
18
|
+
AIXM.f(111, :mhz).to_digest.must_equal 779608518
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe :== do
|
23
|
+
it "recognizes objects with identical frequency and unit as equal" do
|
24
|
+
a = AIXM.f(123.0, :mhz)
|
25
|
+
b = AIXM.f(123, 'MHZ')
|
26
|
+
a.must_equal b
|
27
|
+
end
|
28
|
+
|
29
|
+
it "recognizes objects with different frequency or unit as unequal" do
|
30
|
+
a = AIXM.f(123.35, :mhz)
|
31
|
+
b = AIXM.f(123.35, :khz)
|
32
|
+
a.wont_equal b
|
33
|
+
end
|
34
|
+
|
35
|
+
it "recognizes objects of different class as unequal" do
|
36
|
+
a = AIXM.f(123.35, :mhz)
|
37
|
+
b = :oggy
|
38
|
+
a.wont_equal b
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe :between? do
|
43
|
+
subject do
|
44
|
+
AIXM.f(100, :mhz)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "detect frequencies within a frequency band" do
|
48
|
+
subject.between?(90, 110, :mhz).must_equal true
|
49
|
+
subject.between?(90, 100, :mhz).must_equal true
|
50
|
+
subject.between?(100.0, 100.1, :mhz).must_equal true
|
51
|
+
end
|
52
|
+
|
53
|
+
it "detect frequencies outside of a frequency band" do
|
54
|
+
subject.between?(90, 110, :khz).must_equal false
|
55
|
+
subject.between?(90, 95, :mhz).must_equal false
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -3,7 +3,7 @@ require_relative '../../../spec_helper'
|
|
3
3
|
describe AIXM::Feature::Airspace do
|
4
4
|
context "incomplete" do
|
5
5
|
subject do
|
6
|
-
AIXM
|
6
|
+
AIXM.airspace(name: 'foobar', type: 'D')
|
7
7
|
end
|
8
8
|
|
9
9
|
describe :complete? do
|
@@ -27,14 +27,14 @@ describe AIXM::Feature::Airspace do
|
|
27
27
|
|
28
28
|
describe :to_digest do
|
29
29
|
it "must return digest of payload" do
|
30
|
-
subject.to_digest.must_equal
|
30
|
+
subject.to_digest.must_equal 367297292
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
34
|
describe :to_xml do
|
35
35
|
it "must build correct XML with OFM extensions" do
|
36
36
|
digest = subject.to_digest
|
37
|
-
subject.to_xml(:
|
37
|
+
subject.to_xml(:ofm).must_equal <<~"END"
|
38
38
|
<!-- Airspace: [D] POLYGON AIRSPACE -->
|
39
39
|
<Ase xt_classLayersAvail="false">
|
40
40
|
<AseUid mid="#{digest}" newEntity="true">
|
@@ -112,14 +112,14 @@ describe AIXM::Feature::Airspace do
|
|
112
112
|
|
113
113
|
describe :to_digest do
|
114
114
|
it "must return digest of payload" do
|
115
|
-
subject.to_digest.must_equal
|
115
|
+
subject.to_digest.must_equal 481196243
|
116
116
|
end
|
117
117
|
end
|
118
118
|
|
119
119
|
describe :to_xml do
|
120
120
|
it "must build correct XML with OFM extensions" do
|
121
121
|
digest = subject.to_digest
|
122
|
-
subject.to_xml(:
|
122
|
+
subject.to_xml(:ofm).must_equal <<~"END"
|
123
123
|
<!-- Airspace: [D] POLYGON AIRSPACE -->
|
124
124
|
<Ase xt_classLayersAvail="true">
|
125
125
|
<AseUid mid="#{digest}" newEntity="true">
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require_relative '../../../../spec_helper'
|
2
|
+
|
3
|
+
describe AIXM::Feature::NavigationalAid::Base do
|
4
|
+
let :base do
|
5
|
+
AIXM::Feature::NavigationalAid::Base
|
6
|
+
end
|
7
|
+
|
8
|
+
describe :initialize do
|
9
|
+
it "won't accept invalid arguments" do
|
10
|
+
-> { base.send(:new, id: 'id', name: 'name', xy: 0) }.must_raise ArgumentError
|
11
|
+
-> { base.send(:new, id: 'id', name: 'name', xy: AIXM::Factory.xy, z: 0) }.must_raise ArgumentError
|
12
|
+
-> { base.send(:new, id: 'id', name: 'name', xy: AIXM::Factory.xy, z: AIXM.z(1, :qne)) }.must_raise ArgumentError
|
13
|
+
end
|
14
|
+
|
15
|
+
context "downcase attributes" do
|
16
|
+
subject do
|
17
|
+
base.send(:new, id: 'id', name: 'name', xy: AIXM::Factory.xy)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "upcases ID" do
|
21
|
+
subject.id.must_equal 'ID'
|
22
|
+
end
|
23
|
+
|
24
|
+
it "upcases name" do
|
25
|
+
subject.name.must_equal 'NAME'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe :to_digest do
|
31
|
+
it "must return digest of payload" do
|
32
|
+
subject = base.send(:new, id: 'id', name: 'name', xy: AIXM::Factory.xy, z: AIXM.z(100, :qnh))
|
33
|
+
subject.to_digest.must_equal 711143170
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require_relative '../../../../spec_helper'
|
2
|
+
|
3
|
+
describe AIXM::Feature::NavigationalAid::DesignatedPoint do
|
4
|
+
context "complete" do
|
5
|
+
subject do
|
6
|
+
AIXM::Factory.designated_point
|
7
|
+
end
|
8
|
+
|
9
|
+
describe :kind do
|
10
|
+
it "must return class or type" do
|
11
|
+
subject.kind.must_equal :ICAO
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe :to_digest do
|
16
|
+
it "must return digest of payload" do
|
17
|
+
subject.to_digest.must_equal 582056647
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe :to_xml do
|
22
|
+
it "must build correct XML of VOR with OFM extension" do
|
23
|
+
subject.to_xml(:ofm).must_equal <<~END
|
24
|
+
<!-- Navigational aid: [ICAO] DESIGNATED POINT NAVAID -->
|
25
|
+
<Dpn>
|
26
|
+
<DpnUid newEntity="true">
|
27
|
+
<codeId>DPN</codeId>
|
28
|
+
<geoLat>47.85916667N</geoLat>
|
29
|
+
<geoLong>7.56000000E</geoLong>
|
30
|
+
</DpnUid>
|
31
|
+
<OrgUid/>
|
32
|
+
<txtName>DESIGNATED POINT NAVAID</txtName>
|
33
|
+
<codeDatum>WGE</codeDatum>
|
34
|
+
<codeType>ICAO</codeType>
|
35
|
+
<valElev>500</valElev>
|
36
|
+
<uomDistVer>FT</uomDistVer>
|
37
|
+
<txtRmk>designated point navaid</txtRmk>
|
38
|
+
</Dpn>
|
39
|
+
END
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require_relative '../../../../spec_helper'
|
2
|
+
|
3
|
+
describe AIXM::Feature::NavigationalAid::DME do
|
4
|
+
context "complete" do
|
5
|
+
subject do
|
6
|
+
AIXM::Factory.dme
|
7
|
+
end
|
8
|
+
|
9
|
+
describe :kind do
|
10
|
+
it "must return class or type" do
|
11
|
+
subject.kind.must_equal :DME
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe :to_digest do
|
16
|
+
it "must return digest of payload" do
|
17
|
+
subject.to_digest.must_equal 30256638
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe :to_xml do
|
22
|
+
it "must build correct XML with OFM extension" do
|
23
|
+
subject.to_xml(:ofm).must_equal <<~END
|
24
|
+
<!-- Navigational aid: [DME] DME NAVAID -->
|
25
|
+
<Dme>
|
26
|
+
<DmeUid newEntity="true">
|
27
|
+
<codeId>DME</codeId>
|
28
|
+
<geoLat>47.85916667N</geoLat>
|
29
|
+
<geoLong>7.56000000E</geoLong>
|
30
|
+
</DmeUid>
|
31
|
+
<OrgUid/>
|
32
|
+
<txtName>DME NAVAID</txtName>
|
33
|
+
<codeChannel>95X</codeChannel>
|
34
|
+
<codeDatum>WGE</codeDatum>
|
35
|
+
<valElev>500</valElev>
|
36
|
+
<uomDistVer>FT</uomDistVer>
|
37
|
+
<txtRmk>dme navaid</txtRmk>
|
38
|
+
</Dme>
|
39
|
+
END
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require_relative '../../../../spec_helper'
|
2
|
+
|
3
|
+
describe AIXM::Feature::NavigationalAid::Marker do
|
4
|
+
context "complete" do
|
5
|
+
subject do
|
6
|
+
AIXM::Factory.marker
|
7
|
+
end
|
8
|
+
|
9
|
+
describe :kind do
|
10
|
+
it "must return class or type" do
|
11
|
+
subject.kind.must_equal :Marker
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe :to_digest do
|
16
|
+
it "must return digest of payload" do
|
17
|
+
subject.to_digest.must_equal 371155747
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe :to_xml do
|
22
|
+
it "must build correct XML with OFM extension" do
|
23
|
+
subject.to_xml(:ofm).must_equal <<~END
|
24
|
+
<!-- Navigational aid: [Marker] MARKER NAVAID -->
|
25
|
+
<Mkr>
|
26
|
+
<MkrUid newEntity="true">
|
27
|
+
<codeId>---</codeId>
|
28
|
+
<geoLat>47.85916667N</geoLat>
|
29
|
+
<geoLong>7.56000000E</geoLong>
|
30
|
+
</MkrUid>
|
31
|
+
<OrgUid/>
|
32
|
+
<valFreq>75</valFreq>
|
33
|
+
<uomFreq>MHZ</uomFreq>
|
34
|
+
<txtName>MARKER NAVAID</txtName>
|
35
|
+
<codeDatum>WGE</codeDatum>
|
36
|
+
<valElev>500</valElev>
|
37
|
+
<uomDistVer>FT</uomDistVer>
|
38
|
+
<txtRmk>marker navaid</txtRmk>
|
39
|
+
</Mkr>
|
40
|
+
END
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require_relative '../../../../spec_helper'
|
2
|
+
|
3
|
+
describe AIXM::Feature::NavigationalAid::NDB do
|
4
|
+
describe :initialize do
|
5
|
+
let :f do
|
6
|
+
AIXM.f(555, :khz)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "won't accept invalid arguments" do
|
10
|
+
-> { AIXM.ndb(id: 'N', name: 'NDB', xy: AIXM::Factory.xy, f: 0) }.must_raise ArgumentError
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
context "complete" do
|
15
|
+
subject do
|
16
|
+
AIXM::Factory.ndb
|
17
|
+
end
|
18
|
+
|
19
|
+
describe :kind do
|
20
|
+
it "must return class or type" do
|
21
|
+
subject.kind.must_equal :NDB
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe :to_digest do
|
26
|
+
it "must return digest of payload" do
|
27
|
+
subject.to_digest.must_equal 839752023
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe :to_xml do
|
32
|
+
it "must build correct XML with OFM extension" do
|
33
|
+
subject.to_xml(:ofm).must_equal <<~END
|
34
|
+
<!-- Navigational aid: [NDB] NDB NAVAID -->
|
35
|
+
<Ndb>
|
36
|
+
<NdbUid newEntity="true">
|
37
|
+
<codeId>NDB</codeId>
|
38
|
+
<geoLat>47.85916667N</geoLat>
|
39
|
+
<geoLong>7.56000000E</geoLong>
|
40
|
+
</NdbUid>
|
41
|
+
<OrgUid/>
|
42
|
+
<txtName>NDB NAVAID</txtName>
|
43
|
+
<valFreq>555</valFreq>
|
44
|
+
<uomFreq>KHZ</uomFreq>
|
45
|
+
<codeDatum>WGE</codeDatum>
|
46
|
+
<valElev>500</valElev>
|
47
|
+
<uomDistVer>FT</uomDistVer>
|
48
|
+
<txtRmk>ndb navaid</txtRmk>
|
49
|
+
</Ndb>
|
50
|
+
END
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require_relative '../../../../spec_helper'
|
2
|
+
|
3
|
+
describe AIXM::Feature::NavigationalAid::TACAN do
|
4
|
+
context "complete" do
|
5
|
+
subject do
|
6
|
+
AIXM::Factory.tacan
|
7
|
+
end
|
8
|
+
|
9
|
+
describe :kind do
|
10
|
+
it "must return class or type" do
|
11
|
+
subject.kind.must_equal :TACAN
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe :to_digest do
|
16
|
+
it "must return digest of payload" do
|
17
|
+
subject.to_digest.must_equal 518546211
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe :to_xml do
|
22
|
+
it "must build correct XML with OFM extension" do
|
23
|
+
subject.to_xml(:ofm).must_equal <<~END
|
24
|
+
<!-- Navigational aid: [TACAN] TACAN NAVAID -->
|
25
|
+
<Tcn>
|
26
|
+
<TcnUid newEntity="true">
|
27
|
+
<codeId>TCN</codeId>
|
28
|
+
<geoLat>47.85916667N</geoLat>
|
29
|
+
<geoLong>7.56000000E</geoLong>
|
30
|
+
</TcnUid>
|
31
|
+
<OrgUid/>
|
32
|
+
<txtName>TACAN NAVAID</txtName>
|
33
|
+
<codeChannel>29X</codeChannel>
|
34
|
+
<codeDatum>WGE</codeDatum>
|
35
|
+
<valElev>500</valElev>
|
36
|
+
<uomDistVer>FT</uomDistVer>
|
37
|
+
<txtRmk>tacan navaid</txtRmk>
|
38
|
+
</Tcn>
|
39
|
+
END
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require_relative '../../../../spec_helper'
|
2
|
+
|
3
|
+
describe AIXM::Feature::NavigationalAid::VOR do
|
4
|
+
describe :initialize do
|
5
|
+
let :f do
|
6
|
+
AIXM.f(111, :mhz)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "won't accept invalid arguments" do
|
10
|
+
-> { AIXM.vor(id: 'V', name: 'VOR', xy: AIXM::Factory.xy, type: :foo, f: f, north: :geographic) }.must_raise ArgumentError
|
11
|
+
-> { AIXM.vor(id: 'V', name: 'VOR', xy: AIXM::Factory.xy, type: :vor, f: 0, north: :geographic) }.must_raise ArgumentError
|
12
|
+
-> { AIXM.vor(id: 'V', name: 'VOR', xy: AIXM::Factory.xy, type: :vor, f: f, north: :foobar) }.must_raise ArgumentError
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
context "complete" do
|
17
|
+
subject do
|
18
|
+
AIXM::Factory.vor
|
19
|
+
end
|
20
|
+
|
21
|
+
describe :kind do
|
22
|
+
it "must return class or type" do
|
23
|
+
subject.kind.must_equal :VOR
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe :to_digest do
|
28
|
+
it "must return digest of payload" do
|
29
|
+
subject.to_digest.must_equal 276222546
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe :to_xml do
|
34
|
+
it "must build correct XML of VOR with OFM extension" do
|
35
|
+
subject.to_xml(:ofm).must_equal <<~END
|
36
|
+
<!-- Navigational aid: [VOR] VOR NAVAID -->
|
37
|
+
<Vor>
|
38
|
+
<VorUid newEntity="true">
|
39
|
+
<codeId>VOR</codeId>
|
40
|
+
<geoLat>47.85916667N</geoLat>
|
41
|
+
<geoLong>7.56000000E</geoLong>
|
42
|
+
</VorUid>
|
43
|
+
<OrgUid/>
|
44
|
+
<txtName>VOR NAVAID</txtName>
|
45
|
+
<codeType>VOR</codeType>
|
46
|
+
<valFreq>111</valFreq>
|
47
|
+
<uomFreq>MHZ</uomFreq>
|
48
|
+
<codeTypeNorth>TRUE</codeTypeNorth>
|
49
|
+
<codeDatum>WGE</codeDatum>
|
50
|
+
<valElev>500</valElev>
|
51
|
+
<uomDistVer>FT</uomDistVer>
|
52
|
+
<txtRmk>vor navaid</txtRmk>
|
53
|
+
</Vor>
|
54
|
+
END
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -41,6 +41,33 @@ describe AIXM::Refinements do
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
+
describe 'Hash#lookup' do
|
45
|
+
subject do
|
46
|
+
{ one: 1, two: 2, three: 3, four: :three }
|
47
|
+
end
|
48
|
+
|
49
|
+
it "must return value for key if key is present" do
|
50
|
+
subject.lookup(:one).must_equal 1
|
51
|
+
end
|
52
|
+
|
53
|
+
it "must return value if key is not found but value is present" do
|
54
|
+
subject.lookup(1).must_equal 1
|
55
|
+
end
|
56
|
+
|
57
|
+
it "must return value for key if both key and value are present" do
|
58
|
+
subject.lookup(:three).must_equal 3
|
59
|
+
end
|
60
|
+
|
61
|
+
it "returns default if neither key nor value are present" do
|
62
|
+
subject.lookup(:foo, :default).must_equal :default
|
63
|
+
subject.lookup(:foo, nil).must_be_nil
|
64
|
+
end
|
65
|
+
|
66
|
+
it "fails if neither key, value nor default are present" do
|
67
|
+
-> { subject.lookup(:foo) }.must_raise KeyError
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
44
71
|
describe 'String#indent' do
|
45
72
|
it "must indent single line string" do
|
46
73
|
'foobar'.indent(2).must_equal ' foobar'
|