ebsco-eds 0.0.7.pre → 0.0.8.pre

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.
@@ -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
  - - ">"