daily_menu 0.0.2 → 0.0.3

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