pnut 0.2.0 → 0.3.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
  SHA256:
3
- metadata.gz: eeeda2c2c3813e67bd8446308e0688fc7949fa15c2fabe79f36b37f96a7f9c93
4
- data.tar.gz: 2e5372cdd14dde4c2282993558e4e3c7aad38ed4d71e49ebf0a3190e2c1a3872
3
+ metadata.gz: df8ddb8b8afd3f309b107e75077557f702b9aac158517cd27a17fa68c183fd77
4
+ data.tar.gz: 53baea2c228eea35f677943f635a229d320ce9bdc5c9535bbada3f8f29c28131
5
5
  SHA512:
6
- metadata.gz: 4c985932c944530094910d7b143b49bbad0afe29c989ba36c66d53ea15baf7d9ddd692d761ad837c948111b561634f738e292f21dd9593497d52af32083bcee5
7
- data.tar.gz: 94472f946a9caaae19758e332e0308227a28be77b42194f940c4c11081410f4fc85dd7ca53d500c032abcd0e7c307fcfbf21b579b4b1999b7678596a695190d5
6
+ metadata.gz: d5a7ef1a212fe9fa8d6b2aa5b8d97787b5ae0cde08fca84786926a4ea93262a1577c2a9beb39c775d620812d034817c395bdcac7d1b93eae79ac66c2f080081b
7
+ data.tar.gz: df5548a115f2a0219815c4e015e16dcd6ffefe586776d15ecdc8af80a092a2ea78446e529667600548d062a256b0b14a2b4fc39360fadedfc329c7c508657e53
data/Gemfile.lock CHANGED
@@ -1,9 +1,11 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- pnut (0.1.2)
4
+ pnut (0.2.0)
5
5
  addressable (~> 2.5)
6
+ eventmachine (~> 1.2)
6
7
  faraday
8
+ faye-websocket (~> 0.10)
7
9
  webmock (~> 3.4)
8
10
 
9
11
  GEM
@@ -14,8 +16,12 @@ GEM
14
16
  coderay (1.1.2)
15
17
  crack (0.4.3)
16
18
  safe_yaml (~> 1.0.0)
19
+ eventmachine (1.2.7)
17
20
  faraday (0.15.2)
18
21
  multipart-post (>= 1.2, < 3)
22
+ faye-websocket (0.10.7)
23
+ eventmachine (>= 0.12.0)
24
+ websocket-driver (>= 0.5.1)
19
25
  hashdiff (0.3.7)
20
26
  method_source (0.9.0)
21
27
  minitest (5.11.3)
@@ -30,6 +36,9 @@ GEM
30
36
  addressable (>= 2.3.6)
31
37
  crack (>= 0.3.2)
32
38
  hashdiff
39
+ websocket-driver (0.7.0)
40
+ websocket-extensions (>= 0.1.0)
41
+ websocket-extensions (0.1.3)
33
42
 
34
43
  PLATFORMS
35
44
  ruby
data/README.md CHANGED
@@ -48,7 +48,7 @@ pnut = Pnut::Client.new
48
48
  pnut.request("/posts/streams/global")
49
49
  ```
50
50
 
51
- For POST, DELETE, etc. request, the method signature provides the following:
51
+ For POST, DELETE, etc. request, the method signature provides the following, with the data parameter defaulting to JSON:
52
52
 
53
53
  ```ruby
54
54
  pnut.request(
@@ -60,6 +60,48 @@ pnut.request(
60
60
  )
61
61
  ```
62
62
 
63
+ As a more thorough example, one can request an AppStream access token (where the endpoint expects form-data instead of JSON) and get the body of the response unparsed as a string like this:
64
+
65
+ ```ruby
66
+ pnut.request(
67
+ "/oauth/access_token",
68
+ json: false,
69
+ method: "POST",
70
+ raw_response: true,
71
+ data: {
72
+ client_id: "YOUR_CLIENT_ID",
73
+ client_secret: "YOUR_CLIENT_SECRET",
74
+ grant_type: "client_credentials"
75
+ }
76
+ )
77
+ ```
78
+
79
+ ## App Streams
80
+
81
+ We support a light abstraction over pnut's App Streams, standing on the shoulders of EventMachine and faye-websocket. Given you already have a valid app access token and created a stream with corresponding stream key, you can start it like this:
82
+
83
+ ```ruby
84
+ require "pnut/app_stream"
85
+
86
+ Pnut::AppStream.start(access_token: "…", stream_key: "…")
87
+ ```
88
+
89
+ Having every stream message printed to STDOUT is not that useful in itself, therefor you can provide a custom handler to react to them yourself:
90
+
91
+ ```ruby
92
+ require "pnut/app_stream"
93
+
94
+ def my_handler(msg)
95
+ p JSON.parse(msg)
96
+ end
97
+
98
+ Pnut::AppStream.start(
99
+ access_token: "…",
100
+ stream_key: "…",
101
+ handler: method(my_handler)
102
+ )
103
+ ```
104
+
63
105
  ## Development
64
106
 
65
107
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
data/bin/console CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require "bundler/setup"
4
4
  require "pnut"
5
+ require "pnut/app_stream"
5
6
 
6
7
  @pnut = Pnut::Client.new(authorization_token: ENV["PNUT_TOKEN"])
7
8
 
@@ -0,0 +1,37 @@
1
+ # encoding: utf-8
2
+
3
+ require "eventmachine"
4
+ require "faye/websocket"
5
+
6
+ module Pnut
7
+ module AppStream
8
+ extend self
9
+
10
+ def start(access_token: nil, stream_key: nil, handler: method(:puts))
11
+ EM.run do
12
+ ws = Faye::WebSocket::Client.new(
13
+ "wss://stream.pnut.io/v0/app/stream?access_token=#{access_token}&key=#{stream_key}"
14
+ )
15
+
16
+ EM.add_periodic_timer 45 do
17
+ ws.ping "ping"
18
+ end
19
+
20
+ ws.on :open do |event|
21
+ p [:open]
22
+ ws.send("Hello, pnut!")
23
+ end
24
+
25
+ ws.on :message do |event|
26
+ handler.call(event.data)
27
+ end
28
+
29
+ ws.on :close do |event|
30
+ p [:close, event.code, event.reason]
31
+
32
+ ws = nil
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
data/lib/pnut/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pnut
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
data/pnut.gemspec CHANGED
@@ -25,6 +25,8 @@ Gem::Specification.new do |spec|
25
25
  spec.add_dependency "faraday"
26
26
  spec.add_dependency "webmock", "~> 3.4"
27
27
  spec.add_dependency "addressable", "~> 2.5"
28
+ spec.add_dependency "eventmachine", "~> 1.2"
29
+ spec.add_dependency "faye-websocket", "~> 0.10"
28
30
 
29
31
  spec.add_development_dependency "bundler", "~> 1.16"
30
32
  spec.add_development_dependency "rake", "~> 10.0"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pnut
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kai Wood
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-08-15 00:00:00.000000000 Z
11
+ date: 2018-08-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -52,6 +52,34 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '2.5'
55
+ - !ruby/object:Gem::Dependency
56
+ name: eventmachine
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.2'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.2'
69
+ - !ruby/object:Gem::Dependency
70
+ name: faye-websocket
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.10'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.10'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: bundler
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -125,6 +153,7 @@ files:
125
153
  - bin/console
126
154
  - bin/setup
127
155
  - lib/pnut.rb
156
+ - lib/pnut/app_stream.rb
128
157
  - lib/pnut/posts.rb
129
158
  - lib/pnut/version.rb
130
159
  - pnut.gemspec