alfred-workflow 1.4.0 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 8b3c5fffe416e05c99f4baad880f92456cc10fd8
4
- data.tar.gz: 55a135c15ccf8448be4ffdd421537dfd05d6f6c9
5
2
  SHA512:
6
- metadata.gz: e82a150c2e4d388fbcbe4f60436777fb70091810f4c7188592bcf73f62cf3e391f58565ba7584ed466ef60c1067579cda5dd1c9f5667dd305d4c9690a3b959e5
7
- data.tar.gz: 1d23f9683615bcc24164e2e039eb719ec56cba0348d3ab2d50dfe8161aa02552c3f352cb87baf5dc6b72fbb25517c0861aab131b93ef7bdfb440bab61fd97b57
3
+ data.tar.gz: 23623140489e12203cca05b87d40364423b37f3e01ade13d1df9909566feaf9a5304e1e3d5803228787791114ba1402f0e8b5654e5e4cb4f9ea14f59059fe844
4
+ metadata.gz: 32d00acc1222bc5d87b257a8304e3055a3e2b87bfa1ed6bb150cc8c6ad5e48c51ae92bae30625cf7c59c90e3b87656b3fcb78d9580e568217ed2b3eabcbbfcc4
5
+ SHA1:
6
+ data.tar.gz: eefe1cd9415f97fa9130ec19d2fa22776a432ca4
7
+ metadata.gz: 51f3ad55e83b3a4e16f90ec9f956b0391bf8267c
data/README.md CHANGED
@@ -15,13 +15,13 @@ alfred-workflow is a ruby Gem helper for building [Alfred](http://www.alfredapp.
15
15
 
16
16
  * Use standard [bundler][gembundler] to easily package, manage, and update ruby gems in the workflow.
17
17
  * Friendly exception and debug output to the Mac OS X Console.
18
+ * Automate saving and loading cached feedback
18
19
  * Automate rescue feedback items to alfred when something goes wrong.
19
20
  * Functions to easily load and save user configuration (in YAML)
20
21
  * Functions for smart case query filter of feedback results.
21
22
  * Functions for finding the bundle ID, cache and storage paths, and query arguments.
22
23
  * Functions for reading and writing plist files.
23
24
  * Functions to simplify generating feedback XML for Alfred.
24
- * Functions to simplify saving and retrieving settings.
25
25
 
26
26
  ## SYNOPSIS:
27
27
 
@@ -81,6 +81,10 @@ module Alfred
81
81
  @setting ||= Setting.new(self)
82
82
  end
83
83
 
84
+ def with_cached_feedback(&blk)
85
+ @feedback = CachedFeedback.new(self, &blk)
86
+ end
87
+
84
88
  def feedback
85
89
  raise NoBundleIDError unless bundle_id
86
90
  @feedback ||= Feedback.new
@@ -115,7 +119,6 @@ module Alfred
115
119
  end
116
120
 
117
121
 
118
-
119
122
  def rescue_feedback(opts = {})
120
123
  default_opts = {
121
124
  :title => "Failed Query!",
@@ -33,15 +33,45 @@ module Alfred
33
33
 
34
34
 
35
35
  # serialize
36
- def dump(fbfile)
37
- File.open(fbfile, "wb") { |f| Marshal.dump(self, f) }
36
+ def dump(to_file)
37
+ File.open(to_file, "wb") { |f| Marshal.dump(self, f) }
38
38
  end
39
39
 
40
40
  class << self
41
- def load(fbfile)
42
- File.open(fbfile, "rb") { |f| Marshal.load(f) }
41
+ def load(from_file)
42
+ File.open(from_file, "rb") { |f| Marshal.load(f) }
43
43
  end
44
44
  end
45
45
  end
46
46
 
47
+
48
+ class CachedFeedback < Feedback
49
+ def initialize(alfred, &blk)
50
+ super()
51
+ @core = alfred
52
+
53
+ instance_eval(&blk) if block_given?
54
+ end
55
+
56
+ def use_cache_file(opts = {})
57
+ @cf_file = opts[:file] if opts[:file]
58
+ @cf_file_valid_time = opts[:expire] if opts[:expire]
59
+ end
60
+
61
+ def cache_file
62
+ @cf_file ||= File.join(@core.volatile_storage_path, "cached_feedback")
63
+ end
64
+ def get_cached_feedback
65
+ return nil unless File.exist?(cache_file)
66
+ if @cf_file_valid_time
67
+ return nil if Time.now - File.ctime(cache_file) > @cf_file_valid_time
68
+ end
69
+ Feedback.load(@cf_file)
70
+ end
71
+
72
+ def put_cached_feedback
73
+ dump(cache_file)
74
+ end
75
+ end
76
+
47
77
  end
@@ -1,3 +1,3 @@
1
1
  module Alfred
2
- VERSION = '1.4.0'
2
+ VERSION = '1.5.0'
3
3
  end
@@ -8,6 +8,7 @@ describe "Feedback" do
8
8
  @item_elements = %w{title subtitle icon}
9
9
  @item_attributes = %w{uid arg autocomplete}
10
10
  end
11
+
11
12
  it "should create a basic XML response" do
12
13
  @feedback.add_item(:uid => "uid" ,
13
14
  :arg => "arg" ,
@@ -26,19 +27,7 @@ describe "Feedback" do
26
27
  </items>
27
28
  END
28
29
 
29
- expected_xml = REXML::Document.new(xml_data)
30
- feedback_xml = REXML::Document.new(@feedback.to_xml)
31
-
32
- expected_item = expected_xml.get_elements('/items/item')[0]
33
- feedback_item = feedback_xml.get_elements('/items/item')[0]
34
-
35
- @item_elements.each { |i|
36
- expected_item.elements[i].text.should == feedback_item.elements[i].text
37
- }
38
- @item_attributes.each { |i|
39
- expected_item.attributes[i].should == feedback_item.attributes[i]
40
- }
41
-
30
+ compare_xml(xml_data, @feedback.to_xml).should == true
42
31
  end
43
32
 
44
33
  end
@@ -1,6 +1,9 @@
1
1
  $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
2
2
 
3
3
  require "rspec"
4
+ require 'awesome_print'
5
+ require 'zucker/debug'
6
+
4
7
  require "alfred"
5
8
 
6
9
  RSpec.configure do |c|
@@ -20,3 +23,27 @@ class String
20
23
  gsub(/^[ \t]{#{indent}}/, '')
21
24
  end
22
25
  end
26
+
27
+
28
+ def compare_xml(expected_xml_data, feedback_xml_data)
29
+ item_elements = %w{title subtitle icon}
30
+ item_attributes = %w{uid arg autocomplete}
31
+
32
+ expected_xml = REXML::Document.new(expected_xml_data)
33
+ feedback_xml = REXML::Document.new(feedback_xml_data)
34
+
35
+ expected_item = expected_xml.get_elements('/items/item')[0]
36
+ feedback_item = feedback_xml.get_elements('/items/item')[0]
37
+
38
+ item_elements.each { |i|
39
+ unless expected_item.elements[i].text.eql? feedback_item.elements[i].text
40
+ return false
41
+ end
42
+ }
43
+ item_attributes.each { |i|
44
+ unless expected_item.attributes[i].eql? feedback_item.attributes[i]
45
+ return false
46
+ end
47
+ }
48
+ true
49
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alfred-workflow
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zhao Cai