daily_menu 0.0.2 → 0.0.3

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: cef7dd751669f57e38460a64de0bee94f7c19815
4
- data.tar.gz: f38de692d92aeb5500de2a9fcea44c13a416fced
3
+ metadata.gz: d9dac4c4aefd8b0ae07213b067796b1b8549cb58
4
+ data.tar.gz: 29f79133826fda036006d8c1be180ce2c33507f8
5
5
  SHA512:
6
- metadata.gz: ed00a465a37066ee8aab3a2b3785cc206881a91815018d77fae02f28b306c01047e08da46e84aaa9400e12278dddd21a575cc0adbce84b6ab4195f56e25a5478
7
- data.tar.gz: 32dfccffc608eeaa416c4e0977cfaa330b4003637030856c192745cf9abec9f4a7f5a9486dcaa794b9baf60c7db5673e4f9e795258fdb90421fdf258daab80eb
6
+ metadata.gz: 171f24c7268b09c74f84229cde011492ec96e42cc6e623b0cadafe5bbc0cef3ff6de98dea8877af7fcfafaa34bea4d9f912ff74f1a0beb06f19f2f13d1c18bb7
7
+ data.tar.gz: 9954572fb0a09cf301e0585d8b66a821f2962c74a3c42575abcce14880f1c12c2d867172534dc596e196512e2115728b7b0e53a458543679b12009cc6ba20f38
@@ -1,4 +1,3 @@
1
- require 'yaml'
2
1
  require 'awesome_print'
3
2
 
4
3
  module DailyMenu
@@ -11,38 +10,17 @@ module DailyMenu
11
10
  end
12
11
 
13
12
  def self.fetch(location)
14
- menus = restaurants_for_location(location).map do |restaurant|
15
- [restaurant.name, restaurant.menu]
16
- end
17
-
13
+ menus = DailyMenu.menus_for(location)
18
14
  Hash[menus]
19
15
  end
20
16
  private_class_method :fetch
21
17
 
22
18
  def self.read_rc
23
- raise 'Unable to read the config file' unless file_accessible?(RC_FILE)
19
+ raise 'Unable to read the config file' unless DailyMenu.file_accessible?(RC_FILE)
24
20
 
25
21
  File.new(RC_FILE).read.chomp
26
22
  end
27
23
  private_class_method :read_rc
28
-
29
- def self.restaurants_for_location(location)
30
- configs_for_location(location).map { |config| Restaurant.from_hash(config) }
31
- end
32
- private_class_method :restaurants_for_location
33
-
34
- def self.configs_for_location(location)
35
- config_file = CONFIG_DIR.join("#{location}.yml")
36
- raise %(No configuration found for: "#{location}") unless file_accessible?(config_file)
37
-
38
- YAML.load_file(config_file)
39
- end
40
- private_class_method :configs_for_location
41
-
42
- def self.file_accessible?(file)
43
- File.exists?(file) && File.readable?(file)
44
- end
45
- private_class_method :file_accessible?
46
24
  end
47
25
 
48
26
  end
@@ -1,3 +1,3 @@
1
1
  module DailyMenu
2
- VERSION = '0.0.2'.freeze
2
+ VERSION = '0.0.3'.freeze
3
3
  end
data/lib/daily_menu.rb CHANGED
@@ -1,9 +1,45 @@
1
1
  require 'daily_menu/version'
2
+ require 'yaml'
2
3
 
3
4
  module DailyMenu
4
5
  OAUTH_TOKEN = ENV['FACEBOOK_OAUTH_TOKEN'].freeze
5
6
  ROOT = Pathname.new(File.expand_path('../..', __FILE__)).freeze
6
7
  CONFIG_DIR = ROOT.join('configs').freeze
8
+
9
+ def self.menus_for(location)
10
+ restaurants = DailyMenu.restaurants_for(location)
11
+
12
+ menus = []
13
+
14
+ threads = restaurants.map do |restaurant|
15
+ Thread.new do
16
+ menus << [restaurant, restaurant.menu]
17
+ end
18
+ end
19
+
20
+ threads.map(&:join)
21
+
22
+ menus
23
+ end
24
+
25
+ def self.restaurants_for(location)
26
+ raise ArgumentError, 'Location needed' unless location
27
+
28
+ configs = config_for(location)
29
+ configs.map { |config| DailyMenu::Restaurant.from_hash(config) }
30
+ end
31
+
32
+ def self.config_for(location)
33
+ config_file = CONFIG_DIR.join("#{location}.yml").to_s
34
+ raise %(No configuration found for: "#{location}") unless file_accessible?(config_file)
35
+
36
+ YAML.load_file(config_file)
37
+ end
38
+ private_class_method :config_for
39
+
40
+ def self.file_accessible?(file)
41
+ File.exists?(file) && File.readable?(file)
42
+ end
7
43
  end
8
44
 
9
45
  require 'daily_menu/entry'
@@ -15,9 +15,9 @@ module DailyMenu
15
15
  it 'should read the rc file' do
16
16
  rc_file = double('RC file', read: 'Foo/Bar')
17
17
 
18
- described_class.stub(:file_accessible?) { true }
18
+ DailyMenu.stub(:file_accessible?) { true }
19
19
  File.stub(:new).with(described_class::RC_FILE) { rc_file }
20
- described_class.stub(:configs_for_location) { [] }
20
+ DailyMenu.stub(:restaurants_for) { [] }
21
21
  described_class.stub(:ap)
22
22
 
23
23
  described_class.start([])
@@ -25,7 +25,14 @@ module DailyMenu
25
25
  end
26
26
 
27
27
  context 'when there are fetched entries' do
28
- let(:entries) { [Entry.new('This is a menu entry', 2), Entry.new('This is not', 1), Entry.new('This is also a menu entry', 0)] }
28
+ let(:entries) do
29
+ [
30
+ Entry.new('This is a menu entry', 2),
31
+ Entry.new('This is not', 1),
32
+ Entry.new('This is also a menu entry', 0)
33
+ ]
34
+ end
35
+
29
36
  before do
30
37
  scraper.stub(:entries) { entries }
31
38
  end
@@ -1,6 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe DailyMenu do
4
+ let(:location) { 'City/Area' }
5
+
4
6
  describe 'ROOT' do
5
7
  it 'should return the root path of the gem' do
6
8
  expected_path = File.expand_path('..', File.dirname(__FILE__))
@@ -13,4 +15,60 @@ describe DailyMenu do
13
15
  expect(described_class::VERSION).to_not be_nil
14
16
  end
15
17
  end
18
+
19
+ describe '.restaurants_for' do
20
+ it 'should raise an error when called with nil' do
21
+ expect { described_class.restaurants_for(nil) }.to raise_error(ArgumentError)
22
+ end
23
+
24
+ it 'should raise an error when the config file not found or not readable' do
25
+ expect { described_class.restaurants_for(location) }.to raise_error
26
+ end
27
+
28
+ it 'should read the configuration file' do
29
+ described_class.stub(:file_accessible?) { true }
30
+ YAML.stub(:load_file) { [] }
31
+
32
+ described_class.restaurants_for(location)
33
+
34
+ expect(YAML).to have_received(:load_file).with(/City\/Area\.yml$/)
35
+ end
36
+
37
+ it 'should return with Restaruants' do
38
+ described_class.stub(:config_for) do
39
+ [{
40
+ name: 'Test',
41
+ scraper: { class: 'Facebook', params: '1', },
42
+ filter: { class: 'Hungarian' }
43
+ }]
44
+ end
45
+
46
+ restaurants = described_class.restaurants_for(location)
47
+
48
+ expect(restaurants).to have(1).restaurant
49
+ expect(restaurants[0]).to be_a(DailyMenu::Restaurant)
50
+ end
51
+ end
52
+
53
+ describe '.menus_for' do
54
+ it 'should get the restaurants' do
55
+ described_class.stub(:restaurants_for) { [] }
56
+
57
+ described_class.menus_for(location)
58
+
59
+ expect(described_class).to have_received(:restaurants_for).with(location)
60
+ end
61
+
62
+ it 'should return with correct items' do
63
+ menu = double('Menu')
64
+ restaurant = double('Restaurant', menu: menu)
65
+ described_class.stub(:restaurants_for) { [restaurant] }
66
+
67
+ menus = described_class.menus_for(location)
68
+
69
+ expect(menus).to have(1).menus
70
+ expect(menus).to include([restaurant, menu])
71
+ end
72
+ end
73
+
16
74
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: daily_menu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - KARASZI István
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-14 00:00:00.000000000 Z
11
+ date: 2013-08-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: koala
@@ -146,7 +146,6 @@ files:
146
146
  - lib/daily_menu.rb
147
147
  - lib/daily_menu/cli.rb
148
148
  - lib/daily_menu/entry.rb
149
- - lib/daily_menu/fetcher.rb
150
149
  - lib/daily_menu/filters.rb
151
150
  - lib/daily_menu/filters/hungarian.rb
152
151
  - lib/daily_menu/filters/regexp.rb
@@ -1,9 +0,0 @@
1
- module DailyMenu
2
- class Fetcher
3
- def fetch
4
- end
5
-
6
- def self.with_config(config)
7
- end
8
- end
9
- end