mstdn_ivory 0.1.0 → 0.5.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 +4 -4
- data/Gemfile.lock +4 -3
- data/README.md +8 -2
- data/lib/mstdn_ivory/api.rb +2 -0
- data/lib/mstdn_ivory/dot_accessable_hash.rb +13 -0
- data/lib/mstdn_ivory/parser.rb +31 -0
- data/lib/mstdn_ivory/stream.rb +44 -0
- data/lib/mstdn_ivory/version.rb +1 -1
- data/mstdn_ivory.gemspec +1 -0
- metadata +19 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f39c9b47d4ea6d461f3dec230984601fde7caea4b57c2293f98e832498a361d4
|
4
|
+
data.tar.gz: 000752fff10f87e86116f468dc554f52ed11b484b606744e9559ff4846e6f609
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1cdfef2c557e75f149a24e5fd1e43ced9a8d9730debd49eec3ce8b82e55f9e19745b88ce136aac806ee1ce25b439862448b8ac21a1d935150d0065662d1f18b6
|
7
|
+
data.tar.gz: 859e9c76848fde8c9ace057910f6bb6706b0bb258a8e3f3911176edcf2468165d68810ef0dfc10677c935ed6dd119f9636f6e43057129aef6152a632823009e7
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
mstdn_ivory (0.
|
4
|
+
mstdn_ivory (0.5.0)
|
5
|
+
addressable (~> 2.5)
|
5
6
|
http (~> 3.3)
|
6
7
|
oauth2 (~> 1.4)
|
7
8
|
oj (~> 3.5)
|
@@ -35,7 +36,7 @@ GEM
|
|
35
36
|
multi_json (~> 1.3)
|
36
37
|
multi_xml (~> 0.5)
|
37
38
|
rack (>= 1.2, < 3)
|
38
|
-
oj (3.
|
39
|
+
oj (3.6.0)
|
39
40
|
public_suffix (3.0.2)
|
40
41
|
rack (2.0.5)
|
41
42
|
rake (10.5.0)
|
@@ -66,4 +67,4 @@ DEPENDENCIES
|
|
66
67
|
rspec (~> 3.0)
|
67
68
|
|
68
69
|
BUNDLED WITH
|
69
|
-
1.16.
|
70
|
+
1.16.1
|
data/README.md
CHANGED
@@ -72,7 +72,13 @@ Post status:
|
|
72
72
|
client.post('/api/v1/statuses', {'status': 'status content'})
|
73
73
|
```
|
74
74
|
|
75
|
-
|
75
|
+
Streaming the home timeline([Read](https://github.com/tootsuite/documentation/blob/master/Using-the-API/Streaming-API.md) about streaming event and data):
|
76
|
+
```ruby
|
77
|
+
client.stream('/api/v1/streaming/user') do |event, data|
|
78
|
+
p event
|
79
|
+
p data
|
80
|
+
end
|
81
|
+
```
|
76
82
|
|
77
83
|
## Development
|
78
84
|
|
@@ -90,4 +96,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
90
96
|
|
91
97
|
## Code of Conduct
|
92
98
|
|
93
|
-
Everyone interacting in the MstdnIvory project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/
|
99
|
+
Everyone interacting in the MstdnIvory project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/sa2taka/mstdn_ivory/blob/master/CODE_OF_CONDUCT.md).
|
data/lib/mstdn_ivory/api.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
require 'mstdn_ivory/register'
|
2
2
|
require 'mstdn_ivory/request'
|
3
3
|
require 'mstdn_ivory/rest'
|
4
|
+
require 'mstdn_ivory/stream'
|
4
5
|
|
5
6
|
module MstdnIvory
|
6
7
|
module Api
|
7
8
|
include MstdnIvory::Register
|
8
9
|
include MstdnIvory::Request
|
9
10
|
include MstdnIvory::Rest
|
11
|
+
include MstdnIvory::Stream
|
10
12
|
end
|
11
13
|
end
|
@@ -7,6 +7,19 @@ module MstdnIvory
|
|
7
7
|
# dah.strkey # => "strvalue"
|
8
8
|
# dah.symkey # => :symkey
|
9
9
|
class DotAccessableHash < Hash
|
10
|
+
def merge(obj)
|
11
|
+
super unless obj.kind_of? Hash
|
12
|
+
_merge(obj)
|
13
|
+
end
|
14
|
+
|
15
|
+
def _merge(obj)
|
16
|
+
dah = DotAccessableHash.new
|
17
|
+
obj.each do |key, value|
|
18
|
+
dah[key] = value.kind_of?(Hash) ? _merge(value) : value
|
19
|
+
end
|
20
|
+
dah
|
21
|
+
end
|
22
|
+
|
10
23
|
def method_missing(name)
|
11
24
|
super unless self.has_key?(name) || self.has_key?(name.to_s)
|
12
25
|
self[name.to_s] || self[name]
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'http'
|
2
|
+
require 'oj'
|
3
|
+
|
4
|
+
module MstdnIvory
|
5
|
+
# This class parse stream data.
|
6
|
+
class Parser
|
7
|
+
def initialize(&block)
|
8
|
+
@parser = HTTP::Parser.new(self)
|
9
|
+
@buffer = {}
|
10
|
+
@block = block
|
11
|
+
end
|
12
|
+
|
13
|
+
def <<(body)
|
14
|
+
@parser << body
|
15
|
+
end
|
16
|
+
|
17
|
+
def on_body(data)
|
18
|
+
if (match_data = data.match(/event: ([a-z]+)/))
|
19
|
+
@buffer[:type] = match_data[1].to_sym
|
20
|
+
elsif (match_data = data.match(/data: (.+)/m))
|
21
|
+
@buffer[:data] = Oj.load(match_data[1])
|
22
|
+
|
23
|
+
if @buffer[:type]
|
24
|
+
@block.call(@buffer[:type], @buffer[:data])
|
25
|
+
else
|
26
|
+
@buffer = {}
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'addressable/uri'
|
2
|
+
require 'socket'
|
3
|
+
require 'http/request'
|
4
|
+
require 'openssl'
|
5
|
+
require 'mstdn_ivory/parser'
|
6
|
+
|
7
|
+
module MstdnIvory
|
8
|
+
module Stream
|
9
|
+
def stream(path, options = {}, &block)
|
10
|
+
stream_request(:get, path, options, &block)
|
11
|
+
end
|
12
|
+
|
13
|
+
def stream_request(method, path, params, &block)
|
14
|
+
uri = Addressable::URI.parse(self.base_url + path)
|
15
|
+
|
16
|
+
request = HTTP::Request.new(verb: method, uri: uri + '?' + to_url_params(params), headers: self.headers)
|
17
|
+
|
18
|
+
client = connect(request)
|
19
|
+
|
20
|
+
parser = MstdnIvory::Parser.new(&block)
|
21
|
+
|
22
|
+
while (body = client.readpartial(4096))
|
23
|
+
parser << body
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def connect(request)
|
28
|
+
client = TCPSocket.open(request.socket_host, request.socket_port)
|
29
|
+
|
30
|
+
ssl_client = OpenSSL::SSL::SSLSocket.new(client)
|
31
|
+
ssl_client.connect
|
32
|
+
|
33
|
+
request.stream(ssl_client)
|
34
|
+
|
35
|
+
ssl_client
|
36
|
+
end
|
37
|
+
|
38
|
+
def to_url_params(params)
|
39
|
+
work = Addressable::URI.new
|
40
|
+
work.query_values = params
|
41
|
+
work.query
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/mstdn_ivory/version.rb
CHANGED
data/mstdn_ivory.gemspec
CHANGED
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_development_dependency "rake", "~> 10.0"
|
26
26
|
spec.add_development_dependency "rspec", "~> 3.0"
|
27
27
|
|
28
|
+
spec.add_dependency 'addressable', '~> 2.5'
|
28
29
|
spec.add_dependency 'http', '~> 3.3'
|
29
30
|
spec.add_dependency 'oj', '~> 3.5'
|
30
31
|
spec.add_dependency 'oauth2', '~> 1.4'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mstdn_ivory
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- sa2taka
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-05-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: addressable
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.5'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.5'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: http
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -116,9 +130,11 @@ files:
|
|
116
130
|
- lib/mstdn_ivory/api.rb
|
117
131
|
- lib/mstdn_ivory/client.rb
|
118
132
|
- lib/mstdn_ivory/dot_accessable_hash.rb
|
133
|
+
- lib/mstdn_ivory/parser.rb
|
119
134
|
- lib/mstdn_ivory/register.rb
|
120
135
|
- lib/mstdn_ivory/request.rb
|
121
136
|
- lib/mstdn_ivory/rest.rb
|
137
|
+
- lib/mstdn_ivory/stream.rb
|
122
138
|
- lib/mstdn_ivory/version.rb
|
123
139
|
- mstdn_ivory.gemspec
|
124
140
|
homepage: https://github.com/sa2taka/mstdn_ivory
|
@@ -141,7 +157,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
141
157
|
version: '0'
|
142
158
|
requirements: []
|
143
159
|
rubyforge_project:
|
144
|
-
rubygems_version: 2.7.
|
160
|
+
rubygems_version: 2.7.3
|
145
161
|
signing_key:
|
146
162
|
specification_version: 4
|
147
163
|
summary: Ruby interface for Mastodon api.
|