enju_ndl 0.0.12 → 0.0.13

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.
@@ -18,12 +18,12 @@ class NdlBooksController < ApplicationController
18
18
  def create
19
19
  if params[:book]
20
20
  @manifestation = NdlBook.import_from_sru_response(params[:book][:nbn])
21
- if @manifestation.save
21
+ if @manifestation.try(:save)
22
22
  flash[:notice] = t('controller.successfully_created', :model => t('activerecord.models.manifestation'))
23
23
  flash[:porta_import] == true
24
24
  redirect_to manifestation_items_url(@manifestation)
25
25
  else
26
- flash[:notice] = t('page.record_not_found')
26
+ flash[:notice] = t('enju_ndl.record_not_found')
27
27
  redirect_to ndl_books_url
28
28
  end
29
29
  end
@@ -1,11 +1,15 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  module NdlBooksHelper
3
3
  def link_to_import(nbn)
4
- manifestation = Manifestation.where(:nbn => nbn).first
5
- unless manifestation
6
- link_to '追加', ndl_books_path(:book => {:nbn => nbn}), :method => :post
4
+ if nbn.blank?
5
+ t('enju_ndl.not_available')
7
6
  else
8
- '登録済み'
7
+ manifestation = Manifestation.where(:nbn => nbn).first
8
+ unless manifestation
9
+ link_to '追加', ndl_books_path(:book => {:nbn => nbn}), :method => :post
10
+ else
11
+ '登録済み'
12
+ end
9
13
  end
10
14
  end
11
15
  end
@@ -20,19 +20,6 @@ class NdlBook
20
20
  10
21
21
  end
22
22
 
23
- def self.find_by_isbn(isbn)
24
- url = "http://iss.ndl.go.jp/api/opensearch?dpid=iss-ndl-opac&isbn=#{isbn}&cnt=1&idx=1"
25
- Rails.logger.debug url
26
- xml = open(url).read
27
- doc = Nokogiri::XML(xml).at('//channel/item')
28
- {
29
- :title => doc.at('./title').content,
30
- :publisher => doc.xpath('./dc:publisher').collect(&:content).join(' '),
31
- :creator => doc.xpath('./dc:creator[@xsi:type="dcndl:NDLNH"]').collect(&:content).join(' '),
32
- :isbn => doc.at('./dc:identifier[@xsi:type="dcndl:ISBN"]').try(:content).to_s
33
- }
34
- end
35
-
36
23
  def self.import_from_sru_response(jpno)
37
24
  manifestation = Manifestation.where(:nbn => jpno).first
38
25
  return if manifestation
@@ -5,7 +5,7 @@
5
5
 
6
6
  <%= form_for :books, :url => ndl_books_path, :html => {:method => 'get'} do -%>
7
7
  <p>
8
- <%= text_field_tag 'query', h(@query), {:id => 'search_form_top', :class => 'search_form'} -%>
8
+ <%= search_field_tag 'query', h(@query), {:id => 'search_form_top', :class => 'search_form'} -%>
9
9
  <%= submit_tag '検索' -%>
10
10
  </p>
11
11
  <%- end -%>
@@ -1,3 +1,6 @@
1
1
  en:
2
2
  enju_ndl:
3
3
  import_from_ndl_search: Import from NDL Search
4
+ record_not_found: Record not found.
5
+ not_available: Not available
6
+
@@ -1,3 +1,5 @@
1
1
  ja:
2
2
  enju_ndl:
3
3
  import_from_ndl_search: NDLサーチ検索によるインポート
4
+ record_not_found: 資料が見つかりません。
5
+ not_available: 利用不可
@@ -2,6 +2,9 @@ require 'devise'
2
2
  require 'nokogiri'
3
3
  require 'rss'
4
4
  require 'isbn/tools'
5
+ require 'acts_as_list'
6
+ require 'attribute_normalizer'
7
+ require 'library_stdnums'
5
8
 
6
9
  module EnjuNdl
7
10
  class Engine < Rails::Engine
@@ -20,8 +20,6 @@ module EnjuNdl
20
20
  end
21
21
 
22
22
  def import_record(doc)
23
- pub_date, langugage, nbn, ndc, isbn = nil, nil, nil, nil, nil
24
-
25
23
  nbn = doc.at('//dcterms:identifier[@rdf:datatype="http://ndl.go.jp/dcndl/terms/JPNO"]').try(:content)
26
24
  manifestation = Manifestation.where(:nbn => nbn).first if nbn
27
25
  return manifestation if manifestation
@@ -32,7 +30,7 @@ module EnjuNdl
32
30
  title = get_title(doc)
33
31
 
34
32
  # date of publication
35
- pub_date = doc.at('//dcterms:date').content.to_s.gsub(/\./, '-')
33
+ pub_date = doc.at('//dcterms:date').try(:content).to_s.gsub(/\./, '-')
36
34
  unless pub_date =~ /^\d+(-\d{0,2}){0,2}$/
37
35
  pub_date = nil
38
36
  end
@@ -44,18 +42,34 @@ module EnjuNdl
44
42
  language_id = 1
45
43
  end
46
44
 
47
- isbn = doc.at('//dcterms:identifier[@rdf:datatype="http://ndl.go.jp/dcndl/terms/ISBN"]').try(:content).to_s
45
+ isbn = ISBN_Tools.cleanup(doc.at('//dcterms:identifier[@rdf:datatype="http://ndl.go.jp/dcndl/terms/ISBN"]').try(:content))
46
+ issn_l = ISBN_Tools.cleanup(doc.at('//dcterms:identifier[@rdf:datatype="http://ndl.go.jp/dcndl/terms/ISSNL"]').try(:content))
48
47
  classification_urls = doc.xpath('//dcterms:subject[@rdf:resource]').map{|subject| subject.attributes['resource'].value}
49
48
  if classification_urls
50
- ndc9_url = classification_urls.map{|url| URI.parse(url)}.select{|u| u.path.split('/').reverse[1] == 'ndc9'}.first
49
+ ndc9_url = classification_urls.map{|url| URI.parse(URI.escape(url))}.select{|u| u.path.split('/').reverse[1] == 'ndc9'}.first
51
50
  if ndc9_url
52
51
  ndc = ndc9_url.path.split('/').last
53
52
  end
54
53
  end
54
+
55
+ carrier_type = content_type = nil
56
+ doc.xpath('//dcndl:materialType[@rdf:resource]').each do |d|
57
+ case d.attributes['resource'].try(:content)
58
+ when 'http://ndl.go.jp/ndltype/Book'
59
+ carrier_type = CarrierType.where(:name => 'print').first
60
+ content_type = ContentType.where(:name => 'text').first
61
+ when 'http://purl.org/dc/dcmitype/Sound'
62
+ content_type = ContentType.where(:name => 'audio').first
63
+ when 'http://purl.org/dc/dcmitype/MovingImage'
64
+ content_type = ContentType.where(:name => 'video').first
65
+ when 'http://ndl.go.jp/ndltype/ElectronicResource'
66
+ carrier_type = CarrierType.where(:name => 'file').first
67
+ end
68
+ end
69
+
55
70
  description = doc.at('//dcterms:abstract').try(:content)
56
71
  price = doc.at('//dcndl:price').try(:content)
57
72
  volume_number_string = doc.at('//dcndl:volume/rdf:Description/rdf:value').try(:content)
58
-
59
73
  manifestation = nil
60
74
  Patron.transaction do
61
75
  publisher_patrons = Patron.import_patrons(publishers)
@@ -76,10 +90,14 @@ module EnjuNdl
76
90
  :nbn => nbn,
77
91
  :ndc => ndc
78
92
  )
93
+ manifestation.carrier_type = carrier_type if carrier_type
94
+ manifestation.content_type = content_type if content_type
79
95
  manifestation.publishers << publisher_patrons
80
96
  create_frbr_instance(doc, manifestation)
81
97
  end
82
98
 
99
+ create_series_statement(doc, manifestation)
100
+
83
101
  #manifestation.send_later(:create_frbr_instance, doc.to_s)
84
102
  return manifestation
85
103
  end
@@ -178,7 +196,7 @@ module EnjuNdl
178
196
 
179
197
  def get_language(doc)
180
198
  # TODO: 言語が複数ある場合
181
- language = doc.at('//dcterms:language[@rdf:datatype="http://purl.org/dc/terms/ISO639-2"]').content
199
+ language = doc.at('//dcterms:language[@rdf:datatype="http://purl.org/dc/terms/ISO639-2"]').try(:content)
182
200
  if language
183
201
  language.downcase
184
202
  end
@@ -191,6 +209,46 @@ module EnjuNdl
191
209
  end
192
210
  return publishers
193
211
  end
212
+
213
+ def create_series_statement(doc, manifestation)
214
+ series = series_title = {}
215
+ series[:title] = doc.at('//dcndl:seriesTitle/rdf:Description/rdf:value').try(:content)
216
+ series[:title_transcription] = doc.at('//dcndl:seriesTitle/rdf:Description/dcndl:seriesTitleTranscription').try(:content)
217
+ if series[:title]
218
+ series_title[:title] = series[:title].split(';')[0].strip
219
+ series_title[:title_transcription] = series[:title_transcription]
220
+ end
221
+
222
+ publication_periodicity = doc.at('//dcndl:publicationPeriodicity').try(:content)
223
+
224
+ if series_title[:title]
225
+ series_statement = SeriesStatement.where(:original_title => series_title[:title]).first
226
+ unless series_statement
227
+ series_statement = SeriesStatement.new(
228
+ :original_title => series_title[:title],
229
+ :title_transcription => series_title[:title_transcription],
230
+ :periodical => false
231
+ )
232
+ end
233
+ elsif publication_periodicity
234
+ issn = ISBN_Tools.cleanup(doc.at('//dcterms:identifier[@rdf:datatype="http://ndl.go.jp/dcndl/terms/ISSN"]').try(:content))
235
+ series_statement = SeriesStatement.where(:issn => issn).first
236
+ unless series_statement
237
+ series_statement = SeriesStatement.new(
238
+ :original_title => manifestation.original_title,
239
+ :title_transcription => manifestation.title_transcription,
240
+ :issn => issn,
241
+ :periodical => true
242
+ )
243
+ end
244
+ end
245
+
246
+ if series_statement
247
+ manifestation.series_statement = series_statement
248
+ manifestation.save
249
+ end
250
+ manifestation
251
+ end
194
252
  end
195
253
 
196
254
  class AlreadyImported < StandardError
@@ -1,3 +1,3 @@
1
1
  module EnjuNdl
2
- VERSION = "0.0.12"
2
+ VERSION = "0.0.13"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enju_ndl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
4
+ version: 0.0.13
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-24 00:00:00.000000000 Z
12
+ date: 2012-03-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &70242626790440 !ruby/object:Gem::Requirement
16
+ requirement: &70163314227080 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '3.1'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70242626790440
24
+ version_requirements: *70163314227080
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: devise
27
- requirement: &70242626790020 !ruby/object:Gem::Requirement
27
+ requirement: &70163314226520 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70242626790020
35
+ version_requirements: *70163314226520
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: nokogiri
38
- requirement: &70242626789560 !ruby/object:Gem::Requirement
38
+ requirement: &70163314225900 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70242626789560
46
+ version_requirements: *70163314225900
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: will_paginate
49
- requirement: &70242626805440 !ruby/object:Gem::Requirement
49
+ requirement: &70163314225200 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,43 @@ dependencies:
54
54
  version: '3.0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70242626805440
57
+ version_requirements: *70163314225200
58
+ - !ruby/object:Gem::Dependency
59
+ name: acts_as_list
60
+ requirement: &70163314224780 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *70163314224780
69
+ - !ruby/object:Gem::Dependency
70
+ name: attribute_normalizer
71
+ requirement: &70163314224200 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: *70163314224200
80
+ - !ruby/object:Gem::Dependency
81
+ name: library_stdnums
82
+ requirement: &70163314223780 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :runtime
89
+ prerelease: false
90
+ version_requirements: *70163314223780
58
91
  - !ruby/object:Gem::Dependency
59
92
  name: sqlite3
60
- requirement: &70242626805020 !ruby/object:Gem::Requirement
93
+ requirement: &70163314223360 !ruby/object:Gem::Requirement
61
94
  none: false
62
95
  requirements:
63
96
  - - ! '>='
@@ -65,10 +98,10 @@ dependencies:
65
98
  version: '0'
66
99
  type: :development
67
100
  prerelease: false
68
- version_requirements: *70242626805020
101
+ version_requirements: *70163314223360
69
102
  - !ruby/object:Gem::Dependency
70
103
  name: rspec-rails
71
- requirement: &70242626804560 !ruby/object:Gem::Requirement
104
+ requirement: &70163314222940 !ruby/object:Gem::Requirement
72
105
  none: false
73
106
  requirements:
74
107
  - - ! '>='
@@ -76,7 +109,7 @@ dependencies:
76
109
  version: '0'
77
110
  type: :development
78
111
  prerelease: false
79
- version_requirements: *70242626804560
112
+ version_requirements: *70163314222940
80
113
  description: NDL WebAPI wrapper for Next-L Enju
81
114
  email:
82
115
  - tanabe@mwr.mediacom.keio.ac.jp
@@ -130,3 +163,4 @@ summary: enju_ndl plugin
130
163
  test_files:
131
164
  - test/enju_ndl_test.rb
132
165
  - test/test_helper.rb
166
+ has_rdoc: