prioticket 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []