flix 0.0.1 → 0.0.2
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.
- data/flix.gemspec +10 -3
- data/lib/flix.rb +30 -2
- data/lib/flix/api.rb +58 -0
- data/lib/flix/client.rb +103 -0
- data/lib/flix/configurable.rb +69 -0
- data/lib/flix/default.rb +115 -0
- data/lib/flix/identity_map.rb +22 -0
- data/lib/flix/user.rb +9 -0
- data/lib/flix/version.rb +1 -1
- metadata +91 -5
data/flix.gemspec
CHANGED
@@ -2,11 +2,18 @@
|
|
2
2
|
require File.expand_path('../lib/flix/version', __FILE__)
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
|
+
gem.add_dependency 'faraday', '~> 0.8'
|
6
|
+
gem.add_dependency 'faraday_middleware', '~> 0.8'
|
7
|
+
gem.add_dependency 'multi_json', '~> 1.3'
|
8
|
+
gem.add_dependency 'simple_oauth', '~> 0.1.6' #not sure if this is needed
|
9
|
+
|
10
|
+
gem.add_development_dependency 'json'
|
11
|
+
|
5
12
|
gem.authors = ["Andrew Gertig"]
|
6
13
|
gem.email = ["andrew@otherscreen.com"]
|
7
|
-
gem.description = %q{
|
8
|
-
gem.summary = %q{
|
9
|
-
gem.homepage = ""
|
14
|
+
gem.description = %q{A Ruby wrapper for the API}
|
15
|
+
gem.summary = %q{API client}
|
16
|
+
gem.homepage = "https://github.com/AndrewGertig/flix"
|
10
17
|
|
11
18
|
gem.files = `git ls-files`.split($\)
|
12
19
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
data/lib/flix.rb
CHANGED
@@ -1,5 +1,33 @@
|
|
1
|
-
require "flix/version"
|
1
|
+
# require "flix/version"
|
2
|
+
require 'flix/client'
|
3
|
+
require 'flix/configurable'
|
2
4
|
|
3
5
|
module Flix
|
4
|
-
|
6
|
+
class << self
|
7
|
+
include Flix::Configurable
|
8
|
+
|
9
|
+
# Delegate to a Flix::Client
|
10
|
+
#
|
11
|
+
# @return [Flix::Client]
|
12
|
+
def client
|
13
|
+
if @client && @client.cache_key == options.hash
|
14
|
+
@client
|
15
|
+
else
|
16
|
+
@client = Flix::Client.new(options)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def respond_to_missing?(method_name, include_private=false); client.respond_to?(method_name, include_private); end if RUBY_VERSION >= "1.9"
|
21
|
+
def respond_to?(method_name, include_private=false); client.respond_to?(method_name, include_private) || super; end if RUBY_VERSION < "1.9"
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def method_missing(method_name, *args, &block)
|
26
|
+
return super unless client.respond_to?(method_name)
|
27
|
+
client.send(method_name, *args, &block)
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
5
31
|
end
|
32
|
+
|
33
|
+
Flix.setup
|
data/lib/flix/api.rb
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
# require 'twitter/user'
|
2
|
+
|
3
|
+
module Twitter
|
4
|
+
module API
|
5
|
+
|
6
|
+
# def user(*args)
|
7
|
+
# options = args.extract_options!
|
8
|
+
# if user = args.pop
|
9
|
+
# options.merge_user!(user)
|
10
|
+
# object_from_response(Twitter::User, :get, "/1/users/show.json", options)
|
11
|
+
# end
|
12
|
+
# end
|
13
|
+
|
14
|
+
def user(*args)
|
15
|
+
options = args.extract_options!
|
16
|
+
if netflix_uid = args.pop
|
17
|
+
client = shared_client(user)
|
18
|
+
url = "/users/#{netflix_uid}"
|
19
|
+
# puts "get this URL #{url}"
|
20
|
+
|
21
|
+
response = from_response(:get, url, {output: "json"}, options)
|
22
|
+
|
23
|
+
# response = client.get do |req|
|
24
|
+
# req.url url
|
25
|
+
# req.params['output'] = "json"
|
26
|
+
# end
|
27
|
+
|
28
|
+
puts "&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"
|
29
|
+
puts "RECEIVED FROM NETFLIX"
|
30
|
+
puts "-------------HEADERS-----------------"
|
31
|
+
puts "#{response.headers}"
|
32
|
+
puts "----------------BODY--------------"
|
33
|
+
puts "#{response.body}"
|
34
|
+
puts "----------------------------------"
|
35
|
+
|
36
|
+
return response.body
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
# # @param klass [Class]
|
43
|
+
# # @param request_method [Symbol]
|
44
|
+
# # @param url [String]
|
45
|
+
# # @param params [Hash]
|
46
|
+
# # @param options [Hash]
|
47
|
+
# # @return [Object]
|
48
|
+
# def object_from_response(klass, request_method, url, params={}, options={})
|
49
|
+
# response = send(request_method.to_sym, url, params, options)
|
50
|
+
# klass.from_response(response)
|
51
|
+
# end
|
52
|
+
|
53
|
+
def from_response(request_method, url, params={}, options={})
|
54
|
+
response = send(request_method.to_sym, url, params, options)
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
data/lib/flix/client.rb
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'faraday_middleware'
|
3
|
+
require 'flix/configurable'
|
4
|
+
|
5
|
+
require 'multi_json'
|
6
|
+
require 'flix/api'
|
7
|
+
# require 'twitter/error/client_error'
|
8
|
+
# require 'twitter/error/decode_error'
|
9
|
+
# require 'twitter/rate_limit'
|
10
|
+
require 'simple_oauth'
|
11
|
+
require 'uri'
|
12
|
+
module Flix
|
13
|
+
|
14
|
+
class Client
|
15
|
+
include Flix::API
|
16
|
+
include Flix::Configurable
|
17
|
+
|
18
|
+
# Initializes a new Client object
|
19
|
+
#
|
20
|
+
# @param options [Hash]
|
21
|
+
# @return [Flix::Client]
|
22
|
+
def initialize(options={})
|
23
|
+
Flix::Configurable.keys.each do |key|
|
24
|
+
instance_variable_set(:"@#{key}", options[key] || Flix.instance_variable_get(:"@#{key}"))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# Perform an HTTP DELETE request
|
29
|
+
def delete(path, params={}, options={})
|
30
|
+
request(:delete, path, params, options)
|
31
|
+
end
|
32
|
+
|
33
|
+
# Perform an HTTP GET request
|
34
|
+
def get(path, params={}, options={})
|
35
|
+
request(:get, path, params, options)
|
36
|
+
end
|
37
|
+
|
38
|
+
# Perform an HTTP POST request
|
39
|
+
def post(path, params={}, options={})
|
40
|
+
request(:post, path, params, options)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Perform an HTTP UPDATE request
|
44
|
+
def put(path, params={}, options={})
|
45
|
+
request(:put, path, params, options)
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
# Returns a Faraday::Connection object
|
51
|
+
#
|
52
|
+
# @return [Faraday::Connection]
|
53
|
+
def connection
|
54
|
+
@connection ||= Faraday.new(@endpoint, @connection_options.merge(:builder => @middleware))
|
55
|
+
end
|
56
|
+
|
57
|
+
# Perform an HTTP request
|
58
|
+
#
|
59
|
+
# @raise [Flix::Error::ClientError, Flix::Error::DecodeError]
|
60
|
+
def request(method, path, params={}, options={})
|
61
|
+
uri = options[:endpoint] || @endpoint
|
62
|
+
uri = URI(uri) unless uri.respond_to?(:host)
|
63
|
+
uri += path
|
64
|
+
request_headers = {}
|
65
|
+
|
66
|
+
if credentials?
|
67
|
+
authorization = auth_header(method, uri, params)
|
68
|
+
request_headers[:authorization] = authorization.to_s
|
69
|
+
end
|
70
|
+
|
71
|
+
connection.url_prefix = options[:endpoint] || @endpoint
|
72
|
+
|
73
|
+
response = connection.run_request(method.to_sym, path, nil, request_headers) do |request|
|
74
|
+
unless params.empty?
|
75
|
+
case request.method
|
76
|
+
when :post, :put
|
77
|
+
request.body = params
|
78
|
+
else
|
79
|
+
request.params.update(params)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
yield request if block_given?
|
83
|
+
end.env
|
84
|
+
|
85
|
+
# @rate_limit.update(response[:response_headers])
|
86
|
+
|
87
|
+
response
|
88
|
+
|
89
|
+
rescue Faraday::Error::ClientError
|
90
|
+
# raise Flix::Error::ClientError
|
91
|
+
raise "Faraday Oops".to_yaml
|
92
|
+
rescue MultiJson::DecodeError
|
93
|
+
# raise Flix::Error::DecodeError
|
94
|
+
raise "MultiJson Oops".to_yaml
|
95
|
+
end
|
96
|
+
|
97
|
+
def auth_header(method, uri, params={})
|
98
|
+
# When posting a file, don't sign any params
|
99
|
+
signature_params = [:post, :put].include?(method.to_sym) && params.values.any?{|value| value.is_a?(File) || (value.is_a?(Hash) && (value[:io].is_a?(IO) || value[:io].is_a?(StringIO)))} ? {} : params
|
100
|
+
SimpleOAuth::Header.new(method, uri, signature_params, credentials)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'flix/default'
|
2
|
+
|
3
|
+
module Flix
|
4
|
+
module Configurable
|
5
|
+
attr_writer :consumer_key, :consumer_secret, :oauth_token, :oauth_token_secret
|
6
|
+
attr_accessor :endpoint, :connection_options, :middleware, :identity_map
|
7
|
+
# attr_accessor :media_endpoint, :search_endpoint,
|
8
|
+
class << self
|
9
|
+
|
10
|
+
def keys
|
11
|
+
@keys ||= [
|
12
|
+
:consumer_key,
|
13
|
+
:consumer_secret,
|
14
|
+
:oauth_token,
|
15
|
+
:oauth_token_secret,
|
16
|
+
:endpoint,
|
17
|
+
:connection_options,
|
18
|
+
:middleware,
|
19
|
+
:identity_map,
|
20
|
+
# :media_endpoint,
|
21
|
+
# :search_endpoint,
|
22
|
+
]
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
# Convenience method to allow configuration options to be set in a block
|
28
|
+
def configure
|
29
|
+
yield self
|
30
|
+
self
|
31
|
+
end
|
32
|
+
|
33
|
+
# @return [Boolean]
|
34
|
+
def credentials?
|
35
|
+
credentials.values.all?
|
36
|
+
end
|
37
|
+
|
38
|
+
# @return [Fixnum]
|
39
|
+
def cache_key
|
40
|
+
options.hash
|
41
|
+
end
|
42
|
+
|
43
|
+
def reset!
|
44
|
+
Flix::Configurable.keys.each do |key|
|
45
|
+
instance_variable_set(:"@#{key}", Flix::Default.options[key])
|
46
|
+
end
|
47
|
+
self
|
48
|
+
end
|
49
|
+
alias setup reset!
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
# @return [Hash]
|
54
|
+
def credentials
|
55
|
+
{
|
56
|
+
:consumer_key => @consumer_key,
|
57
|
+
:consumer_secret => @consumer_secret,
|
58
|
+
:token => @oauth_token,
|
59
|
+
:token_secret => @oauth_token_secret,
|
60
|
+
}
|
61
|
+
end
|
62
|
+
|
63
|
+
# @return [Hash]
|
64
|
+
def options
|
65
|
+
Hash[Flix::Configurable.keys.map{|key| [key, instance_variable_get(:"@#{key}")]}]
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|
data/lib/flix/default.rb
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'flix/configurable'
|
3
|
+
# require 'flix/error/client_error'
|
4
|
+
# require 'flix/error/server_error'
|
5
|
+
require 'flix/identity_map'
|
6
|
+
# require 'flix/request/multipart_with_file'
|
7
|
+
# require 'flix/response/parse_json'
|
8
|
+
# require 'flix/response/raise_error'
|
9
|
+
require 'flix/version'
|
10
|
+
|
11
|
+
module Flix
|
12
|
+
module Default
|
13
|
+
ENDPOINT = 'http://api.netflix.com' unless defined? ENDPOINT
|
14
|
+
# MEDIA_ENDPOINT = 'https://upload.flix.com' unless defined? MEDIA_ENDPOINT
|
15
|
+
# SEARCH_ENDPOINT = 'https://search.flix.com' unless defined? SEARCH_ENDPOINT
|
16
|
+
CONNECTION_OPTIONS = {
|
17
|
+
:headers => {
|
18
|
+
:accept => 'application/json',
|
19
|
+
:user_agent => "Flix Ruby Gem #{Flix::VERSION}"
|
20
|
+
},
|
21
|
+
:open_timeout => 5,
|
22
|
+
:raw => true,
|
23
|
+
:ssl => {:verify => false},
|
24
|
+
:timeout => 10,
|
25
|
+
} unless defined? CONNECTION_OPTIONS
|
26
|
+
IDENTITY_MAP = Flix::IdentityMap unless defined? IDENTITY_MAP
|
27
|
+
MIDDLEWARE = Faraday::Builder.new(
|
28
|
+
&Proc.new do |builder|
|
29
|
+
# # Convert file uploads to Faraday::UploadIO objects
|
30
|
+
# builder.use Flix::Request::MultipartWithFile
|
31
|
+
# # Checks for files in the payload
|
32
|
+
# builder.use Faraday::Request::Multipart
|
33
|
+
|
34
|
+
builder.use Faraday::Request::OAuth, Flix::Default.options
|
35
|
+
# Convert request params to "www-form-urlencoded"
|
36
|
+
builder.use Faraday::Request::UrlEncoded
|
37
|
+
# Handle 4xx server responses
|
38
|
+
# builder.use Flix::Response::RaiseError, Flix::Error::ClientError
|
39
|
+
# # Parse JSON response bodies using MultiJson
|
40
|
+
# builder.use Flix::Response::ParseJson
|
41
|
+
# # Handle 5xx server responses
|
42
|
+
# builder.use Flix::Response::RaiseError, Flix::Error::ServerError
|
43
|
+
# Set Faraday's HTTP adapter
|
44
|
+
builder.adapter Faraday.default_adapter
|
45
|
+
end
|
46
|
+
)
|
47
|
+
|
48
|
+
class << self
|
49
|
+
|
50
|
+
# @return [Hash]
|
51
|
+
def options
|
52
|
+
Hash[Flix::Configurable.keys.map{|key| [key, send(key)]}]
|
53
|
+
end
|
54
|
+
|
55
|
+
# @return [String]
|
56
|
+
def consumer_key
|
57
|
+
ENV['NETFLIX_CONSUMER_KEY']
|
58
|
+
end
|
59
|
+
|
60
|
+
# @return [String]
|
61
|
+
def consumer_secret
|
62
|
+
ENV['NETFLIX_CONSUMER_SECRET']
|
63
|
+
end
|
64
|
+
|
65
|
+
# @return [String]
|
66
|
+
def oauth_token
|
67
|
+
ENV['NETFLIX_OAUTH_TOKEN']
|
68
|
+
end
|
69
|
+
|
70
|
+
# @return [String]
|
71
|
+
def oauth_token_secret
|
72
|
+
ENV['NETFLIX_OAUTH_TOKEN_SECRET']
|
73
|
+
end
|
74
|
+
|
75
|
+
# @note This is configurable in case you want to use HTTP instead of HTTPS or use a Netflix-compatible endpoint.
|
76
|
+
# @see http://status.net/wiki/Flix-compatible_API
|
77
|
+
# @see http://en.blog.wordpress.com/2009/12/12/flix-api/
|
78
|
+
# @see http://staff.tumblr.com/post/287703110/api
|
79
|
+
# @see http://developer.typepad.com/typepad-flix-api/flix-api.html
|
80
|
+
# @return [String]
|
81
|
+
def endpoint
|
82
|
+
ENDPOINT
|
83
|
+
end
|
84
|
+
|
85
|
+
# # @return [String]
|
86
|
+
# def media_endpoint
|
87
|
+
# MEDIA_ENDPOINT
|
88
|
+
# end
|
89
|
+
#
|
90
|
+
# # @return [String]
|
91
|
+
# def search_endpoint
|
92
|
+
# SEARCH_ENDPOINT
|
93
|
+
# end
|
94
|
+
|
95
|
+
# @return [Hash]
|
96
|
+
def connection_options
|
97
|
+
CONNECTION_OPTIONS
|
98
|
+
end
|
99
|
+
|
100
|
+
# @return [Flix::IdentityMap]
|
101
|
+
def identity_map
|
102
|
+
IDENTITY_MAP
|
103
|
+
end
|
104
|
+
|
105
|
+
# @note Faraday's middleware stack implementation is comparable to that of Rack middleware. The order of middleware is important: the first middleware on the list wraps all others, while the last middleware is the innermost one.
|
106
|
+
# @see https://github.com/technoweenie/faraday#advanced-middleware-usage
|
107
|
+
# @see http://mislav.uniqpath.com/2011/07/faraday-advanced-http/
|
108
|
+
# @return [Faraday::Builder]
|
109
|
+
def middleware
|
110
|
+
MIDDLEWARE
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Flix
|
2
|
+
|
3
|
+
# Tracks objects to help ensure that each object gets loaded only once.
|
4
|
+
# See: http://www.martinfowler.com/eaaCatalog/identityMap.html
|
5
|
+
class IdentityMap < Hash
|
6
|
+
|
7
|
+
# @param id
|
8
|
+
# @return [Object]
|
9
|
+
def fetch(id)
|
10
|
+
self[id]
|
11
|
+
end
|
12
|
+
|
13
|
+
# @param id
|
14
|
+
# @param object
|
15
|
+
# @return [Object]
|
16
|
+
def store(id, object)
|
17
|
+
self[id] = object
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
data/lib/flix/user.rb
ADDED
data/lib/flix/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flix
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,8 +10,88 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
date: 2012-08-24 00:00:00.000000000 Z
|
13
|
-
dependencies:
|
14
|
-
|
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: multi_json
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '1.3'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.3'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: simple_oauth
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 0.1.6
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 0.1.6
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: json
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
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: '0'
|
94
|
+
description: A Ruby wrapper for the API
|
15
95
|
email:
|
16
96
|
- andrew@otherscreen.com
|
17
97
|
executables: []
|
@@ -25,8 +105,14 @@ files:
|
|
25
105
|
- Rakefile
|
26
106
|
- flix.gemspec
|
27
107
|
- lib/flix.rb
|
108
|
+
- lib/flix/api.rb
|
109
|
+
- lib/flix/client.rb
|
110
|
+
- lib/flix/configurable.rb
|
111
|
+
- lib/flix/default.rb
|
112
|
+
- lib/flix/identity_map.rb
|
113
|
+
- lib/flix/user.rb
|
28
114
|
- lib/flix/version.rb
|
29
|
-
homepage:
|
115
|
+
homepage: https://github.com/AndrewGertig/flix
|
30
116
|
licenses: []
|
31
117
|
post_install_message:
|
32
118
|
rdoc_options: []
|
@@ -49,5 +135,5 @@ rubyforge_project:
|
|
49
135
|
rubygems_version: 1.8.24
|
50
136
|
signing_key:
|
51
137
|
specification_version: 3
|
52
|
-
summary:
|
138
|
+
summary: API client
|
53
139
|
test_files: []
|