edge_cast 0.0.1

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.
Files changed (36) hide show
  1. data/CHANGELOG.md +12 -0
  2. data/LICENSE +22 -0
  3. data/README.md +54 -0
  4. data/lib/edge_cast/client/media/cache/management.rb +27 -0
  5. data/lib/edge_cast/client/media/cache/settings/compression.rb +40 -0
  6. data/lib/edge_cast/client/media/cache/settings/query_string_caching.rb +24 -0
  7. data/lib/edge_cast/client/media/cache/settings/query_string_logging.rb +26 -0
  8. data/lib/edge_cast/client/media/cache/settings.rb +26 -0
  9. data/lib/edge_cast/client/media/log/settings/format.rb +23 -0
  10. data/lib/edge_cast/client/media/log/settings/storage.rb +23 -0
  11. data/lib/edge_cast/client/media/token.rb +15 -0
  12. data/lib/edge_cast/client/media.rb +34 -0
  13. data/lib/edge_cast/client.rb +46 -0
  14. data/lib/edge_cast/config.rb +58 -0
  15. data/lib/edge_cast/connection.rb +45 -0
  16. data/lib/edge_cast/core_ext/hash.rb +29 -0
  17. data/lib/edge_cast/core_ext/string.rb +27 -0
  18. data/lib/edge_cast/error/bad_gateway.rb +7 -0
  19. data/lib/edge_cast/error/bad_request.rb +7 -0
  20. data/lib/edge_cast/error/client_error.rb +7 -0
  21. data/lib/edge_cast/error/forbidden.rb +7 -0
  22. data/lib/edge_cast/error/internal_server_error.rb +7 -0
  23. data/lib/edge_cast/error/method_not_allowed.rb +7 -0
  24. data/lib/edge_cast/error/not_acceptable.rb +7 -0
  25. data/lib/edge_cast/error/not_found.rb +7 -0
  26. data/lib/edge_cast/error/server_error.rb +7 -0
  27. data/lib/edge_cast/error/service_unavailable.rb +7 -0
  28. data/lib/edge_cast/error/unauthorized.rb +7 -0
  29. data/lib/edge_cast/error.rb +17 -0
  30. data/lib/edge_cast/request/authorization.rb +20 -0
  31. data/lib/edge_cast/request.rb +42 -0
  32. data/lib/edge_cast/response/raise_client_error.rb +50 -0
  33. data/lib/edge_cast/response/raise_server_error.rb +20 -0
  34. data/lib/edge_cast/version.rb +3 -0
  35. data/lib/edge_cast.rb +24 -0
  36. metadata +160 -0
data/CHANGELOG.md ADDED
@@ -0,0 +1,12 @@
1
+ ### 0.0.1 - 12 November, 2012
2
+
3
+ ### New features
4
+
5
+ - Cache compression settings. ([@rymai][])
6
+ - Cache query string caching settings. ([@rymai][])
7
+ - Cache query string logging settings. ([@rymai][])
8
+ - Cache management. ([@rymai][])
9
+ - Token-Based Authentication. ([@rymai][])
10
+
11
+ <!--- The following link definition list is generated by PimpMyChangelog --->
12
+ [@rymai]: https://github.com/rymai
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Rémy Coutable
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,54 @@
1
+ # EdgeCast
2
+
3
+ EdgeCast Web Services REST API Ruby wrapper.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'edge_cast'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install edge_cast
18
+
19
+ ## Usage
20
+
21
+ ```ruby
22
+ edge_cast = EdgeCast.new(:account_number => '1234', :api_token => 'abcd1234')
23
+
24
+ # Cache compression settings
25
+ edge_cast.compression(:http_small_object)
26
+ edge_cast.enable_compression(:http_small_object, ['text/javascript'])
27
+ edge_cast.disable_compression(:http_small_object, ['text/javascript'])
28
+
29
+ # Cache query string caching settings
30
+ edge_cast.query_string_caching(:http_small_object)
31
+ edge_cast.update_query_string_caching(:http_small_object, 'no-cache')
32
+
33
+
34
+ # Cache query string logging settings
35
+ edge_cast.query_string_logging(:http_small_object)
36
+ edge_cast.update_query_string_logging(:http_small_object, 'no-log')
37
+
38
+
39
+ # Cache management
40
+ edge_cast.load(:http_small_object, '/foo/bar.js')
41
+ edge_cast.purge(:http_small_object, '/foo/bar.js')
42
+
43
+ # Token-Based Authentication
44
+ edge_cast.encrypt_token_data(:key => 'abcd1234', :token_parameter => 'ec_expire=1356955200&ec_country_deny=CA&ec_country_allow=US,MX')
45
+
46
+ ```
47
+
48
+ ## Contributing
49
+
50
+ 1. Fork it
51
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
52
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
53
+ 4. Push to the branch (`git push origin my-new-feature`)
54
+ 5. Create new Pull Request
@@ -0,0 +1,27 @@
1
+ require 'edge_cast/core_ext/hash'
2
+
3
+ module EdgeCast
4
+ class Client
5
+ module Media
6
+ module Cache
7
+ module Management
8
+
9
+ def load(media_type, path)
10
+ put('edge/load', management_params(media_type, path))
11
+ end
12
+
13
+ def purge(media_type, path)
14
+ put('edge/purge', management_params(media_type, path))
15
+ end
16
+
17
+ private
18
+
19
+ def management_params(media_type, path)
20
+ { :media_type => Media.from_key(media_type.to_sym)[:code], :media_path => path }.to_api!
21
+ end
22
+
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,40 @@
1
+ require 'edge_cast/core_ext/hash'
2
+
3
+ module EdgeCast
4
+ class Client
5
+ module Media
6
+ module Cache
7
+ module Settings
8
+ module Compression
9
+
10
+ def compression(media_type = nil)
11
+ response = get("compression#{settings_query_string(media_type)}")
12
+
13
+ (response.is_a?(Array) ? response : [response]).inject({}) do |hash, r|
14
+ return hash unless Media.valid_type?(r['MediaTypeId'])
15
+
16
+ Media.from_code(r['MediaTypeId'])[:keys].each { |key| hash[key] = r.to_result! }
17
+ hash
18
+ end
19
+ end
20
+
21
+ def enable_compression(media_type, content_types)
22
+ update_compression(media_type, content_types, 1)
23
+ end
24
+
25
+ def disable_compression(media_type, content_types)
26
+ update_compression(media_type, content_types, 0)
27
+ end
28
+
29
+ private
30
+
31
+ def update_compression(media_type, content_types, status)
32
+ put('compression', { :media_type_id => Media.from_key(media_type)[:code], :status => status, :content_types => content_types }.to_api!)
33
+ end
34
+
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,24 @@
1
+ module EdgeCast
2
+ class Client
3
+ module Media
4
+ module Cache
5
+ module Settings
6
+ module QueryStringCaching
7
+
8
+ require 'edge_cast/client/media/cache/settings'
9
+ include EdgeCast::Client::Media::Cache::Settings
10
+
11
+ def query_string_caching(media_type = nil)
12
+ wrap_field_per_media(get("querystringcaching#{settings_query_string(media_type)}"), :query_string_caching)
13
+ end
14
+
15
+ def update_query_string_caching(media_type, caching)
16
+ put('querystringcaching', { :media_type_id => Media.from_key(media_type)[:code], :query_string_caching => caching }.to_api!)
17
+ end
18
+
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,26 @@
1
+ require 'edge_cast/core_ext/hash'
2
+
3
+ module EdgeCast
4
+ class Client
5
+ module Media
6
+ module Cache
7
+ module Settings
8
+ module QueryStringLogging
9
+
10
+ require 'edge_cast/client/media/cache/settings'
11
+ include EdgeCast::Client::Media::Cache::Settings
12
+
13
+ def query_string_logging(media_type = nil)
14
+ wrap_field_per_media(get("querystringlogging#{settings_query_string(media_type)}"), :query_string_logging)
15
+ end
16
+
17
+ def update_query_string_logging(media_type, logging)
18
+ put('querystringlogging', { :media_type_id => Media.from_key(media_type)[:code], :query_string_logging => logging }.to_api!)
19
+ end
20
+
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ require 'edge_cast/core_ext/string'
2
+
3
+ module EdgeCast
4
+ class Client
5
+ module Media
6
+ module Cache
7
+ module Settings
8
+
9
+ private
10
+
11
+ def settings_query_string(media_type)
12
+ media_type ? "?mediatypeid=#{EdgeCast::Client::Media.from_key(media_type)[:code]}" : nil
13
+ end
14
+
15
+ def wrap_field_per_media(response, field)
16
+ (response.is_a?(Array) ? response : [response]).inject({}) do |hash, r|
17
+ Media.from_code(r['MediaTypeId'])[:keys].each { |key| hash[key] = r[field.camelize] }
18
+ hash
19
+ end
20
+ end
21
+
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,23 @@
1
+ require 'edge_cast/core_ext/hash'
2
+
3
+ module EdgeCast
4
+ class Client
5
+ module Media
6
+ module Log
7
+ module Settings
8
+ module Format
9
+
10
+ def log_format
11
+ get('logformat').to_result!
12
+ end
13
+
14
+ def update_log_format(params = {})
15
+ put('logformat', params.to_api!)
16
+ end
17
+
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ require 'edge_cast/core_ext/hash'
2
+
3
+ module EdgeCast
4
+ class Client
5
+ module Media
6
+ module Log
7
+ module Settings
8
+ module Storage
9
+
10
+ def log_storage
11
+ get('logstorage').to_result!
12
+ end
13
+
14
+ def update_log_storage(params = {})
15
+ put('logstorage', params.to_api!)
16
+ end
17
+
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,15 @@
1
+ require 'edge_cast/core_ext/hash'
2
+
3
+ module EdgeCast
4
+ class Client
5
+ module Media
6
+ module Token
7
+
8
+ def encrypt_token_data(params = {})
9
+ put('token/encrypt', params.to_api!).to_result!
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,34 @@
1
+ module EdgeCast
2
+ class Client
3
+ module Media
4
+
5
+ TYPES = [
6
+ { :name => :wms, :keys => [:windows_media_streaming, :wms], :code => 1 },
7
+ { :name => :fms, :keys => [:flash_media_streaming, :fms], :code => 2 },
8
+ { :name => :hlo, :keys => [:http_large_object, :hlo], :code => 3 },
9
+ { :name => :hso, :keys => [:http_small_object, :hso], :code => 8 },
10
+ { :name => :adn, :keys => [:application_delivery_network, :adn], :code => 14 },
11
+ ]
12
+
13
+ def self.from_code(code)
14
+ TYPES.find { |type| type[:code] == code }
15
+ end
16
+
17
+ def self.valid_type?(media_type, action = nil)
18
+ case action
19
+ when :load
20
+ TYPES.select { |t| [:fms, :hlo, :hso, :adn].include?(t[:name]) }.any? { |t| t[:keys].include?(media_type) }
21
+ when :purge
22
+ TYPES.select { |t| [:wms, :fms, :hlo, :hso, :adn].include?(t[:name]) }.any? { |t| t[:keys].include?(media_type) }
23
+ else
24
+ !(from_key(media_type).nil? && from_code(media_type).nil?)
25
+ end
26
+ end
27
+
28
+ def self.from_key(media_type)
29
+ TYPES.find { |type| type[:keys].include?(media_type) }
30
+ end
31
+
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,46 @@
1
+ require 'edge_cast/config'
2
+ require 'edge_cast/connection'
3
+ require 'edge_cast/request'
4
+
5
+ module EdgeCast
6
+ # Wrapper for the EdgeCast REST API
7
+ #
8
+ # @note All methods have been separated into modules and follow the same grouping used in the EdgeCast API Documentation.
9
+ class Client
10
+
11
+ include EdgeCast::Connection
12
+ include EdgeCast::Request
13
+
14
+ require 'edge_cast/client/media'
15
+ require 'edge_cast/client/media/cache/management'
16
+ include EdgeCast::Client::Media::Cache::Management
17
+ require 'edge_cast/client/media/cache/settings/compression'
18
+ include EdgeCast::Client::Media::Cache::Settings::Compression
19
+ require 'edge_cast/client/media/cache/settings/query_string_caching'
20
+ include EdgeCast::Client::Media::Cache::Settings::QueryStringCaching
21
+ require 'edge_cast/client/media/cache/settings/query_string_logging'
22
+ include EdgeCast::Client::Media::Cache::Settings::QueryStringLogging
23
+
24
+ require 'edge_cast/client/media/log/settings/format'
25
+ include EdgeCast::Client::Media::Log::Settings::Format
26
+ require 'edge_cast/client/media/log/settings/storage'
27
+ include EdgeCast::Client::Media::Log::Settings::Storage
28
+
29
+ require 'edge_cast/client/media/token'
30
+ include EdgeCast::Client::Media::Token
31
+
32
+ attr_accessor *Config::VALID_OPTIONS_KEYS
33
+
34
+ # Initializes a new API object
35
+ #
36
+ # @param attrs [Hash]
37
+ # @return [EdgeCast::Client]
38
+ def initialize(attrs = {})
39
+ attrs = EdgeCast.options.merge(attrs)
40
+ Config::VALID_OPTIONS_KEYS.each do |key|
41
+ instance_variable_set("@#{key}".to_sym, attrs[key])
42
+ end
43
+ end
44
+
45
+ end
46
+ end
@@ -0,0 +1,58 @@
1
+ require 'edge_cast/version'
2
+
3
+ module EdgeCast
4
+ # Defines constants and methods related to configuration
5
+ module Config
6
+
7
+ # The HTTP connection adapter that will be used to connect if none is set
8
+ DEFAULT_ADAPTER = :net_http
9
+
10
+ # The Faraday connection options if none is set
11
+ DEFAULT_CONNECTION_OPTIONS = {}
12
+
13
+ DEFAULT_HOST = 'api.edgecast.com'
14
+
15
+ # The oauth token if none is set
16
+ DEFAULT_API_TOKEN = nil
17
+
18
+ # The value sent in the 'User-Agent' header if none is set
19
+ DEFAULT_USER_AGENT = "EdgeCast Ruby Gem #{EdgeCast::VERSION}"
20
+
21
+ # An array of valid keys in the options hash when configuring a {EdgeCast::Client}
22
+ VALID_OPTIONS_KEYS = [
23
+ :adapter,
24
+ :connection_options,
25
+ :account_number,
26
+ :api_token,
27
+ :user_agent
28
+ ]
29
+
30
+ attr_accessor *VALID_OPTIONS_KEYS
31
+
32
+ # When this module is extended, set all configuration options to their default values
33
+ def self.extended(base)
34
+ base.reset
35
+ end
36
+
37
+ # Convenience method to allow configuration options to be set in a block
38
+ def configure
39
+ yield self
40
+ self
41
+ end
42
+
43
+ # Create a hash of options and their values
44
+ def options
45
+ VALID_OPTIONS_KEYS.inject({}) { |opts, k| opts[k] = send(k); opts }
46
+ end
47
+
48
+ # Reset all configuration options to defaults
49
+ def reset
50
+ self.adapter = DEFAULT_ADAPTER
51
+ self.connection_options = DEFAULT_CONNECTION_OPTIONS
52
+ self.api_token = DEFAULT_API_TOKEN
53
+ self.user_agent = DEFAULT_USER_AGENT
54
+ self
55
+ end
56
+
57
+ end
58
+ end
@@ -0,0 +1,45 @@
1
+ require 'faraday'
2
+ require 'faraday_middleware'
3
+ require 'edge_cast/request/authorization'
4
+ require 'edge_cast/response/raise_client_error'
5
+ require 'edge_cast/response/raise_server_error'
6
+
7
+ module EdgeCast
8
+ module Connection
9
+
10
+ def endpoint
11
+ "https://#{EdgeCast::Config::DEFAULT_HOST}/v2/mcc/customers/#{account_number}"
12
+ end
13
+
14
+ private
15
+
16
+ # Returns a Faraday::Connection object
17
+ #
18
+ # @param options [Hash] A hash of options
19
+ # @return [Faraday::Connection]
20
+ def connection(options = {})
21
+ default_options = {
22
+ :headers => {
23
+ :accept => 'application/json',
24
+ :user_agent => user_agent,
25
+ :host => EdgeCast::Config::DEFAULT_HOST
26
+ },
27
+ :ssl => { :verify => false },
28
+ :url => endpoint,
29
+ }
30
+
31
+ @connection ||= Faraday.new(default_options.merge(connection_options)) do |builder|
32
+ builder.request :auth, api_token
33
+ builder.request :json
34
+ builder.request :multipart
35
+ builder.request :url_encoded
36
+
37
+ builder.response :client_error
38
+ builder.response :json
39
+ builder.response :server_error
40
+
41
+ builder.adapter(adapter)
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,29 @@
1
+ require 'edge_cast/core_ext/string'
2
+
3
+ class Hash
4
+
5
+ def symbolize_keys!
6
+ self.keys.each do |key|
7
+ value = delete(key)
8
+ self[key.to_sym] = value.respond_to?(:symbolize_keys!) ? value.symbolize_keys! : value
9
+ end
10
+ self
11
+ end
12
+
13
+ def to_result!
14
+ keys.each do |key|
15
+ value = delete(key)
16
+ self[key.to_s.underscore.to_sym] = value.respond_to?(:to_result!) ? value.to_result! : value
17
+ end
18
+ self
19
+ end
20
+
21
+ def to_api!
22
+ keys.each do |key|
23
+ value = delete(key)
24
+ self[key.to_s.camelize] = value.respond_to?(:to_api!) ? value.to_api! : value
25
+ end
26
+ self
27
+ end
28
+
29
+ end
@@ -0,0 +1,27 @@
1
+ class String
2
+
3
+ def underscore
4
+ word = self.to_s.dup
5
+ word.gsub!(/::/, '/')
6
+ word.gsub!(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2')
7
+ word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
8
+ word.tr!("-", "_")
9
+ word.downcase!
10
+ word
11
+ end
12
+
13
+ def camelize
14
+ string = self.to_s
15
+ string = string.sub(/^[a-z\d]*/) { $&.capitalize }
16
+ string.gsub(/(?:_|(\/))([a-z\d]*)/i) { "#{$1}#{$2.capitalize}" }.gsub('/', '::')
17
+ end
18
+
19
+ end
20
+
21
+ class Symbol
22
+
23
+ def camelize
24
+ self.to_s.camelize
25
+ end
26
+
27
+ end
@@ -0,0 +1,7 @@
1
+ require 'edge_cast/error/server_error'
2
+
3
+ module EdgeCast
4
+ # Raised when EdgeCast returns the HTTP status code 502
5
+ class Error::BadGateway < EdgeCast::Error::ServerError
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'edge_cast/error/client_error'
2
+
3
+ module EdgeCast
4
+ # Raised when EdgeCast returns the HTTP status code 400
5
+ class Error::BadRequest < EdgeCast::Error::ClientError
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'edge_cast/error'
2
+
3
+ module EdgeCast
4
+ # Raised when EdgeCast returns a 4xx HTTP status code
5
+ class Error::ClientError < EdgeCast::Error
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'edge_cast/error/client_error'
2
+
3
+ module EdgeCast
4
+ # Raised when EdgeCast returns the HTTP status code 403
5
+ class Error::Forbidden < EdgeCast::Error::ClientError
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'edge_cast/error/server_error'
2
+
3
+ module EdgeCast
4
+ # Raised when EdgeCast returns the HTTP status code 500
5
+ class Error::InternalServerError < EdgeCast::Error::ServerError
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'edge_cast/error/client_error'
2
+
3
+ module EdgeCast
4
+ # Raised when EdgeCast returns the HTTP status code 405
5
+ class Error::MethodNotAllowed < EdgeCast::Error::ClientError
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'edge_cast/error/client_error'
2
+
3
+ module EdgeCast
4
+ # Raised when EdgeCast returns the HTTP status code 406
5
+ class Error::NotAcceptable < EdgeCast::Error::ClientError
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'edge_cast/error/client_error'
2
+
3
+ module EdgeCast
4
+ # Raised when EdgeCast returns the HTTP status code 404
5
+ class Error::NotFound < EdgeCast::Error::ClientError
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'edge_cast/error'
2
+
3
+ module EdgeCast
4
+ # Raised when EdgeCast returns a 5xx HTTP status code
5
+ class Error::ServerError < EdgeCast::Error
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'edge_cast/error/server_error'
2
+
3
+ module EdgeCast
4
+ # Raised when EdgeCast returns the HTTP status code 503
5
+ class Error::ServiceUnavailable < EdgeCast::Error::ServerError
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'edge_cast/error/client_error'
2
+
3
+ module EdgeCast
4
+ # Raised when EdgeCast returns the HTTP status code 401
5
+ class Error::Unauthorized < EdgeCast::Error::ClientError
6
+ end
7
+ end
@@ -0,0 +1,17 @@
1
+ module EdgeCast
2
+ # Custom error class for rescuing from all EdgeCast errors
3
+ class Error < StandardError
4
+ attr_reader :http_headers
5
+
6
+ # Initializes a new Error object
7
+ #
8
+ # @param message [String]
9
+ # @param http_headers [Hash]
10
+ # @return [EdgeCast::Error]
11
+ def initialize(message, http_headers)
12
+ @http_headers = Hash[http_headers]
13
+ super(message)
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,20 @@
1
+ require 'faraday'
2
+
3
+ module EdgeCast
4
+ module Request
5
+ class Authorization < Faraday::Middleware
6
+ Faraday.register_middleware :request, :auth => lambda { Authorization }
7
+
8
+ def initialize(app, api_token)
9
+ @app, @api_token = app, api_token
10
+ end
11
+
12
+ def call(env)
13
+ env[:request_headers]['Authorization'] = "TOK:#{@api_token}"
14
+
15
+ @app.call(env)
16
+ end
17
+
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,42 @@
1
+ module EdgeCast
2
+ # Defines HTTP request methods
3
+ module Request
4
+ # Perform an HTTP GET request
5
+ def get(path, params = {}, options = {})
6
+ request(:get, path, params, options)
7
+ end
8
+
9
+ # Perform an HTTP POST request
10
+ def post(path, params = {}, options = {})
11
+ request(:post, path, params, options)
12
+ end
13
+
14
+ # Perform an HTTP PUT request
15
+ def put(path, params = {}, options = {})
16
+ request(:put, path, params, options)
17
+ end
18
+
19
+ # Perform an HTTP DELETE request
20
+ def delete(path, params = {}, options = {})
21
+ request(:delete, path, params, options)
22
+ end
23
+
24
+ private
25
+
26
+ # Perform an HTTP request
27
+ def request(method, path, params, options)
28
+ response = connection(options).run_request(method, nil, nil, nil) do |request|
29
+ request.options[:raw] = true if options[:raw]
30
+ case method.to_sym
31
+ when :delete, :get
32
+ request.url(path, params)
33
+ when :post, :put
34
+ request.path = path
35
+ request.body = params unless params.empty?
36
+ end
37
+ end
38
+ options[:raw] ? response : response.body
39
+ end
40
+
41
+ end
42
+ end
@@ -0,0 +1,50 @@
1
+ require 'faraday'
2
+ require 'edge_cast/error/bad_request'
3
+ require 'edge_cast/error/forbidden'
4
+ require 'edge_cast/error/method_not_allowed'
5
+ require 'edge_cast/error/not_acceptable'
6
+ require 'edge_cast/error/not_found'
7
+ require 'edge_cast/error/unauthorized'
8
+
9
+ module EdgeCast
10
+ module Response
11
+ class RaiseClientError < Faraday::Response::Middleware
12
+ Faraday.register_middleware :response, :client_error => lambda { RaiseClientError }
13
+
14
+ def on_complete(env)
15
+ case env[:status].to_i
16
+ when 400
17
+ raise EdgeCast::Error::BadRequest.new(error_body(env[:body]), env[:response_headers])
18
+ when 401
19
+ raise EdgeCast::Error::Unauthorized.new(error_body(env[:body]), env[:response_headers])
20
+ when 403
21
+ raise EdgeCast::Error::Forbidden.new(error_body(env[:body]), env[:response_headers])
22
+ when 404
23
+ raise EdgeCast::Error::NotFound.new(error_body(env[:body]), env[:response_headers])
24
+ when 405
25
+ raise EdgeCast::Error::MethodNotAllowed.new(error_body(env[:body]), env[:response_headers])
26
+ when 406
27
+ raise EdgeCast::Error::NotAcceptable.new(error_body(env[:body]), env[:response_headers])
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ def error_body(body)
34
+ if body.nil?
35
+ ''
36
+ elsif body['error']
37
+ body['error']
38
+ elsif body['errors']
39
+ first = Array(body['errors']).first
40
+ if first.kind_of?(Hash)
41
+ first['message'].chomp
42
+ else
43
+ first.chomp
44
+ end
45
+ end
46
+ end
47
+
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,20 @@
1
+ require 'faraday'
2
+ require 'edge_cast/error/bad_gateway'
3
+ require 'edge_cast/error/internal_server_error'
4
+ require 'edge_cast/error/service_unavailable'
5
+
6
+ module EdgeCast
7
+ module Response
8
+ class RaiseServerError < Faraday::Response::Middleware
9
+ Faraday.register_middleware :response, :server_error => lambda { RaiseServerError }
10
+
11
+ def on_complete(env)
12
+ case env[:status].to_i
13
+ when 500
14
+ raise EdgeCast::Error::InternalServerError.new("Something is technically wrong.", env[:response_headers])
15
+ end
16
+ end
17
+
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,3 @@
1
+ module EdgeCast
2
+ VERSION = '0.0.1'
3
+ end
data/lib/edge_cast.rb ADDED
@@ -0,0 +1,24 @@
1
+ require 'edge_cast/client'
2
+ require 'edge_cast/config'
3
+
4
+ module EdgeCast
5
+ extend Config
6
+ class << self
7
+ # Alias for EdgeCast::Client.new
8
+ #
9
+ # @return [EdgeCast::Client]
10
+ def new(options = {})
11
+ EdgeCast::Client.new(options)
12
+ end
13
+
14
+ # Delegate to EdgeCast::Client
15
+ def method_missing(method, *args, &block)
16
+ return super unless new.respond_to?(method)
17
+ new.send(method, *args, &block)
18
+ end
19
+
20
+ def respond_to?(method, include_private=false)
21
+ new.respond_to?(method, include_private) || super(method, include_private)
22
+ end
23
+ end
24
+ end
metadata ADDED
@@ -0,0 +1,160 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: edge_cast
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Rémy Coutable
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-11-12 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: faraday
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '0.8'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '0.8'
30
+ - !ruby/object:Gem::Dependency
31
+ name: faraday_middleware
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '0.8'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '0.8'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '2.11'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '2.11'
62
+ - !ruby/object:Gem::Dependency
63
+ name: vcr
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: '2.3'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: '2.3'
78
+ - !ruby/object:Gem::Dependency
79
+ name: webmock
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: '1.9'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: '1.9'
94
+ description: EdgeCast Web Services REST API Ruby wrapper.
95
+ email:
96
+ - remy@jilion.com
97
+ executables: []
98
+ extensions: []
99
+ extra_rdoc_files: []
100
+ files:
101
+ - lib/edge_cast/client/media/cache/management.rb
102
+ - lib/edge_cast/client/media/cache/settings/compression.rb
103
+ - lib/edge_cast/client/media/cache/settings/query_string_caching.rb
104
+ - lib/edge_cast/client/media/cache/settings/query_string_logging.rb
105
+ - lib/edge_cast/client/media/cache/settings.rb
106
+ - lib/edge_cast/client/media/log/settings/format.rb
107
+ - lib/edge_cast/client/media/log/settings/storage.rb
108
+ - lib/edge_cast/client/media/token.rb
109
+ - lib/edge_cast/client/media.rb
110
+ - lib/edge_cast/client.rb
111
+ - lib/edge_cast/config.rb
112
+ - lib/edge_cast/connection.rb
113
+ - lib/edge_cast/core_ext/hash.rb
114
+ - lib/edge_cast/core_ext/string.rb
115
+ - lib/edge_cast/error/bad_gateway.rb
116
+ - lib/edge_cast/error/bad_request.rb
117
+ - lib/edge_cast/error/client_error.rb
118
+ - lib/edge_cast/error/forbidden.rb
119
+ - lib/edge_cast/error/internal_server_error.rb
120
+ - lib/edge_cast/error/method_not_allowed.rb
121
+ - lib/edge_cast/error/not_acceptable.rb
122
+ - lib/edge_cast/error/not_found.rb
123
+ - lib/edge_cast/error/server_error.rb
124
+ - lib/edge_cast/error/service_unavailable.rb
125
+ - lib/edge_cast/error/unauthorized.rb
126
+ - lib/edge_cast/error.rb
127
+ - lib/edge_cast/request/authorization.rb
128
+ - lib/edge_cast/request.rb
129
+ - lib/edge_cast/response/raise_client_error.rb
130
+ - lib/edge_cast/response/raise_server_error.rb
131
+ - lib/edge_cast/version.rb
132
+ - lib/edge_cast.rb
133
+ - CHANGELOG.md
134
+ - LICENSE
135
+ - README.md
136
+ homepage: https://github.com/jilion/edge_cast
137
+ licenses: []
138
+ post_install_message:
139
+ rdoc_options: []
140
+ require_paths:
141
+ - lib
142
+ required_ruby_version: !ruby/object:Gem::Requirement
143
+ none: false
144
+ requirements:
145
+ - - ! '>='
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ required_rubygems_version: !ruby/object:Gem::Requirement
149
+ none: false
150
+ requirements:
151
+ - - ! '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ requirements: []
155
+ rubyforge_project:
156
+ rubygems_version: 1.8.23
157
+ signing_key:
158
+ specification_version: 3
159
+ summary: EdgeCast Web Services REST API Ruby wrapper.
160
+ test_files: []