almanack 1.0.0 → 1.0.1
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/.travis.yml +2 -0
- data/README.md +30 -4
- data/lib/almanack/calendar.rb +1 -5
- data/lib/almanack/cli.rb +18 -4
- data/lib/almanack/configuration.rb +3 -1
- data/lib/almanack/event_source/meetup_group.rb +2 -0
- data/lib/almanack/version.rb +1 -1
- data/spec/calendar_spec.rb +5 -2
- data/spec/configuration_spec.rb +10 -0
- data/spec/event_source/meetup_group_spec.rb +12 -0
- data/spec/fixtures/responses/meetup-without-location.yml +11880 -0
- data/templates/new/README.md.tt +13 -0
- data/templates/new/config.ru.tt +2 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c39fea3d02a2700be92b1899af873e7ca32aafd4
|
4
|
+
data.tar.gz: 29c54092d575add88cdac6dda027c653c60f7c0e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 46fadc971f44e0e7a0ebe0206e3ef1bc35f8499966d7a2801af61252ee26f821fb3dc5932ee8979631d558797f737fc9b8a01d86a7797dc46c0d872f00c939b9
|
7
|
+
data.tar.gz: 4fbcc1013b4bf0b07792a7c121ae7965183a884dd041ba48cb0d469a84ef52988a670d4bdd165bd0ee40850162c22e28dde35e7ee4b4f6200efd5f06faa17f2a
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,11 +1,17 @@
|
|
1
1
|
# Almanack
|
2
2
|
|
3
|
-
[](https://travis-ci.org/Aupajo/almanack)
|
4
|
+
[](https://codeclimate.com/github/Aupajo/almanack)
|
5
|
+
[](https://codeclimate.com/github/Aupajo/almanack)
|
6
|
+
|
7
|
+
*This project was formerly Sinatra-GCal. A [legacy branch](https://github.com/Aupajo/almanack/tree/almanack) exists for that project.*
|
6
8
|
|
7
9
|
A calendar that combines events from different sources (such as Google Calendar, Meetup.com, and iCal feeds), and can be hosted for free on [Heroku](http://heroku.com).
|
8
10
|
|
11
|
+

|
12
|
+
|
13
|
+
See a demo running at [http://christchurch.events.geek.nz](http://christchurch.events.geek.nz)
|
14
|
+
|
9
15
|
## Features
|
10
16
|
|
11
17
|
* Aggregate multiple calendars together into one stream
|
@@ -15,7 +21,8 @@ A calendar that combines events from different sources (such as Google Calendar,
|
|
15
21
|
* Supports being freely hosted on Heroku
|
16
22
|
* 100% customisable themes with Sass and CoffeeScript support
|
17
23
|
* Server optional (you can use the underlying calendar library by itself)
|
18
|
-
* Rack-compatible (
|
24
|
+
* Rack-compatible (can be mounted inside a Rails app if needed)
|
25
|
+
* Produces iCal feed for smartphone and desktop calendar apps to subscribe to
|
19
26
|
|
20
27
|
## Installation
|
21
28
|
|
@@ -46,6 +53,7 @@ See examples inside `config.ru` for iCal feeds, Meetup.com, or static events.
|
|
46
53
|
Almanack.config do |c|
|
47
54
|
c.title = 'My Calendar'
|
48
55
|
c.theme = 'my-custom-theme'
|
56
|
+
c.days_lookahead = 30
|
49
57
|
c.add_ical_feed 'http://example.org/events.ics'
|
50
58
|
c.add_ical_feed 'http://example.org/more-events.ics'
|
51
59
|
c.add_meetup_group group_urlname: 'Christchurch-Ruby-Group', key: 'mysecretkey'
|
@@ -70,6 +78,24 @@ Almanack.config do |c|
|
|
70
78
|
end
|
71
79
|
```
|
72
80
|
|
81
|
+
## Deploying to Heroku
|
82
|
+
|
83
|
+
Deployment works with Git and Heroku. First, add your work to git (an repository
|
84
|
+
is already initialized for you when you run `almanack new`):
|
85
|
+
|
86
|
+
git add .
|
87
|
+
git commit -m "My awesome calendar"
|
88
|
+
|
89
|
+
With the [Heroku Toolbelt](https://toolbelt.heroku.com) installed:
|
90
|
+
|
91
|
+
almanack deploy my-awesome-calendar
|
92
|
+
|
93
|
+
Will create and deploy http://my-awesome-calendar.herokuapp.com/.
|
94
|
+
|
95
|
+
Subsequent commits can be deployed with just:
|
96
|
+
|
97
|
+
almanack deploy
|
98
|
+
|
73
99
|
## Contributing
|
74
100
|
|
75
101
|
1. Fork it ( http://github.com/Aupajo/almanack/fork )
|
data/lib/almanack/calendar.rb
CHANGED
@@ -8,7 +8,7 @@ module Almanack
|
|
8
8
|
ONE_YEAR = 365 * ONE_DAY
|
9
9
|
|
10
10
|
extend Forwardable
|
11
|
-
def_delegators :@config, :event_sources, :title
|
11
|
+
def_delegators :@config, :event_sources, :title, :days_lookahead
|
12
12
|
|
13
13
|
def initialize(config)
|
14
14
|
@config = config
|
@@ -49,9 +49,5 @@ module Almanack
|
|
49
49
|
|
50
50
|
ical.to_s
|
51
51
|
end
|
52
|
-
|
53
|
-
def days_lookahead
|
54
|
-
30
|
55
|
-
end
|
56
52
|
end
|
57
53
|
end
|
data/lib/almanack/cli.rb
CHANGED
@@ -33,15 +33,15 @@ module Almanack
|
|
33
33
|
option :theme, default: 'legacy', desc: "Which theme to use (available: #{available_themes.join(', ')})"
|
34
34
|
option :git, type: :boolean, default: true, desc: "Whether to initialize an empty git repo"
|
35
35
|
def new(path)
|
36
|
-
path = Pathname(path).cleanpath
|
36
|
+
@path = Pathname(path).cleanpath
|
37
37
|
|
38
38
|
directory "templates/new", path
|
39
39
|
|
40
40
|
if options[:git]
|
41
|
-
template('templates/gitignore', path.join(".gitignore"))
|
41
|
+
template('templates/gitignore', @path.join(".gitignore"))
|
42
42
|
end
|
43
43
|
|
44
|
-
inside path do
|
44
|
+
inside @path do
|
45
45
|
say_status :installing, "bundler dependencies"
|
46
46
|
system "bundle install --quiet"
|
47
47
|
|
@@ -53,7 +53,7 @@ module Almanack
|
|
53
53
|
say
|
54
54
|
say "==> Run your new calendar!"
|
55
55
|
say
|
56
|
-
say " cd #{path}"
|
56
|
+
say " cd #{@path}"
|
57
57
|
say " almanack start"
|
58
58
|
say
|
59
59
|
end
|
@@ -110,6 +110,20 @@ module Almanack
|
|
110
110
|
options[:theme]
|
111
111
|
end
|
112
112
|
|
113
|
+
def almanack_homepage
|
114
|
+
Almanack::HOMEPAGE
|
115
|
+
end
|
116
|
+
|
117
|
+
def almanack_issues
|
118
|
+
Almanack::ISSUES
|
119
|
+
end
|
120
|
+
|
121
|
+
def title
|
122
|
+
basename = @path.to_s.split('/', 2).last.split('.', 2).first
|
123
|
+
sanitized = basename.gsub('-', ' ')
|
124
|
+
sanitized.split(/\s+/).map(&:capitalize).join(' ')
|
125
|
+
end
|
126
|
+
|
113
127
|
def git(command)
|
114
128
|
output = `git #{command}`
|
115
129
|
abort "Git failed: #{output}" if $?.exitstatus != 0
|
@@ -7,9 +7,10 @@ module Almanack
|
|
7
7
|
class ThemeNotFound < StandardError; end
|
8
8
|
|
9
9
|
DEFAULT_THEME = "legacy"
|
10
|
+
DEFAULT_DAYS_LOOKAHEAD = 30
|
10
11
|
|
11
12
|
attr_reader :event_sources
|
12
|
-
attr_accessor :title, :theme, :theme_paths, :theme_root
|
13
|
+
attr_accessor :title, :theme, :theme_paths, :theme_root, :days_lookahead
|
13
14
|
|
14
15
|
def initialize
|
15
16
|
reset!
|
@@ -17,6 +18,7 @@ module Almanack
|
|
17
18
|
|
18
19
|
def reset!
|
19
20
|
@theme = DEFAULT_THEME
|
21
|
+
@days_lookahead = DEFAULT_DAYS_LOOKAHEAD
|
20
22
|
@event_sources = []
|
21
23
|
|
22
24
|
@theme_paths = [
|
data/lib/almanack/version.rb
CHANGED
data/spec/calendar_spec.rb
CHANGED
@@ -53,8 +53,11 @@ module Almanack
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
|
57
|
-
|
56
|
+
describe "#days_lookahead" do
|
57
|
+
it "delegates to the configuration's days_lookahead" do
|
58
|
+
config = double(days_lookahead: :delegated)
|
59
|
+
expect(Calendar.new(config).days_lookahead).to eq(:delegated)
|
60
|
+
end
|
58
61
|
end
|
59
62
|
|
60
63
|
end
|
data/spec/configuration_spec.rb
CHANGED
@@ -27,6 +27,16 @@ module Almanack
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
+
describe "#days_lookahead" do
|
31
|
+
specify { expect(Configuration.new.days_lookahead).to eq(30) }
|
32
|
+
|
33
|
+
specify "it can be set" do
|
34
|
+
config = Configuration.new
|
35
|
+
config.days_lookahead = 365
|
36
|
+
expect(config.days_lookahead).to eq(365)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
30
40
|
describe "#add_events" do
|
31
41
|
it "adds a simple event collection event source" do
|
32
42
|
config = Configuration.new
|
@@ -20,6 +20,18 @@ module Almanack::EventSource
|
|
20
20
|
expect(events.length).to eq(5)
|
21
21
|
expect(events).to all_have_properties(:title, :start_date, :end_date, :description, :location)
|
22
22
|
end
|
23
|
+
|
24
|
+
it "handles a missing location" do
|
25
|
+
feed = MeetupGroup.new(group_urlname: 'adventurewellington', key: 'secrettoken')
|
26
|
+
|
27
|
+
Timecop.freeze(2014, 7, 23) do
|
28
|
+
VCR.use_cassette('meetup-without-location') do
|
29
|
+
from = Time.now
|
30
|
+
to = from + 30 * 24 * 60 * 60
|
31
|
+
expect { feed.events_between(from..to) }.not_to raise_error
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
23
35
|
end
|
24
36
|
|
25
37
|
end
|