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.
@@ -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,3 @@
1
+ module Stupeflix
2
+ VERSION = "0.0.1"
3
+ 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: