lcclasses 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.sw?
2
+ .DS_Store
3
+ coverage
4
+ rdoc
5
+ pkg
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 William Melody
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.markdown ADDED
@@ -0,0 +1,66 @@
1
+ # LCCLasses
2
+
3
+ A Ruby gem that provides the Library of Congress Classification system main classes and subclasses along with some convenience menthods.
4
+
5
+ To install:
6
+
7
+ gem install lcclasses
8
+
9
+ ## Usage
10
+
11
+ To find a classification code:
12
+
13
+ LCClasses.find_main_class_by_code("T")
14
+ => ["T", "Technology (General)"]
15
+ LCClasses.find_subclass_by_code("AM")
16
+ => ["AM", "Museums. Collectors and collecting"]
17
+ LCClasses.find_all_by_code("E")
18
+ => # returns the main "E" class and all subclasses in nested array
19
+ LCClasses.main_classes
20
+ => # returns all main classes
21
+ LCClasses.subclasses
22
+ => # returns all subclasses
23
+
24
+ The entire set of classes can be retrieved in 3 formats:
25
+
26
+ LCClasses::CLASS_HASH
27
+ => # nested hash of classes and subclasses
28
+ LCClases.nested
29
+ => # nested array of classes and subclasses as LCClasses::LCClass objects
30
+ LCClases.flat
31
+ => # flat array of classes and subclasses as LCClasses::LCClass objects
32
+
33
+ The CLASS\_HASH conststant is in the following format (truncated example):
34
+
35
+ { "A" => {
36
+ :name => "General Works",
37
+ :subclasses => {
38
+ "AC" => { :name => "Collections; Series; Collected works" }
39
+ }
40
+ }
41
+ }
42
+
43
+ Classes are returned as specialized LCClasses::Class arrays in the format `[code, name]`. In the case of nested LCClasses:LCClass objects, they are in the format `[main_class_code, main_class_name, [[subclass_code, subclass_name]]]`. These objects are normal arrays with the following methods added:
44
+
45
+ @class = LCClasses.find_main_class_by_code("M")
46
+ @class.code
47
+ => "M"
48
+ @class.name
49
+ => "Music"
50
+ @class.subclasses
51
+ => [["M", "Music"], ["ML", "Literature on music"], ["MT", "Instruction and study"]]
52
+
53
+ ## Note on Patches/Pull Requests
54
+
55
+ * Fork the project.
56
+ * Make your feature addition or bug fix.
57
+ * Add tests for it. This is important so I don't break it in a
58
+ future version unintentionally.
59
+ * Commit, do not mess with rakefile, version, or history.
60
+ (if you want to have your own version, that is fine but
61
+ bump version in a commit by itself I can ignore when I pull)
62
+ * Send me a pull request. Bonus points for topic branches.
63
+
64
+ ## Copyright
65
+
66
+ Copyright (c) 2010 William Melody. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,56 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "lcclasses"
8
+ gem.summary = %Q{Library of Congress Classification classes and subclasses}
9
+ gem.description = %Q{Library of Congress Classification classes and subclasses}
10
+ gem.email = "hi@williammelody.com"
11
+ gem.homepage = "http://github.com/autodata/lcclasses"
12
+ gem.authors = ["William Melody"]
13
+ gem.add_development_dependency "thoughtbot-shoulda"
14
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
15
+ end
16
+ rescue LoadError
17
+ puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
18
+ end
19
+
20
+ require 'rake/testtask'
21
+ Rake::TestTask.new(:test) do |test|
22
+ test.libs << 'lib' << 'test'
23
+ test.pattern = 'test/**/test_*.rb'
24
+ test.verbose = true
25
+ end
26
+
27
+ begin
28
+ require 'rcov/rcovtask'
29
+ Rcov::RcovTask.new do |test|
30
+ test.libs << 'test'
31
+ test.pattern = 'test/**/test_*.rb'
32
+ test.verbose = true
33
+ end
34
+ rescue LoadError
35
+ task :rcov do
36
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
37
+ end
38
+ end
39
+
40
+ task :test => :check_dependencies
41
+
42
+ task :default => :test
43
+
44
+ require 'rake/rdoctask'
45
+ Rake::RDocTask.new do |rdoc|
46
+ if File.exist?('VERSION')
47
+ version = File.read('VERSION')
48
+ else
49
+ version = ""
50
+ end
51
+
52
+ rdoc.rdoc_dir = 'rdoc'
53
+ rdoc.title = "lcclasses #{version}"
54
+ rdoc.rdoc_files.include('README*')
55
+ rdoc.rdoc_files.include('lib/**/*.rb')
56
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.0
data/lcclasses.gemspec ADDED
@@ -0,0 +1,54 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{lcclasses}
8
+ s.version = "0.0.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["William Melody"]
12
+ s.date = %q{2010-02-25}
13
+ s.description = %q{Library of Congress Classification classes and subclasses}
14
+ s.email = %q{hi@williammelody.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.markdown"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".gitignore",
22
+ "LICENSE",
23
+ "README.markdown",
24
+ "Rakefile",
25
+ "VERSION",
26
+ "lcclasses.gemspec",
27
+ "lib/lcclasses.rb",
28
+ "test/test_helper.rb",
29
+ "test/test_lcclasses.rb"
30
+ ]
31
+ s.homepage = %q{http://github.com/autodata/lcclasses}
32
+ s.rdoc_options = ["--charset=UTF-8"]
33
+ s.require_paths = ["lib"]
34
+ s.rubygems_version = %q{1.3.5}
35
+ s.summary = %q{Library of Congress Classification classes and subclasses}
36
+ s.test_files = [
37
+ "test/test_helper.rb",
38
+ "test/test_lcclasses.rb"
39
+ ]
40
+
41
+ if s.respond_to? :specification_version then
42
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
43
+ s.specification_version = 3
44
+
45
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
46
+ s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
47
+ else
48
+ s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
49
+ end
50
+ else
51
+ s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
52
+ end
53
+ end
54
+
data/lib/lcclasses.rb ADDED
@@ -0,0 +1,404 @@
1
+ module LCClasses
2
+ class LCClass < Array
3
+
4
+ # Convert nested LCClasses::CLASS_HASH to nested array.
5
+ def self.nest(hash)
6
+ return self[] if hash.nil?
7
+ hash.sort { |a,b| a[0] <=> b[0] }.inject(self[]) do |result, klass|
8
+ if klass[1][:subclasses]
9
+ result << self[klass[0],klass[1][:name], self.nest(klass[1][:subclasses])]
10
+ else
11
+ result << self[klass[0],klass[1][:name]]
12
+ end
13
+ end
14
+ end
15
+
16
+ # Convert nested LCClasses::CLASS_HASH to flat array.
17
+ def self.flatten(hash)
18
+ return self[] if hash.nil?
19
+ hash.sort { |a,b| a[0] <=> b[0] }.inject(self[]) do |result, klass|
20
+ result << self[klass[0],klass[1][:name]]
21
+ result += self.flatten(klass[1][:subclasses])
22
+ end
23
+ end
24
+
25
+ # Return the subclasses of this class, if any.
26
+ def subclasses
27
+ return unless i = LCClasses::CLASS_HASH[self[0]]
28
+ LCClasses::LCClass.nest(i[:subclasses])
29
+ end
30
+
31
+ # The class code.
32
+ def code; self[0] end
33
+ # THe class name.
34
+ def name; self[1] end
35
+ end
36
+
37
+ # Library of Congress Main Classes and Subclasses
38
+ CLASS_HASH = {
39
+ "A" => {
40
+ :name => "General Works",
41
+ :subclasses => {
42
+ "AC" => { :name => "Collections; Series; Collected works" },
43
+ "AE" => { :name => "Encyclopedias" },
44
+ "AG" => { :name => "Dictionaries and other general reference works" },
45
+ "AI" => { :name => "Indexes" },
46
+ "AM" => { :name => "Museums. Collectors and collecting" },
47
+ "AN" => { :name => "AN Newspapers" },
48
+ "AP" => { :name => "Periodicals" },
49
+ "AS" => { :name => "Academies and learned societies" },
50
+ "AY" => { :name => "Yearbooks. Almanacs. Directories" },
51
+ "AZ" => { :name => "History of scholarship and learning. The humanities" },
52
+ }
53
+ },
54
+ "B" => {
55
+ :name => "Philosophy, Psychology, Religion",
56
+ :subclasses => {
57
+ "B" => { :name => "Philosophy (General)" },
58
+ "BC" => { :name => "Logic" },
59
+ "BD" => { :name => "Speculative philosophy" },
60
+ "BF" => { :name => "Psychology" },
61
+ "BH" => { :name => "Aesthetics" },
62
+ "BJ" => { :name => "Ethics" },
63
+ "BL" => { :name => "Religions; Mythology; Rationalism" },
64
+ "BM" => { :name => "Judaism" },
65
+ "BP" => { :name => "Islam; Bahaism; Theosophy, etc." },
66
+ "BQ" => { :name => "Buddhism" },
67
+ "BR" => { :name => "Christianity" },
68
+ "BS" => { :name => "The Bible" },
69
+ "BT" => { :name => "Doctrinal Theology" },
70
+ "BV" => { :name => "Practical Theology" },
71
+ "BX" => { :name => "Christian Denominations" },
72
+ }
73
+ },
74
+ "C" => {
75
+ :name => "Auxiliary Sciences of History (General)",
76
+ :subclasses => {
77
+ "CB" => { :name => "History of Civilization" },
78
+ "CC" => { :name => "Archaeology" },
79
+ "CD" => { :name => "Diplomatics. Archives. Seals" },
80
+ "CE" => { :name => "Technical Chronology. Calendar" },
81
+ "CJ" => { :name => "Numismatics" },
82
+ "CN" => { :name => "Inscriptions. Epigraphy" },
83
+ "CR" => { :name => "Heraldry" },
84
+ "CS" => { :name => "Genealogy" },
85
+ "CT" => { :name => "Biography" },
86
+ }
87
+ },
88
+ "D" => {
89
+ :name => "World History and History of Europe, Asia, Africa, Australia, New Zealand, etc.",
90
+ :subclasses => {
91
+ "D" => { :name => "History (General)" },
92
+ "DA" => { :name => "Great Britain" },
93
+ "DAW" => { :name => "Central Europe" },
94
+ "DB" => { :name => "Austria - Liechtenstein - Hungary - Czechoslovakia" },
95
+ "DC" => { :name => "France - Andorra - Monaco" },
96
+ "DD" => { :name => "Germany" },
97
+ "DE" => { :name => "Greco-Roman World" },
98
+ "DF" => { :name => "Greece" },
99
+ "DG" => { :name => "Italy - Malta" },
100
+ "DH" => { :name => "Low Countries - Benelux Countries (Continued on next page)" },
101
+ "DJ" => { :name => "Netherlands (Holland)" },
102
+ "DJK" => { :name => "Eastern Europe (General)" },
103
+ "DK" => { :name => "Russia. Soviet Union. Former Soviet Republics - Poland" },
104
+ "DL" => { :name => "Northern Europe. Scandinavia" },
105
+ "DP" => { :name => "Spain - Portugal" },
106
+ "DQ" => { :name => "Switzerland" },
107
+ "DR" => { :name => "Balkan Peninsula" },
108
+ "DS" => { :name => "Asia" },
109
+ "DT" => { :name => "Africa" },
110
+ "DU" => { :name => "Oceania (South Seas)" },
111
+ "DX" => { :name => "Gypsies" },
112
+ }
113
+ },
114
+ "E" => {
115
+ :name => "History of America, United States",
116
+ },
117
+ "F" => {
118
+ :name => "Local History of the United States and British, Dutch, French, and Latin America",
119
+ },
120
+ "G" => {
121
+ :name => "Geography, Anthropology, Recreation",
122
+ :subclasses => {
123
+ "G" => { :name => "Geography (General). Atlases. Maps" },
124
+ "GA" => { :name => "Mathematical geography. Cartography" },
125
+ "GB" => { :name => "Physical geography" },
126
+ "GC" => { :name => "Oceanography" },
127
+ "GE" => { :name => "Environmental Sciences" },
128
+ "GF" => { :name => "Human ecology. Anthropogeography" },
129
+ "GN" => { :name => "Anthropology" },
130
+ "GR" => { :name => "Folklore" },
131
+ "GT" => { :name => "Manners and customs (General)" },
132
+ "GV" => { :name => "Recreation. Leisure" },
133
+ }
134
+ },
135
+ "H" => {
136
+ :name => "Social Sciences",
137
+ :subclasses => {
138
+ "H" => { :name => "Social sciences (General)" },
139
+ "HA" => { :name => "Statistics" },
140
+ "HB" => { :name => "Economic theory. Demography" },
141
+ "HC" => { :name => "Economic history and conditions" },
142
+ "HD" => { :name => "Industries. Land use. Labor" },
143
+ "HE" => { :name => "Transportation and communications" },
144
+ "HF" => { :name => "Commerce" },
145
+ "HG" => { :name => "Finance" },
146
+ "HJ" => { :name => "Public finance" },
147
+ "HM" => { :name => "Sociology (General)" },
148
+ "HN" => { :name => "Social history and conditions. Social problems. Social reform" },
149
+ "HQ" => { :name => "The family. Marriage. Women" },
150
+ "HS" => { :name => "Societies: secret, benevolent, etc." },
151
+ "HT" => { :name => "Communities. Classes. Races" },
152
+ "HV" => { :name => "Social pathology. Social and public welfare. Criminology" },
153
+ "HX" => { :name => "Socialism. Communism. Anarchism" },
154
+ }
155
+ },
156
+ "J" => {
157
+ :name => "Political Sciences",
158
+ :subclasses => {
159
+ "J" => { :name => "General legislative and executive papers" },
160
+ "JA" => { :name => "Political science (General)" },
161
+ "JC" => { :name => "Political theory" },
162
+ "JF" => { :name => "Political institutions and public administration" },
163
+ "JJ" => { :name => "Political institutions and public administration (North America)" },
164
+ "JK" => { :name => "Political institutions and public administration (United States)" },
165
+ "JL" => { :name => "Political institutions and public administration (Canada, Latin America, etc.)" },
166
+ "JN" => { :name => "Political institutions and public administration (Europe)" },
167
+ "JQ" => { :name => "Political institutions and public administration (Asia, Africa, Australia, Pacific Area, etc.)" },
168
+ "JS" => { :name => "Local government. Municipal government" },
169
+ "JV" => { :name => "Colonies and colonization. Emigration and immigration. International migration" },
170
+ "JX" => { :name => "International law, see JZ and KZ (obsolete)" },
171
+ "JZ" => { :name => "International relations" },
172
+ }
173
+ },
174
+ "K" => {
175
+ :name => "Law",
176
+ :subclasses => {
177
+ "K" => { :name => "Law in general. Comparative and uniform law. Jurisprudence" },
178
+ "KB" => { :name => "Religious law in general. Comparative religious law. Jurisprudence" },
179
+ "KBM" => { :name => "Jewish law" },
180
+ "KBP" => { :name => "Islamic law" },
181
+ "KBR" => { :name => "History of canon law" },
182
+ "KBU" => { :name => "Law of the Roman Catholic Church. The Holy See" },
183
+ "KD-KDK" => { :name => "United Kingdom and Ireland" },
184
+ "KDZ" => { :name => "America. North America" },
185
+ "KE" => { :name => "Canada" },
186
+ "KF" => { :name => "United States" },
187
+ "KG" => { :name => "Latin America - Mexico and Central America - West Indies. Caribbean area" },
188
+ "KH" => { :name => "South America" },
189
+ "KJ-KKZ" => { :name => "Europe" },
190
+ "KL-KWX" => { :name => "Asia and Eurasia, Africa, Pacific Area, and Antarctica" },
191
+ "KZ" => { :name => "Law of nations" },
192
+ }
193
+ },
194
+ "L" => {
195
+ :name => "Education",
196
+ :subclasses => {
197
+ "L" => { :name => "Education (General)" },
198
+ "LA" => { :name => "History of education" },
199
+ "LB" => { :name => "Theory and practice of education" },
200
+ "LC" => { :name => "Special aspects of education" },
201
+ "LD" => { :name => "Individual institutions - United States" },
202
+ "LE" => { :name => "Individual institutions - America (except United States)" },
203
+ "LF" => { :name => "Individual institutions - Europe" },
204
+ "LG" => { :name => "Individual institutions - Asia, Africa, Indian Ocean islands, Australia, New Zealand, Pacific islands" },
205
+ "LH" => { :name => "College and school magazines and papers" },
206
+ "LJ" => { :name => "Student fraternities and societies, United States" },
207
+ "LT" => { :name => "Textbooks" },
208
+ }
209
+ },
210
+ "M" => {
211
+ :name => "Music",
212
+ :subclasses => {
213
+ "M" => { :name => "Music" },
214
+ "ML" => { :name => "Literature on music" },
215
+ "MT" => { :name => "Instruction and study" },
216
+ }
217
+ },
218
+ "N" => {
219
+ :name => "Fine Arts",
220
+ :subclasses => {
221
+ "N" => { :name => "Visual arts" },
222
+ "NA" => { :name => "Architecture" },
223
+ "NB" => { :name => "Sculpture" },
224
+ "NC" => { :name => "Drawing. Design. Illustration" },
225
+ "ND" => { :name => "Painting" },
226
+ "NE" => { :name => "Print media" },
227
+ "NK" => { :name => "Decorative arts" },
228
+ "NX" => { :name => "Arts in general" },
229
+ }
230
+ },
231
+ "P" => {
232
+ :name => "Language and Literature",
233
+ :subclasses => {
234
+ "P" => { :name => "Philology. Linguistics" },
235
+ "PA" => { :name => "Greek language and literature. Latin language and literature" },
236
+ "PB" => { :name => "Modern languages. Celtic languages" },
237
+ "PC" => { :name => "Romanic languages" },
238
+ "PD" => { :name => "Germanic languages. Scandinavian languages" },
239
+ "PE" => { :name => "English language" },
240
+ "PF" => { :name => "West Germanic languages" },
241
+ "PG" => { :name => "Slavic languages and literatures. Baltic languages. Albanian language" },
242
+ "PH" => { :name => "Uralic languages. Basque language" },
243
+ "PJ" => { :name => "Oriental languages and literatures" },
244
+ "PK" => { :name => "Indo-Iranian languages and literatures" },
245
+ "PL" => { :name => "Languages and literatures of Eastern Asia, Africa, Oceania" },
246
+ "PM" => { :name => "Hyperborean, Indian, and artificial languages" },
247
+ "PN" => { :name => "Literature (General)" },
248
+ "PQ" => { :name => "French literature - Italian literature - Spanish literature - Portuguese literature" },
249
+ "PR" => { :name => "English literature" },
250
+ "PS" => { :name => "American literature" },
251
+ "PT" => { :name => "German literature - Dutch literature - Flemish literature since 1830 -Afrikaans literature - Scandinavian literature - Old Norse literature: Old Icelandic and Old Norwegian - Modern Icelandic literature - Faroese literature - Danish literature - Norwegian literature - Swedish literature" },
252
+ "PZ" => { :name => "Fiction and juvenile belles lettres" },
253
+ }
254
+ },
255
+ "Q" => {
256
+ :name => "Science",
257
+ :subclasses => {
258
+ "Q" => { :name => "Science (General)" },
259
+ "QA" => { :name => "Mathematics" },
260
+ "QB" => { :name => "Astronomy" },
261
+ "QC" => { :name => "Physics" },
262
+ "QD" => { :name => "Chemistry" },
263
+ "QE" => { :name => "Geology" },
264
+ "QH" => { :name => "Natural history - Biology" },
265
+ "QK" => { :name => "Botany" },
266
+ "QL" => { :name => "Zoology" },
267
+ "QM" => { :name => "Human anatomy" },
268
+ "QP" => { :name => "Physiology" },
269
+ "QR" => { :name => "Microbiology" },
270
+ }
271
+ },
272
+ "R" => {
273
+ :name => "Medicine",
274
+ :subclasses => {
275
+ "R" => { :name => "Medicine (General)" },
276
+ "RA" => { :name => "Public aspects of medicine" },
277
+ "RB" => { :name => "Pathology" },
278
+ "RC" => { :name => "Internal medicine" },
279
+ "RD" => { :name => "Surgery" },
280
+ "RE" => { :name => "Ophthalmology" },
281
+ "RF" => { :name => "Otorhinolaryngology" },
282
+ "RG" => { :name => "Gynecology and obstetrics" },
283
+ "RJ" => { :name => "Pediatrics" },
284
+ "RK" => { :name => "Dentistry" },
285
+ "RL" => { :name => "Dermatology" },
286
+ "RM" => { :name => "Therapeutics. Pharmacology" },
287
+ "RS" => { :name => "Pharmacy and materia medica" },
288
+ "RT" => { :name => "Nursing" },
289
+ "RV" => { :name => "Botanic, Thomsonian, and eclectic medicine" },
290
+ "RX" => { :name => "Homeopathy" },
291
+ "RZ" => { :name => "Other systems of medicine" },
292
+ }
293
+ },
294
+ "S" => {
295
+ :name => "Agriculture",
296
+ :subclasses => {
297
+ "S" => { :name => "Agriculture (General)" },
298
+ "SB" => { :name => "Plant culture" },
299
+ "SD" => { :name => "Forestry" },
300
+ "SF" => { :name => "Animal culture" },
301
+ "SH" => { :name => "Aquaculture. Fisheries. Angling" },
302
+ "SK" => { :name => "Hunting sports" },
303
+ }
304
+ },
305
+ "T" => {
306
+ :name => "Technology",
307
+ :subclasses => {
308
+ "T" => { :name => "Technology (General)" },
309
+ "TA" => { :name => "Engineering (General). Civil engineering" },
310
+ "TC" => { :name => "Hydraulic engineering. Ocean engineering" },
311
+ "TD" => { :name => "Environmental technology. Sanitary engineering" },
312
+ "TE" => { :name => "Highway engineering. Roads and pavements" },
313
+ "TF" => { :name => "Railroad engineering and operation" },
314
+ "TG" => { :name => "Bridge engineering" },
315
+ "TH" => { :name => "Building construction" },
316
+ "TJ" => { :name => "Mechanical engineering and machinery" },
317
+ "TK" => { :name => "Electrical engineering. Electronics. Nuclear engineering" },
318
+ "TL" => { :name => "Motor vehicles. Aeronautics. Astronautics" },
319
+ "TN" => { :name => "Mining engineering. Metallurgy" },
320
+ "TP" => { :name => "Chemical technology" },
321
+ "TR" => { :name => "Photography" },
322
+ "TS" => { :name => "Manufactures" },
323
+ "TT" => { :name => "Handicrafts. Arts and crafts" },
324
+ "TX" => { :name => "Home economics" },
325
+ }
326
+ },
327
+ "U" => {
328
+ :name => "Military Science",
329
+ :subclasses => {
330
+ "U" => { :name => "Military science (General)" },
331
+ "UA" => { :name => "Armies: Organization, distribution, military situation" },
332
+ "UB" => { :name => "Military administration" },
333
+ "UC" => { :name => "Maintenance and transportation" },
334
+ "UD" => { :name => "Infantry" },
335
+ "UE" => { :name => "Cavalry. Armor" },
336
+ "UF" => { :name => "Artillery" },
337
+ "UG" => { :name => "Military engineering. Air forces" },
338
+ "UH" => { :name => "Other services" },
339
+ }
340
+ },
341
+ "V" => {
342
+ :name => "Naval Science",
343
+ :subclasses => {
344
+ "V" => { :name => "Naval science (General)" },
345
+ "VA" => { :name => "Navies: Organization, distribution, naval situation" },
346
+ "VB" => { :name => "Naval administration" },
347
+ "VC" => { :name => "Naval maintenance" },
348
+ "VD" => { :name => "Naval seamen" },
349
+ "VE" => { :name => "Marines" },
350
+ "VF" => { :name => "Naval ordnance" },
351
+ "VG" => { :name => "Minor services of navies" },
352
+ "VK" => { :name => "Navigation. Merchant marine" },
353
+ "VM" => { :name => "Naval architecture. Shipbuilding. Marine engineering" },
354
+ }
355
+ },
356
+ "Z" => {
357
+ :name => "Bibliography, Library Science",
358
+ :subclasses => {
359
+ "Z" => { :name => "Books (General). Writing. Paleography. Book industries and trade. Libraries. Bibliography" },
360
+ "ZA" => { :name => "Information resources (General)" },
361
+ }
362
+ }
363
+ }
364
+
365
+ # An array of main LC Classes.
366
+ def self.main_classes
367
+ CLASS_HASH.map do |k,v|
368
+ LCClasses::LCClass[k,v[:name]]
369
+ end.sort
370
+ end
371
+
372
+ # An array of all LC Subclasses.
373
+ def self.subclasses
374
+ self.main_classes.inject([]) do |result, main_class|
375
+ result += main_class.subclasses
376
+ end
377
+ end
378
+
379
+ # A nested array of main classes and subclasses.
380
+ def self.nested
381
+ LCClasses::LCClass.nest(LCClasses::CLASS_HASH)
382
+ end
383
+
384
+ # All main classes and subclasses in a flat array.
385
+ def self.flat
386
+ LCClasses::LCClass.flatten(LCClasses::CLASS_HASH)
387
+ end
388
+
389
+ # Find an main classe by code.
390
+ def self.find_main_class_by_code(code)
391
+ LCClasses.main_classes.detect { |i| i[0] == code.to_s }
392
+ end
393
+
394
+ # Find a subclass by code.
395
+ def self.find_subclass_by_code(code)
396
+ LCClasses.subclasses.detect { |i| i[0] == code.to_s }
397
+ end
398
+
399
+ # Find all main classes and subclass that match or start with a code or character.
400
+ def self.find_all_by_code(code)
401
+ LCClasses.flat.select { |i| i[0] if (i[0] =~ /^#{code}[A-Z]?[A-Z]?/) }
402
+ end
403
+
404
+ end
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
7
+ require 'lcclasses'
8
+
9
+ class Test::Unit::TestCase
10
+ end
@@ -0,0 +1,72 @@
1
+ require 'test_helper'
2
+
3
+ class TestLCClasses < Test::Unit::TestCase
4
+
5
+ should "return main classes" do
6
+ assert_equal 21, LCClasses.main_classes.length
7
+ end
8
+
9
+ should "return subclasses" do
10
+ assert_equal 223, LCClasses.subclasses.length
11
+ end
12
+
13
+ should "should return flat" do
14
+ assert_equal 244, LCClasses.flat.length
15
+ end
16
+
17
+ should "should return nested" do
18
+ assert_equal 21, LCClasses.nested.length
19
+ assert_equal 223, LCClasses.nested.inject([]) { |r, m| r += m.subclasses }.length
20
+ end
21
+
22
+ should "find main class by code" do
23
+ assert_equal ["T", "Technology (General)"], LCClasses.find_subclass_by_code("T")
24
+ end
25
+
26
+ should "find subclass by code" do
27
+ assert_equal ["AM", "Museums. Collectors and collecting"], LCClasses.find_subclass_by_code("AM")
28
+ end
29
+
30
+ should "find all by code" do
31
+ assert_equal [["E", "History of America, United States"]], LCClasses.find_all_by_code("E")
32
+ assert_equal 11, LCClasses.find_all_by_code("A").length
33
+ end
34
+
35
+ context "LCCLass" do
36
+
37
+ setup {
38
+ @hash = {
39
+ "A" => {
40
+ :name => "General Works",
41
+ :subclasses => {
42
+ "AC" => { :name => "Collections; Series; Collected works" }
43
+ }
44
+ }
45
+ }
46
+ }
47
+
48
+ should "flatten code hash" do
49
+ assert_equal(
50
+ [["A", "General Works"], ["AC", "Collections; Series; Collected works"]],
51
+ LCClasses::LCClass.flatten(@hash)
52
+ )
53
+ end
54
+
55
+ should "nest code hash" do
56
+ assert_equal(
57
+ [["A", "General Works", [["AC", "Collections; Series; Collected works"]]]],
58
+ LCClasses::LCClass.nest(@hash)
59
+ )
60
+ end
61
+
62
+ should "return subclasses" do
63
+ assert_equal 3, LCClasses.find_main_class_by_code("M").subclasses.length
64
+ assert_equal 0, LCClasses.find_main_class_by_code("E").subclasses.length
65
+ end
66
+
67
+ should "respond to code and name" do
68
+ assert_equal "A", LCClasses::LCClass["A", "General Works"].code
69
+ assert_equal "General Works", LCClasses::LCClass["A", "General Works"].name
70
+ end
71
+ end
72
+ end
metadata ADDED
@@ -0,0 +1,75 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lcclasses
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - William Melody
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2010-02-25 00:00:00 -06:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: thoughtbot-shoulda
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ description: Library of Congress Classification classes and subclasses
26
+ email: hi@williammelody.com
27
+ executables: []
28
+
29
+ extensions: []
30
+
31
+ extra_rdoc_files:
32
+ - LICENSE
33
+ - README.markdown
34
+ files:
35
+ - .document
36
+ - .gitignore
37
+ - LICENSE
38
+ - README.markdown
39
+ - Rakefile
40
+ - VERSION
41
+ - lcclasses.gemspec
42
+ - lib/lcclasses.rb
43
+ - test/test_helper.rb
44
+ - test/test_lcclasses.rb
45
+ has_rdoc: true
46
+ homepage: http://github.com/autodata/lcclasses
47
+ licenses: []
48
+
49
+ post_install_message:
50
+ rdoc_options:
51
+ - --charset=UTF-8
52
+ require_paths:
53
+ - lib
54
+ required_ruby_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: "0"
59
+ version:
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: "0"
65
+ version:
66
+ requirements: []
67
+
68
+ rubyforge_project:
69
+ rubygems_version: 1.3.5
70
+ signing_key:
71
+ specification_version: 3
72
+ summary: Library of Congress Classification classes and subclasses
73
+ test_files:
74
+ - test/test_helper.rb
75
+ - test/test_lcclasses.rb