hungry 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
- 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