xlogin-apiclient 0.1.3 → 0.2.4

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: a5d1de84a151795ecb712cdf1d9a411afab32709
4
- data.tar.gz: 1894a25a7ce10d72ae0b4829ac376f87f6b7c239
2
+ SHA256:
3
+ metadata.gz: cd27729125f85dccd148ba59aa2db26d534bc236c9845be12f5fde54b47925d2
4
+ data.tar.gz: 483181f41617cdc735197e1206a21343f4c258da53f129f8d443e46d658b181e
5
5
  SHA512:
6
- metadata.gz: 199dd4dd3248199ad21ca3b3f5727cfdeb847ea8184767bb1a84cb19356608a0633dc2546ffc0528362eb174055bb350d0964eae6988a8b0a02358620574e4eb
7
- data.tar.gz: 0216ca99501315becc906df9cba5dc34ba4a56a7cb287f09d1f15059185e1e70d555c09029b0b1d6e561d2c660cefe831e43d8d7cb6d61267e86872607515b1e
6
+ metadata.gz: 296f10186c974b5e3e935c525a15299265543e8074b25f9dd5095abbddbdeabb009f96b58d49ae4be87ee34e535ba60dc399e14fbc3c4da1f68aa792053079d1
7
+ data.tar.gz: c51ca168d18595df7171791277cf5290f6c8229d94250f14ad465828c3798102d90364e697d76c2d1980d6f2dd42ccfca1df22757be2b9c9c7e1071eaec365a3
@@ -1,66 +1,67 @@
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
8
  module Xlogin
7
- module APIClient
8
- class APIError < StandardError; end
9
+ class APIClient
10
+ class Error < StandardError; end
9
11
 
10
- class Client
11
-
12
- def initialize(uri)
13
- @base_uri = URI(uri)
14
- end
15
-
16
- def exec(req = Request.new, &block)
17
- vendor = self.class.name.slice(/\w+$/).downcase
18
- method("exec_#{vendor}").call(req, &block)
19
- end
20
-
21
- def method_missing(name, *args, &block)
22
- super unless name =~ /^exec_(\w+)$/
12
+ class << self
13
+ attr_accessor :base_url
14
+ end
23
15
 
24
- begin
25
- req = args.shift || Request.new
26
- uri = URI(@base_uri)
27
- uri.path = "/vendors/#{$1}/actions"
16
+ attr_reader :type, :args
28
17
 
29
- block.call(req) if block
30
- http(:post, uri, req.to_h)
31
- rescue => e
32
- raise APIError.new(e.message)
33
- end
34
- end
18
+ def initialize(base_url: self.class.base_url, **args)
19
+ raise Error.new('base_url not defined') unless base_url
35
20
 
36
- def respond_to_missing?(name, include_private = false)
37
- name =~ /^exec_(\w+)$/
38
- end
21
+ @uri = Addressable::URI.parse(base_url)
22
+ @type = args.delete(:type)
23
+ @args = args
24
+ end
39
25
 
40
- private
41
- def http(method, uri, **args)
42
- http = Net::HTTP.new(uri.host, uri.port)
26
+ def cmd(args, &block)
27
+ params = {driver: @type, target: @args, command: args}
28
+ request(**params.transform_keys(&:to_sym), &block)
29
+ end
43
30
 
44
- klass = Net::HTTP.const_get(method.to_s.capitalize)
45
- req = klass.new(uri.path)
46
- req["Accept"] = "application/json"
31
+ private
32
+ def request(**params, &block)
33
+ uri = @uri.dup
34
+ uri.query = "q=#{URI.encode_www_form_component(JSON.generate(params))}"
47
35
 
48
- unless args.empty?
49
- req["Content-Type"] = "application/json"
50
- req.body = JSON.dump(args)
51
- end
36
+ if block
37
+ resp = StringIO.new
38
+ EM.run do
39
+ source = EventMachine::EventSource.new(uri.to_s)
40
+ source.message do |message|
41
+ data = JSON.parse(message) || {}
42
+ if chunk = data['chunk']
43
+ resp.print data['chunk']
44
+ block.call(data['chunk'])
45
+ end
46
+ end
47
+ source.error do |e|
48
+ EM.stop
49
+ end
50
+ source.start
51
+ end
52
+ return resp.string
53
+ else
54
+ req = Net::HTTP::Get.new(uri.request_uri)
55
+ req["Accept"] = "application/json"
52
56
 
53
- resp = http.request(req)
54
- body = resp.body
55
- body.nil? ? {} : JSON.parse(body)
56
- end
57
+ http = Net::HTTP.new(uri.host, uri.port)
58
+ resp = http.request(req)
59
+ raise Error.new(resp.message) unless resp.code =~ /^2[0-9]{2}$/
57
60
 
58
- end
61
+ data = resp.body ? JSON.parse(resp.body) : {}
62
+ raise Error.new(data['error']) unless data['success']
59
63
 
60
- class Request < OpenStruct
61
- def initialize(*args)
62
- super(*args)
63
- self.captures ||= []
64
+ return data['payload'].join
64
65
  end
65
66
  end
66
67
  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.3"
3
+ VERSION = "0.2.4"
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.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - haccht
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-11-30 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.