library_stdnums 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/LICENSE +1 -1
  2. data/README.markdown +33 -31
  3. data/VERSION +1 -1
  4. data/lib/library_stdnums.rb +21 -5
  5. metadata +1 -1
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2009 Bill Dueber
1
+ Copyright (c) 2010-2011 Bill Dueber
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.markdown CHANGED
@@ -9,40 +9,41 @@ See the actual functions for more information than what's below.
9
9
  ## ISBN
10
10
 
11
11
  ````ruby
12
- isbn = StdNum::ISBN.normalize(goodISBN)
13
- # => a 13-digit ISBN with no dashes/spaces
12
+
13
+ isbn = StdNum::ISBN.normalize(goodISBN)
14
+ # => a 13-digit ISBN with no dashes/spaces
14
15
 
15
- isbn = StdNum::ISBN.normalize(badISBN)
16
- # => nil (if it's not an ISBN or the checkdigit is bad)
16
+ isbn = StdNum::ISBN.normalize(badISBN)
17
+ # => nil (if it's not an ISBN or the checkdigit is bad)
17
18
 
18
- tenDigit = StdNum::ISBN.convert_to_10(isbn13)
19
- thirteenDigit = StdNum::ISBN.convert_to_13(isbn10)
19
+ tenDigit = StdNum::ISBN.convert_to_10(isbn13)
20
+ thirteenDigit = StdNum::ISBN.convert_to_13(isbn10)
20
21
 
21
- thirteenDigit,tenDigit = StdNum::ISBN.allNormalizedValues(issn)
22
- # => array of the ten and thirteen digit isbns if valid;
23
- # an empty array if not
22
+ thirteenDigit,tenDigit = StdNum::ISBN.allNormalizedValues(issn)
23
+ # => array of the ten and thirteen digit isbns if valid;
24
+ # an empty array if not
24
25
 
25
- digit = StdNum::ISBN.checkdigit(isbn)
26
- # => 0..9 (for isbn13) or 0..9,X (for isbn10)
26
+ digit = StdNum::ISBN.checkdigit(isbn)
27
+ # => 0..9 (for isbn13) or 0..9,X (for isbn10)
27
28
 
28
- if StdNum::ISBN.valid?(isbn)
29
- puts "#{isbn} has a valid checkdigit"
30
- end
29
+ if StdNum::ISBN.valid?(isbn)
30
+ puts "#{isbn} has a valid checkdigit"
31
+ end
31
32
 
32
33
  ````
33
34
 
34
35
  # ISSN
35
36
 
36
37
  ````ruby
37
- issn = StdNum::ISSN.normalize(issn)
38
- # => the cleaned-up issn if valid; nil if not
38
+ issn = StdNum::ISSN.normalize(issn)
39
+ # => the cleaned-up issn if valid; nil if not
39
40
 
40
- digit = StdNum::ISSN.checkdigit(issn)
41
- # => 0..9 or X
41
+ digit = StdNum::ISSN.checkdigit(issn)
42
+ # => 0..9 or X
42
43
 
43
- if StdNum::ISSN.valid?(issn)
44
- puts "#{issn} has a valid checkdigit"
45
- end
44
+ if StdNum::ISSN.valid?(issn)
45
+ puts "#{issn} has a valid checkdigit"
46
+ end
46
47
  ````
47
48
 
48
49
  # LCCN
@@ -51,15 +52,16 @@ LCCNs are normalized according to the algorithm at http://www.loc.gov/marc/lccn-
51
52
 
52
53
  ````ruby
53
54
 
54
- lccn = StdNum::LCCN.normalize(rawlccn)
55
- # => either the normalized lccn, or nil if it has bad syntax
56
-
57
- if StdNum::LCCN.valid?(rawlccn) {
58
- puts "#{rawlccn} is valid"
59
- }
55
+ lccn = StdNum::LCCN.normalize(rawlccn)
56
+ # => either the normalized lccn, or nil if it has bad syntax
57
+
58
+ if StdNum::LCCN.valid?(rawlccn) {
59
+ puts "#{rawlccn} is valid"
60
+ }
61
+
60
62
  ````
61
63
 
62
- == CHANGES
64
+ ## CHANGES
63
65
 
64
66
  * 1.0.0
65
67
  * Added normalization all around.
@@ -77,7 +79,7 @@ LCCNs are normalized according to the algorithm at http://www.loc.gov/marc/lccn-
77
79
  * 0.1.0
78
80
  * Initial release
79
81
 
80
- == Note on Patches/Pull Requests
82
+ ## Note on Patches/Pull Requests
81
83
 
82
84
  * Fork the project.
83
85
  * Make your feature addition or bug fix.
@@ -87,6 +89,6 @@ LCCNs are normalized according to the algorithm at http://www.loc.gov/marc/lccn-
87
89
  (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
88
90
  * Send me a pull request. Bonus points for topic branches.
89
91
 
90
- == Copyright
92
+ ## Copyright
91
93
 
92
- Copyright (c) 2010 Bill Dueber. See LICENSE for details.
94
+ Copyright (c) 2010, 2011 Bill Dueber. See LICENSE for details.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.0.1
@@ -1,17 +1,29 @@
1
+ # Static Module functions to work with library "standard numbers" ISSN, ISBN, and LCCN
1
2
  module StdNum
2
-
3
+
4
+ # Helper methods common to ISBN/ISSN
3
5
  module Helpers
4
6
 
7
+ # The pattern we use to try and find an ISBN/ISSN. Ditch everthing before the first
8
+ # digit, then take all the digits/hyphens, optionally followed by an 'X'
5
9
  STDNUMPAT = /^.*?(\d[\d\-]+[xX]?)/
6
10
 
7
11
  # Extract the most likely looking number from the string. This will be the first
8
12
  # string of digits-and-hyphens-and-maybe-a-trailing-X, with the hypens removed
13
+ # @param [String] str The string from which to extract an ISBN/ISSN
14
+ # @return [String] The extracted identifier
9
15
  def extractNumber str
10
16
  match = STDNUMPAT.match str
11
17
  return nil unless match
12
18
  return match[1].gsub(/\-/, '').upcase
13
19
  end
14
20
 
21
+ # Given any string, extract what looks like the most likely ISBN/ISSN
22
+ # of the given size(s), or nil if nothing matches at the correct size.
23
+ # @param [String] rawnum The raw string containing (hopefully) an ISSN/ISBN
24
+ # @param [Integer, Array<Integer>, nil] An integer or array of integers of valid sizes
25
+ # for this type (e.g., 10 or 13 for ISBN, 8 for ISSN)
26
+ # @return [String,nil] the reduced and verified number, or nil if there's no match at the right size
15
27
  def reduce_to_basics rawnum, valid_sizes = nil
16
28
  return nil if rawnum.nil?
17
29
 
@@ -33,7 +45,7 @@ module StdNum
33
45
  end
34
46
  end
35
47
 
36
-
48
+ # Validate, convert, and normalize ISBNs (10-digit or 13-digit)
37
49
  module ISBN
38
50
  extend Helpers
39
51
 
@@ -84,7 +96,6 @@ module StdNum
84
96
  # For an ISBN normalizing it is the same as converting to ISBN 13
85
97
  # and making sure it's valid
86
98
  # @param [String] isbn The ISBN to normalize
87
- # @param [Boolean] passthrough On failure, return the original passed-in value instead of nil
88
99
  # @return [String, nil] the normalized (to 13 digit) ISBN, or nil on failure
89
100
  def self.normalize rawisbn
90
101
  isbn = convert_to_13 rawisbn
@@ -137,8 +148,6 @@ module StdNum
137
148
  # @example Get the normalized values and index them (if valid) or original value (if not)
138
149
  # norms = StdNum::ISBN.allNormalizedValues(rawisbn)
139
150
  # doc['isbn'] = norms ? norms : [rawisbn]
140
-
141
-
142
151
  def self.allNormalizedValues isbn
143
152
  isbn = reduce_to_basics isbn, [10,13]
144
153
  return [] unless isbn
@@ -153,6 +162,7 @@ module StdNum
153
162
 
154
163
  end
155
164
 
165
+ # Validate and and normalize ISSNs
156
166
  module ISSN
157
167
  extend Helpers
158
168
 
@@ -188,6 +198,11 @@ module StdNum
188
198
  return issn[-1..-1] == self.checkdigit(issn, true)
189
199
  end
190
200
 
201
+
202
+
203
+ # Make sure it's valid, remove the dashes, uppercase the X, and return
204
+ # @param [String] isbn The ISBN to normalize
205
+ # @return [String, nil] the normalized (to 13 digit) ISBN, or nil on failure
191
206
  def self.normalize rawissn
192
207
  issn = reduce_to_basics rawissn, 8
193
208
  if issn and valid?(issn, true)
@@ -201,6 +216,7 @@ module StdNum
201
216
 
202
217
  end
203
218
 
219
+ # Validate and and normalize LCCNs
204
220
  module LCCN
205
221
 
206
222
  # The rules for validity according to http://www.loc.gov/marc/lccn-namespace.html#syntax:
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: library_stdnums
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.0.0
5
+ version: 1.0.1
6
6
  platform: ruby
7
7
  authors:
8
8
  - Bill Dueber