stupeflix-client 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.
- checksums.yaml +15 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +36 -0
- data/Rakefile +1 -0
- data/examples/cli-example.rb +223 -0
- data/examples/conf.rb +25 -0
- data/examples/movie.xml +348 -0
- data/lib/stupeflix.rb +355 -0
- data/lib/stupeflix/base.rb +274 -0
- data/lib/stupeflix/connection.rb +113 -0
- data/lib/stupeflix/version.rb +3 -0
- data/stupeflix-client.gemspec +23 -0
- metadata +86 -0
@@ -0,0 +1,113 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'uri'
|
3
|
+
|
4
|
+
module Stupeflix
|
5
|
+
class Connection
|
6
|
+
def initialize(server, base_url)
|
7
|
+
@server = server
|
8
|
+
@base_url = base_url
|
9
|
+
@MAX_NETWORK_RETRY = 1
|
10
|
+
@debuglevel = 0
|
11
|
+
end
|
12
|
+
|
13
|
+
def request_get( resource, args = nil, headers={})
|
14
|
+
return request(resource, "get", args, body = nil, filename = nil, headers=headers)
|
15
|
+
end
|
16
|
+
|
17
|
+
def request_delete( resource, args = nil, headers={})
|
18
|
+
return request(resource, "delete", args, headers=headers)
|
19
|
+
end
|
20
|
+
|
21
|
+
def request_head( resource, args = nil, headers={})
|
22
|
+
return request(resource, "head", args, headers=headers)
|
23
|
+
end
|
24
|
+
|
25
|
+
def request_post( resource, args = nil, body = nil, filename=nil, headers={})
|
26
|
+
return request(resource, "post", args , body = body, filename=filename, headers=headers)
|
27
|
+
end
|
28
|
+
|
29
|
+
def request_put(resource, args = nil, body = nil, filename=nil, headers={}, sendcallback = nil)
|
30
|
+
dump("In request_put in connection", resource, "PUT")
|
31
|
+
resp = request(resource, "put", args , body = body, filename=filename, headers=headers, sendcallback = sendcallback)
|
32
|
+
return resp
|
33
|
+
end
|
34
|
+
|
35
|
+
def dump( message, request_uri, method)
|
36
|
+
if @debuglevel > 0
|
37
|
+
print message, " " , time.asctime, " " , request_uri, "\n"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def request_method(verb)
|
42
|
+
Net::HTTP.const_get(verb.to_s.capitalize)
|
43
|
+
end
|
44
|
+
|
45
|
+
def fetch(uri_str, limit = 10)
|
46
|
+
# You should choose better exception.
|
47
|
+
raise ArgumentError, 'HTTP redirect too deep' if limit == 0
|
48
|
+
|
49
|
+
response = Net::HTTP.get_response(URI.parse(uri_str))
|
50
|
+
case response
|
51
|
+
when Net::HTTPSuccess then response
|
52
|
+
when Net::HTTPRedirection then fetch(response['location'], limit - 1)
|
53
|
+
else
|
54
|
+
response.error!
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
def request( resource, method = "get", args = nil, body = nil, filename=nil, headers={}, sendcallback = nil)
|
60
|
+
params = nil
|
61
|
+
path = resource
|
62
|
+
headers ||= {}
|
63
|
+
|
64
|
+
headers['User-Agent'] = 'Basic Agent'
|
65
|
+
|
66
|
+
if method != "get"
|
67
|
+
if !body and filename
|
68
|
+
bodystream = File.open(filename, 'r')
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
path += "?" + urllib.urlencode(args) if args
|
73
|
+
url = "http://#{@server}#{@base_url}#{path}"
|
74
|
+
|
75
|
+
dump("Connection Request starting", path, method.upcase)
|
76
|
+
|
77
|
+
for i in 0..@MAX_NETWORK_RETRY
|
78
|
+
begin
|
79
|
+
# http.set_debug_output $stdout
|
80
|
+
# headers['Expect'] = '100-Continue'
|
81
|
+
|
82
|
+
response = nil
|
83
|
+
while true
|
84
|
+
url = URI.parse(url)
|
85
|
+
request = request_method(method).new(url.path + "?" + url.query, headers)
|
86
|
+
if bodystream
|
87
|
+
request.body_stream = bodystream
|
88
|
+
elsif body
|
89
|
+
request.body = body
|
90
|
+
end
|
91
|
+
http = Net::HTTP.new(url.host, url.port)
|
92
|
+
result = http.start {|http| response = http.request(request) }
|
93
|
+
case response
|
94
|
+
when Net::HTTPRedirection
|
95
|
+
then
|
96
|
+
url = response['location']
|
97
|
+
else
|
98
|
+
break
|
99
|
+
end
|
100
|
+
end
|
101
|
+
break
|
102
|
+
rescue StandardError => e
|
103
|
+
if i == (@MAX_NETWORK_RETRY - 1)
|
104
|
+
raise
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
response["status"] = response.code.to_s
|
109
|
+
return {'headers' => response, 'body' => response.body}
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
113
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'stupeflix/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "stupeflix-client"
|
8
|
+
spec.version = Stupeflix::VERSION
|
9
|
+
spec.authors = ["Andrea Pavoni"]
|
10
|
+
spec.email = ["andrea.pavoni@gmail.com"]
|
11
|
+
spec.description = %q{A Ruby client for http://stupeflix.com API}
|
12
|
+
spec.summary = %q{A Ruby client for http://stupeflix.com API}
|
13
|
+
spec.homepage = "https://github.com/apeacox/stupeflix-client"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: stupeflix-client
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Andrea Pavoni
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-07-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: A Ruby client for http://stupeflix.com API
|
42
|
+
email:
|
43
|
+
- andrea.pavoni@gmail.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- .gitignore
|
49
|
+
- Gemfile
|
50
|
+
- LICENSE.txt
|
51
|
+
- README.md
|
52
|
+
- Rakefile
|
53
|
+
- examples/cli-example.rb
|
54
|
+
- examples/conf.rb
|
55
|
+
- examples/movie.xml
|
56
|
+
- lib/stupeflix.rb
|
57
|
+
- lib/stupeflix/base.rb
|
58
|
+
- lib/stupeflix/connection.rb
|
59
|
+
- lib/stupeflix/version.rb
|
60
|
+
- stupeflix-client.gemspec
|
61
|
+
homepage: https://github.com/apeacox/stupeflix-client
|
62
|
+
licenses:
|
63
|
+
- MIT
|
64
|
+
metadata: {}
|
65
|
+
post_install_message:
|
66
|
+
rdoc_options: []
|
67
|
+
require_paths:
|
68
|
+
- lib
|
69
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ! '>='
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0'
|
74
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
requirements: []
|
80
|
+
rubyforge_project:
|
81
|
+
rubygems_version: 2.0.3
|
82
|
+
signing_key:
|
83
|
+
specification_version: 4
|
84
|
+
summary: A Ruby client for http://stupeflix.com API
|
85
|
+
test_files: []
|
86
|
+
has_rdoc:
|