Class: Songkick::Transport::Service

Inherits:
Object
  • Object
show all
Defined in:
lib/songkick/transport/service.rb

Constant Summary collapse

DEFAULT_TIMEOUT =
10
DEFAULT_TRANSPORT =
Songkick::Transport::Curb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.ancestorObject



7
8
9
10
# File 'lib/songkick/transport/service.rb', line 7

def self.ancestor
  warn "DEPRECATED: calling ancestor on #{self}"
  self.ancestors.select { |a| a.respond_to?(:get_user_agent) }[1]
end

.endpoint(name) ⇒ Object



32
33
34
# File 'lib/songkick/transport/service.rb', line 32

def self.endpoint(name)
  @endpoint_name = name.to_s
end

.extra_headersObject



17
18
19
20
# File 'lib/songkick/transport/service.rb', line 17

def self.extra_headers
  warn "DEPRECATED: calling extra_headers on #{self}"
  get_with_headers
end

.get_endpointObject



64
65
66
67
# File 'lib/songkick/transport/service.rb', line 64

def self.get_endpoint
  Service.get_endpoints[self.get_endpoint_name] ||
    raise("can't find endpoint for '#{self.get_endpoint_name}', should have called Songkick::Transport::Service.set_endpoints")
end

.get_endpoint_nameObject



59
60
61
62
# File 'lib/songkick/transport/service.rb', line 59

def self.get_endpoint_name
  @endpoint_name || (parent_service && parent_service.get_endpoint_name) ||
    raise("no endpoint specified for #{self}, call endpoint 'foo' inside #{self}")
end

.get_endpointsObject



77
78
79
# File 'lib/songkick/transport/service.rb', line 77

def self.get_endpoints
  @endpoints || {}
end

.get_stub_transportObject



89
90
91
# File 'lib/songkick/transport/service.rb', line 89

def self.get_stub_transport
  @stub_transport || (parent_service && parent_service.get_stub_transport) || nil
end

.get_timeoutObject



69
70
71
# File 'lib/songkick/transport/service.rb', line 69

def self.get_timeout
  @timeout || (parent_service && parent_service.get_timeout) || DEFAULT_TIMEOUT
end

.get_transport_layerObject



81
82
83
# File 'lib/songkick/transport/service.rb', line 81

def self.get_transport_layer
  @transport_layer || (parent_service && parent_service.get_transport_layer) || DEFAULT_TRANSPORT
end

.get_transport_layer_optionsObject



85
86
87
# File 'lib/songkick/transport/service.rb', line 85

def self.get_transport_layer_options
  ((parent_service && parent_service.get_transport_layer_options) || {}).merge(@transport_layer_options || {})
end

.get_user_agentObject



73
74
75
# File 'lib/songkick/transport/service.rb', line 73

def self.get_user_agent
  @user_agent || (parent_service && parent_service.get_user_agent)
end

.get_with_headersObject



93
94
95
# File 'lib/songkick/transport/service.rb', line 93

def self.get_with_headers
  ((parent_service && parent_service.get_with_headers) || {}).merge(@with_headers || {})
end

.new_transportObject



97
98
99
100
101
102
# File 'lib/songkick/transport/service.rb', line 97

def self.new_transport
  unless user_agent = get_user_agent
    raise "no user agent specified for #{self}, call user_agent 'foo' inside #{self} or on Songkick::Transport::Service"
  end
  get_stub_transport || get_transport_layer.new(self.get_endpoint, { :user_agent => user_agent, :timeout => get_timeout }.merge(get_transport_layer_options))
end

.set_endpoints(hash) ⇒ Object



52
53
54
55
56
57
# File 'lib/songkick/transport/service.rb', line 52

def self.set_endpoints(hash)
  unless self == Songkick::Transport::Service
    raise "set_endpoints only on Songkick::Transport::Service"
  end
  @endpoints = hash
end

.stub_transport(stub) ⇒ Object



12
13
14
15
# File 'lib/songkick/transport/service.rb', line 12

def self.stub_transport(stub)
  warn "DEPRECATED: calling stub_transport on #{self}"
  @stub_transport = stub
end

.this_extra_headersObject



22
23
24
25
# File 'lib/songkick/transport/service.rb', line 22

def self.this_extra_headers
  warn "DEPRECATED: calling this_extra_headers on #{self}"
  @with_headers || {}
end

.timeout(value) ⇒ Object



36
37
38
# File 'lib/songkick/transport/service.rb', line 36

def self.timeout(value)
  @timeout = value
end

.transport_layer(value) ⇒ Object



44
45
46
# File 'lib/songkick/transport/service.rb', line 44

def self.transport_layer(value)
  @transport_layer = value
end

.transport_layer_options(value) ⇒ Object



48
49
50
# File 'lib/songkick/transport/service.rb', line 48

def self.transport_layer_options(value)
  @transport_layer_options = value
end

.user_agent(value) ⇒ Object



40
41
42
# File 'lib/songkick/transport/service.rb', line 40

def self.user_agent(value)
  @user_agent = value
end

.with_headers(headers) ⇒ Object



104
105
106
# File 'lib/songkick/transport/service.rb', line 104

def self.with_headers(headers)
  @with_headers = headers
end

Instance Method Details

#httpObject



108
109
110
111
112
113
114
115
# File 'lib/songkick/transport/service.rb', line 108

def http
  r = (@http ||= self.class.new_transport)
  if self.class.get_with_headers.any?
    r.with_headers(self.class.get_with_headers)
  else
    r
  end
end

#rescue_404(response = nil) ⇒ Object



121
122
123
124
125
# File 'lib/songkick/transport/service.rb', line 121

def rescue_404(response=nil)
  yield
rescue Songkick::Transport::HttpError => e
  e.status == 404 ? response : (raise e)
end

#stub_transport(http) ⇒ Object



117
118
119
# File 'lib/songkick/transport/service.rb', line 117

def stub_transport(http)
  @http = http
end