Class: Populr

Inherits:
Object
  • Object
show all
Defined in:
lib/populr.rb

Defined Under Namespace

Classes: APIError, AccessDenied, ResourceNotFound, UnexpectedResponse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(api_key, api_server = 'https://api.populr.me') ⇒ Populr

Returns a new instance of Populr.



50
51
52
53
54
55
56
57
58
59
# File 'lib/populr.rb', line 50

def initialize(api_key, api_server = 'https://api.populr.me')
  raise "When overriding the Populr API server address, you must include https://" unless api_server.include?('://')
  @api_server = api_server
  @api_version = 'v0'
  @api_key = api_key

  RestClient.add_before_execution_proc do |req, params|
    req.add_field('X-Populr-API-Wrapper', 'ruby')
  end
end

Instance Attribute Details

#api_keyObject (readonly)

Returns the value of attribute api_key.



26
27
28
# File 'lib/populr.rb', line 26

def api_key
  @api_key
end

#api_serverObject

Returns the value of attribute api_server.



25
26
27
# File 'lib/populr.rb', line 25

def api_server
  @api_server
end

#api_versionObject (readonly)

Returns the value of attribute api_version.



27
28
29
# File 'lib/populr.rb', line 27

def api_version
  @api_version
end

Class Method Details

.interpret_response(result, result_content, options = {}) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/populr.rb', line 30

def self.interpret_response(result, result_content, options = {})
  # Handle HTTP errors and RestClient errors
  raise ResourceNotFound.new if result.code.to_i == 404
  raise AccessDenied.new if result.code.to_i == 403

  # Hande content expectation errors
  raise UnexpectedResponse.new if options[:expected_class] && result_content.empty?
  json = JSON.parse(result_content)
  raise APIError.new(json['error_type'], json['error']) if json.is_a?(Hash) && json['error_type']
  raise UnexpectedResponse.new(result.msg) if result.is_a?(Net::HTTPClientError)
  raise UnexpectedResponse.new if options[:expected_class] && !json.is_a?(options[:expected_class])
  json

rescue JSON::ParserError => e
  # Handle parsing errors
  raise UnexpectedResponse.new(e.message)
end

Instance Method Details

#background_imagesObject



86
87
88
89
# File 'lib/populr.rb', line 86

def background_images
  @background_images ||= RestfulModelCollection.new(BackgroundImageAsset, self)
  @background_images
end

#documentsObject



76
77
78
79
# File 'lib/populr.rb', line 76

def documents
  @documents ||= RestfulModelCollection.new(DocumentAsset, self)
  @documents
end

#domainsObject



71
72
73
74
# File 'lib/populr.rb', line 71

def domains
  @domains ||= RestfulModelCollection.new(Domain, self)
  @domains
end

#embedsObject



91
92
93
94
# File 'lib/populr.rb', line 91

def embeds
  @embeds ||= RestfulModelCollection.new(EmbedAsset, self)
  @embeds
end

#imagesObject



81
82
83
84
# File 'lib/populr.rb', line 81

def images
  @images ||= RestfulModelCollection.new(ImageAsset, self)
  @images
end

#popsObject



66
67
68
69
# File 'lib/populr.rb', line 66

def pops
  @pops ||= RestfulModelCollection.new(Pop, self)
  @pops
end

#templatesObject



61
62
63
64
# File 'lib/populr.rb', line 61

def templates
  @templates ||= RestfulModelCollection.new(Template, self)
  @templates
end

#url_for_path(path) ⇒ Object



96
97
98
99
# File 'lib/populr.rb', line 96

def url_for_path(path)
  protocol, domain = @api_server.split('//')
  "#{protocol}//#{@api_key}:@#{domain}/#{@api_version}#{path}"
end