hungry 0.1.1 → 0.1.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 727c8412f24747994f5d78fb878cf4395d4a27a7
4
- data.tar.gz: bb34ee3aa41e193691691f8dbd1bcb89185f0fec
2
+ SHA256:
3
+ metadata.gz: e23ebde7da2f1760c6504256a9520966ddb5b7cc6a1494bbe4764f590d0c4e28
4
+ data.tar.gz: e0ba51bf6aa0ca1e3e678c5d47030c95742e9fbcedfea677a1ef565729d430a1
5
5
  SHA512:
6
- metadata.gz: 3913b5129f06438aa3ecf6caef0a2dcef6873397cba0000bda8c6e35148edaf4f1fb54204915c47212778d6c9188b237af2247ad464b16e055485b7ede47b703
7
- data.tar.gz: 4baccb57329f03cc105118497628d9e4413c7e7fbdd1fab93cff4d69ca9e7be2acb7c62654ed513773afcdf89715f4486ae1cfbd9c092926d50501ed6ab40caf
6
+ metadata.gz: b0c46d06c571ab606b5a158dca21795cde6b858dad5c6847465977ae102b93f7fe232d8cd6227f2991c98d4233920fb6a2fddf08545b827a474bdac9e9c48001
7
+ data.tar.gz: 9339bd32031272b9dcebad2d604071007005b6202f960ba7f17c5801aa8460b721bdf803e4d11762a31841d9619b05a35e1201dd25c928a8e9dc66e679432912
@@ -1,6 +1,3 @@
1
- # SSH Key to pull private repositories:
2
- source_key: "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBM0MySG13YUFIOTQrOW9pb1NSU2I4enk3OHlQemxuL0hxcEdEVjhWREllR1NseTFPCi9VUmVpRnpkcEY2eEN1Y3RRWFkvVHA3QTBxKzMrMWd5cnBuZW00SWNVYUZTZ1kxelYxZ2JQY0VWVzJlWDIxVlEKN1pDdVBIYzFkbDI1K2gvbzQ3Z0l6aWwrT3dyUTNvdFVjdE9KNzk1ckxYZlp3SVAxMDZGcU9UTEhiWVluRGJjZgptYnZzSlllQmJtcEs3YlZndGs1cTdSUW5qWHlzRE0rWndObTZmamlOZWh5QTFCdlZrVWlpM2VQN3N1Q0g0ZHVUCkNVa3hKcFg2S3RKMzRxcHhvMDhlSDBvUUdSRDkrSEZjcDdYTEdJQmhCSzZhMzJTUURJci9KRy9CSWZnSTBYVkcKL1BsbU1wUmZpdlZkaGNXQUVNQmgzVzA4VkFLbmVpTUFXVUZYMFFJREFRQUJBb0lCQUJwVzJBSVRwUUFxOWgxSAorOW5DUFdXN3ZrQTM3TXYwUFU2S1djd0dMU0hBZW1qYllyZXBsaVY1OW9uVFNocWp6U1lubnlzb2txaWhuTURVCnJEdDI3TXB0cGpXZHR1RUlxdU9vQnBvOG52RndVeHBKK29SdzZtY1JXN1B0UW5KSm52S2U4VzY0U0FHSUtiUjEKdG9TR0NkcElJVW92TEQxN2k4emxZbSsxUTJZMmpXVVRoQ1VUMDh3WE1GWlZqd3BZaWdWeGNxYXQ1NWtNcUw0RwpRZGJXam1Ldm9UMkZMbDVWVCtqOERuRStlbEFhL2plamJVbURVNkRFVVZpYzdMNTM5ZG1ZNjBZVzhxSnkvajNUCkJlbHREK252RUhQTmZEY01UMkoxQks2TVpZQjBSNXpxVmdyY0d4dkJNV3pxeUNTRTczODdpYm1Lb054OTlyV3MKT1dPTlBvRUNnWUVBOGhhbjdoWkxvalpyT3Z3UGtVOTUvckI3YWZHcFdCbkFQcUtLdUFwNTgwd3M1SmJLeXZEdwo2bWlhVFJrcW5SWU93c081ZTV4aU5teXZqVlpoZ245Wml5VGxvZWI4Y3ZkeWFPeGhqMjYxKzI4TXltYkxGcnN3CmptMEJucCswUVdKNERzbHRtT255WG1MTUdjQ2xGTDROWkRFZWZDVmJiNVlhRGNRYTdUN0lIbDhDZ1lFQTZOU00KUjdLNG5wTE0rc1hBOHhjeFVGTkxiTjBZMTVXT1pMVUREcnprVDBDOUtnYWkwd2VlYitxa0tuNUxSeVlNM0lxLwp0ZFBOL3NXb0wwZjFmRlNJcVZEL3lwNmhjWFlTaXhnSmFRZEUvZTV5dWd5M0c0RHJzc1lOMkpDMnFpdFQwOXFECloxL0IzMU9QYXZJa3dYMGF1SGpmUVB0U3hDWnZ6MmVSZ21SeDE4OENnWUJ1YUZqRUk5VHdzUUxzanNLRzBnbGcKVjVxaGNiNTYySnV0dFRHd3g4NWdZSkJrM0VTMmszWThZZUpsWVNIbkxJVWszR0MrZUU3dVpWa1hDNXREQ2RPTAp1eE1qYUpZZjFLeVFINlpLNVFJSUh0aGxnc1lDb3ZKOU1rZTMwVHhEU2FaWmtCSDAyRlZhS0pMTzkrWVI5SzlrCnoyWUkxbnpDQW1IMWYwZU1oY0o4M3dLQmdRQzkvRG9mZ3psY3c4TVpXZVpSTmZxYVplMWsvcUQzd1dTNHptK1oKUmc4eWtFd0xEL0VySzh0ZjNXSnAvallrNzJxTlIzYVp3eVFUSVd4VWNHNWpMb041VGN2N3BTZHRjd0E4bWJlTQpDVStGdVYzS2JQZTVMS0NuZHk3ektWcTBUcmlQWlgzV0MzQWljSWZWcDVMUWcrb2EzeDZsWXE2dHVnT0FoUzFaCjdlWnJSd0tCZ0F0eUdBTlkrektRa285R2lNOU9ISCtIc1ErMCtwRE5PZE5lOE4va3RLR25XSDI0bzJzTzNXWjkKMS84amtKR3MyNnhnUUg1TitQKzZXZXk4dDA5MFhyRHFFSHA1bEUyd0d4eGJSN3kwSTk5NUV2enYyU3d0c2ViUwo2STRLYXpVTTJMblJBbG5IOWdMWDhWaGJBZWIvN2xhQk9KODloQjROZGF2Y1gxZkRjcFd0Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg=="
3
-
4
1
  # Project settings:
5
2
  language: ruby
6
3
  rvm:
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- hungry (0.1.0)
4
+ hungry (0.1.1)
5
5
  httparty
6
6
 
7
7
  GEM
data/Rakefile CHANGED
@@ -5,11 +5,11 @@ task :console do
5
5
  require 'irb'
6
6
  require 'irb/completion'
7
7
  require_relative './lib/hungry'
8
-
8
+
9
9
  Hungry.logger = Logger.new(STDOUT).tap do |logger|
10
10
  logger.level = Logger::DEBUG
11
11
  end
12
-
12
+
13
13
  ARGV.clear
14
14
  IRB.start
15
15
  end
@@ -1,21 +1,18 @@
1
1
  # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path('../lib', __FILE__)
3
- require 'hungry'
4
-
5
2
  Gem::Specification.new do |s|
6
3
  s.name = 'hungry'
7
- s.version = Hungry::VERSION
4
+ s.version = '0.1.2'
8
5
  s.authors = ['Tom-Eric Gerritsen']
9
6
  s.email = ['tomeric@eet.nu']
10
7
  s.homepage = 'http://github.com/eet-nu/hungry'
11
8
  s.summary = %q{An interface to the Eet.nu API.}
12
9
  s.description = %q{An interface to the Eet.nu API.}
13
-
10
+
14
11
  s.files = `git ls-files`.split("\n")
15
12
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
13
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
14
  s.require_paths = ['lib']
18
-
15
+
19
16
  # specify any dependencies here:
20
17
  s.add_dependency 'httparty'
21
18
  end
@@ -1,33 +1,31 @@
1
1
  $LOAD_PATH << File.expand_path('..', __FILE__)
2
-
2
+
3
3
  require 'support/presence'
4
4
  require 'support/symbolize_keys'
5
5
 
6
6
  module Hungry
7
- VERSION = '0.1.1'
8
-
9
7
  class << self
10
8
  attr_accessor :api_url, :credentials, :json_parser, :logger
11
9
  end
12
-
10
+
13
11
  def self.credentials=(new_credentials = {})
14
12
  @credentials = new_credentials.symbolize_keys
15
-
13
+
16
14
  Resource.basic_auth credentials[:username], credentials[:password]
17
15
  Collection.basic_auth credentials[:username], credentials[:password]
18
16
  end
19
-
17
+
20
18
  ### LIBRARY:
21
-
19
+
22
20
  # Utility:
23
21
  autoload :Collection, 'hungry/collection'
24
22
  autoload :Resource, 'hungry/resource'
25
23
  autoload :Util, 'hungry/util'
26
-
24
+
27
25
  # Helpers:
28
26
  autoload :Geolocation, 'hungry/geolocation'
29
27
  autoload :Location, 'hungry/location'
30
-
28
+
31
29
  # Models:
32
30
  autoload :City, 'hungry/city'
33
31
  autoload :Country, 'hungry/country'
@@ -39,17 +37,17 @@ module Hungry
39
37
  autoload :Tag, 'hungry/tag'
40
38
  autoload :User, 'hungry/user'
41
39
  autoload :Venue, 'hungry/venue'
42
-
40
+
43
41
  ### EXCEPTIONS:
44
-
42
+
45
43
  # Exception raised when a geolocation is required, but it is not given:
46
44
  class GeolocationNotGiven < StandardError; end
47
-
45
+
48
46
  # Exception raised when an endpoint is not specified for a resource:
49
47
  class EndpointNotSpecified < StandardError; end
50
-
48
+
51
49
  ### CONFIGURATION:
52
-
50
+
53
51
  self.credentials = { username: nil, password: nil }
54
52
  self.api_url = 'https://api.eet.nu/'
55
53
  self.json_parser = lambda do |json|
@@ -1,7 +1,7 @@
1
1
  module Hungry
2
2
  class City < Location
3
-
3
+
4
4
  self.default_criteria = { type: 'City' }
5
-
5
+
6
6
  end
7
7
  end
@@ -4,42 +4,42 @@ module Hungry
4
4
  class Collection
5
5
  include Enumerable
6
6
  include HTTParty
7
-
7
+
8
8
  autoload :Pagination, 'hungry/collection/pagination'
9
-
9
+
10
10
  attr_reader :klass, :endpoint, :criteria
11
-
11
+
12
12
  ### CLASS METHODS:
13
-
13
+
14
14
  def self.get(*args)
15
15
  self.base_uri Hungry.api_url
16
-
16
+
17
17
  super
18
18
  end
19
-
19
+
20
20
  ### INSTANCE METHODS:
21
-
21
+
22
22
  def initialize(klass, endpoint, criteria = {})
23
23
  @klass = klass
24
24
  @endpoint = endpoint
25
25
  @criteria = criteria.symbolize_keys
26
26
  end
27
-
27
+
28
28
  def from_url(url)
29
29
  uri = URI.parse(url)
30
30
  options = Util.params_from_uri(uri) || klass.default_criteria
31
-
31
+
32
32
  self.class.new(klass, uri.path, options)
33
33
  end
34
-
34
+
35
35
  def all(new_criteria = {})
36
36
  self.class.new(klass, endpoint, criteria.merge(new_criteria))
37
37
  end
38
-
38
+
39
39
  def [](index)
40
40
  build_resource results[index]
41
41
  end
42
-
42
+
43
43
  def first(n = 1)
44
44
  if n == 1 && (value = results.first)
45
45
  build_resource value
@@ -49,7 +49,7 @@ module Hungry
49
49
  end
50
50
  end
51
51
  end
52
-
52
+
53
53
  def count(*args)
54
54
  if args.present?
55
55
  super
@@ -57,40 +57,40 @@ module Hungry
57
57
  results.count
58
58
  end
59
59
  end
60
-
60
+
61
61
  def each(&block)
62
62
  results.each do |result|
63
63
  yield build_resource(result)
64
64
  end
65
65
  end
66
-
66
+
67
67
  def results
68
68
  @results ||= json['results']
69
69
  end
70
-
70
+
71
71
  def results=(results)
72
72
  @results = results
73
73
  end
74
-
74
+
75
75
  protected
76
-
76
+
77
77
  def build_resource(result)
78
78
  resource = klass.new(result)
79
79
  resource.data_source = data_source
80
80
  resource
81
81
  end
82
-
82
+
83
83
  def data_source
84
84
  Util.uri_with_params(endpoint, criteria)
85
85
  end
86
-
86
+
87
87
  def json
88
88
  @json ||= Util.parse_json(response.body)
89
89
  end
90
-
90
+
91
91
  def response
92
92
  raise NoEndpointSpecified unless endpoint
93
-
93
+
94
94
  @response ||= begin
95
95
  Util.log "GET: #{data_source}"
96
96
  self.class.get data_source
@@ -1,7 +1,7 @@
1
1
  module Hungry
2
2
  class Country < Location
3
-
3
+
4
4
  self.default_criteria = { type: 'Country' }
5
-
5
+
6
6
  end
7
7
  end
@@ -1,27 +1,27 @@
1
1
  module Hungry
2
2
  class Geolocation
3
3
  attr_accessor :latitude, :longitude
4
-
4
+
5
5
  def self.parse(input)
6
6
  # input is already a Geolocation, so we can return it early:
7
7
  return input if input.is_a?(self)
8
8
 
9
9
  if input.respond_to?(:geolocation)
10
10
  # input has a geolocation attribute, so try to use that one first:
11
- geolocation = parse(input.geolocation)
11
+ geolocation = parse(input.geolocation)
12
12
  return geolocation if geolocation
13
13
  end
14
-
14
+
15
15
  coordinates = []
16
-
16
+
17
17
  if input.respond_to?(:latitude) && input.respond_to?(:longitude)
18
18
  # input has latitude and longitude attributes, so use those:
19
19
  coordinates = [input.latitude, input.longitude]
20
-
20
+
21
21
  elsif input.respond_to?(:lat) && input.respond_to?(:lng)
22
22
  # input has lat and lng attributes, so use those:
23
23
  coordinates = [input.lat, input.lng]
24
-
24
+
25
25
  elsif input.respond_to?(:match)
26
26
  # Example: "50.8469397,5.6927505"
27
27
  #
@@ -30,40 +30,40 @@ module Hungry
30
30
  if match = input.match(/^([0-9\.]+),\s?([0-9\.]+)$/)
31
31
  coordinates = [match[1], match[2]]
32
32
  end
33
-
33
+
34
34
  elsif input.respond_to?(:keys)
35
35
  # Example: { latitude: 50.8469397, longitude: 5.6927505 }
36
36
  #
37
37
  # input is a Hash, so we can extract values with the keys:
38
38
  coordinates = [input[:latitude] || input[:lat], input[:longitude] || input[:lng]]
39
-
39
+
40
40
  elsif input.respond_to?(:[])
41
41
  # Example: [50.8469397, 5.6927505]
42
42
  #
43
43
  # input is an Array, so we need the first and second value:
44
44
  coordinates = input[0], input[1]
45
45
  end
46
-
46
+
47
47
  coordinates = coordinates.map(&:presence).compact
48
-
48
+
49
49
  if coordinates.length == 2 && coordinates.all? { |coordinate| Util.is_numeric?(coordinate) }
50
50
  new(*coordinates)
51
51
  end
52
52
  end
53
-
53
+
54
54
  def initialize(latitude, longitude)
55
55
  self.latitude = latitude.to_f
56
56
  self.longitude = longitude.to_f
57
57
  end
58
-
58
+
59
59
  def to_s
60
60
  [latitude, longitude].join(',')
61
61
  end
62
-
62
+
63
63
  def [](key)
64
64
  to_h.send(:[], key)
65
65
  end
66
-
66
+
67
67
  def []=(key, value)
68
68
  case key.to_sym
69
69
  when :latitude
@@ -72,7 +72,7 @@ module Hungry
72
72
  self.longitude = value.to_f
73
73
  end
74
74
  end
75
-
75
+
76
76
  def to_h
77
77
  {
78
78
  latitude: latitude,
@@ -1,24 +1,24 @@
1
1
  module Hungry
2
2
  class Location < Resource
3
-
3
+
4
4
  self.endpoint = '/locations'
5
-
5
+
6
6
  ### RESOURCES:
7
-
7
+
8
8
  has_many :venues, 'Hungry::Venue'
9
-
9
+
10
10
  has_many :nearby_venues, 'Hungry::Venue'
11
-
11
+
12
12
  has_many :tags, 'Hungry::Tag'
13
-
13
+
14
14
  ### ATTRIBUTES:
15
-
15
+
16
16
  ### Location:
17
17
  attr_accessor :id, :name, :type, :url, :geolocation,
18
-
18
+
19
19
  ### Utility:
20
20
  :resources, :counters
21
-
21
+
22
22
  def geolocation=(new_coordinates)
23
23
  @geolocation = Geolocation.parse(new_coordinates).tap do |geo|
24
24
  attributes[:geolocation] = geo
@@ -3,43 +3,43 @@ module Hungry
3
3
  autoload :Category, 'hungry/menu/category'
4
4
  autoload :Dish, 'hungry/menu/dish'
5
5
  autoload :Option, 'hungry/menu/option'
6
-
6
+
7
7
  self.endpoint = '/menus'
8
-
8
+
9
9
  ### RESOURCES:
10
-
10
+
11
11
  belongs_to :venue, 'Hungry::Venue'
12
-
12
+
13
13
  ### ATTRIBUTES:
14
-
14
+
15
15
  ### Menu:
16
- attr_accessor :id, :name, :type, :attachment,
17
-
16
+ attr_accessor :id, :name, :type, :attachment, :pages,
17
+
18
18
  ### Associations:
19
19
  :categories, :venue,
20
-
20
+
21
21
  ### Utility:
22
22
  :created_at, :updated_at
23
-
23
+
24
24
  lazy_load :venue
25
-
25
+
26
26
  def managed?
27
27
  type == 'managed' || categories.present?
28
28
  end
29
-
29
+
30
30
  def download?
31
31
  type == 'download'
32
32
  end
33
-
33
+
34
34
  def venue=(venue_attributes)
35
35
  @venue = Hungry::Venue.new(venue_attributes)
36
36
  end
37
-
37
+
38
38
  def categories
39
39
  @categories ||= []
40
40
  end
41
41
  lazy_load :categories
42
-
42
+
43
43
  def categories=(new_categories)
44
44
  @categories = new_categories.map do |attributes|
45
45
  category = Menu::Category.new(attributes)
@@ -48,6 +48,6 @@ module Hungry
48
48
  category
49
49
  end
50
50
  end
51
-
51
+
52
52
  end
53
53
  end