montague 0.2.0

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.
Files changed (45) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/CHANGELOG.md +17 -0
  4. data/Gemfile +4 -0
  5. data/README.md +138 -0
  6. data/Rakefile +2 -0
  7. data/lib/montague.rb +9 -0
  8. data/lib/montague/api/api.rb +12 -0
  9. data/lib/montague/api/base.rb +27 -0
  10. data/lib/montague/api/client.rb +27 -0
  11. data/lib/montague/api/journal.rb +52 -0
  12. data/lib/montague/api/publisher.rb +52 -0
  13. data/lib/montague/model/archiving.rb +26 -0
  14. data/lib/montague/model/copyright_link.rb +26 -0
  15. data/lib/montague/model/funder.rb +26 -0
  16. data/lib/montague/model/header.rb +22 -0
  17. data/lib/montague/model/journal.rb +26 -0
  18. data/lib/montague/model/journal_report.rb +15 -0
  19. data/lib/montague/model/journals_report.rb +15 -0
  20. data/lib/montague/model/mandate.rb +44 -0
  21. data/lib/montague/model/model.rb +22 -0
  22. data/lib/montague/model/paid_access.rb +34 -0
  23. data/lib/montague/model/publisher.rb +46 -0
  24. data/lib/montague/model/publisher_report.rb +12 -0
  25. data/lib/montague/model/publishers_report.rb +14 -0
  26. data/lib/montague/model/report_header_mixin.rb +12 -0
  27. data/lib/montague/model/report_http_response_mixin.rb +12 -0
  28. data/lib/montague/model/report_publisher_mixin.rb +12 -0
  29. data/lib/montague/model/structure.rb +18 -0
  30. data/lib/montague/reporter/journal.rb +26 -0
  31. data/lib/montague/reporter/journals.rb +26 -0
  32. data/lib/montague/reporter/publisher.rb +24 -0
  33. data/lib/montague/reporter/publishers.rb +24 -0
  34. data/lib/montague/reporter/reporter.rb +11 -0
  35. data/lib/montague/version.rb +5 -0
  36. data/lib/montague/xml_extractor/base.rb +58 -0
  37. data/lib/montague/xml_extractor/header.rb +43 -0
  38. data/lib/montague/xml_extractor/journal.rb +31 -0
  39. data/lib/montague/xml_extractor/publisher.rb +164 -0
  40. data/lib/montague/xml_extractor/xml_extractor.rb +13 -0
  41. data/montague.gemspec +22 -0
  42. data/test/test_helper.rb +102 -0
  43. data/test/test_search_by_journal.rb +90 -0
  44. data/test/test_search_by_publisher_api.rb +36 -0
  45. metadata +131 -0
@@ -0,0 +1,22 @@
1
+ module Montague
2
+ module Model
3
+ # Header
4
+ #
5
+ class Header
6
+
7
+ # @return [String, nil]
8
+ attr_accessor :api_control
9
+
10
+ # @return [Fixnum, nil]
11
+ attr_accessor :hits
12
+
13
+ # @return [String, nil]
14
+ attr_accessor :message
15
+
16
+ # @return [String, nil]
17
+ attr_accessor :outcome
18
+
19
+ end
20
+
21
+ end
22
+ end
@@ -0,0 +1,26 @@
1
+ module Montague
2
+ module Model
3
+
4
+ # Journal
5
+ #
6
+ class Journal < Montague::Model::Structure
7
+
8
+ # @return [String, nil]
9
+ attr_reader :issn
10
+
11
+ # @return [String, nil]
12
+ attr_reader :title
13
+
14
+ # @param v [String]
15
+ def issn=(v)
16
+ @issn = v if v && !v.empty?
17
+ end
18
+
19
+ # @param v [String]
20
+ def title=(v)
21
+ @title = v if v && !v.empty?
22
+ end
23
+
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,15 @@
1
+ module Montague
2
+ module Model
3
+ # Journal report
4
+ #
5
+ class JournalReport
6
+ include Montague::Model::ReportHeaderMixin
7
+ include Montague::Model::ReportHTTPResponseMixin
8
+ include Montague::Model::ReportPublisherMixin
9
+
10
+ # @return [Montague::Model::Journal, nil]
11
+ attr_accessor :journal
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module Montague
2
+ module Model
3
+ # Journals report
4
+ #
5
+ class JournalsReport
6
+ include Montague::Model::ReportHeaderMixin
7
+ include Montague::Model::ReportHTTPResponseMixin
8
+ include Montague::Model::ReportPublisherMixin
9
+
10
+ # @return [Array<Montague::Model::Journal>]
11
+ attr_accessor :journals
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,44 @@
1
+ module Montague
2
+ module Model
3
+
4
+ # Funder compliance mandate
5
+ #
6
+ class Mandate < Montague::Model::Structure
7
+
8
+ # @return [Montague::Model::Funder, nil]
9
+ attr_reader :funder
10
+
11
+ # @return [String, nil]
12
+ attr_reader :publisher_complies
13
+
14
+ # @return [String, nil]
15
+ attr_reader :compliance_type
16
+
17
+ # @return [String, nil]
18
+ attr_reader :selected_titles
19
+
20
+ # @param v [String]
21
+ def funder=(v)
22
+ @funder = v if v && v.data?
23
+ end
24
+
25
+ # @param v [String]
26
+ def publisher_complies=(v)
27
+ @publisher_complies = v if v && !v.empty?
28
+ end
29
+
30
+ # @param v [String]
31
+ def compliance_type=(v)
32
+ @compliance_type = v if v && !v.empty?
33
+ end
34
+
35
+ # @param v [String]
36
+ def selected_titles=(v)
37
+ # handle absent negative value in API
38
+ v = 'no' if v.empty?
39
+ @selected_titles = v if v && !v.empty?
40
+ end
41
+
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,22 @@
1
+ require 'montague/model/structure'
2
+ require 'montague/model/archiving'
3
+ require 'montague/model/copyright_link'
4
+ require 'montague/model/funder'
5
+ require 'montague/model/publisher'
6
+ require 'montague/model/header'
7
+ require 'montague/model/journal'
8
+ require 'montague/model/mandate'
9
+ require 'montague/model/paid_access'
10
+ require 'montague/model/report_header_mixin'
11
+ require 'montague/model/report_http_response_mixin'
12
+ require 'montague/model/report_publisher_mixin'
13
+ require 'montague/model/journal_report'
14
+ require 'montague/model/journals_report'
15
+ require 'montague/model/publisher_report'
16
+ require 'montague/model/publishers_report'
17
+
18
+ module Montague
19
+ # Model
20
+ module Model
21
+ end
22
+ end
@@ -0,0 +1,34 @@
1
+ module Montague
2
+ module Model
3
+
4
+ # Paid access
5
+ #
6
+ class PaidAccess < Montague::Model::Structure
7
+
8
+ # @return [String, nil]
9
+ attr_reader :url
10
+
11
+ # @return [String, nil]
12
+ attr_reader :name
13
+
14
+ # @return [String, nil]
15
+ attr_reader :notes
16
+
17
+ # @param v [String]
18
+ def url=(v)
19
+ @url = v if v && !v.empty?
20
+ end
21
+
22
+ # @param v [String]
23
+ def name=(v)
24
+ @name = v if v && !v.empty?
25
+ end
26
+
27
+ # @param v [String]
28
+ def notes=(v)
29
+ @notes = v if v && !v.empty?
30
+ end
31
+
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,46 @@
1
+ module Montague
2
+ module Model
3
+
4
+ # Publisher
5
+ #
6
+ class Publisher
7
+
8
+ # @return [String]
9
+ attr_accessor :alias
10
+
11
+ # @return [Array<String>]
12
+ attr_accessor :conditions
13
+
14
+ # @return [Array<Montague::Model::CopyrightLink>]
15
+ attr_accessor :copyright_links
16
+
17
+ # @return [String]
18
+ attr_accessor :id
19
+
20
+ # Publisher compliance with the open access mandates of research funding agencies
21
+ # @return [Array<Montague::Model::Mandate>]
22
+ attr_accessor :mandates
23
+
24
+ # @return [String, nil]
25
+ attr_accessor :name
26
+
27
+ # @return [Montague::Model::PaidAccess, nil]
28
+ attr_accessor :paid_access
29
+
30
+ # Publisher version, with formatting
31
+ # @return [Montague::Model::Archiving, nil]
32
+ attr_accessor :pdf_version
33
+
34
+ # Submitted version, before peer-review
35
+ # @return [Montague::Model::Archiving, nil]
36
+ attr_accessor :pre_prints
37
+
38
+ # Accepted version, after peer-review
39
+ # @return [Montague::Model::Archiving, nil]
40
+ attr_accessor :post_prints
41
+
42
+ # @return [String, nil]
43
+ attr_accessor :romeo_colour
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,12 @@
1
+ module Montague
2
+ module Model
3
+ # Publisher report
4
+ #
5
+ class PublisherReport
6
+ include Montague::Model::ReportHeaderMixin
7
+ include Montague::Model::ReportHTTPResponseMixin
8
+ include Montague::Model::ReportPublisherMixin
9
+
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,14 @@
1
+ module Montague
2
+ module Model
3
+ # Publishers report
4
+ #
5
+ class PublishersReport
6
+ include Montague::Model::ReportHeaderMixin
7
+ include Montague::Model::ReportHTTPResponseMixin
8
+
9
+ # @return [Array<Montague::Model::Publisher>]
10
+ attr_accessor :publishers
11
+
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ module Montague
2
+ module Model
3
+ # Report header mixin
4
+ #
5
+ module ReportHeaderMixin
6
+
7
+ # @return [Montague::Model::Header]
8
+ attr_accessor :header
9
+
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ module Montague
2
+ module Model
3
+ # Report HTTP response mixin
4
+ #
5
+ module ReportHTTPResponseMixin
6
+
7
+ # @return [HTTP::Response]
8
+ attr_accessor :http_response
9
+
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ module Montague
2
+ module Model
3
+ # Report publisher mixin
4
+ #
5
+ module ReportPublisherMixin
6
+
7
+ # @return [Montague::Model::Publisher, nil]
8
+ attr_accessor :publisher
9
+
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,18 @@
1
+ module Montague
2
+ module Model
3
+
4
+ # A structure.
5
+ #
6
+ class Structure
7
+
8
+ def data?
9
+ found = false
10
+ instance_variables.each do |i|
11
+ found = true if i
12
+ end
13
+ found
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,26 @@
1
+ module Montague
2
+ module Reporter
3
+ # Journal reporter
4
+ #
5
+ class Journal
6
+
7
+ def initialize(response)
8
+ @response = response
9
+ @header_extractor = Montague::XMLExtractor::Header.new response.to_s
10
+ @journal_extractor = Montague::XMLExtractor::Journal.new response.to_s
11
+ @publisher_extractor = Montague::XMLExtractor::Publisher.new response.to_s
12
+ end
13
+
14
+ # @return [Montague::Model::JournalReport]
15
+ def report
16
+ h = Montague::Model::JournalReport.new
17
+ h.http_response = @response
18
+ h.header = @header_extractor.model
19
+ h.journal = @journal_extractor.model
20
+ h.publisher = @publisher_extractor.model
21
+ h
22
+ end
23
+
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ module Montague
2
+ module Reporter
3
+ # Journals reporter
4
+ #
5
+ class Journals
6
+
7
+ def initialize(response)
8
+ @response = response
9
+ @header_extractor = Montague::XMLExtractor::Header.new response.to_s
10
+ @journal_extractor = Montague::XMLExtractor::Journal.new response.to_s
11
+ @publisher_extractor = Montague::XMLExtractor::Publisher.new response.to_s
12
+ end
13
+
14
+ # @return [Montague::Model::JournalsReport]
15
+ def report
16
+ h = Montague::Model::JournalsReport.new
17
+ h.http_response = @response
18
+ h.header = @header_extractor.model
19
+ h.journals = @journal_extractor.models
20
+ h.publisher = @publisher_extractor.model
21
+ h
22
+ end
23
+
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,24 @@
1
+ module Montague
2
+ module Reporter
3
+ # Publisher reporter
4
+ #
5
+ class Publisher
6
+
7
+ def initialize(response)
8
+ @response = response
9
+ @header_extractor = Montague::XMLExtractor::Header.new response.to_s
10
+ @publisher_extractor = Montague::XMLExtractor::Publisher.new response.to_s
11
+ end
12
+
13
+ # @return [Montague::Model::PublisherReport]
14
+ def report
15
+ h = Montague::Model::PublisherReport.new
16
+ h.http_response = @response
17
+ h.header = @header_extractor.model
18
+ h.publisher = @publisher_extractor.model
19
+ h
20
+ end
21
+
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ module Montague
2
+ module Reporter
3
+ # Publishers reporter
4
+ #
5
+ class Publishers
6
+
7
+ def initialize(response)
8
+ @response = response
9
+ @header_extractor = Montague::XMLExtractor::Header.new response.to_s
10
+ @publisher_extractor = Montague::XMLExtractor::Publisher.new response.to_s
11
+ end
12
+
13
+ # @return [Montague::Model::PublishersReport]
14
+ def report
15
+ h = Montague::Model::PublishersReport.new
16
+ h.http_response = @response
17
+ h.header = @header_extractor.model
18
+ h.publishers = @publisher_extractor.models
19
+ h
20
+ end
21
+
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,11 @@
1
+ require 'montague/reporter/journal'
2
+ require 'montague/reporter/journals'
3
+ require 'montague/reporter/publisher'
4
+ require 'montague/reporter/publishers'
5
+
6
+ module Montague
7
+ # Report
8
+ #
9
+ module Reporter
10
+ end
11
+ end