youpy-itunes-observer 0.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.
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
+