bibsonomy 0.4.5 → 0.4.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 095e2d069a16a1e1f74a13e2d86e05f90e0a7ea4
4
- data.tar.gz: 04cd4ad56e5596f8198333cf4361a0c4e73054a0
3
+ metadata.gz: 60a51a2bb7d05aefff235013de9cd8cab94ca6c8
4
+ data.tar.gz: a89cbb97919dbefb6ceb9c08cc8b9892509c0b24
5
5
  SHA512:
6
- metadata.gz: 9a8120c2f359eafbcf34feb26b5a7e642b905ccdff1c88c60edf2107bae1ade05d8a2a24c66ab01b91a64ff735a6f97d9b244d47f34b3ed5c59d93d3a0379747
7
- data.tar.gz: 6f8de4d7c4e982b37e2d233a5d099717554435fba7ded75e9b9586e3ffdbf8c00e47df6e6af1bb624d471e88655ae2a48873ee8ce60863360abafc720a5c645c
6
+ metadata.gz: ce0a4005e5b141210c61fbc08a1a2961180c6e70b58cd3f68d3def639ffdf30361af41f944f13aa762e2f451ef803dff2100f23d3cae40fbb8ed8e9d2b26f420
7
+ data.tar.gz: dd70c37fddda3115fa62aaaddf383be4b0ec5201c3018417d6a73896f013e8ed82edf20f323b30e136338ab39a63ffe2b6664b3d32cd301b0f234d6322c6785c
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # BibSonomy
2
2
 
3
- BibSonomy client for Ruby
3
+ [BibSonomy](http://www.bibsonomy.org/) client for Ruby
4
4
 
5
5
  [![Gem Version](https://badge.fury.io/rb/bibsonomy.svg)](http://badge.fury.io/rb/bibsonomy)
6
6
  [![Build Status](https://travis-ci.org/rjoberon/bibsonomy-ruby.svg?branch=master)](https://travis-ci.org/rjoberon/bibsonomy-ruby)
@@ -49,6 +49,26 @@ require 'bibsonomy/csl'
49
49
  print BibSonomy::main(ARGV)
50
50
  ```
51
51
 
52
+ ## Testing
53
+
54
+ Get an API-Key from <http://www.bibsonomy.org/settings?selTab=1> and
55
+ then run the following commands:
56
+
57
+ ```shell
58
+ export BIBSONOMY_USER_NAME="yourusername"
59
+ export BIBSONOMY_API_KEY="yourapikey"
60
+ bundle exec rake test
61
+ ```
62
+
63
+ ## Supported API Calls
64
+
65
+ - `get_post`: [post details](https://bitbucket.org/bibsonomy/bibsonomy/wiki/documentation/api/methods/DetailsForPost)
66
+ - `get_posts_for_user`:
67
+ [posts for a user](https://bitbucket.org/bibsonomy/bibsonomy/wiki/documentation/api/methods/ListOfPostsForUser)
68
+ - `get_posts_for_group` : posts for a group (= posts of the group members)
69
+ - `get_document`: documents for post
70
+ - `get_document_preview`: preview image for a document
71
+
52
72
  ## Jekyll
53
73
 
54
74
  A [Jekyll](http://jekyllrb.com/) plugin:
@@ -115,7 +135,10 @@ bibsonomy_document_directory: pdf
115
135
  bibsonomy_style: springer-lecture-notes-in-computer-science
116
136
  ```
117
137
 
118
- For an example, have a look at [my publication list](http://www.kbs.uni-hannover.de/~jaeschke/publications.html).
138
+ For an example how to use the Jekyll plugin, have a look at
139
+ [the demo project](https://github.com/rjoberon/bibsonomy-jekyll-demo)
140
+ and for an example showing the output, have a look at
141
+ [my publication list](http://www.kbs.uni-hannover.de/~jaeschke/publications.html).
119
142
 
120
143
 
121
144
  ## Contributing
data/bibsonomy.gemspec CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.required_ruby_version = '~> 2.1'
21
+ spec.required_ruby_version = '>= 1.9'
22
22
 
23
23
  spec.add_development_dependency "bundler", "~> 1.7"
24
24
  spec.add_development_dependency "rake", "~> 10.0"
@@ -31,6 +31,8 @@ Gem::Specification.new do |spec|
31
31
  spec.add_dependency "faraday", "~> 0.9"
32
32
  spec.add_dependency "json", "~> 1.8"
33
33
  spec.add_dependency "citeproc", "~> 1.0"
34
+ spec.add_dependency "citeproc-ruby", "~> 1.0"
34
35
  spec.add_dependency "csl-styles", "~> 1.0"
36
+ spec.add_dependency "csl", "~> 1.2"
35
37
 
36
38
  end
data/lib/bibsonomy.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require_relative "bibsonomy/version"
2
2
  require_relative "bibsonomy/post"
3
3
  require_relative "bibsonomy/api"
4
+ require_relative "bibsonomy/csl"
4
5
 
5
6
  module BibSonomy
6
7
  # Your code goes here...
data/lib/bibsonomy/api.rb CHANGED
@@ -2,7 +2,6 @@
2
2
  require 'faraday'
3
3
  require 'json'
4
4
 
5
-
6
5
  # configuration options
7
6
  $API_URL = "https://www.bibsonomy.org/"
8
7
  $MAX_POSTS_PER_REQUEST = 20
@@ -20,6 +19,10 @@ $resource_types_bibtex = ['bibtex', 'pub', 'publication', 'publications', 'publ'
20
19
  # @todo getting more than 1000 posts
21
20
  #
22
21
  # @author Robert Jäschke
22
+ #
23
+ # Changes:
24
+ # 2017-05-30 (rja)
25
+ # - added get_posts_for_group
23
26
  #
24
27
  module BibSonomy
25
28
  class API
@@ -102,6 +105,37 @@ module BibSonomy
102
105
  return response.body
103
106
  end
104
107
 
108
+ #
109
+ # Get the posts of the users of a group, optionally filtered by tags.
110
+ #
111
+ # @param group_name [String] the name of the group
112
+ # @param resource_type [String] the type of the post. Currently supported are 'bookmark' and 'publication'.
113
+ # @param tags [Array<String>] the tags that all posts must contain (can be empty)
114
+ # @param start [Integer] number of first post to download
115
+ # @param endc [Integer] number of last post to download
116
+ # @return [Array<BibSonomy::Post>, String] the requested posts
117
+ def get_posts_for_group(group_name, resource_type, tags = nil, start = 0, endc = $MAX_POSTS_PER_REQUEST)
118
+ params = {
119
+ :format => @format,
120
+ :resourcetype => get_resource_type(resource_type),
121
+ :start => start,
122
+ :end => endc,
123
+ :group => group_name
124
+ }
125
+ # add tags, if requested
126
+ if tags != nil
127
+ params[:tags] = tags.join(" ")
128
+ end
129
+ response = @conn.get "/api/posts", params
130
+
131
+ if @parse
132
+ posts = JSON.parse(response.body)["posts"]["post"]
133
+ return posts.map { |attributes| Post.new(attributes) }
134
+ end
135
+ return response.body
136
+ end
137
+
138
+
105
139
  def get_document_href(user_name, intra_hash, file_name)
106
140
  return "/api/users/" + CGI.escape(user_name) + "/posts/" + CGI.escape(intra_hash) + "/documents/" + CGI.escape(file_name)
107
141
  end
@@ -127,11 +161,11 @@ module BibSonomy
127
161
  # @param user_name
128
162
  # @param intra_hash
129
163
  # @param file_name
130
- # @param size
164
+ # @param size [String] requested preview size (allowed values: SMALL, MEDIUM, LARGE)
131
165
  # @return the preview image and the content type `image/jpeg`
132
166
  def get_document_preview(user_name, intra_hash, file_name, size)
133
- response = get_document_href(user_name, intra_hash, file_name), { :preview => size }
134
- if response.status = 200
167
+ response = @conn.get get_document_href(user_name, intra_hash, file_name), { :preview => size }
168
+ if response.status == 200
135
169
  return [response.body, 'image/jpeg']
136
170
  end
137
171
  return nil, nil
data/lib/bibsonomy/csl.rb CHANGED
@@ -18,8 +18,12 @@ require 'bibsonomy'
18
18
  # - number of posts
19
19
  # - style
20
20
  # - directory
21
+ # - group
21
22
  #
22
23
  # Changes:
24
+ # 2017-01-19
25
+ # - added optional parameter group to control which posts are
26
+ # included based on their viewability for a specific group (not yet activated!)
23
27
  # 2015-02-24
24
28
  # - initial version
25
29
  #
@@ -29,6 +33,7 @@ require 'bibsonomy'
29
33
  # @todo add intra_hash, user_name, etc. to CSL (cf. https://bitbucket.org/bibsonomy/bibsonomy/issue/2411/)
30
34
  # @todo integrate AJAX abstract
31
35
  # @todo make all options available via command line
36
+ # @todo support filtering of posts by group (viewability)
32
37
  #
33
38
  # @author Robert Jäschke
34
39
 
@@ -68,6 +73,9 @@ module BibSonomy
68
73
  # ignored. (default: '_oa.pdf')
69
74
  attr_accessor :public_doc_postfix
70
75
 
76
+ # @return [String] which posts shall be included, based on the groups they are viewable for
77
+ attr_accessor :group
78
+
71
79
  #
72
80
  # Create a new BibSonomy instance.
73
81
  #
@@ -82,6 +90,7 @@ module BibSonomy
82
90
  @css_class = 'publications'
83
91
  @year_headings = true
84
92
  @public_doc_postfix = '_oa.pdf'
93
+ @group = 'public'
85
94
 
86
95
  # optional parts to be rendered (or not)
87
96
  @doi_link = true
@@ -109,6 +118,17 @@ module BibSonomy
109
118
  # to check for duplicate file names
110
119
  file_names = []
111
120
 
121
+ # filter posts by group
122
+ # 2017-05-30, rja, disabled until group information is returned by the API
123
+ # posts.delete_if do |v|
124
+ # if v["group"] == @group
125
+ # true
126
+ # else
127
+ # print("WARN: " + v["group"])
128
+ # false
129
+ # end
130
+ # end
131
+
112
132
  # sort posts by year
113
133
  sorted_keys = posts.keys.sort { |a,b| get_sort_posts(posts[b], posts[a]) }
114
134
 
@@ -190,7 +210,16 @@ module BibSonomy
190
210
  private
191
211
 
192
212
  def get_year(post)
193
- return post["issued"]["literal"]
213
+ issued = post["issued"]
214
+ # if the post contains only a "year" field, it is contained in
215
+ # the field "literal"
216
+ if issued["literal"]
217
+ return issued["literal"]
218
+ else
219
+ # otherwise, the date can be contained in the "raw" field
220
+ # TODO: extract the year ([12][0-9]{3}) from that field
221
+ return issued["raw"]
222
+ end
194
223
  end
195
224
 
196
225
  def get_sort_posts(a, b)
@@ -202,6 +231,8 @@ module BibSonomy
202
231
  if person_b.length == 0
203
232
  person_b = b["editor"]
204
233
  end
234
+ # we switch the order of person_b and person_a, to sort
235
+ # descending by year but ascending by person name
205
236
  return [get_year(a), a["type"], person_b[0]["family"]] <=> [get_year(b), b["type"], person_a[0]["family"]]
206
237
  end
207
238
 
@@ -275,6 +306,7 @@ module BibSonomy
275
306
  options.directory = nil
276
307
  options.tags = []
277
308
  options.style = "apa.csl"
309
+ options.group = "public"
278
310
  options.posts = 1000
279
311
 
280
312
  opt_parser = OptionParser.new do |opts|
@@ -289,6 +321,7 @@ module BibSonomy
289
321
  opts.on('-u', '--user USER', 'return posts for USER instead of user') { |v| options[:user] = v }
290
322
  opts.on('-t', '--tags TAG,TAG,...', Array, 'return posts with the given tags') { |v| options[:tags] = v }
291
323
  opts.on('-s', '--style STYLE', 'use CSL style STYLE for rendering') { |v| options[:style] = v }
324
+ opts.on('-g', '--group GROUP', 'include only posts viewable for GROUP') { |v| options[:group] = v }
292
325
  opts.on('-n', '--number-of-posts [COUNT]', Integer, 'number of posts to download') { |v| options[:posts] = v }
293
326
  opts.on('-d', '--directory DIR', 'target directory', ' (if not given, no documents are downloaed)') { |v| options[:directory] = v }
294
327
 
@@ -333,13 +366,14 @@ module BibSonomy
333
366
 
334
367
  # set defaults for optional arguments
335
368
  options[:user] = options[:user_name] unless options[:user]
336
-
369
+
337
370
  #
338
371
  # do the actual work
339
372
  #
340
373
  csl = BibSonomy::CSL.new(options[:user_name], options[:api_key])
341
374
  csl.pdf_dir = options[:directory]
342
375
  csl.style = options[:style]
376
+ csl.group = options[:group]
343
377
 
344
378
  html = csl.render(options[:user], options[:tags], options[:posts])
345
379
 
@@ -3,7 +3,7 @@
3
3
  module BibSonomy
4
4
  class Post
5
5
 
6
- attr_reader :user_name, :intra_hash, :title, :year, :entrytype, :booktitle, :journal, :url
6
+ attr_reader :user_name, :intra_hash, :groups, :title, :year, :entrytype, :booktitle, :journal, :url
7
7
 
8
8
  def initialize(post)
9
9
  publication = post["bibtex"]
@@ -15,6 +15,11 @@ module BibSonomy
15
15
  @booktitle = publication["booktitle"]
16
16
  @journal = publication["journal"]
17
17
  @url = publication["url"]
18
+ # extract group names
19
+ @groups = []
20
+ post["group"].each do |group|
21
+ @groups << group["name"]
22
+ end
18
23
  end
19
24
 
20
25
  end
@@ -1,3 +1,3 @@
1
1
  module BibSonomy
2
- VERSION = "0.4.5"
2
+ VERSION = "0.4.6"
3
3
  end
data/test/csl_test.rb ADDED
@@ -0,0 +1,21 @@
1
+ require './test/test_helper'
2
+
3
+ class BibSonomyCSLTest < Minitest::Test
4
+
5
+ def setup
6
+ @csl = BibSonomy::CSL.new(ENV['BIBSONOMY_USER_NAME'], ENV['BIBSONOMY_API_KEY'])
7
+ end
8
+
9
+ def test_exists
10
+ assert BibSonomy::CSL
11
+ end
12
+
13
+ def test_render
14
+ VCR.use_cassette('render') do
15
+ html = @csl.render("bibsonomy-ruby", [], 10)
16
+
17
+ assert_equal "<h3>2010</h3>", html[0..12]
18
+ assert_equal "</ul>", html[-6..-2]
19
+ end
20
+ end
21
+ end
data/test/post_test.rb CHANGED
@@ -11,8 +11,8 @@ class BibSonomyPostTest < Minitest::Test
11
11
  assert BibSonomy::API
12
12
  end
13
13
 
14
- def test_find_post
15
- VCR.use_cassette('one_post') do
14
+ def test_get_post
15
+ VCR.use_cassette('get_post') do
16
16
  post = @api.get_post("bibsonomy-ruby", "c9437d5ec56ba949f533aeec00f571e3")
17
17
  assert_equal BibSonomy::Post, post.class
18
18
 
@@ -24,8 +24,8 @@ class BibSonomyPostTest < Minitest::Test
24
24
  end
25
25
  end
26
26
 
27
- def test_find_posts
28
- VCR.use_cassette('all_posts') do
27
+ def test_get_posts_for_user
28
+ VCR.use_cassette('get_posts_for_user') do
29
29
  result = @api.get_posts_for_user("bibsonomy-ruby", "publication", ["test"], 0, 20)
30
30
 
31
31
  # Make sure we got all the posts
@@ -36,4 +36,39 @@ class BibSonomyPostTest < Minitest::Test
36
36
  assert result.first.kind_of?(BibSonomy::Post)
37
37
  end
38
38
  end
39
+
40
+ def test_get_posts_for_group
41
+ VCR.use_cassette('get_posts_for_group') do
42
+ result = @api.get_posts_for_group("iccs", "publication", ["test"], 0, 10)
43
+
44
+ # Make sure we got all the posts
45
+ assert_equal 2, result.length
46
+
47
+ # Make sure that the JSON was parsed
48
+ assert result.kind_of?(Array)
49
+ assert result.first.kind_of?(BibSonomy::Post)
50
+ end
51
+ end
52
+
53
+ def test_get_document_href
54
+ assert_equal "/api/users/bibsonomy-ruby/posts/c9437d5ec56ba949f533aeec00f571e3/documents/paper.pdf", @api.get_document_href("bibsonomy-ruby", "c9437d5ec56ba949f533aeec00f571e3", "paper.pdf")
55
+ end
56
+
57
+ def test_get_document
58
+ VCR.use_cassette('get_document') do
59
+ pdf, mimetype = @api.get_document("bibsonomy-ruby", "c9437d5ec56ba949f533aeec00f571e3", "test.pdf")
60
+ assert_equal "application/octet-stream;charset=UTF-8", mimetype
61
+ assert_equal "A test file\n", pdf
62
+ end
63
+ end
64
+
65
+
66
+ def test_get_document_preview
67
+ VCR.use_cassette('get_document_preview') do
68
+ jpeg, mimetype = @api.get_document_preview("bibsonomy-ruby", "c9437d5ec56ba949f533aeec00f571e3", "test.pdf", "SMALL")
69
+ assert_equal "image/jpeg", mimetype
70
+ assert_equal ["ffd8ffe00010"].pack('H*') + "JFIF", jpeg[0..9]
71
+ end
72
+ end
73
+
39
74
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bibsonomy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.5
4
+ version: 0.4.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Jäschke
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-26 00:00:00.000000000 Z
11
+ date: 2017-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -150,6 +150,20 @@ dependencies:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
152
  version: '1.0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: citeproc-ruby
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '1.0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '1.0'
153
167
  - !ruby/object:Gem::Dependency
154
168
  name: csl-styles
155
169
  requirement: !ruby/object:Gem::Requirement
@@ -164,6 +178,20 @@ dependencies:
164
178
  - - "~>"
165
179
  - !ruby/object:Gem::Version
166
180
  version: '1.0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: csl
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '1.2'
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '1.2'
167
195
  description: Enables calls to the BibSonomy REST API with Ruby.
168
196
  email:
169
197
  - jaeschke@l3s.de
@@ -183,6 +211,7 @@ files:
183
211
  - lib/bibsonomy/csl.rb
184
212
  - lib/bibsonomy/post.rb
185
213
  - lib/bibsonomy/version.rb
214
+ - test/csl_test.rb
186
215
  - test/post_test.rb
187
216
  - test/test_helper.rb
188
217
  homepage: https://github.com/rjoberon/bibsonomy-ruby
@@ -195,9 +224,9 @@ require_paths:
195
224
  - lib
196
225
  required_ruby_version: !ruby/object:Gem::Requirement
197
226
  requirements:
198
- - - "~>"
227
+ - - ">="
199
228
  - !ruby/object:Gem::Version
200
- version: '2.1'
229
+ version: '1.9'
201
230
  required_rubygems_version: !ruby/object:Gem::Requirement
202
231
  requirements:
203
232
  - - ">="
@@ -210,6 +239,6 @@ signing_key:
210
239
  specification_version: 4
211
240
  summary: Wraps the BibSonomy REST API.
212
241
  test_files:
242
+ - test/csl_test.rb
213
243
  - test/post_test.rb
214
244
  - test/test_helper.rb
215
- has_rdoc: