rubysl-digest 2.0.3 → 2.0.7

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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +8 -10
  3. data/MRI_LICENSE +56 -0
  4. data/ext/rubysl/digest/bubblebabble/bubblebabble.c +27 -28
  5. data/ext/rubysl/digest/defs.h +1 -1
  6. data/ext/rubysl/digest/digest.c +142 -58
  7. data/ext/rubysl/digest/digest.h +25 -5
  8. data/ext/rubysl/digest/digest_conf.rb +28 -0
  9. data/ext/rubysl/digest/extconf.rb +1 -1
  10. data/ext/rubysl/digest/md5/extconf.rb +3 -13
  11. data/ext/rubysl/digest/md5/md5.c +9 -7
  12. data/ext/rubysl/digest/md5/md5.h +3 -3
  13. data/ext/rubysl/digest/md5/md5cc.h +12 -0
  14. data/ext/rubysl/digest/md5/md5init.c +12 -5
  15. data/ext/rubysl/digest/md5/md5ossl.h +4 -2
  16. data/ext/rubysl/digest/rmd160/extconf.rb +3 -12
  17. data/ext/rubysl/digest/rmd160/rmd160.c +12 -6
  18. data/ext/rubysl/digest/rmd160/rmd160.h +3 -3
  19. data/ext/rubysl/digest/rmd160/rmd160init.c +10 -5
  20. data/ext/rubysl/digest/rmd160/rmd160ossl.h +3 -2
  21. data/ext/rubysl/digest/sha1/extconf.rb +3 -12
  22. data/ext/rubysl/digest/sha1/sha1.c +5 -3
  23. data/ext/rubysl/digest/sha1/sha1.h +3 -3
  24. data/ext/rubysl/digest/sha1/sha1cc.h +14 -0
  25. data/ext/rubysl/digest/sha1/sha1init.c +12 -5
  26. data/ext/rubysl/digest/sha1/sha1ossl.h +4 -2
  27. data/ext/rubysl/digest/sha2/extconf.rb +7 -8
  28. data/ext/rubysl/digest/sha2/sha2.c +235 -73
  29. data/ext/rubysl/digest/sha2/sha2.h +142 -26
  30. data/ext/rubysl/digest/sha2/sha2cc.h +31 -0
  31. data/ext/rubysl/digest/sha2/sha2init.c +12 -4
  32. data/ext/rubysl/digest/sha2/sha2ossl.h +27 -0
  33. data/ext/rubysl/openssl/deprecation.rb +21 -0
  34. data/lib/digest/sha2.rb +42 -9
  35. data/lib/rubysl/digest/digest.rb +27 -7
  36. data/lib/rubysl/digest/version.rb +1 -1
  37. data/spec/fixtures/dir/common.rb +171 -0
  38. data/spec/md5/file_spec.rb +1 -1
  39. data/spec/sha1/file_spec.rb +1 -1
  40. data/spec/sha256/file_spec.rb +1 -1
  41. data/spec/sha384/file_spec.rb +1 -1
  42. data/spec/sha512/file_spec.rb +1 -1
  43. data/spec/shared/file/read.rb +21 -0
  44. metadata +15 -5
  45. data/ext/rubysl/digest/bubblebabble/depend +0 -3
  46. data/ext/rubysl/digest/bubblebabble/extconf.h +0 -4
@@ -1,6 +1,9 @@
1
1
  require 'digest/digest'
2
2
 
3
3
  module Digest
4
+ # A mutex for Digest().
5
+ REQUIRE_MUTEX = Mutex.new
6
+
4
7
  def self.const_missing(name) # :nodoc:
5
8
  case name
6
9
  when :SHA256, :SHA384, :SHA512
@@ -21,12 +24,14 @@ module Digest
21
24
  end
22
25
 
23
26
  class ::Digest::Class
24
- # creates a digest object and reads a given file, _name_.
27
+ # Creates a digest object and reads a given file, _name_.
28
+ # Optional arguments are passed to the constructor of the digest
29
+ # class.
25
30
  #
26
31
  # p Digest::SHA256.file("X11R6.8.2-src.tar.bz2").hexdigest
27
32
  # # => "f02e3c85572dc9ad7cb77c2a638e3be24cc1b5bea9fdbb0b0299c9668475c534"
28
- def self.file(name)
29
- new.file(name)
33
+ def self.file(name, *args)
34
+ new(*args).file(name)
30
35
  end
31
36
 
32
37
  # Returns the base64 encoded hash value of a given _string_. The
@@ -38,7 +43,7 @@ module Digest
38
43
  end
39
44
 
40
45
  module Instance
41
- # updates the digest with the contents of a given file _name_ and
46
+ # Updates the digest with the contents of a given file _name_ and
42
47
  # returns self.
43
48
  def file(name)
44
49
  File.open(name, "rb") {|f|
@@ -74,15 +79,30 @@ end
74
79
  # call-seq:
75
80
  # Digest(name) -> digest_subclass
76
81
  #
77
- # Returns a Digest subclass by +name+.
82
+ # Returns a Digest subclass by +name+ in a thread-safe manner even
83
+ # when on-demand loading is involved.
78
84
  #
79
85
  # require 'digest'
80
86
  #
81
87
  # Digest("MD5")
82
88
  # # => Digest::MD5
83
89
  #
84
- # Digest("Foo")
90
+ # Digest(:SHA256)
91
+ # # => Digest::SHA256
92
+ #
93
+ # Digest(:Foo)
85
94
  # # => LoadError: library not found for class Digest::Foo -- digest/foo
86
95
  def Digest(name)
87
- Digest.const_get(name)
96
+ const = name.to_sym
97
+ Digest::REQUIRE_MUTEX.synchronize {
98
+ # Ignore autoload's because it is void when we have #const_missing
99
+ Digest.const_missing(const)
100
+ }
101
+ rescue LoadError
102
+ # Constants do not necessarily rely on digest/*.
103
+ if Digest.const_defined?(const)
104
+ Digest.const_get(const)
105
+ else
106
+ raise
107
+ end
88
108
  end
@@ -1,5 +1,5 @@
1
1
  module RubySL
2
2
  module Digest
3
- VERSION = "2.0.3"
3
+ VERSION = "2.0.7"
4
4
  end
5
5
  end
@@ -0,0 +1,171 @@
1
+ # encoding: utf-8
2
+
3
+ module DirSpecs
4
+ def self.mock_dir(dirs = ['dir_specs_mock'])
5
+ @mock_dir ||= tmp("")
6
+ File.join @mock_dir, dirs
7
+ end
8
+
9
+ def self.nonexistent
10
+ name = File.join mock_dir, "nonexistent00"
11
+ name = name.next while File.exist? name
12
+ File.join mock_dir, name
13
+ end
14
+
15
+ # TODO: make these relative to the mock_dir
16
+ def self.clear_dirs
17
+ begin
18
+ kcode, $KCODE = $KCODE, 'u'
19
+ [ 'nonexisting',
20
+ 'default_perms',
21
+ 'reduced',
22
+ 'always_returns_0',
23
+ '???',
24
+ [0xe9].pack('U')
25
+ ].each do |dir|
26
+ begin
27
+ Dir.rmdir dir
28
+ rescue
29
+ end
30
+ end
31
+ ensure
32
+ $KCODE = kcode
33
+ end
34
+ end
35
+
36
+ # The names of the fixture directories and files used by
37
+ # various Dir specs.
38
+ def self.mock_dir_files
39
+ unless @mock_dir_files
40
+ @mock_dir_files = %w[
41
+ .dotfile
42
+ .dotsubdir/.dotfile
43
+ .dotsubdir/nondotfile
44
+
45
+ deeply/.dotfile
46
+ deeply/nested/.dotfile.ext
47
+ deeply/nested/directory/structure/.ext
48
+ deeply/nested/directory/structure/bar
49
+ deeply/nested/directory/structure/baz
50
+ deeply/nested/directory/structure/file_one
51
+ deeply/nested/directory/structure/file_one.ext
52
+ deeply/nested/directory/structure/foo
53
+ deeply/nondotfile
54
+
55
+ file_one.ext
56
+ file_two.ext
57
+
58
+ dir_filename_ordering
59
+ dir/filename_ordering
60
+
61
+ nondotfile
62
+
63
+ subdir_one/.dotfile
64
+ subdir_one/nondotfile
65
+ subdir_two/nondotfile
66
+ subdir_two/nondotfile.ext
67
+
68
+ brace/a
69
+ brace/a.js
70
+ brace/a.erb
71
+ brace/a.js.rjs
72
+ brace/a.html.erb
73
+
74
+ special/+
75
+
76
+ special/^
77
+ special/$
78
+
79
+ special/(
80
+ special/)
81
+ special/[
82
+ special/]
83
+ special/{
84
+ special/}
85
+
86
+ special/test{1}/file[1]
87
+
88
+ special/こんにちは.txt
89
+ ]
90
+
91
+ platform_is_not :windows do
92
+ @mock_dir_files += %w[
93
+ special/*
94
+ special/?
95
+
96
+ special/|
97
+ ]
98
+ end
99
+ end
100
+
101
+ @mock_dir_files
102
+ end
103
+
104
+ def self.create_mock_dirs
105
+ umask = File.umask 0
106
+ mock_dir_files.each do |name|
107
+ file = File.join mock_dir, name
108
+ mkdir_p File.dirname(file)
109
+ touch file
110
+ end
111
+ File.umask umask
112
+ end
113
+
114
+ def self.delete_mock_dirs
115
+ rm_r mock_dir
116
+ end
117
+
118
+ def self.mock_rmdir(*dirs)
119
+ mock_dir ['rmdir_dirs'].concat(dirs)
120
+ end
121
+
122
+ def self.rmdir_dirs(create = true)
123
+ dirs = %w[
124
+ empty
125
+ nonempty
126
+ nonempty/child
127
+ noperm
128
+ noperm/child
129
+ ]
130
+
131
+ base_dir = mock_dir ['rmdir_dirs']
132
+
133
+ dirs.reverse_each do |d|
134
+ dir = File.join base_dir, d
135
+ if File.exists? dir
136
+ File.chmod 0777, dir
137
+ rm_r dir
138
+ end
139
+ end
140
+ rm_r base_dir
141
+
142
+ if create
143
+ dirs.each do |d|
144
+ dir = File.join base_dir, d
145
+ unless File.exists? dir
146
+ mkdir_p dir
147
+ File.chmod 0777, dir
148
+ end
149
+ end
150
+ end
151
+ end
152
+
153
+ def self.expected_paths
154
+ %w[
155
+ .
156
+ ..
157
+ .dotfile
158
+ .dotsubdir
159
+ brace
160
+ deeply
161
+ dir
162
+ dir_filename_ordering
163
+ file_one.ext
164
+ file_two.ext
165
+ nondotfile
166
+ special
167
+ subdir_one
168
+ subdir_two
169
+ ]
170
+ end
171
+ end
@@ -1,5 +1,5 @@
1
1
  require File.expand_path('../shared/constants', __FILE__)
2
- require File.expand_path('../../../../core/file/shared/read', __FILE__)
2
+ require File.expand_path('../../shared/file/read', __FILE__)
3
3
 
4
4
  describe "Digest::MD5.file" do
5
5
 
@@ -1,5 +1,5 @@
1
1
  require File.expand_path('../shared/constants', __FILE__)
2
- require File.expand_path('../../../../core/file/shared/read', __FILE__)
2
+ require File.expand_path('../../shared/file/read', __FILE__)
3
3
 
4
4
  describe "Digest::SHA1.file" do
5
5
 
@@ -1,5 +1,5 @@
1
1
  require File.expand_path('../shared/constants', __FILE__)
2
- require File.expand_path('../../../../core/file/shared/read', __FILE__)
2
+ require File.expand_path('../../shared/file/read', __FILE__)
3
3
 
4
4
  describe "Digest::SHA256.file" do
5
5
 
@@ -1,5 +1,5 @@
1
1
  require File.expand_path('../shared/constants', __FILE__)
2
- require File.expand_path('../../../../core/file/shared/read', __FILE__)
2
+ require File.expand_path('../../shared/file/read', __FILE__)
3
3
 
4
4
  describe "Digest::SHA384.file" do
5
5
 
@@ -1,5 +1,5 @@
1
1
  require File.expand_path('../shared/constants', __FILE__)
2
- require File.expand_path('../../../../core/file/shared/read', __FILE__)
2
+ require File.expand_path('../../shared/file/read', __FILE__)
3
3
 
4
4
  describe "Digest::SHA512.file" do
5
5
 
@@ -0,0 +1,21 @@
1
+ require File.expand_path('../../../fixtures/dir/common', __FILE__)
2
+
3
+ describe :file_read_directory, :shared => true do
4
+ platform_is :darwin, :linux do
5
+ it "raises an Errno::EISDIR when passed a path that is a directory" do
6
+ lambda { @object.send(@method, ".") }.should raise_error(Errno::EISDIR)
7
+ end
8
+ end
9
+
10
+ platform_is :bsd do
11
+ it "does not raises any exception when passed a path that is a directory" do
12
+ lambda { @object.send(@method, ".") }.should_not raise_error
13
+ end
14
+ end
15
+
16
+ platform_is :windows do
17
+ it "raises an Errno::EACCES when passed a path that is a directory" do
18
+ lambda { @object.send(@method, ".") }.should raise_error(Errno::EACCES)
19
+ end
20
+ end
21
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubysl-digest
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.3
4
+ version: 2.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Shirai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-06 00:00:00.000000000 Z
11
+ date: 2015-05-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -83,22 +83,23 @@ files:
83
83
  - ".travis.yml"
84
84
  - Gemfile
85
85
  - LICENSE
86
+ - MRI_LICENSE
86
87
  - README.md
87
88
  - Rakefile
88
89
  - ext/rubysl/digest/bubblebabble/.gitignore
89
90
  - ext/rubysl/digest/bubblebabble/bubblebabble.c
90
91
  - ext/rubysl/digest/bubblebabble/bubblebabble.h
91
- - ext/rubysl/digest/bubblebabble/depend
92
- - ext/rubysl/digest/bubblebabble/extconf.h
93
92
  - ext/rubysl/digest/bubblebabble/extconf.rb
94
93
  - ext/rubysl/digest/defs.h
95
94
  - ext/rubysl/digest/digest.c
96
95
  - ext/rubysl/digest/digest.h
96
+ - ext/rubysl/digest/digest_conf.rb
97
97
  - ext/rubysl/digest/extconf.rb
98
98
  - ext/rubysl/digest/md5/.gitignore
99
99
  - ext/rubysl/digest/md5/extconf.rb
100
100
  - ext/rubysl/digest/md5/md5.c
101
101
  - ext/rubysl/digest/md5/md5.h
102
+ - ext/rubysl/digest/md5/md5cc.h
102
103
  - ext/rubysl/digest/md5/md5init.c
103
104
  - ext/rubysl/digest/md5/md5ossl.c
104
105
  - ext/rubysl/digest/md5/md5ossl.h
@@ -113,6 +114,7 @@ files:
113
114
  - ext/rubysl/digest/sha1/extconf.rb
114
115
  - ext/rubysl/digest/sha1/sha1.c
115
116
  - ext/rubysl/digest/sha1/sha1.h
117
+ - ext/rubysl/digest/sha1/sha1cc.h
116
118
  - ext/rubysl/digest/sha1/sha1init.c
117
119
  - ext/rubysl/digest/sha1/sha1ossl.c
118
120
  - ext/rubysl/digest/sha1/sha1ossl.h
@@ -120,7 +122,10 @@ files:
120
122
  - ext/rubysl/digest/sha2/extconf.rb
121
123
  - ext/rubysl/digest/sha2/sha2.c
122
124
  - ext/rubysl/digest/sha2/sha2.h
125
+ - ext/rubysl/digest/sha2/sha2cc.h
123
126
  - ext/rubysl/digest/sha2/sha2init.c
127
+ - ext/rubysl/digest/sha2/sha2ossl.h
128
+ - ext/rubysl/openssl/deprecation.rb
124
129
  - lib/digest.rb
125
130
  - lib/digest/bubblebabble.rb
126
131
  - lib/digest/hmac.rb
@@ -132,6 +137,7 @@ files:
132
137
  - lib/rubysl/digest/digest.rb
133
138
  - lib/rubysl/digest/version.rb
134
139
  - rubysl-digest.gemspec
140
+ - spec/fixtures/dir/common.rb
135
141
  - spec/hexencode_spec.rb
136
142
  - spec/md5/append_spec.rb
137
143
  - spec/md5/block_length_spec.rb
@@ -209,6 +215,7 @@ files:
209
215
  - spec/sha512/size_spec.rb
210
216
  - spec/sha512/to_s_spec.rb
211
217
  - spec/sha512/update_spec.rb
218
+ - spec/shared/file/read.rb
212
219
  homepage: https://github.com/rubysl/rubysl-digest
213
220
  licenses:
214
221
  - BSD
@@ -229,11 +236,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
229
236
  version: '0'
230
237
  requirements: []
231
238
  rubyforge_project:
232
- rubygems_version: 2.2.0
239
+ rubygems_version: 2.4.5
233
240
  signing_key:
234
241
  specification_version: 4
235
242
  summary: Ruby standard library digest.
236
243
  test_files:
244
+ - spec/fixtures/dir/common.rb
237
245
  - spec/hexencode_spec.rb
238
246
  - spec/md5/append_spec.rb
239
247
  - spec/md5/block_length_spec.rb
@@ -311,3 +319,5 @@ test_files:
311
319
  - spec/sha512/size_spec.rb
312
320
  - spec/sha512/to_s_spec.rb
313
321
  - spec/sha512/update_spec.rb
322
+ - spec/shared/file/read.rb
323
+ has_rdoc:
@@ -1,3 +0,0 @@
1
- bubblebabble.o: bubblebabble.c $(srcdir)/../digest.h $(hdrdir)/ruby.h \
2
- $(topdir)/config.h $(hdrdir)/defines.h $(hdrdir)/intern.h \
3
- $(srcdir)/../defs.h
@@ -1,4 +0,0 @@
1
- #ifndef EXTCONF_H
2
- #define EXTCONF_H
3
- #define HAVE_CONFIG_H 1
4
- #endif