panoptes-client 0.2.6 → 0.2.7

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: e96fa7b8f5e137b8dc426c6f119587471fcc9189
4
- data.tar.gz: 41794d9a41090bf7fc1c3d87ef8e46ffadd5e0fe
3
+ metadata.gz: 8dc546adb36b049e8da428336c52673a0d9f983d
4
+ data.tar.gz: 85649db5d4650c8d9f92dffd5a23ab85ff8db1f4
5
5
  SHA512:
6
- metadata.gz: fa3d24cb731c90c486c313c46c33d0ae4f8ba833e995c6515bfd1035e9477cc358ae4002d7380d6bf2d7060bcd13b02706fda799982196f5cddda5d3524ebf40
7
- data.tar.gz: ccae89f05b4129fac56897aa0a823d9d23e4e2670629d7b24ad3dad3de9c709becfda07b2829eb46f3152a71a04e4c49ba2d16ec62b8c3836bfc979f1e88cf29
6
+ metadata.gz: 60f2d4972099ce2d3273a4b4da5cfe1941b6d0f62c86d7fa390cf8db304c7a23971886289f1fea5e9d0d0e93ab8723d2b7cd045dda2e652b5ea9c544bfa98663
7
+ data.tar.gz: ade3768a597807f6fff9fd9636ff892f6c21f86b45c792d83cf6d8310d0038a253b32a3fa09477490825e7ce89734d0495a1994849311429cadf5c88e490229b
@@ -1,3 +1,9 @@
1
+ # 0.2.7
2
+
3
+ * Add `TalkClient` to interact with the talk api.
4
+ * Add `client.discussions` to fetch talk discussions for a focus object.
5
+ * Refactored the client connection code for re-use between talk and panoptes clients.
6
+
1
7
  # 0.2.6
2
8
 
3
9
  * Add `client.workflow` to fetch a specific workflow.
@@ -1 +1,2 @@
1
1
  require 'panoptes/client'
2
+ require 'panoptes/talk_client'
@@ -1,8 +1,4 @@
1
- require 'faraday'
2
- require 'faraday_middleware'
3
- require 'faraday/panoptes'
4
-
5
- require "panoptes/client/version"
1
+ require "panoptes/concerns/common_client"
6
2
  require "panoptes/client/me"
7
3
  require "panoptes/client/projects"
8
4
  require "panoptes/client/subjects"
@@ -17,6 +13,7 @@ module Panoptes
17
13
  class ResourceNotFound < GenericError; end
18
14
  class ServerError < GenericError; end
19
15
 
16
+ include Panoptes::CommonClient
20
17
  include Panoptes::Client::Me
21
18
  include Panoptes::Client::Projects
22
19
  include Panoptes::Client::Subjects
@@ -24,29 +21,6 @@ module Panoptes
24
21
  include Panoptes::Client::UserGroups
25
22
  include Panoptes::Client::Workflows
26
23
 
27
- # A client is the main interface to the API.
28
- #
29
- # @param auth [Hash] Authentication details
30
- # * either nothing,
31
- # * a hash with +:token+ (an existing OAuth user token),
32
- # * or a hash with +:client_id+ and +:client_secret+ (a keypair for an OAuth Application).
33
- # @param url [String] Optional override for the API location to use. Defaults to the official production environment.
34
- def initialize(auth: {}, url: "https://panoptes.zooniverse.org")
35
- @conn = Faraday.new(url: url) do |faraday|
36
- case
37
- when auth[:token]
38
- faraday.request :panoptes_access_token, url: url, access_token: auth[:token]
39
- when auth[:client_id] && auth[:client_secret]
40
- faraday.request :panoptes_client_credentials, url: url, client_id: auth[:client_id], client_secret: auth[:client_secret]
41
- end
42
-
43
- faraday.request :panoptes_api_v1
44
- faraday.request :json
45
- faraday.response :json
46
- faraday.adapter Faraday.default_adapter
47
- end
48
- end
49
-
50
24
  def get(path, query = {})
51
25
  response = conn.get("/api" + path, query)
52
26
  handle_response(response)
@@ -0,0 +1,19 @@
1
+ module Panoptes
2
+ class Client
3
+ module Discussions
4
+ # Get list of talk discussions
5
+ #
6
+ # @param focus_id [Integer] filter by focussable id
7
+ # @param focus_type [String] filter by focussable type
8
+ # @return list of discussions
9
+ def discussions(focus_id:, focus_type:)
10
+ query = {}
11
+ query[:focus_id] = focus_id
12
+ query[:focus_type] = focus_type
13
+
14
+ response = get("/discussions", query)
15
+ response.fetch("discussions")
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,5 +1,5 @@
1
1
  module Panoptes
2
2
  class Client
3
- VERSION = "0.2.6"
3
+ VERSION = "0.2.7"
4
4
  end
5
5
  end
@@ -0,0 +1,77 @@
1
+ require 'faraday'
2
+ require 'faraday_middleware'
3
+ require 'faraday/panoptes'
4
+
5
+ require "panoptes/client/version"
6
+
7
+ module Panoptes
8
+ module CommonClient
9
+ PROD_API_URL = "https://panoptes.zooniverse.org".freeze
10
+ PROD_TALK_API_URL = "https://talk.zooniverse.org".freeze
11
+
12
+ # A client is the main interface to the API.
13
+ #
14
+ # @param auth [Hash] Authentication details
15
+ # * either nothing,
16
+ # * a hash with +:token+ (an existing OAuth user token),
17
+ # * or a hash with +:client_id+ and +:client_secret+ (a keypair for an OAuth Application).
18
+ # @param url [String] API location to use.
19
+ # @param auth_url [String] Auth API location to use.
20
+ def initialize(auth: {}, url: PROD_API_URL, auth_url: PROD_API_URL)
21
+ @conn = Faraday.new(url: url) do |faraday|
22
+ case
23
+ when auth[:token]
24
+ faraday.request :panoptes_access_token,
25
+ url: auth_url,
26
+ access_token: auth[:token]
27
+ when auth[:client_id] && auth[:client_secret]
28
+ faraday.request :panoptes_client_credentials,
29
+ url: auth_url,
30
+ client_id: auth[:client_id],
31
+ client_secret: auth[:client_secret]
32
+ end
33
+
34
+ faraday.request :panoptes_api_v1
35
+ faraday.request :json
36
+ faraday.response :json
37
+ faraday.adapter Faraday.default_adapter
38
+ end
39
+ end
40
+
41
+ # Get a path and perform automatic depagination
42
+ def paginate(path, query, resource: nil)
43
+ resource = path.split("/").last if resource.nil?
44
+ data = last_response = get(path, query)
45
+
46
+ while next_path = last_response["meta"][resource]["next_href"]
47
+ last_response = get(next_path, query)
48
+ if block_given?
49
+ yield data, last_response
50
+ else
51
+ data[resource].concat(last_response[resource]) if data[resource].is_a?(Array)
52
+ data["meta"][resource].merge!(last_response["meta"][resource])
53
+ data["links"].merge!(last_response["links"])
54
+ end
55
+ end
56
+
57
+ data
58
+ end
59
+
60
+ private
61
+
62
+ def conn
63
+ @conn
64
+ end
65
+
66
+ def handle_response(response)
67
+ case response.status
68
+ when 404
69
+ raise ResourceNotFound, status: response.status, body: response.body
70
+ when 400..600
71
+ raise ServerError.new(response.body)
72
+ else
73
+ response.body
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,25 @@
1
+ require "panoptes/concerns/common_client"
2
+ require "panoptes/client/discussions"
3
+
4
+ module Panoptes
5
+ class TalkClient
6
+ include Panoptes::CommonClient
7
+ include Panoptes::Client::Discussions
8
+
9
+ # @param auth [Hash] Authentication details
10
+ # * either nothing,
11
+ # * a hash with +:token+ (an existing OAuth user token),
12
+ # * or a hash with +:client_id+ and +:client_secret+ (a keypair for an OAuth Application).
13
+ # A client is the main interface to the talk v2 API.
14
+ # @param url [String] Optional override for the API location to use. Defaults to the official talk api production environment.
15
+ # @param auth_url [String] Optional override for the auth API location to use. Defaults to the official api production environment.
16
+ def initialize(auth: {}, url: PROD_TALK_API_URL, auth_url: PROD_API_URL)
17
+ super(auth: auth, url: url, auth_url: auth_url)
18
+ end
19
+
20
+ def get(path, query = {})
21
+ response = conn.get(path, query)
22
+ handle_response(response)
23
+ end
24
+ end
25
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: panoptes-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marten Veldthuis
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-06-15 00:00:00.000000000 Z
11
+ date: 2016-08-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -114,6 +114,7 @@ files:
114
114
  - bin/setup
115
115
  - lib/panoptes-client.rb
116
116
  - lib/panoptes/client.rb
117
+ - lib/panoptes/client/discussions.rb
117
118
  - lib/panoptes/client/me.rb
118
119
  - lib/panoptes/client/projects.rb
119
120
  - lib/panoptes/client/subject_sets.rb
@@ -121,6 +122,8 @@ files:
121
122
  - lib/panoptes/client/user_groups.rb
122
123
  - lib/panoptes/client/version.rb
123
124
  - lib/panoptes/client/workflows.rb
125
+ - lib/panoptes/concerns/common_client.rb
126
+ - lib/panoptes/talk_client.rb
124
127
  - panoptes-client.gemspec
125
128
  homepage: https://github.com/zooniverse/panoptes-client.rb
126
129
  licenses:
@@ -142,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
142
145
  version: '0'
143
146
  requirements: []
144
147
  rubyforge_project:
145
- rubygems_version: 2.5.2
148
+ rubygems_version: 2.5.1
146
149
  signing_key:
147
150
  specification_version: 4
148
151
  summary: API wrapper for https://panoptes.zooniverse.org