xlogin-apiclient 0.1.6 → 0.2.5

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