file_writer 0.1.2 → 0.2.0

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
- SHA1:
3
- metadata.gz: 5eddfcd731230df1ecb8a42b44c94eb65ce81aec
4
- data.tar.gz: 85167825bd894a4af7284fc7c3b37db181df84e5
2
+ SHA256:
3
+ metadata.gz: 445e82401dfafee9e2f5649b49311c4f6c9732741dc678d0f5ac0094142a3b1d
4
+ data.tar.gz: e5acc85f0ddf4cdcdf3160bb5729273ea26a9c35e56916a885804ba3549394d4
5
5
  SHA512:
6
- metadata.gz: 9a2993da7a7d9ed78c47a740c77035c64f62dc07aaef5ac9a8fdc68c4d30225ab27ccbd3c2d0c32deacaf0d7568f338cfeed174759d673138757869daa29eba0
7
- data.tar.gz: d8d0b398b7fa56970992ca2f8faf0eaedc0dc1a708986664075cdc9ac7012e810945bc20f5e7f31199ab544839984ac830b068cbe355bf36d81be8b0a7f0a24e
6
+ metadata.gz: 1d94b7a8b5ab8b4f11da380b052d1872da96a7b4be9b846a1db57a8ae1e9288c10fe1d9f4440438317931b83c14c6a0e46aa9f8e72825c74202d54b49507f91a
7
+ data.tar.gz: e3fe075b9bbc047b6a48fe8961b881674c122cbfb0f347ffece183dc4d86257a24f5dc8131a2217b3a369fee9630e5f8d9c56ae7195b98eebefe6e218ef4d4dd
data/.gitignore CHANGED
@@ -7,3 +7,6 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ *~
11
+ *#
12
+ /vendor/
data/file_writer.gemspec CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ["lib"]
23
23
 
24
- spec.add_development_dependency "bundler", "~> 1.13"
24
+ spec.add_development_dependency "bundler", "~> 2.1.4"
25
25
  spec.add_development_dependency "rake", "~> 10.0"
26
26
  spec.add_development_dependency "rspec", "~> 3.0"
27
27
  end
@@ -1,3 +1,3 @@
1
1
  class FileWriter
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/file_writer.rb CHANGED
@@ -15,6 +15,8 @@ class FileWriter
15
15
  @fname = fname
16
16
  end
17
17
 
18
+ SPLIT_SIZE = 65536
19
+
18
20
  # Overwrite the file
19
21
  #
20
22
  # @param String contents The new contents for the file.
@@ -25,19 +27,23 @@ class FileWriter
25
27
  existing = File.exists?(fname)
26
28
 
27
29
  if existing
28
- mode = File.stat(fname).mode
30
+ fmode = File.stat(fname).mode
29
31
  begin
30
32
  File.rename(fname, backup)
31
33
  rescue SystemCallError
32
34
  FileUtils.cp(fname,fname+"~")
33
35
  end
34
36
  else
35
- mode = nil
37
+ fmode = nil
36
38
  end
37
39
 
38
- File.open(fname, "wb+", mode) do |f|
39
- if f.syswrite(contents) != contents.bytesize
40
- raise SystemCallError.new("FileWriter#write: syswrite returned unexpected length")
40
+ File.open(fname, "wb+", fmode) do |f|
41
+ size = contents.bytesize
42
+
43
+ written = f.write(contents)
44
+
45
+ if written != size
46
+ raise SystemCallError.new("FileWriter#write: write returned unexpected length")
41
47
  end
42
48
  f.flush
43
49
  f.fsync
data/tests/latency.rb ADDED
@@ -0,0 +1,33 @@
1
+ #
2
+ # To test latency on writing large chunks of data in one go
3
+ #
4
+
5
+ $: << "../lib"
6
+
7
+ require 'benchmark'
8
+ require 'file_writer'
9
+
10
+ data = " " * (16_777_216*100 + 42)
11
+ t1 = Thread.new do
12
+ loop do
13
+ FileWriter.write("./test", data)
14
+ end
15
+ end
16
+
17
+ accum = []
18
+ t2 = Thread.new do
19
+ loop do
20
+ b = Benchmark.measure do
21
+ 100000.times do
22
+ " "*1024
23
+ end
24
+ end
25
+ accum << b.total
26
+ break if accum.length > 1000
27
+ end
28
+
29
+ p accum.sum / accum.size
30
+ end
31
+
32
+ t1.join
33
+ t2.join
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: file_writer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vidar Hokstad
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-01-22 00:00:00.000000000 Z
11
+ date: 2022-08-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.13'
19
+ version: 2.1.4
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.13'
26
+ version: 2.1.4
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -71,6 +71,7 @@ files:
71
71
  - file_writer.gemspec
72
72
  - lib/file_writer.rb
73
73
  - lib/file_writer/version.rb
74
+ - tests/latency.rb
74
75
  homepage: https://github.com/vidarh/file_writer
75
76
  licenses:
76
77
  - MIT
@@ -90,8 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
90
91
  - !ruby/object:Gem::Version
91
92
  version: '0'
92
93
  requirements: []
93
- rubyforge_project:
94
- rubygems_version: 2.5.2
94
+ rubygems_version: 3.1.4
95
95
  signing_key:
96
96
  specification_version: 4
97
97
  summary: Overwrite/replace files in a safe way with backups