research_metadata_announcement 0.1.0 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9cc9974c6b361bb579f8454ffcf2602d78a62746
4
- data.tar.gz: 33da4d070192919b91c45317d7a026f6c8f19f20
3
+ metadata.gz: 2474614693454017d76644d6a463da347253fa8c
4
+ data.tar.gz: 7fe0aba78ef40f5bc3db8c2b5a2f406ec2db7ab5
5
5
  SHA512:
6
- metadata.gz: 5db2978940ff75facb1fba4cf2d53f9a3abd462c3131b78cb1c518bbf77335f61116f7d993c213af663c7e7598c4baa4292fa8bfee4f4d2d9fbf4bb00e9142f0
7
- data.tar.gz: bd79b981ed25b340755a255f609789415c695afbdea235d1e75cb9f9da6650ee39204e235273d0053e4fe6de9a7504501c5830655adecc59128bf4577c088875
6
+ metadata.gz: 247bdcac312ab4ef37ede3db3f83bccb05fa00424ddcb92cca51d51fb09cd1b7fb46ed987c81e153822ca1ed3161f60732dcb79280fbfd5fdc32e29362af5a31
7
+ data.tar.gz: ff3e0ab75eeb45c2cb744476f0cc5953c723d116a1cbd68dee4ecc690eee3a9d371927d01ac9627ae9f929848a4acdc560a7dc281155e95ae9e434c9f30164c1
data/CHANGELOG.md CHANGED
@@ -4,6 +4,10 @@ This project adheres to [Semantic Versioning](http://semver.org/).
4
4
 
5
5
  ## Unreleased
6
6
 
7
+ ## 0.2.0 - 2017-09-29
8
+ ### Added
9
+ - Publication.
10
+
7
11
  ## 0.1.0 - 2017-09-26
8
12
  ### Added
9
13
  - Working product supports datasets.
@@ -2,6 +2,7 @@ require 'puree'
2
2
 
3
3
  require 'research_metadata_announcement/transformer/base'
4
4
  require 'research_metadata_announcement/transformer/dataset'
5
+ require 'research_metadata_announcement/transformer/publication'
5
6
  require 'research_metadata_announcement/version'
6
7
 
7
8
  # Metadata extraction from the Pure Research Information System and
@@ -26,12 +26,67 @@ module ResearchMetadataAnnouncement
26
26
  end
27
27
  end
28
28
 
29
+ # Title followed by uri format
30
+ #
31
+ # @param max_length [Fixnum]
32
+ # @return [String, nil] Announcement returned if the metadata is available and the announcement length does not exceed the max_length argument.
33
+ def title_uri(max_length: nil)
34
+ title_formats format: :title_uri_format,
35
+ max_length: max_length
36
+ end
37
+
38
+ # Uri followed by title format
39
+ #
40
+ # @see #title_uri
41
+ def uri_title(max_length: nil)
42
+ title_formats format: :uri_title_format,
43
+ max_length: max_length
44
+ end
45
+
46
+ # Keywords followed by uri format
47
+ #
48
+ # @param max_length [Fixnum] Maximum length of announcement.
49
+ # @param max_descriptors [Fixnum] Maximum number of descriptors (common name for keywords, tags, hashtags).
50
+ # @return [String, nil] Announcement returned if the metadata is available and the announcement length does not exceed the max_length argument.
51
+ def keywords_uri(max_length: nil, max_descriptors: 2)
52
+ descriptors_formats format: :keywords_uri_format,
53
+ max_length: max_length,
54
+ max_descriptors: max_descriptors
55
+ end
56
+
57
+ # Uri followed by keywords format
58
+ #
59
+ # @see #keywords_uri
60
+ def uri_keywords(max_length: nil, max_descriptors: 2)
61
+ descriptors_formats format: :uri_keywords_format,
62
+ max_length: max_length,
63
+ max_descriptors: max_descriptors
64
+ end
65
+
66
+ # Hashtags followed by uri format
67
+ #
68
+ # @see #keywords_uri
69
+ def hashtags_uri(max_length: nil, max_descriptors: 2)
70
+ descriptors_formats format: :hashtags_uri_format,
71
+ max_length: max_length,
72
+ max_descriptors: max_descriptors
73
+ end
74
+
75
+ # Uri followed by hashtags format
76
+ #
77
+ # @see #keywords_uri
78
+ def uri_hashtags(max_length: nil, max_descriptors: 2)
79
+ descriptors_formats format: :uri_hashtags_format,
80
+ max_length: max_length,
81
+ max_descriptors: max_descriptors
82
+ end
83
+
29
84
  private
30
85
 
31
86
  def append_sentence(str, str_to_append)
32
- if str_to_append && str_to_append.size > 0
87
+ if str_to_append && !str_to_append.empty?
33
88
  if str
34
- if str.size > 0
89
+ if !str.empty?
35
90
  "#{str}. #{str_to_append}."
36
91
  else
37
92
  "#{str_to_append}."
@@ -43,13 +98,117 @@ module ResearchMetadataAnnouncement
43
98
  end
44
99
 
45
100
  def strip_uri_scheme(uri)
46
- uri.sub /^.+\/\//, ''
101
+ uri.sub %r{^.+//}, ''
47
102
  end
48
103
 
49
104
  def length_constrained?(max_length)
50
105
  max_length && max_length > 0
51
106
  end
52
107
 
108
+ def title_formats(format:, max_length:)
109
+ return nil unless @resource
110
+ uri = prepare_uri
111
+ return nil unless uri
112
+ title = @resource.title
113
+ build_title_formats(format: format,
114
+ uri: uri,
115
+ title: title,
116
+ max_length: max_length)
117
+ end
118
+
119
+ def descriptors_formats(format:, max_length:, max_descriptors:)
120
+ return nil unless @resource
121
+ uri = prepare_uri
122
+ return nil unless uri
123
+ keywords = @resource.keywords
124
+ return nil if keywords.empty?
125
+ build_descriptors_formats(format: format,
126
+ keywords: keywords,
127
+ uri: uri,
128
+ max_length: max_length,
129
+ max_descriptors: max_descriptors)
130
+ end
131
+
132
+ def validate_string_length(str, max_length)
133
+ if length_constrained? max_length
134
+ str if str.size <= max_length
135
+ else
136
+ str
137
+ end
138
+ end
139
+
140
+ def build_descriptors_formats(format:, keywords:, uri:, max_length:, max_descriptors:)
141
+ case format
142
+ when :keywords_uri_format
143
+ str = append_sentence(build_keywords(keywords, max_descriptors), uri)
144
+ when :uri_keywords_format
145
+ str = append_sentence(uri, build_keywords(keywords, max_descriptors))
146
+ when :hashtags_uri_format
147
+ str = append_sentence(build_hashtags(keywords, max_descriptors), uri)
148
+ when :uri_hashtags_format
149
+ str = append_sentence(uri, build_hashtags(keywords, max_descriptors))
150
+ end
151
+ validate_string_length str, max_length
152
+ end
153
+
154
+ def build_title_format(format:, title:, uri:)
155
+ case format
156
+ when :title_uri_format
157
+ append_sentence title, uri
158
+ when :uri_title_format
159
+ append_sentence uri, title
160
+ end
161
+ end
162
+
163
+ def build_title_format_truncated(format:, title:, uri:, available_chars:)
164
+ truncated_title = title[0..available_chars-3].strip + '...'
165
+ case format
166
+ when :title_uri_format
167
+ "#{truncated_title} #{uri}."
168
+ when :uri_title_format
169
+ "#{uri}. #{truncated_title}"
170
+ end
171
+ end
172
+
173
+ def build_title_formats(format:, title:, uri:, max_length:)
174
+ if length_constrained? max_length
175
+ available_chars = max_length - (uri.size + 3)
176
+ available_chars = 0 if available_chars < 0
177
+ if title.size <= available_chars
178
+ return build_title_format(format: format,
179
+ title: title,
180
+ uri: uri)
181
+ end
182
+ if available_chars - 3 > 0
183
+ return build_title_format_truncated(format: format,
184
+ title: title,
185
+ uri: uri,
186
+ available_chars: available_chars)
187
+ end
188
+ else
189
+ build_title_format(format: format,
190
+ title: title,
191
+ uri: uri)
192
+ end
193
+ end
194
+
195
+ def build_keywords(keywords, max)
196
+ keywords[0..max - 1].join ', '
197
+ end
198
+
199
+ def build_hashtags(keywords, max)
200
+ a = keywords[0..max - 1].map(&:downcase)
201
+ a = a.map { |i| i.gsub(/[^a-zA-Z0-9]/, '') }
202
+ a = a.map { |i| i.gsub(/\s+/, '') }
203
+ a = a.map { |i| "##{i}" }
204
+ a.join ' '
205
+ end
206
+
207
+ def make_extractor(resource_type)
208
+ resource_class = "Puree::Extractor::#{resource_type.capitalize}"
209
+ @resource_extractor = Object.const_get(resource_class).new @config
210
+ end
211
+
53
212
  end
54
213
  end
55
214
 
@@ -13,206 +13,13 @@ module ResearchMetadataAnnouncement
13
13
  # @option config [String] :password The password of the Pure host account.
14
14
  def initialize(config)
15
15
  super
16
- @resource_extractor = Puree::Extractor::Dataset.new config
17
- end
18
-
19
- # Keywords followed by uri format
20
- #
21
- # @param max_length [Fixnum] Maximum length of announcement.
22
- # @param max_descriptors [Fixnum] Maximum number of descriptors (common name for keywords, tags, hashtags).
23
- # @return [String, nil] Announcement returned if the metadata is available and the announcement length does not exceed the max_length argument.
24
- def keywords_uri(max_length: nil, max_descriptors: 2)
25
- return nil if !@resource
26
- keywords = @resource.keywords
27
- uri = prepare_uri
28
- if uri
29
- return build_keywords_uri(keywords: keywords,
30
- uri: uri,
31
- max_length: max_length,
32
- max_descriptors: max_descriptors)
33
- end
34
- nil
35
- end
36
-
37
- # Uri followed by keywords format
38
- #
39
- # @see #keywords_uri
40
- def uri_keywords(max_length: nil, max_descriptors: 2)
41
- return nil if !@resource
42
- keywords = @resource.keywords
43
- uri = prepare_uri
44
- if uri
45
- return build_uri_keywords(keywords: keywords,
46
- uri: uri,
47
- max_length: max_length,
48
- max_descriptors: max_descriptors)
49
- end
50
- nil
51
- end
52
-
53
- # Uri followed by hashtags format
54
- #
55
- # @see #keywords_uri
56
- def uri_hashtags(max_length: nil, max_descriptors: 2)
57
- return nil if !@resource
58
- keywords = @resource.keywords
59
- uri = prepare_uri
60
- if uri
61
- return build_uri_hashtags(keywords: keywords,
62
- uri: uri,
63
- max_length: max_length,
64
- max_descriptors: max_descriptors)
65
- end
66
- nil
67
- end
68
-
69
- # Hashtags followed by uri format
70
- #
71
- # @see #keywords_uri
72
- def hashtags_uri(max_length: nil, max_descriptors: 2)
73
- return nil if !@resource
74
- keywords = @resource.keywords
75
- uri = prepare_uri
76
- if uri
77
- return build_hashtags_uri(keywords: keywords,
78
- uri: uri,
79
- max_length: max_length,
80
- max_descriptors: max_descriptors)
81
- end
82
- nil
83
- end
84
-
85
- # Title followed by uri format
86
- #
87
- # @param max_length [Fixnum]
88
- # @return [String, nil] Announcement returned if the metadata is available and the announcement length does not exceed the max_length argument.
89
- def title_uri(max_length: nil)
90
- return nil if !@resource
91
- title = @resource.title
92
- uri = prepare_uri
93
- if uri
94
- return build_title_uri(uri: uri, title: title, max_length: max_length)
95
- end
96
- nil
97
- end
98
-
99
- # Uri followed by title format
100
- #
101
- # @see #title_uri
102
- def uri_title(max_length: nil)
103
- return nil if !@resource
104
- title = @resource.title
105
- uri = prepare_uri
106
- if uri
107
- return build_uri_title(uri: uri, title: title, max_length: max_length)
108
- end
109
- nil
16
+ make_extractor :dataset
110
17
  end
111
18
 
112
19
  private
113
20
 
114
21
  def prepare_uri
115
- if @resource && @resource.doi
116
- return strip_uri_scheme @resource.doi
117
- end
118
- nil
119
- end
120
-
121
- def build_keywords_uri(keywords:, uri:, max_length:, max_descriptors:)
122
- if !keywords.empty?
123
- str = append_sentence(build_keywords(keywords, max_descriptors), uri)
124
- if length_constrained? max_length
125
- return str if str.size <= max_length
126
- else
127
- return str
128
- end
129
- end
130
- nil
131
- end
132
-
133
- def build_uri_keywords(keywords:, uri:, max_length:, max_descriptors:)
134
- if !keywords.empty?
135
- str = append_sentence(uri, build_keywords(keywords, max_descriptors))
136
- if length_constrained? max_length
137
- return str if str.size <= max_length
138
- else
139
- return str
140
- end
141
- end
142
- nil
143
- end
144
-
145
- def build_uri_hashtags(keywords:, uri:, max_length:, max_descriptors:)
146
- if !keywords.empty?
147
- str = append_sentence(uri, build_hashtags(keywords, max_descriptors))
148
- if length_constrained? max_length
149
- return str if str.size <= max_length
150
- else
151
- return str
152
- end
153
- end
154
- nil
155
- end
156
-
157
- def build_hashtags_uri(keywords:, uri:, max_length:, max_descriptors:)
158
- if !keywords.empty?
159
- str = append_sentence(build_hashtags(keywords, max_descriptors), uri)
160
- if length_constrained? max_length
161
- return str if str.size <= max_length
162
- else
163
- return str
164
- end
165
- end
166
- nil
167
- end
168
-
169
- def build_title_uri(title:, uri:, max_length:)
170
- if length_constrained? max_length
171
- available_chars = max_length - (uri.size + 3)
172
- available_chars = 0 if available_chars < 0
173
- if title.size <= available_chars
174
- return append_sentence title, uri
175
- end
176
- if available_chars-3 > 0
177
- truncated_title = title[0..available_chars-3].strip + '...'
178
- return "#{truncated_title} #{uri}."
179
- end
180
- else
181
- return append_sentence title, uri
182
- end
183
- end
184
-
185
- def build_uri_title(uri:, title:, max_length:)
186
- if length_constrained? max_length
187
- available_chars = max_length - (uri.size + 3)
188
- available_chars = 0 if available_chars < 0
189
- if title.size <= available_chars
190
- return append_sentence uri, title
191
- end
192
- if available_chars-3 > 0
193
- truncated_title = title[0..available_chars-3].strip + '...'
194
- return "#{uri}. #{truncated_title}"
195
- end
196
- else
197
- return append_sentence uri, title
198
- end
199
- end
200
-
201
- def build_keywords(keywords, max)
202
- return keywords[0..max-1].join ', ' if keywords
203
- nil
204
- end
205
-
206
- def build_hashtags(keywords, max)
207
- a = keywords[0..max-1].map { |i| i.downcase }
208
- a = a.map { |i| i.gsub(/[^a-zA-Z0-9]/,'') }
209
- a = a.map { |i| i.gsub(/\s+/, '') }
210
- a = a.map { |i| "##{i}" }
211
- if a.size > 0
212
- return a.join ' '
213
- else
214
- return nil
215
- end
22
+ strip_uri_scheme @resource.doi if @resource && @resource.doi
216
23
  end
217
24
 
218
25
  end
@@ -0,0 +1,29 @@
1
+ module ResearchMetadataAnnouncement
2
+
3
+ module Transformer
4
+
5
+ # Extracts publication metadata from the Pure Research Information System and
6
+ # converts it into an announcement
7
+ #
8
+ class Publication < ResearchMetadataAnnouncement::Transformer::Base
9
+
10
+ # @param config [Hash]
11
+ # @option config [String] :url The URL of the Pure host.
12
+ # @option config [String] :username The username of the Pure host account.
13
+ # @option config [String] :password The password of the Pure host account.
14
+ def initialize(config)
15
+ super
16
+ make_extractor :publication
17
+ end
18
+
19
+ private
20
+
21
+ def prepare_uri
22
+ strip_uri_scheme @resource.dois[0] if @resource && @resource.dois[0]
23
+ end
24
+
25
+ end
26
+
27
+ end
28
+
29
+ end
@@ -1,5 +1,5 @@
1
1
  module ResearchMetadataAnnouncement
2
2
  # Semantic version number
3
3
  #
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: research_metadata_announcement
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adrian Albin-Clark
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-26 00:00:00.000000000 Z
11
+ date: 2017-09-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: puree
@@ -53,6 +53,7 @@ files:
53
53
  - lib/research_metadata_announcement.rb
54
54
  - lib/research_metadata_announcement/transformer/base.rb
55
55
  - lib/research_metadata_announcement/transformer/dataset.rb
56
+ - lib/research_metadata_announcement/transformer/publication.rb
56
57
  - lib/research_metadata_announcement/transformer/transformer.rb
57
58
  - lib/research_metadata_announcement/version.rb
58
59
  - research_metadata_announcement.gemspec