fspath 0.0.3-darwin → 0.1.0-darwin
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.rdoc +78 -0
- data/Rakefile +16 -25
- data/TODO +40 -0
- data/VERSION +1 -1
- data/fspath.gemspec +21 -14
- data/lib/fspath/darwin.rb +52 -0
- data/lib/fspath/xattr.rb +23 -0
- data/lib/fspath.rb +40 -1
- data/spec/fspath/darwin_spec.rb +174 -0
- data/spec/fspath/xattr_spec.rb +57 -0
- data/spec/fspath_spec.rb +60 -0
- metadata +41 -39
- data/Gemfile +0 -8
- data/Gemfile.lock +0 -28
    
        data/README.rdoc
    CHANGED
    
    | @@ -2,6 +2,84 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            Better than Pathname
         | 
| 4 4 |  | 
| 5 | 
            +
            == Synopsis
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            User dir:
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                FSPath.~
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            Other user dir:
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                FSPath.~('other')
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            Common dir for paths:
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                FSPath.common_dir('/a/b/c/d/e/f', '/a/b/c/1/hello', '/a/b/c/2/world') # => FSPath('/a/b/c')
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            Join paths:
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                FSPath('a') / 'b' / 'c' # => FSPath('a/b/c')
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            Write data:
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                FSPath('a').write('data')
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            Append data:
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                FSPath('a').append('data')
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            Escape glob:
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                FSPath('trash?/stuff [a,b,c]').escape_glob # => FSPath('trash\?/stuff \[a,b,c\]')
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            Expand glob:
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                FSPath('trash').glob('**', '*')
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            Ascendants:
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                FSPath('a/b/c').ascend # => [FSPath('a/b/c'), FSPath('a/b'), FSPath('a')]
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            Descendants:
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                FSPath('a/b/c').descend # => [FSPath('a'), FSPath('a/b'), FSPath('a/b/c')]
         | 
| 46 | 
            +
             | 
| 47 | 
            +
            Path parts:
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                FSPath('/a/b/c').parts # => ['/', 'a', 'b', 'c']
         | 
| 50 | 
            +
             | 
| 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 | 
            +
             | 
| 5 83 | 
             
            == Copyright
         | 
| 6 84 |  | 
| 7 85 | 
             
            Copyright (c) 2010 Boba Fat. See LICENSE.txt for further details.
         | 
    
        data/Rakefile
    CHANGED
    
    | @@ -1,52 +1,43 @@ | |
| 1 | 
            -
            require ' | 
| 2 | 
            -
             | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
              exit e.status_code
         | 
| 8 | 
            -
            end
         | 
| 1 | 
            +
            require 'rubygems'
         | 
| 2 | 
            +
            require 'rake'
         | 
| 3 | 
            +
            require 'jeweler'
         | 
| 4 | 
            +
            require 'rake/gem_ghost_task'
         | 
| 5 | 
            +
            require 'rspec/core'
         | 
| 6 | 
            +
            require 'rspec/core/rake_task'
         | 
| 9 7 |  | 
| 10 8 | 
             
            name = 'fspath'
         | 
| 11 | 
            -
            summary = 'Better than Pathname'
         | 
| 12 9 |  | 
| 13 | 
            -
            require 'jeweler'
         | 
| 14 10 | 
             
            [nil, 'darwin'].each do |platform|
         | 
| 15 11 | 
             
              spec = Gem::Specification.new do |gem|
         | 
| 16 12 | 
             
                gem.name = name
         | 
| 17 | 
            -
                gem. | 
| 18 | 
            -
                gem. | 
| 19 | 
            -
                gem. | 
| 13 | 
            +
                gem.summary = %Q{Better than Pathname}
         | 
| 14 | 
            +
                gem.homepage = "http://github.com/toy/#{name}"
         | 
| 15 | 
            +
                gem.license = 'MIT'
         | 
| 16 | 
            +
                gem.authors = ['Boba Fat']
         | 
| 20 17 | 
             
                gem.platform = platform
         | 
| 18 | 
            +
                gem.add_dependency 'xattr'
         | 
| 21 19 | 
             
                if platform == 'darwin'
         | 
| 22 20 | 
             
                  gem.add_dependency 'rb-appscript'
         | 
| 23 21 | 
             
                end
         | 
| 22 | 
            +
                gem.add_development_dependency 'jeweler', '~> 1.5.1'
         | 
| 23 | 
            +
                gem.add_development_dependency 'rake-gem-ghost'
         | 
| 24 | 
            +
                gem.add_development_dependency 'rspec'
         | 
| 24 25 | 
             
              end
         | 
| 25 26 | 
             
              Jeweler::RubygemsDotOrgTasks.new do |rubygems_tasks|
         | 
| 26 27 | 
             
                rubygems_tasks.jeweler = Jeweler::Tasks.new(spec).jeweler
         | 
| 27 28 | 
             
              end
         | 
| 29 | 
            +
              Rake::GemGhostTask.new
         | 
| 28 30 | 
             
            end
         | 
| 29 31 |  | 
| 30 | 
            -
            desc "Replace system gem with symlink to this folder"
         | 
| 31 | 
            -
            task 'ghost' do
         | 
| 32 | 
            -
              gem_path = Gem.searcher.find(name).full_gem_path
         | 
| 33 | 
            -
              current_path = File.expand_path('.')
         | 
| 34 | 
            -
              system('rm', '-r', gem_path)
         | 
| 35 | 
            -
              system('ln', '-s', current_path, gem_path)
         | 
| 36 | 
            -
            end
         | 
| 37 | 
            -
             | 
| 38 | 
            -
            require 'rspec/core'
         | 
| 39 | 
            -
            require 'rspec/core/rake_task'
         | 
| 40 32 | 
             
            RSpec::Core::RakeTask.new(:spec) do |spec|
         | 
| 41 33 | 
             
              spec.rspec_opts = ['--colour --format progress']
         | 
| 42 | 
            -
              spec.pattern =  | 
| 34 | 
            +
              spec.pattern = 'spec/**/*_spec.rb'
         | 
| 43 35 | 
             
            end
         | 
| 44 36 |  | 
| 45 37 | 
             
            RSpec::Core::RakeTask.new(:rcov) do |spec|
         | 
| 46 38 | 
             
              spec.rspec_opts = ['--colour --format progress']
         | 
| 47 39 | 
             
              spec.pattern = 'spec/**/*_spec.rb'
         | 
| 48 40 | 
             
              spec.rcov = true
         | 
| 49 | 
            -
              spec.rcov_opts = ['--exclude', 'spec']
         | 
| 50 41 | 
             
            end
         | 
| 51 42 |  | 
| 52 43 | 
             
            task :spec_with_rcov_and_open => :rcov do
         | 
    
        data/TODO
    ADDED
    
    | @@ -0,0 +1,40 @@ | |
| 1 | 
            +
            class Pathname
         | 
| 2 | 
            +
              def non_existing
         | 
| 3 | 
            +
                dir = dirname
         | 
| 4 | 
            +
                ext = extname
         | 
| 5 | 
            +
                name = basename(ext)
         | 
| 6 | 
            +
                postfix = nil
         | 
| 7 | 
            +
                while (path = dir + "#{name}#{postfix}#{ext}").exist?
         | 
| 8 | 
            +
                  postfix = postfix ? postfix.succ : '-a'
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
                path
         | 
| 11 | 
            +
                # begin
         | 
| 12 | 
            +
                #   FSPath('abc').open(Fcntl::O_WRONLY | Fcntl::O_CREAT | Fcntl::O_EXCL) do |f|
         | 
| 13 | 
            +
                #   end
         | 
| 14 | 
            +
                # rescue => e
         | 
| 15 | 
            +
                #   p e
         | 
| 16 | 
            +
                # end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              def lock(options = {}, &block)
         | 
| 21 | 
            +
                File.lock(@path, options, &block)
         | 
| 22 | 
            +
                # class File
         | 
| 23 | 
            +
                #   def self.lock(path, options = {})
         | 
| 24 | 
            +
                #     if lock = File.open(path, options[:mode] || 'r')
         | 
| 25 | 
            +
                #       begin
         | 
| 26 | 
            +
                #         if lock.flock(options[:no_block] ? (File::LOCK_EX | File::LOCK_NB) : (File::LOCK_EX))
         | 
| 27 | 
            +
                #           yield
         | 
| 28 | 
            +
                #         end
         | 
| 29 | 
            +
                #       ensure
         | 
| 30 | 
            +
                #         lock.flock(File::LOCK_UN)
         | 
| 31 | 
            +
                #         lock.close
         | 
| 32 | 
            +
                #       end
         | 
| 33 | 
            +
                #     end
         | 
| 34 | 
            +
                #   end
         | 
| 35 | 
            +
                # end
         | 
| 36 | 
            +
                # Fcntl::O_RDONLY | Fcntl::O_CREAT
         | 
| 37 | 
            +
                # Fcntl::O_SHLOCK
         | 
| 38 | 
            +
                # Fcntl::O_EXLOCK
         | 
| 39 | 
            +
              end
         | 
| 40 | 
            +
            end
         | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            0.0 | 
| 1 | 
            +
            0.1.0
         | 
    
        data/fspath.gemspec
    CHANGED
    
    | @@ -5,33 +5,40 @@ | |
| 5 5 |  | 
| 6 6 | 
             
            Gem::Specification.new do |s|
         | 
| 7 7 | 
             
              s.name = %q{fspath}
         | 
| 8 | 
            -
              s.version = "0.0 | 
| 8 | 
            +
              s.version = "0.1.0"
         | 
| 9 9 | 
             
              s.platform = %q{darwin}
         | 
| 10 10 |  | 
| 11 11 | 
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         | 
| 12 12 | 
             
              s.authors = ["Boba Fat"]
         | 
| 13 | 
            -
              s.date = %q{2010-12- | 
| 13 | 
            +
              s.date = %q{2010-12-14}
         | 
| 14 14 | 
             
              s.extra_rdoc_files = [
         | 
| 15 15 | 
             
                "LICENSE.txt",
         | 
| 16 | 
            -
                "README.rdoc"
         | 
| 16 | 
            +
                "README.rdoc",
         | 
| 17 | 
            +
                "TODO"
         | 
| 17 18 | 
             
              ]
         | 
| 18 19 | 
             
              s.files = [
         | 
| 19 | 
            -
                "Gemfile",
         | 
| 20 | 
            -
                "Gemfile.lock",
         | 
| 21 20 | 
             
                "LICENSE.txt",
         | 
| 22 21 | 
             
                "README.rdoc",
         | 
| 23 22 | 
             
                "Rakefile",
         | 
| 23 | 
            +
                "TODO",
         | 
| 24 24 | 
             
                "VERSION",
         | 
| 25 25 | 
             
                "fspath.gemspec",
         | 
| 26 26 | 
             
                "lib/fspath.rb",
         | 
| 27 | 
            +
                "lib/fspath/darwin.rb",
         | 
| 28 | 
            +
                "lib/fspath/xattr.rb",
         | 
| 29 | 
            +
                "spec/fspath/darwin_spec.rb",
         | 
| 30 | 
            +
                "spec/fspath/xattr_spec.rb",
         | 
| 27 31 | 
             
                "spec/fspath_spec.rb",
         | 
| 28 32 | 
             
                "spec/spec_helper.rb"
         | 
| 29 33 | 
             
              ]
         | 
| 30 34 | 
             
              s.homepage = %q{http://github.com/toy/fspath}
         | 
| 35 | 
            +
              s.licenses = ["MIT"]
         | 
| 31 36 | 
             
              s.require_paths = ["lib"]
         | 
| 32 37 | 
             
              s.rubygems_version = %q{1.3.7}
         | 
| 33 38 | 
             
              s.summary = %q{Better than Pathname}
         | 
| 34 39 | 
             
              s.test_files = [
         | 
| 40 | 
            +
                "spec/fspath/darwin_spec.rb",
         | 
| 41 | 
            +
                "spec/fspath/xattr_spec.rb",
         | 
| 35 42 | 
             
                "spec/fspath_spec.rb",
         | 
| 36 43 | 
             
                "spec/spec_helper.rb"
         | 
| 37 44 | 
             
              ]
         | 
| @@ -41,24 +48,24 @@ Gem::Specification.new do |s| | |
| 41 48 | 
             
                s.specification_version = 3
         | 
| 42 49 |  | 
| 43 50 | 
             
                if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
         | 
| 51 | 
            +
                  s.add_runtime_dependency(%q<xattr>, [">= 0"])
         | 
| 44 52 | 
             
                  s.add_runtime_dependency(%q<rb-appscript>, [">= 0"])
         | 
| 45 | 
            -
                  s.add_development_dependency(%q<rspec>, ["~> 2.1.0"])
         | 
| 46 | 
            -
                  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
         | 
| 47 53 | 
             
                  s.add_development_dependency(%q<jeweler>, ["~> 1.5.1"])
         | 
| 48 | 
            -
                  s.add_development_dependency(%q< | 
| 54 | 
            +
                  s.add_development_dependency(%q<rake-gem-ghost>, [">= 0"])
         | 
| 55 | 
            +
                  s.add_development_dependency(%q<rspec>, [">= 0"])
         | 
| 49 56 | 
             
                else
         | 
| 57 | 
            +
                  s.add_dependency(%q<xattr>, [">= 0"])
         | 
| 50 58 | 
             
                  s.add_dependency(%q<rb-appscript>, [">= 0"])
         | 
| 51 | 
            -
                  s.add_dependency(%q<rspec>, ["~> 2.1.0"])
         | 
| 52 | 
            -
                  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
         | 
| 53 59 | 
             
                  s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
         | 
| 54 | 
            -
                  s.add_dependency(%q< | 
| 60 | 
            +
                  s.add_dependency(%q<rake-gem-ghost>, [">= 0"])
         | 
| 61 | 
            +
                  s.add_dependency(%q<rspec>, [">= 0"])
         | 
| 55 62 | 
             
                end
         | 
| 56 63 | 
             
              else
         | 
| 64 | 
            +
                s.add_dependency(%q<xattr>, [">= 0"])
         | 
| 57 65 | 
             
                s.add_dependency(%q<rb-appscript>, [">= 0"])
         | 
| 58 | 
            -
                s.add_dependency(%q<rspec>, ["~> 2.1.0"])
         | 
| 59 | 
            -
                s.add_dependency(%q<bundler>, ["~> 1.0.0"])
         | 
| 60 66 | 
             
                s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
         | 
| 61 | 
            -
                s.add_dependency(%q< | 
| 67 | 
            +
                s.add_dependency(%q<rake-gem-ghost>, [">= 0"])
         | 
| 68 | 
            +
                s.add_dependency(%q<rspec>, [">= 0"])
         | 
| 62 69 | 
             
              end
         | 
| 63 70 | 
             
            end
         | 
| 64 71 |  | 
| @@ -0,0 +1,52 @@ | |
| 1 | 
            +
            require 'appscript'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class FSPath < Pathname
         | 
| 4 | 
            +
              # Move to trash using finder
         | 
| 5 | 
            +
              def move_to_trash
         | 
| 6 | 
            +
                mac_finder_alias.delete
         | 
| 7 | 
            +
              end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              FINDER_LABEL_COLORS = [:none, :orange, :red, :yellow, :blue, :purple, :green, :gray].freeze
         | 
| 10 | 
            +
              FINDER_LABEL_COLOR_ALIASES = {:grey => :gray}.freeze
         | 
| 11 | 
            +
              # Get finder label (one of :none, :orange, :red, :yellow, :blue, :purple, :green and :gray)
         | 
| 12 | 
            +
              def finder_label
         | 
| 13 | 
            +
                FINDER_LABEL_COLORS[mac_finder_alias.label_index.get]
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
              # Set finder label (:grey is same as :gray, nil or false as :none)
         | 
| 16 | 
            +
              def finder_label=(color)
         | 
| 17 | 
            +
                color = FINDER_LABEL_COLOR_ALIASES[color] || color || :none
         | 
| 18 | 
            +
                index = FINDER_LABEL_COLORS.index(color)
         | 
| 19 | 
            +
                raise "Unknown label #{color.inspect}" unless index
         | 
| 20 | 
            +
                mac_finder_alias.label_index.set(index)
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              # Get spotlight comment
         | 
| 24 | 
            +
              def spotlight_comment
         | 
| 25 | 
            +
                mac_finder_alias.comment.get
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
              # Set spotlight comment
         | 
| 29 | 
            +
              def spotlight_comment=(comment)
         | 
| 30 | 
            +
                mac_finder_alias.comment.set(comment.to_s)
         | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
              # MacTypes::Alias for path
         | 
| 34 | 
            +
              def mac_alias
         | 
| 35 | 
            +
                MacTypes::Alias.path(@path)
         | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
              # MacTypes::FileURL for path
         | 
| 39 | 
            +
              def mac_file_url
         | 
| 40 | 
            +
                MacTypes::FileURL.path(@path)
         | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
              # Finder item for path through mac_alias
         | 
| 44 | 
            +
              def mac_finder_alias
         | 
| 45 | 
            +
                Appscript.app('Finder').items[mac_alias]
         | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
              # Finder item for path through mac_alias
         | 
| 49 | 
            +
              def mac_finder_file_url
         | 
| 50 | 
            +
                Appscript.app('Finder').items[mac_file_url]
         | 
| 51 | 
            +
              end
         | 
| 52 | 
            +
            end
         | 
    
        data/lib/fspath/xattr.rb
    ADDED
    
    | @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            require 'xattr'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            Xattr.class_eval do
         | 
| 4 | 
            +
              # Accept follow_symlinks as second attribute
         | 
| 5 | 
            +
              def initialize(path, follow_symlinks = true)
         | 
| 6 | 
            +
                @path = path
         | 
| 7 | 
            +
                @follow_symlinks = follow_symlinks
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
              alias_method :[], :get
         | 
| 10 | 
            +
              alias_method :[]=, :set
         | 
| 11 | 
            +
            end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            class FSPath < Pathname
         | 
| 14 | 
            +
              # Xattr instance for path
         | 
| 15 | 
            +
              def xattr
         | 
| 16 | 
            +
                Xattr.new(@path)
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              # Xattr instance for path which doesn't follow symlinks
         | 
| 20 | 
            +
              def lxattr
         | 
| 21 | 
            +
                Xattr.new(@path, false)
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
            end
         | 
    
        data/lib/fspath.rb
    CHANGED
    
    | @@ -7,6 +7,13 @@ class FSPath < Pathname | |
| 7 7 | 
             
                def ~(name = nil)
         | 
| 8 8 | 
             
                  new(File.expand_path("~#{name}"))
         | 
| 9 9 | 
             
                end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                # Returns common dir for paths
         | 
| 12 | 
            +
                def common_dir(*paths)
         | 
| 13 | 
            +
                  paths.map do |path|
         | 
| 14 | 
            +
                    new(path).dirname.ascend
         | 
| 15 | 
            +
                  end.inject(:&).first
         | 
| 16 | 
            +
                end
         | 
| 10 17 | 
             
              end
         | 
| 11 18 |  | 
| 12 19 | 
             
              # Join paths using File.join
         | 
| @@ -48,7 +55,34 @@ class FSPath < Pathname | |
| 48 55 | 
             
                self.class.glob(*args, &block)
         | 
| 49 56 | 
             
              end
         | 
| 50 57 |  | 
| 51 | 
            -
               | 
| 58 | 
            +
              # Iterates over and yields each element in the given path in ascending order
         | 
| 59 | 
            +
              def ascend(&block)
         | 
| 60 | 
            +
                ascendants = []
         | 
| 61 | 
            +
                path = @path
         | 
| 62 | 
            +
                ascendants << self
         | 
| 63 | 
            +
                while r = chop_basename(path)
         | 
| 64 | 
            +
                  path, name = r
         | 
| 65 | 
            +
                  break if path.empty?
         | 
| 66 | 
            +
                  ascendants << self.class.new(del_trailing_separator(path))
         | 
| 67 | 
            +
                end
         | 
| 68 | 
            +
                if block
         | 
| 69 | 
            +
                  ascendants.each(&block)
         | 
| 70 | 
            +
                end
         | 
| 71 | 
            +
                ascendants
         | 
| 72 | 
            +
              end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
              # Iterates over and yields each element in the given path in descending order
         | 
| 75 | 
            +
              def descend(&block)
         | 
| 76 | 
            +
                descendants = ascend.reverse
         | 
| 77 | 
            +
                if block
         | 
| 78 | 
            +
                  descendants.each(&block)
         | 
| 79 | 
            +
                end
         | 
| 80 | 
            +
                descendants
         | 
| 81 | 
            +
              end
         | 
| 82 | 
            +
             | 
| 83 | 
            +
              # Returns path parts
         | 
| 84 | 
            +
              def parts(&block)
         | 
| 85 | 
            +
                split_names(@path).flatten
         | 
| 52 86 | 
             
              end
         | 
| 53 87 | 
             
            end
         | 
| 54 88 |  | 
| @@ -59,3 +93,8 @@ module Kernel | |
| 59 93 | 
             
              end
         | 
| 60 94 | 
             
              private :Pathname
         | 
| 61 95 | 
             
            end
         | 
| 96 | 
            +
             | 
| 97 | 
            +
            require 'fspath/xattr'
         | 
| 98 | 
            +
            if RUBY_PLATFORM.downcase.include?('darwin')
         | 
| 99 | 
            +
              require 'fspath/darwin'
         | 
| 100 | 
            +
            end
         | 
| @@ -0,0 +1,174 @@ | |
| 1 | 
            +
            require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe FSPath do
         | 
| 4 | 
            +
              if RUBY_PLATFORM.downcase.include?('darwin')
         | 
| 5 | 
            +
                describe "mac related" do
         | 
| 6 | 
            +
                  describe "move_to_trash" do
         | 
| 7 | 
            +
                    it "should call delete on mac_finder_alias" do
         | 
| 8 | 
            +
                      @path = FSPath('to_delete')
         | 
| 9 | 
            +
                      @finder_alias = mock(:finder_alias)
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                      @path.should_receive(:mac_finder_alias).and_return(@finder_alias)
         | 
| 12 | 
            +
                      @finder_alias.should_receive(:delete)
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                      @path.move_to_trash
         | 
| 15 | 
            +
                    end
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  describe "finder labels" do
         | 
| 19 | 
            +
                    describe "getting" do
         | 
| 20 | 
            +
                      it "should call label_index.get on mac_finder_alias" do
         | 
| 21 | 
            +
                        @path = FSPath('to_label')
         | 
| 22 | 
            +
                        @finder_alias = mock(:finder_alias)
         | 
| 23 | 
            +
                        @label_index = mock(:label_index)
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                        @path.should_receive(:mac_finder_alias).and_return(@finder_alias)
         | 
| 26 | 
            +
                        @finder_alias.should_receive(:label_index).and_return(@label_index)
         | 
| 27 | 
            +
                        @label_index.should_receive(:get).and_return(0)
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                        @path.finder_label
         | 
| 30 | 
            +
                      end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                      it "should return apporitate label" do
         | 
| 33 | 
            +
                        @path = FSPath('to_label')
         | 
| 34 | 
            +
                        @finder_alias = mock(:finder_alias)
         | 
| 35 | 
            +
                        @label_index = mock(:label_index)
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                        @path.stub!(:mac_finder_alias).and_return(@finder_alias)
         | 
| 38 | 
            +
                        @finder_alias.stub!(:label_index).and_return(@label_index)
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                        FSPath::FINDER_LABEL_COLORS.each_with_index do |label, index|
         | 
| 41 | 
            +
                          @label_index.stub!(:get).and_return(index)
         | 
| 42 | 
            +
                          @path.finder_label.should == label
         | 
| 43 | 
            +
                        end
         | 
| 44 | 
            +
                      end
         | 
| 45 | 
            +
                    end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                    describe "setting" do
         | 
| 48 | 
            +
                      it "should call label_index.set on mac_finder_alias" do
         | 
| 49 | 
            +
                        @path = FSPath('to_label')
         | 
| 50 | 
            +
                        @finder_alias = mock(:finder_alias)
         | 
| 51 | 
            +
                        @label_index = mock(:label_index)
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                        @path.should_receive(:mac_finder_alias).and_return(@finder_alias)
         | 
| 54 | 
            +
                        @finder_alias.should_receive(:label_index).and_return(@label_index)
         | 
| 55 | 
            +
                        @label_index.should_receive(:set)
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                        @path.finder_label = nil
         | 
| 58 | 
            +
                      end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                      describe "index" do
         | 
| 61 | 
            +
                        before do
         | 
| 62 | 
            +
                          @path = FSPath('to_label')
         | 
| 63 | 
            +
                          @finder_alias = mock(:finder_alias)
         | 
| 64 | 
            +
                          @label_index = mock(:label_index)
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                          @path.stub!(:mac_finder_alias).and_return(@finder_alias)
         | 
| 67 | 
            +
                          @finder_alias.stub!(:label_index).and_return(@label_index)
         | 
| 68 | 
            +
                        end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                        it "should call label_index.set with apporitate index" do
         | 
| 71 | 
            +
                          FSPath::FINDER_LABEL_COLORS.each_with_index do |label, index|
         | 
| 72 | 
            +
                            @label_index.should_receive(:set).with(index).ordered
         | 
| 73 | 
            +
                            @path.finder_label = label
         | 
| 74 | 
            +
                          end
         | 
| 75 | 
            +
                        end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                        it "should accept aliases" do
         | 
| 78 | 
            +
                          FSPath::FINDER_LABEL_COLOR_ALIASES.each do |label_alias, label|
         | 
| 79 | 
            +
                            index = FSPath::FINDER_LABEL_COLORS.index(label)
         | 
| 80 | 
            +
                            @label_index.should_receive(:set).with(index).ordered
         | 
| 81 | 
            +
                            @path.finder_label = label_alias
         | 
| 82 | 
            +
                          end
         | 
| 83 | 
            +
                        end
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                        it "should set to none when called with nil or false" do
         | 
| 86 | 
            +
                          [nil, false].each do |label|
         | 
| 87 | 
            +
                            @label_index.should_receive(:set).with(0).ordered
         | 
| 88 | 
            +
                            @path.finder_label = label
         | 
| 89 | 
            +
                          end
         | 
| 90 | 
            +
                        end
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                        it "should raise when called with something else" do
         | 
| 93 | 
            +
                          [true, :shitty, 'hello'].each do |label|
         | 
| 94 | 
            +
                            proc do
         | 
| 95 | 
            +
                              @path.finder_label = label
         | 
| 96 | 
            +
                            end.should raise_error("Unknown label #{label.inspect}")
         | 
| 97 | 
            +
                          end
         | 
| 98 | 
            +
                        end
         | 
| 99 | 
            +
                      end
         | 
| 100 | 
            +
                    end
         | 
| 101 | 
            +
                  end
         | 
| 102 | 
            +
             | 
| 103 | 
            +
                  describe "spotlight comments" do
         | 
| 104 | 
            +
                    describe "getting" do
         | 
| 105 | 
            +
                      it "should call comment.get on mac_finder_alias" do
         | 
| 106 | 
            +
                        @path = FSPath(__FILE__)
         | 
| 107 | 
            +
                        @finder_alias = mock(:finder_alias)
         | 
| 108 | 
            +
                        @comment = mock(:comment)
         | 
| 109 | 
            +
                        @comment_text = mock(:comment_text)
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                        @path.should_receive(:mac_finder_alias).and_return(@finder_alias)
         | 
| 112 | 
            +
                        @finder_alias.should_receive(:comment).and_return(@comment)
         | 
| 113 | 
            +
                        @comment.should_receive(:get).and_return(@comment_text)
         | 
| 114 | 
            +
             | 
| 115 | 
            +
                        @path.spotlight_comment.should == @comment_text
         | 
| 116 | 
            +
                      end
         | 
| 117 | 
            +
                    end
         | 
| 118 | 
            +
             | 
| 119 | 
            +
                    describe "setting" do
         | 
| 120 | 
            +
                      it "should call comment.set on mac_finder_alias" do
         | 
| 121 | 
            +
                        @path = FSPath(__FILE__)
         | 
| 122 | 
            +
                        @finder_alias = mock(:finder_alias)
         | 
| 123 | 
            +
                        @comment = mock(:comment)
         | 
| 124 | 
            +
                        @comment_text = mock(:comment_text)
         | 
| 125 | 
            +
             | 
| 126 | 
            +
                        @path.should_receive(:mac_finder_alias).and_return(@finder_alias)
         | 
| 127 | 
            +
                        @finder_alias.should_receive(:comment).and_return(@comment)
         | 
| 128 | 
            +
                        @comment.should_receive(:set).with(@comment_text.to_s)
         | 
| 129 | 
            +
             | 
| 130 | 
            +
                        @path.spotlight_comment = @comment_text
         | 
| 131 | 
            +
                      end
         | 
| 132 | 
            +
                    end
         | 
| 133 | 
            +
                  end
         | 
| 134 | 
            +
             | 
| 135 | 
            +
                  describe "appscript objects" do
         | 
| 136 | 
            +
                    before do
         | 
| 137 | 
            +
                      @file_path = File.expand_path(__FILE__)
         | 
| 138 | 
            +
                    end
         | 
| 139 | 
            +
             | 
| 140 | 
            +
                    describe "mac_alias" do
         | 
| 141 | 
            +
                      it "should return instance of MacTypes::Alias" do
         | 
| 142 | 
            +
                        FSPath(@file_path).mac_alias.should be_kind_of(MacTypes::Alias)
         | 
| 143 | 
            +
                      end
         | 
| 144 | 
            +
             | 
| 145 | 
            +
                      it "should point to same path" do
         | 
| 146 | 
            +
                        FSPath(@file_path).mac_alias.path.should == @file_path
         | 
| 147 | 
            +
                      end
         | 
| 148 | 
            +
                    end
         | 
| 149 | 
            +
             | 
| 150 | 
            +
                    describe "mac_file_url" do
         | 
| 151 | 
            +
                      it "should return instance of MacTypes::FileURL" do
         | 
| 152 | 
            +
                        FSPath(@file_path).mac_file_url.should be_kind_of(MacTypes::FileURL)
         | 
| 153 | 
            +
                      end
         | 
| 154 | 
            +
             | 
| 155 | 
            +
                      it "should point to same path" do
         | 
| 156 | 
            +
                        FSPath(@file_path).mac_file_url.path.should == @file_path
         | 
| 157 | 
            +
                      end
         | 
| 158 | 
            +
                    end
         | 
| 159 | 
            +
             | 
| 160 | 
            +
                    describe "mac_finder_alias" do
         | 
| 161 | 
            +
                      it "should return same ref" do
         | 
| 162 | 
            +
                        FSPath(@file_path).mac_finder_alias.should == Appscript.app('Finder').items[FSPath(@file_path).mac_alias]
         | 
| 163 | 
            +
                      end
         | 
| 164 | 
            +
                    end
         | 
| 165 | 
            +
             | 
| 166 | 
            +
                    describe "mac_finder_file_url" do
         | 
| 167 | 
            +
                      it "should return same ref" do
         | 
| 168 | 
            +
                        FSPath(@file_path).mac_finder_file_url.should == Appscript.app('Finder').items[FSPath(@file_path).mac_file_url]
         | 
| 169 | 
            +
                      end
         | 
| 170 | 
            +
                    end
         | 
| 171 | 
            +
                  end
         | 
| 172 | 
            +
                end
         | 
| 173 | 
            +
              end
         | 
| 174 | 
            +
            end
         | 
| @@ -0,0 +1,57 @@ | |
| 1 | 
            +
            require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Xattr do
         | 
| 4 | 
            +
              describe "new" do
         | 
| 5 | 
            +
                it "should accept follow_symlinks as second attribute" do
         | 
| 6 | 
            +
                  Xattr.new('a', true).follow_symlinks.should == true
         | 
| 7 | 
            +
                  Xattr.new('a', false).follow_symlinks.should == false
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                it "should alias get/set as []" do
         | 
| 11 | 
            +
                  Xattr.instance_method(:[]).should == Xattr.instance_method(:get)
         | 
| 12 | 
            +
                  Xattr.instance_method(:[]=).should == Xattr.instance_method(:set)
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
            end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            describe FSPath do
         | 
| 18 | 
            +
              before do
         | 
| 19 | 
            +
                @file_path = 'with_xattr'
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              describe "xattr" do
         | 
| 23 | 
            +
                before do
         | 
| 24 | 
            +
                  @xattr = FSPath(@file_path).xattr
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                it "should return instance of Xattr" do
         | 
| 28 | 
            +
                  @xattr.should be_kind_of(Xattr)
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                it "should follow_symlinks" do
         | 
| 32 | 
            +
                  @xattr.follow_symlinks.should be_true
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                it "should point to same path" do
         | 
| 36 | 
            +
                  @xattr.instance_variable_get(:@path).should == @file_path
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
              describe "lxattr" do
         | 
| 41 | 
            +
                before do
         | 
| 42 | 
            +
                  @lxattr = FSPath(@file_path).lxattr
         | 
| 43 | 
            +
                end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                it "should return instance of Xattr" do
         | 
| 46 | 
            +
                  @lxattr.should be_kind_of(Xattr)
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                it "should not follow_symlinks" do
         | 
| 50 | 
            +
                  @lxattr.follow_symlinks.should be_false
         | 
| 51 | 
            +
                end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                it "should point to same path" do
         | 
| 54 | 
            +
                  @lxattr.instance_variable_get(:@path).should == @file_path
         | 
| 55 | 
            +
                end
         | 
| 56 | 
            +
              end
         | 
| 57 | 
            +
            end
         | 
    
        data/spec/fspath_spec.rb
    CHANGED
    
    | @@ -19,6 +19,20 @@ describe FSPath do | |
| 19 19 | 
             
                end
         | 
| 20 20 | 
             
              end
         | 
| 21 21 |  | 
| 22 | 
            +
              describe "common_dir" do
         | 
| 23 | 
            +
                it "should return dirname if called with one path" do
         | 
| 24 | 
            +
                  FSPath.common_dir('/a/b/c').should == FSPath('/a/b')
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                it "should return common path if called with mulpitle paths" do
         | 
| 28 | 
            +
                  FSPath.common_dir('/a/b/c/d/e', '/a/b/c/d/f', '/a/b/c/z').should == FSPath('/a/b/c')
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                it "should return nil if there is no common path" do
         | 
| 32 | 
            +
                  FSPath.common_dir('../a', './b').should be_nil
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
             | 
| 22 36 | 
             
              describe "/" do
         | 
| 23 37 | 
             
                it "should join path with string" do
         | 
| 24 38 | 
             
                  (FSPath('a') / 'b').should == FSPath('a/b')
         | 
| @@ -101,4 +115,50 @@ describe FSPath do | |
| 101 115 | 
             
                  FSPath('a/b/c').glob('**', '*', @flags)
         | 
| 102 116 | 
             
                end
         | 
| 103 117 | 
             
              end
         | 
| 118 | 
            +
             | 
| 119 | 
            +
              describe "path parts" do
         | 
| 120 | 
            +
                describe "ascend" do
         | 
| 121 | 
            +
                  before do
         | 
| 122 | 
            +
                    @path = FSPath('/a/b/c')
         | 
| 123 | 
            +
                    @ascendants = %w[/a/b/c /a/b /a /].map(&method(:FSPath))
         | 
| 124 | 
            +
                  end
         | 
| 125 | 
            +
             | 
| 126 | 
            +
                  it "should return list of ascendants" do
         | 
| 127 | 
            +
                    @path.ascend.should == @ascendants
         | 
| 128 | 
            +
                  end
         | 
| 129 | 
            +
             | 
| 130 | 
            +
                  it "should yield and return list of ascendants if called with block" do
         | 
| 131 | 
            +
                    ascendants = []
         | 
| 132 | 
            +
                    @path.ascend do |path|
         | 
| 133 | 
            +
                      ascendants << path
         | 
| 134 | 
            +
                    end.should == @ascendants
         | 
| 135 | 
            +
                    ascendants.should == @ascendants
         | 
| 136 | 
            +
                  end
         | 
| 137 | 
            +
                end
         | 
| 138 | 
            +
             | 
| 139 | 
            +
                describe "descend" do
         | 
| 140 | 
            +
                  before do
         | 
| 141 | 
            +
                    @path = FSPath('/a/b/c')
         | 
| 142 | 
            +
                    @descendants = %w[/ /a /a/b /a/b/c].map(&method(:FSPath))
         | 
| 143 | 
            +
                  end
         | 
| 144 | 
            +
             | 
| 145 | 
            +
                  it "should return list of descendants" do
         | 
| 146 | 
            +
                    @path.descend.should == @descendants
         | 
| 147 | 
            +
                  end
         | 
| 148 | 
            +
             | 
| 149 | 
            +
                  it "should yield and return list of descendants if called with block" do
         | 
| 150 | 
            +
                    descendants = []
         | 
| 151 | 
            +
                    @path.descend do |path|
         | 
| 152 | 
            +
                      descendants << path
         | 
| 153 | 
            +
                    end.should == @descendants
         | 
| 154 | 
            +
                    descendants.should == @descendants
         | 
| 155 | 
            +
                  end
         | 
| 156 | 
            +
                end
         | 
| 157 | 
            +
             | 
| 158 | 
            +
                describe "parts" do
         | 
| 159 | 
            +
                  it "should return path parts as strings" do
         | 
| 160 | 
            +
                    FSPath('/a/b/c').parts.should == %w[/ a b c]
         | 
| 161 | 
            +
                  end
         | 
| 162 | 
            +
                end
         | 
| 163 | 
            +
              end
         | 
| 104 164 | 
             
            end
         | 
    
        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:  | 
| 4 | 
            +
              hash: 27
         | 
| 5 5 | 
             
              prerelease: false
         | 
| 6 6 | 
             
              segments: 
         | 
| 7 7 | 
             
              - 0
         | 
| 8 | 
            +
              - 1
         | 
| 8 9 | 
             
              - 0
         | 
| 9 | 
            -
               | 
| 10 | 
            -
              version: 0.0.3
         | 
| 10 | 
            +
              version: 0.1.0
         | 
| 11 11 | 
             
            platform: darwin
         | 
| 12 12 | 
             
            authors: 
         | 
| 13 13 | 
             
            - Boba Fat
         | 
| @@ -15,12 +15,13 @@ autorequire: | |
| 15 15 | 
             
            bindir: bin
         | 
| 16 16 | 
             
            cert_chain: []
         | 
| 17 17 |  | 
| 18 | 
            -
            date: 2010-12- | 
| 18 | 
            +
            date: 2010-12-14 00:00:00 +03:00
         | 
| 19 19 | 
             
            default_executable: 
         | 
| 20 20 | 
             
            dependencies: 
         | 
| 21 21 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 22 | 
            +
              name: xattr
         | 
| 22 23 | 
             
              prerelease: false
         | 
| 23 | 
            -
               | 
| 24 | 
            +
              requirement: &id001 !ruby/object:Gem::Requirement 
         | 
| 24 25 | 
             
                none: false
         | 
| 25 26 | 
             
                requirements: 
         | 
| 26 27 | 
             
                - - ">="
         | 
| @@ -29,60 +30,56 @@ dependencies: | |
| 29 30 | 
             
                    segments: 
         | 
| 30 31 | 
             
                    - 0
         | 
| 31 32 | 
             
                    version: "0"
         | 
| 32 | 
            -
              name: rb-appscript
         | 
| 33 | 
            -
              requirement: *id001
         | 
| 34 33 | 
             
              type: :runtime
         | 
| 34 | 
            +
              version_requirements: *id001
         | 
| 35 35 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 36 | 
            +
              name: rb-appscript
         | 
| 36 37 | 
             
              prerelease: false
         | 
| 37 | 
            -
               | 
| 38 | 
            +
              requirement: &id002 !ruby/object:Gem::Requirement 
         | 
| 38 39 | 
             
                none: false
         | 
| 39 40 | 
             
                requirements: 
         | 
| 40 | 
            -
                - -  | 
| 41 | 
            +
                - - ">="
         | 
| 41 42 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 42 | 
            -
                    hash:  | 
| 43 | 
            +
                    hash: 3
         | 
| 43 44 | 
             
                    segments: 
         | 
| 44 | 
            -
                    - 2
         | 
| 45 | 
            -
                    - 1
         | 
| 46 45 | 
             
                    - 0
         | 
| 47 | 
            -
                    version:  | 
| 48 | 
            -
               | 
| 49 | 
            -
               | 
| 50 | 
            -
              type: :development
         | 
| 46 | 
            +
                    version: "0"
         | 
| 47 | 
            +
              type: :runtime
         | 
| 48 | 
            +
              version_requirements: *id002
         | 
| 51 49 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 50 | 
            +
              name: jeweler
         | 
| 52 51 | 
             
              prerelease: false
         | 
| 53 | 
            -
               | 
| 52 | 
            +
              requirement: &id003 !ruby/object:Gem::Requirement 
         | 
| 54 53 | 
             
                none: false
         | 
| 55 54 | 
             
                requirements: 
         | 
| 56 55 | 
             
                - - ~>
         | 
| 57 56 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 58 | 
            -
                    hash:  | 
| 57 | 
            +
                    hash: 1
         | 
| 59 58 | 
             
                    segments: 
         | 
| 60 59 | 
             
                    - 1
         | 
| 61 | 
            -
                    -  | 
| 62 | 
            -
                    -  | 
| 63 | 
            -
                    version: 1. | 
| 64 | 
            -
              name: bundler
         | 
| 65 | 
            -
              requirement: *id003
         | 
| 60 | 
            +
                    - 5
         | 
| 61 | 
            +
                    - 1
         | 
| 62 | 
            +
                    version: 1.5.1
         | 
| 66 63 | 
             
              type: :development
         | 
| 64 | 
            +
              version_requirements: *id003
         | 
| 67 65 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 66 | 
            +
              name: rake-gem-ghost
         | 
| 68 67 | 
             
              prerelease: false
         | 
| 69 | 
            -
               | 
| 68 | 
            +
              requirement: &id004 !ruby/object:Gem::Requirement 
         | 
| 70 69 | 
             
                none: false
         | 
| 71 70 | 
             
                requirements: 
         | 
| 72 | 
            -
                - -  | 
| 71 | 
            +
                - - ">="
         | 
| 73 72 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 74 | 
            -
                    hash:  | 
| 73 | 
            +
                    hash: 3
         | 
| 75 74 | 
             
                    segments: 
         | 
| 76 | 
            -
                    -  | 
| 77 | 
            -
                     | 
| 78 | 
            -
                    - 1
         | 
| 79 | 
            -
                    version: 1.5.1
         | 
| 80 | 
            -
              name: jeweler
         | 
| 81 | 
            -
              requirement: *id004
         | 
| 75 | 
            +
                    - 0
         | 
| 76 | 
            +
                    version: "0"
         | 
| 82 77 | 
             
              type: :development
         | 
| 78 | 
            +
              version_requirements: *id004
         | 
| 83 79 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 80 | 
            +
              name: rspec
         | 
| 84 81 | 
             
              prerelease: false
         | 
| 85 | 
            -
               | 
| 82 | 
            +
              requirement: &id005 !ruby/object:Gem::Requirement 
         | 
| 86 83 | 
             
                none: false
         | 
| 87 84 | 
             
                requirements: 
         | 
| 88 85 | 
             
                - - ">="
         | 
| @@ -91,9 +88,8 @@ dependencies: | |
| 91 88 | 
             
                    segments: 
         | 
| 92 89 | 
             
                    - 0
         | 
| 93 90 | 
             
                    version: "0"
         | 
| 94 | 
            -
              name: rcov
         | 
| 95 | 
            -
              requirement: *id005
         | 
| 96 91 | 
             
              type: :development
         | 
| 92 | 
            +
              version_requirements: *id005
         | 
| 97 93 | 
             
            description: 
         | 
| 98 94 | 
             
            email: 
         | 
| 99 95 | 
             
            executables: []
         | 
| @@ -103,21 +99,25 @@ extensions: [] | |
| 103 99 | 
             
            extra_rdoc_files: 
         | 
| 104 100 | 
             
            - LICENSE.txt
         | 
| 105 101 | 
             
            - README.rdoc
         | 
| 102 | 
            +
            - TODO
         | 
| 106 103 | 
             
            files: 
         | 
| 107 | 
            -
            - Gemfile
         | 
| 108 | 
            -
            - Gemfile.lock
         | 
| 109 104 | 
             
            - LICENSE.txt
         | 
| 110 105 | 
             
            - README.rdoc
         | 
| 111 106 | 
             
            - Rakefile
         | 
| 107 | 
            +
            - TODO
         | 
| 112 108 | 
             
            - VERSION
         | 
| 113 109 | 
             
            - fspath.gemspec
         | 
| 114 110 | 
             
            - lib/fspath.rb
         | 
| 111 | 
            +
            - lib/fspath/darwin.rb
         | 
| 112 | 
            +
            - lib/fspath/xattr.rb
         | 
| 113 | 
            +
            - spec/fspath/darwin_spec.rb
         | 
| 114 | 
            +
            - spec/fspath/xattr_spec.rb
         | 
| 115 115 | 
             
            - spec/fspath_spec.rb
         | 
| 116 116 | 
             
            - spec/spec_helper.rb
         | 
| 117 117 | 
             
            has_rdoc: true
         | 
| 118 118 | 
             
            homepage: http://github.com/toy/fspath
         | 
| 119 | 
            -
            licenses:  | 
| 120 | 
            -
             | 
| 119 | 
            +
            licenses: 
         | 
| 120 | 
            +
            - MIT
         | 
| 121 121 | 
             
            post_install_message: 
         | 
| 122 122 | 
             
            rdoc_options: []
         | 
| 123 123 |  | 
| @@ -149,5 +149,7 @@ signing_key: | |
| 149 149 | 
             
            specification_version: 3
         | 
| 150 150 | 
             
            summary: Better than Pathname
         | 
| 151 151 | 
             
            test_files: 
         | 
| 152 | 
            +
            - spec/fspath/darwin_spec.rb
         | 
| 153 | 
            +
            - spec/fspath/xattr_spec.rb
         | 
| 152 154 | 
             
            - spec/fspath_spec.rb
         | 
| 153 155 | 
             
            - spec/spec_helper.rb
         | 
    
        data/Gemfile
    DELETED
    
    
    
        data/Gemfile.lock
    DELETED
    
    | @@ -1,28 +0,0 @@ | |
| 1 | 
            -
            GEM
         | 
| 2 | 
            -
              remote: http://rubygems.org/
         | 
| 3 | 
            -
              specs:
         | 
| 4 | 
            -
                diff-lcs (1.1.2)
         | 
| 5 | 
            -
                git (1.2.5)
         | 
| 6 | 
            -
                jeweler (1.5.1)
         | 
| 7 | 
            -
                  bundler (~> 1.0.0)
         | 
| 8 | 
            -
                  git (>= 1.2.5)
         | 
| 9 | 
            -
                  rake
         | 
| 10 | 
            -
                rake (0.8.7)
         | 
| 11 | 
            -
                rcov (0.9.9)
         | 
| 12 | 
            -
                rspec (2.1.0)
         | 
| 13 | 
            -
                  rspec-core (~> 2.1.0)
         | 
| 14 | 
            -
                  rspec-expectations (~> 2.1.0)
         | 
| 15 | 
            -
                  rspec-mocks (~> 2.1.0)
         | 
| 16 | 
            -
                rspec-core (2.1.0)
         | 
| 17 | 
            -
                rspec-expectations (2.1.0)
         | 
| 18 | 
            -
                  diff-lcs (~> 1.1.2)
         | 
| 19 | 
            -
                rspec-mocks (2.1.0)
         | 
| 20 | 
            -
             | 
| 21 | 
            -
            PLATFORMS
         | 
| 22 | 
            -
              ruby
         | 
| 23 | 
            -
             | 
| 24 | 
            -
            DEPENDENCIES
         | 
| 25 | 
            -
              bundler (~> 1.0.0)
         | 
| 26 | 
            -
              jeweler (~> 1.5.1)
         | 
| 27 | 
            -
              rcov
         | 
| 28 | 
            -
              rspec (~> 2.1.0)
         |