xlogin-apiclient 0.1.6 → 0.2.5

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
- SHA1:
3
- metadata.gz: 83943d818f1f52aed3bb0d97f36d52473e7a1f42
4
- data.tar.gz: 399db00e2c8f0dc6f9a74ad3132a6a37433dfec8
2
+ SHA256:
3
+ metadata.gz: 8f3e532530879c3353dcfb7f59479eb4b0f0c1b399f89ee8c65dbf024cee76f5
4
+ data.tar.gz: 9ea1381765bf42a205d649f5eaf42b490f9dbfd16de7fde69d4843192f5c2156
5
5
  SHA512:
6
- metadata.gz: 44ee7f3f4a7ddbb964d0fa58a3161f83c81ab90cd704f8734fd0c4444821cfaa8b97bfad0b22e3142318f4332827bc03814909a3e13d95c1eba25fe6db19f375
7
- data.tar.gz: 25603c911d6daf0f972bd658e071129ed84a890c666f3026f657d3c1e2e421a802b92895bc20fe32ca4a0419f9dd8194df36c4675b331ed02a863f6a74fe0a4d
6
+ metadata.gz: cb5e5d6fbcb8fcf18b41d39b71e87f39ae8a63622711668b369a3736185e12c772a3e95c440120302044936127cb1f3bb9136a891bd41cf7cc65b3ce511798b8
7
+ data.tar.gz: b877ebf767de4ae72912d31cc802a479e9284aed5515f7430b38ccccd2af2e48b5549c192a7a1c84581d7965f47ebef32ed3cf25d96e9b329d26edf4854cea8d
@@ -1,78 +1,75 @@
1
1
  require 'json'
2
2
  require 'net/http'
3
- require 'ostruct'
3
+ require 'stringio'
4
+ require 'addressable/uri'
5
+ require 'em-eventsource'
4
6
  require "xlogin/apiclient/version"
5
7
 
6
- module Xlogin
7
- module APIClient
8
- class APIError < StandardError; end
9
-
10
- class Client
11
- def initialize(base_uri, type:, **args)
12
- @uri = base_uri
13
- @type = type
14
- @args = args
15
- end
16
-
17
- def cmd(req = Request.new, &block)
18
- if req.kind_of?(String)
19
- req, _req = Request.new, req
20
- req.command = _req
21
- end
22
8
 
23
- req.xlogin = @args
24
- block.call(req) if block
25
-
26
- uri = @uri.dup
27
- uri.path += "/vendors/#{@type}/actions"
9
+ module Xlogin
10
+ class APIClient
11
+ DEFAULT_TIMEOUT = 60
28
12
 
29
- http(:post, uri, req.to_h)
30
- rescue => e
31
- raise APIError.new(e.message)
32
- end
13
+ class Error < StandardError; end
33
14
 
34
- private
35
- def http(method, uri, **args)
36
- http = Net::HTTP.new(uri.host, uri.port)
15
+ class << self
16
+ attr_accessor :base_url
17
+ attr_accessor :timeout
18
+ end
37
19
 
38
- klass = Net::HTTP.const_get(method.to_s.capitalize)
39
- req = klass.new(uri.path)
40
- req["Accept"] = "application/json"
20
+ attr_reader :type, :args
41
21
 
42
- unless args.empty?
43
- req["Content-Type"] = "application/json"
44
- req.body = JSON.dump(args)
45
- end
22
+ def initialize(base_url: self.class.base_url, **args)
23
+ raise Error.new('base_url not defined') unless base_url
46
24
 
47
- resp = http.request(req)
48
- body = resp.body
25
+ @uri = Addressable::URI.parse(base_url)
26
+ @type = args.delete(:type)
27
+ @args = args
28
+ end
49
29
 
50
- Response.new(body.nil? ? {} : JSON.parse(body))
51
- end
30
+ def cmd(args, &block)
31
+ params = {driver: @type, target: @args, command: args}
32
+ request(**params.transform_keys(&:to_sym), &block)
52
33
  end
53
34
 
54
- class Factory
55
- def initialize(uri)
56
- @base_uri = URI(uri)
57
- end
35
+ private
36
+ def request(**params, &block)
37
+ uri = @uri.dup
38
+ uri.query = "q=#{URI.encode_www_form_component(JSON.generate(params))}"
39
+
40
+ if block
41
+ resp = StringIO.new
42
+ EM.run do
43
+ source = EventMachine::EventSource.new(uri.to_s)
44
+ source.message do |message|
45
+ data = JSON.parse(message) || {}
46
+ if chunk = data['chunk']
47
+ resp.print data['chunk']
48
+ block.call(data['chunk'])
49
+ end
50
+ end
51
+ source.error do |e|
52
+ EM.stop
53
+ end
54
+ source.start
55
+ end
56
+ return resp.string
57
+ else
58
+ req = Net::HTTP::Get.new(uri.request_uri)
59
+ req["Accept"] = "application/json"
58
60
 
59
- def create(**args)
60
- Client.new(@base_uri, args)
61
- end
62
- end
61
+ http = Net::HTTP.new(uri.host, uri.port)
62
+ http.open_timeout = self.class.timeout || DEFAULT_TIMEOUT
63
+ http.read_timeout = self.class.timeout || DEFAULT_TIMEOUT
63
64
 
64
- class Request < OpenStruct
65
- def initialize(**args)
66
- super(*args)
67
- self.captures ||= []
68
- end
65
+ resp = http.request(req)
66
+ raise Error.new(resp.message) unless resp.code =~ /^2[0-9]{2}$/
69
67
 
70
- def to_h
71
- super.delete_if { |k, v| k == :captures && v.empty? }
72
- end
73
- end
68
+ data = resp.body ? JSON.parse(resp.body) : {}
69
+ raise Error.new(data['error']) unless data['success']
74
70
 
75
- class Response < OpenStruct
71
+ return data['payload'].join
72
+ end
76
73
  end
77
74
  end
78
75
  end
@@ -0,0 +1,18 @@
1
+ require 'optparse'
2
+
3
+
4
+ module Xlogin
5
+ module APIClient
6
+ class CLI
7
+
8
+ def self.run(args = ARGV)
9
+ Xlogin::APIClient::CLI.new.run(args)
10
+ end
11
+
12
+ def run(args)
13
+ end
14
+
15
+ end
16
+ end
17
+ end
18
+
@@ -1,5 +1,5 @@
1
1
  module Xlogin
2
2
  module Apiclient
3
- VERSION = "0.1.6"
3
+ VERSION = "0.2.5"
4
4
  end
5
5
  end
@@ -25,4 +25,7 @@ Gem::Specification.new do |spec|
25
25
 
26
26
  spec.add_development_dependency "bundler", "~> 1.17"
27
27
  spec.add_development_dependency "rake", "~> 10.0"
28
+
29
+ spec.add_dependency 'addressable'
30
+ spec.add_dependency 'em-eventsource'
28
31
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xlogin-apiclient
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - haccht
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-12-05 00:00:00.000000000 Z
11
+ date: 2021-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,6 +38,34 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: addressable
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: em-eventsource
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
41
69
  description: API client for xlogin-api.
42
70
  email:
43
71
  - haccht@users.noreply.github.com
@@ -54,6 +82,7 @@ files:
54
82
  - bin/console
55
83
  - bin/setup
56
84
  - lib/xlogin/apiclient.rb
85
+ - lib/xlogin/apiclient/cli.rb
57
86
  - lib/xlogin/apiclient/version.rb
58
87
  - xlogin-apiclient.gemspec
59
88
  homepage: https://github.com/haccht/xlogin-apiclient.
@@ -75,8 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
75
104
  - !ruby/object:Gem::Version
76
105
  version: '0'
77
106
  requirements: []
78
- rubyforge_project:
79
- rubygems_version: 2.6.14.1
107
+ rubygems_version: 3.0.3
80
108
  signing_key:
81
109
  specification_version: 4
82
110
  summary: API client for xlogin-api.