coffeeoutside 0.1.0 → 0.2.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 +4 -4
- data/.gitignore +1 -0
- data/Gemfile +6 -1
- data/README.md +10 -4
- data/coffeeoutside.gemspec +1 -0
- data/lib/coffeeoutside/dispatchers/rss.rb +43 -0
- data/lib/coffeeoutside/dispatchers/stdout.rb +17 -0
- data/lib/coffeeoutside/dispatchers/twitter.rb +1 -1
- data/lib/coffeeoutside/locations.rb +5 -1
- data/lib/coffeeoutside/version.rb +1 -1
- data/lib/coffeeoutside.rb +5 -5
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aacb528c83db527b5a8ce464cbf5992ffd5eabb7166d5ba9050d5132ff3b4ddb
|
4
|
+
data.tar.gz: 03167aa72764c2df28ec99e1e1feefc16b54e034bd0ca5197aefeac53f129d7b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d93a2a356f66be6c72e966b6e3793166f57b825a796863f0f216e86eb941b1be8740a8dcaf77b73d57a53e6bba636ca132254ffe9a77ad4858700d1074c76c29
|
7
|
+
data.tar.gz: 7d3a972514ce340b34d50cc1b4149c14ff88f78effa60aea9ac66cdf0d79b2abcc5ff70490521456f6cc2a7b1a108ab59ed54ec4d745a0ecfbb711fd5cb21052
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
@@ -4,7 +4,12 @@ source 'https://rubygems.org'
|
|
4
4
|
|
5
5
|
gemspec
|
6
6
|
|
7
|
-
group :
|
7
|
+
group :serverhack, optional: true do
|
8
|
+
# TODO better handling of this
|
9
|
+
gem 'http', '= 4.0.0'
|
10
|
+
end
|
11
|
+
|
12
|
+
group :development, optional: true do
|
8
13
|
# TODO: submit Ruby 3.0 fixes upstream
|
9
14
|
gem 'guard'
|
10
15
|
gem 'guard-minitest'
|
data/README.md
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
# CoffeeOutsideBot
|
2
2
|
|
3
|
-
The CoffeeOutsideBot is designed to pick a location in the city
|
4
|
-
#yycbike crowd to meet and enjoy some hot coffee (or tea!).
|
3
|
+
The CoffeeOutsideBot is designed to pick a location in the city
|
4
|
+
for the #yycbike crowd to meet and enjoy some hot coffee (or tea!).
|
5
5
|
|
6
6
|
## Installation
|
7
7
|
|
8
8
|
```
|
9
9
|
git clone https://github.com/yycbike/coffeeoutsidebot.git
|
10
|
-
|
10
|
+
cd coffeeoutsidebot
|
11
|
+
bundle install
|
12
|
+
bundle exec bin/coffeeoutsidebot
|
11
13
|
```
|
12
14
|
|
13
15
|
## Twitter integration
|
@@ -20,11 +22,15 @@ You can get an API key at https://openweathermap.org/price
|
|
20
22
|
An .ics file is auto generated. The current bot's version can be found at
|
21
23
|
https://coffeeoutside.bike/yyc.ics
|
22
24
|
|
25
|
+
## RSS integration
|
26
|
+
You can add the bot to your favourite RSS reader with
|
27
|
+
https://coffeeoutside.bike/yyc.rss
|
28
|
+
|
23
29
|
## Cron job
|
24
30
|
To have the coffeeoutsidebot fire regularly, set up a cron job
|
25
31
|
|
26
32
|
```
|
27
|
-
0 17 * * 3 pushd /path/to/coffeeoutsidebot && /
|
33
|
+
0 17 * * 3 pushd /path/to/coffeeoutsidebot && bundle exec ruby bin/coffeeoutsidebot
|
28
34
|
```
|
29
35
|
|
30
36
|
## Contributing
|
data/coffeeoutside.gemspec
CHANGED
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'dispatcher'
|
4
|
+
require 'rss'
|
5
|
+
|
6
|
+
module CoffeeOutside
|
7
|
+
class RssDispatcher < DispatcherBase
|
8
|
+
def generate_description
|
9
|
+
items = []
|
10
|
+
items.append(["Address: #{@location.address}"]) if @location.address
|
11
|
+
items.append(@forecast)
|
12
|
+
items.join("\n")
|
13
|
+
end
|
14
|
+
|
15
|
+
def generate_rss_string
|
16
|
+
RSS::Maker.make('2.0') do |maker|
|
17
|
+
maker.channel.language = 'en'
|
18
|
+
maker.channel.author = 'CoffeeOutsideBot'
|
19
|
+
maker.channel.updated = Time.now.to_s
|
20
|
+
maker.channel.about = 'https://coffeeoutside.bike/yyc.rss'
|
21
|
+
maker.channel.link = 'https://coffeeoutside.bike/yyc.rss'
|
22
|
+
maker.channel.description = 'CoffeeOutside is a weekly meetup where Calgarians bike/walk/run/rollerblade to a location, drink coffee/tea/some hot or cold beverage, and shoot the breeze'
|
23
|
+
maker.channel.title = 'CoffeeOutside'
|
24
|
+
|
25
|
+
maker.items.new_item do |item|
|
26
|
+
item.link = @location.url if @location.url
|
27
|
+
item.title = "Location for #{@start_time.strftime('%Y-%m-%d')}: #{@location.name}"
|
28
|
+
item.description = generate_description
|
29
|
+
item.updated = Time.now.to_s
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def notify_production
|
35
|
+
i = File.open('yyc.rss', 'w')
|
36
|
+
i.write(generate_rss_string)
|
37
|
+
end
|
38
|
+
|
39
|
+
def notify_debug
|
40
|
+
puts generate_rss_string
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'dispatcher'
|
4
|
+
|
5
|
+
module CoffeeOutside
|
6
|
+
class StdoutDispatcher < DispatcherBase
|
7
|
+
def notify_production
|
8
|
+
# Since the bot is cron-based, don't write anything to stdout unless
|
9
|
+
# there's a problem
|
10
|
+
# puts "Chosen location is #{@location.name}"
|
11
|
+
end
|
12
|
+
|
13
|
+
def notify_debug
|
14
|
+
puts "Chosen location is #{@location.name}"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -127,7 +127,11 @@ module CoffeeOutside
|
|
127
127
|
class PriorLocationsFile
|
128
128
|
def initialize(filename = './prior_locations.yaml')
|
129
129
|
@filename = filename
|
130
|
-
@locations =
|
130
|
+
@locations = if File.exist? filename
|
131
|
+
YAML.load_file(filename) || []
|
132
|
+
else
|
133
|
+
[]
|
134
|
+
end
|
131
135
|
end
|
132
136
|
|
133
137
|
def previous_locations(n = 5)
|
data/lib/coffeeoutside.rb
CHANGED
@@ -7,9 +7,9 @@ require_relative 'coffeeoutside/locations'
|
|
7
7
|
require_relative 'coffeeoutside/weather'
|
8
8
|
|
9
9
|
# Dispatchers
|
10
|
-
|
11
|
-
require_relative
|
12
|
-
|
10
|
+
%w[stdout json ical rss twitter].each do |d|
|
11
|
+
require_relative "coffeeoutside/dispatchers/#{d}"
|
12
|
+
end
|
13
13
|
|
14
14
|
module CoffeeOutside
|
15
15
|
class Error < StandardError; end
|
@@ -51,7 +51,6 @@ module CoffeeOutside
|
|
51
51
|
def main
|
52
52
|
config = Config.new
|
53
53
|
if config.production?
|
54
|
-
puts config.openweathermap
|
55
54
|
owm = OWM.new config.openweathermap
|
56
55
|
forecast = owm.get_forecast
|
57
56
|
else
|
@@ -60,7 +59,6 @@ module CoffeeOutside
|
|
60
59
|
|
61
60
|
destructive = config.production?
|
62
61
|
location = LocationChooser.new(destructive, forecast).location
|
63
|
-
puts "Chosen location is #{location}"
|
64
62
|
|
65
63
|
dispatch = {
|
66
64
|
start_time: get_start_time,
|
@@ -69,7 +67,9 @@ module CoffeeOutside
|
|
69
67
|
location: location,
|
70
68
|
production: config.production?
|
71
69
|
}
|
70
|
+
StdoutDispatcher.new(dispatch).notify
|
72
71
|
JsonDispatcher.new(dispatch).notify
|
72
|
+
RssDispatcher.new(dispatch).notify
|
73
73
|
IcalDispatcher.new(dispatch).notify
|
74
74
|
TwitterDispatcher.new(dispatch.merge(config.dispatchers['twitter'])).notify
|
75
75
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: coffeeoutside
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Crosby
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-05-
|
11
|
+
date: 2022-05-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: icalendar
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 0.2.3
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rss
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.2.7
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.2.7
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: twitter
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -75,6 +89,8 @@ files:
|
|
75
89
|
- lib/coffeeoutside/dispatchers/dispatcher.rb
|
76
90
|
- lib/coffeeoutside/dispatchers/ical.rb
|
77
91
|
- lib/coffeeoutside/dispatchers/json.rb
|
92
|
+
- lib/coffeeoutside/dispatchers/rss.rb
|
93
|
+
- lib/coffeeoutside/dispatchers/stdout.rb
|
78
94
|
- lib/coffeeoutside/dispatchers/twitter.rb
|
79
95
|
- lib/coffeeoutside/locations.rb
|
80
96
|
- lib/coffeeoutside/version.rb
|