hungry 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,52 +3,52 @@ require 'cgi' unless defined?(CGI)
3
3
  module Hungry
4
4
  module Util
5
5
  extend self
6
-
6
+
7
7
  def log(message, type = :info)
8
8
  if Hungry.logger
9
9
  message = "[Hungry] #{message}"
10
10
  Hungry.logger.send(type, message)
11
11
  end
12
12
  end
13
-
13
+
14
14
  def parse_json(json)
15
15
  Hungry.json_parser.call(json)
16
16
  end
17
-
17
+
18
18
  def params_from_uri(uri)
19
19
  uri = URI.parse(uri) unless uri.is_a?(URI)
20
20
  parse_query(uri.query) if uri.query.present?
21
21
  end
22
-
22
+
23
23
  def uri_with_params(uri, params = {})
24
24
  params = params.map { |k,v| "#{k}=#{CGI.escape(v.to_s)}" }
25
25
  .join('&')
26
26
  .presence
27
-
27
+
28
28
  [uri, params].compact
29
29
  .join('?')
30
30
  end
31
-
31
+
32
32
  def is_numeric?(value)
33
33
  !!(value.to_s =~ /^[+-]?[\d]+(\.[\d]+){0,1}$/)
34
34
  end
35
-
35
+
36
36
  private
37
-
37
+
38
38
  # Copied from rack/utils:
39
39
  def unescape(s, encoding = Encoding::UTF_8)
40
40
  URI.decode_www_form_component(s, encoding)
41
41
  end
42
-
42
+
43
43
  def parse_query(qs, d = nil, &unescaper)
44
44
  unescaper ||= method(:unescape)
45
-
45
+
46
46
  params = {}
47
-
47
+
48
48
  (qs || '').split(d ? /[#{d}] */ : /[&;] */n).each do |p|
49
49
  next if p.empty?
50
50
  k, v = p.split('=', 2).map(&unescaper)
51
-
51
+
52
52
  if cur = params[k]
53
53
  if cur.class == Array
54
54
  params[k] << v
@@ -59,7 +59,7 @@ module Hungry
59
59
  params[k] = v
60
60
  end
61
61
  end
62
-
62
+
63
63
  params
64
64
  end
65
65
  end
@@ -1,72 +1,72 @@
1
1
  module Hungry
2
2
  class Venue < Resource
3
3
  autoload :Collection, 'hungry/venue/collection'
4
-
4
+
5
5
  self.endpoint = '/venues'
6
-
6
+
7
7
  ### RESOURCES:
8
-
8
+
9
9
  has_many :reviews, 'Hungry::Review'
10
-
10
+
11
11
  belongs_to :country, 'Hungry::Country'
12
-
12
+
13
13
  belongs_to :region, 'Hungry::Region'
14
-
14
+
15
15
  belongs_to :city, 'Hungry::City'
16
-
16
+
17
17
  ### FINDERS:
18
-
18
+
19
19
  def self.collection
20
20
  Collection.new(self, endpoint, default_criteria)
21
21
  end
22
-
22
+
23
23
  def self.search(query)
24
24
  collection.search(query)
25
25
  end
26
-
26
+
27
27
  def self.nearby(geolocation, options = {})
28
28
  collection.nearby(geolocation, options)
29
29
  end
30
-
30
+
31
31
  def self.tagged_with(*tags)
32
32
  collection.tagged_with(*tags)
33
33
  end
34
-
34
+
35
35
  def self.sort_by(sortable)
36
36
  collection.sort_by(sortable)
37
37
  end
38
-
38
+
39
39
  def self.maintainable_by(user_or_id)
40
40
  collection.maintainable_by(user_or_id)
41
41
  end
42
-
42
+
43
43
  def self.paginate(page, options = {})
44
44
  collection.paginate(page, options)
45
45
  end
46
-
46
+
47
47
  ### ATTRIBUTES:
48
-
48
+
49
49
  ### Preview:
50
50
  attr_accessor :id, :name, :category, :telephone, :fax, :website_url,
51
- :tagline, :rating, :url, :address, :geolocation,
51
+ :tagline, :rating, :url, :address, :geolocation,
52
52
  :currency_symbol, :relevance, :distance, :plan,
53
-
53
+
54
54
  ### Full:
55
55
  :reachability, :staff, :prices, :capacity, :description,
56
56
  :tags, :menus, :images, :maintainers, :awards, :opening_hours,
57
57
  :holidays,
58
-
58
+
59
59
  ### Utility:
60
60
  :counters, :created_at, :updated_at, :status
61
-
61
+
62
62
  lazy_load :tags, :menus, :maintainers, :opening_hours, :holidays
63
-
63
+
64
64
  def geolocation=(new_coordinates)
65
65
  @geolocation = Geolocation.parse(new_coordinates).tap do |geo|
66
66
  attributes[:geolocation] = geo
67
67
  end
68
68
  end
69
-
69
+
70
70
  def menus=(new_menus)
71
71
  @menus = new_menus.map do |attributes|
72
72
  menu = Menu.new(attributes)
@@ -4,35 +4,35 @@ module Hungry
4
4
  class Venue
5
5
  class Collection < Hungry::Collection
6
6
  include Pagination
7
-
7
+
8
8
  def search(query)
9
9
  all query: query
10
10
  end
11
-
11
+
12
12
  def nearby(location, options = {})
13
13
  options[:geolocation] = Geolocation.parse(location)
14
14
  options[:sort_by] ||= 'distance'
15
-
15
+
16
16
  all options
17
17
  end
18
-
18
+
19
19
  def tagged_with(*tags)
20
20
  all tags: (current_tags + tags.flatten).compact.join(',')
21
21
  end
22
-
22
+
23
23
  def maintainable_by(user_or_id)
24
24
  user_id = user_or_id.to_s =~ /^[0-9]+$/ ?
25
25
  user_or_id.to_i : user_or_id.id
26
-
26
+
27
27
  all maintainer_id: user_id
28
28
  end
29
-
29
+
30
30
  def sort_by(subject)
31
31
  all sort_by: subject
32
32
  end
33
-
33
+
34
34
  private
35
-
35
+
36
36
  def current_tags
37
37
  if criteria[:tags].is_a?(String)
38
38
  criteria[:tags].gsub(/\s+/, '')
@@ -9,7 +9,7 @@ rescue LoadError => e
9
9
  !!presence
10
10
  end
11
11
  end
12
-
12
+
13
13
  unless respond_to?(:presence)
14
14
  def presence
15
15
  return nil if respond_to?(:empty?) ? empty? : !self
@@ -2,118 +2,118 @@ require 'spec_helper'
2
2
 
3
3
  describe Hungry::Geolocation do
4
4
  let(:geo) { Hungry::Geolocation.new(50.8469397, 5.6927505) }
5
-
5
+
6
6
  describe '.parse' do
7
7
  context 'with a Geolocation' do
8
8
  it 'returns the given Geolocation' do
9
9
  expect(Hungry::Geolocation.parse(geo)).to eql geo
10
10
  end
11
11
  end
12
-
12
+
13
13
  context 'with an Object' do
14
14
  it 'returns a Geolocation object for objects with a latitude and longitude' do
15
15
  object = Class.new do
16
16
  def latitude; 50.8469397; end
17
17
  def longitude; 5.6927505; end
18
18
  end.new
19
-
19
+
20
20
  geo = Hungry::Geolocation.parse(object)
21
21
  expect(geo.latitude).to eql 50.8469397
22
22
  expect(geo.longitude).to eql 5.6927505
23
23
  end
24
-
24
+
25
25
  it 'returns a Geolocation object for objects with a lat and lng' do
26
26
  object = Class.new do
27
27
  def lat; 50.8469397; end
28
28
  def lng; 5.6927505; end
29
29
  end.new
30
-
30
+
31
31
  geo = Hungry::Geolocation.parse(object)
32
32
  expect(geo.latitude).to eql 50.8469397
33
33
  expect(geo.longitude).to eql 5.6927505
34
34
  end
35
-
35
+
36
36
  it 'returns a Geolocation object for objects that have a valid geolocation' do
37
37
  object = Class.new do
38
38
  def geolocation; Hungry::Geolocation.new(50.8469397, 5.6927505); end
39
39
  end.new
40
-
40
+
41
41
  geo = Hungry::Geolocation.parse(object)
42
42
  expect(geo.latitude).to eql 50.8469397
43
43
  expect(geo.longitude).to eql 5.6927505
44
44
  end
45
-
45
+
46
46
  it 'returns nil for objects without geo information' do
47
47
  geo = Hungry::Geolocation.parse(Object.new)
48
48
  expect(geo).to be_nil
49
49
  end
50
-
50
+
51
51
  it 'returns nil for objects that have an invalid geolocation' do
52
52
  object = Class.new do
53
53
  def geolocation; "just a string"; end
54
54
  end.new
55
-
55
+
56
56
  geo = Hungry::Geolocation.parse(object)
57
57
  expect(geo).to be_nil
58
58
  end
59
59
  end
60
-
60
+
61
61
  context 'with a String' do
62
62
  it 'returns a Geolocation object' do
63
63
  geo = Hungry::Geolocation.parse('50.8469397,5.6927505')
64
64
  expect(geo.latitude).to eql 50.8469397
65
65
  expect(geo.longitude).to eql 5.6927505
66
66
  end
67
-
67
+
68
68
  it 'returns nil if the string can not be parsed' do
69
69
  geo = Hungry::Geolocation.parse('not-a,geolocation')
70
70
  expect(geo).to be_nil
71
71
  end
72
72
  end
73
-
73
+
74
74
  context 'with an Array' do
75
75
  it 'returns a Geolocation object' do
76
76
  geo = Hungry::Geolocation.parse([50.8469397, 5.6927505])
77
77
  expect(geo.latitude).to eql 50.8469397
78
78
  expect(geo.longitude).to eql 5.6927505
79
79
  end
80
-
80
+
81
81
  it 'returns nil if the array can not be parsed' do
82
82
  geo = Hungry::Geolocation.parse(['not a', 'geolocation'])
83
83
  expect(geo).to be_nil
84
84
  end
85
85
  end
86
-
86
+
87
87
  context 'with a Hash' do
88
88
  it 'returns a Geolocation object' do
89
89
  geo = Hungry::Geolocation.parse(latitude: 50.8469397, longitude: 5.6927505)
90
90
  expect(geo.latitude).to eql 50.8469397
91
91
  expect(geo.longitude).to eql 5.6927505
92
92
  end
93
-
93
+
94
94
  it 'supports abbreviated keys' do
95
95
  geo = Hungry::Geolocation.parse(lat: 50.8469397, lng: 5.6927505)
96
96
  expect(geo.latitude).to eql 50.8469397
97
97
  expect(geo.longitude).to eql 5.6927505
98
98
  end
99
-
99
+
100
100
  it 'returns nil if the hash can not be parsed' do
101
101
  geo = Hungry::Geolocation.parse(a: 'b', c: 'd')
102
102
  expect(geo).to be_nil
103
103
  end
104
104
  end
105
105
  end
106
-
106
+
107
107
  describe '#initialize' do
108
108
  it 'sets latitude' do
109
109
  expect(geo.latitude).to eql 50.8469397
110
110
  end
111
-
111
+
112
112
  it 'sets longitude' do
113
113
  expect(geo.longitude).to eql 5.6927505
114
114
  end
115
115
  end
116
-
116
+
117
117
  describe '#to_s' do
118
118
  it 'joins latitude and longitude with a ","' do
119
119
  expect(geo.to_s).to eql '50.8469397,5.6927505'
@@ -7,44 +7,44 @@ describe Hungry::Util do
7
7
  expect(hash).to include 'q' => 'ruby', 'lang' => 'en'
8
8
  end
9
9
  end
10
-
10
+
11
11
  describe '#uri_with_params' do
12
12
  it 'returns a clean URL if there no hash is given' do
13
13
  url = Hungry::Util.uri_with_params('http://www.google.com/')
14
14
  expect(url).to eql 'http://www.google.com/'
15
15
  end
16
-
16
+
17
17
  it 'returns an URL with params representing the given hash' do
18
18
  url = Hungry::Util.uri_with_params('http://www.google.com/search', 'q' => 'ruby', 'lang' => 'en')
19
19
  expect(url).to eql 'http://www.google.com/search?q=ruby&lang=en'
20
20
  end
21
21
  end
22
-
22
+
23
23
  describe '#is_numeric?' do
24
24
  it 'returns true for integers' do
25
25
  expect(Hungry::Util.is_numeric?(100)).to be true
26
26
  end
27
-
27
+
28
28
  it 'returns true for floats' do
29
29
  expect(Hungry::Util.is_numeric?(10.0)).to be true
30
30
  end
31
-
31
+
32
32
  it 'returns true for integers in strings' do
33
33
  expect(Hungry::Util.is_numeric?('100')).to be true
34
34
  end
35
-
35
+
36
36
  it 'returns true for floats in strings' do
37
37
  expect(Hungry::Util.is_numeric?('10.0')).to be true
38
38
  end
39
-
39
+
40
40
  it 'returns true for negative integers in strings' do
41
41
  expect(Hungry::Util.is_numeric?('-100')).to be true
42
42
  end
43
-
43
+
44
44
  it 'returns true for negative floats in strings' do
45
45
  expect(Hungry::Util.is_numeric?('-10.0')).to be true
46
46
  end
47
-
47
+
48
48
  it 'returns false for non numeric values' do
49
49
  expect(Hungry::Util.is_numeric?('abc')).to be false
50
50
  expect(Hungry::Util.is_numeric?('1a3')).to be false
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hungry
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
  - Tom-Eric Gerritsen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-29 00:00:00.000000000 Z
11
+ date: 2020-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -84,8 +84,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
84
84
  - !ruby/object:Gem::Version
85
85
  version: '0'
86
86
  requirements: []
87
- rubyforge_project:
88
- rubygems_version: 2.5.1
87
+ rubygems_version: 3.0.6
89
88
  signing_key:
90
89
  specification_version: 4
91
90
  summary: An interface to the Eet.nu API.