ticketevolution-ruby 0.7.11 → 0.7.16

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.
Files changed (52) hide show
  1. data/lib/ext/hash.rb +1 -0
  2. data/lib/faraday/localhost_header.rb +36 -0
  3. data/lib/ticket_evolution.rb +15 -1
  4. data/lib/ticket_evolution/accounts/transactions.rb +8 -0
  5. data/lib/ticket_evolution/address.rb +4 -0
  6. data/lib/ticket_evolution/clients.rb +4 -0
  7. data/lib/ticket_evolution/clients/addresses.rb +14 -0
  8. data/lib/ticket_evolution/clients/credit_cards.rb +2 -0
  9. data/lib/ticket_evolution/core/collection.rb +5 -3
  10. data/lib/ticket_evolution/core/connection.rb +3 -0
  11. data/lib/ticket_evolution/core/model.rb +1 -0
  12. data/lib/ticket_evolution/core/model/parental_behavior.rb +3 -1
  13. data/lib/ticket_evolution/modules/destroy.rb +1 -1
  14. data/lib/ticket_evolution/offices/credit_cards.rb +10 -0
  15. data/lib/ticket_evolution/order.rb +8 -0
  16. data/lib/ticket_evolution/orders.rb +27 -0
  17. data/lib/ticket_evolution/orders/payments.rb +8 -0
  18. data/lib/ticket_evolution/payment.rb +4 -0
  19. data/lib/ticket_evolution/service_fee.rb +4 -0
  20. data/lib/ticket_evolution/settings.rb +42 -0
  21. data/lib/ticket_evolution/shipping_setting.rb +4 -0
  22. data/lib/ticket_evolution/taken_ticket.rb +4 -0
  23. data/lib/ticket_evolution/{transactions.rb → taken_tickets.rb} +1 -2
  24. data/lib/ticket_evolution/ticket_group.rb +15 -0
  25. data/lib/ticket_evolution/ticket_groups.rb +30 -0
  26. data/lib/ticket_evolution/ticket_groups/ticket_holds.rb +7 -0
  27. data/lib/ticket_evolution/ticket_hold.rb +4 -0
  28. data/lib/ticket_evolution/version.rb +1 -1
  29. data/spec/fixtures/fake.rb +30 -0
  30. data/spec/fixtures/net/endpoints/settings.yml +80 -0
  31. data/spec/fixtures/net/endpoints/settings_service_fees.yml +41 -0
  32. data/spec/lib/ext/hash_spec.rb +9 -0
  33. data/spec/lib/faraday/localhost_header_spec.rb +61 -0
  34. data/spec/lib/ticket_evolution/{transactions_spec.rb → accounts/transactions_spec.rb} +2 -2
  35. data/spec/lib/ticket_evolution/clients/addresses_spec.rb +13 -0
  36. data/spec/lib/ticket_evolution/clients_spec.rb +11 -0
  37. data/spec/lib/ticket_evolution/core/collection_spec.rb +79 -29
  38. data/spec/lib/ticket_evolution/core/model_spec.rb +6 -0
  39. data/spec/lib/ticket_evolution/offices/credit_cards_spec.rb +12 -0
  40. data/spec/lib/ticket_evolution/orders/payments_spec.rb +10 -0
  41. data/spec/lib/ticket_evolution/orders_spec.rb +11 -0
  42. data/spec/lib/ticket_evolution/payment_spec.rb +7 -0
  43. data/spec/lib/ticket_evolution/service_fee_spec.rb +7 -0
  44. data/spec/lib/ticket_evolution/settings_spec.rb +32 -0
  45. data/spec/lib/ticket_evolution/shipping_setting_spec.rb +7 -0
  46. data/spec/lib/ticket_evolution/taken_tickets_spec.rb +12 -0
  47. data/spec/lib/ticket_evolution/ticket_group_spec.rb +41 -0
  48. data/spec/lib/ticket_evolution/ticket_groups/ticket_holds_spec.rb +9 -0
  49. data/spec/lib/ticket_evolution/ticket_groups_spec.rb +45 -0
  50. data/spec/lib/ticket_evolution/ticket_hold_spec.rb +7 -0
  51. data/spec/shared_examples/endpoints/destroy.rb +0 -1
  52. metadata +61 -26
data/lib/ext/hash.rb CHANGED
@@ -2,6 +2,7 @@ class Hash
2
2
  def to_ordered_hash
3
3
  ActiveSupport::OrderedHash.new.tap do |hash|
4
4
  self.sort_by{|k,v| k.to_s}.each do |k, v|
5
+ v = v.sort_by { |e| e.to_s } if v.is_a? Array
5
6
  hash[k] = v
6
7
  end
7
8
  end
@@ -0,0 +1,36 @@
1
+ # Faraday request middleware that processes requests made to domains such as
2
+ # *.lvh.me or *.xip.io. When encountering one, it swaps out the hostname with
3
+ # the raw IP, but populates the 'Host' request HTTP header with the original
4
+ # hostname.
5
+ #
6
+ # This enables usage of lvh.me and xip.io domains even when their DNS service
7
+ # is down, because it completely circumvents any DNS lookup.
8
+ class FaradayLocalhostHeader
9
+ attr_reader :app, :patterns
10
+
11
+ HOST = 'Host'.freeze
12
+ HOME = '127.0.0.1'
13
+
14
+ def initialize app, patterns
15
+ @app = app
16
+ @patterns = Array(patterns)
17
+ end
18
+
19
+ def call env
20
+ detect_domain_hack env[:url] do |hostname, ip|
21
+ env[:url].host = ip
22
+ env[:request_headers][HOST] = hostname
23
+ end
24
+ app.call env
25
+ end
26
+
27
+ def detect_domain_hack url
28
+ patterns.each do |re|
29
+ if url.host =~ re
30
+ ip = $1 ? $1.chomp('.') : HOME
31
+ yield url.host, ip
32
+ return
33
+ end
34
+ end
35
+ end
36
+ end
@@ -76,15 +76,20 @@ i.req 'company'
76
76
  i.req 'client'
77
77
  i.req 'configuration'
78
78
  i.req 'credit_card'
79
+ i.req 'ticket_hold'
79
80
  i.req 'email_address'
80
81
  i.req 'event'
81
82
  i.req 'office'
82
83
  i.req 'order'
84
+ i.req 'payment'
83
85
  i.req 'performer'
84
86
  i.req 'phone_number'
85
87
  i.req 'quote'
86
88
  i.req 'rate_option'
89
+ i.req 'service_fee'
87
90
  i.req 'shipment'
91
+ i.req 'shipping_setting'
92
+ i.req 'taken_ticket'
88
93
  i.req 'ticket_group'
89
94
  i.req 'track_detail'
90
95
  i.req 'transaction'
@@ -104,10 +109,11 @@ i.req 'orders'
104
109
  i.req 'performers'
105
110
  i.req 'quotes'
106
111
  i.req 'rate_options'
112
+ i.req 'settings'
107
113
  i.req 'shipments'
114
+ i.req 'taken_tickets'
108
115
  i.req 'ticket_groups'
109
116
  i.req 'track_details'
110
- i.req 'transactions'
111
117
  i.req 'users'
112
118
  i.req 'venues'
113
119
  i.req 'search'
@@ -116,3 +122,11 @@ i.req 'clients', 'addresses'
116
122
  i.req 'clients', 'credit_cards'
117
123
  i.req 'clients', 'email_addresses'
118
124
  i.req 'clients', 'phone_numbers'
125
+
126
+ i.req 'accounts', 'transactions'
127
+
128
+ i.req 'offices', 'credit_cards'
129
+
130
+ i.req 'orders', 'payments'
131
+
132
+ i.req 'ticket_groups', 'ticket_holds'
@@ -0,0 +1,8 @@
1
+ module TicketEvolution
2
+ class Accounts
3
+ class Transactions < TicketEvolution::Endpoint
4
+ include TicketEvolution::Modules::List
5
+ include TicketEvolution::Modules::Show
6
+ end
7
+ end
8
+ end
@@ -1,4 +1,8 @@
1
1
  module TicketEvolution
2
2
  class Address < Model
3
+ def fedex_check
4
+ plural_class.new(:parent => @connection,:id => self.id).fedex_check
5
+ end
6
+
3
7
  end
4
8
  end
@@ -4,5 +4,9 @@ module TicketEvolution
4
4
  include TicketEvolution::Modules::List
5
5
  include TicketEvolution::Modules::Show
6
6
  include TicketEvolution::Modules::Update
7
+
8
+ def create_from_office(params = nil)
9
+ request(:POST, "/create_from_office/#{params[:office_id]}", nil, &method(:build_for_show))
10
+ end
7
11
  end
8
12
  end
@@ -6,6 +6,20 @@ module TicketEvolution
6
6
  include TicketEvolution::Modules::Show
7
7
  include TicketEvolution::Modules::Update
8
8
  include TicketEvolution::Modules::Destroy
9
+
10
+ def fedex_check(id, params=nil, &handler)
11
+ handler ||= method(:fedex_check_handler)
12
+ request(:GET, "/#{id}/fedex_check", nil, &handler)
13
+ end
14
+
15
+ def fedex_check_handler(response)
16
+ singular_class.new(response.body.merge({
17
+ :status_code => response.response_code,
18
+ :server_message => response.server_message,
19
+ :connection => response.body[:connection]
20
+ }))
21
+ end
22
+
9
23
  end
10
24
  end
11
25
  end
@@ -3,6 +3,8 @@ module TicketEvolution
3
3
  class CreditCards < TicketEvolution::Endpoint
4
4
  include TicketEvolution::Modules::Create
5
5
  include TicketEvolution::Modules::List
6
+ include TicketEvolution::Modules::Update
7
+ include TicketEvolution::Modules::Destroy
6
8
  end
7
9
  end
8
10
  end
@@ -1,6 +1,6 @@
1
1
  module TicketEvolution
2
2
  class Collection
3
- attr_accessor :total_entries, :per_page, :current_page, :entries, :status_code
3
+ attr_accessor :total_entries, :per_page, :current_page, :entries, :status_code, :unique_categories
4
4
 
5
5
  include Enumerable
6
6
 
@@ -15,7 +15,7 @@ module TicketEvolution
15
15
 
16
16
  def self.build_from_response(response, entries_key, singular_class)
17
17
  entries = response.body[entries_key] || []
18
- new(
18
+ values = {
19
19
  :status_code => response.response_code,
20
20
  :total_entries => response.body['total_entries'],
21
21
  :per_page => response.body['per_page'],
@@ -23,7 +23,9 @@ module TicketEvolution
23
23
  :entries => entries.collect do |entry|
24
24
  singular_class.new(entry.merge({:connection => response.body[:connection]}))
25
25
  end
26
- )
26
+ }
27
+ values[:unique_categories] = response.body['unique_categories'] if response.body['unique_categories']
28
+ new(values)
27
29
  end
28
30
  end
29
31
  end
@@ -1,3 +1,5 @@
1
+ require 'faraday/localhost_header'
2
+
1
3
  module TicketEvolution
2
4
  class Connection < Base
3
5
  cattr_reader :default_options, :expected_options, :oldest_version_in_service
@@ -82,6 +84,7 @@ module TicketEvolution
82
84
  options[:headers]["Accept"] = "application/vnd.ticketevolution.api+json; version=#{@config[:version]}" unless @config[:version] > 8
83
85
  Faraday.new(self.uri(path), options) do |builder|
84
86
  builder.use Faraday::Response::VerboseLogger, self.logger if self.logger.present?
87
+ builder.use FaradayLocalhostHeader, [ /(?:^|\.)lvh\.me$/i, /(?:^|\.)((?:\d+\.){4})xip\.io$/i ]
85
88
  builder.adapter @adapter
86
89
  end
87
90
  end
@@ -63,6 +63,7 @@ module TicketEvolution
63
63
 
64
64
  def method_missing(method, *args)
65
65
  begin
66
+ method = method.to_s.gsub("_endpoint", "") if method.to_s.end_with? "_endpoint"
66
67
  "#{plural_class_name}::#{method.to_s.camelize}".constantize.new(:parent => plural_class.new(:parent => @connection, :id => self.id))
67
68
  rescue
68
69
  super
@@ -1,7 +1,9 @@
1
1
  module TicketEvolution
2
2
  module EndpointBehavior
3
3
  def endpoint=(e); @endpoint = e; end
4
- def method_missing(method, *args); @endpoint.send(method, *args); end
4
+ def method_missing(method, *args)
5
+ @endpoint.send(method, *args)
6
+ end
5
7
  end
6
8
 
7
9
  class Model
@@ -23,7 +23,7 @@ module TicketEvolution
23
23
  end
24
24
 
25
25
  def build_for_destroy(response)
26
- return true
26
+ response.body
27
27
  end
28
28
  end
29
29
  end
@@ -0,0 +1,10 @@
1
+ module TicketEvolution
2
+ class Offices
3
+ class CreditCards < TicketEvolution::Endpoint
4
+ include TicketEvolution::Modules::Create
5
+ include TicketEvolution::Modules::List
6
+ include TicketEvolution::Modules::Update
7
+ include TicketEvolution::Modules::Destroy
8
+ end
9
+ end
10
+ end
@@ -11,5 +11,13 @@ module TicketEvolution
11
11
  def reject(params)
12
12
  plural_class.new(:parent => @connection).reject_order(params)
13
13
  end
14
+
15
+ def email(params)
16
+ plural_class.new(:parent => @connection,:id => self.id).email_order(params)
17
+ end
18
+
19
+ def print
20
+ plural_class.new(:parent => @connection,:id => self.id).print_order
21
+ end
14
22
  end
15
23
  end
@@ -9,6 +9,10 @@ module TicketEvolution
9
9
  alias :create_client_order :create
10
10
  alias :create_customer_order :create
11
11
 
12
+ def balance(params = nil)
13
+ request(:GET, '/balance', params, &method(:build_for_show))
14
+ end
15
+
12
16
  def accept_order(params = nil)
13
17
  ensure_id
14
18
  request(:POST, "/#{self.id}/accept", params, &method(:build_for_create))
@@ -27,5 +31,28 @@ module TicketEvolution
27
31
  ensure_id
28
32
  request(:POST, "/#{self.id}/complete", nil, &method(:build_for_create))
29
33
  end
34
+
35
+ def email_order(params = nil)
36
+ ensure_id
37
+ request(:POST, "/email", params) do |response|
38
+ singular_class.new(response.body.merge({
39
+ :status_code => response.response_code,
40
+ :server_message => response.server_message,
41
+ :connection => response.body[:connection]
42
+ }))
43
+ end
44
+ end
45
+
46
+ def print_order
47
+ ensure_id
48
+ request(:GET, "/print", nil) do |response|
49
+ singular_class.new(response.body.merge({
50
+ :status_code => response.response_code,
51
+ :server_message => response.server_message,
52
+ :connection => response.body[:connection]
53
+ }))
54
+ end
55
+ end
56
+
30
57
  end
31
58
  end
@@ -0,0 +1,8 @@
1
+ module TicketEvolution
2
+ class Orders
3
+ class Payments < TicketEvolution::Endpoint
4
+ include TicketEvolution::Modules::List
5
+ include TicketEvolution::Modules::Create
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,4 @@
1
+ module TicketEvolution
2
+ class Payment < Model
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module TicketEvolution
2
+ class ServiceFee < Model
3
+ end
4
+ end
@@ -0,0 +1,42 @@
1
+ module TicketEvolution
2
+ class Settings < Endpoint
3
+ def shipping(params = {})
4
+ request(:GET, "/shipping", params, &method(:build_for_shipping))
5
+ end
6
+
7
+ def build_for_shipping(response)
8
+ collection = TicketEvolution::Collection.new(
9
+ :total_entries => response.body['total_entries']
10
+ )
11
+
12
+ response.body['settings'].each do |result|
13
+ collection.entries << "TicketEvolution::ShippingSetting".
14
+ constantize.new(result.merge({:connection => connection}))
15
+ end
16
+
17
+ collection
18
+ end
19
+
20
+ def service_fees(params = {})
21
+ request(:GET, "/service_fees", params, &method(:build_for_service_fees))
22
+ end
23
+
24
+ def build_for_service_fees(response)
25
+ collection = TicketEvolution::Collection.new(
26
+ :total_entries => response.body['total_entries']
27
+ )
28
+
29
+ response.body['settings'].each do |result|
30
+ collection.entries << "TicketEvolution::ServiceFee".
31
+ constantize.new(result.merge({:connection => connection}))
32
+ end
33
+
34
+ collection
35
+ end
36
+
37
+ def singular_class(klass = self.class)
38
+ TicketEvolution::ShippingSetting
39
+ end
40
+ end
41
+ end
42
+
@@ -0,0 +1,4 @@
1
+ module TicketEvolution
2
+ class ShippingSetting < Model
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module TicketEvolution
2
+ class TakenTicket < Model
3
+ end
4
+ end
@@ -1,6 +1,5 @@
1
1
  module TicketEvolution
2
- class Transactions < Endpoint
2
+ class TakenTickets < Endpoint
3
3
  include TicketEvolution::Modules::List
4
- include TicketEvolution::Modules::Show
5
4
  end
6
5
  end
@@ -1,4 +1,19 @@
1
1
  module TicketEvolution
2
2
  class TicketGroup < Model
3
+ def hold(params)
4
+ plural_class.new(:parent => @connection, :id => self.id).hold(params)
5
+ end
6
+ def take(params)
7
+ plural_class.new(:parent => @connection, :id => self.id).take(params)
8
+ end
9
+ def release_hold(params)
10
+ plural_class.new(:parent => @connection, :id => self.id).release_hold(params)
11
+ end
12
+ def waste(params)
13
+ plural_class.new(:parent => @connection, :id => self.id).waste(params)
14
+ end
15
+ def toggle_broadcast(params)
16
+ plural_class.new(:parent => @connection, :id => self.id).toggle_broadcast(params)
17
+ end
3
18
  end
4
19
  end
@@ -2,5 +2,35 @@ module TicketEvolution
2
2
  class TicketGroups < Endpoint
3
3
  include TicketEvolution::Modules::List
4
4
  include TicketEvolution::Modules::Show
5
+ include TicketEvolution::Modules::Update
6
+
7
+ def hold(params = nil)
8
+ ensure_id
9
+ request(:POST, "/hold", params, &method(:build_for_show))
10
+ end
11
+
12
+ def take(params = nil)
13
+ ensure_id
14
+ request(:POST, "/take", params, &method(:build_for_show))
15
+ end
16
+ def release_hold(params = nil)
17
+ ensure_id
18
+ request(:POST, "/release_hold/#{params[:ticket_hold_id]}", nil, &method(:build_for_show))
19
+ end
20
+
21
+ def waste(params = nil)
22
+ ensure_id
23
+ request(:POST, "/waste", params, &method(:build_for_show))
24
+ end
25
+
26
+ def toggle_broadcast(params = nil)
27
+ ensure_id
28
+ request(:POST, "/broadcast", params, &method(:build_for_show))
29
+ end
30
+
31
+ def index_cart(ids = [])
32
+ handler ||= method(:collection_handler)
33
+ request(:GET, '/index_cart', ids, &handler)
34
+ end
5
35
  end
6
36
  end
@@ -0,0 +1,7 @@
1
+ module TicketEvolution
2
+ class TicketGroups
3
+ class TicketHolds < TicketEvolution::Endpoint
4
+ include TicketEvolution::Modules::List
5
+ end
6
+ end
7
+ end