flyticket 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ebe16a390b161010c474533890fd79070d7692fd
4
- data.tar.gz: 6d89af551de944c107d317fc9d4a7260ad86bd19
3
+ metadata.gz: 186c7f03815762991f5fa89d04bea543912b8239
4
+ data.tar.gz: d6411ae46181b2a624e196f7d20f1772ca4968e5
5
5
  SHA512:
6
- metadata.gz: 8cdd8cfcf64dd1f10ecdb8ca7a45b2099cd41b31770cb2a1906468b816dca8acf21c9e7fccfd01b95677933ca511c8aafe0a2c4b453aec7421c996cf38c48af4
7
- data.tar.gz: 6509c26e0e2f052cb60eb6cb7c2d8aed54de058d649b03932f077b1c3672964877d9ae017f6aeba9a22aa332235e7435b90f0f982d7b7798a9528aed9e6863f1
6
+ metadata.gz: b099140a4f06e5d3b0806e268d374a28ab2f892c552cefa4eaeb8b2bd16ad71d3f388a0b97de291d06ae9f714473b5924546acc2b7a0fb69b9fa5eea8c899def
7
+ data.tar.gz: 8829e46170d8392537d74b54bcf690c1e8517e7d3fc70a9392ca05cc9a6582e78a338cd587ea4dfea8df3ae2487f9cfedda572cfcdee2640aba22a92f22cda28
data/README.md CHANGED
@@ -3,62 +3,58 @@
3
3
  A Ruby gem for communicating with the [Ticketfly REST API](http://start.ticketfly.com/api/), built
4
4
  on [HTTParty](https://github.com/jnunemaker/httparty).
5
5
 
6
- ## Installation
7
-
8
- Add this line to your application's Gemfile:
9
-
10
- ```ruby
11
- gem 'flyticket'
12
- ```
13
-
14
- And then execute:
15
-
16
- $ bundle
17
-
18
- Or install it yourself as:
19
-
20
- $ gem install flyticket
6
+ I want to hear from you! Let me know if you're finding Flyticket useful, or if
7
+ you have suggestions on what would make it useful for your project. I'm
8
+ currently using it to develop a new website for a Ticketfly "org" so my use case
9
+ is pretty narrow. I just wanted a nice wrapper for the API, and the gems I
10
+ looked at were defunct.
21
11
 
22
12
  ## Example Usage
23
13
 
24
14
  Flyticket is still a work in progress, however, to query for events,
25
15
  use it like so:
26
16
 
17
+ ```ruby
18
+ past = Flyticket::Events.past(venue_id: 1, max_results: 3)
19
+ past.first.facebook_event_id # --> FB event id for this venue's last show
27
20
  ```
28
- upcoming = Flyticket::Events.upcoming(venueId: 1, maxResults: 3)
29
- upcoming.first.venue.name # --> 'Brooklyn Bowl'
30
21
 
31
- past = Flyticket::Events.past(venueId: 1, maxResults: 3)
32
- past.first.facebook_event_id # --> FB event id for this venue's last show
22
+ Flyticket is opinionated about the result format -- it discards Ticketfly's
23
+ outer wrapper (used for pagination) and converts the top-level event hashes into
24
+ OpenStructs, as well as the nested org and venue hashes, but leaves deeper
25
+ properties as hashes. Thus retrieving a deeply-nested attributes looks like
26
+ this:
27
+
28
+ ```ruby
29
+ next_event = Flyticket::Events.upcoming(venue_id: 1, max_results: 1).first
30
+ next_event.image[:medium][:width] # --> 'Brooklyn Bowl'
31
+
32
+ upcoming = Flyticket::Events.upcoming(venue_id: 1, max_results: 3)
33
+ upcoming.first.venue.name # --> 'Brooklyn Bowl'
33
34
  ```
34
35
 
36
+ Note how in the first example, `image` is a method, but deeper properties are
37
+ accessed using hash keys. In the second example, because `venue` is a struct,
38
+ the venue name can be accessed using a method (although `[:name]` works too]).
39
+
35
40
  #### Some useful properties:
36
- * orgId
37
- * venueId
38
- * eventId
39
- * maxResults (capped at 1000)
40
- * pageNum (required when total results > maxResults)
41
- * fromDate
42
- * thruDate
41
+ * org_id
42
+ * venue_id
43
+ * event_id
44
+ * max_results (capped by TicketFly at 1000)
45
+ * page_num (use when total results > max_results)
46
+ * from_date
47
+ * thru_date
43
48
 
44
49
  ## Notes
45
50
 
46
- I haven't committed to an API just yet and won't attempt semantic versioning
47
- until I do.
51
+ I haven't committed to an API just yet and won't attempt semantic versioning until I do.
48
52
 
49
53
  #### TODO
50
- * [ ] use snake case for options
51
- * [ ] handle error response
52
54
  * [ ] make original json available
53
55
  * [ ] handle fields & fieldGroup
54
56
  * [ ] specs
55
57
 
56
- ## Development
57
-
58
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake false` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
59
-
60
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
61
-
62
58
  ## Contributing
63
59
 
64
60
  Bug reports and pull requests are welcome on GitHub at https://github.com/johncip/flyticket.
@@ -36,7 +36,6 @@ Gem::Specification.new do |spec|
36
36
  # racing stripes
37
37
  spec.add_development_dependency "pry", "~> 0.10"
38
38
  spec.add_development_dependency "pry-coolline", "~> 0.2"
39
- spec.add_development_dependency "awesome_print", "~> 1.6"
40
39
 
41
40
  spec.add_runtime_dependency "plissken", "~> 0.2"
42
41
  spec.add_runtime_dependency "httparty", "~> 0.13"
@@ -1,11 +1,11 @@
1
- require 'flyticket/version'
1
+ require 'ostruct'
2
+
2
3
  require 'flyticket/events'
3
4
  require 'flyticket/venues'
4
5
  require 'flyticket/orgs'
6
+ require 'flyticket/version'
5
7
 
6
- # Prevents returned JSON from being wrapped under a 'table' key.
7
- require 'ostruct'
8
-
8
+ # Monkey-patch OStruct to prevent original JSON from being included.
9
9
  class OpenStruct
10
10
  def as_json(options = nil)
11
11
  @table.as_json(options)
@@ -0,0 +1,11 @@
1
+ ### 0.1.2 / February 28, 2016
2
+
3
+ * Add support for snake_case query arguments
4
+ * Implement error class
5
+ * Removed awesome_print from development dependencies
6
+ * Add deep attribute example to readme
7
+ * Added this changelog
8
+
9
+ ### 0.1.1 / February 7, 2016
10
+
11
+ * Initial release
@@ -1,4 +1,3 @@
1
- # TODO: handle error response
2
1
  # TODO: handle fields & fieldGroup
3
2
  # TODO: make original response available
4
3
  # TODO: specs
@@ -7,26 +6,41 @@ require 'httparty'
7
6
  require 'ostruct'
8
7
  require 'plissken'
9
8
 
9
+ require 'flyticket/ticketfly_error'
10
+ require 'flyticket/util'
11
+
10
12
  module Flyticket
11
13
  class Endpoint
12
14
  include HTTParty
13
15
 
16
+ # Returns the key used to get the list of entries from Ticketfly's response.
14
17
  def self.key
15
18
  base_uri.split('/').last
16
19
  end
17
20
 
18
- def self.get_many(fragment, query)
19
- response = get fragment, query: query
21
+ # Gets a single event
22
+ def self.get_many(fragment, options)
23
+ response = get fragment, query: query_string(options)
24
+
25
+ handle_error(response)
20
26
  response[key].map { |hash| objectify(hash) }
21
27
  end
22
28
 
23
- def self.get_one(fragment, query)
24
- response = get fragment, query: query
29
+ # Gets a single event
30
+ def self.get_one(fragment, options)
31
+ response = get fragment, query: query_string(options)
32
+
33
+ handle_error(response)
25
34
  objectify response[key].first
26
35
  end
27
36
 
28
37
  private
29
38
 
39
+ # Camelcases the given options hash.
40
+ def self.query_string(options)
41
+ options.map { |k, v| [Util.camelize(k, false), v] }.to_h
42
+ end
43
+
30
44
  # Converts keys to snake case, then "semi-recursively" converts to OpenStruct.
31
45
  def self.objectify(hash)
32
46
  hash = hash.to_snake_keys
@@ -41,5 +55,12 @@ module Flyticket
41
55
  return unless hash.has_key? key
42
56
  hash[key] = OpenStruct.new(hash[key])
43
57
  end
58
+
59
+ # Raises an error if the response indicates a problem.
60
+ def self.handle_error
61
+ if response['status'] == 'error'
62
+ raise TicketflyError.new(response)
63
+ end
64
+ end
44
65
  end
45
66
  end
@@ -0,0 +1,21 @@
1
+ module Flyticket
2
+ class TicketflyError < StandardError
3
+ attr_reader :response
4
+
5
+ def initialize(response)
6
+ @response = response
7
+ end
8
+
9
+ def code
10
+ response['code']
11
+ end
12
+
13
+ def error_message
14
+ response['codeError']
15
+ end
16
+
17
+ def to_s
18
+ response.pretty_inspect
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,12 @@
1
+ module Flyticket
2
+ class Util
3
+ # Adapted an old version of ActiveSupport.
4
+ def self.camelize(term, first_letter_in_uppercase = true)
5
+ if first_letter_in_uppercase
6
+ term.to_s.gsub(/\/(.?)/) { "::" + $1.upcase }.gsub(/(^|_)(.)/) { $2.upcase }
7
+ else
8
+ term[0] + camelize(term)[1..-1]
9
+ end
10
+ end
11
+ end
12
+ end
@@ -1,3 +1,3 @@
1
1
  module Flyticket
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flyticket
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Cipriano
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-02-07 00:00:00.000000000 Z
11
+ date: 2016-02-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,20 +94,6 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0.2'
97
- - !ruby/object:Gem::Dependency
98
- name: awesome_print
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '1.6'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '1.6'
111
97
  - !ruby/object:Gem::Dependency
112
98
  name: plissken
113
99
  requirement: !ruby/object:Gem::Requirement
@@ -153,9 +139,12 @@ files:
153
139
  - bin/setup
154
140
  - flyticket.gemspec
155
141
  - lib/flyticket.rb
142
+ - lib/flyticket/Changelog.md
156
143
  - lib/flyticket/endpoint.rb
157
144
  - lib/flyticket/events.rb
158
145
  - lib/flyticket/orgs.rb
146
+ - lib/flyticket/ticketfly_error.rb
147
+ - lib/flyticket/util.rb
159
148
  - lib/flyticket/venues.rb
160
149
  - lib/flyticket/version.rb
161
150
  homepage: https://github.com/johncip/flyticket