the86-client 1.0.0 → 1.1.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.
- data/README.md +20 -0
- data/lib/the86-client.rb +1 -0
- data/lib/the86-client/like.rb +11 -0
- data/lib/the86-client/post.rb +1 -0
- data/lib/the86-client/resource_collection.rb +6 -3
- data/lib/the86-client/version.rb +1 -1
- data/spec/conversations_spec.rb +28 -0
- data/spec/likes_spec.rb +42 -0
- data/spec/post_spec.rb +14 -0
- metadata +5 -2
data/README.md
CHANGED
@@ -71,6 +71,26 @@ conversation.posts.create(
|
|
71
71
|
content: "What are you guys talking about?",
|
72
72
|
oauth_token: user.access_tokens.first.token
|
73
73
|
)
|
74
|
+
|
75
|
+
# List conversations:
|
76
|
+
conversations = The86::Client.site("example").conversations
|
77
|
+
second_page = conversations.more
|
78
|
+
third_page = second_page.more
|
79
|
+
third_page.each { |conversation| p conversation }
|
80
|
+
|
81
|
+
# Check for updates:
|
82
|
+
site = The86::Client.site("example")
|
83
|
+
conversations = site.conversations.with_parameters(
|
84
|
+
posts_since: time.iso8601,
|
85
|
+
without_user: 64,
|
86
|
+
)
|
87
|
+
|
88
|
+
# Like!
|
89
|
+
post = site.conversations.first.posts.first
|
90
|
+
post.likes.create(oauth_token: oauth_token)
|
91
|
+
likes = post.load.likes
|
92
|
+
puts "Liked by #{likes.count} people"
|
93
|
+
likes.each { |like| puts "* #{like.user.name}" }
|
74
94
|
```
|
75
95
|
|
76
96
|
|
data/lib/the86-client.rb
CHANGED
data/lib/the86-client/post.rb
CHANGED
@@ -27,7 +27,7 @@ module The86::Client
|
|
27
27
|
build(attributes).tap(&:save)
|
28
28
|
end
|
29
29
|
|
30
|
-
|
30
|
+
attr_accessor :parameters
|
31
31
|
|
32
32
|
def with_parameters(parameters)
|
33
33
|
self.class.new(
|
@@ -63,12 +63,15 @@ module The86::Client
|
|
63
63
|
# Link: <http://example.org/api/v1/sites/a/conversations?bumped_before=time>; rel="next"
|
64
64
|
def more
|
65
65
|
if more?
|
66
|
+
url = Addressable::URI.parse(http_response.links[:next])
|
66
67
|
self.class.new(
|
67
68
|
@connection,
|
68
|
-
|
69
|
+
url.path,
|
69
70
|
@klass,
|
70
71
|
@parent
|
71
|
-
)
|
72
|
+
).tap do |collection|
|
73
|
+
collection.parameters = url.query_values
|
74
|
+
end
|
72
75
|
else
|
73
76
|
raise PaginationError, %{Collection has no 'Link: <url>; rel="next"' header}
|
74
77
|
end
|
data/lib/the86-client/version.rb
CHANGED
data/spec/conversations_spec.rb
CHANGED
@@ -58,6 +58,34 @@ module The86::Client
|
|
58
58
|
page1.map(&:id).must_equal([1,2])
|
59
59
|
page2.map(&:id).must_equal([3,4])
|
60
60
|
end
|
61
|
+
|
62
|
+
it "allows pagination parameters to be fetched and set" do
|
63
|
+
url = "#{conversations_url}?limit=2"
|
64
|
+
next_url = "#{url}&bumped_before=timestamp"
|
65
|
+
expect_get_conversations(
|
66
|
+
url: basic_auth_url(url),
|
67
|
+
response_body: [{id: 1}, {id: 2}],
|
68
|
+
response_headers: {"Link" => %{<#{next_url}>; rel="next"}}
|
69
|
+
)
|
70
|
+
|
71
|
+
expect_get_conversations(
|
72
|
+
url: basic_auth_url(next_url),
|
73
|
+
response_body: [{id: 3}, {id: 4}],
|
74
|
+
)
|
75
|
+
|
76
|
+
# Emulate parameters being serialized & stored for a later request.
|
77
|
+
page1 = site.conversations.with_parameters(limit: 2)
|
78
|
+
parameters = JSON.parse(JSON.generate(page1.more.parameters))
|
79
|
+
page2 = site.conversations.with_parameters(parameters)
|
80
|
+
|
81
|
+
parameters.must_equal("limit" => "2", "bumped_before" => "timestamp")
|
82
|
+
|
83
|
+
page1.more?.must_equal true
|
84
|
+
page2.more?.must_equal false
|
85
|
+
|
86
|
+
page1.map(&:id).must_equal([1,2])
|
87
|
+
page2.map(&:id).must_equal([3,4])
|
88
|
+
end
|
61
89
|
end
|
62
90
|
|
63
91
|
describe "creating conversations" do
|
data/spec/likes_spec.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
require_relative "spec_helper"
|
2
|
+
|
3
|
+
module The86::Client
|
4
|
+
|
5
|
+
describe Like do
|
6
|
+
|
7
|
+
let(:site) { The86::Client.site("test") }
|
8
|
+
let(:site_url) { "https://example.org/api/v1/sites/test" }
|
9
|
+
let(:post) { site.conversations.build(id: 1).posts.build(id: 2) }
|
10
|
+
let(:likes_url) { "#{site_url}/conversations/1/posts/2/likes" }
|
11
|
+
|
12
|
+
it "POSTs a new Like" do
|
13
|
+
expect_request(
|
14
|
+
url: likes_url,
|
15
|
+
method: :post,
|
16
|
+
status: 201,
|
17
|
+
request_body: {},
|
18
|
+
response_body: {user: {id: 1, name: "John Citizen"}},
|
19
|
+
request_headers: {"Authorization" => "Bearer secret"},
|
20
|
+
)
|
21
|
+
|
22
|
+
post.likes.create(oauth_token: "secret")
|
23
|
+
end
|
24
|
+
|
25
|
+
it "GETs Likes" do
|
26
|
+
expect_request(
|
27
|
+
url: likes_url.sub("//", "//user:pass@"),
|
28
|
+
method: :get,
|
29
|
+
status: 200,
|
30
|
+
response_body: [
|
31
|
+
{user: {name: "John"}},
|
32
|
+
{user: {name: "Alice"}},
|
33
|
+
],
|
34
|
+
)
|
35
|
+
|
36
|
+
post.likes.map { |l| l.user.name }.must_equal %w{John Alice}
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
end
|
data/spec/post_spec.rb
CHANGED
@@ -21,5 +21,19 @@ module The86::Client
|
|
21
21
|
post.user.name.must_equal "John Citizen"
|
22
22
|
end
|
23
23
|
end
|
24
|
+
|
25
|
+
describe "#links" do
|
26
|
+
let(:post) do
|
27
|
+
Post.new(likes: [
|
28
|
+
{user: {id: 8, name: "John Citizen"}},
|
29
|
+
{user: {id: 2, name: "Sandman Slim"}}
|
30
|
+
])
|
31
|
+
end
|
32
|
+
it "returns two The86::Client::Like instances" do
|
33
|
+
likes = post.likes
|
34
|
+
likes.count.must_equal 2
|
35
|
+
likes.first.user.name.must_equal "John Citizen"
|
36
|
+
end
|
37
|
+
end
|
24
38
|
end
|
25
39
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: the86-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-09-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: faraday
|
@@ -223,6 +223,7 @@ files:
|
|
223
223
|
- lib/the86-client/connection.rb
|
224
224
|
- lib/the86-client/conversation.rb
|
225
225
|
- lib/the86-client/errors.rb
|
226
|
+
- lib/the86-client/like.rb
|
226
227
|
- lib/the86-client/oauth_bearer_authorization.rb
|
227
228
|
- lib/the86-client/post.rb
|
228
229
|
- lib/the86-client/resource.rb
|
@@ -232,6 +233,7 @@ files:
|
|
232
233
|
- lib/the86-client/user.rb
|
233
234
|
- lib/the86-client/version.rb
|
234
235
|
- spec/conversations_spec.rb
|
236
|
+
- spec/likes_spec.rb
|
235
237
|
- spec/oauth_bearer_authorization_spec.rb
|
236
238
|
- spec/post_spec.rb
|
237
239
|
- spec/posts_spec.rb
|
@@ -268,6 +270,7 @@ specification_version: 3
|
|
268
270
|
summary: Exposes The 86 conversation API server as an object model.
|
269
271
|
test_files:
|
270
272
|
- spec/conversations_spec.rb
|
273
|
+
- spec/likes_spec.rb
|
271
274
|
- spec/oauth_bearer_authorization_spec.rb
|
272
275
|
- spec/post_spec.rb
|
273
276
|
- spec/posts_spec.rb
|