eadcodec 0.0.4 → 0.1.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.
Files changed (115) hide show
  1. data/Rakefile +12 -5
  2. data/lib/eadcodec.rb +76 -1
  3. data/lib/elements/accessrestrict.rb +12 -0
  4. data/lib/elements/accruals.rb +11 -0
  5. data/lib/elements/acqinfo.rb +12 -0
  6. data/lib/elements/altformavail.rb +12 -0
  7. data/lib/elements/appraisal.rb +11 -0
  8. data/lib/elements/archdesc.rb +32 -0
  9. data/lib/elements/arrangement.rb +11 -0
  10. data/lib/elements/bibliography.rb +12 -0
  11. data/lib/elements/bioghist.rb +11 -0
  12. data/lib/elements/c.rb +65 -0
  13. data/lib/elements/chronitem.rb +12 -0
  14. data/lib/elements/chronlist.rb +12 -0
  15. data/lib/elements/container.rb +13 -0
  16. data/lib/elements/controlaccess.rb +10 -0
  17. data/lib/elements/creation.rb +4 -0
  18. data/lib/elements/custodhist.rb +11 -0
  19. data/lib/elements/date.rb +14 -0
  20. data/lib/elements/defitem.rb +10 -0
  21. data/lib/elements/description.rb +10 -0
  22. data/lib/elements/dimensions.rb +13 -0
  23. data/lib/elements/dsc.rb +21 -0
  24. data/lib/elements/ead.rb +39 -0
  25. data/lib/elements/eadheader.rb +28 -0
  26. data/lib/elements/event.rb +9 -0
  27. data/lib/elements/extent.rb +13 -0
  28. data/lib/elements/filedesc.rb +13 -0
  29. data/lib/elements/fileplan.rb +10 -0
  30. data/lib/elements/geogname.rb +16 -0
  31. data/lib/elements/head.rb +11 -0
  32. data/lib/elements/id.rb +12 -0
  33. data/lib/elements/item.rb +9 -0
  34. data/lib/elements/label.rb +9 -0
  35. data/lib/elements/langmaterial.rb +12 -0
  36. data/lib/elements/language.rb +20 -0
  37. data/lib/elements/list.rb +13 -0
  38. data/lib/elements/materialspec.rb +13 -0
  39. data/lib/elements/name.rb +15 -0
  40. data/lib/elements/note.rb +15 -0
  41. data/lib/elements/odd.rb +13 -0
  42. data/lib/elements/originalsloc.rb +12 -0
  43. data/lib/elements/origination.rb +12 -0
  44. data/lib/elements/otherfindaid.rb +11 -0
  45. data/lib/elements/p.rb +10 -0
  46. data/lib/elements/physdesc.rb +14 -0
  47. data/lib/elements/physfacet.rb +16 -0
  48. data/lib/elements/physloc.rb +14 -0
  49. data/lib/elements/phystech.rb +11 -0
  50. data/lib/elements/processinfo.rb +11 -0
  51. data/lib/elements/profiledesc.rb +10 -0
  52. data/lib/elements/relatedmaterial.rb +12 -0
  53. data/lib/elements/repository.rb +12 -0
  54. data/lib/elements/scopecontent.rb +12 -0
  55. data/lib/elements/subtitle.rb +4 -0
  56. data/lib/elements/titlestmt.rb +12 -0
  57. data/lib/elements/unitdate.rb +7 -0
  58. data/lib/elements/unitid.rb +16 -0
  59. data/lib/elements/unittitle.rb +13 -0
  60. data/lib/elements/userestrict.rb +12 -0
  61. data/test/{TestEADDescription.rb → description_test.rb} +27 -26
  62. data/test/{TestEADDocument.rb → document_test.rb} +2 -2
  63. data/test/level_test.rb +75 -0
  64. data/test/note_test.rb +36 -0
  65. data/test/partial_export_test.rb +63 -0
  66. data/test/phystech_test.rb +45 -0
  67. data/test/scopecontent_test.rb +41 -0
  68. data/test/{TestEADSubordinates.rb → subordinates_test.rb} +7 -8
  69. data/test/{TestEADSubtitle.rb → subtitle_test.rb} +5 -6
  70. data/test/test_helper.rb +45 -0
  71. data/test/xmlsoparser_test.rb +119 -0
  72. metadata +72 -50
  73. data/lib/EAD.rb +0 -229
  74. data/lib/EADAcqInfo.rb +0 -13
  75. data/lib/EADAltFormAvail.rb +0 -13
  76. data/lib/EADAppraisal.rb +0 -12
  77. data/lib/EADArrangement.rb +0 -12
  78. data/lib/EADBiogHist.rb +0 -10
  79. data/lib/EADChronList.rb +0 -27
  80. data/lib/EADContainer.rb +0 -15
  81. data/lib/EADControlAccess.rb +0 -12
  82. data/lib/EADCustodHist.rb +0 -12
  83. data/lib/EADDate.rb +0 -24
  84. data/lib/EADDescription.rb +0 -22
  85. data/lib/EADDimensions.rb +0 -15
  86. data/lib/EADDocument.rb +0 -106
  87. data/lib/EADEvent.rb +0 -11
  88. data/lib/EADExtent.rb +0 -15
  89. data/lib/EADFilePlan.rb +0 -12
  90. data/lib/EADGeogName.rb +0 -15
  91. data/lib/EADHeader.rb +0 -70
  92. data/lib/EADLabel.rb +0 -11
  93. data/lib/EADLang.rb +0 -42
  94. data/lib/EADLevel.rb +0 -73
  95. data/lib/EADList.rb +0 -36
  96. data/lib/EADMaterialSpec.rb +0 -14
  97. data/lib/EADName.rb +0 -17
  98. data/lib/EADNote.rb +0 -24
  99. data/lib/EADOtherFindAid.rb +0 -12
  100. data/lib/EADPhysFacet.rb +0 -17
  101. data/lib/EADPhysTech.rb +0 -16
  102. data/lib/EADProcessInfo.rb +0 -13
  103. data/lib/EADProfileDesc.rb +0 -17
  104. data/lib/EADRelatedMaterial.rb +0 -21
  105. data/lib/EADRepository.rb +0 -13
  106. data/lib/EADScopeContent.rb +0 -21
  107. data/lib/EADSubordinates.rb +0 -29
  108. data/lib/EADSubtitle.rb +0 -8
  109. data/test/TestEAD.rb +0 -50
  110. data/test/TestEADLevel.rb +0 -76
  111. data/test/TestEADNote.rb +0 -36
  112. data/test/TestEADPhysTech.rb +0 -44
  113. data/test/TestEADScopeContent.rb +0 -43
  114. data/test/TestPartialExport.rb +0 -61
  115. data/test/TestXMLStreamObjectParser.rb +0 -126
data/lib/EADBiogHist.rb DELETED
@@ -1,10 +0,0 @@
1
- require "EAD"
2
-
3
- module EAD
4
- class EADBiogHist < EADElement
5
- elname "bioghist"
6
-
7
- xmlsubel :head
8
- xmlsubel_mult :p
9
- end
10
- end
data/lib/EADChronList.rb DELETED
@@ -1,27 +0,0 @@
1
- module EAD
2
- class EADChronList < EADElement
3
- elname "chronlist"
4
-
5
- xmlattr :altrender
6
- xmlattr :audience
7
- xmlattr :encodinganalog
8
- xmlattr :id
9
-
10
- xmlsubelements
11
- end
12
-
13
- class EADChronItem < EADElement
14
- elname "chronitem"
15
-
16
- xmlattr :altrender
17
- xmlattr :audience
18
- xmlattr :encodinganalog
19
- xmlattr :id
20
-
21
- xmlsubel :date
22
- xmlsubel :event
23
- xmlsubel :eventgrp
24
- end
25
- end
26
-
27
-
data/lib/EADContainer.rb DELETED
@@ -1,15 +0,0 @@
1
- module EAD
2
- class EADContainer < EADElement
3
- elname "container"
4
-
5
- xmlattr :altrender
6
- xmlattr :audience
7
- xmlattr :encodinganalog
8
- xmlattr :id
9
- xmlattr :label
10
- xmlattr :parent
11
- xmlattr :type
12
-
13
- xmlsubelements
14
- end
15
- end
@@ -1,12 +0,0 @@
1
- module EAD
2
- class EADControlAccess < EADElement
3
- elname :controlaccess
4
-
5
- xmlattr :altrender
6
- xmlattr :audience
7
- xmlattr :encodinganalog
8
- xmlattr :id
9
-
10
- xmlsubelements
11
- end
12
- end
data/lib/EADCustodHist.rb DELETED
@@ -1,12 +0,0 @@
1
- module EAD
2
- class EADCustodHist < EADElement
3
- elname "custodhist"
4
-
5
- xmlattr :altrender
6
- xmlattr :audience
7
- xmlattr :encodinganalog
8
- xmlattr :id
9
-
10
- xmlsubelements
11
- end
12
- end
data/lib/EADDate.rb DELETED
@@ -1,24 +0,0 @@
1
- module EAD
2
- class EADDate < EADElement
3
- elname "date"
4
- elwithvalue
5
-
6
- xmlattr :altrender
7
- xmlattr :audience
8
- xmlattr :calendar
9
- xmlattr :certainty
10
- xmlattr :encodinganalog
11
- xmlattr :era
12
- xmlattr :id
13
- xmlattr :normal
14
- xmlattr :type
15
- end
16
-
17
- class EADUnitDate < EADDate
18
- elname "unitdate"
19
- elwithvalue
20
-
21
- xmlattr :datechar
22
- xmlattr :label
23
- end
24
- end
@@ -1,22 +0,0 @@
1
- require "EADDate"
2
-
3
- module EAD
4
- class EADDescription < EADElement
5
- elname "did"
6
-
7
- xmlattr :altrender
8
- xmlattr :audience
9
- xmlattr :encodinganalog
10
- xmlattr :id
11
-
12
- xmlsubel :head
13
- xmlsubel :origination
14
- xmlsubel :unittitle
15
- xmlsubel :unitid
16
- xmlsubel :abstract
17
- xmlsubel :physdesc
18
- xmlsubel :physloc
19
- xmlsubel :unitdate
20
- xmlsubel :langmaterial
21
- end
22
- end
data/lib/EADDimensions.rb DELETED
@@ -1,15 +0,0 @@
1
- module EAD
2
- class EADDimensions < EADElement
3
- elname "dimensions"
4
-
5
- xmlattr :altrender
6
- xmlattr :audience
7
- xmlattr :encodinganalog
8
- xmlattr :id
9
- xmlattr :label
10
- xmlattr :type
11
- xmlattr :unit
12
-
13
- xmlsubelements
14
- end
15
- end
data/lib/EADDocument.rb DELETED
@@ -1,106 +0,0 @@
1
- require "EAD"
2
- require "XMLUtils"
3
-
4
- module EAD
5
- class EADArchDesc < EADElement
6
- elname "archdesc"
7
-
8
- xmlattr :altrender
9
- xmlattr :audience
10
- xmlattr :encodinganalog
11
- xmlattr :id
12
- xmlattr :level
13
- xmlattr :otherlevel
14
- xmlattr :relatedencoding
15
- xmlattr :type
16
-
17
- xmlsubel :did
18
- xmlsubel :bioghist
19
- xmlsubel :scopecontent
20
- xmlsubel :phystech
21
- xmlsubel_mult :dsc
22
-
23
- def initialize
24
- @level = "fonds"
25
- end
26
-
27
- def add_descelem(elem)
28
- dsc << elem
29
- end
30
-
31
- def descelems
32
- dsc.dup
33
- end
34
-
35
- def current_content
36
- text = create_open_tag+"\n"
37
- each_subel do |name|
38
- if not subel_mult?(name)
39
- value = send(name)
40
- if value
41
- doc = REXML::Document.new
42
- xml = value.create_xml(doc)
43
- doc.write(text,2)
44
- end
45
- end
46
- end
47
- text
48
- end
49
- end
50
-
51
- class EADDocument < EADElement
52
- elname "ead"
53
-
54
- COUNTRY_CODE = "pt"
55
- AGENCY_CODE = "iantt"
56
-
57
- xmlsubel :eadheader
58
- xmlsubel :archdesc
59
-
60
- def self.from_file(file)
61
- doc = REXML::Document.new(File.new(file))
62
- self.import_xml(doc.elements[1])
63
- end
64
-
65
- def initialize(id, title)
66
- self.eadheader = EADHeader.new(id, title)
67
- self.archdesc = EADArchDesc.new
68
- end
69
-
70
- def add_description(description)
71
- @archdesc.did = description
72
- end
73
-
74
- def ead_did
75
- @archdesc.did
76
- end
77
-
78
- def add_descelem(elem)
79
- @archdesc.add_descelem(elem)
80
- end
81
-
82
- def descelems
83
- @archdesc.descelems
84
- end
85
-
86
- def export(filename)
87
- doc = REXML::Document.new
88
- doc << REXML::XMLDecl.new("1.0", "UTF-8")
89
- doc << REXML::DocType.new("ead SYSTEM", '"file:///home/pedrocr/ead.dtd"')
90
- create_xml(doc)
91
- output = File.open(filename, "w")
92
-
93
- doc.write(output, 0)
94
- output.write "\n"
95
- output.close
96
- end
97
-
98
- def start_partial_export(file)
99
- if not already_partial_exported?
100
- file << "<?xml version='1.0' encoding='UTF-8'?>\n"
101
- file << "<!DOCTYPE ead SYSTEM \"file:///home/pedrocr/ead.dtd\">\n"
102
- super
103
- end
104
- end
105
- end
106
- end
data/lib/EADEvent.rb DELETED
@@ -1,11 +0,0 @@
1
- module EAD
2
- class EADEvent < EADElement
3
- elname "event"
4
-
5
- xmlattr :altrender
6
- xmlattr :audience
7
- xmlattr :id
8
-
9
- xmlsubelements
10
- end
11
- end
data/lib/EADExtent.rb DELETED
@@ -1,15 +0,0 @@
1
- module EAD
2
- class EADExtent < EADElement
3
- elname "extent"
4
-
5
- xmlattr :altrender
6
- xmlattr :audience
7
- xmlattr :encodinganalog
8
- xmlattr :id
9
- xmlattr :label
10
- xmlattr :type
11
- xmlattr :unit
12
-
13
- xmlsubelements
14
- end
15
- end
data/lib/EADFilePlan.rb DELETED
@@ -1,12 +0,0 @@
1
- module EAD
2
- class EADFilePlan< EADElement
3
- elname "fileplan"
4
-
5
- xmlattr :altrender
6
- xmlattr :audience
7
- xmlattr :encodinganalog
8
- xmlattr :id
9
-
10
- xmlsubelements
11
- end
12
- end
data/lib/EADGeogName.rb DELETED
@@ -1,15 +0,0 @@
1
- module EAD
2
- class EADGeogName < EADElement
3
- elname 'geogname'
4
-
5
- xmlattr :altrender
6
- xmlattr :audience
7
- xmlattr :authfilenumber
8
- xmlattr :encondinganalog
9
- xmlattr :id
10
- xmlattr :normal
11
- xmlattr :role
12
- xmlattr :rules
13
- xmlattr :source
14
- end
15
- end
data/lib/EADHeader.rb DELETED
@@ -1,70 +0,0 @@
1
- module EAD
2
- class EADId < EADElement
3
- elname 'eadid'
4
- elwithvalue
5
-
6
- xmlattr :countrycode
7
- xmlattr :encodinganalog
8
- xmlattr :identifier
9
- xmlattr :mainagencycode
10
- xmlattr :publicid
11
- xmlattr :url
12
- xmlattr :urn
13
- end
14
-
15
- class EADTitleStatement < EADElement
16
- elname 'titlestmt'
17
-
18
- xmlsubel :author
19
- xmlsubel :sponsor
20
- xmlsubel :subtitle
21
- xmlsubel :titleproper
22
-
23
- def initialize(title)
24
- self.titleproper = title
25
- end
26
- end
27
-
28
- class EADFileDesc < EADElement
29
- elname 'filedesc'
30
-
31
- xmlattr :altrender
32
- xmlattr :audience
33
- xmlattr :encodinganalog
34
- xmlattr :id
35
- xmlsubel :titlestmt
36
-
37
- def initialize(title)
38
- self.titlestmt = EADTitleStatement.new(title)
39
- end
40
- end
41
-
42
- class EADHeader < EADElement
43
- elname 'eadheader'
44
-
45
- xmlattr :altrender
46
- xmlattr :audience
47
- xmlattr :countryenconding
48
- xmlattr :dateencoding
49
- xmlattr :encodinganalog
50
- xmlattr :findaidstatus
51
- xmlattr :id
52
- xmlattr :langenconding
53
- xmlattr :relatedencoding
54
- xmlattr :repositoryencoding
55
- xmlattr :scriptencoding
56
-
57
- xmlsubel :eadid
58
- xmlsubel :filedesc
59
- xmlsubel :profiledesc
60
-
61
- def initialize(id, title)
62
- self.eadid = EADId.new(id)
63
- self.filedesc = EADFileDesc.new(title)
64
- end
65
-
66
- def eadtitle
67
- self.filedesc.titlestmt.titleproper
68
- end
69
- end
70
- end
data/lib/EADLabel.rb DELETED
@@ -1,11 +0,0 @@
1
- module EAD
2
- class EADLabel < EADElement
3
- elname "label"
4
-
5
- xmlattr :altrender
6
- xmlattr :audience
7
- xmlattr :id
8
-
9
- xmlsubelements
10
- end
11
- end
data/lib/EADLang.rb DELETED
@@ -1,42 +0,0 @@
1
- module EAD
2
- class EADLanguage < EADElement
3
- elname "language"
4
-
5
- xmlattr :altrender
6
- xmlattr :audience
7
- xmlattr :encodinganalog
8
- xmlattr :id
9
- xmlattr :langcode
10
- xmlattr :scriptcode
11
-
12
- xmlsubelements
13
-
14
- def initialize(*values)
15
- if values
16
- values.each do |v|
17
- self.subelements << v
18
- end
19
- end
20
- end
21
- end
22
-
23
- class EADLangMaterial < EADElement
24
- elname "langmaterial"
25
-
26
- xmlattr :altrender
27
- xmlattr :audience
28
- xmlattr :encodinganalog
29
- xmlattr :id
30
- xmlattr :label
31
-
32
- xmlsubelements
33
-
34
- def initialize(*values)
35
- if values
36
- values.each do |v|
37
- self.subelements << v
38
- end
39
- end
40
- end
41
- end
42
- end
data/lib/EADLevel.rb DELETED
@@ -1,73 +0,0 @@
1
- module EAD
2
- class EADLevel < EADElement
3
- include EADLevels
4
-
5
- xmlattr :altrender
6
- xmlattr :audience
7
- xmlattr :encodinganalog
8
- xmlattr :id
9
- xmlattr :level
10
- xmlattr :otherlevel
11
- xmlattr :tpattern
12
-
13
- xmlsubel :did
14
- xmlsubel :phystech
15
- xmlsubel :scopecontent
16
- xmlsubel :note
17
- xmlsubel :relatedmaterial
18
- xmlsubel_mult :c
19
- xmlsubel_mult :dsc
20
-
21
- attr_reader :parent
22
-
23
- elnames(*["c","c01","c02","c03","c04","c05","c06",
24
- "c07","c08","c09","c10","c11","c12"])
25
-
26
- def initialize
27
- @unnumbered = false
28
- end
29
-
30
- def set_unnumbered
31
- @unnumbered = true
32
- end
33
-
34
- def set_numbered
35
- @unnumbered = false
36
- end
37
-
38
- def unnumbered?
39
- if not instance_variables.index('@unnumbered')
40
- @unnumbered = false
41
- end
42
- @unnumbered
43
- end
44
-
45
- def __parent=(parent)
46
- super
47
- if parent.unnumbered?
48
- self.set_unnumbered
49
- end
50
- end
51
-
52
- def description_level
53
- if __parent
54
- return __parent.description_level + 1
55
- else
56
- return 0
57
- end
58
- end
59
-
60
- alias_method :oldelname, :elname # Just to shut up the warning
61
- def elname
62
- if unnumbered?
63
- return "c"
64
- end
65
-
66
- if description_level < 10
67
- return "c0" + description_level.to_s
68
- else
69
- return "c" + description_level.to_s
70
- end
71
- end
72
- end
73
- end
data/lib/EADList.rb DELETED
@@ -1,36 +0,0 @@
1
- module EAD
2
- class EADList < EADElement
3
- elname "list"
4
-
5
- xmlattr :altrender
6
- xmlattr :audience
7
- xmlattr :continuation
8
- xmlattr :id
9
- xmlattr :mark
10
- xmlattr :numeration
11
- xmlattr :type
12
-
13
- xmlsubelements
14
- end
15
-
16
- class EADDefItem < EADElement
17
- elname "defitem"
18
-
19
- xmlattr :altrender
20
- xmlattr :audience
21
- xmlattr :id
22
-
23
- xmlsubel :label
24
- xmlsubel :item
25
- end
26
-
27
- class EADItem < EADElement
28
- elname "item"
29
-
30
- xmlattr :altrender
31
- xmlattr :audience
32
- xmlattr :id
33
-
34
- xmlsubelements
35
- end
36
- end
@@ -1,14 +0,0 @@
1
- module EAD
2
- class EADMaterialSpec < EADElement
3
- elname "materialspec"
4
-
5
- xmlattr :altrender
6
- xmlattr :audience
7
- xmlattr :encodinganalog
8
- xmlattr :id
9
- xmlattr :label
10
- xmlattr :type
11
-
12
- xmlsubelements
13
- end
14
- end
data/lib/EADName.rb DELETED
@@ -1,17 +0,0 @@
1
- module EAD
2
- class EADName < EADElement
3
- elname "name"
4
-
5
- xmlattr :altrender
6
- xmlattr :audience
7
- xmlattr :authfilenumber
8
- xmlattr :encodinganalog
9
- xmlattr :id
10
- xmlattr :normal
11
- xmlattr :role
12
- xmlattr :rules
13
- xmlattr :source
14
-
15
- xmlsubelements
16
- end
17
- end
data/lib/EADNote.rb DELETED
@@ -1,24 +0,0 @@
1
- module EAD
2
- class EADNote < EADElement
3
- elname "note"
4
-
5
- xmlattr :actuate
6
- xmlattr :altrender
7
- xmlattr :audience
8
- xmlattr :encodinganalog
9
- xmlattr :id
10
- xmlattr :label
11
- xmlattr :show
12
- xmlattr :type
13
-
14
- xmlsubel_mult :p
15
-
16
- def value
17
- str = ""
18
- p.each do |par|
19
- str += "<p>"+par.value+"</p>\n"
20
- end
21
- str
22
- end
23
- end
24
- end
@@ -1,12 +0,0 @@
1
- module EAD
2
- class EADOtherFindAid < EADElement
3
- elname "otherfindaid"
4
-
5
- xmlattr :altrender
6
- xmlattr :audience
7
- xmlattr :encodinganalog
8
- xmlattr :id
9
-
10
- xmlsubelements
11
- end
12
- end
data/lib/EADPhysFacet.rb DELETED
@@ -1,17 +0,0 @@
1
- module EAD
2
- class EADPhysFacet < EADElement
3
- elname "physfacet"
4
-
5
- xmlattr :altrender
6
- xmlattr :audience
7
- xmlattr :encodinganalog
8
- xmlattr :id
9
- xmlattr :label
10
- xmlattr :rules
11
- xmlattr :source
12
- xmlattr :type
13
- xmlattr :unit
14
-
15
- xmlsubelements
16
- end
17
- end
data/lib/EADPhysTech.rb DELETED
@@ -1,16 +0,0 @@
1
- module EAD
2
- class EADPhysTech < EADElement
3
- elname "phystech"
4
-
5
- xmlsubel :head
6
- xmlsubel_mult :p
7
-
8
- def value
9
- str = ""
10
- p.each do |par|
11
- str += "<p>"+par.value+"</p>\n"
12
- end
13
- str
14
- end
15
- end
16
- end
@@ -1,13 +0,0 @@
1
- module EAD
2
- class EADProcessInfo < EADElement
3
- elname "processinfo"
4
-
5
- xmlattr :altrender
6
- xmlattr :audience
7
- xmlattr :encodinganalog
8
- xmlattr :id
9
- xmlattr :type
10
-
11
- xmlsubelements
12
- end
13
- end
@@ -1,17 +0,0 @@
1
- module EAD
2
- class EADCreation < EADElement
3
- elname "creation"
4
- xmlsubelements
5
- end
6
-
7
- class EADProfileDesc < EADElement
8
- elname "profiledesc"
9
-
10
- xmlattr :altrender
11
- xmlattr :audience
12
- xmlattr :encodinganalog
13
- xmlattr :id
14
-
15
- xmlsubel :creation
16
- end
17
- end