desktop 1.2.0 → 1.3.0.pre

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
2
  SHA1:
3
- metadata.gz: 0edc8a47310a6a3dc44c4c2387f1e3c6c3451cbe
4
- data.tar.gz: 4dda875071a5100581d8625cf586df8f9df1026e
3
+ metadata.gz: fd0ae66003e3f0c240521ae352379b38c4e164a9
4
+ data.tar.gz: aa6f4250cc10f900dd0d60f9465f02d064b48a7a
5
5
  SHA512:
6
- metadata.gz: 64e244b09625712a29d64b17e4d65c0563e316b8639461fe74015eae3d8b16c6a7a7333a848e11773f748ef02db7585c27c324308c9b826e0ee32738b612f621
7
- data.tar.gz: 3318654aa90393d1352f82ee296d0dc6d8e96885507433b7685cb64ac1e2aec4f258750de061d6a930943760d61bb73ca185b9b08558c2adab5b1f921f1c748a
6
+ metadata.gz: 0bdce2e34359a5d97478424b64366723cfdcddc73f2a93c36c8d9131153acde0393a3673f8262c5cff0c25d452740cd6d276055fda556c8ae438eb64a5fd09e1
7
+ data.tar.gz: d1399592272f691604cdbdc2fafcd0a98821c0bdfe1473be8a2f254a3d4ea0e096724d1ac3508bfea113a7518073215b2ab0c8f492b4bb163e24208c801fd6fb
data/Rakefile CHANGED
@@ -6,4 +6,9 @@ task :test do
6
6
  Dir.glob('./test/**/*_test.rb') { |f| require f }
7
7
  end
8
8
 
9
+ desc 'Open an irb session preloaded with this library'
10
+ task :console do
11
+ sh 'irb -rubygems -I lib -r desktop.rb'
12
+ end
13
+
9
14
  task default: :test
@@ -18,14 +18,14 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency "faraday", "~> 0.9"
22
- spec.add_dependency "sqlite3", "~> 1.3"
23
- spec.add_dependency "thor", "~> 0.19"
21
+ spec.add_dependency "faraday", "~> 0.9.1"
22
+ spec.add_dependency "sqlite3", "~> 1.3.10"
23
+ spec.add_dependency "thor", "~> 0.19.1"
24
24
 
25
- spec.add_development_dependency "bundler", "~> 1.7.1"
26
- spec.add_development_dependency "minitest", "~> 5.4"
27
- spec.add_development_dependency "pry", "~> 0.10.1"
28
- spec.add_development_dependency "rake", "~> 10.3"
29
- spec.add_development_dependency "vcr", "~> 2.9"
30
- spec.add_development_dependency "webmock", "~> 1.18"
25
+ spec.add_development_dependency "bundler", "~> 1.10.6"
26
+ spec.add_development_dependency "minitest", "~> 5.8.1"
27
+ spec.add_development_dependency "pry", "~> 0.10.2"
28
+ spec.add_development_dependency "rake", "~> 10.4.2"
29
+ spec.add_development_dependency "vcr", "~> 2.9.3"
30
+ spec.add_development_dependency "webmock", "~> 1.21.0"
31
31
  end
@@ -15,22 +15,14 @@ module Desktop
15
15
  > $ desktop set http://url.to/image.jpg
16
16
  LONGDESC
17
17
  option :desktop_image_path, :hide => true
18
- option :cached_image_path, :hide => true
19
18
  option :skip_reload, :type => :boolean, :hide => true
20
19
  option :skip_database, :type => :boolean, :hide => true
21
- def set(path, already_failed = false)
20
+ def set(path)
22
21
  osx = OSX.new(options)
23
22
  image = HTTP.uri?(path) ? WebImage.new(path) : LocalImage.new(path)
24
23
 
25
24
  begin
26
25
  osx.desktop_image = image
27
- rescue OSX::DesktopImagePermissionsError => e
28
- fail_with_permissions_error if already_failed
29
-
30
- print_permissions_message
31
- osx.update_desktop_image_permissions
32
- puts
33
- set path, true
34
26
  rescue OSX::DesktopImageMissingError
35
27
  fail_with_missing_image_error image
36
28
  end
@@ -43,41 +35,15 @@ module Desktop
43
35
 
44
36
  private
45
37
 
46
- def fail_with_permissions_error
47
- print "Sorry, but I was unable to change your desktop image. "
48
- puts "The permissions are still incorrect."
49
- puts
50
- puts "Did you type your password incorrectly?"
51
- puts
52
- print_issues_message
53
- abort
54
- end
55
-
56
38
  def fail_with_missing_image_error(image)
57
39
  puts "Sorry, but it looks like the image you provided does not exist:"
58
40
  puts
59
41
  puts image.path
60
42
  puts
61
- print_issues_message
62
- abort
63
- end
64
-
65
- def print_permissions_message
66
- print "It looks like this is the first time you've tried to change "
67
- puts "your desktop."
68
- puts
69
- print "We need to make your desktop image writable before we can "
70
- puts "change it. This only needs to be done once."
71
- puts
72
- puts "$ #{OSX.chown_command}"
73
- puts "$ #{OSX.chmod_command}"
74
- puts
75
- end
76
-
77
- def print_issues_message
78
43
  puts "Please create an issue if you think this is my fault:"
79
44
  puts
80
45
  puts "https://github.com/chrishunt/desktop/issues/new"
46
+ abort
81
47
  end
82
48
  end
83
49
  end
@@ -10,7 +10,13 @@ module Desktop
10
10
  end
11
11
 
12
12
  def clear_desktop_image
13
- clear_data if data?
13
+ clear if data?
14
+ end
15
+
16
+ def set_desktop_image(desktop_image_path)
17
+ create unless data?
18
+
19
+ ([desktop_image_path] * 100).each { |path| insert(path) }
14
20
  end
15
21
 
16
22
  def close
@@ -25,11 +31,20 @@ module Desktop
25
31
  ).any?
26
32
  end
27
33
 
28
- def clear_data
34
+ def insert(data)
35
+ connection.execute 'INSERT INTO data (value) VALUES (?)', data
36
+ end
37
+
38
+ def clear
29
39
  connection.execute 'DELETE FROM data'
30
40
  connection.execute 'VACUUM data'
31
41
  end
32
42
 
43
+ def create
44
+ connection.execute 'CREATE TABLE data (value)'
45
+ connection.execute 'CREATE INDEX data_index ON data (value)'
46
+ end
47
+
33
48
  def default_connection
34
49
  SQLite3::Database.new path
35
50
  end
@@ -2,102 +2,53 @@ require 'desktop/osx/database'
2
2
 
3
3
  module Desktop
4
4
  class OSX
5
- class DesktopImagePermissionsError < StandardError; end
6
5
  class DesktopImageMissingError < StandardError; end
7
6
 
8
7
  def self.desktop_image=(image)
9
8
  self.new.desktop_image = image
10
9
  end
11
10
 
12
- def self.update_desktop_image_permissions
13
- self.new.update_desktop_image_permissions
14
- end
15
-
16
- def self.chown_command
17
- self.new.chown_command
18
- end
19
-
20
- def self.chmod_command
21
- self.new.chmod_command
22
- end
23
-
24
11
  def initialize(options = nil)
25
12
  options ||= {}
26
13
  @skip_reload = options[:skip_reload]
27
14
  @skip_database = options[:skip_database]
28
15
  @desktop_image_path = \
29
16
  options[:desktop_image_path] || default_desktop_image_path
30
- @cached_image_path = \
31
- options[:cached_image_path] || default_cached_image_path
32
17
  end
33
18
 
34
19
  def desktop_image=(image)
35
- write_default_desktop image
36
- clear_custom_desktop_image unless skip_database
37
- touch_desktop_image
38
- remove_cached_image
20
+ write_desktop image
21
+ save_image_path_in_database unless skip_database
39
22
  reload_desktop unless skip_reload
40
- rescue Errno::EACCES => e
41
- raise DesktopImagePermissionsError.new(e)
42
23
  rescue Errno::ENOENT => e
43
24
  raise DesktopImageMissingError.new(e)
44
25
  end
45
26
 
46
- def update_desktop_image_permissions
47
- system(chown_command) && system(chmod_command)
48
- end
49
-
50
- def chown_command
51
- [' -h ', ' '].map do |option|
52
- "sudo chown#{option}$('whoami'):staff #{desktop_image_path}"
53
- end.join(" && ")
54
- end
55
-
56
- def chmod_command
57
- [' -h ', ' '].map do |option|
58
- "sudo chmod#{option}664 #{desktop_image_path}"
59
- end.join(" && ")
60
- end
61
-
62
27
  private
63
28
 
64
29
  attr_reader :desktop_image_path,
65
- :cached_image_path,
66
30
  :skip_reload,
67
31
  :skip_database
68
32
 
69
- def write_default_desktop(image)
33
+ def write_desktop(image)
70
34
  File.open(desktop_image_path, 'w') do |desktop|
71
35
  desktop.write image.data
72
36
  end
73
37
  end
74
38
 
75
- def clear_custom_desktop_image
39
+ def save_image_path_in_database
76
40
  db = Database.new
77
41
  db.clear_desktop_image
42
+ db.set_desktop_image desktop_image_path
78
43
  db.close
79
44
  end
80
45
 
81
- def touch_desktop_image
82
- unless system("touch -h #{desktop_image_path} 2>/dev/null")
83
- raise Errno::EACCES
84
- end
85
- end
86
-
87
- def remove_cached_image
88
- system "rm #{cached_image_path} 2>/dev/null"
89
- end
90
-
91
46
  def reload_desktop
92
47
  system 'killall Dock'
93
48
  end
94
49
 
95
- def default_cached_image_path
96
- '/Library/Caches/com.apple.desktop.admin.png'
97
- end
98
-
99
50
  def default_desktop_image_path
100
- '/System/Library/CoreServices/DefaultDesktop.jpg'
51
+ File.expand_path "~/Library/Application Support/desktop-gem-wallpaper.jpg"
101
52
  end
102
53
  end
103
54
  end
@@ -1,3 +1,3 @@
1
1
  module Desktop
2
- VERSION = '1.2.0'
2
+ VERSION = '1.3.0.pre'
3
3
  end
@@ -8,37 +8,31 @@ module Desktop
8
8
  desktop.write 'Default content'
9
9
  desktop.rewind
10
10
 
11
- cached = Tempfile.new(%w[cached .jpg])
12
- cached.write 'Cached content'
13
- cached.rewind
14
-
15
11
  image = Tempfile.new(%w[image .jpg])
16
12
  image.write 'New content'
17
13
  image.rewind
18
14
 
19
15
  defaults = [
20
16
  "--desktop-image-path=#{desktop.path}",
21
- "--cached-image-path=#{cached.path}",
22
17
  "--skip-reload",
23
18
  "--skip-database"
24
19
  ]
25
20
 
26
- yield desktop, cached, image, defaults
21
+ yield desktop, image, defaults
27
22
  ensure
28
23
  desktop.unlink
29
- cached.unlink
30
24
  image.unlink
31
25
  end
32
26
 
33
27
  it 'sets the desktop when a local image path is provided' do
34
- with_defaults do |desktop, _, image, defaults|
28
+ with_defaults do |desktop, image, defaults|
35
29
  CLI.start ['set', image.path] + defaults
36
30
  assert_equal File.read(desktop), File.read(image)
37
31
  end
38
32
  end
39
33
 
40
34
  it 'sets the desktop when a web url is provided' do
41
- with_defaults do |desktop, _, _, defaults|
35
+ with_defaults do |desktop, _, defaults|
42
36
  VCR.use_cassette('web_image_data') do
43
37
  CLI.start ['set', 'http://f.cl.ly/image.jpg'] + defaults
44
38
  refute_equal 'Default content', File.read(desktop)
@@ -5,14 +5,16 @@ module Desktop
5
5
  describe OSX::Database do
6
6
  def with_connection
7
7
  connection = SQLite3::Database.new ':memory:'
8
- yield connection
8
+ desktop_image = Tempfile.new(%w[desktop .jpg])
9
+ yield connection, desktop_image.path
9
10
  ensure
11
+ desktop_image.unlink
10
12
  connection.close
11
13
  end
12
14
 
13
15
  describe '#clear_desktop_image' do
14
16
  it 'clears contents of data table' do
15
- with_connection do |connection|
17
+ with_connection do |connection, _|
16
18
  connection.execute("CREATE TABLE data (FileName STRING)")
17
19
  connection.execute("INSERT INTO data VALUES ('mydesktop.png')")
18
20
 
@@ -25,7 +27,7 @@ module Desktop
25
27
  end
26
28
 
27
29
  it 'does not blow up if data table does not exist' do
28
- with_connection do |connection|
30
+ with_connection do |connection, _|
29
31
  assert_empty connection.execute(
30
32
  "SELECT name FROM sqlite_master WHERE type='table' AND name='data'"
31
33
  )
@@ -34,5 +36,30 @@ module Desktop
34
36
  end
35
37
  end
36
38
  end
39
+
40
+ describe '#set_desktop_image' do
41
+ it 'fills the data table with entries for the new desktop image' do
42
+ with_connection do |connection, desktop_image_path|
43
+ connection.execute("CREATE TABLE data (value)")
44
+
45
+ assert_empty connection.execute("SELECT * FROM data")
46
+
47
+ OSX::Database.new(connection).set_desktop_image(desktop_image_path)
48
+
49
+ assert_equal [[desktop_image_path]] * 100,
50
+ connection.execute("SELECT * FROM data")
51
+ end
52
+ end
53
+
54
+ it 'does not blow up if data table does not exist' do
55
+ with_connection do |connection, desktop_image_path|
56
+ assert_empty connection.execute(
57
+ "SELECT name FROM sqlite_master WHERE type='table' AND name='data'"
58
+ )
59
+
60
+ OSX::Database.new(connection).set_desktop_image(desktop_image_path)
61
+ end
62
+ end
63
+ end
37
64
  end
38
65
  end
@@ -6,43 +6,23 @@ module Desktop
6
6
  describe OSX do
7
7
  def osx
8
8
  desktop = Tempfile.new(%w[desktop .jpg])
9
- cached = Tempfile.new(%w[cached .jpg])
10
9
  image = Tempfile.new(%w[image .jpg])
11
10
 
12
11
  osx = OSX.new(
13
12
  :desktop_image_path => desktop.path,
14
- :cached_image_path => cached.path,
15
13
  :skip_reload => true,
16
14
  :skip_database => true
17
15
  )
18
16
 
19
- yield osx, desktop, cached, image
17
+ yield osx, desktop, image
20
18
  ensure
21
19
  desktop.unlink
22
- cached.unlink
23
20
  image.unlink
24
21
  end
25
22
 
26
23
  describe '#desktop_image=' do
27
- it 'removes the cached desktop image' do
28
- osx do |osx, _, cached, image|
29
- osx.desktop_image = LocalImage.new(image)
30
- refute File.exists?(cached.path)
31
- end
32
- end
33
-
34
- it 'raises DesktopImagePermissionsError when desktop is readonly' do
35
- osx do |osx, desktop, _, image|
36
- FileUtils.chmod 'a-w', desktop
37
-
38
- assert_raises OSX::DesktopImagePermissionsError do
39
- osx.desktop_image = LocalImage.new(image)
40
- end
41
- end
42
- end
43
-
44
24
  it 'raises DesktopImageMissingError when new image is missing' do
45
- osx do |osx, _, _, _|
25
+ osx do |osx, _, _|
46
26
  assert_raises OSX::DesktopImageMissingError do
47
27
  osx.desktop_image = LocalImage.new('/invalid/image/path.jpg')
48
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: desktop
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Hunt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-23 00:00:00.000000000 Z
11
+ date: 2015-10-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -16,126 +16,126 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.9'
19
+ version: 0.9.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.9'
26
+ version: 0.9.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: sqlite3
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.3'
33
+ version: 1.3.10
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.3'
40
+ version: 1.3.10
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: thor
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0.19'
47
+ version: 0.19.1
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0.19'
54
+ version: 0.19.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 1.7.1
61
+ version: 1.10.6
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 1.7.1
68
+ version: 1.10.6
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: minitest
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '5.4'
75
+ version: 5.8.1
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '5.4'
82
+ version: 5.8.1
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: pry
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 0.10.1
89
+ version: 0.10.2
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 0.10.1
96
+ version: 0.10.2
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rake
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '10.3'
103
+ version: 10.4.2
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '10.3'
110
+ version: 10.4.2
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: vcr
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '2.9'
117
+ version: 2.9.3
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '2.9'
124
+ version: 2.9.3
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: webmock
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: '1.18'
131
+ version: 1.21.0
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: '1.18'
138
+ version: 1.21.0
139
139
  description: A decent way to change your desktop image
140
140
  email:
141
141
  - c@chrishunt.co
@@ -190,12 +190,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
190
190
  version: '0'
191
191
  required_rubygems_version: !ruby/object:Gem::Requirement
192
192
  requirements:
193
- - - ">="
193
+ - - ">"
194
194
  - !ruby/object:Gem::Version
195
- version: '0'
195
+ version: 1.3.1
196
196
  requirements: []
197
197
  rubyforge_project:
198
- rubygems_version: 2.2.2
198
+ rubygems_version: 2.2.3
199
199
  signing_key:
200
200
  specification_version: 4
201
201
  summary: A decent way to change your desktop image