jusolink 1.0.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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/jusolink.rb +142 -0
  3. metadata +72 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0d67d6160a321d2169d9b257f6b7b1e491d92125
4
+ data.tar.gz: 3a267c997c65eef7338bd79631c20985adf587a7
5
+ SHA512:
6
+ metadata.gz: 3fe121bc81ee282268aab290cd44907d6818e1e68bccd78eee3ccb71c603e9c564bda0d4a1ca85f6fc0b9b4fe5f3425d31d940c65f6bcb101e6677aff3b935f5
7
+ data.tar.gz: 111b78f910c8b48606f9c74c31238cbc30b529a2939b1c52d7c8e8b0d1b864cd82bd3cc3d362310c2f9a63e999e4587b3f030f5279d04c1fee1c5f4f3963747f
data/lib/jusolink.rb ADDED
@@ -0,0 +1,142 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'net/http'
3
+ require 'uri'
4
+ require 'json'
5
+ require 'date'
6
+ require 'linkhub'
7
+
8
+ # Jusolink API Service class
9
+ class Jusolink
10
+ ServiceID = "JUSOLINK";
11
+ ServiceURL = "https://juso.linkhub.co.kr"
12
+ POPBILL_APIVersion = "1.0"
13
+
14
+ attr_accessor :token_cache, :scopes, :isTest, :linkhub
15
+
16
+ # Generate Linkhub Class Singleton Instance
17
+ class << self
18
+ def instance(linkID, secretKey)
19
+ @instance ||= new
20
+ @instance.token_cache = nil
21
+ @instance.linkhub = Linkhub.instance(linkID, secretKey)
22
+ @instance.scopes = ["200"]
23
+ return @instance
24
+ end
25
+ private :new
26
+ end
27
+
28
+ # Get Session Token by checking token-cache
29
+ def getSession_Token()
30
+ targetToken = nil
31
+ refresh = false
32
+
33
+ # check already cached CorpNum's SessionToken
34
+ unless @token_cache.nil?
35
+ targetToken = @token_cache
36
+ end
37
+
38
+ if targetToken.nil?
39
+ refresh = true
40
+ else
41
+ # Token's expireTime must use parse() because time format is hh:mm:ss.SSSZ
42
+ expireTime = DateTime.parse(targetToken['expiration'])
43
+ serverUTCTime = DateTime.strptime(@linkhub.getTime())
44
+ refresh = expireTime < serverUTCTime
45
+ end
46
+
47
+ if refresh
48
+ begin
49
+ # getSessionToken from Linkhub
50
+ targetToken = @linkhub.getSessionToken(ServiceID, "", @scopes)
51
+ rescue LinkhubException => le
52
+ raise JusolinkException.new(le.code, le.message)
53
+ end
54
+ # refresh @token_cache object
55
+ @token_cache = targetToken
56
+ end
57
+
58
+ targetToken['session_token']
59
+ end # end of getSession_Token
60
+
61
+ def gzip_parse (target)
62
+ sio = StringIO.new(target)
63
+ gz = Zlib::GzipReader.new(sio)
64
+ gz.read()
65
+ end
66
+
67
+ # Jusolink API http Get Request Func
68
+ def httpget(url)
69
+ headers = {
70
+ "x-pb-version" => Jusolink::POPBILL_APIVersion,
71
+ "Accept-Encoding" => "gzip,deflate",
72
+ }
73
+
74
+ headers["Authorization"] = "Bearer " + getSession_Token()
75
+
76
+ uri = URI(ServiceURL + url)
77
+ request = Net::HTTP.new(uri.host, 443)
78
+ request.use_ssl = true
79
+
80
+ Net::HTTP::Get.new(uri)
81
+
82
+ res = request.get(uri.request_uri, headers)
83
+
84
+ if res.code == "200"
85
+ if res.header['Content-Encoding'].eql?('gzip')
86
+ JSON.parse(gzip_parse(res.body))
87
+ else
88
+ JSON.parse(res.body)
89
+ end
90
+ else
91
+ raise JusolinkException.new(JSON.parse(res.body)["code"],
92
+ JSON.parse(res.body)["message"])
93
+ end
94
+ end #end of httpget
95
+
96
+
97
+ # Get Partner's Remain Point
98
+ def getBalance
99
+ begin
100
+ @linkhub.getPartnerBalance(getSession_Token(), ServiceID)
101
+ rescue LinkhubException => le
102
+ raise JusolinkException.new(le.code, le.message)
103
+ end
104
+ end
105
+
106
+ # Get Jusolink UnitCost
107
+ def getUnitCost
108
+ httpget('/Search/UnitCost')['unitCost']
109
+ end
110
+
111
+ # search
112
+ def search(index, pageNum = 1, perPage = 20, noSuggest = false, noDiff = false)
113
+ if index.to_s == ''
114
+ raise JusolinkException.new('-99999999', '검색어가 입력되지 않았습니다.')
115
+ end
116
+
117
+ uri = "/Search?Searches="+index
118
+ uri += "&PageNum=" + pageNum.to_s
119
+ uri += "&PerPage=" + perPage.to_s
120
+
121
+ if noSuggest
122
+ uri += "&noSuggest=true"
123
+ end
124
+
125
+ if noDiff
126
+ uri += "&noDiff=true"
127
+ end
128
+
129
+ httpget(URI.escape(uri))
130
+ end
131
+
132
+
133
+ end # end of Jusolink class
134
+
135
+ # Popbill API Exception Handler class
136
+ class JusolinkException < StandardError
137
+ attr_reader :code, :message
138
+ def initialize(code, message)
139
+ @code = code
140
+ @message = message
141
+ end
142
+ end
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jusolink
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Linkhub Dev
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-02-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: linkhub
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 1.0.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.0.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: minitest
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 4.7.5
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 4.7.5
41
+ description: Jusolink API SDK
42
+ email: code@linkhub.co.kr
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - lib/jusolink.rb
48
+ homepage: https://github.com/linkhub-sdk/jusolink.ruby
49
+ licenses:
50
+ - APACHE LICENSE VERSION 2.0
51
+ metadata: {}
52
+ post_install_message:
53
+ rdoc_options: []
54
+ require_paths:
55
+ - lib
56
+ required_ruby_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - '>='
59
+ - !ruby/object:Gem::Version
60
+ version: 2.0.0
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ requirements: []
67
+ rubyforge_project:
68
+ rubygems_version: 2.4.8
69
+ signing_key:
70
+ specification_version: 4
71
+ summary: Jusolink API SDK
72
+ test_files: []