mstdn_ivory 0.1.0 → 0.5.0

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
  SHA256:
3
- metadata.gz: f0cf8aed270448aa92b0e04f2547efbe3e6b104e56aeb0aead7a0c8bcfa77fc1
4
- data.tar.gz: c19de6c6a50b95cfcb50e3a5f2e8bc679927bebc63890ba8716677cb0fb148b8
3
+ metadata.gz: f39c9b47d4ea6d461f3dec230984601fde7caea4b57c2293f98e832498a361d4
4
+ data.tar.gz: 000752fff10f87e86116f468dc554f52ed11b484b606744e9559ff4846e6f609
5
5
  SHA512:
6
- metadata.gz: c50f4b837947eff948157bdc6c9fa03a3fca76b036d4a94c6e7ce839c805cbc35afb0aac2f084c814c55b52af00f981fe22c6ea5f88a9392ee344ec21d841c19
7
- data.tar.gz: 8fae8724301ed92af7a1db4cee310c245fe1b66e9cdb1255a3c8206916ff93dd69e0834ca82574d78b0612aeeb64a485a5a44b739a68c0a35287fed119a8777b
6
+ metadata.gz: 1cdfef2c557e75f149a24e5fd1e43ced9a8d9730debd49eec3ce8b82e55f9e19745b88ce136aac806ee1ce25b439862448b8ac21a1d935150d0065662d1f18b6
7
+ data.tar.gz: 859e9c76848fde8c9ace057910f6bb6706b0bb258a8e3f3911176edcf2468165d68810ef0dfc10677c935ed6dd119f9636f6e43057129aef6152a632823009e7
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mstdn_ivory (0.1.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.5.1)
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.0
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/[USERNAME]/mstdn_ivory/blob/master/CODE_OF_CONDUCT.md).
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).
@@ -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
@@ -1,3 +1,3 @@
1
1
  module MstdnIvory
2
- VERSION = "0.1.0"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -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.1.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-04-30 00:00:00.000000000 Z
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.2
160
+ rubygems_version: 2.7.3
145
161
  signing_key:
146
162
  specification_version: 4
147
163
  summary: Ruby interface for Mastodon api.