miyuki 0.3 → 0.4

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: bfa81dd6b05e2361be6fdd3062edf78a85308fef
4
- data.tar.gz: 9c151825a73470dc07d53229209215d1a5997b48
3
+ metadata.gz: 0e1f6766c6de32f19ca19a15b0d50c4aac6462cd
4
+ data.tar.gz: 71406609632d18bcded6d20be2ffb1f3d1d9f867
5
5
  SHA512:
6
- metadata.gz: 566a45cae0d029cbe3bafb3d3db98fa816a50e6f3b42916d32a0f0b821c4358ecc3fdf39b79643f5f88fa546d7fdd8bd2d25d9d9d06299feb596e85085d9b6d2
7
- data.tar.gz: d1da7e3a0a15709edaf5b1658eccb0b206da5c1adee17baff7af8c933183f2cbea9c1de632fdaf47a4cbcd7db4e48640e9706ee162d71c765e94741d1faaf802
6
+ metadata.gz: 4251deb61c0d65ce5a88fc2667a8904a64ce665c1817b5a87e0437e478e0ebeea1d5b7070e2a0ec054d29c2af230630b995db0d98c29a45dcdc686fc7372b442
7
+ data.tar.gz: 2d5ce0c653fd560c64f2d7ad13ec5382dcf89c1064727696748818db7c73a453cddde89bac4e51bab8bb020066eda6853ff6c28a8835189387dc63dfedbf85b6
data/.gitignore CHANGED
@@ -1,2 +1,5 @@
1
1
  *.gem
2
- TODO
2
+ *.pid
3
+ *.log
4
+ bin/tmp/
5
+ features/support/testWatchDir/
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+ - 2.1.2
6
+
7
+ notifications:
8
+ irc: 'irc.rizon.net#aggvistnurummor'
data/Gemfile CHANGED
@@ -1,7 +1,14 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
+ gem 'rake'
3
4
  gem 'rufus-scheduler'
4
- gem 'yamazaki', '>= 0.3'
5
+ gem 'yamazaki', '>= 0.3.1'
5
6
  gem 'foreverb'
6
7
  gem 'terminal-notifier'
7
8
  gem 'libnotify'
9
+ gem 'rb-notifu'
10
+ gem 'filewatcher'
11
+ gem 'ruby_deep_clone'
12
+
13
+ gem 'cucumber'
14
+ gem 'rspec'
data/Gemfile.lock CHANGED
@@ -1,26 +1,70 @@
1
1
  GEM
2
2
  remote: https://rubygems.org/
3
3
  specs:
4
+ builder (3.2.2)
4
5
  color (1.7.1)
5
6
  colorb (0.0.9)
6
7
  color
8
+ cucumber (1.3.17)
9
+ builder (>= 2.1.2)
10
+ diff-lcs (>= 1.1.3)
11
+ gherkin (~> 2.12)
12
+ multi_json (>= 1.7.5, < 2.0)
13
+ multi_test (>= 0.1.1)
14
+ diff-lcs (1.2.5)
15
+ ffi (1.9.6)
16
+ ffi (1.9.6-x86-mingw32)
17
+ filewatcher (0.3.5)
18
+ trollop (~> 2.0)
7
19
  foreverb (0.3.2)
8
20
  thor (>= 0.15.0)
21
+ gherkin (2.12.2)
22
+ multi_json (~> 1.3)
23
+ gherkin (2.12.2-x86-mingw32)
24
+ multi_json (~> 1.3)
25
+ libnotify (0.8.4)
26
+ ffi (>= 1.0.11)
27
+ multi_json (1.10.1)
28
+ multi_test (0.1.1)
29
+ rake (10.4.2)
30
+ rb-notifu (0.0.4)
31
+ rspec (3.1.0)
32
+ rspec-core (~> 3.1.0)
33
+ rspec-expectations (~> 3.1.0)
34
+ rspec-mocks (~> 3.1.0)
35
+ rspec-core (3.1.7)
36
+ rspec-support (~> 3.1.0)
37
+ rspec-expectations (3.1.2)
38
+ diff-lcs (>= 1.2.0, < 2.0)
39
+ rspec-support (~> 3.1.0)
40
+ rspec-mocks (3.1.3)
41
+ rspec-support (~> 3.1.0)
42
+ rspec-support (3.1.2)
43
+ ruby_deep_clone (0.6.0)
9
44
  rufus-scheduler (3.0.9)
10
45
  tzinfo
11
46
  terminal-notifier (1.6.2)
12
47
  thor (0.19.1)
13
48
  thread_safe (0.3.4)
49
+ trollop (2.0)
14
50
  tzinfo (1.2.2)
15
51
  thread_safe (~> 0.1)
16
- yamazaki (0.3)
52
+ yamazaki (0.3.1)
17
53
  colorb (~> 0)
18
54
 
19
55
  PLATFORMS
20
56
  ruby
57
+ x86-mingw32
21
58
 
22
59
  DEPENDENCIES
60
+ cucumber
61
+ filewatcher
23
62
  foreverb
63
+ libnotify
64
+ rake
65
+ rb-notifu
66
+ rspec
67
+ ruby_deep_clone
24
68
  rufus-scheduler
25
69
  terminal-notifier
26
- yamazaki (>= 0.3)
70
+ yamazaki (>= 0.3.1)
data/README.md CHANGED
@@ -1,13 +1,13 @@
1
1
  Miyuki – Non ti lascia mai solo
2
2
  ===============================
3
- After having configured the `example/miyuki.conf` configuration file, Miyuki lets you to have always the latest episodes of anime you're watching, downloading the episodes whenever they're available on Nyaa.
3
+ After having configured the `example/miyuki.conf` configuration file, Miyuki lets you to have always the latest episodes of anime you're watching, downloading the episodes whenever they're available on [nyaa](http://nyaa.se).
4
4
 
5
- Of course, set the watch directory inside the configuration file to the one you've set in your torrent client.
5
+ Of course, remember set the watch directory inside the configuration file (`example/miyuki.conf`) to the one you've set in your torrent client.
6
6
 
7
7
  Features
8
8
  --------
9
- - After having launched the daemon, the changes to the configuration file will be always syncronized without having restart Miyuki
10
- - Whenever Miyuki finds out a new episode to download, you'll be notified with an alert (compatible with OSX natively and with Linux installing `libnotify`)
9
+ - After having launched the daemon, the changes to the configuration file will be always syncronized without having to restart Miyuki
10
+ - Whenever Miyuki finds out a new episode to download, you'll be notified with a system alert (compatible with OSX and Windows natively and with Linux installing `libnotify`)
11
11
  - Miyuki gives you a powerful way to search anime series through patterns
12
12
 
13
13
  How to use
@@ -18,11 +18,6 @@ How to use
18
18
 
19
19
  `$ miyuki stop` (or `$ miyuki kill`)
20
20
 
21
- Known bugs
22
- ----------
23
- - Nisekoi BDs in `example/miyuki.conf` are downloaded both in 720p and 1080p
24
-
25
21
  Contributors
26
22
  ------------
27
- - [alfateam123](https://github.com/alfateam123) — notifications
28
-
23
+ - [alfateam123](https://github.com/alfateam123) — libnotify
data/Rakefile CHANGED
@@ -1,7 +1,9 @@
1
1
  #! /usr/bin/env ruby
2
2
  require 'rake'
3
+ require 'cucumber'
4
+ require 'cucumber/rake/task'
3
5
 
4
- task default: [ :build, :install ]
6
+ task default: [ :build, :install, :test ]
5
7
 
6
8
  task :build do
7
9
  sh 'gem build *.gemspec'
@@ -10,3 +12,7 @@ end
10
12
  task :install do
11
13
  sh 'gem install *.gem'
12
14
  end
15
+
16
+ Cucumber::Rake::Task.new(:test) do |t|
17
+ t.cucumber_opts = %w{--format pretty}
18
+ end
data/example/miyuki.conf CHANGED
@@ -4,7 +4,7 @@ notifications:
4
4
  enabled: true
5
5
 
6
6
  series:
7
- - name: Nisekoi
7
+ - name: Mekakucity
8
8
  fansub: Commie
9
9
 
10
10
  - name: Nisekoi
@@ -0,0 +1,18 @@
1
+ Feature: Load configuration file
2
+ In order to load a custom configuration inside Miyuki
3
+ As a user who wants to run her
4
+ I give her the path to the configuration file
5
+
6
+ Scenario: The file exists and is valid
7
+ When I set the configuration file path to "features/support/miyuki.conf"
8
+ Then I expect no exception raised
9
+
10
+ Scenario: The file does not exist
11
+ When I set the configuration file path to "features/support/nopls.conf"
12
+ Then I expect an exception raised
13
+
14
+ Scenario: The configuration is refreshed as soon as the file is modified
15
+ When I set the configuration file path to "features/support/miyuki.conf"
16
+ And I modify something in "features/support/miyuki.conf"
17
+ Then Miyuki reloads her configuration
18
+ And I get a notification about the reloading
@@ -0,0 +1,25 @@
1
+ When(/I set the configuration file path to "(.*)"/) do |path|
2
+ @path = path
3
+ begin
4
+ Miyuki.config = @path
5
+ rescue
6
+ end
7
+ end
8
+
9
+ Then(/I expect an exception raised/) do
10
+ expect { Miyuki.config = @path }.to raise_error
11
+ end
12
+
13
+ Then(/I expect no exception raised/) do
14
+ expect { Miyuki.config = @path }.to_not raise_error
15
+ end
16
+
17
+ And(/^I modify something in "(.*?)"/) do |file|
18
+ @previous_config = Miyuki.config
19
+
20
+ FileUtils.touch(file)
21
+ end
22
+
23
+ Then(/^Miyuki reloads her configuration/) do
24
+ expect(Miyuki.config).to_not be equal(@previous_config)
25
+ end
@@ -0,0 +1,17 @@
1
+ When(/I invoke "(.*)"/) do |command|
2
+ Miyuki.send(command.to_sym)
3
+ end
4
+
5
+ And(/watch folder is created if it does not exists/) do
6
+ watch_dir = Miyuki.config['watchDir']
7
+ FileUtils.rm_r(watch_dir) if Dir.exists?(watch_dir)
8
+
9
+ expect { Miyuki.track! }.to change { Dir.exists?(watch_dir) }.from(false).to(true)
10
+ end
11
+
12
+ And(/watch folder is not created if it exists already/) do
13
+ watch_dir = Miyuki.config['watchDir']
14
+ Dir.mkdir(watch_dir) unless Dir.exists?(watch_dir)
15
+
16
+ expect { Miyuki.track! }.to_not change { Dir.exists?(watch_dir) }
17
+ end
@@ -0,0 +1,43 @@
1
+ And(/I wait (\d+) seconds?/) do |seconds|
2
+ sleep seconds.to_f
3
+ end
4
+
5
+ Then(/I have almost (\d+) torrent files? containing "(.*?)"/) do |count, string|
6
+ watch_dir = Miyuki.config['watchDir']
7
+ torrent_files = Dir["#{watch_dir}/*.torrent"].select { |f| f.include?(string) }
8
+
9
+ expect(torrent_files.count).to be >= count.to_i
10
+ end
11
+
12
+ And(/I have almost (\d+) torrent files? that do not contain "(.*?)"/) do |count, string|
13
+ watch_dir = Miyuki.config['watchDir']
14
+ torrent_files = Dir["#{watch_dir}/*.torrent"].reject { |f| f.include?(string) }
15
+
16
+ expect(torrent_files.count).to be >= count.to_i
17
+ end
18
+
19
+ And(/there are (\d+) torrent files? containing "(.*?)"/) do |count, string|
20
+ watch_dir = Miyuki.config['watchDir']
21
+ torrent_files = Dir["#{watch_dir}/*.torrent"].select { |f| f.include?(string) }
22
+
23
+ expect(torrent_files.count).to be count.to_i
24
+ end
25
+
26
+ And(/there are (\d+) torrent files? that do not contain "(.*?)"/) do |count, string|
27
+ watch_dir = Miyuki.config['watchDir']
28
+ torrent_files = Dir["#{watch_dir}/*.torrent"].reject { |f| f.include?(string) }
29
+
30
+ expect(torrent_files.count).to be count.to_i
31
+ end
32
+
33
+ And(/I consider the currently downloaded torrent files/) do
34
+ watch_dir = Miyuki.config['watchDir']
35
+ @previous_torrent_files_ctime = Dir["#{watch_dir}/*.torrent"].map { |f| File.ctime(f) }
36
+ end
37
+
38
+ Then(/I expect (\d+) torrent files? (have|has) been overwritten/) do |count, plural|
39
+ watch_dir = Miyuki.config['watchDir']
40
+ torrent_files_ctime = Dir["#{watch_dir}/*.torrent"].map { |f| File.ctime(f) }
41
+
42
+ expect(@previous_torrent_files_ctime).to match_array(torrent_files_ctime)
43
+ end
@@ -0,0 +1,12 @@
1
+ require 'miyuki'
2
+ require 'rspec'
3
+ require 'fileutils'
4
+
5
+ Miyuki.join_scheduler = false
6
+
7
+ After do |s|
8
+ watch_dir = 'features/support/testWatchDir'
9
+ FileUtils.rm_r(watch_dir) if Dir.exists?(watch_dir)
10
+
11
+ Cucumber.wants_to_quit = true if s.failed?
12
+ end
@@ -0,0 +1,13 @@
1
+ watchDir: "features/support/testWatchDir"
2
+ refreshEvery: 6s
3
+ notifications:
4
+ enabled: true
5
+
6
+ series:
7
+ - name: Mekakucity
8
+ fansub: Commie
9
+
10
+ - name: Nisekoi
11
+ fansub: Commie
12
+ res: 1080p
13
+ pattern: "[$fansub] $name - Volume [BD $res AAC]"
@@ -0,0 +1,11 @@
1
+ Feature: Start the tracking of anime series
2
+ In order to keep track of new episodes of the anime series I'm watching
3
+ As user who wants to actually start Miyuki
4
+ I call Miyuki::track!
5
+
6
+ Scenario: The tracking starts without launching exceptions
7
+ When I set the configuration file path to "features/support/miyuki.conf"
8
+ And I invoke "track!"
9
+ Then I expect no exception raised
10
+ And watch folder is created if it does not exists
11
+ And watch folder is not created if it exists already
@@ -0,0 +1,27 @@
1
+ Feature: Download new episodes
2
+ In order to download the new episodes of the anime series I'm watching
3
+ As user who wants to have the torrent files downloaded automatically as soon as they're available
4
+ I expect the episodes are tracked and the torrent files are downloaded
5
+
6
+ Scenario: The episodes are downloaded according to the configuration file
7
+ When I set the configuration file path to "features/support/miyuki.conf"
8
+ And I invoke "track!"
9
+ And I wait 5 seconds to let Miyuki to find and download the episodes
10
+ Then I have almost 2 torrent files containing "BD"
11
+ And I have almost 12 torrent file that do not contain "BD"
12
+ And there are 0 torrent files containing "BD 720p"
13
+ And there are 0 torrent files that do not contain "[Commie]"
14
+
15
+ Scenario: Episodes already downloaded are ignored
16
+ When I set the configuration file path to "features/support/miyuki.conf"
17
+ And I invoke "track!"
18
+ And I wait 5 seconds to let Miyuki to find and download the episodes
19
+ And I consider the currently downloaded torrent files
20
+ And I wait 6 seconds in order to have a new check of the new anime episodes
21
+ And I wait 5 seconds in case this scenario would fail
22
+ Then I expect 0 torrent files have been overwritten by their duplicates
23
+
24
+ Scenario: There is a notification for every episode downloaded if enabled
25
+ When I set the configuration file path to "features/support/miyuki.conf"
26
+ And I invoke "track!"
27
+ Then I get a notification for every torrent file downloaded
data/lib/miyuki/miyuki.rb CHANGED
@@ -14,26 +14,32 @@
14
14
 
15
15
  module Miyuki
16
16
  class << self
17
+ attr_reader :config, :config_file
18
+ attr_accessor :join_scheduler
19
+
17
20
  def config=(config_file)
18
21
  @notifier = Notifier.new
19
22
 
20
23
  @config_file = config_file
21
24
  @config = load_config
22
25
 
23
- # TODO: Implement file watcher
24
- Rufus::Scheduler.singleton.every('1m') { refresh_config }
26
+ Thread.new do
27
+ FileWatcher.new([config_file]).watch { refresh_config }
28
+ end
25
29
  end
26
30
 
27
31
  def track!
32
+ raise Exception, 'You have to provide a proper configuration file to start the tracking.' unless @config
33
+
28
34
  watch_dir = File.expand_path(@config['watchDir'])
29
- FileUtils.mkdir_p(watch_dir) unless File.directory?(watch_dir)
35
+ FileUtils.mkdir_p(watch_dir) unless Dir.exists?(watch_dir)
30
36
 
31
- # TODO: #deep_dup instead of using Marshal
32
- @tracker = Tracker.new(watch_dir, Marshal.load(Marshal.dump(@config))['series']) do |torrent|
37
+ config = DeepClone.clone(@config)
38
+ @tracker = Tracker.new(watch_dir, config['series']) do |torrent|
33
39
  notify_torrents(torrent)
34
40
  end
35
41
 
36
- run_scheduler
42
+ run_scheduler!
37
43
  end
38
44
 
39
45
  private
@@ -45,7 +51,6 @@ module Miyuki
45
51
  notify_configuration
46
52
 
47
53
  @config = new_config
48
- @scheduler.pause if defined?(@scheduler)
49
54
  track!
50
55
  end
51
56
  end
@@ -54,19 +59,22 @@ module Miyuki
54
59
  old_torrents = @tracker.torrents
55
60
 
56
61
  @tracker.refresh
62
+ @tracker.remove_duplicates(old_torrents)
57
63
 
58
- new_torrents = @tracker.remove_duplicates(old_torrents)
59
- new_torrents.each { |torrent| notify_torrents(new_torrents) }
64
+ new_torrents = @tracker.torrents
65
+ new_torrents.each { |new_torrent| notify_torrents(new_torrent) }
60
66
  end
61
67
 
62
68
  def load_config
63
69
  YAML.load(File.read(@config_file))
64
70
  end
65
71
 
66
- def run_scheduler
67
- @scheduler = Rufus::Scheduler.new
68
- @scheduler.every @config['refreshEvery'] { refresh_torrents }
69
- @scheduler.join
72
+ def run_scheduler!
73
+ @scheduled_job.kill if @scheduled_job
74
+
75
+ scheduler = Rufus::Scheduler.new
76
+ @scheduled_job = scheduler.schedule_every @config['refreshEvery'] { refresh_torrents }
77
+ scheduler.join if @join_scheduler != false
70
78
  end
71
79
 
72
80
  def notify_torrents(torrent)
@@ -19,7 +19,11 @@ module Miyuki
19
19
  end
20
20
 
21
21
  def notify(title, message)
22
- @notifier.notify(title, message)
22
+ @notifier.notify(title, message) if has_notifier?
23
+ end
24
+
25
+ def has_notifier?
26
+ !!@notifier
23
27
  end
24
28
 
25
29
  private
@@ -28,6 +32,7 @@ module Miyuki
28
32
  case RUBY_PLATFORM
29
33
  when /darwin/ then Miyuki::TerminalNotifier.new
30
34
  when /linux/ then Miyuki::Libnotify.new
35
+ when /mswin|msys|mingw|cygwin/ then Miyuki::Notifu.new
31
36
  end
32
37
  end
33
38
  end
@@ -0,0 +1,22 @@
1
+ ##
2
+ # DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
3
+ # Version 2, December 2004
4
+ #
5
+ # Everyone is permitted to copy and distribute verbatim or modified
6
+ # copies of this license document, and changing it is allowed as long
7
+ # as the name is changed.
8
+ #
9
+ # DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
10
+ # TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
11
+ #
12
+ # 0. You just DO WHAT THE FUCK YOU WANT TO.
13
+ ##
14
+ require 'rb-notifu'
15
+
16
+ module Miyuki
17
+ class Notifu
18
+ def notify(title, message)
19
+ ::Notifu.show(title: message, message: title, type: :info, time: 1)
20
+ end
21
+ end
22
+ end
@@ -28,22 +28,26 @@ module Miyuki
28
28
  refresh
29
29
  end
30
30
 
31
+ def for_every_torrent(&callback)
32
+ if block_given?
33
+ @callback = callback
34
+ else
35
+ yield
36
+ end
37
+ end
38
+
31
39
  def refresh
32
40
  @torrents = []
33
41
 
34
42
  fetch_torrents
35
43
 
36
44
  @torrents.each do |torrent|
37
- existed = File.exists?("#{Yamazaki::WATCH_DIR}/#{torrent.title}.torrent")
38
- Yamazaki.download_torrent(torrent.title, torrent.link)
39
- downloaded = !existed && File.exists?("#{Yamazaki::WATCH_DIR}/#{torrent.title}.torrent")
45
+ downloaded = Yamazaki.download_torrent(torrent.title, torrent.link)
40
46
 
41
- # TODO: `downloaded` should be returned by Yamazaki natively
42
47
  @callback.call(torrent) if downloaded && @callback
43
48
  end
44
49
  end
45
50
 
46
- # TODO: Refactor
47
51
  def remove_duplicates(other_torrents)
48
52
  @torrents.delete_if do |torrent|
49
53
  other_torrents.each do |other_torrent|
@@ -13,5 +13,5 @@
13
13
  ##
14
14
 
15
15
  module Miyuki
16
- VERSION = '0.3'
16
+ VERSION = '0.4'
17
17
  end
data/lib/miyuki.rb CHANGED
@@ -16,6 +16,8 @@ require 'fileutils'
16
16
  require 'yaml'
17
17
  require 'rufus-scheduler'
18
18
  require 'yamazaki'
19
+ require 'filewatcher'
20
+ require 'deep_clone'
19
21
 
20
22
  require 'miyuki/notifier'
21
23
  require 'miyuki/tracker'
@@ -25,4 +27,5 @@ require 'miyuki/version'
25
27
  case RUBY_PLATFORM
26
28
  when /darwin/ then require 'miyuki/notifiers/terminal-notifier.rb'
27
29
  when /linux/ then require 'miyuki/notifiers/libnotify.rb'
30
+ when /mswin|msys|mingw|cygwin/ then require 'miyuki/notifiers/notifu.rb'
28
31
  end
data/miyuki.gemspec CHANGED
@@ -17,9 +17,15 @@ Gem::Specification.new do |s|
17
17
  s.add_dependency 'yamazaki', '~> 0.3'
18
18
  s.add_dependency 'rufus-scheduler', '~> 3.0'
19
19
  s.add_dependency 'foreverb', '~> 0.3'
20
+ s.add_dependency 'filewatcher', '~> 0.3'
21
+ s.add_dependency 'ruby_deep_clone', '~> 0.6'
20
22
 
21
23
  case RUBY_PLATFORM
22
24
  when /darwin/ then s.add_dependency 'terminal-notifier', '~> 1.6'
23
25
  when /linux/ then s.add_dependency 'libnotify', '~> 0.8'
26
+ when /mswin|msys|mingw|cygwin/ then s.add_dependency 'libnotify', '~> 0.0'
24
27
  end
28
+
29
+ s.add_development_dependency 'cucumber', '~> 1.3'
30
+ s.add_development_dependency 'rspec', '~> 3.2'
25
31
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: miyuki
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.3'
4
+ version: '0.4'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roxas Shadow
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-10 00:00:00.000000000 Z
11
+ date: 2014-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: yamazaki
@@ -52,6 +52,34 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: filewatcher
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.3'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.3'
69
+ - !ruby/object:Gem::Dependency
70
+ name: ruby_deep_clone
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.6'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.6'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: terminal-notifier
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +94,34 @@ dependencies:
66
94
  - - "~>"
67
95
  - !ruby/object:Gem::Version
68
96
  version: '1.6'
97
+ - !ruby/object:Gem::Dependency
98
+ name: cucumber
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.3'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.3'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '3.2'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '3.2'
69
125
  description: Miyuki downloads automatically every episode of anime you're watching
70
126
  email: webmaster@giovannicapuano.net
71
127
  executables:
@@ -74,16 +130,26 @@ extensions: []
74
130
  extra_rdoc_files: []
75
131
  files:
76
132
  - ".gitignore"
133
+ - ".travis.yml"
77
134
  - Gemfile
78
135
  - Gemfile.lock
79
136
  - README.md
80
137
  - Rakefile
81
138
  - bin/miyuki
82
139
  - example/miyuki.conf
140
+ - features/load_config.feature
141
+ - features/step_definitions/load_config_step.rb
142
+ - features/step_definitions/track_step.rb
143
+ - features/step_definitions/tracker_step.rb
144
+ - features/support/env.rb
145
+ - features/support/miyuki.conf
146
+ - features/track.feature
147
+ - features/tracker.feature
83
148
  - lib/miyuki.rb
84
149
  - lib/miyuki/miyuki.rb
85
150
  - lib/miyuki/notifier.rb
86
151
  - lib/miyuki/notifiers/libnotify.rb
152
+ - lib/miyuki/notifiers/notifu.rb
87
153
  - lib/miyuki/notifiers/terminal-notifier.rb
88
154
  - lib/miyuki/tracker.rb
89
155
  - lib/miyuki/version.rb