sambatech 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.
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ coverage
6
+ InstalledFiles
7
+ lib/bundler/man
8
+ pkg
9
+ rdoc
10
+ spec/reports
11
+ test/tmp
12
+ test/version_tmp
13
+ tmp
14
+
15
+ # YARD artifacts
16
+ .yardoc
17
+ _yardoc
18
+ doc/
data/.rspec ADDED
@@ -0,0 +1,4 @@
1
+ --color
2
+ --format=nested
3
+ --backtrace
4
+
@@ -0,0 +1,47 @@
1
+ sambatech
2
+ =========
3
+
4
+ A Ruby wrapper for the Sambatech REST and Search APIs
5
+
6
+ ## History ##
7
+
8
+ I've made this Gem, because i need to migrate from Sambatech to an internal video plataform.
9
+ This Gem don't support *all* Sambatech API methods only the methods that I need for the migration.
10
+ All patchs/pull-requests are welcome :)
11
+
12
+ ## Example of use:
13
+
14
+ require "rubygems"
15
+ require "sambatech"
16
+
17
+ Sambatech.configure do |config|
18
+ config.key = 'config_key'
19
+ config.endpoint = "http://sambatech_api/2.0/"
20
+ end
21
+
22
+ client = Sambatech.client()
23
+
24
+ ### Get all medias that belongs to the categorie 42, and the media status is active
25
+
26
+ medias = client.all_medias({
27
+ :filter => 'id;title',
28
+ :search => "channelId:42;status:active",
29
+ :recursiveChannel => 'true',
30
+ :first => 0,
31
+ :limit => 2
32
+ })
33
+
34
+ ### Get a specific media info by id ###
35
+
36
+ media = client.media('8a4980263260ee801423cad08f11bcd',{})
37
+
38
+ ### Get Media file url
39
+
40
+ media_file = client.media_file_url(media.files.file.id,{})
41
+
42
+ ### Get channel info, parent ###
43
+
44
+ channel = client.channel(channel_id,{})
45
+
46
+
47
+
@@ -0,0 +1,3 @@
1
+ require "bundler/gem_tasks"
2
+ task :default => :spec
3
+
@@ -0,0 +1,52 @@
1
+ require 'faraday'
2
+
3
+ # @private
4
+ module FaradayMiddleware
5
+ # @private
6
+ class RaiseHttpException < Faraday::Middleware
7
+ def call(env)
8
+ @app.call(env).on_complete do |response|
9
+ case response[:status].to_i
10
+ when 400
11
+ raise Sambatech::BadRequest, error_message_400(response)
12
+ when 404
13
+ raise Sambatech::NotFound, error_message_400(response)
14
+ when 500
15
+ raise Sambatech::InternalServerError, error_message_500(response, "Something is technically wrong.")
16
+ when 503
17
+ raise Sambatech::ServiceUnavailable, error_message_500(response, "Sambatech is rate limiting your requests.")
18
+ end
19
+ end
20
+ end
21
+
22
+ def initialize(app)
23
+ super app
24
+ @parser = nil
25
+ end
26
+
27
+ private
28
+
29
+ def error_message_400(response)
30
+ "#{response[:method].to_s.upcase} #{response[:url].to_s}: #{response[:status]}#{error_body(response[:body])}"
31
+ end
32
+
33
+ def error_body(body)
34
+ # body gets passed as a string, not sure if it is passed as something else from other spots?
35
+ if not body.nil? and not body.empty? and body.kind_of?(String)
36
+ puts "Body: #{body}"
37
+ # removed multi_json thanks to wesnolte's commit
38
+ body = ::XML.parse(body)
39
+ end
40
+
41
+ if body.nil?
42
+ nil
43
+ elsif body['meta'] and body['meta']['error_message'] and not body['meta']['error_message'].empty?
44
+ ": #{body['meta']['error_message']}"
45
+ end
46
+ end
47
+
48
+ def error_message_500(response, body=nil)
49
+ "#{response[:method].to_s.upcase} #{response[:url].to_s}: #{[response[:status].to_s + ':', body].compact.join(' ')}"
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,26 @@
1
+ require File.expand_path('../sambatech/error', __FILE__)
2
+ require File.expand_path('../sambatech/configuration', __FILE__)
3
+ require File.expand_path('../sambatech/api', __FILE__)
4
+ require File.expand_path('../sambatech/client', __FILE__)
5
+
6
+ module Sambatech
7
+ extend Configuration
8
+
9
+ # Alias for Sambatech::Client.new
10
+ #
11
+ # @return [Sambatech::Client]
12
+ def self.client(options={})
13
+ Sambatech::Client.new(options)
14
+ end
15
+
16
+ # Delegate to Sambatech::Client
17
+ def self.method_missing(method, *args, &block)
18
+ return super unless client.respond_to?(method)
19
+ client.send(method, *args, &block)
20
+ end
21
+
22
+ # Delegate to Sambatech::Client
23
+ def self.respond_to?(method)
24
+ return client.respond_to?(method) || super
25
+ end
26
+ end
@@ -0,0 +1,22 @@
1
+ require File.expand_path('../connection', __FILE__)
2
+ require File.expand_path('../request', __FILE__)
3
+
4
+ module Sambatech
5
+ # @private
6
+ class API
7
+ # @private
8
+ attr_accessor *Configuration::VALID_OPTIONS_KEYS
9
+
10
+ # Creates a new API
11
+ def initialize(options={})
12
+ options = Sambatech.options.merge(options)
13
+ Configuration::VALID_OPTIONS_KEYS.each do |key|
14
+ send("#{key}=", options[key])
15
+ end
16
+ end
17
+
18
+ include Connection
19
+ include Request
20
+ end
21
+ end
22
+
@@ -0,0 +1,12 @@
1
+ module Sambatech
2
+ # Wrapper for the Sambatech REST API
3
+ #
4
+ # @note All methods have been separated into modules and follow the same grouping used in {TODO:doc_URL the Sambatech API Documentation}.
5
+ # @see TODO:doc_url
6
+ class Client < API
7
+ Dir[File.expand_path('../client/*.rb', __FILE__)].each{|f| require f}
8
+ include Sambatech::Client::Media
9
+ include Sambatech::Client::Channels
10
+ end
11
+ end
12
+
@@ -0,0 +1,31 @@
1
+ require "pp"
2
+ module Sambatech
3
+ class Client
4
+ # Defines methods related to media items
5
+ module Channels
6
+ # Returns extended information of a given media item
7
+ #
8
+ # @overload media_item(id)
9
+ # @param media-id [Hash] An Sambatech media item ID
10
+ # @return [Hashie::Mash] The requested media item.
11
+ # @example Return extended information for media item 1234
12
+ # Instagram.media_item(1324)
13
+ # @format :xml
14
+ #
15
+ # If getting this data of a protected user, you must authenticate (and be allowed to see that user).
16
+ # @rate_limited true
17
+ # @see TODO:docs url
18
+ # first [Número] (opcional) Posição inicial da lista. (valor padrão:0) query
19
+ # limit [Número] (opcional) Número de elementos na lista, limitado a 50. (valor padrão:50) query
20
+ # search [String] (opcional) O parâmetro search deve ser usado para definir critérios para a busca. Entre parênteses estão os operadores usados durante a busca (implícitos). Os únicos operadores que devem ser explicitados são: (>, <, >=, <=). O operador (==) deve ser usado como no exemplo anterior. Os campos do objeto Media que podem ser usados são:
21
+ def channel(*args,options)
22
+ id = args.first || 'self'
23
+ response = get("channels/#{id}", options)
24
+ response["Channel"]
25
+ end
26
+
27
+ end
28
+ end
29
+ end
30
+
31
+
@@ -0,0 +1,41 @@
1
+ module Sambatech
2
+ class Client
3
+ # Defines methods related to media items
4
+ module Media
5
+ # Returns extended information of a given media item
6
+ #
7
+ # @overload media_item(id)
8
+ # @param media-id [Hash] An Sambatech media item ID
9
+ # @return [Hashie::Mash] The requested media item.
10
+ # @example Return extended information for media item 1234
11
+ # Instagram.media_item(1324)
12
+ # @format :xml
13
+ #
14
+ # If getting this data of a protected user, you must authenticate (and be allowed to see that user).
15
+ # @rate_limited true
16
+ # @see TODO:docs url
17
+ # first [Número] (opcional) Posição inicial da lista. (valor padrão:0) query
18
+ # limit [Número] (opcional) Número de elementos na lista, limitado a 50. (valor padrão:50) query
19
+ # search [String] (opcional) O parâmetro search deve ser usado para definir critérios para a busca. Entre parênteses estão os operadores usados durante a busca (implícitos). Os únicos operadores que devem ser explicitados são: (>, <, >=, <=). O operador (==) deve ser usado como no exemplo anterior. Os campos do objeto Media que podem ser usados são:
20
+ def media(*args,options)
21
+ id = args.first || 'self'
22
+ response = get("medias/#{id}", options)
23
+ response["Media"]
24
+ end
25
+
26
+ def media_file_url(*args,options)
27
+ id = args.first || 'self'
28
+ response = get("medias/urls/#{id}", options)
29
+ response["URLs"]["URL"]["uri"]
30
+ end
31
+
32
+ def all_medias(*args,options)
33
+ id = args.first || 'self'
34
+ response = get("medias", options)
35
+ response
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+
@@ -0,0 +1,75 @@
1
+ require 'faraday'
2
+ require File.expand_path('../version', __FILE__)
3
+
4
+ module Sambatech
5
+ # Defines constants and methods related to configuration
6
+ module Configuration
7
+ # An array of valid keys in the options hash when configuring a {Sambatech::API}
8
+ VALID_OPTIONS_KEYS = [
9
+ :adapter,
10
+ :key,
11
+ :endpoint,
12
+ :user_agent,
13
+ :proxy
14
+ ].freeze
15
+
16
+ # An array of valid request/response formats
17
+ #
18
+ # @note Not all methods support the XML format.
19
+ VALID_FORMATS = [
20
+ :xml].freeze
21
+
22
+ # The adapter that will be used to connect if none is set
23
+ #
24
+ # @note The default faraday adapter is Net::HTTP.
25
+ DEFAULT_ADAPTER = Faraday.default_adapter
26
+
27
+ # By default, don't set a user key
28
+ DEFAULT_KEY = 'you need to set a key'
29
+
30
+ # The endpoint that will be used to connect if none is set
31
+ #
32
+ # @note There is no reason to use any other endpoint at this time
33
+ DEFAULT_ENDPOINT = 'http://fast.api.liquidplatform.com/2.0'.freeze
34
+
35
+ # The response format appended to the path and sent in the 'Accept' header if none is set
36
+ #
37
+ # @note XML is the only available format at this time
38
+ DEFAULT_FORMAT = :xml
39
+
40
+ # By default, don't use a proxy server
41
+ DEFAULT_PROXY = nil
42
+
43
+ # The user agent that will be sent to the API endpoint if none is set
44
+ DEFAULT_USER_AGENT = "Sambatech Ruby Gem #{Sambatech::VERSION}".freeze
45
+
46
+ # @private
47
+ attr_accessor *VALID_OPTIONS_KEYS
48
+
49
+ # When this module is extended, set all configuration options to their default values
50
+ def self.extended(base)
51
+ base.reset
52
+ end
53
+
54
+ # Convenience method to allow configuration options to be set in a block
55
+ def configure
56
+ yield self
57
+ end
58
+
59
+ # Create a hash of options and their values
60
+ def options
61
+ VALID_OPTIONS_KEYS.inject({}) do |option, key|
62
+ option.merge!(key => send(key))
63
+ end
64
+ end
65
+
66
+ # Reset all configuration options to defaults
67
+ def reset
68
+ self.adapter = DEFAULT_ADAPTER
69
+ self.key = DEFAULT_KEY
70
+ self.endpoint = DEFAULT_ENDPOINT
71
+ self.user_agent = DEFAULT_USER_AGENT
72
+ self.proxy = DEFAULT_PROXY
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,30 @@
1
+ require 'faraday_middleware'
2
+ Dir[File.expand_path('../../faraday/*.rb', __FILE__)].each{|f| require f}
3
+
4
+ module Sambatech
5
+ # @private
6
+ module Connection
7
+ private
8
+
9
+ def connection(raw=false)
10
+ options = {
11
+ :headers => {'Accept' => "application/xml; charset=utf-8", 'User-Agent' => user_agent},
12
+ :proxy => proxy,
13
+ :ssl => {:verify => false},
14
+ :url => endpoint,
15
+ :params => {:key => key},
16
+ }
17
+
18
+ Faraday::Connection.new(options) do |connection|
19
+ connection.use Faraday::Request::UrlEncoded
20
+ connection.use FaradayMiddleware::Mashify unless raw
21
+ unless raw
22
+ connection.use Faraday::Response::ParseXml
23
+ end
24
+ connection.use FaradayMiddleware::RaiseHttpException
25
+ connection.adapter(adapter)
26
+ end
27
+ end
28
+ end
29
+ end
30
+
@@ -0,0 +1,20 @@
1
+ module Sambatech
2
+ # Custom error class for rescuing from all Sambatech errors
3
+ class Error < StandardError; end
4
+
5
+ # Raised when Sambatech returns the HTTP status code 400
6
+ class BadRequest < Error; end
7
+
8
+ # Raised when Sambatech returns the HTTP status code 404
9
+ class NotFound < Error; end
10
+
11
+ # Raised when Sambatech returns the HTTP status code 500
12
+ class InternalServerError < Error; end
13
+
14
+ # Raised when Sambatech returns the HTTP status code 503
15
+ class ServiceUnavailable < Error; end
16
+
17
+ # Raised when a subscription payload hash is invalid
18
+ class InvalidSignature < Error; end
19
+ end
20
+
@@ -0,0 +1,46 @@
1
+ module Sambatech
2
+ # Defines HTTP request methods
3
+ module Request
4
+ # Perform an HTTP GET request
5
+ def get(path, options={}, raw=false, unformatted=false)
6
+ request(:get, path, options, raw, unformatted)
7
+ end
8
+
9
+ # Perform an HTTP POST request
10
+ def post(path, options={}, raw=false, unformatted=false)
11
+ request(:post, path, options, raw, unformatted)
12
+ end
13
+
14
+ # Perform an HTTP PUT request
15
+ def put(path, options={}, raw=false, unformatted=false)
16
+ request(:put, path, options, raw, unformatted)
17
+ end
18
+
19
+ # Perform an HTTP DELETE request
20
+ def delete(path, options={}, raw=false, unformatted=false)
21
+ request(:delete, path, options, raw, unformatted)
22
+ end
23
+
24
+ private
25
+
26
+ # Perform an HTTP request
27
+ def request(method, path, options, raw=false, unformatted=false)
28
+ response = connection(raw).send(method) do |request|
29
+ path = formatted_path(path) unless unformatted
30
+ case method
31
+ when :get, :delete
32
+ request.url(path, options)
33
+ when :post, :put
34
+ request.path = path
35
+ request.body = options unless options.empty?
36
+ end
37
+ end
38
+ raw ? response : response.body
39
+ end
40
+
41
+ def formatted_path(path)
42
+ [path].compact.join('.')
43
+ end
44
+ end
45
+ end
46
+
@@ -0,0 +1,3 @@
1
+ module Sambatech
2
+ VERSION = '0.0.1'.freeze unless defined?(::Sambatech::VERSION)
3
+ end
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "sambatech/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.add_development_dependency('rspec', '~> 2.11.0')
7
+ s.add_development_dependency('webmock', '~> 1.6')
8
+ s.add_development_dependency('bluecloth', '~> 2.0.11')
9
+ s.add_runtime_dependency('faraday', ['>= 0.8.4', '< 0.9'])
10
+ s.add_runtime_dependency('faraday_middleware', ['>= 0.9.0', '< 0.10'])
11
+ s.add_runtime_dependency('multi_xml', ['~> 0.5.1'])
12
+ s.add_runtime_dependency('hashie', ['~> 1.2.0'])
13
+ s.add_runtime_dependency('rash', ['~> 0.3.2'])
14
+ s.name = 'sambatech'
15
+ s.version = Sambatech::VERSION.dup
16
+ s.date = '2012-12-05'
17
+ s.summary = %q{Ruby wrapper for the Sambatech API}
18
+ s.description = "A simple hello world gem"
19
+ s.authors = ["Lindolfo 'Lorn' Rodrigues"]
20
+ s.email = 'lorn@lornlab.org'
21
+ s.files = `git ls-files`.split("\n")
22
+ s.homepage = 'http://rubygems.org/gems/sambatech'
23
+ end
@@ -0,0 +1,65 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe Sambatech::API do
4
+ before do
5
+ @keys = Sambatech::Configuration::VALID_OPTIONS_KEYS
6
+ end
7
+
8
+ context "with module configuration" do
9
+
10
+ before do
11
+ Sambatech.configure do |config|
12
+ @keys.each do |key|
13
+ config.send("#{key}=", key)
14
+ end
15
+ end
16
+ end
17
+
18
+ after do
19
+ Sambatech.reset
20
+ end
21
+
22
+ it "should inherit module configuration" do
23
+ api = Sambatech::API.new
24
+ @keys.each do |key|
25
+ api.send(key).should == key
26
+ end
27
+ end
28
+
29
+ context "with class configuration" do
30
+
31
+ before do
32
+ @configuration = {
33
+ :key => 'AT',
34
+ :adapter => :typhoeus,
35
+ :endpoint => 'http://tumblr.com/',
36
+ :proxy => 'http://shayne:sekret@proxy.example.com:8080',
37
+ :user_agent => 'Custom User Agent',
38
+ }
39
+ end
40
+
41
+ context "during initialization"
42
+
43
+ it "should override module configuration" do
44
+ api = Sambatech::API.new(@configuration)
45
+ @keys.each do |key|
46
+ api.send(key).should == @configuration[key]
47
+ end
48
+ end
49
+
50
+ context "after initilization" do
51
+
52
+ it "should override module configuration after initialization" do
53
+ api = Sambatech::API.new
54
+ @configuration.each do |key, value|
55
+ api.send("#{key}=", value)
56
+ end
57
+ @keys.each do |key|
58
+ api.send(key).should == @configuration[key]
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+
65
+ end
@@ -0,0 +1,10 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe Sambatech::Client do
4
+ it "should connect using the endpoint configuration" do
5
+ client = Sambatech::Client.new
6
+ endpoint = URI.parse(client.endpoint)
7
+ connection = client.send(:connection).build_url(nil).to_s
8
+ (connection).should == endpoint.to_s.concat("?key=you+need+to+set+a+key")
9
+ end
10
+ end
@@ -0,0 +1,74 @@
1
+ require File.expand_path('../spec_helper', __FILE__)
2
+
3
+ describe Sambatech do
4
+ after do
5
+ Sambatech.reset
6
+ end
7
+
8
+ context "when delegating to a client" do
9
+
10
+ before do
11
+ stub_get("users/self/feed.json").
12
+ to_return(:body => fixture("user_media_feed.json"), :headers => {:content_type => "application/json; charset=utf-8"})
13
+ end
14
+
15
+ end
16
+
17
+ describe ".client" do
18
+ it "should be a Sambatech::Client" do
19
+ Sambatech.client.should be_a Sambatech::Client
20
+ end
21
+ end
22
+
23
+ describe ".adapter" do
24
+ it "should return the default adapter" do
25
+ Sambatech.adapter.should == Sambatech::Configuration::DEFAULT_ADAPTER
26
+ end
27
+ end
28
+
29
+ describe ".adapter=" do
30
+ it "should set the adapter" do
31
+ Sambatech.adapter = :typhoeus
32
+ Sambatech.adapter.should == :typhoeus
33
+ end
34
+ end
35
+
36
+ describe ".endpoint" do
37
+ it "should return the default endpoint" do
38
+ Sambatech.endpoint.should == Sambatech::Configuration::DEFAULT_ENDPOINT
39
+ end
40
+ end
41
+
42
+ describe ".endpoint=" do
43
+ it "should set the endpoint" do
44
+ Sambatech.endpoint = 'http://tumblr.com'
45
+ Sambatech.endpoint.should == 'http://tumblr.com'
46
+ end
47
+ end
48
+
49
+ describe ".user_agent" do
50
+ it "should return the default user agent" do
51
+ Sambatech.user_agent.should == Sambatech::Configuration::DEFAULT_USER_AGENT
52
+ end
53
+ end
54
+
55
+ describe ".user_agent=" do
56
+ it "should set the user_agent" do
57
+ Sambatech.user_agent = 'Custom User Agent'
58
+ Sambatech.user_agent.should == 'Custom User Agent'
59
+ end
60
+ end
61
+
62
+ describe ".configure" do
63
+
64
+ Sambatech::Configuration::VALID_OPTIONS_KEYS.each do |key|
65
+
66
+ it "should set the #{key}" do
67
+ Sambatech.configure do |config|
68
+ config.send("#{key}=", key)
69
+ Sambatech.send(key).should == key
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,58 @@
1
+ begin
2
+ require 'simplecov'
3
+ rescue LoadError
4
+ # ignore
5
+ else
6
+ SimpleCov.start do
7
+ add_group 'Sambatech', 'lib/Sambatech'
8
+ add_group 'Specs', 'spec'
9
+ end
10
+ end
11
+
12
+ require File.expand_path('../../lib/Sambatech', __FILE__)
13
+
14
+ require 'rspec'
15
+ require 'webmock/rspec'
16
+ RSpec.configure do |config|
17
+ config.include WebMock::API
18
+ end
19
+
20
+ def a_delete(path)
21
+ a_request(:delete, Sambatech.endpoint + path)
22
+ end
23
+
24
+ def a_get(path)
25
+ a_request(:get, Sambatech.endpoint + path)
26
+ end
27
+
28
+ def a_post(path)
29
+ a_request(:post, Sambatech.endpoint + path)
30
+ end
31
+
32
+ def a_put(path)
33
+ a_request(:put, Sambatech.endpoint + path)
34
+ end
35
+
36
+ def stub_delete(path)
37
+ stub_request(:delete, Sambatech.endpoint + path)
38
+ end
39
+
40
+ def stub_get(path)
41
+ stub_request(:get, Sambatech.endpoint + path)
42
+ end
43
+
44
+ def stub_post(path)
45
+ stub_request(:post, Sambatech.endpoint + path)
46
+ end
47
+
48
+ def stub_put(path)
49
+ stub_request(:put, Sambatech.endpoint + path)
50
+ end
51
+
52
+ def fixture_path
53
+ File.expand_path("../fixtures", __FILE__)
54
+ end
55
+
56
+ def fixture(file)
57
+ File.new(fixture_path + '/' + file)
58
+ end
metadata ADDED
@@ -0,0 +1,205 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sambatech
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Lindolfo 'Lorn' Rodrigues
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-12-05 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 2.11.0
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 2.11.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: webmock
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '1.6'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '1.6'
46
+ - !ruby/object:Gem::Dependency
47
+ name: bluecloth
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 2.0.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.0.11
62
+ - !ruby/object:Gem::Dependency
63
+ name: faraday
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: 0.8.4
70
+ - - <
71
+ - !ruby/object:Gem::Version
72
+ version: '0.9'
73
+ type: :runtime
74
+ prerelease: false
75
+ version_requirements: !ruby/object:Gem::Requirement
76
+ none: false
77
+ requirements:
78
+ - - ! '>='
79
+ - !ruby/object:Gem::Version
80
+ version: 0.8.4
81
+ - - <
82
+ - !ruby/object:Gem::Version
83
+ version: '0.9'
84
+ - !ruby/object:Gem::Dependency
85
+ name: faraday_middleware
86
+ requirement: !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ! '>='
90
+ - !ruby/object:Gem::Version
91
+ version: 0.9.0
92
+ - - <
93
+ - !ruby/object:Gem::Version
94
+ version: '0.10'
95
+ type: :runtime
96
+ prerelease: false
97
+ version_requirements: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: 0.9.0
103
+ - - <
104
+ - !ruby/object:Gem::Version
105
+ version: '0.10'
106
+ - !ruby/object:Gem::Dependency
107
+ name: multi_xml
108
+ requirement: !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ~>
112
+ - !ruby/object:Gem::Version
113
+ version: 0.5.1
114
+ type: :runtime
115
+ prerelease: false
116
+ version_requirements: !ruby/object:Gem::Requirement
117
+ none: false
118
+ requirements:
119
+ - - ~>
120
+ - !ruby/object:Gem::Version
121
+ version: 0.5.1
122
+ - !ruby/object:Gem::Dependency
123
+ name: hashie
124
+ requirement: !ruby/object:Gem::Requirement
125
+ none: false
126
+ requirements:
127
+ - - ~>
128
+ - !ruby/object:Gem::Version
129
+ version: 1.2.0
130
+ type: :runtime
131
+ prerelease: false
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ none: false
134
+ requirements:
135
+ - - ~>
136
+ - !ruby/object:Gem::Version
137
+ version: 1.2.0
138
+ - !ruby/object:Gem::Dependency
139
+ name: rash
140
+ requirement: !ruby/object:Gem::Requirement
141
+ none: false
142
+ requirements:
143
+ - - ~>
144
+ - !ruby/object:Gem::Version
145
+ version: 0.3.2
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ none: false
150
+ requirements:
151
+ - - ~>
152
+ - !ruby/object:Gem::Version
153
+ version: 0.3.2
154
+ description: A simple hello world gem
155
+ email: lorn@lornlab.org
156
+ executables: []
157
+ extensions: []
158
+ extra_rdoc_files: []
159
+ files:
160
+ - .gitignore
161
+ - .rspec
162
+ - README.md
163
+ - Rakefile
164
+ - lib/faraday/raise_http_exception.rb
165
+ - lib/sambatech.rb
166
+ - lib/sambatech/api.rb
167
+ - lib/sambatech/client.rb
168
+ - lib/sambatech/client/channels.rb
169
+ - lib/sambatech/client/media.rb
170
+ - lib/sambatech/configuration.rb
171
+ - lib/sambatech/connection.rb
172
+ - lib/sambatech/error.rb
173
+ - lib/sambatech/request.rb
174
+ - lib/sambatech/version.rb
175
+ - sambatech.gemspec
176
+ - spec/sambatech/api_spec.rb
177
+ - spec/sambatech/client_spec.rb
178
+ - spec/sambatech_spec.rb
179
+ - spec/spec_helper.rb
180
+ homepage: http://rubygems.org/gems/sambatech
181
+ licenses: []
182
+ post_install_message:
183
+ rdoc_options: []
184
+ require_paths:
185
+ - lib
186
+ required_ruby_version: !ruby/object:Gem::Requirement
187
+ none: false
188
+ requirements:
189
+ - - ! '>='
190
+ - !ruby/object:Gem::Version
191
+ version: '0'
192
+ required_rubygems_version: !ruby/object:Gem::Requirement
193
+ none: false
194
+ requirements:
195
+ - - ! '>='
196
+ - !ruby/object:Gem::Version
197
+ version: '0'
198
+ requirements: []
199
+ rubyforge_project:
200
+ rubygems_version: 1.8.24
201
+ signing_key:
202
+ specification_version: 3
203
+ summary: Ruby wrapper for the Sambatech API
204
+ test_files: []
205
+ has_rdoc: