maid 0.8.0.alpha.2 → 0.8.0.alpha.3
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/README.md +2 -0
- data/lib/maid/platform.rb +3 -0
- data/lib/maid/tools.rb +102 -95
- data/lib/maid/version.rb +1 -1
- data/lib/maid/watch.rb +6 -3
- data/spec/lib/maid/tools_spec.rb +32 -87
- metadata +44 -44
data/README.md
CHANGED
@@ -4,6 +4,8 @@
|
|
4
4
|
[](http://travis-ci.org/benjaminoakes/maid)
|
5
5
|
[](https://gemnasium.com/benjaminoakes/maid)
|
6
6
|
[](https://codeclimate.com/github/benjaminoakes/maid)
|
7
|
+
[](https://hakiri.io/github/benjaminoakes/maid/stable)
|
8
|
+
[](http://stackoverflow.com/questions/tagged/maid)
|
7
9
|
|
8
10
|
**Be lazy!** Let Maid clean up after you, based on rules you define.
|
9
11
|
|
data/lib/maid/platform.rb
CHANGED
data/lib/maid/tools.rb
CHANGED
@@ -157,11 +157,11 @@ module Maid::Tools
|
|
157
157
|
# Single path:
|
158
158
|
#
|
159
159
|
# copy('~/Downloads/foo.zip', '~/Archive/Software/Mac OS X/')
|
160
|
-
#
|
160
|
+
#
|
161
161
|
# Multiple paths:
|
162
162
|
#
|
163
163
|
# copy(['~/Downloads/foo.zip', '~/Downloads/bar.zip'], '~/Archive/Software/Mac OS X/')
|
164
|
-
# copy(dir('~/Downloads/*.zip'), '~/Archive/Software/Mac OS X/')
|
164
|
+
# copy(dir('~/Downloads/*.zip'), '~/Archive/Software/Mac OS X/')
|
165
165
|
def copy(sources, destination)
|
166
166
|
destination = expand(destination)
|
167
167
|
|
@@ -358,7 +358,6 @@ module Maid::Tools
|
|
358
358
|
mdls_to_array(path, 'kMDItemWhereFroms')
|
359
359
|
end
|
360
360
|
|
361
|
-
include Maid::Downloading
|
362
361
|
# Detect whether the path is currently being downloaded in Chrome, Firefox or Safari.
|
363
362
|
#
|
364
363
|
# See also: `dir_safe`
|
@@ -764,134 +763,129 @@ module Maid::Tools
|
|
764
763
|
#
|
765
764
|
# tags("~/Downloads/a.dmg.download") # => ["Unfinished"]
|
766
765
|
def tags(path)
|
767
|
-
|
768
|
-
|
766
|
+
if has_tag_available_and_warn?
|
767
|
+
path = expand(path)
|
768
|
+
raw = cmd("tag -lN #{sh_escape(path)}")
|
769
|
+
raw.strip.split(',')
|
770
|
+
else
|
771
|
+
[]
|
769
772
|
end
|
770
|
-
|
771
|
-
path = sh_escape(expand(path))
|
772
|
-
raw = cmd("tag -lN #{path}")
|
773
|
-
raw.strip.split(',')
|
774
773
|
end
|
775
774
|
|
776
|
-
# Tell if a file or directory has any Finder labels. Only available on OS X when you have tag installed.
|
775
|
+
# Tell if a file or directory has any Finder labels. Only available on OS X when you have tag installed.
|
777
776
|
#
|
778
777
|
# ## Example
|
779
778
|
#
|
780
779
|
# has_tags?("~/Downloads/a.dmg.download") # => true
|
781
780
|
def has_tags?(path)
|
782
|
-
|
783
|
-
|
781
|
+
if has_tag_available_and_warn?
|
782
|
+
ts = tags(path)
|
783
|
+
ts && ts.count > 0
|
784
|
+
else
|
785
|
+
false
|
784
786
|
end
|
785
|
-
|
786
|
-
ts = tags(path)
|
787
|
-
ts && ts.count > 0
|
788
787
|
end
|
789
788
|
|
790
|
-
# Tell if a file or directory has a certain Finder labels. Only available on OS X when you have tag installed.
|
789
|
+
# Tell if a file or directory has a certain Finder labels. Only available on OS X when you have tag installed.
|
791
790
|
#
|
792
791
|
# ## Example
|
793
792
|
#
|
794
793
|
# contains_tag?("~/Downloads/a.dmg.download", "Unfinished") # => true
|
795
794
|
def contains_tag?(path, tag)
|
796
|
-
|
797
|
-
|
795
|
+
if has_tag_available_and_warn?
|
796
|
+
path = expand(path)
|
797
|
+
ts = tags(path)
|
798
|
+
ts.include?(tag)
|
799
|
+
else
|
800
|
+
false
|
798
801
|
end
|
799
|
-
|
800
|
-
path = expand(path)
|
801
|
-
ts = tags(path)
|
802
|
-
ts.include? tag
|
803
802
|
end
|
804
803
|
|
805
|
-
# Add a Finder label or a list of labels to a file or directory. Only available on OS X when you have tag installed.
|
804
|
+
# Add a Finder label or a list of labels to a file or directory. Only available on OS X when you have tag installed.
|
806
805
|
#
|
807
806
|
# ## Example
|
808
807
|
#
|
809
808
|
# add_tag("~/Downloads/a.dmg.download", "Unfinished")
|
810
809
|
def add_tag(path, tag)
|
811
|
-
|
812
|
-
|
813
|
-
|
814
|
-
|
815
|
-
|
816
|
-
|
817
|
-
|
818
|
-
if !@file_options[:noop]
|
819
|
-
cmd("tag -a #{ts} #{sh_escape(path)}")
|
810
|
+
if has_tag_available_and_warn?
|
811
|
+
path = expand(path)
|
812
|
+
ts = Array(tag).join(",")
|
813
|
+
log "add tags #{ts} to #{path}"
|
814
|
+
if !@file_options[:noop]
|
815
|
+
cmd("tag -a #{sh_escape(ts)} #{sh_escape(path)}")
|
816
|
+
end
|
820
817
|
end
|
821
818
|
end
|
822
819
|
|
823
|
-
# Remove a Finder label or a list of labels from a file or directory. Only available on OS X when you have tag installed.
|
820
|
+
# Remove a Finder label or a list of labels from a file or directory. Only available on OS X when you have tag installed.
|
824
821
|
#
|
825
822
|
# ## Example
|
826
823
|
#
|
827
824
|
# remove_tag("~/Downloads/a.dmg", "Unfinished")
|
828
825
|
def remove_tag(path, tag)
|
829
|
-
|
830
|
-
|
831
|
-
|
832
|
-
|
833
|
-
|
834
|
-
|
835
|
-
|
836
|
-
if !@file_options[:noop]
|
837
|
-
cmd("tag -r #{ts} #{sh_escape(path)}")
|
826
|
+
if has_tag_available_and_warn?
|
827
|
+
path = expand(path)
|
828
|
+
ts = Array(tag).join(",")
|
829
|
+
log "remove tags #{ts} from #{path}"
|
830
|
+
if !@file_options[:noop]
|
831
|
+
cmd("tag -r #{sh_escape(ts)} #{sh_escape(path)}")
|
832
|
+
end
|
838
833
|
end
|
839
834
|
end
|
840
835
|
|
841
|
-
# Set Finder label of a file or directory to a label or a list of labels. Only available on OS X when you have tag installed.
|
836
|
+
# Set Finder label of a file or directory to a label or a list of labels. Only available on OS X when you have tag installed.
|
842
837
|
#
|
843
838
|
# ## Example
|
844
839
|
#
|
845
840
|
# set_tag("~/Downloads/a.dmg.download", "Unfinished")
|
846
841
|
def set_tag(path, tag)
|
847
|
-
|
848
|
-
|
849
|
-
|
850
|
-
|
851
|
-
|
852
|
-
|
853
|
-
|
854
|
-
if !@file_options[:noop]
|
855
|
-
`tag -s "#{ts}" "#{path}"`
|
842
|
+
if has_tag_available_and_warn?
|
843
|
+
path = expand(path)
|
844
|
+
ts = Array(tag).join(",")
|
845
|
+
log "set tags #{ts} to #{path}"
|
846
|
+
if !@file_options[:noop]
|
847
|
+
cmd("tag -s #{sh_escape(ts)} #{sh_escape(path)}")
|
848
|
+
end
|
856
849
|
end
|
857
850
|
end
|
858
851
|
|
859
|
-
# Tell if a file is hidden
|
852
|
+
# Tell if a file is hidden
|
860
853
|
#
|
861
854
|
# ## Example
|
862
855
|
#
|
863
856
|
# hidden?("~/.maid") # => true
|
864
857
|
def hidden?(path)
|
865
|
-
if Maid::Platform.osx?
|
866
|
-
|
867
|
-
raw
|
868
|
-
return raw == '1'
|
858
|
+
if Maid::Platform.osx?
|
859
|
+
raw = cmd("mdls -raw -name kMDItemFSInvisible #{ sh_escape(path) }")
|
860
|
+
raw == '1'
|
869
861
|
else
|
870
862
|
p = Pathname.new(expand(path))
|
871
|
-
|
863
|
+
p.basename =~ /^\./
|
872
864
|
end
|
873
865
|
end
|
874
866
|
|
875
|
-
# Tell if a file has been used since added
|
867
|
+
# Tell if a file has been used since added
|
876
868
|
#
|
877
869
|
# ## Example
|
878
870
|
#
|
879
871
|
# has_been_used?("~/Downloads/downloading.download") # => false
|
880
872
|
def has_been_used?(path)
|
881
|
-
if Maid::Platform.osx?
|
873
|
+
if Maid::Platform.osx?
|
882
874
|
path = expand(path)
|
883
875
|
raw = cmd("mdls -raw -name kMDItemLastUsedDate #{ sh_escape(path) }")
|
876
|
+
|
884
877
|
if raw == "(null)"
|
885
|
-
|
886
|
-
|
887
|
-
|
888
|
-
|
889
|
-
|
890
|
-
|
891
|
-
|
878
|
+
false
|
879
|
+
else
|
880
|
+
begin
|
881
|
+
DateTime.parse(raw).to_time
|
882
|
+
true
|
883
|
+
rescue ArgumentError => e
|
884
|
+
false
|
885
|
+
end
|
892
886
|
end
|
893
887
|
else
|
894
|
-
|
888
|
+
used_at(path) <=> added_at(path) > 0
|
895
889
|
end
|
896
890
|
end
|
897
891
|
|
@@ -901,19 +895,21 @@ module Maid::Tools
|
|
901
895
|
#
|
902
896
|
# used_at("foo.zip") # => Sat Apr 09 10:50:01 -0400 2011
|
903
897
|
def used_at(path)
|
904
|
-
if Maid::Platform.osx?
|
898
|
+
if Maid::Platform.osx?
|
905
899
|
path = expand(path)
|
906
900
|
raw = cmd("mdls -raw -name kMDItemLastUsedDate #{ sh_escape(path) }")
|
901
|
+
|
907
902
|
if raw == "(null)"
|
908
|
-
|
909
|
-
|
910
|
-
|
911
|
-
|
912
|
-
|
913
|
-
|
903
|
+
nil
|
904
|
+
else
|
905
|
+
begin
|
906
|
+
DateTime.parse(raw).to_time
|
907
|
+
rescue ArgumentError => e
|
908
|
+
accessed_at(path)
|
909
|
+
end
|
914
910
|
end
|
915
911
|
else
|
916
|
-
|
912
|
+
accessed_at(path)
|
917
913
|
end
|
918
914
|
end
|
919
915
|
|
@@ -923,38 +919,42 @@ module Maid::Tools
|
|
923
919
|
#
|
924
920
|
# added_at("foo.zip") # => Sat Apr 09 10:50:01 -0400 2011
|
925
921
|
def added_at(path)
|
926
|
-
if Maid::Platform.osx?
|
922
|
+
if Maid::Platform.osx?
|
927
923
|
path = expand(path)
|
928
924
|
raw = cmd("mdls -raw -name kMDItemDateAdded #{ sh_escape(path) }")
|
925
|
+
|
929
926
|
if raw == "(null)"
|
930
|
-
|
931
|
-
|
932
|
-
|
933
|
-
|
934
|
-
|
935
|
-
|
927
|
+
1.second.ago
|
928
|
+
else
|
929
|
+
begin
|
930
|
+
DateTime.parse(raw).to_time
|
931
|
+
rescue ArgumentError => e
|
932
|
+
created_at(path)
|
933
|
+
end
|
936
934
|
end
|
937
935
|
else
|
938
|
-
|
936
|
+
created_at(path)
|
939
937
|
end
|
940
938
|
end
|
941
939
|
|
942
940
|
private
|
943
941
|
|
944
|
-
def has_tag_available?
|
945
|
-
|
942
|
+
def has_tag_available?
|
943
|
+
Maid::Platform.has_tag_available?
|
946
944
|
end
|
947
945
|
|
948
|
-
def has_tag_available_and_warn?
|
949
|
-
|
946
|
+
def has_tag_available_and_warn?
|
947
|
+
if has_tag_available?
|
948
|
+
true
|
949
|
+
else
|
950
950
|
if Maid::Platform.osx?
|
951
951
|
warn("To use this feature, you need `tag` installed. Run `brew install tag`")
|
952
952
|
else
|
953
953
|
warn("sorry, tagging is unavailable on your platform")
|
954
954
|
end
|
955
|
-
|
955
|
+
|
956
|
+
false
|
956
957
|
end
|
957
|
-
return true
|
958
958
|
end
|
959
959
|
|
960
960
|
def sh_escape(array)
|
@@ -978,10 +978,17 @@ module Maid::Tools
|
|
978
978
|
end
|
979
979
|
|
980
980
|
def mdls_to_array(path, attribute)
|
981
|
-
|
982
|
-
|
983
|
-
|
984
|
-
|
985
|
-
|
981
|
+
if Maid::Platform.osx?
|
982
|
+
raw = cmd("mdls -raw -name #{sh_escape(attribute)} #{ sh_escape(path) }")
|
983
|
+
|
984
|
+
if raw.empty?
|
985
|
+
[]
|
986
|
+
else
|
987
|
+
clean = raw[1, raw.length - 2]
|
988
|
+
clean.split(/,\s+/).map { |s| t = s.strip; t[1, t.length - 2] }
|
989
|
+
end
|
990
|
+
else
|
991
|
+
[]
|
992
|
+
end
|
986
993
|
end
|
987
994
|
end
|
data/lib/maid/version.rb
CHANGED
data/lib/maid/watch.rb
CHANGED
@@ -1,20 +1,22 @@
|
|
1
1
|
require 'listen'
|
2
|
+
|
2
3
|
class Maid::Watch
|
3
4
|
include Maid::RuleContainer
|
4
|
-
include Maid::Downloading
|
5
5
|
|
6
6
|
attr_reader :path, :listener, :logger
|
7
7
|
|
8
8
|
def initialize(maid, path, options = {}, &rules)
|
9
9
|
@maid = maid
|
10
|
-
|
10
|
+
|
11
|
+
if options.nil? || options.empty?
|
11
12
|
@lazy = true
|
12
|
-
@options = { wait_for_delay: 10,
|
13
|
+
@options = { wait_for_delay: 10,
|
13
14
|
ignore: Maid::Downloading.downloading_file_regexps }
|
14
15
|
else
|
15
16
|
@lazy = options.delete(:lazy) { |key| true }
|
16
17
|
@options = options
|
17
18
|
end
|
19
|
+
|
18
20
|
@logger = maid.logger # TODO: Maybe it's better to create seperate loggers?
|
19
21
|
@path = File.expand_path(path)
|
20
22
|
initialize_rules(&rules)
|
@@ -27,6 +29,7 @@ class Maid::Watch
|
|
27
29
|
follow_rules(modified, added, removed)
|
28
30
|
end
|
29
31
|
end
|
32
|
+
|
30
33
|
@listener.start
|
31
34
|
end
|
32
35
|
end
|
data/spec/lib/maid/tools_spec.rb
CHANGED
@@ -771,30 +771,35 @@ module Maid
|
|
771
771
|
expect(@maid.ignore_child_dirs(src).sort).to eq(expected)
|
772
772
|
end
|
773
773
|
end
|
774
|
+
end
|
774
775
|
|
775
|
-
|
776
|
-
|
777
|
-
|
778
|
-
|
779
|
-
`touch #{@test_file}`
|
780
|
-
@maid.file_options[:noop] = false
|
781
|
-
end
|
776
|
+
describe 'OSX tag support', :fakefs => false do
|
777
|
+
before do
|
778
|
+
@logger = double('Logger').as_null_object
|
779
|
+
@maid = Maid.new(:logger => @logger)
|
782
780
|
|
783
|
-
|
784
|
-
|
785
|
-
|
786
|
-
|
781
|
+
@test_file = (@test_dir = '~/.maid/test/') + (@file_name = 'tag.zip')
|
782
|
+
FileUtils.mkdir_p(@test_dir)
|
783
|
+
FileUtils.touch(@test_file)
|
784
|
+
@maid.file_options[:noop] = false
|
785
|
+
end
|
786
|
+
|
787
|
+
after do
|
788
|
+
FileUtils.rm_r(@test_dir)
|
789
|
+
@maid.file_options[:noop] = true
|
790
|
+
end
|
787
791
|
|
788
|
-
|
789
|
-
|
792
|
+
describe '#tags' do
|
793
|
+
it 'returns tags from a file that has one' do
|
794
|
+
if Platform.has_tag_available?
|
790
795
|
@maid.file_options[:noop] = false
|
791
796
|
@maid.add_tag(@test_file, "Test")
|
792
797
|
expect(@maid.tags(@test_file)).to eq(["Test"])
|
793
798
|
end
|
794
799
|
end
|
795
800
|
|
796
|
-
it '
|
797
|
-
if
|
801
|
+
it 'returns tags from a file that has serveral tags' do
|
802
|
+
if Platform.has_tag_available?
|
798
803
|
@maid.file_options[:noop] = false
|
799
804
|
@maid.add_tag(@test_file, ["Test", "Twice"])
|
800
805
|
expect(@maid.tags(@test_file)).to eq(["Test", "Twice"])
|
@@ -803,45 +808,21 @@ module Maid
|
|
803
808
|
end
|
804
809
|
|
805
810
|
describe '#has_tags?' do
|
806
|
-
|
807
|
-
|
808
|
-
`mkdir -p #{@test_dir}`
|
809
|
-
`touch #{@test_file}`
|
810
|
-
@maid.file_options[:noop] = false
|
811
|
-
end
|
812
|
-
|
813
|
-
after do
|
814
|
-
`rm -r #{@test_dir}`
|
815
|
-
@maid.file_options[:noop] = true
|
816
|
-
end
|
817
|
-
|
818
|
-
it 'A file with tags' do
|
819
|
-
if system("which -s tag")
|
811
|
+
it 'returns true for a file with tags' do
|
812
|
+
if Platform.has_tag_available?
|
820
813
|
@maid.add_tag(@test_file, "Test")
|
821
814
|
expect(@maid.has_tags?(@test_file)).to be(true)
|
822
815
|
end
|
823
816
|
end
|
824
817
|
|
825
|
-
it '
|
826
|
-
|
818
|
+
it 'returns false for a file without tags' do
|
819
|
+
expect(@maid.has_tags?(@test_file)).to be(false)
|
827
820
|
end
|
828
821
|
end
|
829
822
|
|
830
823
|
describe '#contains_tag?' do
|
831
|
-
|
832
|
-
|
833
|
-
`mkdir -p #{@test_dir}`
|
834
|
-
`touch #{@test_file}`
|
835
|
-
@maid.file_options[:noop] = false
|
836
|
-
end
|
837
|
-
|
838
|
-
after do
|
839
|
-
`rm -r #{@test_dir}`
|
840
|
-
@maid.file_options[:noop] = true
|
841
|
-
end
|
842
|
-
|
843
|
-
it 'A file with Test tag' do
|
844
|
-
if system("which -s tag")
|
824
|
+
it 'returns true a file with the given tag' do
|
825
|
+
if Platform.has_tag_available?
|
845
826
|
@maid.add_tag(@test_file, "Test")
|
846
827
|
expect(@maid.contains_tag?(@test_file, "Test")).to be(true)
|
847
828
|
expect(@maid.contains_tag?(@test_file, "Not there")).to be(false)
|
@@ -850,20 +831,8 @@ module Maid
|
|
850
831
|
end
|
851
832
|
|
852
833
|
describe '#add_tag' do
|
853
|
-
|
854
|
-
|
855
|
-
`mkdir -p #{@test_dir}`
|
856
|
-
`touch #{@test_file}`
|
857
|
-
@maid.file_options[:noop] = false
|
858
|
-
end
|
859
|
-
|
860
|
-
after do
|
861
|
-
`rm -r #{@test_dir}`
|
862
|
-
@maid.file_options[:noop] = true
|
863
|
-
end
|
864
|
-
|
865
|
-
it 'Add Test tag to a file' do
|
866
|
-
if system("which -s tag")
|
834
|
+
it 'adds the given tag to a file' do
|
835
|
+
if Platform.has_tag_available?
|
867
836
|
@maid.add_tag(@test_file, "Test")
|
868
837
|
expect(@maid.contains_tag?(@test_file, "Test")).to be(true)
|
869
838
|
end
|
@@ -871,20 +840,8 @@ module Maid
|
|
871
840
|
end
|
872
841
|
|
873
842
|
describe '#remove_tag' do
|
874
|
-
|
875
|
-
|
876
|
-
`mkdir -p #{@test_dir}`
|
877
|
-
`touch #{@test_file}`
|
878
|
-
@maid.file_options[:noop] = false
|
879
|
-
end
|
880
|
-
|
881
|
-
after do
|
882
|
-
`rm -r #{@test_dir}`
|
883
|
-
@maid.file_options[:noop] = true
|
884
|
-
end
|
885
|
-
|
886
|
-
it 'Remove Test tag from a file' do
|
887
|
-
if system("which -s tag")
|
843
|
+
it 'removes the given tag from a file' do
|
844
|
+
if Platform.has_tag_available?
|
888
845
|
@maid.add_tag(@test_file, "Test")
|
889
846
|
expect(@maid.contains_tag?(@test_file, "Test")).to be(true)
|
890
847
|
@maid.remove_tag(@test_file, "Test")
|
@@ -894,20 +851,8 @@ module Maid
|
|
894
851
|
end
|
895
852
|
|
896
853
|
describe '#set_tag' do
|
897
|
-
|
898
|
-
|
899
|
-
`mkdir -p #{@test_dir}`
|
900
|
-
`touch #{@test_file}`
|
901
|
-
@maid.file_options[:noop] = false
|
902
|
-
end
|
903
|
-
|
904
|
-
after do
|
905
|
-
`rm -r #{@test_dir}`
|
906
|
-
@maid.file_options[:noop] = true
|
907
|
-
end
|
908
|
-
|
909
|
-
it 'Set Test tags to a file' do
|
910
|
-
if system("which -s tag")
|
854
|
+
it 'sets the given tags on a file' do
|
855
|
+
if Platform.has_tag_available?
|
911
856
|
@maid.set_tag(@test_file, "Test")
|
912
857
|
expect(@maid.contains_tag?(@test_file, "Test")).to be(true)
|
913
858
|
@maid.set_tag(@test_file, ["Test", "Twice"])
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: maid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.0.alpha.
|
4
|
+
version: 0.8.0.alpha.3
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-07-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: escape
|
16
|
-
requirement: &
|
16
|
+
requirement: &16122080 !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: *
|
27
|
+
version_requirements: *16122080
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: thor
|
30
|
-
requirement: &
|
30
|
+
requirement: &16121340 !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: *
|
41
|
+
version_requirements: *16121340
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: deprecated
|
44
|
-
requirement: &
|
44
|
+
requirement: &16120620 !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: *
|
52
|
+
version_requirements: *16120620
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
54
|
name: dimensions
|
55
|
-
requirement: &
|
55
|
+
requirement: &16120140 !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: *
|
66
|
+
version_requirements: *16120140
|
67
67
|
- !ruby/object:Gem::Dependency
|
68
68
|
name: mime-types
|
69
|
-
requirement: &
|
69
|
+
requirement: &16119340 !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: *
|
77
|
+
version_requirements: *16119340
|
78
78
|
- !ruby/object:Gem::Dependency
|
79
79
|
name: rubyzip
|
80
|
-
requirement: &
|
80
|
+
requirement: &16118840 !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: *
|
88
|
+
version_requirements: *16118840
|
89
89
|
- !ruby/object:Gem::Dependency
|
90
90
|
name: xdg
|
91
|
-
requirement: &
|
91
|
+
requirement: &16118240 !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: *
|
99
|
+
version_requirements: *16118240
|
100
100
|
- !ruby/object:Gem::Dependency
|
101
101
|
name: listen
|
102
|
-
requirement: &
|
102
|
+
requirement: &16115520 !ruby/object:Gem::Requirement
|
103
103
|
none: false
|
104
104
|
requirements:
|
105
105
|
- - ! '>='
|
@@ -110,10 +110,10 @@ dependencies:
|
|
110
110
|
version: 2.11.0
|
111
111
|
type: :runtime
|
112
112
|
prerelease: false
|
113
|
-
version_requirements: *
|
113
|
+
version_requirements: *16115520
|
114
114
|
- !ruby/object:Gem::Dependency
|
115
115
|
name: rufus-scheduler
|
116
|
-
requirement: &
|
116
|
+
requirement: &16130960 !ruby/object:Gem::Requirement
|
117
117
|
none: false
|
118
118
|
requirements:
|
119
119
|
- - ~>
|
@@ -121,10 +121,10 @@ dependencies:
|
|
121
121
|
version: 3.0.6
|
122
122
|
type: :runtime
|
123
123
|
prerelease: false
|
124
|
-
version_requirements: *
|
124
|
+
version_requirements: *16130960
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: exifr
|
127
|
-
requirement: &
|
127
|
+
requirement: &16130220 !ruby/object:Gem::Requirement
|
128
128
|
none: false
|
129
129
|
requirements:
|
130
130
|
- - ~>
|
@@ -132,10 +132,10 @@ dependencies:
|
|
132
132
|
version: 1.2.0
|
133
133
|
type: :runtime
|
134
134
|
prerelease: false
|
135
|
-
version_requirements: *
|
135
|
+
version_requirements: *16130220
|
136
136
|
- !ruby/object:Gem::Dependency
|
137
137
|
name: geocoder
|
138
|
-
requirement: &
|
138
|
+
requirement: &16129380 !ruby/object:Gem::Requirement
|
139
139
|
none: false
|
140
140
|
requirements:
|
141
141
|
- - ~>
|
@@ -143,10 +143,10 @@ dependencies:
|
|
143
143
|
version: 1.2.0
|
144
144
|
type: :runtime
|
145
145
|
prerelease: false
|
146
|
-
version_requirements: *
|
146
|
+
version_requirements: *16129380
|
147
147
|
- !ruby/object:Gem::Dependency
|
148
148
|
name: fakefs
|
149
|
-
requirement: &
|
149
|
+
requirement: &16126580 !ruby/object:Gem::Requirement
|
150
150
|
none: false
|
151
151
|
requirements:
|
152
152
|
- - ~>
|
@@ -154,10 +154,10 @@ dependencies:
|
|
154
154
|
version: 0.4.3
|
155
155
|
type: :development
|
156
156
|
prerelease: false
|
157
|
-
version_requirements: *
|
157
|
+
version_requirements: *16126580
|
158
158
|
- !ruby/object:Gem::Dependency
|
159
159
|
name: guard
|
160
|
-
requirement: &
|
160
|
+
requirement: &16124940 !ruby/object:Gem::Requirement
|
161
161
|
none: false
|
162
162
|
requirements:
|
163
163
|
- - ~>
|
@@ -165,10 +165,10 @@ dependencies:
|
|
165
165
|
version: 2.12.5
|
166
166
|
type: :development
|
167
167
|
prerelease: false
|
168
|
-
version_requirements: *
|
168
|
+
version_requirements: *16124940
|
169
169
|
- !ruby/object:Gem::Dependency
|
170
170
|
name: guard-rspec
|
171
|
-
requirement: &
|
171
|
+
requirement: &16124260 !ruby/object:Gem::Requirement
|
172
172
|
none: false
|
173
173
|
requirements:
|
174
174
|
- - ~>
|
@@ -176,10 +176,10 @@ dependencies:
|
|
176
176
|
version: 4.5.0
|
177
177
|
type: :development
|
178
178
|
prerelease: false
|
179
|
-
version_requirements: *
|
179
|
+
version_requirements: *16124260
|
180
180
|
- !ruby/object:Gem::Dependency
|
181
181
|
name: rake
|
182
|
-
requirement: &
|
182
|
+
requirement: &16123540 !ruby/object:Gem::Requirement
|
183
183
|
none: false
|
184
184
|
requirements:
|
185
185
|
- - ~>
|
@@ -187,10 +187,10 @@ dependencies:
|
|
187
187
|
version: 10.4.2
|
188
188
|
type: :development
|
189
189
|
prerelease: false
|
190
|
-
version_requirements: *
|
190
|
+
version_requirements: *16123540
|
191
191
|
- !ruby/object:Gem::Dependency
|
192
192
|
name: redcarpet
|
193
|
-
requirement: &
|
193
|
+
requirement: &16138940 !ruby/object:Gem::Requirement
|
194
194
|
none: false
|
195
195
|
requirements:
|
196
196
|
- - ~>
|
@@ -198,10 +198,10 @@ dependencies:
|
|
198
198
|
version: 3.2.2
|
199
199
|
type: :development
|
200
200
|
prerelease: false
|
201
|
-
version_requirements: *
|
201
|
+
version_requirements: *16138940
|
202
202
|
- !ruby/object:Gem::Dependency
|
203
203
|
name: rspec
|
204
|
-
requirement: &
|
204
|
+
requirement: &16137920 !ruby/object:Gem::Requirement
|
205
205
|
none: false
|
206
206
|
requirements:
|
207
207
|
- - ~>
|
@@ -209,10 +209,10 @@ dependencies:
|
|
209
209
|
version: 3.2.0
|
210
210
|
type: :development
|
211
211
|
prerelease: false
|
212
|
-
version_requirements: *
|
212
|
+
version_requirements: *16137920
|
213
213
|
- !ruby/object:Gem::Dependency
|
214
214
|
name: timecop
|
215
|
-
requirement: &
|
215
|
+
requirement: &16137280 !ruby/object:Gem::Requirement
|
216
216
|
none: false
|
217
217
|
requirements:
|
218
218
|
- - ~>
|
@@ -220,10 +220,10 @@ dependencies:
|
|
220
220
|
version: 0.7.0
|
221
221
|
type: :development
|
222
222
|
prerelease: false
|
223
|
-
version_requirements: *
|
223
|
+
version_requirements: *16137280
|
224
224
|
- !ruby/object:Gem::Dependency
|
225
225
|
name: yard
|
226
|
-
requirement: &
|
226
|
+
requirement: &16136600 !ruby/object:Gem::Requirement
|
227
227
|
none: false
|
228
228
|
requirements:
|
229
229
|
- - ~>
|
@@ -231,10 +231,10 @@ dependencies:
|
|
231
231
|
version: 0.8.4
|
232
232
|
type: :development
|
233
233
|
prerelease: false
|
234
|
-
version_requirements: *
|
234
|
+
version_requirements: *16136600
|
235
235
|
- !ruby/object:Gem::Dependency
|
236
236
|
name: rb-inotify
|
237
|
-
requirement: &
|
237
|
+
requirement: &16135900 !ruby/object:Gem::Requirement
|
238
238
|
none: false
|
239
239
|
requirements:
|
240
240
|
- - ~>
|
@@ -242,10 +242,10 @@ dependencies:
|
|
242
242
|
version: 0.9.0
|
243
243
|
type: :development
|
244
244
|
prerelease: false
|
245
|
-
version_requirements: *
|
245
|
+
version_requirements: *16135900
|
246
246
|
- !ruby/object:Gem::Dependency
|
247
247
|
name: rb-fsevent
|
248
|
-
requirement: &
|
248
|
+
requirement: &16135440 !ruby/object:Gem::Requirement
|
249
249
|
none: false
|
250
250
|
requirements:
|
251
251
|
- - ~>
|
@@ -253,7 +253,7 @@ dependencies:
|
|
253
253
|
version: 0.9.2
|
254
254
|
type: :development
|
255
255
|
prerelease: false
|
256
|
-
version_requirements: *
|
256
|
+
version_requirements: *16135440
|
257
257
|
description: Be lazy. Let Maid clean up after you, based on rules you define. Think
|
258
258
|
of it as "Hazel for hackers".
|
259
259
|
email:
|