revs-utils 1.0.14 → 1.0.15

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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NWQyNzQ0ZDdhYmMzZmY3OTRiOGQ4MDAwYjJmODhmOTlkNDYwOGI0Zg==
4
+ MDA0MDNjYzdmYThhMTQzNDNkYzdkYjY4YWE4ZGI5MDIyY2JkZGI1MQ==
5
5
  data.tar.gz: !binary |-
6
- ZDNjMjY4NjExMzBlODMzZDc5MzgzOWE4YWRlNzBmODhiMWRlZmQ1Yw==
6
+ OTYwODZjNTIzN2IzZDdmMTA3Mjg3MTA0N2FjNGE0MjNiZjMwN2MwNQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NDRhYjMwYjFlYWMzNWZjMGZkYzBjMzg5ZWU2NmY3NjI3YzNmNDI2ZjhlNTdl
10
- MTE5MmEzYzVlZTliMzQ1NTA2MDU4MTkyNTAyZjU5NmNmNTZmZDkwZjk5MTYx
11
- NWRkYTRmYmZiNmQyZTZkZDU1Y2UwMjczMDBiNDYxOTc2MjMxYzY=
9
+ ZTA5MDU0OTgzNWIwNjdjZWI0M2RmOTg1OGM5MDk4Y2I3ZmU5YWE5YjVhYWQ2
10
+ NTQ1NWExMmJiNmU5MGNhMzUzYTdhMzk4ZWYwNzkyNTNlYzljNTVmOTBmN2Vl
11
+ OTdiMTg2MjQ3YWUxOGQ3YWMxYzk5MmVlNTA1YjkwM2U2ZjRjNzA=
12
12
  data.tar.gz: !binary |-
13
- NWFhYjRkNTYwZDI3Y2JjMDQ2YTVkMDI2NzEwZTFjYTM0ZTc3MTQzOGYxNWMw
14
- ODZjZDIxNzU4ODFlYzBmOTkyZjIwNDA0Y2UwNzg0YThjMGEyNjc3MmMzZWVm
15
- YjBiYmUzOWI4OTc5YmE5N2ZhMzAzMzAwMDc5YzhlNWM5Y2U4YWE=
13
+ NTBmNTczNzZhZDI2YzI5OTg0YjMyOWQyOGMyMDJlYjM1ZDBmZGUxYzEzNGI1
14
+ YjllMzEyMzkxZWJhNzk3MGNkZjRhNjcyZDljOGFlMDhkNDJkZDY3NjBhYTc0
15
+ Nzg0YTJkYWU1MTlmNjViMGU2ODcyNTk1MGM5ZDVkZGQ2YmU2MWQ=
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- revs-utils (1.0.13)
4
+ revs-utils (1.0.15)
5
5
  actionpack (~> 3)
6
6
  chronic
7
7
  countries (= 0.9.2)
@@ -42,14 +42,14 @@ GEM
42
42
  rake (>= 0.8.7)
43
43
  rest-client
44
44
  mime-types (2.0)
45
- multi_json (1.10.1)
45
+ multi_json (1.11.0)
46
46
  rack (1.4.5)
47
47
  rack-cache (1.2)
48
48
  rack (>= 0.4)
49
49
  rack-test (0.6.3)
50
50
  rack (>= 1.0)
51
51
  rake (10.1.0)
52
- rdf (1.1.7)
52
+ rdf (1.1.11)
53
53
  link_header (~> 0.0, >= 0.0.8)
54
54
  rest-client (1.6.7)
55
55
  mime-types (>= 1.16)
@@ -30,5 +30,15 @@ metadata:
30
30
  hide: hide
31
31
  format: format
32
32
  collection_name: collection_name
33
-
34
-
33
+ known_formats:
34
+ - black-and-white film
35
+ - color film
36
+ - slides
37
+ - foldouts
38
+ - pamphlets
39
+ - oversize items
40
+ - photographic prints
41
+ - black-and-white negatives
42
+ - color negatives
43
+ - black-and-white transparencies
44
+ - color transparencies
@@ -1,5 +1,5 @@
1
1
  module Revs
2
2
  module Utils
3
- VERSION = "1.0.14"
3
+ VERSION = "1.0.15"
4
4
  end
5
5
  end
data/lib/revs-utils.rb CHANGED
@@ -14,7 +14,7 @@ REVS_LC_TERMS_FILENAME=File.join(PROJECT_ROOT,'files','revs-lc-marque-terms.obj'
14
14
  REVS_MANIFEST_HEADERS_FILEPATH = File.join(PROJECT_ROOT,'config',"manifest_headers.yml")
15
15
  REGISTER = "register"
16
16
  METADATA = "metadata"
17
-
17
+ FORMATS = "known_formats"
18
18
 
19
19
  module Revs
20
20
  module Utils
@@ -28,6 +28,9 @@ module Revs
28
28
  REVS_MANIFEST_HEADERS_FILE = File.open(REVS_MANIFEST_HEADERS_FILEPATH)
29
29
  REVS_MANIFEST_HEADERS = YAML.load( REVS_MANIFEST_HEADERS_FILE)
30
30
 
31
+ def revs_known_formats
32
+ get_manifest_section(FORMATS)
33
+ end
31
34
 
32
35
  def get_manifest_section(section)
33
36
  return REVS_MANIFEST_HEADERS[section]
@@ -67,40 +70,59 @@ module Revs
67
70
  sources = Array.new
68
71
  files.each do |file|
69
72
  file.each do |row|
70
- #Make sure the sourcid and filename are the same
73
+ #Make sure the sourceid and filename are the same
71
74
  fname = row[get_manifest_section(REGISTER)['filename']].chomp(File.extname(row[get_manifest_section(REGISTER)['filename']]))
72
75
  return false if row[get_manifest_section(REGISTER)['sourceid']] != fname
73
76
  sources << row[get_manifest_section(REGISTER)['sourceid']]
74
- end
75
-
76
-
77
-
77
+ end
78
78
  end
79
79
  return sources.uniq.size == sources.size
80
80
 
81
81
  end
82
-
83
-
82
+
84
83
  #Pass this function a CSV file and it will return true if the proper headers are there and each entry has the required fields filled in
85
84
  def valid_to_register(file_path)
86
-
87
85
  file = read_csv_with_headers(file_path)
86
+ return check_valid_to_register(file)
87
+ end
88
+
89
+ #Pass this function a CSV file and it will return true if the proper headers are there and each entry has the required fields filled in.
90
+ def valid_for_metadata(file_path)
91
+ file = read_csv_with_headers(file_path)
92
+ return check_headers(file)
93
+ end
94
+
95
+ # pass in csv data and it will tell if you everything is safe to register based on having labels, unique sourceIDs and filenames matching sourceIDs
96
+ def check_valid_to_register(csv_data)
88
97
  #Make sure all the required headers are there
89
- return false if not get_manifest_section(REGISTER).values-file[0].keys == []
90
-
98
+ return false if not get_manifest_section(REGISTER).values-csv_data[0].keys == []
99
+ sources=Array.new
91
100
  #Make sure all files have entries for those required headers
92
- file.each do |row|
101
+ csv_data.each do |row|
93
102
  get_manifest_section(REGISTER).keys.each do |header| # label should be there as a column but does not always need a value
94
103
  return false if header.downcase !='label' && row[header].blank? #Alternatively consider row[header].class != String or row[header].size <= 0
95
104
  end
105
+ fname = row[get_manifest_section(REGISTER)['filename']].chomp(File.extname(row[get_manifest_section(REGISTER)['filename']]))
106
+ return false if row[get_manifest_section(REGISTER)['sourceid']] != fname
107
+ sources << row[get_manifest_section(REGISTER)['sourceid']]
96
108
  end
97
- return true
109
+ return sources.uniq.size == sources.size
98
110
  end
99
111
 
100
- #Pass this function a CSV file and it will return true if the proper headers are there and each entry has the required fields filled in.
101
- def valid_for_metadata(file_path)
102
- file = read_csv_with_headers(file_path)
103
- file_headers=file[0].keys.reject(&:blank?).collect(&:downcase)
112
+ # looks at certain metadata fields in manifest to confirm validity (such as dates and formats)
113
+ def check_metadata(csv_data)
114
+ bad_rows=0
115
+ csv_data.each do |row|
116
+ valid_date=revs_is_valid_datestring?(row[get_manifest_section(METADATA)['year']] || row[get_manifest_section(METADATA)['date']])
117
+ valid_format=revs_is_valid_format?(row[get_manifest_section(METADATA)['format']])
118
+ bad_rows+=1 unless (valid_date && valid_format)
119
+ end
120
+ return bad_rows
121
+ end
122
+
123
+ # pass in csv data from a file read in and it will tell you if the headers are valid
124
+ def check_headers(csv_data)
125
+ file_headers=csv_data[0].keys.reject(&:blank?).collect(&:downcase)
104
126
  #The file doesn't need to have all the metadata values, it just can't have headers that aren't used for metadata or registration
105
127
  if file_headers.include?('date') && file_headers.include?('year') # can't have both date and year
106
128
  return false
@@ -110,7 +132,7 @@ module Revs
110
132
  return file_headers-get_manifest_section(METADATA).values-get_manifest_section(REGISTER).values == []
111
133
  end
112
134
  end
113
-
135
+
114
136
  def clean_collection_name(name)
115
137
  return "" if name.blank? || name.nil?
116
138
  name=name.to_s
@@ -147,7 +169,13 @@ module Revs
147
169
  return row
148
170
  end
149
171
 
150
- # check a single format single and fix some common issues
172
+ # checks to see if we have a valid format
173
+ def revs_is_valid_format?(format)
174
+ formats=format.split("|").collect{|f| f.strip}
175
+ !formats.collect {|f| revs_known_formats.include?(f)}.uniq.include?(false)
176
+ end
177
+
178
+ # check a single format and fix some common issues
151
179
  def revs_check_format(format)
152
180
  return revs_check_formats([format]).first
153
181
  end
@@ -237,6 +265,14 @@ module Revs
237
265
  date_string.to_s.strip.scan(/\D/).empty? and (starting_year..Date.today.year).include?(date_string.to_i)
238
266
  end
239
267
 
268
+ # tell us if the incoming datestring supplied in the manifest column is a valid date, year or list of years
269
+ def revs_is_valid_datestring?(date_string)
270
+ return true if date_string.nil? || date_string.empty?
271
+ is_full_date=(get_full_date(date_string) != false)
272
+ is_year=!parse_years(date_string).empty?
273
+ return is_year || is_full_date
274
+ end
275
+
240
276
  # tell us if the string passed is in is a full date of the format M/D/YYYY or m-d-yyyy or m-d-yy or M/D/YY, and returns the date object if it is valid
241
277
  def get_full_date(date_string)
242
278
  begin
@@ -108,7 +108,27 @@ describe "Revs-Utils" do
108
108
  @revs.is_valid_year?('1700').should be_false # too old! no cars even existed yet
109
109
  @revs.is_valid_year?('1700',1600).should be_true # unless we allow it to be ok
110
110
  end
111
-
111
+
112
+ it "should indicate if we have unknown formats" do
113
+ @revs.revs_is_valid_format?('slides').should be_true
114
+ @revs.revs_is_valid_format?('slide').should be_false
115
+ @revs.revs_is_valid_format?('slides | slide').should be_false
116
+ @revs.revs_is_valid_format?('slides | black-and-white negatives').should be_true
117
+ @revs.revs_is_valid_format?('black-and-white-negatives').should be_false
118
+ @revs.revs_is_valid_format?('black-and-white negatives').should be_true
119
+ end
120
+
121
+ it "should indicate if we have a valid datestring" do
122
+ @revs.revs_is_valid_datestring?('1959').should be_true
123
+ @revs.revs_is_valid_datestring?('bogus').should be_false
124
+ @revs.revs_is_valid_datestring?('').should be_true
125
+ @revs.revs_is_valid_datestring?(nil).should be_true
126
+ @revs.revs_is_valid_datestring?([]).should be_true
127
+ @revs.revs_is_valid_datestring?('2/2/1950').should be_true
128
+ @revs.revs_is_valid_datestring?('2/31/1950').should be_false
129
+ @revs.revs_is_valid_datestring?('2/2/50').should be_true
130
+ @revs.revs_is_valid_datestring?('195x').should be_true
131
+ end
112
132
 
113
133
  it "should lookup the country correctly" do
114
134
  @revs.revs_get_country('USA').should == "United States"
@@ -137,6 +157,7 @@ describe "Revs-Utils" do
137
157
  it "should parse 1950s correctly" do
138
158
 
139
159
  @revs.parse_years('1950s').should == ['1950','1951','1952','1953','1954','1955','1956','1957','1958','1959']
160
+ @revs.parse_years("1950's").should == ['1950','1951','1952','1953','1954','1955','1956','1957','1958','1959']
140
161
 
141
162
  end
142
163
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: revs-utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.14
4
+ version: 1.0.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Mangiafico
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-26 00:00:00.000000000 Z
11
+ date: 2015-04-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: countries