ebsco-eds 0.0.7.pre → 0.0.8.pre

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,7 @@
1
1
  require 'yaml'
2
2
  require 'json'
3
+ require 'citeproc'
4
+ require 'csl/styles'
3
5
  require 'bibtex'
4
6
  require 'cgi'
5
7
 
@@ -75,7 +77,8 @@ module EBSCO
75
77
 
76
78
  # The title.
77
79
  def title
78
- _retval = get_item_data_by_name('Title') || bib_title
80
+ # _retval = get_item_data_by_name('Title') || bib_title
81
+ _retval = bib_title || get_item_data_by_name('Title')
79
82
  # TODO: make this configurable
80
83
  if _retval.nil?
81
84
  _retval = 'This title is unavailable for guests, please login to see more information.'
@@ -209,7 +212,7 @@ module EBSCO
209
212
 
210
213
  # List of ISBNs
211
214
  def isbns
212
- bib_isbns | item_related_isbns
215
+ bib_isbns || item_related_isbns
213
216
  end
214
217
 
215
218
  # Print ISBN
@@ -435,8 +438,8 @@ module EBSCO
435
438
  # Experimental bibtex support.
436
439
  def retrieve_bibtex
437
440
 
438
- @bibtex.key = self.accession_number
439
- @bibtex.title = self.title
441
+ @bibtex.key = accession_number
442
+ @bibtex.title = title.gsub('<highlight>', '').gsub('</highlight>', '')
440
443
  if self.bib_authors_list.length > 0
441
444
  @bibtex.author = self.bib_authors_list.join(' and ').chomp
442
445
  end
@@ -447,15 +450,15 @@ module EBSCO
447
450
  case _type
448
451
  when 'Academic Journal'
449
452
  @bibtex.type = :article
450
- @bibtex.journal = self.source_title
451
- if self.issue
452
- @bibtex.issue = self.issue
453
+ @bibtex.journal = source_title
454
+ unless issue.nil?
455
+ @bibtex.issue = issue
453
456
  end
454
- if self.volume
455
- @bibtex.number = self.volume
457
+ unless volume.nil?
458
+ @bibtex.number = volume
456
459
  end
457
- if self.page_start && self.page_count
458
- @bibtex.pages = self.page_start + '-' + (self.page_start.to_i + self.page_count.to_i-1).to_s
460
+ if page_start && page_count
461
+ @bibtex.pages = page_start + '-' + (page_start.to_i + page_count.to_i-1).to_s
459
462
  end
460
463
  if self.bib_publication_month
461
464
  @bibtex.month = self.bib_publication_month.to_i
@@ -492,7 +495,8 @@ module EBSCO
492
495
  if self.bib_publication_month
493
496
  @bibtex.month = self.bib_publication_month.to_i
494
497
  end
495
- if self.isbns
498
+ if isbns
499
+ puts 'ISBNS: ' + isbns.inspect
496
500
  @bibtex.isbn = self.isbns.first
497
501
  end
498
502
  else
@@ -501,6 +505,12 @@ module EBSCO
501
505
  @bibtex
502
506
  end
503
507
 
508
+ def bibtex_bibliography
509
+ bib = BibTeX::Bibliography.new
510
+ bib << retrieve_bibtex
511
+ bib
512
+ end
513
+
504
514
  # ====================================================================================
505
515
  # HEADER: DbId, DbLabel, An, PubType, PubTypeId, AccessLevel
506
516
  # ====================================================================================
@@ -568,7 +578,12 @@ module EBSCO
568
578
  end
569
579
 
570
580
  def item_related_isbns
571
- get_item_data_by_label('Related ISBNs').split(' ').map!{|item| item.gsub(/\.$/, '')}
581
+ isbns = get_item_data_by_label('Related ISBNs')
582
+ if isbns
583
+ isbns.split(' ').map!{|item| item.gsub(/\.$/, '')}
584
+ else
585
+ nil
586
+ end
572
587
  end
573
588
 
574
589
  # ====================================================================================
@@ -649,7 +664,12 @@ module EBSCO
649
664
 
650
665
  def bib_source_title
651
666
  if @bib_part && @bib_part.fetch('BibEntity',{}).fetch('Titles',{}).any?
652
- @bib_part.fetch('BibEntity',{}).fetch('Titles',{}).find{|item| item['Type'] == 'main'}['TitleFull']
667
+ item_title_full = @bib_part.fetch('BibEntity',{}).fetch('Titles',{}).find{|item| item['Type'] == 'main'}
668
+ if item_title_full
669
+ item_title_full['TitleFull']
670
+ else
671
+ nil
672
+ end
653
673
  else
654
674
  nil
655
675
  end
@@ -657,7 +677,12 @@ module EBSCO
657
677
 
658
678
  def bib_issn_print
659
679
  if @bib_part && @bib_part.fetch('BibEntity',{}).fetch('Identifiers',{}).any?
660
- @bib_part.fetch('BibEntity',{}).fetch('Identifiers',{}).find{|item| item['Type'] == 'issn-print'}['Value']
680
+ item_issn_p = @bib_part.fetch('BibEntity',{}).fetch('Identifiers',{}).find{|item| item['Type'] == 'issn-print'}
681
+ if item_issn_p
682
+ item_issn_p['Value']
683
+ else
684
+ nil
685
+ end
661
686
  else
662
687
  nil
663
688
  end
@@ -665,7 +690,12 @@ module EBSCO
665
690
 
666
691
  def bib_issn_electronic
667
692
  if @bib_part && @bib_part.fetch('BibEntity',{}).fetch('Identifiers',{}).any?
668
- @bib_part.fetch('BibEntity',{}).fetch('Identifiers',{}).find{|item| item['Type'] == 'issn-electronic'}['Value']
693
+ item_issn_e = @bib_part.fetch('BibEntity',{}).fetch('Identifiers',{}).find{|item| item['Type'] == 'issn-electronic'}
694
+ if item_issn_e
695
+ item_issn_e['Value']
696
+ else
697
+ nil
698
+ end
669
699
  else
670
700
  nil
671
701
  end
@@ -685,7 +715,12 @@ module EBSCO
685
715
 
686
716
  def bib_isbn_print
687
717
  if @bib_part && @bib_part.fetch('BibEntity',{}).fetch('Identifiers',{}).any?
688
- @bib_part.fetch('BibEntity',{}).fetch('Identifiers',{}).find{|item| item['Type'] == 'isbn-print'}['Value']
718
+ item_isbn_p = @bib_part.fetch('BibEntity',{}).fetch('Identifiers',{}).find{|item| item['Type'] == 'isbn-print'}
719
+ if item_isbn_p
720
+ item_isbn_p['Value']
721
+ else
722
+ nil
723
+ end
689
724
  else
690
725
  nil
691
726
  end
@@ -693,7 +728,12 @@ module EBSCO
693
728
 
694
729
  def bib_isbn_electronic
695
730
  if @bib_part && @bib_part.fetch('BibEntity',{}).fetch('Identifiers',{}).any?
696
- @bib_part.fetch('BibEntity',{}).fetch('Identifiers',{}).find{|item| item['Type'] == 'isbn-electronic'}['Value']
731
+ item_isbn_e = @bib_part.fetch('BibEntity',{}).fetch('Identifiers',{}).find{|item| item['Type'] == 'isbn-electronic'}
732
+ if item_isbn_e
733
+ item_isbn_e['Value']
734
+ else
735
+ nil
736
+ end
697
737
  else
698
738
  nil
699
739
  end
@@ -757,7 +797,12 @@ module EBSCO
757
797
 
758
798
  def bib_volume
759
799
  if @bib_part && @bib_part.fetch('BibEntity',{}).fetch('Numbering',{}).any?
760
- @bib_part.fetch('BibEntity',{}).fetch('Numbering',{}).find{|item| item['Type'] == 'volume'}['Value']
800
+ item_volume = @bib_part.fetch('BibEntity',{}).fetch('Numbering',{}).find{|item| item['Type'] == 'volume'}
801
+ if item_volume
802
+ item_volume['Value']
803
+ else
804
+ nil
805
+ end
761
806
  else
762
807
  nil
763
808
  end
@@ -765,7 +810,12 @@ module EBSCO
765
810
 
766
811
  def bib_issue
767
812
  if @bib_part && @bib_part.fetch('BibEntity',{}).fetch('Numbering',{}).any?
768
- @bib_part.fetch('BibEntity',{}).fetch('Numbering',{}).find{|item| item['Type'] == 'issue'}['Value']
813
+ item_issue = @bib_part.fetch('BibEntity',{}).fetch('Numbering',{}).find{|item| item['Type'] == 'issue'}
814
+ if item_issue
815
+ item_issue['Value']
816
+ else
817
+ nil
818
+ end
769
819
  else
770
820
  nil
771
821
  end
@@ -812,6 +862,11 @@ module EBSCO
812
862
  if all_links
813
863
  hash['links'] = all_links
814
864
  end
865
+ unless @bibtex.has_type?(:other)
866
+ hash['citation_apa'] = citation('apa').first.to_s
867
+ hash['citation_mla'] = citation('modern-language-association').first.to_s
868
+ hash['citation_chicago'] = citation('chicago-author-date').first.to_s
869
+ end
815
870
  hash
816
871
  end
817
872
 
@@ -829,6 +884,17 @@ module EBSCO
829
884
  }
830
885
  end
831
886
 
887
+ def citation(style = 'apa')
888
+ # TODO: catch CSL::ParseError when style can't be found
889
+ # TODO: fix isbns issue
890
+ CSL::Style.root = File.join(__dir__, 'csl/styles')
891
+ cp = CiteProc::Processor.new style: style, format: 'text'
892
+ bib_entry = retrieve_bibtex
893
+ bib_entry_id = bib_entry.to_citeproc['id']
894
+ cp.import bibtex_bibliography.to_citeproc
895
+ cp.render :bibliography, id: bib_entry_id
896
+ end
897
+
832
898
  end # Class Record
833
899
  end # Module EDS
834
900
  end # Module EBSCO
@@ -122,6 +122,7 @@ module EBSCO
122
122
  facet = true
123
123
 
124
124
  # solr response
125
+ solr_response =
125
126
  {
126
127
  'responseHeader' => {
127
128
  'status' => status,
@@ -158,6 +159,43 @@ module EBSCO
158
159
  }
159
160
  }
160
161
 
162
+ solr_response.update(solr_spellcheck) if solr_spellcheck
163
+ solr_response
164
+ end
165
+
166
+ #
167
+ # Example:
168
+ #
169
+ # "spellcheck":{
170
+ # "suggestions":[
171
+ # "blesing",{
172
+ # "numFound":1,
173
+ # "startOffset":0,
174
+ # "endOffset":7,
175
+ # "origFreq":0,
176
+ # "suggestion":[{
177
+ # "word":"blessings",
178
+ # "freq":1}]}],
179
+ # "correctlySpelled":false}}
180
+ def solr_spellcheck
181
+ unless did_you_mean.nil?
182
+ {
183
+ 'spellcheck' => {
184
+ 'suggestions' => [
185
+ search_terms.first.to_s, {
186
+ 'numFound' => 1,
187
+ 'startOffset' => 0,
188
+ 'endOffset' => 7,
189
+ 'origFreq' => 0,
190
+ 'suggestion' => [{
191
+ 'word' => did_you_mean.to_s,
192
+ 'freq' => 1 }]
193
+ }
194
+ ],
195
+ 'correctlySpelled' => false
196
+ }
197
+ }
198
+ end
161
199
  end
162
200
 
163
201
  # Publication date facets:
@@ -1,5 +1,5 @@
1
1
  module EBSCO
2
2
  module EDS
3
- VERSION = '0.0.7.pre'
3
+ VERSION = '0.0.8.pre'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ebsco-eds
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7.pre
4
+ version: 0.0.8.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bill McKinney
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2017-03-30 00:00:00.000000000 Z
12
+ date: 2017-04-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday
@@ -123,20 +123,94 @@ dependencies:
123
123
  - - "~>"
124
124
  - !ruby/object:Gem::Version
125
125
  version: '4.0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: citeproc
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: 1.0.4
133
+ - - "<"
134
+ - !ruby/object:Gem::Version
135
+ version: '2.0'
136
+ type: :runtime
137
+ prerelease: false
138
+ version_requirements: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: 1.0.4
143
+ - - "<"
144
+ - !ruby/object:Gem::Version
145
+ version: '2.0'
146
+ - !ruby/object:Gem::Dependency
147
+ name: csl
148
+ requirement: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '1.4'
153
+ type: :runtime
154
+ prerelease: false
155
+ version_requirements: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '1.4'
160
+ - !ruby/object:Gem::Dependency
161
+ name: citeproc-ruby
162
+ requirement: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '1.0'
167
+ - - ">="
168
+ - !ruby/object:Gem::Version
169
+ version: 1.0.2
170
+ type: :runtime
171
+ prerelease: false
172
+ version_requirements: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - "~>"
175
+ - !ruby/object:Gem::Version
176
+ version: '1.0'
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: 1.0.2
180
+ - !ruby/object:Gem::Dependency
181
+ name: csl-styles
182
+ requirement: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - "~>"
185
+ - !ruby/object:Gem::Version
186
+ version: '1.0'
187
+ - - ">="
188
+ - !ruby/object:Gem::Version
189
+ version: 1.0.1.5
190
+ type: :runtime
191
+ prerelease: false
192
+ version_requirements: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - "~>"
195
+ - !ruby/object:Gem::Version
196
+ version: '1.0'
197
+ - - ">="
198
+ - !ruby/object:Gem::Version
199
+ version: 1.0.1.5
126
200
  - !ruby/object:Gem::Dependency
127
201
  name: activesupport
128
202
  requirement: !ruby/object:Gem::Requirement
129
203
  requirements:
130
204
  - - "~>"
131
205
  - !ruby/object:Gem::Version
132
- version: '4.2'
206
+ version: '5.0'
133
207
  type: :runtime
134
208
  prerelease: false
135
209
  version_requirements: !ruby/object:Gem::Requirement
136
210
  requirements:
137
211
  - - "~>"
138
212
  - !ruby/object:Gem::Version
139
- version: '4.2'
213
+ version: '5.0'
140
214
  - !ruby/object:Gem::Dependency
141
215
  name: bundler
142
216
  requirement: !ruby/object:Gem::Requirement
@@ -225,6 +299,9 @@ files:
225
299
  - bin/setup
226
300
  - ebsco-eds.gemspec
227
301
  - lib/ebsco/eds.rb
302
+ - lib/ebsco/eds/csl/styles/apa.csl
303
+ - lib/ebsco/eds/csl/styles/chicago-author-date.csl
304
+ - lib/ebsco/eds/csl/styles/modern-language-association.csl
228
305
  - lib/ebsco/eds/error.rb
229
306
  - lib/ebsco/eds/info.rb
230
307
  - lib/ebsco/eds/jsonable.rb
@@ -247,7 +324,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
247
324
  requirements:
248
325
  - - ">="
249
326
  - !ruby/object:Gem::Version
250
- version: '0'
327
+ version: 1.9.3
251
328
  required_rubygems_version: !ruby/object:Gem::Requirement
252
329
  requirements:
253
330
  - - ">"