prioticket 0.1.0

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,36 @@
1
+ #
2
+ # Configuration object for storing some parameters required for making transactions
3
+ #
4
+ module PrioTicket::Config
5
+ class << self
6
+ attr_accessor :api_key
7
+ attr_accessor :environment
8
+ attr_accessor :verbose
9
+
10
+ # Set's the default value's to nil and false
11
+ # @return [Hash] configuration options
12
+ def init!
13
+ @defaults = {
14
+ :@api_key => nil,
15
+ :@environment => 'test',
16
+ :@verbose => false,
17
+ }
18
+ end
19
+
20
+ # Resets the value's to there previous value (instance_variable)
21
+ # @return [Hash] configuration options
22
+ def reset!
23
+ @defaults.each { |key, value| instance_variable_set(key, value) }
24
+ end
25
+
26
+ # Set's the new value's as instance variables
27
+ # @return [Hash] configuration options
28
+ def update!
29
+ @defaults.each do |key, value|
30
+ instance_variable_set(key, value) unless instance_variable_defined?(key)
31
+ end
32
+ end
33
+ end
34
+ init!
35
+ reset!
36
+ end
@@ -0,0 +1,13 @@
1
+ module PrioTicket
2
+ #
3
+ # Simpel extend on the +Rails::Engine+ to add support for a new config section within
4
+ # the environment configs
5
+ #
6
+ # @example default
7
+ # # /config/environments/development.rb
8
+ # config.prioticket.api_key = "12343465sdfgsadr324"
9
+ #
10
+ class Engine < Rails::Engine
11
+ config.prioticket = PrioTicket::Config
12
+ end
13
+ end
@@ -0,0 +1,28 @@
1
+ class PrioTicketError < StandardError
2
+ attr_accessor :error_message
3
+ attr_accessor :error_code
4
+
5
+ # def initialize
6
+ # # @error_message = error_message
7
+ # # @error_code = error_code
8
+ # # @description =
9
+ # end
10
+
11
+ # def self.error_code_mapping
12
+ # {
13
+ # "NO_AVAILABILITY" => { exception_name: "No Availability Exception", explanation: "The request cannot be fulfilled because there is insufficient availability.", http_status_code: "400 Bad Request"},
14
+ # "INVALID_PRODUCT" => { exception_name: "Invalid Product Exception", explanation: "The specified product does not exist.", http_status_code: "400 Bad Request"},
15
+ # "INVALID_RESERVATION" => { exception_name: "Invalid Reservation Exception", explanation: "The specified reservation does not exist or is not in a valid state.", http_status_code: "400 Bad Request"},
16
+ # "INVALID_BOOKING" => { exception_name: "Invalid Booking Exception", explanation: "The specified booking does not exist or is not in a valid state.", http_status_code: "400 Bad Request"},
17
+ # "INVALID_REQUEST" => { exception_name: "Invalid Identifier Exception", explanation: "Invalid request contents.", http_status_code: "400 x-request-identif => er header invalid"},
18
+ # "AUTHORIZATION_FAILURE" => { exception_name: "Invalid Authentication Exception", explanation: "The provided credentials are not valid.", http_status_code: "401 x-request-authenticati => n header invalid."},
19
+ # "VALIDATION_FAILURE" => { exception_name: "Validation Exception", explanation: "The request object contains inconsistent or invalid data or is missing data.", http_status_code: "400 Bad Request"},
20
+ # "INVALID_TICKET_CLASS" => { exception_name: "Invalid TicketClass Exception", explanation: "This endpoint can only be requested for ticket_class 2/ticket_class 3 (product of managed capacity).", http_status_code: "400 Bad Request"},
21
+ # "AUTHORIZATION_FAILURE" => { exception_name: "Authorization Exception", explanation: "The provided credentials are not valid.", http_status_code: "401 Unauthorized"},
22
+ # "BOOKING_CANCELLED" => { exception_name: "Redeem Booking Cancelled Exception", explanation: "This booking has been cancelled.", http_status_code: "400 Bad Request"},
23
+ # "INVALID_TICKET_CODE" => { exception_name: "Redeem Ticketcode Invalid Exception", explanation: "Provided ticket code is not valid.", http_status_code: "400 Bad Request"},
24
+ # "DATE_MISMATCH" => { exception_name: "Redeem Date Mismatch Exception", explanation: "This ticket isn't valid for today.", http_status_code: "400 Bad Request"},
25
+ # "INTERNAL_SYSTEM_FAILURE" => { exception_name: "InternalSystem Exception", explanation: "An error occurred that is unexpected and/or doesn’t fit any of the types above.", http_status_code: "500 Internal Server Error"}
26
+ # }
27
+ # end
28
+ end
@@ -0,0 +1,122 @@
1
+ module PrioTicket
2
+
3
+ # Describes a Reservation
4
+ #
5
+ # @author [henkm]
6
+ #
7
+ class Reservation
8
+
9
+ attr_accessor :identifier
10
+ attr_accessor :distributor_id
11
+ attr_accessor :ticket_id
12
+ attr_accessor :pickup_point_id
13
+ attr_accessor :from_date_time
14
+ attr_accessor :to_date_time
15
+ attr_accessor :booking_details
16
+ attr_accessor :distributor_reference
17
+
18
+ attr_accessor :reservation_reference
19
+ attr_accessor :booking_status
20
+ attr_accessor :cancellation_date_time
21
+
22
+ def initialize(args)
23
+ return if args.nil?
24
+ args.each do |k,v|
25
+ PrioTicket.parse_json_value(self, k,v)
26
+ end
27
+ end
28
+
29
+ def success
30
+ booking_status == "Reserved"
31
+ end
32
+ for meth in [:success?, :confirmed, :confirmed?, :reserved, :reserved?]
33
+ alias_method meth, :success
34
+ end
35
+
36
+
37
+ #
38
+ # Sends the reservation request tot the API
39
+ #
40
+ def save
41
+ request_reservation
42
+ end
43
+
44
+ #
45
+ # Cancels the current reservation
46
+ #
47
+ # @return <Reservation>
48
+ def cancel
49
+ result = PrioTicket::API.call(cancel_request_body, identifier)
50
+ parse_result(result)
51
+ end
52
+
53
+ private
54
+
55
+ #
56
+ # Sends the reservation request to the API endpoint
57
+ # and enriches current object with status and reference.
58
+ #
59
+ def request_reservation
60
+ result = PrioTicket::API.call(request_body, identifier)
61
+ parse_result(result)
62
+ end
63
+
64
+
65
+ #
66
+ # Parses the return value from the API
67
+ # `{"response_type"=>"reserve", "data"=>
68
+ # {"reservation_reference"=>"1522065689487477",
69
+ # "distributor_reference"=>"TEST_RESERVATION",
70
+ # "booking_status"=>"Reserved"}}`
71
+ #
72
+ # @return [type] [description]
73
+ def parse_result(result)
74
+ self.booking_status = result["data"]["booking_status"]
75
+ self.reservation_reference = result["data"]["reservation_reference"]
76
+ if result["data"]["cancellation_date_time"]
77
+ PrioTicket.parse_json_value(self, :cancellation_date_time, result["data"]["cancellation_date_time"])
78
+ end
79
+ end
80
+
81
+
82
+ # Computes the request body to send to the API cancel_reserve endpoint
83
+ def cancel_request_body
84
+ {
85
+ request_type: "cancel_reserve",
86
+ data: {
87
+ distributor_id: distributor_id,
88
+ reservation_reference: reservation_reference,
89
+ distributor_reference: distributor_reference
90
+ }
91
+ }
92
+ end
93
+
94
+ #
95
+ # Computes the request body to send to the API endpoint
96
+ # @param distributor_id Integer
97
+ # @param ticket_id Integer
98
+ # @param from_date String
99
+ # @param until_date String
100
+ #
101
+ # @return Hash
102
+ def request_body
103
+ booking_details_array = booking_details.to_a.map{|bd| bd.to_h}
104
+ body = {
105
+ request_type: "reserve",
106
+ data: {
107
+ distributor_id: distributor_id.to_s,
108
+ ticket_id: ticket_id.to_s,
109
+ from_date_time: PrioTicket.parsed_date(from_date_time),
110
+ to_date_time: PrioTicket.parsed_date(to_date_time),
111
+ booking_details: booking_details_array,
112
+ distributor_reference: distributor_reference
113
+ }
114
+ }
115
+
116
+ # add pickuppoint to body, if present
117
+ body[:data][:pickup_point_id] = pickup_point_id if pickup_point_id
118
+ return body
119
+ end
120
+
121
+ end
122
+ end
@@ -0,0 +1,34 @@
1
+ module PrioTicket
2
+
3
+ # Describes a single result from the [TicketList]
4
+ #
5
+ # @author [henkm]
6
+ #
7
+ class Ticket
8
+
9
+ attr_accessor :identifier
10
+ attr_accessor :distributor_id
11
+ attr_accessor :ticket_id
12
+ attr_accessor :ticket_title
13
+ attr_accessor :venue_name
14
+ attr_accessor :txt_language
15
+
16
+ def initialize(args)
17
+ return if args.nil?
18
+ args.each do |k,v|
19
+ PrioTicket.parse_json_value(self, k,v)
20
+ end
21
+ end
22
+
23
+
24
+ #
25
+ # Queries the TicketDetail method and retruns
26
+ # a [TicketDetails] object.
27
+ #
28
+ def details
29
+ PrioTicket::TicketDetails.find(distributor_id: distributor_id, ticket_id: ticket_id, identifier: identifier)
30
+ end
31
+
32
+
33
+ end
34
+ end
@@ -0,0 +1,97 @@
1
+ module PrioTicket
2
+
3
+ #
4
+ # This API provides all the ticket information that is available in
5
+ # the PrioTicket system for requested `ticket_id`.
6
+ #
7
+ # @author [henkm]
8
+ #
9
+ class TicketDetails
10
+
11
+ attr_accessor :identifier
12
+ attr_accessor :distributor_id
13
+
14
+ # attributes already available from ticketlist
15
+ attr_already_known_from_ticketlist = [:ticket_id, :ticket_title, :venue_name, :txt_language]
16
+ for att in attr_already_known_from_ticketlist
17
+ attr_accessor att
18
+ end
19
+
20
+ detailed_attributes = [:short_description, :long_description, :highlights,
21
+ :duration, :combi_ticket, :ticket_entry_notes, :tags, :included, :company_opening_times,
22
+ :book_size_min, :book_size_max, :supplier_url, :ticket_class, :start_date, :end_date,
23
+ :booking_start_date, :images, :currency, :product_language, :pickup_points,
24
+ :pickup_point_details, :ticket_type_details]
25
+
26
+ for att in detailed_attributes
27
+ attr_accessor att
28
+ end
29
+
30
+
31
+ def initialize(args=nil)
32
+ return if args.nil?
33
+ args.each do |k,v|
34
+ PrioTicket.parse_json_value(self, k,v)
35
+ end
36
+ end
37
+
38
+
39
+ #
40
+ # Calls the request type 'details' with given
41
+ #
42
+ # @param distributor_id Integer
43
+ # @return TicketDetails
44
+ def self.find(distributor_id: nil, ticket_id: nil, identifier: nil)
45
+ result = PrioTicket::API.call(request_body(ticket_id: ticket_id, distributor_id: distributor_id), identifier)
46
+ new_obj = self.new(result["data"])
47
+ new_obj.distributor_id = distributor_id
48
+ new_obj.identifier = identifier
49
+ return new_obj
50
+ end
51
+
52
+ #
53
+ # Computes the request body to send to the API endpoint
54
+ # @param distributor_id Integer
55
+ #
56
+ # @return Hash
57
+ def self.request_body(ticket_id: nil, distributor_id: nil)
58
+ {
59
+ request_type: "details",
60
+ data: {
61
+ distributor_id: distributor_id,
62
+ ticket_id: ticket_id
63
+ }
64
+ }
65
+ end
66
+
67
+
68
+ #
69
+ # Finds availabilities for given dates
70
+ #
71
+ # @param from_date: DateTime
72
+ # @param until_date: DateTime
73
+ #
74
+ # @return [type] [description]
75
+ def availabilities(from_date: Time.now, until_date: Time.now+(60*60*24*21))
76
+ PrioTicket::Availabilities.find(distributor_id: distributor_id, ticket_id: ticket_id, identifier: identifier, from_date: from_date, until_date: until_date)
77
+ end
78
+
79
+ def reserve_timeslot
80
+ # "request_type": "reserve",
81
+ # "data": {
82
+ # "distributor_id": "501",
83
+ # "ticket_id": "509",
84
+ # "pickup_point_id": "Wyndham_Apollo_hotel",
85
+ # "from_date_time": "2017-11-22T09:00:00+01:00",
86
+ # "to_date_time": "2017-11-23T09:00:00+01:00",
87
+ # "booking_details": [
88
+ # {
89
+ # "ticket_type": "ADULT",
90
+ # "count": 1
91
+ # }
92
+ # ],
93
+ # "distributor_reference": "ABC123456"
94
+ end
95
+
96
+ end
97
+ end
@@ -0,0 +1,54 @@
1
+ module PrioTicket
2
+
3
+ #
4
+ # This API provides all the tickets that are available in the PrioTicket system per distributor.
5
+ #
6
+ # @author [henkm]
7
+ #
8
+ class TicketList
9
+
10
+ attr_accessor :tickets
11
+ attr_accessor :distributor_id
12
+ attr_accessor :identifier
13
+
14
+ def initialize(args, distributor_id, identifier)
15
+ @tickets = []
16
+
17
+ # Add ticket details as array of TicketListItem objects
18
+ for ticket_hash in args["data"]["tickets"]
19
+ ticket = Ticket.new(ticket_hash)
20
+ ticket.distributor_id = distributor_id
21
+ ticket.identifier = identifier
22
+ @tickets << ticket
23
+ end
24
+ end
25
+
26
+ #
27
+ # Calls the request type 'list' with given
28
+ #
29
+ # @param distributor_id Integer
30
+ # @return [TicketList]
31
+ def self.find(distributor_id: nil, identifier: '')
32
+ result = PrioTicket::API.call(request_body(distributor_id: distributor_id), identifier, false)
33
+ return_obj = self.new(result, distributor_id, identifier)
34
+ return_obj.distributor_id = distributor_id
35
+ return_obj.identifier = identifier
36
+ return return_obj
37
+ end
38
+
39
+ #
40
+ # Computes the request body to send to the API endpoint
41
+ # @param distributor_id Integer
42
+ #
43
+ # @return Hash
44
+ def self.request_body(distributor_id: nil)
45
+ {
46
+ request_type: "list",
47
+ data: {
48
+ distributor_id: distributor_id
49
+ }
50
+ }
51
+ end
52
+
53
+ end
54
+ end
@@ -0,0 +1,3 @@
1
+ module PrioTicket
2
+ VERSION = "0.1.0"
3
+ end
data/lib/prioticket.rb ADDED
@@ -0,0 +1,109 @@
1
+ # require dependencies
2
+ require 'digest'
3
+ require 'rest_client'
4
+ require 'json'
5
+ require 'base64'
6
+ require 'ostruct'
7
+ require 'date'
8
+
9
+ # require gem files
10
+ require "prioticket/version"
11
+ require "prioticket/prioticket_error"
12
+ require "prioticket/config"
13
+ require "prioticket/engine" if defined?(Rails) && Rails::VERSION::MAJOR.to_i >= 3
14
+
15
+ # require API parts
16
+ require "prioticket/api"
17
+ require "prioticket/ticket_list"
18
+ require "prioticket/ticket"
19
+ require "prioticket/ticket_details"
20
+ require "prioticket/availabilities"
21
+ require "prioticket/reservation"
22
+ require "prioticket/booking"
23
+
24
+ module PrioTicket
25
+
26
+ # For testing purpose only: set the username and password
27
+ # in environment variables to make the tests pass with your test
28
+ # credentials.
29
+ def self.set_credentials_from_environment
30
+ # puts "Setting API Key: #{ENV["PRIOTICKET_API_KEY"]}"
31
+ Config.api_key = ENV["PRIOTICKET_API_KEY"]
32
+ Config.environment = :test
33
+ Config.verbose = false
34
+ end
35
+
36
+ #
37
+ # Formats time in ISO-8601
38
+ # Expected output: 2016-05-12T14:00:00+04:00
39
+ # Not expected: 2016-05-12T10:00:00+08:00 / 2016-05-12T18:00:00+00:00
40
+ #
41
+ # @return [type] [description]
42
+ def self.parsed_date(date)
43
+ if date.is_a?(String)
44
+ date
45
+ elsif [DateTime, Time].include?(date.class)
46
+ date.strftime(expected_date_format)
47
+ # date.strftime('%Y-%m-%d')
48
+ end
49
+ end
50
+
51
+ #
52
+ # Formats time in ISO-8601
53
+ #
54
+ # @return [type] [description]
55
+ def self.expected_date_format
56
+ '%Y-%m-%dT%H:%M:%S%z'
57
+ end
58
+
59
+ # Converts OpenStruct back to a hash
60
+ def self.openstruct_to_hash(object, hash = {})
61
+ object.each_pair do |key, value|
62
+ hash[key] = value.is_a?(OpenStruct) ? openstruct_to_hash(value) : value
63
+ end
64
+ hash
65
+ end
66
+
67
+ #
68
+ # Takes a hash and assignes it to the proper attributes.
69
+ # - Integers will be parsed as floats
70
+ # - Floats will be parsed as floats
71
+ # - Boolean values will bu parsed as such
72
+ # - Hash and Array will bet a type of 'OpenStruct'
73
+ # - DateTime will be a type of DateType
74
+ # - All other values will be used as string
75
+ #
76
+ def self.parse_json_value(obj, k,v)
77
+ unless v.nil?
78
+ # "2018-03-24T00:00:00+01:00"
79
+ is_integer = !!Integer(v) rescue false
80
+ is_float = !!Float(v) rescue false
81
+ is_date_time = !!DateTime.strptime(v, expected_date_format) rescue false
82
+ if ["true", "false"].include?(v)
83
+ val = (v == 'true')
84
+ elsif is_integer
85
+ val = v.to_i
86
+ elsif is_date_time
87
+ val = DateTime.strptime(v, expected_date_format)
88
+ elsif is_float
89
+ val = v.to_f
90
+ elsif [Hash, Array].include?(v.class)
91
+ val = JSON.parse(v.to_json, object_class: OpenStruct)
92
+ else
93
+ val = v
94
+ end
95
+ obj.instance_variable_set("@#{k}", val)
96
+ end
97
+ end
98
+
99
+ end
100
+
101
+
102
+
103
+
104
+ # docs:
105
+ # WNYE9On0Jqn/fivlUVgeyeYckLubVqxJ5mryhfBOfKk=
106
+
107
+
108
+ # real:
109
+ # OTU3IqrnoXVn5QvUsZIoTfKIyOEzOo9BFmWFQFtZbHk=
@@ -0,0 +1,40 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'prioticket/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "prioticket"
8
+ spec.version = PrioTicket::VERSION
9
+ spec.authors = ["Henk Meijer"]
10
+ spec.email = ["hmeijer@eskesmedia.nl"]
11
+
12
+ spec.summary = %q{Ruby implementation of the PrioTicket API}
13
+ spec.description = %q{Ruby implementation of the PrioTicket API}
14
+ spec.homepage = "https://github.com/henkm/prioticket"
15
+ spec.license = "MIT"
16
+
17
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
19
+ if spec.respond_to?(:metadata)
20
+ # spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
21
+ else
22
+ raise "RubyGems 2.0 or newer is required to protect against " \
23
+ "public gem pushes."
24
+ end
25
+
26
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
27
+ f.match(%r{^(test|spec|features)/})
28
+ end
29
+ spec.bindir = "exe"
30
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
+ spec.require_paths = ["lib"]
32
+
33
+ spec.add_dependency "digest"
34
+ spec.add_dependency "rest-client"
35
+ spec.add_dependency "json"
36
+
37
+ spec.add_development_dependency "bundler", "~> 1.13"
38
+ spec.add_development_dependency "rake", "~> 10.0"
39
+ spec.add_development_dependency "rspec", "~> 3.0"
40
+ end
metadata ADDED
@@ -0,0 +1,150 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: prioticket
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Henk Meijer
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2018-03-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: digest
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rest-client
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: json
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.13'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.13'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.0'
97
+ description: Ruby implementation of the PrioTicket API
98
+ email:
99
+ - hmeijer@eskesmedia.nl
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - ".gitignore"
105
+ - ".rspec"
106
+ - ".travis.yml"
107
+ - Gemfile
108
+ - LICENSE.txt
109
+ - README.md
110
+ - Rakefile
111
+ - bin/console
112
+ - bin/setup
113
+ - lib/prioticket.rb
114
+ - lib/prioticket/api.rb
115
+ - lib/prioticket/availabilities.rb
116
+ - lib/prioticket/booking.rb
117
+ - lib/prioticket/config.rb
118
+ - lib/prioticket/engine.rb
119
+ - lib/prioticket/prioticket_error.rb
120
+ - lib/prioticket/reservation.rb
121
+ - lib/prioticket/ticket.rb
122
+ - lib/prioticket/ticket_details.rb
123
+ - lib/prioticket/ticket_list.rb
124
+ - lib/prioticket/version.rb
125
+ - prioticket.gemspec
126
+ homepage: https://github.com/henkm/prioticket
127
+ licenses:
128
+ - MIT
129
+ metadata: {}
130
+ post_install_message:
131
+ rdoc_options: []
132
+ require_paths:
133
+ - lib
134
+ required_ruby_version: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ required_rubygems_version: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ requirements: []
145
+ rubyforge_project:
146
+ rubygems_version: 2.4.5.1
147
+ signing_key:
148
+ specification_version: 4
149
+ summary: Ruby implementation of the PrioTicket API
150
+ test_files: []