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 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.