alfred-workflow 1.11.3 → 2.0.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.
@@ -0,0 +1,63 @@
1
+ module Alfred
2
+ module OSX
3
+
4
+ class << self
5
+
6
+ def version
7
+ @version ||= get_osx_version
8
+ end
9
+
10
+ def version_number
11
+ "#{version[:major]}.#{version[:minor]}"
12
+ end
13
+
14
+ def notification_center?
15
+ version[:major] >= 10.8
16
+ end
17
+
18
+
19
+ def full_name
20
+ "Mac OS X " + version_number
21
+ end
22
+
23
+
24
+ def short_name
25
+ case version[:major]
26
+ when 10.4
27
+ short_name = "Tiger"
28
+ when 10.5
29
+ short_name = "Leopard"
30
+ when 10.6
31
+ short_name = "Snow Leopard"
32
+ when 10.7
33
+ short_name = "Lion"
34
+ when 10.8
35
+ short_name = "Mountain Lion"
36
+ when 10.9
37
+ short_name = "Mavericks"
38
+ end
39
+
40
+ return short_name
41
+ end
42
+
43
+
44
+ private
45
+
46
+ def get_osx_version
47
+ begin
48
+ version = %x{/usr/bin/sw_vers -productVersion}.chop
49
+ rescue Errno::ENOENT => e
50
+ raise Errno::ENOENT, "This computer is not running Mac OS X becasue #{e.message}"
51
+ end
52
+
53
+ segments = version.split('.')[0,3].map!{|p| p.to_i}
54
+ {
55
+ :major => "#{segments[0]}.#{segments[1]}".to_f,
56
+ :minor => segments[2],
57
+ }
58
+ end
59
+
60
+ end
61
+ end
62
+ end
63
+
@@ -1,101 +1,57 @@
1
1
  require 'yaml'
2
- require 'plist'
3
2
 
4
3
  module Alfred
5
4
 
6
- class Setting
7
- attr_accessor :settings
5
+ class Setting < ::Hash
6
+ attr_accessor :backend_file
7
+ attr_reader :format
8
8
 
9
- def initialize(alfred, &blk)
9
+ def initialize(alfred, &block)
10
+ super()
10
11
  @core = alfred
11
- instance_eval(&blk) if block_given?
12
- raise InvalidFormat, "#{format} is not suported." unless validate_format
13
- @backend = get_format_class(format).new(@core, setting_file)
14
- end
15
-
16
- def use_setting_file(opts = {})
17
- @setting_file = opts[:file] if opts[:file]
18
- @format = opts[:format] ? opts[:format] : "yaml"
19
- end
20
12
 
13
+ instance_eval(&block) if block_given?
21
14
 
22
- def validate_format
23
- ['yaml', 'plist'].include?(format)
24
- end
25
-
26
- def format
27
15
  @format ||= "yaml"
28
- end
16
+ @backend_file ||= File.join(@core.storage_path, "setting.#{@format}")
17
+
18
+ raise InvalidFormat, "#{format} is not suported." unless validate_format
29
19
 
30
- def setting_file
31
- @setting_file ||= File.join(@core.storage_path, "setting.#{@format}")
20
+ unless File.exist?(@backend_file)
21
+ self.merge!({:id => @core.bundle_id})
22
+ dump(:flush => true)
23
+ else
24
+ load
25
+ end
32
26
  end
33
27
 
34
- def get_format_class(format_class)
35
- Alfred::Setting.const_get("#{format.to_s.capitalize}End")
28
+ def validate_format
29
+ ['yaml'].include?(format)
36
30
  end
37
31
 
38
32
  def load
39
- @backend.send(:load)
33
+ send("load_from_#{format}".to_sym)
40
34
  end
41
35
 
42
- def dump(settings = nil, opts = {})
43
- @backend.send(:dump, settings, opts)
36
+ def dump(opts = {})
37
+ send("dump_to_#{format}".to_sym, opts)
44
38
  end
45
39
 
46
- class YamlEnd
47
- attr_reader :setting_file
48
- def initialize(alfred, file)
49
- @core = alfred
50
- @setting_file = file
51
- end
40
+ alias_method :close, :dump
52
41
 
53
- def load
54
- unless File.exist?(setting_file)
55
- @settings = {:id => @core.bundle_id}
56
- dump
57
- end
42
+ protected
58
43
 
59
- @settings = YAML::load( File.read(setting_file) )
60
- end
61
-
62
- def dump(settings = nil, opts = {})
63
- settings = @settings unless settings
64
-
65
- File.open(setting_file, "wb") { |f|
66
- YAML::dump(settings, f)
67
- f.flush if opts[:flush]
68
- }
69
- end
44
+ def load_from_yaml
45
+ self.merge!(YAML::load_file(@backend_file))
70
46
  end
71
47
 
72
- class PlistEnd
73
- attr_reader :setting_file
74
- def initialize(alfred, file)
75
- @core = alfred
76
- @setting_file = file
77
- end
78
-
79
- def load
80
- unless File.exist?(setting_file)
81
- @settings = {:id => @core.bundle_id}
82
- dump
83
- end
84
-
85
- @settings = Plist::parse_xml( File.read(setting_file) )
86
- end
87
-
88
- def dump(settings = nil, opts = {})
89
- settings = @settings unless settings
90
-
91
- File.open(setting_file, "wb") { |f|
92
- f.puts settings.to_plist
93
- f.flush if opts[:flush]
94
- }
95
- end
48
+ def dump_to_yaml(opts = {})
49
+ File.open(@backend_file, File::WRONLY|File::TRUNC|File::CREAT) { |f|
50
+ YAML::dump(self, f)
51
+ f.flush if opts[:flush]
52
+ }
96
53
  end
97
54
 
98
-
99
55
  end
100
56
  end
101
57
 
@@ -1,6 +1,7 @@
1
1
  require 'logger'
2
2
  require 'fileutils'
3
3
 
4
+
4
5
  module Alfred
5
6
 
6
7
  class LogUI < ::Logger
@@ -1,3 +1,7 @@
1
+ require 'uri'
2
+ require 'terminal-notifier'
3
+ require 'alfred/osx'
4
+
1
5
  class String
2
6
  def strip_heredoc
3
7
  indent = scan(/^[ \t]*(?=\S)/).min.size || 0
@@ -18,23 +22,67 @@ module Alfred
18
22
  def make_webloc(name, url, folder=nil, comment = '')
19
23
  date = Time.now.strftime("%m-%d-%Y %I:%M%p")
20
24
  folder = Alfred.workflow_folder unless folder
21
- folder, name, url, comment = [folder, name, url, comment].map do |t|
25
+ folder, name, url, comment = [folder, name, url, comment].map do |t|
22
26
  escape_applescript(t)
23
27
  end
24
28
 
25
29
  return %x{
26
30
  osascript << __APPLESCRIPT__
27
31
  tell application "Finder"
28
- set webloc to make new internet location file at (POSIX file "#{folder}") ¬
29
- to "#{url}" with properties ¬
32
+ set webloc to make new internet location file at (POSIX file "#{folder}") ¬
33
+ to "#{url}" with properties ¬
30
34
  {name:"#{name}",creation date:(AppleScript's date "#{date}"), ¬
31
35
  comment:"#{comment}"}
32
36
  end tell
33
37
  return POSIX path of (webloc as string)
34
- __APPLESCRIPT__}.strip_heredoc
38
+ __APPLESCRIPT__}
35
39
  end
40
+
41
+
42
+ def open_url(url)
43
+ uri = URI.parse(url)
44
+ %x{open #{uri.to_s}}
45
+ end
46
+
47
+ def reveal_in_finder(path)
48
+ raise InvalidArgument, "#{path} does not exist." unless File.exist? path
49
+ %x{osascript <<__APPLESCRIPT__
50
+ tell application "Finder"
51
+ try
52
+ reveal POSIX file "#{path}"
53
+ activate
54
+ on error err_msg number err_num
55
+ return err_msg
56
+ end try
57
+ end tell
58
+ __APPLESCRIPT__}
59
+ end
60
+
61
+
62
+ def search_command(query = '')
63
+ %Q{osascript <<__APPLESCRIPT__
64
+ tell application "Alfred 2"
65
+ search "#{escape_applescript(query)}"
66
+ end tell
67
+ __APPLESCRIPT__}
68
+ end
69
+
70
+
71
+ def notify(query, message, opts = {})
72
+ if Alfred::OSX.notification_center?
73
+ notifier_options = {
74
+ :title => 'Alfred Notification' ,
75
+ :sound => 'default' ,
76
+ :execute => search_command(query) ,
77
+ }.merge!(opts)
78
+ p notifier_options
79
+ TerminalNotifier.notify(message, notifier_options)
80
+ else
81
+ system search_command(query)
82
+ end
83
+ end
84
+
36
85
  end
37
86
  end
38
87
 
39
88
  end
40
-
@@ -1,3 +1,3 @@
1
1
  module Alfred
2
- VERSION = '1.11.3'
2
+ VERSION = '2.0.0'
3
3
  end
@@ -6,7 +6,7 @@ describe "Feedback" do
6
6
  setup_workflow
7
7
 
8
8
  @alfred = Alfred::Core.new
9
- @feedback = Alfred::Feedback.new
9
+ @feedback = Alfred::Feedback.new(@alfred)
10
10
 
11
11
  @item_elements = %w{title subtitle icon}
12
12
  @item_attributes = %w{uid arg autocomplete}
@@ -67,15 +67,16 @@ describe "Feedback" do
67
67
  use_cache_file :expire => 10
68
68
  end
69
69
  fb = @alfred.feedback
70
- fb.cache_file.should == File.join(@alfred.volatile_storage_path, "cached_feedback")
70
+ fb.backend_file.should == File.join(@alfred.volatile_storage_path, "cached_feedback")
71
71
  end
72
72
 
73
73
  it "should set correct cache file" do
74
- @alfred.with_cached_feedback do
75
- use_cache_file :file => "cached_feedback"
74
+ alfred = Alfred::Core.new
75
+ alfred.with_cached_feedback do
76
+ use_cache_file :file => "new_cached_feedback"
76
77
  end
77
- fb = @alfred.feedback
78
- fb.cache_file.should == "cached_feedback"
78
+ fb = alfred.feedback
79
+ fb.backend_file.should == "new_cached_feedback"
79
80
  end
80
81
 
81
82
  context "With Valid Cached File" do
@@ -130,13 +131,12 @@ describe "Feedback" do
130
131
  end
131
132
 
132
133
  end
133
-
134
134
  end
135
135
 
136
136
  after :all do
137
137
  @alfred.with_cached_feedback
138
138
  fb = @alfred.feedback
139
- File.unlink(fb.cache_file)
139
+ Fil.unlink(fb.backend_file)
140
140
  reset_workflow
141
141
  end
142
142
 
@@ -1,69 +1,31 @@
1
1
  require "spec_helper"
2
2
 
3
- describe "Setting" do
3
+ describe "Setting with yaml as backend" do
4
4
  before :all do
5
5
  setup_workflow
6
6
  @alfred = Alfred::Core.new
7
7
  end
8
8
 
9
9
  it "should use yaml as defualt backend" do
10
- @setting = @alfred.setting
11
- @setting.format.should == "yaml"
10
+ @alfred.setting.format.should == "yaml"
12
11
  end
13
12
 
14
- context "with Yaml Backend" do
15
- before :all do
16
- @setting = @alfred.setting do
17
- use_setting_file :format => 'yaml'
18
- end
19
- end
20
- it "should correctly load settings" do
21
- settings = @setting.load
22
- settings[:id].should == "me.zhaowu.alfred-workflow-gem"
23
- end
24
-
25
- it "should correctly save settings" do
26
- settings = @setting.load
27
- settings[:language] = "Chinese"
28
- @setting.dump(settings, :flush => true)
29
-
30
- settings = @alfred.setting.load
31
- settings[:language].should == "Chinese"
32
- end
33
-
34
- after :all do
35
- File.unlink(@setting.setting_file)
36
- end
13
+ it "should correctly load settings" do
14
+ @alfred.setting[:id].should == "me.zhaowu.alfred-workflow-gem"
37
15
  end
38
16
 
39
- context "with Plist Backend" do
40
- before :all do
41
- @setting = @alfred.setting do
42
- use_setting_file :format => 'plist'
43
- end
44
- end
45
-
46
- it "should correctly load settings" do
47
- settings = @setting.load
48
- settings[:id].should == "me.zhaowu.alfred-workflow-gem"
49
- end
50
-
51
- it "should correctly save settings" do
52
- settings = @setting.load
53
- settings[:language] = "Chinese"
54
- @setting.dump(settings, :flush => true)
55
-
56
- settings = @alfred.setting.load
57
- settings[:language].should == "Chinese"
58
- end
59
-
60
- after :all do
61
- File.unlink(@setting.setting_file)
62
- end
17
+ it "should correctly save settings" do
18
+ @alfred.setting[:language] = "Chinese"
19
+ @alfred.setting.dump(:flush => true)
20
+
21
+ @alfred.setting.load
22
+ @alfred.setting[:language].should == "Chinese"
63
23
  end
64
24
 
25
+
65
26
  after :all do
66
27
  reset_workflow
28
+ File.unlink(@alfred.setting.backend_file)
67
29
  end
68
30
 
69
31
  end
@@ -71,4 +33,36 @@ end
71
33
 
72
34
 
73
35
 
36
+ # describe "Setting with plist as backend" do
37
+ # before :all do
38
+ # setup_workflow
39
+ # @alfred = Alfred::Core.new
40
+
41
+ # @alfred.setting do
42
+ # @format = 'plist'
43
+ # end
44
+ # end
45
+
46
+ # it "should correctly load settings" do
47
+ # @alfred.setting['id'].should == "me.zhaowu.alfred-workflow-gem"
48
+ # end
49
+
50
+ # it "should correctly save settings" do
51
+ # @alfred.setting['language'] = "English"
52
+ # @alfred.setting.dump(:flush => true)
53
+
54
+ # @alfred.setting['language'].should == "English"
55
+ # end
56
+
57
+
58
+ # after :all do
59
+ # reset_workflow
60
+ # File.unlink(@alfred.setting.backend_file)
61
+ # end
62
+
63
+ # end
64
+
65
+
66
+
67
+
74
68