fspath 1.2.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,11 @@
1
+ /pkg/
2
+
3
+ /doc/
4
+ /rdoc/
5
+ /.yardoc/
6
+ /coverage/
7
+
8
+ Makefile
9
+ *.o
10
+ *.bundle
11
+ /tmp/
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2010 Ivan Kuchin
1
+ Copyright (c) 2010-2011 Ivan Kuchin
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.markdown CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  Better than Pathname
4
4
 
5
+ Check out fspath-mac and fspath-xattr.
6
+
5
7
  ## Synopsis
6
8
 
7
9
  User dir:
@@ -48,38 +50,6 @@ Path parts:
48
50
 
49
51
  FSPath('/a/b/c').parts # => ['/', 'a', 'b', 'c']
50
52
 
51
- ### Extended attributes (using xattr gem)
52
-
53
- Get extended attribute:
54
-
55
- FSPath('/a/b/c').xattr['com.macromates.caret']
56
-
57
- Set extended attribute:
58
-
59
- FSPath('/a/b/c').xattr['good'] = 'bad'
60
-
61
- ### OS X stuff
62
-
63
- Move to trash:
64
-
65
- FSPath('a').move_to_trash
66
-
67
- Get finder label (one of :none, :orange, :red, :yellow, :blue, :purple, :green and :gray):
68
-
69
- FSPath('a').finder_label
70
-
71
- Set finder label (:grey is same as :gray, nil or false as :none):
72
-
73
- FSPath('a').finder_label = :red
74
-
75
- Get spotlight comment:
76
-
77
- FSPath('a').spotlight_comment
78
-
79
- Set spotlight comment:
80
-
81
- FSPath('a').spotlight_comment = 'a file'
82
-
83
53
  ## Copyright
84
54
 
85
- Copyright (c) 2010 Ivan Kuchin. See LICENSE.txt for details.
55
+ Copyright (c) 2010-2011 Ivan Kuchin. See LICENSE.txt for details.
data/fspath.gemspec CHANGED
@@ -1,64 +1,19 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
- # -*- encoding: utf-8 -*-
1
+ # encoding: UTF-8
5
2
 
6
3
  Gem::Specification.new do |s|
7
- s.name = "fspath"
8
- s.version = "1.2.0"
9
- s.platform = "darwin"
4
+ s.name = 'fspath'
5
+ s.version = '2.0.0'
6
+ s.summary = %q{Better than Pathname}
7
+ s.homepage = "http://github.com/toy/#{s.name}"
8
+ s.authors = ['Ivan Kuchin']
9
+ s.license = 'MIT'
10
10
 
11
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
- s.authors = ["Ivan Kuchin"]
13
- s.date = "2011-11-20"
14
- s.extra_rdoc_files = [
15
- "LICENSE.txt",
16
- "README.markdown"
17
- ]
18
- s.files = [
19
- ".tmignore",
20
- "LICENSE.txt",
21
- "README.markdown",
22
- "Rakefile",
23
- "VERSION",
24
- "fspath.gemspec",
25
- "lib/fspath.rb",
26
- "lib/fspath/all.rb",
27
- "lib/fspath/darwin.rb",
28
- "lib/fspath/xattr.rb",
29
- "spec/fspath/darwin_spec.rb",
30
- "spec/fspath/xattr_spec.rb",
31
- "spec/fspath_spec.rb",
32
- "spec/spec_helper.rb"
33
- ]
34
- s.homepage = "http://github.com/toy/fspath"
35
- s.licenses = ["MIT"]
36
- s.require_paths = ["lib"]
37
- s.rubygems_version = "1.8.11"
38
- s.summary = "Better than Pathname"
11
+ s.rubyforge_project = s.name
39
12
 
40
- if s.respond_to? :specification_version then
41
- s.specification_version = 3
13
+ s.files = `git ls-files`.split("\n")
14
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
15
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
16
+ s.require_paths = %w[lib]
42
17
 
43
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
44
- s.add_runtime_dependency(%q<ffi-xattr>, [">= 0"])
45
- s.add_runtime_dependency(%q<rb-appscript>, [">= 0"])
46
- s.add_development_dependency(%q<jeweler>, ["~> 1.5.1"])
47
- s.add_development_dependency(%q<rake-gem-ghost>, [">= 0"])
48
- s.add_development_dependency(%q<rspec>, [">= 0"])
49
- else
50
- s.add_dependency(%q<ffi-xattr>, [">= 0"])
51
- s.add_dependency(%q<rb-appscript>, [">= 0"])
52
- s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
53
- s.add_dependency(%q<rake-gem-ghost>, [">= 0"])
54
- s.add_dependency(%q<rspec>, [">= 0"])
55
- end
56
- else
57
- s.add_dependency(%q<ffi-xattr>, [">= 0"])
58
- s.add_dependency(%q<rb-appscript>, [">= 0"])
59
- s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
60
- s.add_dependency(%q<rake-gem-ghost>, [">= 0"])
61
- s.add_dependency(%q<rspec>, [">= 0"])
62
- end
18
+ s.add_development_dependency 'rspec'
63
19
  end
64
-
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fspath
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 15
5
5
  prerelease:
6
6
  segments:
7
- - 1
8
7
  - 2
9
8
  - 0
10
- version: 1.2.0
9
+ - 0
10
+ version: 2.0.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ivan Kuchin
@@ -17,54 +17,10 @@ cert_chain: []
17
17
 
18
18
  date: 2011-11-20 00:00:00 Z
19
19
  dependencies:
20
- - !ruby/object:Gem::Dependency
21
- name: ffi-xattr
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
32
- type: :runtime
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: jeweler
36
- prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
38
- none: false
39
- requirements:
40
- - - ~>
41
- - !ruby/object:Gem::Version
42
- hash: 1
43
- segments:
44
- - 1
45
- - 5
46
- - 1
47
- version: 1.5.1
48
- type: :development
49
- version_requirements: *id002
50
- - !ruby/object:Gem::Dependency
51
- name: rake-gem-ghost
52
- prerelease: false
53
- requirement: &id003 !ruby/object:Gem::Requirement
54
- none: false
55
- requirements:
56
- - - ">="
57
- - !ruby/object:Gem::Version
58
- hash: 3
59
- segments:
60
- - 0
61
- version: "0"
62
- type: :development
63
- version_requirements: *id003
64
20
  - !ruby/object:Gem::Dependency
65
21
  name: rspec
66
22
  prerelease: false
67
- requirement: &id004 !ruby/object:Gem::Requirement
23
+ requirement: &id001 !ruby/object:Gem::Requirement
68
24
  none: false
69
25
  requirements:
70
26
  - - ">="
@@ -74,29 +30,22 @@ dependencies:
74
30
  - 0
75
31
  version: "0"
76
32
  type: :development
77
- version_requirements: *id004
33
+ version_requirements: *id001
78
34
  description:
79
35
  email:
80
36
  executables: []
81
37
 
82
38
  extensions: []
83
39
 
84
- extra_rdoc_files:
85
- - LICENSE.txt
86
- - README.markdown
40
+ extra_rdoc_files: []
41
+
87
42
  files:
88
- - .tmignore
43
+ - .gitignore
89
44
  - LICENSE.txt
90
45
  - README.markdown
91
- - Rakefile
92
46
  - VERSION
93
47
  - fspath.gemspec
94
48
  - lib/fspath.rb
95
- - lib/fspath/all.rb
96
- - lib/fspath/darwin.rb
97
- - lib/fspath/xattr.rb
98
- - spec/fspath/darwin_spec.rb
99
- - spec/fspath/xattr_spec.rb
100
49
  - spec/fspath_spec.rb
101
50
  - spec/spec_helper.rb
102
51
  homepage: http://github.com/toy/fspath
@@ -127,10 +76,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
76
  version: "0"
128
77
  requirements: []
129
78
 
130
- rubyforge_project:
79
+ rubyforge_project: fspath
131
80
  rubygems_version: 1.8.11
132
81
  signing_key:
133
82
  specification_version: 3
134
83
  summary: Better than Pathname
135
- test_files: []
136
-
84
+ test_files:
85
+ - spec/fspath_spec.rb
86
+ - spec/spec_helper.rb
87
+ has_rdoc:
data/.tmignore DELETED
@@ -1 +0,0 @@
1
- /*.gemspec
data/Rakefile DELETED
@@ -1,46 +0,0 @@
1
- require 'rake'
2
- require 'jeweler'
3
- require 'rake/gem_ghost_task'
4
- require 'rspec/core/rake_task'
5
-
6
- name = 'fspath'
7
-
8
- [nil, 'darwin'].each do |platform|
9
- spec = Gem::Specification.new do |gem|
10
- gem.name = name
11
- gem.summary = %Q{Better than Pathname}
12
- gem.homepage = "http://github.com/toy/#{name}"
13
- gem.license = 'MIT'
14
- gem.authors = ['Ivan Kuchin']
15
- gem.platform = platform
16
- gem.add_dependency 'ffi-xattr'
17
- if platform == 'darwin'
18
- gem.add_dependency 'rb-appscript'
19
- end
20
- gem.add_development_dependency 'jeweler', '~> 1.5.1'
21
- gem.add_development_dependency 'rake-gem-ghost'
22
- gem.add_development_dependency 'rspec'
23
- end
24
- Jeweler::RubygemsDotOrgTasks.new do |rubygems_tasks|
25
- rubygems_tasks.jeweler = Jeweler::Tasks.new(spec).jeweler
26
- end
27
- Rake::GemGhostTask.new
28
- end
29
-
30
- RSpec::Core::RakeTask.new(:spec) do |spec|
31
- spec.rspec_opts = ['--colour --format progress']
32
- spec.pattern = 'spec/**/*_spec.rb'
33
- end
34
-
35
- RSpec::Core::RakeTask.new(:rcov) do |spec|
36
- spec.rspec_opts = ['--colour --format progress']
37
- spec.pattern = 'spec/**/*_spec.rb'
38
- spec.rcov = true
39
- end
40
-
41
- task :spec_with_rcov_and_open => :rcov do
42
- `open coverage/index.html`
43
- end
44
-
45
- desc 'Default: run specs.'
46
- task :default => :spec_with_rcov_and_open
data/lib/fspath/all.rb DELETED
@@ -1,2 +0,0 @@
1
- require 'fspath/darwin'
2
- require 'fspath/xattr'
data/lib/fspath/darwin.rb DELETED
@@ -1,53 +0,0 @@
1
- require 'fspath'
2
- require 'appscript'
3
-
4
- class FSPath < Pathname
5
- # Move to trash using finder
6
- def move_to_trash
7
- mac_finder_alias.delete
8
- end
9
-
10
- FINDER_LABEL_COLORS = [:none, :orange, :red, :yellow, :blue, :purple, :green, :gray].freeze
11
- FINDER_LABEL_COLOR_ALIASES = {:grey => :gray}.freeze
12
- # Get finder label (one of :none, :orange, :red, :yellow, :blue, :purple, :green and :gray)
13
- def finder_label
14
- FINDER_LABEL_COLORS[mac_finder_alias.label_index.get]
15
- end
16
- # Set finder label (:grey is same as :gray, nil or false as :none)
17
- def finder_label=(color)
18
- color = FINDER_LABEL_COLOR_ALIASES[color] || color || :none
19
- index = FINDER_LABEL_COLORS.index(color)
20
- raise "Unknown label #{color.inspect}" unless index
21
- mac_finder_alias.label_index.set(index)
22
- end
23
-
24
- # Get spotlight comment
25
- def spotlight_comment
26
- mac_finder_alias.comment.get
27
- end
28
-
29
- # Set spotlight comment
30
- def spotlight_comment=(comment)
31
- mac_finder_alias.comment.set(comment.to_s)
32
- end
33
-
34
- # MacTypes::Alias for path
35
- def mac_alias
36
- MacTypes::Alias.path(@path)
37
- end
38
-
39
- # MacTypes::FileURL for path
40
- def mac_file_url
41
- MacTypes::FileURL.path(@path)
42
- end
43
-
44
- # Finder item for path through mac_alias
45
- def mac_finder_alias
46
- Appscript.app('Finder').items[mac_alias]
47
- end
48
-
49
- # Finder item for path through mac_alias
50
- def mac_finder_file_url
51
- Appscript.app('Finder').items[mac_file_url]
52
- end
53
- end
data/lib/fspath/xattr.rb DELETED
@@ -1,14 +0,0 @@
1
- require 'fspath'
2
- require 'ffi-xattr'
3
-
4
- class FSPath < Pathname
5
- # Xattr instance for path
6
- def xattr
7
- Xattr.new(@path)
8
- end
9
-
10
- # Xattr instance for path which doesn't follow symlinks
11
- def lxattr
12
- Xattr.new(@path, :no_follow => true)
13
- end
14
- end
@@ -1,175 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
- require 'fspath/darwin'
3
-
4
- describe FSPath do
5
- if RUBY_PLATFORM.downcase.include?('darwin')
6
- describe "mac related" do
7
- describe "move_to_trash" do
8
- it "should call delete on mac_finder_alias" do
9
- @path = FSPath('to_delete')
10
- @finder_alias = mock(:finder_alias)
11
-
12
- @path.should_receive(:mac_finder_alias).and_return(@finder_alias)
13
- @finder_alias.should_receive(:delete)
14
-
15
- @path.move_to_trash
16
- end
17
- end
18
-
19
- describe "finder labels" do
20
- describe "getting" do
21
- it "should call label_index.get on mac_finder_alias" do
22
- @path = FSPath('to_label')
23
- @finder_alias = mock(:finder_alias)
24
- @label_index = mock(:label_index)
25
-
26
- @path.should_receive(:mac_finder_alias).and_return(@finder_alias)
27
- @finder_alias.should_receive(:label_index).and_return(@label_index)
28
- @label_index.should_receive(:get).and_return(0)
29
-
30
- @path.finder_label
31
- end
32
-
33
- it "should return apporitate label" do
34
- @path = FSPath('to_label')
35
- @finder_alias = mock(:finder_alias)
36
- @label_index = mock(:label_index)
37
-
38
- @path.stub!(:mac_finder_alias).and_return(@finder_alias)
39
- @finder_alias.stub!(:label_index).and_return(@label_index)
40
-
41
- FSPath::FINDER_LABEL_COLORS.each_with_index do |label, index|
42
- @label_index.stub!(:get).and_return(index)
43
- @path.finder_label.should == label
44
- end
45
- end
46
- end
47
-
48
- describe "setting" do
49
- it "should call label_index.set on mac_finder_alias" do
50
- @path = FSPath('to_label')
51
- @finder_alias = mock(:finder_alias)
52
- @label_index = mock(:label_index)
53
-
54
- @path.should_receive(:mac_finder_alias).and_return(@finder_alias)
55
- @finder_alias.should_receive(:label_index).and_return(@label_index)
56
- @label_index.should_receive(:set)
57
-
58
- @path.finder_label = nil
59
- end
60
-
61
- describe "index" do
62
- before do
63
- @path = FSPath('to_label')
64
- @finder_alias = mock(:finder_alias)
65
- @label_index = mock(:label_index)
66
-
67
- @path.stub!(:mac_finder_alias).and_return(@finder_alias)
68
- @finder_alias.stub!(:label_index).and_return(@label_index)
69
- end
70
-
71
- it "should call label_index.set with apporitate index" do
72
- FSPath::FINDER_LABEL_COLORS.each_with_index do |label, index|
73
- @label_index.should_receive(:set).with(index).ordered
74
- @path.finder_label = label
75
- end
76
- end
77
-
78
- it "should accept aliases" do
79
- FSPath::FINDER_LABEL_COLOR_ALIASES.each do |label_alias, label|
80
- index = FSPath::FINDER_LABEL_COLORS.index(label)
81
- @label_index.should_receive(:set).with(index).ordered
82
- @path.finder_label = label_alias
83
- end
84
- end
85
-
86
- it "should set to none when called with nil or false" do
87
- [nil, false].each do |label|
88
- @label_index.should_receive(:set).with(0).ordered
89
- @path.finder_label = label
90
- end
91
- end
92
-
93
- it "should raise when called with something else" do
94
- [true, :shitty, 'hello'].each do |label|
95
- proc do
96
- @path.finder_label = label
97
- end.should raise_error("Unknown label #{label.inspect}")
98
- end
99
- end
100
- end
101
- end
102
- end
103
-
104
- describe "spotlight comments" do
105
- describe "getting" do
106
- it "should call comment.get on mac_finder_alias" do
107
- @path = FSPath(__FILE__)
108
- @finder_alias = mock(:finder_alias)
109
- @comment = mock(:comment)
110
- @comment_text = mock(:comment_text)
111
-
112
- @path.should_receive(:mac_finder_alias).and_return(@finder_alias)
113
- @finder_alias.should_receive(:comment).and_return(@comment)
114
- @comment.should_receive(:get).and_return(@comment_text)
115
-
116
- @path.spotlight_comment.should == @comment_text
117
- end
118
- end
119
-
120
- describe "setting" do
121
- it "should call comment.set on mac_finder_alias" do
122
- @path = FSPath(__FILE__)
123
- @finder_alias = mock(:finder_alias)
124
- @comment = mock(:comment)
125
- @comment_text = mock(:comment_text)
126
-
127
- @path.should_receive(:mac_finder_alias).and_return(@finder_alias)
128
- @finder_alias.should_receive(:comment).and_return(@comment)
129
- @comment.should_receive(:set).with(@comment_text.to_s)
130
-
131
- @path.spotlight_comment = @comment_text
132
- end
133
- end
134
- end
135
-
136
- describe "appscript objects" do
137
- before do
138
- @file_path = File.expand_path(__FILE__)
139
- end
140
-
141
- describe "mac_alias" do
142
- it "should return instance of MacTypes::Alias" do
143
- FSPath(@file_path).mac_alias.should be_kind_of(MacTypes::Alias)
144
- end
145
-
146
- it "should point to same path" do
147
- FSPath(@file_path).mac_alias.path.should == @file_path
148
- end
149
- end
150
-
151
- describe "mac_file_url" do
152
- it "should return instance of MacTypes::FileURL" do
153
- FSPath(@file_path).mac_file_url.should be_kind_of(MacTypes::FileURL)
154
- end
155
-
156
- it "should point to same path" do
157
- FSPath(@file_path).mac_file_url.path.should == @file_path
158
- end
159
- end
160
-
161
- describe "mac_finder_alias" do
162
- it "should return same ref" do
163
- FSPath(@file_path).mac_finder_alias.should == Appscript.app('Finder').items[FSPath(@file_path).mac_alias]
164
- end
165
- end
166
-
167
- describe "mac_finder_file_url" do
168
- it "should return same ref" do
169
- FSPath(@file_path).mac_finder_file_url.should == Appscript.app('Finder').items[FSPath(@file_path).mac_file_url]
170
- end
171
- end
172
- end
173
- end
174
- end
175
- end
@@ -1,54 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
- require 'fspath/xattr'
3
-
4
- describe FSPath do
5
- let(:path){ 'test.txt' }
6
- let(:link){ 'link.txt' }
7
-
8
- before do
9
- File.open(path, 'w'){ |io| io << 'some content' }
10
- File.symlink(path, link)
11
- end
12
- after do
13
- File.delete(path)
14
- File.delete(link)
15
- end
16
-
17
- describe "xattr" do
18
- let(:xattr){ FSPath(link).xattr }
19
-
20
- it "should return instance of Xattr" do
21
- xattr.should be_kind_of(Xattr)
22
- end
23
-
24
- it "should point to same path" do
25
- xattr.instance_variable_get(:@path).should == link
26
- end
27
-
28
- it "should set xattr on linked path" do
29
- FSPath(path).xattr['user.hello'].should be_nil
30
- xattr['user.hello'] = 'foo'
31
- xattr['user.hello'].should == 'foo'
32
- FSPath(path).xattr['user.hello'].should == 'foo'
33
- end
34
- end
35
-
36
- describe "lxattr" do
37
- let(:xattr){ FSPath(link).lxattr }
38
-
39
- it "should return instance of Xattr" do
40
- xattr.should be_kind_of(Xattr)
41
- end
42
-
43
- it "should point to same path" do
44
- xattr.instance_variable_get(:@path).should == link
45
- end
46
-
47
- it "should set xattr on link itself" do
48
- FSPath(path).xattr['user.hello'].should be_nil
49
- xattr['user.hello'] = 'foo'
50
- xattr['user.hello'].should == 'foo'
51
- FSPath(path).xattr['user.hello'].should be_nil
52
- end
53
- end
54
- end