xlogin-apiclient 0.1.3 → 0.2.4

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