dianping-api 0.1.4 → 0.1.5

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