dm3-api 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,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ecae70151a267b8d65b07b5cf3a220a915e0dc17
4
+ data.tar.gz: a9dd8c797dc70bedd8d2942efa2383aa57cde1a2
5
+ SHA512:
6
+ metadata.gz: 7a519dd767e77c404eb8b973f950cb898401f1f3775ecf4e5d2778975d14cf8aee3e2adfb76897904b56b0938b395ed919192293aae35d8dd4c2db831ad816e1
7
+ data.tar.gz: 17240bb99c07e9c9519b1a93a5b56661d4a75b1ae8152520436741224771d7f458593ab1e9d70924c9b8e816a1d85a5a2c4387f4097a3bb1a889eb34f246502e
@@ -0,0 +1,9 @@
1
+ module Dm3
2
+ module Api
3
+ extend ActiveSupport::Autoload
4
+
5
+ autoload :Requests
6
+ autoload :Responses
7
+ autoload :Connection
8
+ end
9
+ end
@@ -0,0 +1,35 @@
1
+ class Dm3::Api::Connection
2
+ attr_reader :service_url, :token
3
+
4
+ def initialize(token, service_url)
5
+ @token = token
6
+ @service_url = service_url
7
+ end
8
+
9
+ def method_missing(method_name, *args, &block)
10
+ request_class = request_class_for_method(method_name)
11
+ if request_class
12
+ request_class.new(self, args.extract_options!).perform
13
+ else
14
+ super
15
+ end
16
+ end
17
+
18
+ def use_ssl?
19
+ service_uri.scheme == 'https'
20
+ end
21
+
22
+ private
23
+
24
+ def service_uri
25
+ @service_uri ||= URI(service_url)
26
+ end
27
+
28
+ def request_class_for_method(method_name)
29
+ begin
30
+ "Dm3::Api::Requests::#{method_name.to_s.camelize}".constantize
31
+ rescue NameError
32
+ nil
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,17 @@
1
+ module Dm3
2
+ module Api
3
+ module Requests
4
+ autoload :Base, 'dm3/api/requests/base'
5
+
6
+ autoload :BookingSubjects, 'dm3/api/requests/booking_subjects'
7
+ autoload :Bookings, 'dm3/api/requests/bookings'
8
+ autoload :CreateBooking, 'dm3/api/requests/create_booking'
9
+ autoload :Delete, 'dm3/api/requests/delete'
10
+ autoload :DestroyBooking, 'dm3/api/requests/destroy_booking'
11
+ autoload :Get, 'dm3/api/requests/get'
12
+ autoload :Post, 'dm3/api/requests/post'
13
+ autoload :Put, 'dm3/api/requests/put'
14
+ autoload :UpdateBooking, 'dm3/api/requests/update_booking'
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,62 @@
1
+ class Dm3::Api::Requests::Base
2
+ attr_reader :connection, :opts
3
+
4
+ delegate :token, :service_url, :requests, :use_ssl?, to: :connection
5
+
6
+ def initialize(connection, opts = {})
7
+ @connection = connection
8
+ @opts = opts
9
+ end
10
+
11
+ def http_class
12
+ "Net::HTTP::#{http_method.camelize}".constantize
13
+ end
14
+
15
+ def perform
16
+ response
17
+ end
18
+
19
+ def response
20
+ response_class.new(http_response)
21
+ end
22
+
23
+ private
24
+
25
+ def raw_body
26
+ body.to_json
27
+ end
28
+
29
+ def body
30
+ opts.fetch(:body, {})
31
+ end
32
+
33
+ def response_class
34
+ "Dm3::Api::Responses::#{self.class.name.demodulize}".constantize
35
+ end
36
+
37
+ def http_request
38
+ @http_request ||= begin
39
+ req = http_class.new(uri, {'Content-Type' => 'application/json'})
40
+ req.body = raw_body if body.present?
41
+ req
42
+ end
43
+ end
44
+
45
+ def http_response
46
+ @http_response ||= Net::HTTP.start(uri.host, uri.port, use_ssl: use_ssl?, verify_mode: OpenSSL::SSL::VERIFY_NONE) do |http|
47
+ http.request(http_request)
48
+ end
49
+ end
50
+
51
+ def path
52
+ fail NotImplementedError
53
+ end
54
+
55
+ def uri
56
+ URI('%s%s%stoken=%s' % [service_url, path, join_character, token])
57
+ end
58
+
59
+ def join_character
60
+ path['?'] ? '&' : '?'
61
+ end
62
+ end
@@ -0,0 +1,7 @@
1
+ class Dm3::Api::Requests::BookingSubjects < Dm3::Api::Requests::Get
2
+ private
3
+
4
+ def path
5
+ "/api/v1/manager/booking_subjects?query=#{opts[:query]}"
6
+ end
7
+ end
@@ -0,0 +1,15 @@
1
+ class Dm3::Api::Requests::Bookings < Dm3::Api::Requests::Get
2
+ private
3
+
4
+ def path
5
+ "/api/v1/manager/bookings?from=#{from}&to=#{to}"
6
+ end
7
+
8
+ def from
9
+ opts[:from].presence || Date.today.prev_month.beginning_of_month.iso8601
10
+ end
11
+
12
+ def to
13
+ opts[:to].presence || (Date.today + 6.months).end_of_month.iso8601
14
+ end
15
+ end
@@ -0,0 +1,7 @@
1
+ class Dm3::Api::Requests::CreateBooking < Dm3::Api::Requests::Post
2
+ private
3
+
4
+ def path
5
+ "/api/v1/manager/bookings"
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ class Dm3::Api::Requests::Delete < Dm3::Api::Requests::Base
2
+ def http_method
3
+ 'delete'
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ class Dm3::Api::Requests::DestroyBooking < Dm3::Api::Requests::Delete
2
+ private
3
+
4
+ def path
5
+ "/api/v1/manager/bookings/#{opts[:booking_id]}"
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ class Dm3::Api::Requests::Get < Dm3::Api::Requests::Base
2
+ def http_method
3
+ 'get'
4
+ end
5
+ end
@@ -0,0 +1,9 @@
1
+ class Dm3::Api::Requests::Post < Dm3::Api::Requests::Base
2
+ def http_method
3
+ 'post'
4
+ end
5
+
6
+ def body
7
+ opts
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ class Dm3::Api::Requests::Put < Dm3::Api::Requests::Base
2
+ def http_method
3
+ 'put'
4
+ end
5
+
6
+ def body
7
+ opts
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ class Dm3::Api::Requests::UpdateBooking < Dm3::Api::Requests::Put
2
+ private
3
+
4
+ def path
5
+ "/api/v1/manager/bookings/#{opts[:booking].fetch('booking_id')}"
6
+ end
7
+ end
@@ -0,0 +1,13 @@
1
+ module Dm3
2
+ module Api
3
+ module Responses
4
+ autoload :Base, 'dm3/api/responses/base'
5
+
6
+ autoload :BookingSubjects, 'dm3/api/responses/booking_subjects'
7
+ autoload :Bookings, 'dm3/api/responses/bookings'
8
+ autoload :CreateBooking, 'dm3/api/responses/create_booking'
9
+ autoload :DestroyBooking, 'dm3/api/responses/destroy_booking'
10
+ autoload :UpdateBooking, 'dm3/api/responses/update_booking'
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ class Dm3::Api::Responses::Base
2
+ attr_reader :raw_response, :json, :hash, :dish
3
+
4
+ def initialize(raw_response)
5
+ @raw_response = raw_response
6
+ @json = raw_response.body
7
+ @hash = JSON.parse(json)
8
+ @dish = Dish(hash)
9
+ end
10
+
11
+ def method_missing(*args, &block)
12
+ dish.public_send(args.first)
13
+ end
14
+ end
@@ -0,0 +1,2 @@
1
+ class Dm3::Api::Responses::BookingSubjects < Dm3::Api::Responses::Base
2
+ end
@@ -0,0 +1,2 @@
1
+ class Dm3::Api::Responses::Bookings < Dm3::Api::Responses::Base
2
+ end
@@ -0,0 +1,2 @@
1
+ class Dm3::Api::Responses::CreateBooking < Dm3::Api::Responses::Base
2
+ end
@@ -0,0 +1,2 @@
1
+ class Dm3::Api::Responses::DestroyBooking < Dm3::Api::Responses::Base
2
+ end
@@ -0,0 +1,2 @@
1
+ class Dm3::Api::Responses::UpdateBooking < Dm3::Api::Responses::Base
2
+ end
@@ -0,0 +1,5 @@
1
+ module Dm3
2
+ module Api
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,64 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dm3-api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - stevo
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-06-24 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: DM3 Ruby API wrapper
14
+ email:
15
+ - blazejek@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/dm3-api.rb
21
+ - lib/dm3/api/connection.rb
22
+ - lib/dm3/api/requests.rb
23
+ - lib/dm3/api/requests/base.rb
24
+ - lib/dm3/api/requests/booking_subjects.rb
25
+ - lib/dm3/api/requests/bookings.rb
26
+ - lib/dm3/api/requests/create_booking.rb
27
+ - lib/dm3/api/requests/delete.rb
28
+ - lib/dm3/api/requests/destroy_booking.rb
29
+ - lib/dm3/api/requests/get.rb
30
+ - lib/dm3/api/requests/post.rb
31
+ - lib/dm3/api/requests/put.rb
32
+ - lib/dm3/api/requests/update_booking.rb
33
+ - lib/dm3/api/responses.rb
34
+ - lib/dm3/api/responses/base.rb
35
+ - lib/dm3/api/responses/booking_subjects.rb
36
+ - lib/dm3/api/responses/bookings.rb
37
+ - lib/dm3/api/responses/create_booking.rb
38
+ - lib/dm3/api/responses/destroy_booking.rb
39
+ - lib/dm3/api/responses/update_booking.rb
40
+ - lib/dm3/api/version.rb
41
+ homepage: https://github.com/Selleo/dm3-api
42
+ licenses: []
43
+ metadata: {}
44
+ post_install_message:
45
+ rdoc_options: []
46
+ require_paths:
47
+ - lib
48
+ required_ruby_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ required_rubygems_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ requirements: []
59
+ rubyforge_project: "[none]"
60
+ rubygems_version: 2.2.2
61
+ signing_key:
62
+ specification_version: 4
63
+ summary: DM3 Ruby API wrapper
64
+ test_files: []