berlin-buehnen-client 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b067e2c7a8005303d7f4f00698e86568aaa29ba0
4
+ data.tar.gz: b11c2b235ea91162366ad40fb91769489d0d3f88
5
+ SHA512:
6
+ metadata.gz: 4490863eed8a8f8560a01439ee7def018bc49a995486fda85e275e546652f48a4d59cf7ffa131ce1861f8a4927b5696810c028ed2b78839b08bc5a345ca75199
7
+ data.tar.gz: aacbe36903e7d97554a952f89b9da3a8a411de5196304f5a6f10d4176b85ac539d3c79664ac81028a383cdd7b8750053f672de6ac1c9fcd3250b12363ae13cf3
data/README.md ADDED
@@ -0,0 +1,4 @@
1
+ berlin-buehnen-client
2
+ ==================
3
+
4
+ Simple client for the [Berlin Bühnen API](http://www.berlin-buehnen.de/media/docs/v1.html).
@@ -0,0 +1,93 @@
1
+ module BerlinBuehnen
2
+ class Client
3
+ include HTTMultiParty
4
+ USER_AGENT = "ASK HELMUT BerlinBuehnen API Wrapper #{VERSION}"
5
+ API_USERNAME_PARAM_NAME = "username"
6
+ API_KEY_PARAM_NAME = "api_key"
7
+ API_VERSION = "v1"
8
+ API_FORMAT = "json"
9
+ DEFAULT_OPTIONS = {
10
+ site: "www.berlin-buehnen.de",
11
+ language: "de"
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
+ raise ArgumentError, "An api username must be present" if api_username.nil?
21
+ end
22
+
23
+ def get(path, query={}, options={})
24
+ handle_response {
25
+ self.class.get(*construct_query_arguments(path, options.merge(:query => query)))
26
+ }
27
+ end
28
+
29
+ def head(path, query={}, options={})
30
+ handle_response {
31
+ self.class.head(*construct_query_arguments(path, options.merge(:query => query)))
32
+ }
33
+ end
34
+
35
+ # accessors for options
36
+ def api_username
37
+ @options[:username]
38
+ end
39
+
40
+ def api_key
41
+ @options[:api_key]
42
+ end
43
+
44
+ def site
45
+ @options[:site]
46
+ end
47
+ alias host site
48
+
49
+ def api_host
50
+ host
51
+ end
52
+
53
+ def api_language
54
+ @options[:language]
55
+ end
56
+
57
+ def api_url
58
+ [api_host, api_language, "api", API_VERSION].join("/")
59
+ end
60
+
61
+ private
62
+
63
+ def handle_response(&block)
64
+ response = block.call
65
+ return unless response
66
+
67
+ raise ResponseError.new(response) unless response.success?
68
+
69
+ BerlinBuehnen::Response.create(response)
70
+ end
71
+
72
+ def store_options(options={})
73
+ @options ||= DEFAULT_OPTIONS.dup
74
+ @options.merge!(options)
75
+ end
76
+
77
+ def construct_query_arguments(path_or_uri, options={}, body_or_query=:query)
78
+ uri = URI.parse(path_or_uri)
79
+ path = uri.path
80
+ scheme = "http"
81
+ options = options.dup
82
+ options[body_or_query] ||= {}
83
+ options[body_or_query][:format] = API_FORMAT
84
+ options[body_or_query][API_USERNAME_PARAM_NAME.to_sym] = api_username
85
+ options[body_or_query][API_KEY_PARAM_NAME.to_sym] = api_key
86
+
87
+ [
88
+ "#{scheme}://#{api_url}#{path}#{uri.query ? "?#{uri.query}" : ""}",
89
+ options
90
+ ]
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,43 @@
1
+ module BerlinBuehnen
2
+ class ListResponse < Response
3
+
4
+ META = "meta"
5
+ OBJECTS = "objects"
6
+
7
+ NEXT = "next"
8
+ PREVIOUS = "previous"
9
+ OFFSET = "offset"
10
+ LIMIT = "limit"
11
+ TOTAL_COUNT = "total_count"
12
+
13
+ def data
14
+ @data ||= @json_response[OBJECTS]
15
+ end
16
+
17
+ def next?
18
+ !meta[NEXT].nil?
19
+ end
20
+
21
+ def previous?
22
+ !meta[PREVIOUS].nil?
23
+ end
24
+
25
+ def limit
26
+ meta[LIMIT]
27
+ end
28
+
29
+ def offset
30
+ meta[OFFSET]
31
+ end
32
+
33
+ def total_count
34
+ meta[TOTAL_COUNT]
35
+ end
36
+
37
+ private
38
+ def meta
39
+ @meta ||= @json_response[META]
40
+ end
41
+
42
+ end
43
+ end
@@ -0,0 +1,20 @@
1
+ module BerlinBuehnen
2
+ class Response
3
+ attr_reader :json_response
4
+
5
+ def self.create(response)
6
+ json_response = JSON.parse(response.body)
7
+
8
+ json_response.has_key?("meta") ? ListResponse.new(json_response) : new(json_response)
9
+ end
10
+
11
+ def initialize(json_response)
12
+ @json_response = json_response
13
+ end
14
+
15
+ def data
16
+ @data ||= @json_response
17
+ end
18
+
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ module BerlinBuehnen
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 BerlinBuehnen
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,29 @@
1
+ require "byebug"
2
+ require 'hashie'
3
+ require 'httmultiparty'
4
+ require 'uri'
5
+
6
+ require 'berlin_buehnen/client'
7
+ require 'berlin_buehnen/response'
8
+ require 'berlin_buehnen/list_response'
9
+ require 'berlin_buehnen/version'
10
+
11
+ module BerlinBuehnen
12
+
13
+ def new(options={})
14
+ Client.new(options)
15
+ end
16
+ module_function :new
17
+
18
+ def method_missing(method_name, *args, &block)
19
+ return super unless respond_to_missing?(method_name)
20
+ Client.send(method_name, *args, &block)
21
+ end
22
+ module_function :method_missing
23
+
24
+ def respond_to_missing?(method_name, include_private=false)
25
+ Client.respond_to?(method_name, include_private)
26
+ end
27
+ module_function :respond_to_missing?
28
+
29
+ end
metadata ADDED
@@ -0,0 +1,115 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: berlin-buehnen-client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Niels Hoffmann
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-06-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: httmultiparty
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.3'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.3.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '0.3'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.3.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: bundler
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.0'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: guard
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '2.0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '2.0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rb-fsevent
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '0.9'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '0.9'
75
+ description: A wrapper for the BerlinBuehnen REST api. It provides simple methods
76
+ to retireve resources form the BerlinBuehnen REST api.
77
+ email:
78
+ - niels@askhelmut.com
79
+ executables: []
80
+ extensions: []
81
+ extra_rdoc_files: []
82
+ files:
83
+ - README.md
84
+ - lib/berlin_buehnen.rb
85
+ - lib/berlin_buehnen/client.rb
86
+ - lib/berlin_buehnen/list_response.rb
87
+ - lib/berlin_buehnen/response.rb
88
+ - lib/berlin_buehnen/response_error.rb
89
+ - lib/berlin_buehnen/version.rb
90
+ homepage: https://askhelmut.com
91
+ licenses:
92
+ - MIT
93
+ metadata: {}
94
+ post_install_message:
95
+ rdoc_options: []
96
+ require_paths:
97
+ - lib
98
+ required_ruby_version: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ required_rubygems_version: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: 1.3.5
108
+ requirements: []
109
+ rubyforge_project:
110
+ rubygems_version: 2.4.5
111
+ signing_key:
112
+ specification_version: 4
113
+ summary: A wrapper for the BerlinBuehnen REST api.
114
+ test_files: []
115
+ has_rdoc: