maid 0.6.1 → 0.7.0.alpha.1

Sign up to get free protection for your applications and to get access to all the features.
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