youpy-itunes-observer 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog ADDED
@@ -0,0 +1,4 @@
1
+ == 0.0.1 / 2009-09-07
2
+
3
+ * initial release
4
+
data/README.rdoc ADDED
@@ -0,0 +1,32 @@
1
+
2
+ = itunes-observer
3
+
4
+
5
+ == Description
6
+
7
+
8
+ == Installation
9
+
10
+ === Archive Installation
11
+
12
+ rake install
13
+
14
+ === Gem Installation
15
+
16
+ gem sources -a http://gems.github.com/
17
+ gem install youpy-itunes-observer
18
+
19
+ == Features/Problems
20
+
21
+
22
+ == Synopsis
23
+
24
+ ITunesObserver.new {|result|
25
+ puts '%s - %s' % [result['Artist'], result['Name']]
26
+ }.run
27
+
28
+ == Copyright
29
+
30
+ Author:: youpy <youpy@buycheapviagraonlinenow.com>
31
+ Copyright:: Copyright (c) 2009 youpy
32
+ License:: MIT
data/Rakefile ADDED
@@ -0,0 +1,110 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/clean'
4
+ require 'rake/testtask'
5
+ require 'rake/packagetask'
6
+ require 'rake/gempackagetask'
7
+ require 'rake/rdoctask'
8
+ require 'rake/contrib/rubyforgepublisher'
9
+ require 'rake/contrib/sshpublisher'
10
+ require 'spec/rake/spectask'
11
+ require 'fileutils'
12
+ include FileUtils
13
+
14
+ $LOAD_PATH.unshift "lib"
15
+ require "itunes_observer"
16
+
17
+ NAME = "itunes-observer"
18
+ AUTHOR = "youpy"
19
+ EMAIL = "youpy@buycheapviagraonlinenow.com"
20
+ DESCRIPTION = ""
21
+ RUBYFORGE_PROJECT = "itunes-observer"
22
+ HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
23
+ BIN_FILES = %w( )
24
+ VERS = ITunesObserver::VERSION
25
+
26
+ REV = File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil
27
+ CLEAN.include ['**/.*.sw?', '*.gem', '.config']
28
+ RDOC_OPTS = [
29
+ '--title', "#{NAME} documentation",
30
+ "--charset", "utf-8",
31
+ "--opname", "index.html",
32
+ "--line-numbers",
33
+ "--main", "README.rdoc",
34
+ "--inline-source",
35
+ ]
36
+
37
+ task :default => [:spec]
38
+ task :package => [:clean]
39
+
40
+ Spec::Rake::SpecTask.new do |t|
41
+ t.spec_opts = ['--options', "spec/spec.opts"]
42
+ t.spec_files = FileList['spec/*_spec.rb']
43
+ t.rcov = true
44
+ end
45
+
46
+ spec = Gem::Specification.new do |s|
47
+ s.name = NAME
48
+ s.version = VERS
49
+ s.platform = Gem::Platform::RUBY
50
+ s.has_rdoc = true
51
+ s.extra_rdoc_files = ["README.rdoc", "ChangeLog"]
52
+ s.rdoc_options += RDOC_OPTS + ['--exclude', '^(examples|extras)/']
53
+ s.summary = DESCRIPTION
54
+ s.description = DESCRIPTION
55
+ s.author = AUTHOR
56
+ s.email = EMAIL
57
+ s.homepage = HOMEPATH
58
+ s.executables = BIN_FILES
59
+ s.rubyforge_project = RUBYFORGE_PROJECT
60
+ s.bindir = "bin"
61
+ s.require_path = "lib"
62
+ s.autorequire = ""
63
+ s.test_files = Dir["test/test_*.rb"]
64
+
65
+ #s.add_dependency('')
66
+ #s.required_ruby_version = '>= 1.8.2'
67
+
68
+ s.files = %w(README.rdoc ChangeLog Rakefile) +
69
+ Dir.glob("{bin,doc,spec,test,lib,templates,generator,extras,website,script}/**/*") +
70
+ Dir.glob("ext/**/*.{h,c,rb}") +
71
+ Dir.glob("examples/**/*.rb") +
72
+ Dir.glob("tools/*.rb")
73
+
74
+ s.extensions = FileList["ext/**/extconf.rb"].to_a
75
+ end
76
+
77
+ Rake::GemPackageTask.new(spec) do |p|
78
+ p.need_tar = true
79
+ p.gem_spec = spec
80
+ end
81
+
82
+ task :install do
83
+ name = "#{NAME}-#{VERS}.gem"
84
+ sh %{rake package}
85
+ sh %{sudo gem install pkg/#{name}}
86
+ end
87
+
88
+ task :uninstall => [:clean] do
89
+ sh %{sudo gem uninstall #{NAME}}
90
+ end
91
+
92
+
93
+ Rake::RDocTask.new do |rdoc|
94
+ rdoc.rdoc_dir = 'html'
95
+ rdoc.options += RDOC_OPTS
96
+ rdoc.template = "resh"
97
+ #rdoc.template = "#{ENV['template']}.rb" if ENV['template']
98
+ if ENV['DOC_FILES']
99
+ rdoc.rdoc_files.include(ENV['DOC_FILES'].split(/,\s*/))
100
+ else
101
+ rdoc.rdoc_files.include('README.rdoc', 'ChangeLog')
102
+ rdoc.rdoc_files.include('lib/**/*.rb')
103
+ rdoc.rdoc_files.include('ext/**/*.c')
104
+ end
105
+ end
106
+
107
+ desc "Show information about the gem"
108
+ task :debug_gem do
109
+ puts spec.to_ruby
110
+ end
@@ -0,0 +1,45 @@
1
+ require 'osx/cocoa'
2
+
3
+ class ITunesObserver
4
+ VERSION = '0.0.1'
5
+
6
+ def initialize(&callback)
7
+ observer = Observer.alloc.init
8
+ observer.observe(&callback)
9
+ end
10
+
11
+ def run(stop_after = nil)
12
+ if stop_after
13
+ OSX::NSRunLoop.currentRunLoop.runUntilDate(Time.now + stop_after)
14
+ else
15
+ OSX::NSRunLoop.currentRunLoop.run
16
+ end
17
+ end
18
+
19
+ # based on http://blog.8-p.info/articles/2006/12/24/rubycocoa-skype-itunes
20
+ class Observer < OSX::NSObject
21
+ def onPlayerInfo(info)
22
+ result = Result.new(info.userInfo)
23
+ @callback.call(result)
24
+ end
25
+
26
+ def observe(&callback)
27
+ @callback = callback
28
+ center = OSX::NSDistributedNotificationCenter.defaultCenter
29
+ center.addObserver_selector_name_object_(self,
30
+ 'onPlayerInfo:',
31
+ 'com.apple.iTunes.playerInfo',
32
+ 'com.apple.iTunes.player')
33
+ end
34
+ end
35
+
36
+ class Result
37
+ def initialize(attributes)
38
+ @attributes = attributes
39
+ end
40
+
41
+ def [](key)
42
+ @attributes[key]
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,31 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+
3
+ require 'spec_helper'
4
+ require 'osx/cocoa'
5
+
6
+ include OSX
7
+ OSX.require_framework 'ScriptingBridge'
8
+
9
+ describe ITunesObserver do
10
+ before do
11
+ @itunes = SBApplication.applicationWithBundleIdentifier_("com.apple.iTunes")
12
+ raise 'iTunes should be running' unless @itunes.isRunning
13
+ @result = nil
14
+ @observer = ITunesObserver.new do |result|
15
+ @result = result
16
+ end
17
+
18
+ @itunes.stop
19
+ end
20
+
21
+ after do
22
+ @itunes.stop
23
+ end
24
+
25
+ it "should observe playing" do
26
+ @itunes.playpause
27
+ @observer.run(1)
28
+ @result.should_not be_nil
29
+ @result['Name'].should_not be_nil
30
+ end
31
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1,2 @@
1
+ -c
2
+ -fs
@@ -0,0 +1,10 @@
1
+ $:.unshift File.dirname(__FILE__) + '/../lib/'
2
+
3
+ require "itunes_observer"
4
+
5
+ module SpecHelper
6
+ end
7
+
8
+ Spec::Runner.configure do |config|
9
+ config.include SpecHelper
10
+ end
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: youpy-itunes-observer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - youpy
8
+ autorequire: ""
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-09-07 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: ""
17
+ email: youpy@buycheapviagraonlinenow.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README.rdoc
24
+ - ChangeLog
25
+ files:
26
+ - README.rdoc
27
+ - ChangeLog
28
+ - Rakefile
29
+ - spec/itunes_observer_spec.rb
30
+ - spec/spec.opts
31
+ - spec/spec_helper.rb
32
+ - lib/itunes_observer.rb
33
+ has_rdoc: true
34
+ homepage: http://itunes-observer.rubyforge.org
35
+ licenses:
36
+ post_install_message:
37
+ rdoc_options:
38
+ - --title
39
+ - itunes-observer documentation
40
+ - --charset
41
+ - utf-8
42
+ - --opname
43
+ - index.html
44
+ - --line-numbers
45
+ - --main
46
+ - README.rdoc
47
+ - --inline-source
48
+ - --exclude
49
+ - ^(examples|extras)/
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: "0"
57
+ version:
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: "0"
63
+ version:
64
+ requirements: []
65
+
66
+ rubyforge_project: itunes-observer
67
+ rubygems_version: 1.3.5
68
+ signing_key:
69
+ specification_version: 2
70
+ summary: ""
71
+ test_files: []
72
+