maid 0.6.1 → 0.7.0.alpha.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 CHANGED
@@ -1,3 +1,10 @@
1
+ maid (0.7.0) unstable; urgency=low
2
+
3
+ * Add dependencies: "exifr", "geocoder"
4
+ * Add "location_city" tool
5
+
6
+ -- Benjamin Oakes <hello@benjaminoakes.com> TODO
7
+
1
8
  maid (0.6.1) stable; urgency=low
2
9
 
3
10
  * Brandon Pittman, Benjamin Oakes: Improve documentation. (Closes: #135)
data/lib/maid/tools.rb CHANGED
@@ -3,6 +3,8 @@ require 'find'
3
3
  require 'fileutils'
4
4
  require 'time'
5
5
 
6
+ require 'exifr'
7
+ require 'geocoder'
6
8
  require 'mime/types'
7
9
  require 'dimensions'
8
10
  require 'zip'
@@ -441,6 +443,21 @@ module Maid::Tools
441
443
  Dimensions.dimensions(path)
442
444
  end
443
445
 
446
+ # Determine the city of the given JPEG image.
447
+ #
448
+ # ## Examples
449
+ #
450
+ # loation_city('old_capitol.jpg') # => "Iowa City, IA, US"
451
+ def location_city(path)
452
+ case mime_type(path)
453
+ when 'image/jpeg'
454
+ gps = EXIFR::JPEG.new(path).gps
455
+ coordinates_string = [gps.latitude, gps.longitude]
456
+ location = Geocoder.search(coordinates_string).first
457
+ [location.city, location.province, location.country_code].join(', ')
458
+ end
459
+ end
460
+
444
461
  # [Mac OS X] Use Spotlight metadata to determine audio length.
445
462
  #
446
463
  # ## Examples
data/lib/maid/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Maid
2
- VERSION = '0.6.1'
2
+ VERSION = '0.7.0.alpha.1'
3
3
  SUMMARY = 'Be lazy. Let Maid clean up after you, based on rules you define. Think of it as "Hazel for hackers".'
4
4
  end
data/maid.gemspec CHANGED
@@ -27,6 +27,8 @@ Gem::Specification.new do |s|
27
27
  s.add_dependency('xdg', '~> 2.2.3') # previous versions had bugs
28
28
  s.add_dependency('listen', '~> 2.8.0')
29
29
  s.add_dependency('rufus-scheduler', '~> 3.0.6')
30
+ s.add_dependency('exifr', '~> 1.2.0')
31
+ s.add_dependency('geocoder', '~> 1.2.0')
30
32
 
31
33
  # TODO: use one of these two gems instead of `mdfind`. **But** They have to work on Linux as well.
32
34
  #
@@ -1,5 +1,7 @@
1
1
  require 'dimensions'
2
+ require 'exifr'
2
3
  require 'logger'
4
+ require 'geocoder'
3
5
  require 'mime/types'
4
6
  require 'rbconfig'
5
7
  require 'stringio'
@@ -81,7 +83,21 @@ describe 'Dependency expectations' do
81
83
 
82
84
  describe Dimensions do
83
85
  it 'returns dimensions as an array' do
84
- expect(Dimensions.dimensions("#@file_fixtures_path/283x240.jpg")).to eq([283, 240])
86
+ expect(Dimensions.dimensions("#@file_fixtures_path/sydney.jpg")).to eq([100, 75])
87
+ end
88
+ end
89
+
90
+ describe EXIFR::JPEG do
91
+ it 'returns latitude and longitude' do
92
+ gps = EXIFR::JPEG.new("#@file_fixtures_path/sydney.jpg").gps
93
+ expect([gps.latitude, gps.longitude]).to eq([-33.85608611111111, 151.219925])
94
+ end
95
+ end
96
+
97
+ describe Geocoder do
98
+ it 'translates latitude and longitude into street addresses' do
99
+ city = Geocoder.search('-33.85608611111111,151.219925').map { |location| location.city }.uniq.compact
100
+ expect(city).to eq(['Sydney'])
85
101
  end
86
102
  end
87
103
  end
Binary file
@@ -644,6 +644,21 @@ module Maid
644
644
  end
645
645
  end
646
646
 
647
+ describe '#location_city' do
648
+ context 'given a JPEG image' do
649
+ it 'reports the known location' do
650
+ sydney_path = File.join(file_fixtures_path, 'sydney.jpg')
651
+ expect(@maid.location_city(sydney_path)).to eq('Sydney, New South Wales, AU')
652
+ end
653
+ end
654
+
655
+ context 'given an unknown type' do
656
+ it 'returns nil' do
657
+ expect(@maid.location_city(unknown_path)).to be_nil
658
+ end
659
+ end
660
+ end
661
+
647
662
  describe '#mime_type' do
648
663
  context 'given a JPEG image' do
649
664
  it 'reports "image/jpeg"' do
@@ -678,8 +693,8 @@ module Maid
678
693
  matches = @maid.where_content_type(@maid.dir(file_fixtures_glob), 'image')
679
694
 
680
695
  expect(matches.length).to eq(2)
681
- expect(matches.first).to end_with('spec/fixtures/files/283x240.jpg')
682
- expect(matches.last).to end_with('spec/fixtures/files/ruby.jpg')
696
+ expect(matches.first).to end_with('spec/fixtures/files/ruby.jpg')
697
+ expect(matches.last).to end_with('spec/fixtures/files/sydney.jpg')
683
698
  end
684
699
  end
685
700
  end
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: maid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
5
- prerelease:
4
+ version: 0.7.0.alpha.1
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Benjamin Oakes
@@ -13,7 +13,7 @@ date: 2015-01-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: escape
16
- requirement: &19671720 !ruby/object:Gem::Requirement
16
+ requirement: &21482480 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -24,10 +24,10 @@ dependencies:
24
24
  version: 0.1.0
25
25
  type: :runtime
26
26
  prerelease: false
27
- version_requirements: *19671720
27
+ version_requirements: *21482480
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: thor
30
- requirement: &19670980 !ruby/object:Gem::Requirement
30
+ requirement: &21481740 !ruby/object:Gem::Requirement
31
31
  none: false
32
32
  requirements:
33
33
  - - ! '>='
@@ -38,10 +38,10 @@ dependencies:
38
38
  version: 1.0.0
39
39
  type: :runtime
40
40
  prerelease: false
41
- version_requirements: *19670980
41
+ version_requirements: *21481740
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: deprecated
44
- requirement: &19670260 !ruby/object:Gem::Requirement
44
+ requirement: &21481020 !ruby/object:Gem::Requirement
45
45
  none: false
46
46
  requirements:
47
47
  - - ~>
@@ -49,10 +49,10 @@ dependencies:
49
49
  version: 3.0.0
50
50
  type: :runtime
51
51
  prerelease: false
52
- version_requirements: *19670260
52
+ version_requirements: *21481020
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: dimensions
55
- requirement: &19669780 !ruby/object:Gem::Requirement
55
+ requirement: &21480540 !ruby/object:Gem::Requirement
56
56
  none: false
57
57
  requirements:
58
58
  - - ! '>='
@@ -63,10 +63,10 @@ dependencies:
63
63
  version: '2.0'
64
64
  type: :runtime
65
65
  prerelease: false
66
- version_requirements: *19669780
66
+ version_requirements: *21480540
67
67
  - !ruby/object:Gem::Dependency
68
68
  name: mime-types
69
- requirement: &19669060 !ruby/object:Gem::Requirement
69
+ requirement: &21479820 !ruby/object:Gem::Requirement
70
70
  none: false
71
71
  requirements:
72
72
  - - ~>
@@ -74,10 +74,10 @@ dependencies:
74
74
  version: '2.0'
75
75
  type: :runtime
76
76
  prerelease: false
77
- version_requirements: *19669060
77
+ version_requirements: *21479820
78
78
  - !ruby/object:Gem::Dependency
79
79
  name: rubyzip
80
- requirement: &19668600 !ruby/object:Gem::Requirement
80
+ requirement: &21479360 !ruby/object:Gem::Requirement
81
81
  none: false
82
82
  requirements:
83
83
  - - ~>
@@ -85,10 +85,10 @@ dependencies:
85
85
  version: 1.1.0
86
86
  type: :runtime
87
87
  prerelease: false
88
- version_requirements: *19668600
88
+ version_requirements: *21479360
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: xdg
91
- requirement: &19668140 !ruby/object:Gem::Requirement
91
+ requirement: &21478900 !ruby/object:Gem::Requirement
92
92
  none: false
93
93
  requirements:
94
94
  - - ~>
@@ -96,10 +96,10 @@ dependencies:
96
96
  version: 2.2.3
97
97
  type: :runtime
98
98
  prerelease: false
99
- version_requirements: *19668140
99
+ version_requirements: *21478900
100
100
  - !ruby/object:Gem::Dependency
101
101
  name: listen
102
- requirement: &19667680 !ruby/object:Gem::Requirement
102
+ requirement: &20897480 !ruby/object:Gem::Requirement
103
103
  none: false
104
104
  requirements:
105
105
  - - ~>
@@ -107,10 +107,10 @@ dependencies:
107
107
  version: 2.8.0
108
108
  type: :runtime
109
109
  prerelease: false
110
- version_requirements: *19667680
110
+ version_requirements: *20897480
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rufus-scheduler
113
- requirement: &19667220 !ruby/object:Gem::Requirement
113
+ requirement: &20895860 !ruby/object:Gem::Requirement
114
114
  none: false
115
115
  requirements:
116
116
  - - ~>
@@ -118,10 +118,32 @@ dependencies:
118
118
  version: 3.0.6
119
119
  type: :runtime
120
120
  prerelease: false
121
- version_requirements: *19667220
121
+ version_requirements: *20895860
122
+ - !ruby/object:Gem::Dependency
123
+ name: exifr
124
+ requirement: &20894420 !ruby/object:Gem::Requirement
125
+ none: false
126
+ requirements:
127
+ - - ~>
128
+ - !ruby/object:Gem::Version
129
+ version: 1.2.0
130
+ type: :runtime
131
+ prerelease: false
132
+ version_requirements: *20894420
133
+ - !ruby/object:Gem::Dependency
134
+ name: geocoder
135
+ requirement: &20192760 !ruby/object:Gem::Requirement
136
+ none: false
137
+ requirements:
138
+ - - ~>
139
+ - !ruby/object:Gem::Version
140
+ version: 1.2.0
141
+ type: :runtime
142
+ prerelease: false
143
+ version_requirements: *20192760
122
144
  - !ruby/object:Gem::Dependency
123
145
  name: fakefs
124
- requirement: &19666760 !ruby/object:Gem::Requirement
146
+ requirement: &20192300 !ruby/object:Gem::Requirement
125
147
  none: false
126
148
  requirements:
127
149
  - - ~>
@@ -129,10 +151,10 @@ dependencies:
129
151
  version: 0.4.2
130
152
  type: :development
131
153
  prerelease: false
132
- version_requirements: *19666760
154
+ version_requirements: *20192300
133
155
  - !ruby/object:Gem::Dependency
134
156
  name: guard
135
- requirement: &19666300 !ruby/object:Gem::Requirement
157
+ requirement: &20191840 !ruby/object:Gem::Requirement
136
158
  none: false
137
159
  requirements:
138
160
  - - ~>
@@ -140,10 +162,10 @@ dependencies:
140
162
  version: 2.10.4
141
163
  type: :development
142
164
  prerelease: false
143
- version_requirements: *19666300
165
+ version_requirements: *20191840
144
166
  - !ruby/object:Gem::Dependency
145
167
  name: guard-rspec
146
- requirement: &19665840 !ruby/object:Gem::Requirement
168
+ requirement: &20191380 !ruby/object:Gem::Requirement
147
169
  none: false
148
170
  requirements:
149
171
  - - ~>
@@ -151,10 +173,10 @@ dependencies:
151
173
  version: 4.5.0
152
174
  type: :development
153
175
  prerelease: false
154
- version_requirements: *19665840
176
+ version_requirements: *20191380
155
177
  - !ruby/object:Gem::Dependency
156
178
  name: rake
157
- requirement: &19665380 !ruby/object:Gem::Requirement
179
+ requirement: &20190920 !ruby/object:Gem::Requirement
158
180
  none: false
159
181
  requirements:
160
182
  - - ~>
@@ -162,10 +184,10 @@ dependencies:
162
184
  version: 10.4.2
163
185
  type: :development
164
186
  prerelease: false
165
- version_requirements: *19665380
187
+ version_requirements: *20190920
166
188
  - !ruby/object:Gem::Dependency
167
189
  name: redcarpet
168
- requirement: &20457720 !ruby/object:Gem::Requirement
190
+ requirement: &20190460 !ruby/object:Gem::Requirement
169
191
  none: false
170
192
  requirements:
171
193
  - - ~>
@@ -173,10 +195,10 @@ dependencies:
173
195
  version: 3.2.2
174
196
  type: :development
175
197
  prerelease: false
176
- version_requirements: *20457720
198
+ version_requirements: *20190460
177
199
  - !ruby/object:Gem::Dependency
178
200
  name: rspec
179
- requirement: &20454880 !ruby/object:Gem::Requirement
201
+ requirement: &20190000 !ruby/object:Gem::Requirement
180
202
  none: false
181
203
  requirements:
182
204
  - - ~>
@@ -184,10 +206,10 @@ dependencies:
184
206
  version: 3.1.0
185
207
  type: :development
186
208
  prerelease: false
187
- version_requirements: *20454880
209
+ version_requirements: *20190000
188
210
  - !ruby/object:Gem::Dependency
189
211
  name: timecop
190
- requirement: &19720240 !ruby/object:Gem::Requirement
212
+ requirement: &20189540 !ruby/object:Gem::Requirement
191
213
  none: false
192
214
  requirements:
193
215
  - - ~>
@@ -195,10 +217,10 @@ dependencies:
195
217
  version: 0.7.0
196
218
  type: :development
197
219
  prerelease: false
198
- version_requirements: *19720240
220
+ version_requirements: *20189540
199
221
  - !ruby/object:Gem::Dependency
200
222
  name: yard
201
- requirement: &19719780 !ruby/object:Gem::Requirement
223
+ requirement: &20189080 !ruby/object:Gem::Requirement
202
224
  none: false
203
225
  requirements:
204
226
  - - ~>
@@ -206,10 +228,10 @@ dependencies:
206
228
  version: 0.8.4
207
229
  type: :development
208
230
  prerelease: false
209
- version_requirements: *19719780
231
+ version_requirements: *20189080
210
232
  - !ruby/object:Gem::Dependency
211
233
  name: rb-inotify
212
- requirement: &19719320 !ruby/object:Gem::Requirement
234
+ requirement: &20188620 !ruby/object:Gem::Requirement
213
235
  none: false
214
236
  requirements:
215
237
  - - ~>
@@ -217,10 +239,10 @@ dependencies:
217
239
  version: 0.9.0
218
240
  type: :development
219
241
  prerelease: false
220
- version_requirements: *19719320
242
+ version_requirements: *20188620
221
243
  - !ruby/object:Gem::Dependency
222
244
  name: rb-fsevent
223
- requirement: &19718860 !ruby/object:Gem::Requirement
245
+ requirement: &20188160 !ruby/object:Gem::Requirement
224
246
  none: false
225
247
  requirements:
226
248
  - - ~>
@@ -228,7 +250,7 @@ dependencies:
228
250
  version: 0.9.2
229
251
  type: :development
230
252
  prerelease: false
231
- version_requirements: *19718860
253
+ version_requirements: *20188160
232
254
  description: Be lazy. Let Maid clean up after you, based on rules you define. Think
233
255
  of it as "Hazel for hackers".
234
256
  email:
@@ -281,10 +303,10 @@ files:
281
303
  - script/vagrant-test-all
282
304
  - spec/dependency_spec.rb
283
305
  - spec/fixtures/files/1.zip
284
- - spec/fixtures/files/283x240.jpg
285
306
  - spec/fixtures/files/bar.zip
286
307
  - spec/fixtures/files/foo.zip
287
308
  - spec/fixtures/files/ruby.jpg
309
+ - spec/fixtures/files/sydney.jpg
288
310
  - spec/fixtures/files/unknown.foo
289
311
  - ! "spec/fixtures/files/ã\x81\x95.zip"
290
312
  - spec/lib/maid/app_spec.rb
@@ -315,9 +337,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
315
337
  required_rubygems_version: !ruby/object:Gem::Requirement
316
338
  none: false
317
339
  requirements:
318
- - - ! '>='
340
+ - - ! '>'
319
341
  - !ruby/object:Gem::Version
320
- version: '0'
342
+ version: 1.3.1
321
343
  requirements: []
322
344
  rubyforge_project: maid
323
345
  rubygems_version: 1.8.11
Binary file