reservix-client 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md ADDED
@@ -0,0 +1,4 @@
1
+ reservix-client
2
+ ==================
3
+
4
+ Simple client for the [reservix api](https://developer.reservix.de).
data/lib/reservix.rb ADDED
@@ -0,0 +1,27 @@
1
+ require 'hashie'
2
+ require 'httmultiparty'
3
+ require 'uri'
4
+
5
+ require 'reservix/client'
6
+ require 'reservix/hash_response_wrapper'
7
+ require 'reservix/version'
8
+
9
+ module Reservix
10
+
11
+ def new(options={})
12
+ Client.new(options)
13
+ end
14
+ module_function :new
15
+
16
+ def method_missing(method_name, *args, &block)
17
+ return super unless respond_to_missing?(method_name)
18
+ Client.send(method_name, *args, &block)
19
+ end
20
+ module_function :method_missing
21
+
22
+ def respond_to_missing?(method_name, include_private=false)
23
+ Client.respond_to?(method_name, include_private)
24
+ end
25
+ module_function :respond_to_missing?
26
+
27
+ end
@@ -0,0 +1,110 @@
1
+ module Reservix
2
+ class Client
3
+ include HTTMultiParty
4
+ USER_AGENT = "ASK HELMUT Reservix API Wrapper #{VERSION}"
5
+ API_KEY_PARAM_NAME = "api-key"
6
+ API_SUBHOST = "api"
7
+ API_VERSION = "1"
8
+ DEFAULT_OPTIONS = {
9
+ site: "reservix.de",
10
+ use_ssl: true,
11
+ api_module: "sale"
12
+ }
13
+
14
+ attr_accessor :options
15
+ headers({"User-Agent" => USER_AGENT})
16
+
17
+ def initialize(options = {})
18
+ store_options(options)
19
+ raise ArgumentError, "An api key must be present" if api_key.nil?
20
+ end
21
+
22
+ def get(path, query={}, options={})
23
+ handle_response {
24
+ self.class.get(*construct_query_arguments(path, options.merge(:query => query)))
25
+ }
26
+ end
27
+
28
+ def post(path, body={}, options={})
29
+ handle_response {
30
+ self.class.post(*construct_query_arguments(path, options.merge(:body => body), :body))
31
+ }
32
+ end
33
+
34
+ def put(path, body={}, options={})
35
+ handle_response {
36
+ self.class.put(*construct_query_arguments(path, options.merge(:body => body), :body))
37
+ }
38
+ end
39
+
40
+ def delete(path, query={}, options={})
41
+ handle_response {
42
+ self.class.delete(*construct_query_arguments(path, options.merge(:query => query)))
43
+ }
44
+ end
45
+
46
+ def head(path, query={}, options={})
47
+ handle_response {
48
+ self.class.head(*construct_query_arguments(path, options.merge(:query => query)))
49
+ }
50
+ end
51
+
52
+ # accessors for options
53
+ def api_key
54
+ @options[:api_key]
55
+ end
56
+
57
+ def use_ssl?
58
+ @options[:use_ssl]
59
+ end
60
+
61
+ def api_module
62
+ @options[:api_module]
63
+ end
64
+
65
+ def site
66
+ @options[:site]
67
+ end
68
+ alias host site
69
+
70
+ def api_host
71
+ [API_SUBHOST, host].join(".")
72
+ end
73
+
74
+ def api_url
75
+ [api_host, API_VERSION, api_module].join("/")
76
+ end
77
+ private
78
+
79
+ def handle_response(refreshing_enabled=true, &block)
80
+ response = block.call
81
+ if response && !response.success?
82
+ raise ResponseError.new(response)
83
+ elsif response.is_a?(Hash)
84
+ HashResponseWrapper.new(response)
85
+ elsif response && response.success?
86
+ response
87
+ end
88
+ end
89
+
90
+ def store_options(options={})
91
+ @options ||= DEFAULT_OPTIONS.dup
92
+ @options.merge!(options)
93
+ end
94
+
95
+ def construct_query_arguments(path_or_uri, options={}, body_or_query=:query)
96
+ uri = URI.parse(path_or_uri)
97
+ path = uri.path
98
+ scheme = use_ssl? ? "https" : "http"
99
+ options = options.dup
100
+ options[body_or_query] ||= {}
101
+ options[body_or_query][:format] = "json"
102
+ options[body_or_query][API_KEY_PARAM_NAME] = api_key
103
+
104
+ [
105
+ "#{scheme}://#{api_url}#{path}#{uri.query ? "?#{uri.query}" : ""}",
106
+ options
107
+ ]
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,9 @@
1
+ module Reservix
2
+ class HashResponseWrapper< Hashie::Mash
3
+ attr_reader :response
4
+ def initialize(response=nil, *args)
5
+ @response = response
6
+ super(response, *args)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,20 @@
1
+ module Reservix
2
+ class ResponseError < HTTParty::ResponseError
3
+ STATUS_CODES = {
4
+ 400 => "Bad Request",
5
+ 403 => "Forbidden",
6
+ 404 => "Not Found",
7
+ 412 => "Precondition Failed",
8
+ 500 => "Internal Server Error",
9
+ 501 => "Not Implemented"
10
+ }
11
+
12
+ def message
13
+ error = response.parsed_response
14
+ "HTTP status: #{response.code} #{STATUS_CODES[response.code]} Error: #{error}"
15
+ rescue
16
+ "HTTP status: #{response.code} #{STATUS_CODES[response.code]}"
17
+ end
18
+
19
+ end
20
+ end
@@ -0,0 +1,3 @@
1
+ module Reservix
2
+ VERSION = '0.0.2'
3
+ end
metadata ADDED
@@ -0,0 +1,136 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: reservix-client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Niels Hoffmann
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-11-07 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: httmultiparty
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.3.0
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.3.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: hashie
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '2.0'
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: '2.0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: bundler
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '1.0'
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: '1.0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: guard
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: '1.0'
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: '1.0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: rb-fsevent
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: '0.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: '0.9'
94
+ description: A wrapper for the Reservix REST api. It provides simple methods to retireve
95
+ resources form the Reservix REST api.
96
+ email:
97
+ - niels@askhelmut.com
98
+ executables: []
99
+ extensions: []
100
+ extra_rdoc_files: []
101
+ files:
102
+ - lib/reservix/client.rb
103
+ - lib/reservix/hash_response_wrapper.rb
104
+ - lib/reservix/response_error.rb
105
+ - lib/reservix/version.rb
106
+ - lib/reservix.rb
107
+ - README.md
108
+ homepage: https://askhelmut.com
109
+ licenses:
110
+ - MIT
111
+ post_install_message:
112
+ rdoc_options: []
113
+ require_paths:
114
+ - lib
115
+ required_ruby_version: !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ segments:
122
+ - 0
123
+ hash: -4378129810663502477
124
+ required_rubygems_version: !ruby/object:Gem::Requirement
125
+ none: false
126
+ requirements:
127
+ - - ! '>='
128
+ - !ruby/object:Gem::Version
129
+ version: 1.3.5
130
+ requirements: []
131
+ rubyforge_project:
132
+ rubygems_version: 1.8.25
133
+ signing_key:
134
+ specification_version: 3
135
+ summary: A wrapper for the Reservix REST api.
136
+ test_files: []