Class: Dianping::Api::Token

Inherits:
Object
  • Object
show all
Defined in:
lib/dianping/api/token.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client) ⇒ Token

Returns a new instance of Token.



8
9
10
11
# File 'lib/dianping/api/token.rb', line 8

def initialize(client)
  @client = client
  @token_file = File.join('/tmp', "dianping-api-#{client.app_key}")
end

Instance Attribute Details

#clientObject (readonly)

Returns the value of attribute client.



6
7
8
# File 'lib/dianping/api/token.rb', line 6

def client
  @client
end

Instance Method Details

#access_hashObject



13
14
15
16
17
18
19
20
21
# File 'lib/dianping/api/token.rb', line 13

def access_hash
  @access_hash ||=
    begin
      token = MultiJson.load(File.read(@token_file), symbolize_keys: true)
      token[:access_hash] || (raise 'empty token')
    rescue Errno::ENOENT
      {}
    end
end

#access_tokenObject



40
41
42
# File 'lib/dianping/api/token.rb', line 40

def access_token
  access_hash[:access_token]
end

#auth(authcode) ⇒ Object



29
30
31
# File 'lib/dianping/api/token.rb', line 29

def auth(authcode)
  save_token(client.auth_token(authcode))
end

#authorized?Boolean

Returns:

  • (Boolean)


69
70
71
# File 'lib/dianping/api/token.rb', line 69

def authorized?
  !access_token.nil?
end

#destoryObject



73
74
75
# File 'lib/dianping/api/token.rb', line 73

def destory
  save_token({})
end

#expired?Boolean

Returns:

  • (Boolean)


60
61
62
63
# File 'lib/dianping/api/token.rb', line 60

def expired?
  # puts access_hash, authorized?, expires_at, Time.now
  !authorized? || Time.now > expires_at
end

#expires_atObject



56
57
58
# File 'lib/dianping/api/token.rb', line 56

def expires_at
  updated_at + expires_in rescue nil
end

#expires_inObject



48
49
50
# File 'lib/dianping/api/token.rb', line 48

def expires_in
  access_hash[:expires_in]
end

#refreshObject

Raises:



23
24
25
26
27
# File 'lib/dianping/api/token.rb', line 23

def refresh
  raise Error, 'no refresh_token' unless refresh_token && remain_refresh_count > 1

  save_token(client.refresh_token(@access_hash[:refresh_token]))
end

#refresh_tokenObject



44
45
46
# File 'lib/dianping/api/token.rb', line 44

def refresh_token
  access_hash[:refresh_token]
end

#remain_refresh_countObject



65
66
67
# File 'lib/dianping/api/token.rb', line 65

def remain_refresh_count
  (access_hash[:remain_refresh_count] || 12).to_i
end

#save_token(token) ⇒ Object



33
34
35
36
37
38
# File 'lib/dianping/api/token.rb', line 33

def save_token(token)
  token = { updated_at: Time.now.to_s }.merge(token)
  json = MultiJson.dump(access_hash: token )
  File.open(@token_file, 'w') { |f| f.write(json) }
  @access_hash = token
end

#updated_atObject



52
53
54
# File 'lib/dianping/api/token.rb', line 52

def updated_at
  Time.parse(access_hash[:updated_at])
end