faster_path 0.0.5 → 0.0.6

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.
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