waddup 0.0.2 → 0.1.0

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: 9412cd78378d88a3daf9f219baa2cc1a35fd81d7
4
- data.tar.gz: c749fa77c45f8a397b86c90c32d56e02e0f8b637
3
+ metadata.gz: 124b07086882a87d52aeac3f2774ef9189eb9c6c
4
+ data.tar.gz: a760abd321c924beca39c80bb54dbd190277b7ac
5
5
  SHA512:
6
- metadata.gz: a8b44de7bd90cfeedfc321be128d67fe72ba714756dea4cb359cddf80e0e4b6eddf636e11c9880649816cfabcac17b19c26d3e57092402890ba473247e8ef108
7
- data.tar.gz: fdc7a2ca6d6f514cad0f679b2ec4b1a3024391164642bfdf2649779e890a053492c0af2aed343de3d7cb9d23ffe5b0011453572da59f6997bbfcd686fd598afa
6
+ metadata.gz: c56e90b616d1d99204b4e9a09f138d925522fa8fed652b4d4a9aa6c0b2f2825ef35b57251c8cd152a7d8fe2a1d08bb344643b70e22cebaa66c30d788b176f838
7
+ data.tar.gz: 2dbe261c3af49768d231a8e30c258c44743067f8efecf54b9f4ec3f52fd560d3260bb03d12572ceae4138ca4883f333eb69341d23e9fd9930bd1facd9c9a9108
@@ -1,9 +1,5 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.8.7
4
- - 1.9.2
5
3
  - 1.9.3
6
4
  - 2.0.0
7
- - rbx-18mode
8
- - rbx-19mode
9
- script: bundle exec rake test
5
+ script: bundle exec rake spec
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ### v0.1.0 - November 29, 2013
4
+ - Drop support for 1.8.7 and 1.9.2.
5
+ - From/to arguments are treated as past by default.
6
+ - Git source considers all branches and excludes merge commits.
7
+ - Events obtained through AppleScript are now sorted correctly.
8
+ - Improve Apple Mail source performance.
9
+
3
10
  ### v0.0.2 - October 30, 2013
4
11
  - Initial alpha release with Git, Apple Mail and Apple Calender sources.
5
12
 
data/README.md CHANGED
@@ -10,7 +10,7 @@ Waddup is a Ruby gem that retraces your activities from arbitrary sources - such
10
10
 
11
11
  Perfect for those who have lost track of what they have worked on.
12
12
 
13
- **Supported Ruby versions: 1.8.7 or higher**
13
+ **Supported Ruby versions: 1.9.3 or higher**
14
14
 
15
15
  Licensed under the **MIT** license, see LICENSE for more information.
16
16
 
data/Rakefile CHANGED
@@ -1,9 +1,10 @@
1
1
  require 'bundler/gem_tasks'
2
2
  require 'rspec/core/rake_task'
3
3
 
4
- RSpec::Core::RakeTask.new(:test) do |spec|
4
+ RSpec::Core::RakeTask.new(:spec) do |spec|
5
5
  spec.pattern = 'spec/*_spec.rb'
6
6
  spec.rspec_opts = ['--color']
7
7
  end
8
8
 
9
- task :default => :test
9
+ task test: :spec
10
+ task default: :spec
@@ -1,5 +1,6 @@
1
1
  require 'waddup/event'
2
2
  require 'waddup/extension'
3
+ require 'waddup/extensions/file_system'
3
4
  require 'waddup/extensions/system'
4
5
  require 'waddup/extensions/applescript'
5
6
  require 'waddup/registry'
@@ -7,9 +7,9 @@ module Waddup
7
7
  attr_accessor :sources, :from, :to
8
8
 
9
9
  KEYWORDS = {
10
- :sources => %w[with],
11
- :from => %w[from since],
12
- :to => %w[to until uptil upto through]
10
+ sources: %w[with],
11
+ from: %w[from since],
12
+ to: %w[to until uptil upto through]
13
13
  }
14
14
 
15
15
  KEYWORD_BOUNDARY = "(?:\\s#{KEYWORDS.values.flatten.join('|\\s')}|\\Z)"
@@ -23,11 +23,11 @@ module Waddup
23
23
  end
24
24
 
25
25
  parse_keyword :from do |match|
26
- @from = Chronic.parse match[1]
26
+ @from = Chronic.parse match[1], context: :past
27
27
  end
28
28
 
29
29
  parse_keyword :to do |match|
30
- @to = Chronic.parse match[1]
30
+ @to = Chronic.parse match[1], context: :past
31
31
  end
32
32
  end
33
33
 
@@ -3,7 +3,7 @@ module Waddup
3
3
  module Extension::AppleScript
4
4
  include Waddup::Extension::System
5
5
 
6
- # Runs given AppleScript
6
+ # Runs given AppleScript on disk
7
7
  #
8
8
  # Options:
9
9
  #
@@ -13,7 +13,7 @@ module Waddup
13
13
  def applescript(script, options = {})
14
14
  args = options.delete(:args) || []
15
15
  arguments = args.map { |arg| " '#{arg}'" }.join
16
- results = run("osascript -s s -e '#{script}'#{arguments}")
16
+ results = run("osascript -s s '#{script}'#{arguments}")
17
17
 
18
18
  # TODO: This is very scary, find alternatives!
19
19
  eval "[#{results[1...-1]}]" if options.delete(:as_ruby)
@@ -22,7 +22,7 @@ module Waddup
22
22
  # Whether AppleScript is available
23
23
  def applescript?
24
24
  osx? && begin
25
- run('osalang', :quietly => true).include? 'AppleScript'
25
+ run('osalang', quietly: true).include? 'AppleScript'
26
26
  end
27
27
  end
28
28
 
@@ -0,0 +1,14 @@
1
+ require 'pathname'
2
+
3
+ module Waddup
4
+
5
+ module Extension::FileSystem
6
+
7
+ # Resolves folder for given path
8
+ def folder_of(path)
9
+ Pathname.new(path).dirname
10
+ end
11
+
12
+ end
13
+
14
+ end
@@ -3,29 +3,12 @@ module Waddup
3
3
  class Source::AppleCalendar < Waddup::Source
4
4
  include Waddup::Extension::AppleScript
5
5
  extend Waddup::Extension::AppleScript
6
+ extend Waddup::Extension::FileSystem
6
7
 
7
8
  ALIAS = 'ical'
8
9
  ICON = "\xF0\x9F\x93\x85 "
9
10
 
10
- EVENT_SCRIPT = %Q{
11
- on run argv
12
- set window_from to date (item 1 of argv)
13
- set window_to to date (item 2 of argv)
14
-
15
- tell application "Calendar"
16
- set results to {}
17
-
18
- set cdars to (events whose start date <= window_to and end date > window_from) in every calendar
19
- repeat with cdar in cdars
20
- repeat with evt in cdar
21
- set end of results to {summary:summary of evt, start_date:start date of evt as string, end_date:end date of evt as string}
22
- end repeat
23
- end repeat
24
-
25
- results
26
- end tell
27
- end run
28
- }
11
+ EVENT_SCRIPT = folder_of(__FILE__) + 'apple_calender/events.applescript'
29
12
 
30
13
  # Aggregates calendar events
31
14
  #
@@ -36,14 +19,14 @@ module Waddup
36
19
  #
37
20
  def events(from, to)
38
21
  results = applescript EVENT_SCRIPT,
39
- :as_ruby => true,
40
- :args => [from.strftime('%d/%m/%Y %H:%M'), to.strftime('%d/%m/%Y %H:%M')]
22
+ as_ruby: true,
23
+ args: [from.strftime('%d/%m/%Y %H:%M'), to.strftime('%d/%m/%Y %H:%M')]
41
24
 
42
25
  results.map do |result|
43
26
  Waddup::Event.new do |e|
44
27
  e.label = result[:summary]
45
- e.at = DateTime.parse(result[:start_date])
46
- e.until = DateTime.parse(result[:end_date])
28
+ e.at = Time.parse(result[:start_date])
29
+ e.until = Time.parse(result[:end_date])
47
30
  e.source = self
48
31
  end
49
32
  end
@@ -0,0 +1,17 @@
1
+ on run argv
2
+ set window_from to date (item 1 of argv)
3
+ set window_to to date (item 2 of argv)
4
+
5
+ tell application "Calendar"
6
+ set results to {}
7
+
8
+ set cdars to (events whose start date <= window_to and end date > window_from) in every calendar
9
+ repeat with cdar in cdars
10
+ repeat with evt in cdar
11
+ set end of results to {summary:summary of evt, start_date:start date of evt as string, end_date:end date of evt as string}
12
+ end repeat
13
+ end repeat
14
+
15
+ results
16
+ end tell
17
+ end run
@@ -3,36 +3,12 @@ module Waddup
3
3
  class Source::AppleMail < Waddup::Source
4
4
  include Waddup::Extension::AppleScript
5
5
  extend Waddup::Extension::AppleScript
6
+ extend Waddup::Extension::FileSystem
6
7
 
7
8
  ALIAS = 'mail'
8
9
  ICON = "\xE2\x9C\x89\xEF\xB8\x8F "
9
10
 
10
- # Until OSX Mavericks handles Gmail's sent-mailbox correctly, resort to
11
- # iterating through all mailboxes and identify sent messages by sender
12
- #
13
- # See: http://tidbits.com/article/14219
14
- SENT_MAIL_SCRIPT = %Q{
15
- on run argv
16
- set window_from to date (item 1 of argv)
17
- set window_to to date (item 2 of argv)
18
-
19
- tell application "Mail"
20
- set results to {}
21
-
22
- repeat with acct in every account
23
- set username to user name of acct
24
- set mboxes to (messages whose sender contains username and date sent >= window_from and date sent <= window_to) in every mailbox in acct
25
- repeat with mbox in mboxes
26
- repeat with msg in mbox
27
- set the end of results to {subject:subject of msg, datetime:date sent of msg as string}
28
- end
29
- end repeat
30
- end repeat
31
-
32
- results
33
- end tell
34
- end run
35
- }
11
+ SENT_MAIL_SCRIPT = folder_of(__FILE__) + 'apple_mail/sent_mail.applescript'
36
12
 
37
13
  # Aggregates sent mail events
38
14
  #
@@ -43,13 +19,13 @@ module Waddup
43
19
  #
44
20
  def events(from, to)
45
21
  results = applescript SENT_MAIL_SCRIPT,
46
- :as_ruby => true,
47
- :args => [from.strftime('%d/%m/%Y %H:%M'), to.strftime('%d/%m/%Y %H:%M')]
22
+ as_ruby: true,
23
+ args: [from.strftime('%d/%m/%Y %H:%M'), to.strftime('%d/%m/%Y %H:%M')]
48
24
 
49
25
  results.map do |result|
50
26
  Waddup::Event.new do |e|
51
27
  e.label = result[:subject]
52
- e.at = DateTime.parse(result[:datetime])
28
+ e.at = Time.parse(result[:datetime])
53
29
  e.source = self
54
30
  end
55
31
  end
@@ -0,0 +1,24 @@
1
+ on run argv
2
+ set window_from to date (item 1 of argv)
3
+ set window_to to date (item 2 of argv)
4
+
5
+ tell application "Mail"
6
+ set results to {}
7
+
8
+ repeat with acct in every account
9
+ set username to user name of acct
10
+ try
11
+ set mbox to mailbox "[Gmail]/All Mail" of acct
12
+ on error
13
+ set mbox to mailbox "Sent" of acct
14
+ end try
15
+
16
+ set msgs to (messages whose sender contains username and date sent >= window_from and date sent <= window_to) in mbox
17
+ repeat with msg in msgs
18
+ set the end of results to {subject:subject of msg, datetime:date sent of msg as string}
19
+ end repeat
20
+ end repeat
21
+
22
+ results
23
+ end tell
24
+ end run
@@ -62,11 +62,11 @@ module Waddup
62
62
  def events_for_repo(from, to, repo)
63
63
  repo_label = self.class.label_for_repo repo
64
64
 
65
- results = run "git --git-dir='#{repo}' log --author='#{author}' --since='#{from.iso8601}' --until='#{to.iso8601}' --format='format:#{GIT_FORMAT}'"
65
+ results = run "git --git-dir='#{repo}' log --all --no-merges --author='#{author}' --since='#{from.iso8601}' --until='#{to.iso8601}' --format='format:#{GIT_FORMAT}'"
66
66
  results.scan(EXTRACT_PATTERN).map do |hash, datetime, subject|
67
67
  Waddup::Event.new do |e|
68
68
  e.label = "[#{repo_label}] #{subject}"
69
- e.at = DateTime.parse(datetime)
69
+ e.at = Time.parse(datetime)
70
70
  e.source = self
71
71
  end
72
72
  end
@@ -89,7 +89,7 @@ module Waddup
89
89
 
90
90
  # Requires Git to be installed successfully
91
91
  def self.usable?
92
- run 'git --version', :quietly => true
92
+ run 'git --version', quietly: true
93
93
  $?.success?
94
94
  end
95
95
 
@@ -1,5 +1,5 @@
1
1
  module Waddup
2
2
 
3
- VERSION = '0.0.2'
3
+ VERSION = '0.1.0'
4
4
 
5
5
  end
@@ -1,14 +1,30 @@
1
- if RUBY_VERSION >= '1.9.3'
2
- require 'simplecov'
3
- require 'coveralls'
4
-
5
- SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
6
- SimpleCov::Formatter::HTMLFormatter,
7
- Coveralls::SimpleCov::Formatter
8
- ]
9
- SimpleCov.start
10
- end
1
+ require 'simplecov'
2
+ require 'coveralls'
3
+
4
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
5
+ SimpleCov::Formatter::HTMLFormatter,
6
+ Coveralls::SimpleCov::Formatter
7
+ ]
8
+ SimpleCov.start
11
9
 
12
10
  require 'waddup'
13
11
 
14
12
  Dir['./spec/support/**/*.rb'].sort.each { |file| require file }
13
+
14
+ RSpec.configure do |config|
15
+
16
+ # Helper modules
17
+ config.extend ShellMock
18
+
19
+ config.before(:each) do
20
+ ShellMock.apply!
21
+ end
22
+
23
+ # Allow focussing on individual specs
24
+ config.filter_run focus: true
25
+ config.run_all_when_everything_filtered = true
26
+
27
+ # Run specs in random order to surface order dependencies
28
+ config.order = 'random'
29
+
30
+ end
@@ -1,26 +1,32 @@
1
- # Raised when shell operations are invoked
2
- class ShellNotAllowedError < StandardError
3
-
4
- def initialize(command)
5
- msg = "Shell operation is not allowed: #{command}\n\n"
6
- msg << "You can stub this request with the following snippet:\n\n"
7
- msg << "stub_shell(\"#{command}\", :output => '', :exitstatus => 0)\n "
8
- super msg
9
- end
1
+ module ShellMock
10
2
 
11
- end
3
+ # Raised when shell operations are invoked
4
+ class ShellNotAllowedError < StandardError
12
5
 
13
- # Prevent invoking shell operations
14
- class Object
6
+ def initialize(command)
7
+ msg = "Shell operation is not allowed: #{command}\n\n"
8
+ msg << "You can stub this request with the following snippet:\n\n"
9
+ msg << "stub_shell(\"#{command}\", output: '', exitstatus: 0)\n "
10
+ super msg
11
+ end
15
12
 
16
- def `(command)
17
- raise ShellNotAllowedError, command
18
13
  end
19
14
 
20
- def system(command)
21
- raise ShellNotAllowedError, command
15
+ # Applies shell mock functionality
16
+ def self.apply!
17
+ Object.any_instance.stub(:`).and_return do |foo|
18
+ raise ShellNotAllowedError, foo
19
+ end
20
+
21
+ Object.any_instance.stub(:system).and_return do |command|
22
+ raise ShellNotAllowedError, command
23
+ end
22
24
  end
23
25
 
26
+ end
27
+
28
+ class Object
29
+
24
30
  # Stubs shell operations matching given command
25
31
  #
26
32
  # Options:
@@ -1,13 +1,13 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Waddup::Source::AppleCalendar do
4
- let(:from) { DateTime.new 2013, 10, 16 }
5
- let(:to) { DateTime.new 2013, 10, 17 }
4
+ let(:from) { Date.new(2013, 10, 16) }
5
+ let(:to) { Date.new(2013, 10, 17) }
6
6
 
7
7
  describe '#events' do
8
8
  before do
9
- subject.stub_shell "osascript -s s -e '#{described_class::EVENT_SCRIPT}' '16/10/2013 00:00' '17/10/2013 00:00'",
10
- :output => fixture('sources/apple_calendar.results')
9
+ subject.stub_shell "osascript -s s '#{described_class::EVENT_SCRIPT}' '16/10/2013 00:00' '17/10/2013 00:00'",
10
+ output: fixture('sources/apple_calendar.results')
11
11
  end
12
12
 
13
13
  it 'aggregates events' do
@@ -27,7 +27,7 @@ describe Waddup::Source::AppleCalendar do
27
27
 
28
28
  context 'when AppleScript is available' do
29
29
  before do
30
- described_class.stub_shell 'osalang 2>&1', :output => 'AppleScript'
30
+ described_class.stub_shell 'osalang 2>&1', output: 'AppleScript'
31
31
  end
32
32
 
33
33
  it { should be_usable }
@@ -35,7 +35,7 @@ describe Waddup::Source::AppleCalendar do
35
35
 
36
36
  context 'when AppleScript is unavailable' do
37
37
  before do
38
- described_class.stub_shell 'osalang 2>&1', :exitstatus => 1
38
+ described_class.stub_shell 'osalang 2>&1', exitstatus: 1
39
39
  end
40
40
 
41
41
  it { should_not be_usable }
@@ -1,13 +1,13 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Waddup::Source::AppleMail do
4
- let(:from) { DateTime.new 2013, 10, 16 }
5
- let(:to) { DateTime.new 2013, 10, 17 }
4
+ let(:from) { Date.new(2013, 10, 16) }
5
+ let(:to) { Date.new(2013, 10, 17) }
6
6
 
7
7
  describe '#events' do
8
8
  before do
9
- subject.stub_shell "osascript -s s -e '#{described_class::SENT_MAIL_SCRIPT}' '16/10/2013 00:00' '17/10/2013 00:00'",
10
- :output => fixture('sources/apple_mail.results')
9
+ subject.stub_shell "osascript -s s '#{described_class::SENT_MAIL_SCRIPT}' '16/10/2013 00:00' '17/10/2013 00:00'",
10
+ output: fixture('sources/apple_mail.results')
11
11
  end
12
12
 
13
13
  it 'aggregates events' do
@@ -28,7 +28,7 @@ describe Waddup::Source::AppleMail do
28
28
 
29
29
  context 'when AppleScript is available' do
30
30
  before do
31
- described_class.stub_shell 'osalang 2>&1', :output => 'AppleScript'
31
+ described_class.stub_shell 'osalang 2>&1', output: 'AppleScript'
32
32
  end
33
33
 
34
34
  it { should be_usable }
@@ -36,7 +36,7 @@ describe Waddup::Source::AppleMail do
36
36
 
37
37
  context 'when AppleScript is unavailable' do
38
38
  before do
39
- described_class.stub_shell 'osalang 2>&1', :exitstatus => 1
39
+ described_class.stub_shell 'osalang 2>&1', exitstatus: 1
40
40
  end
41
41
 
42
42
  it { should_not be_usable }
@@ -3,8 +3,8 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe Waddup::Source::Git do
6
- let(:from) { DateTime.new 2013, 10, 16 }
7
- let(:to) { DateTime.new 2013, 10, 17 }
6
+ let(:from) { Date.new(2013, 10, 16) }
7
+ let(:to) { Date.new(2013, 10, 17) }
8
8
 
9
9
  describe '#author' do
10
10
  it 'obtains author from git-config' do
@@ -44,8 +44,8 @@ describe Waddup::Source::Git do
44
44
 
45
45
  describe '#events_for_repo' do
46
46
  before do
47
- subject.stub_shell "git --git-dir='/waddup/.git' log --author='John Doe' --since='2013-10-16T00:00:00+00:00' --until='2013-10-17T00:00:00+00:00' --format='format:%h %ai %s'",
48
- :output => fixture('sources/git.log')
47
+ subject.stub_shell "git --git-dir='/waddup/.git' log --all --no-merges --author='John Doe' --since='2013-10-16' --until='2013-10-17' --format='format:%h %ai %s'",
48
+ output: fixture('sources/git.log')
49
49
  end
50
50
 
51
51
  it 'aggregates events for given repo' do
@@ -82,7 +82,7 @@ describe Waddup::Source::Git do
82
82
  describe '::usable?' do
83
83
  context 'when git is available' do
84
84
  before do
85
- described_class.stub_shell 'git --version 2>&1', :exitstatus => 0
85
+ described_class.stub_shell 'git --version 2>&1', exitstatus: 0
86
86
  end
87
87
 
88
88
  it { should be_usable }
@@ -90,7 +90,7 @@ describe Waddup::Source::Git do
90
90
 
91
91
  context 'when git is unavailable' do
92
92
  before do
93
- described_class.stub_shell 'git --version 2>&1', :exitstatus => 1
93
+ described_class.stub_shell 'git --version 2>&1', exitstatus: 1
94
94
  end
95
95
 
96
96
  it { should_not be_usable }
@@ -20,17 +20,15 @@ Gem::Specification.new do |s|
20
20
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
21
21
  s.require_paths = ['lib']
22
22
 
23
- s.add_dependency 'chronic'
23
+ s.add_dependency 'chronic', '~> 0.10.2'
24
24
 
25
25
  s.add_development_dependency 'rake'
26
26
  s.add_development_dependency 'rspec'
27
27
 
28
- if RUBY_VERSION >= '1.9.3'
29
- s.add_development_dependency 'guard'
30
- s.add_development_dependency 'guard-rspec'
31
- s.add_development_dependency 'listen'
28
+ s.add_development_dependency 'guard'
29
+ s.add_development_dependency 'guard-rspec'
30
+ s.add_development_dependency 'listen'
32
31
 
33
- s.add_development_dependency 'coveralls'
34
- s.add_development_dependency 'simplecov'
35
- end
32
+ s.add_development_dependency 'coveralls'
33
+ s.add_development_dependency 'simplecov'
36
34
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: waddup
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Kurvers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-29 00:00:00.000000000 Z
11
+ date: 2013-11-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chronic
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 0.10.2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 0.10.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -149,11 +149,14 @@ files:
149
149
  - lib/waddup/event.rb
150
150
  - lib/waddup/extension.rb
151
151
  - lib/waddup/extensions/applescript.rb
152
+ - lib/waddup/extensions/file_system.rb
152
153
  - lib/waddup/extensions/system.rb
153
154
  - lib/waddup/registry.rb
154
155
  - lib/waddup/source.rb
155
156
  - lib/waddup/sources/apple_calendar.rb
157
+ - lib/waddup/sources/apple_calender/events.applescript
156
158
  - lib/waddup/sources/apple_mail.rb
159
+ - lib/waddup/sources/apple_mail/sent_mail.applescript
157
160
  - lib/waddup/sources/git.rb
158
161
  - lib/waddup/version.rb
159
162
  - spec/fixtures/sources/apple_calendar.results