dionysus 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -21,7 +21,7 @@ Installation
21
21
  Usage
22
22
  -----
23
23
 
24
- First, add "dionysus" to your Gemfile or whatever other dependency system you're using. Then, you'll need to require each file as you need them. Dionysus is setup *à la carte* since parts are bound to conflict with something you're using at some point.
24
+ First, add "dionysus" to your Gemfile or whatever other dependency system you're using. Then, you'll need to require each file/module as you need them. Dionysus is setup *à la carte* since parts are bound to conflict with something you're using at some point.
25
25
 
26
26
  Resources
27
27
  ---------
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.1
1
+ 1.0.2
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{dionysus}
8
- s.version = "1.0.1"
8
+ s.version = "1.0.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Travis D. Warlick, Jr."]
12
- s.date = %q{2010-09-19}
12
+ s.date = %q{2010-10-03}
13
13
  s.email = %q{warlickt@operissystems.com}
14
14
  s.extra_rdoc_files = [
15
15
  "LICENSE",
@@ -35,13 +35,15 @@ Gem::Specification.new do |s|
35
35
  "lib/dionysus/security/password_salt.rb",
36
36
  "lib/dionysus/security/string.rb",
37
37
  "lib/dionysus/string.rb",
38
+ "lib/dionysus/version_string.rb",
38
39
  "spec/configuration_spec.rb",
39
40
  "spec/digest_spec.rb",
40
41
  "spec/dionysus_spec.rb",
41
42
  "spec/password_salt_spec.rb",
42
43
  "spec/spec_helper.rb",
43
44
  "spec/string_security_spec.rb",
44
- "spec/string_spec.rb"
45
+ "spec/string_spec.rb",
46
+ "spec/version_string_spec.rb"
45
47
  ]
46
48
  s.homepage = %q{http://github.com/tekwiz/dionysus}
47
49
  s.require_paths = ["lib"]
@@ -54,7 +56,8 @@ Gem::Specification.new do |s|
54
56
  "spec/password_salt_spec.rb",
55
57
  "spec/spec_helper.rb",
56
58
  "spec/string_security_spec.rb",
57
- "spec/string_spec.rb"
59
+ "spec/string_spec.rb",
60
+ "spec/version_string_spec.rb"
58
61
  ]
59
62
 
60
63
  if s.respond_to? :specification_version then
@@ -18,7 +18,12 @@ Bundler.setup
18
18
  %w(hash class module).each { |v| require 'active_support/core_ext/'+v }
19
19
 
20
20
  ##
21
- # The top-level for Dionysus
21
+ # The top-level for Dionysus.
22
+ #
23
+ # Dionysus is setup *à la carte* since parts are bound to conflict with
24
+ # something you're using at some point. This means that if you need something,
25
+ # you *must* require it. See the documentation for instructions on what you
26
+ # should require (this is always within the first few lines).
22
27
  module Dionysus
23
28
  # The current version
24
29
  VERSION = File.read(File.join(File.dirname(__FILE__), '..', 'VERSION')).strip
@@ -1,4 +1,5 @@
1
1
  require 'dionysus'
2
+ require 'dionysus/version_string'
2
3
 
3
4
  ##
4
5
  # = Configuration
@@ -117,7 +118,11 @@ class Configuration
117
118
  def valid_key?( key )
118
119
  return false if key.blank?
119
120
  key = _normalize_key(key).to_s
120
- key =~ /^#{VALID_KEY}$/ and !self.methods.include?(key.to_sym)
121
+ if RUBY_VERSION.satisfies?('>= 1.9.2')
122
+ key =~ /^#{VALID_KEY}$/ and !self.methods.include?(key.to_sym)
123
+ else
124
+ key =~ /^#{VALID_KEY}$/ and !self.methods.include?(key)
125
+ end
121
126
  end
122
127
 
123
128
  ##
@@ -2,7 +2,14 @@ require 'dionysus'
2
2
  require 'active_support/secure_random'
3
3
 
4
4
  ##
5
- # Encapsulates a password salt.
5
+ # Encapsulates a password salt. This is usually not required specifically,
6
+ # instead it's required as a part of the security module:
7
+ #
8
+ # require 'dionysus/security'
9
+ #
10
+ # However, you may require it specifically:
11
+ #
12
+ # require 'dionysus/security/password_salt'
6
13
  #
7
14
  # Examples
8
15
  #
@@ -2,6 +2,7 @@ require 'dionysus'
2
2
  require 'dionysus/digest'
3
3
  require 'dionysus/string'
4
4
  require 'dionysus/security/password_salt'
5
+ require 'dionysus/version_string'
5
6
 
6
7
  ##
7
8
  # Adds String hashing and salting convenience methods.
@@ -26,12 +27,23 @@ class String
26
27
  # Sanitize the String from memory. This is non-reversible. Runs 7 passes
27
28
  # by default.
28
29
  #
30
+ # NOTE: In Ruby 1.9, this uses the String#setbyte(index, int) method. In Ruby < 1.9, this
31
+ # uses String#[]=(int)
32
+ #
29
33
  def sanitize( passes = 7 )
30
- passes.times do
31
- (0...self.length).each { |i| self[i] = rand(256).chr }
34
+ if RUBY_VERSION.satisfies?('< 1.9')
35
+ passes.times do
36
+ (0...self.length).each { |i| self[i] = rand(256) }
37
+ end
38
+ (0...self.length).each { |i| self[i] = 0 }
39
+ self.delete!("\000")
40
+ elsif RUBY_VERSION.satisfies?('>= 1.9')
41
+ passes.times do
42
+ (0...self.length).each { |i| self.setbyte(i, rand(256)) }
43
+ end
44
+ (0...self.length).each { |i| self.setbyte(i, 0) }
45
+ self.clear
32
46
  end
33
- (0...self.length).each { |i| self[i] = 0.chr }
34
- self.delete!("\000")
35
47
  end
36
48
 
37
49
  ##
@@ -0,0 +1,96 @@
1
+ require 'dionysus'
2
+ require 'active_support/core_ext/kernel/reporting'
3
+ require 'active_support/core_ext/module/delegation'
4
+
5
+ module Dionysus
6
+ ##
7
+ # = VersonString
8
+ #
9
+ # require 'dionysus/version_string'
10
+ #
11
+ # VersionString is a proxy to Gem::Version that modifies the comparable
12
+ # interface on String to compare based on the Gem::Version comparator.
13
+ # It also adds a +satisfies?+ method to check for a Gem::Requirement.
14
+ #
15
+ # In addition, requiring VersionString changes the +RUBY_VERSION+ constant
16
+ # into a VersionString. Because VersionString "is a" String, there should be
17
+ # no ill-effects with this change since only the Comparable interface is
18
+ # overriden and this does not change the original operation of the == method.
19
+ #
20
+ # The comparator works by converting strings into Gem::Version objects, so
21
+ # this still works as you would expect:
22
+ #
23
+ # RUBY_VERSION < '1.9'
24
+ class VersionString < String
25
+ include Comparable
26
+
27
+ ##
28
+ # Initializes a VersionString and freezes itself.
29
+ def initialize(*args)
30
+ super(*args)
31
+ to_rubygem_version
32
+ freeze
33
+ end
34
+
35
+ ##
36
+ # Compares this VersionString to another String, VersionString, or
37
+ # Gem::Version.
38
+ #
39
+ # Examples:
40
+ #
41
+ # Dionysus::VersionString.new('1.0') > '1.0' => false
42
+ # Dionysus::VersionString.new('1.0') == Gem::Version('1.0') => true
43
+ # Dionysus::VersionString.new('1.0') <=> Dionysus::VersionString.new('1.0') => 0
44
+ #
45
+ # See http://rubygems.rubyforge.org/rubygems-update/Gem/Version.html
46
+ def <=>( obj )
47
+ obj = obj.dup
48
+ if obj.is_a?(String) or obj.is_a?(Gem::Version)
49
+ obj = Gem::Version.create(obj)
50
+ else
51
+ raise ArgumentError, "Can only compare to a Dionysus::VersionString/String or Gem::Version"
52
+ end
53
+
54
+ self.to_rubygem_version <=> obj
55
+ end
56
+ alias_method :"eql?", :"=="
57
+
58
+ ##
59
+ # Determines if the given requirement String or Gem::Requirement is
60
+ # satisfied by this version.
61
+ #
62
+ # Examples:
63
+ #
64
+ # Dionysus::VersionString.new('1.6.7').satisfies? '~> 1.6.0' => true
65
+ # Dionysus::VersionString.new('1.6.7').satisfies? Gem::Requirement('< 1.6') => false
66
+ #
67
+ # See http://rubygems.rubyforge.org/rubygems-update/Gem/Requirement.html
68
+ def satisfies?( requirement )
69
+ requirement = requirement.dup
70
+ if requirement.is_a?(String) or requirement.is_a?(Gem::Requirement)
71
+ requirement = Gem::Requirement.create(requirement)
72
+ else
73
+ raise ArgumentError, "Can only compare to a String or Gem::Requirement"
74
+ end
75
+
76
+ requirement.satisfied_by?(to_rubygem_version)
77
+ end
78
+
79
+ ##
80
+ # Converts this VersionString into a Gem::Version
81
+ def to_rubygem_version
82
+ @rubygem_version ||= Gem::Version.create(self)
83
+ end
84
+ alias_method :to_gem_version, :to_rubygem_version
85
+
86
+ ##
87
+ # Indicates whether this VersionString is a prerelease.
88
+ #
89
+ # See http://rubygems.rubyforge.org/rubygems-update/Gem/Version.html#method-i-prerelease%3F
90
+ def prerelease?() to_rubygem_version.prerelease?; end
91
+ end
92
+ end
93
+
94
+ silence_warnings do
95
+ RUBY_VERSION = Dionysus::VersionString.new(RUBY_VERSION)
96
+ end
@@ -0,0 +1,83 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ require 'dionysus/version_string'
4
+ describe Dionysus::VersionString do
5
+ before(:each) do
6
+ @version_string = Dionysus::VersionString.new('1.5.7')
7
+ end
8
+
9
+ it 'should be frozen' do
10
+ @version_string.should be_frozen
11
+ end
12
+
13
+ it 'should have to_rubygem_version' do
14
+ @version_string.to_rubygem_version.should be_a(Gem::Version)
15
+ gem_version = @version_string.to_gem_version
16
+ @version_string.to_rubygem_version.should eq(gem_version)
17
+ end
18
+
19
+ it 'should have prerelease? that delegates to Gem::Version' do
20
+ @version_string.should_not be_prerelease
21
+ version = Dionysus::VersionString.new('1.5.alpha')
22
+ version.should be_prerelease
23
+ end
24
+
25
+ it 'should have eql?' do
26
+ (@version_string.eql?('1.5.7')).should be_true
27
+ end
28
+
29
+ describe 'comparable' do
30
+ before(:all) do
31
+ @values = {'1.5.7' => 0, '1.5' => 1, '1.6' => -1}
32
+ end
33
+
34
+ it 'should work with VersionStrings' do
35
+ @values.each do |ver, c|
36
+ (@version_string <=> Dionysus::VersionString.new(ver)).should == c
37
+ end
38
+ end
39
+
40
+ it 'should work with Strings' do
41
+ @values.each do |ver, c|
42
+ (@version_string <=> ver).should == c
43
+ end
44
+ end
45
+
46
+ it 'should work with Gem::Versions' do
47
+ @values.each do |ver, c|
48
+ (@version_string <=> Gem::Version.new(ver.dup)) == c
49
+ end
50
+ end
51
+
52
+ it 'should not work with anything else' do
53
+ lambda {
54
+ @version_string <=> Object.new
55
+ }.should raise_error(ArgumentError, "Can only compare to a Dionysus::VersionString/String or Gem::Version")
56
+ end
57
+ end
58
+
59
+ describe 'satisfies?' do
60
+ before(:all) do
61
+ @values = {'~> 1.5.0' => true, '~> 2' => false}
62
+ end
63
+
64
+ it 'should work with Strings' do
65
+ @values.each do |req, v|
66
+ @version_string.satisfies?(req).should == v
67
+ end
68
+ end
69
+
70
+ it 'should work with Gem::Requirements' do
71
+ @values.each do |req, v|
72
+ @version_string.satisfies?(Gem::Requirement.new(req)).should == v
73
+ end
74
+ end
75
+
76
+ it 'should not work with anything else' do
77
+ lambda {
78
+ @version_string.satisfies?(Object.new)
79
+ }.should raise_error(ArgumentError, "Can only compare to a String or Gem::Requirement")
80
+ end
81
+ end
82
+ end
83
+
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 0
8
- - 1
9
- version: 1.0.1
8
+ - 2
9
+ version: 1.0.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Travis D. Warlick, Jr.
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-09-19 00:00:00 -05:00
17
+ date: 2010-10-03 00:00:00 -05:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -284,6 +284,7 @@ files:
284
284
  - lib/dionysus/security/password_salt.rb
285
285
  - lib/dionysus/security/string.rb
286
286
  - lib/dionysus/string.rb
287
+ - lib/dionysus/version_string.rb
287
288
  - spec/configuration_spec.rb
288
289
  - spec/digest_spec.rb
289
290
  - spec/dionysus_spec.rb
@@ -291,6 +292,7 @@ files:
291
292
  - spec/spec_helper.rb
292
293
  - spec/string_security_spec.rb
293
294
  - spec/string_spec.rb
295
+ - spec/version_string_spec.rb
294
296
  has_rdoc: true
295
297
  homepage: http://github.com/tekwiz/dionysus
296
298
  licenses: []
@@ -305,7 +307,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
305
307
  requirements:
306
308
  - - ">="
307
309
  - !ruby/object:Gem::Version
308
- hash: 300643251
310
+ hash: -737655002021028068
309
311
  segments:
310
312
  - 0
311
313
  version: "0"
@@ -332,3 +334,4 @@ test_files:
332
334
  - spec/spec_helper.rb
333
335
  - spec/string_security_spec.rb
334
336
  - spec/string_spec.rb
337
+ - spec/version_string_spec.rb