faster_path 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2888d77818d98df4b10a00e1b964b4a023b6b812
4
- data.tar.gz: 0d09f3f2e82724089f2fcdc2a434fa6bd874c14d
3
+ metadata.gz: 145d0ead52899b0287c3854351371ed572753abf
4
+ data.tar.gz: 26a96e5e5120c5697f44d1dd2aae6d0780f361c0
5
5
  SHA512:
6
- metadata.gz: ec703f8a01cbb66b705154cfb779fde1c00b6374185d7dfe2ebdd0302ae65d825df1f25f84beb79014928f8acffb5a01d9edc8ccabdb252ca8bf1212ba76f00d
7
- data.tar.gz: e2d3c27b7606e9d60c0491d9848850f45d27ced5762251ec54f8768756704940723abc0f38682cbaf79a617c7d9635883e956384f141354260a9c8172aff70c0
6
+ metadata.gz: d05a6334782f4994a0ff6d25f4b9e3851c08fc26dec8e32e8533ea459f602fe9df0ec2ac8a8d557ad4d278b713d7073db0ec641754f0537416e9bfa1ee3decf6
7
+ data.tar.gz: 98e70ecc789fbdb19d945f07a0f3c2ab2844c719ef7d41794aace5e659a3b9fa0353d4ca409bea0a28f1549d0db698f494a1d819d7de2cf2158a5fa6def61dd9
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # FasterPath
2
2
  [![Gem Version](https://badge.fury.io/rb/faster_path.svg)](https://badge.fury.io/rb/faster_path)
3
3
  [![Build Status](https://travis-ci.org/danielpclark/faster_path.svg?branch=master)](https://travis-ci.org/danielpclark/faster_path)
4
+ [![Tweet This](https://raw.githubusercontent.com/danielpclark/faster_path/master/assets/tweet.png)](https://twitter.com/share?url=https%3A%2F%2Fgithub.com%2Fdanielpclark%2Ffaster_path&via=6ftdan&hashtags=Ruby&text=You%20could%20save%2015%25%20or%20more%20on%20website%20load%20time%20by%20switching%20to%20the%20FasterPath%20gem.)
4
5
 
5
6
  The primary **GOAL** of this project is to improve performance in the most heavily used areas of Ruby as
6
7
  path relation and file lookup is currently a huge bottleneck in performance. As this is the case the
@@ -86,6 +87,7 @@ Current methods implemented:
86
87
  |---|---|:---:|
87
88
  | `FasterPath.absolute?` | `Pathname#absolute?` | 1234.6% |
88
89
  | `FasterPath.chop_basename` | `Pathname#chop_basename` | 27.5% |
90
+ | `FasterPath.relative?` | `Pathname#relative?` | 1262.3% |
89
91
  | `FasterPath.blank?` | | |
90
92
 
91
93
  You may choose to use the methods directly, or scope change to rewrite behavior on the
@@ -109,11 +111,19 @@ require "faster_path/optional/monkeypatches"
109
111
  FasterPath.sledgehammer_everything!
110
112
  ```
111
113
 
112
- ## Development
114
+ ## Getting Started with Development
113
115
 
114
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
116
+ The primary methods to target are mostly listed in the **Why** section above. You may find the Ruby
117
+ source code useful for Pathname's [Ruby source](https://github.com/ruby/ruby/blob/32674b167bddc0d737c38f84722986b0f228b44b/ext/pathname/lib/pathname.rb),
118
+ [C source](https://github.com/ruby/ruby/blob/32674b167bddc0d737c38f84722986b0f228b44b/ext/pathname/pathname.c), and
119
+ [tests](https://github.com/ruby/ruby/blob/32674b167bddc0d737c38f84722986b0f228b44b/test/pathname/test_pathname.rb).
115
120
 
116
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
121
+ Methods will be written as exclusively in Rust as possible. Even just writing a **not** in Ruby with a
122
+ Rust method like `!absolute?` _(not absolute)_ drops 39% of the performance already gained in Rust.
123
+ Whenever feasible implement it in Rust.
124
+
125
+ After checking out the repo, make sure you have Rust installed. Then run `bundle && rake build_lib` .
126
+ Then, run `rake test` to run the tests, and `rake bench` for benchmarks.
117
127
 
118
128
  ## Contributing
119
129
 
data/faster_path.gemspec CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |spec|
13
13
  spec.homepage = "https://github.com/danielpclark/faster_path"
14
14
  spec.license = "MIT OR Apache-2.0"
15
15
 
16
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|assets)/}) }
17
17
  spec.bindir = "exe"
18
18
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
19
  spec.extensions << "ext/faster_path/extconf.rb"
data/lib/faster_path.rb CHANGED
@@ -8,6 +8,10 @@ module FasterPath
8
8
  Rust.is_absolute(pth)
9
9
  end
10
10
 
11
+ def self.relative?(pth)
12
+ Rust.is_relative(pth)
13
+ end
14
+
11
15
  # Spec to Pathname#chop_basename
12
16
  # WARNING! Pathname#chop_basename in STDLIB doesn't handle blank strings correctly!
13
17
  # This implementation correctly handles blank strings just as Pathname had intended
@@ -33,6 +37,7 @@ module FasterPath
33
37
  "#{File.expand_path("../target/release/", File.dirname(__FILE__))}/#{prefix}faster_path.#{FFI::Platform::LIBSUFFIX}"
34
38
  end
35
39
  attach_function :is_absolute, [ :string ], :bool
40
+ attach_function :is_relative, [ :string ], :bool
36
41
  attach_function :is_blank, [ :string ], :bool
37
42
  attach_function :basename, [ :string ], :string
38
43
  attach_function :dirname, [ :string ], :string
@@ -9,6 +9,10 @@ module FasterPath
9
9
  FasterPath.chop_basename(pth)
10
10
  end
11
11
  private :chop_basename
12
+
13
+ def relative?
14
+ FasterPath.relative?(@path)
15
+ end
12
16
  end
13
17
  end
14
18
  end
@@ -9,6 +9,10 @@ module FasterPath
9
9
  FasterPath.chop_basename(pth)
10
10
  end
11
11
  private :chop_basename
12
+
13
+ def relative?
14
+ FasterPath.relative?(@path)
15
+ end
12
16
  end
13
17
  end
14
18
  end
@@ -1,3 +1,3 @@
1
1
  module FasterPath
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
data/src/lib.rs CHANGED
@@ -24,6 +24,19 @@ pub extern fn is_absolute(string: *const c_char) -> bool {
24
24
  r_str.chars().next().unwrap_or("muffins".chars().next().unwrap()) == MAIN_SEPARATOR
25
25
  }
26
26
 
27
+ #[no_mangle]
28
+ pub extern fn is_relative(string: *const c_char) -> bool {
29
+ let c_str = unsafe {
30
+ assert!(!string.is_null());
31
+
32
+ CStr::from_ptr(string)
33
+ };
34
+
35
+ let r_str = str::from_utf8(c_str.to_bytes()).unwrap_or("");
36
+
37
+ r_str.chars().next().unwrap_or("muffins".chars().next().unwrap()) != MAIN_SEPARATOR
38
+ }
39
+
27
40
  #[no_mangle]
28
41
  pub extern fn is_blank(string: *const c_char) -> bool {
29
42
  let c_str = unsafe {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faster_path
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel P. Clark
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-06-10 00:00:00.000000000 Z
11
+ date: 2016-06-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi