dianping-api 0.1.4 → 0.1.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
2
  SHA256:
3
- metadata.gz: 9d999be27de932ac3ae044dc8d4c08c899635f87943ce3fc7b739cb3b2eb4d8d
4
- data.tar.gz: '009a90b2734a3e30fd0ae2b77b1e5ab3a5938d2c256deb8e9effa4b6c3ccf24b'
3
+ metadata.gz: 273a0b63e1a93932e0418017345a05999480e3b24666a79cd7d8027cf6665422
4
+ data.tar.gz: c240ad8116fc4ea92cbfaf292c4b2b8dc5cead0b321c5178da860bd96ce7a603
5
5
  SHA512:
6
- metadata.gz: 6f8ee2af9d86267855fd6e1d04efa89523332117674b86540fff847fdb740a9417b1f2fcad16577222b64875418729bc6d13fa45f18a20b53b7c96164884d2d3
7
- data.tar.gz: 94756099193ad357b47a4ee524fb346d6a810c1391cfb14a76af04aa11c1ee0aa5f1e366a8c972cebab6e679c1065152055ad6c10c704715ccfc52aa0d643ab2
6
+ metadata.gz: 3b381e73e5f1b843b19106794740772d67ed279f066465a6ed93d672107e10590d79f8a30a26e302f0f9f75a40f79cb9b021b9a60f8b9169ad5a98be84d3ab30
7
+ data.tar.gz: 4d62e49edc8261d014fe4108aa730723a9005c0c99cb7ba9320946a34bd001ea5a338f0940e0d7a016b3687aa54dc01a23080bffb6ba93ccfaff7651357c520b
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dianping-api (0.1.3)
4
+ dianping-api (0.1.4)
5
5
  faraday (~> 1.0)
6
6
  multi_json (~> 1.0)
7
7
 
data/lib/dianping/api.rb CHANGED
@@ -10,11 +10,11 @@ module Dianping
10
10
  class UsageError < Error; end
11
11
 
12
12
  def self.logger
13
- @@logger ||= defined?(Rails) ? Rails.logger : ::Logger.new(STDOUT)
13
+ @logger ||= defined?(Rails) ? Rails.logger : ::Logger.new(STDOUT)
14
14
  end
15
-
15
+
16
16
  def self.logger=(logger)
17
- @@logger = logger
17
+ @logger = logger
18
18
  end
19
19
 
20
20
  def self.client
@@ -1,4 +1,5 @@
1
1
  require 'faraday'
2
+ require 'securerandom'
2
3
 
3
4
  module Dianping
4
5
  module Api
@@ -6,7 +7,7 @@ module Dianping
6
7
 
7
8
  include Modules::Tuangou
8
9
 
9
- attr_reader :app_key, :site, :token
10
+ attr_reader :app_key, :site, :token, :token_root
10
11
  attr_accessor :redirect_url
11
12
 
12
13
  def initialize(app_key, secret, **options)
@@ -14,6 +15,7 @@ module Dianping
14
15
  @secret = secret
15
16
  @site = options[:site] || 'https://openapi.dianping.com'
16
17
  @redirect_url = options[:redirect_url]
18
+ @token_root = options[:token_root] || '/tmp'
17
19
  @token = Token.new(self)
18
20
  end
19
21
 
@@ -84,6 +86,10 @@ module Dianping
84
86
  MultiJson.load(text || '{}', symbolize_keys: true)
85
87
  end
86
88
 
89
+ def requestid
90
+ SecureRandom.hex
91
+ end
92
+
87
93
  def share_params
88
94
  {
89
95
  app_key: app_key,
@@ -96,13 +102,17 @@ module Dianping
96
102
  end
97
103
 
98
104
  def sign_with_share(params = {})
99
- merged = share_params.merge(params || {}).dup
105
+ merged = merge_params(params)
100
106
  content = merged.to_a.sort.flatten.join.encode!('UTF-8')
101
107
  # puts @secret + content
102
108
  Api.logger.debug { format('content: %s', content) }
103
109
  sign = Digest::MD5.hexdigest([@secret, content, @secret].compact.join)
104
110
  merged.merge(sign: sign)
105
111
  end
112
+
113
+ def merge_params(params)
114
+ share_params.merge(params || {}).dup.reject { |_k, v| v.nil? }
115
+ end
106
116
  end
107
117
  end
108
118
  end
@@ -6,10 +6,10 @@ module Dianping
6
6
  post('/router/tuangou/receipt/prepare', open_shop_uuid: shop_uuid, receipt_code: code)
7
7
  end
8
8
 
9
- def receipt_consume(shop_uuid, code, request_id, count = 1, **params)
9
+ def receipt_consume(shop_uuid, code, count = 1, request_id = nil, **params)
10
10
  params.merge! open_shop_uuid: shop_uuid,
11
11
  receipt_code: code,
12
- requestid: request_id,
12
+ requestid: request_id || requestid,
13
13
  count: count
14
14
  keys = %i[requestid receipt_code count open_shop_uuid app_shop_account app_shop_accountname]
15
15
  raise "missing keys #{keys - params.keys}" unless (keys - params.keys).empty?
@@ -7,20 +7,24 @@ module Dianping
7
7
 
8
8
  def initialize(client)
9
9
  @client = client
10
- @token_file = File.join(ENV['TOKEN_ROOT'] || '/tmp', "dianping-api-#{client.app_key}")
10
+ @token_file = File.join(client.token_root || 'tmp', "dianping-api-#{client.app_key}")
11
11
  end
12
12
 
13
13
  def access_hash
14
- @access_hash ||=
15
- begin
16
- token = MultiJson.load(File.read(@token_file), symbolize_keys: true)
17
- token[:access_hash] || (raise 'empty token')
18
- rescue Errno::ENOENT
19
- {}
20
- end
14
+ @access_hash ||= load_token
15
+ end
16
+
17
+ def load_token
18
+ token = MultiJson.load(File.read(@token_file), symbolize_keys: true)
19
+ token[:access_hash] || (raise 'empty token')
20
+ rescue Errno::ENOENT
21
+ {}
21
22
  end
22
23
 
23
24
  def refresh
25
+ @access_hash = load_token # try to use shared token first
26
+ return unless expired?
27
+
24
28
  raise Error, 'no refresh_token' unless refresh_token && remain_refresh_count > 1
25
29
 
26
30
  save_token(client.refresh_token(@access_hash[:refresh_token]))
@@ -1,5 +1,5 @@
1
1
  module Dianping
2
2
  module Api
3
- VERSION = "0.1.4"
3
+ VERSION = "0.1.5"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dianping-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Wong
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-05 00:00:00.000000000 Z
11
+ date: 2021-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday