file_writer 0.1.2 → 0.2.0

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