remme 0.1.6 → 0.1.7

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: 5c02b7056be4871c02ab6d0253bda121acc8f4ab
4
- data.tar.gz: a627cc1ae42681b57f1ced1a78a78cdf556f5977
3
+ metadata.gz: 7815d109ff7a76dd1be30eff506220bcb3259e9b
4
+ data.tar.gz: 88c8a43900a24b692b84b0964f5da26a2b5649dc
5
5
  SHA512:
6
- metadata.gz: 85165f3f15887c4366753e2ab32533147f815cdd379a8810e1e8de41d75e2695dfd2ab4467d81955eba4cc42e7c9f389e43b699af03bf10f9d85f2ad2f34659d
7
- data.tar.gz: f3592a07f24ab40574080c6fc7f577a76f646fafe69b673de89770e7964876c12bc1f9b7beb28e91c0c10a986cba1cc73bbd12b9a032937198191f686e7a4546
6
+ metadata.gz: 3571d648a67c0d443541ea44ec567d6dc4a04a7323b02238893a58f69e979d81cc98b79d01658a95912e3f5bdec8ac560b2385768fcee97cf9f19e21b964db32
7
+ data.tar.gz: ecb1674f504785d8847e7746673cc77e139e4d26727c60e6aeef4702c775497bd2ed6a78cce51e790e364fb633f183039cead0dfefa739c9e3fdfd0dce97a7fd
data/bin/remme CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'reminder'
3
+ require 'remme'
4
4
 
5
5
  Reminder::Runner.run(
6
6
  timeout: ARGV.last,
@@ -0,0 +1,6 @@
1
+ module Demonizer
2
+ def demonize(process)
3
+ process.daemon(true, true)
4
+ yield
5
+ end
6
+ end
@@ -0,0 +1,11 @@
1
+ module Notifier
2
+ module Adapters
3
+ module Say
4
+ class << self
5
+ def run(message)
6
+ `say "#{message}"`
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,19 @@
1
+ module Notifier
2
+ class Base
3
+ class << self
4
+ def init
5
+ self.tap { @adapter = adapter }
6
+ end
7
+
8
+ def run(message)
9
+ @adapter.run(message)
10
+ end
11
+
12
+ private
13
+
14
+ def adapter
15
+ Adapters::Say
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,7 @@
1
+ class Notifier
2
+ class << self
3
+ def run(message)
4
+ `say "#{message}"`
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'sucker_punch'
2
+
3
+ module Performer
4
+ class Base
5
+ include SuckerPunch::Job
6
+ end
7
+ end
@@ -0,0 +1,33 @@
1
+ module Player
2
+ module Adapters
3
+ module Spotify
4
+ class << self
5
+ def play
6
+ `osascript -e 'tell application "Spotify" to play'`
7
+ end
8
+
9
+ def pause
10
+ `osascript -e 'tell application "Spotify" to pause'`
11
+ end
12
+
13
+ def being_played?
14
+ script = %q{
15
+ echo $(osascript <<EOF
16
+ set state to missing value
17
+
18
+ if application "Spotify" is running then
19
+ tell application "Spotify"
20
+ set state to (player state as text)
21
+ end tell
22
+ end if
23
+
24
+ return state is equal to "playing"
25
+ EOF)
26
+ }
27
+
28
+ `#{script}`.strip == 'true'
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,28 @@
1
+ module Player
2
+ class Base
3
+ class << self
4
+ def init
5
+ self.tap do
6
+ @adapter = adapter
7
+ @was_playing = adapter.being_played?
8
+ end
9
+ end
10
+
11
+ def pause
12
+ return if !@was_playing
13
+ @adapter.pause
14
+ end
15
+
16
+ def play
17
+ return if !@was_playing
18
+ @adapter.play
19
+ end
20
+
21
+ private
22
+
23
+ def adapter
24
+ Adapters::Spotify
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,51 @@
1
+ require 'reminder/performer/base'
2
+
3
+ class Scheduler < Performer::Base
4
+ class << self
5
+ attr_accessor :completed
6
+ alias :completed? :completed
7
+
8
+ @@class_instance_fields = %i(
9
+ after_hook before_hook
10
+ message notifier
11
+ )
12
+
13
+ def run(options)
14
+ build_class_instance_fields(options)
15
+ perform_in(options.delete(:timeout))
16
+ end
17
+
18
+ @@class_instance_fields.each do |field|
19
+ define_method(field) { instance_variable_get("@#{field}") }
20
+ end
21
+
22
+ def build_class_instance_fields(options)
23
+ @@class_instance_fields.each do |field_name|
24
+ instance_variable_set("@#{field_name}", options.delete(field_name))
25
+ end
26
+ end
27
+ end
28
+
29
+ def perform
30
+ complete_after { notify }
31
+ end
32
+
33
+ private
34
+
35
+ def notify
36
+ with_callbacks do
37
+ self.class.notifier.run(self.class.message)
38
+ end
39
+ end
40
+
41
+ def complete_after
42
+ yield
43
+ self.class.completed = true
44
+ end
45
+
46
+ def with_callbacks
47
+ self.class.before_hook.call
48
+ yield
49
+ self.class.after_hook.call
50
+ end
51
+ end
@@ -0,0 +1,3 @@
1
+ module Reminder
2
+ VERSION = "0.1.5"
3
+ end
@@ -1,14 +1,13 @@
1
- require "reminder/version"
2
- require "reminder/scheduler"
3
- require "reminder/demonizer"
1
+ require "remme/scheduler"
2
+ require "remme/demonizer"
4
3
 
5
- require "reminder/player/base"
6
- require "reminder/player/adapters/spotify"
4
+ require "remme/player/base"
5
+ require "remme/player/adapters/spotify"
7
6
 
8
- require "reminder/notifier/base"
9
- require "reminder/notifier/adapters/say"
7
+ require "remme/notifier/base"
8
+ require "remme/notifier/adapters/say"
10
9
 
11
- module Reminder
10
+ module Remme
12
11
  class Runner
13
12
  include Demonizer
14
13
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: remme
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luis Vasconcellos
@@ -75,7 +75,16 @@ extensions: []
75
75
  extra_rdoc_files: []
76
76
  files:
77
77
  - bin/remme
78
- - lib/reminder.rb
78
+ - lib/remme.rb
79
+ - lib/remme/demonizer.rb
80
+ - lib/remme/notifier.rb
81
+ - lib/remme/notifier/adapters/say.rb
82
+ - lib/remme/notifier/base.rb
83
+ - lib/remme/performer/base.rb
84
+ - lib/remme/player/adapters/spotify.rb
85
+ - lib/remme/player/base.rb
86
+ - lib/remme/scheduler.rb
87
+ - lib/remme/version.rb
79
88
  homepage: http://luisvasconcellos.com
80
89
  licenses:
81
90
  - MIT