serialnumber 0.0.9 → 0.0.10

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.9
1
+ 0.0.10
@@ -1,4 +1,5 @@
1
- # Author: David Krentzlin <david.krentzlin@lisp-unleashed.de>
1
+ # Author:: David Krentzlin <david.krentzlin@lisp-unleashed.de>
2
+ # Copyright:: Copyright (c) 2011 David Krentzlin
2
3
  #
3
4
  # Permission is hereby granted, free of charge, to any person obtaining a
4
5
  # copy of this software and associated documentation files (the "Software"),
@@ -1,4 +1,5 @@
1
- # Author: David Krentzlin <david.krentzlin@lisp-unleashed.de>
1
+ # Author:: David Krentzlin <david.krentzlin@lisp-unleashed.de>
2
+ # Copyright:: Copyright (c) 2011 David Krentzlin
2
3
  #
3
4
  # Permission is hereby granted, free of charge, to any person obtaining a
4
5
  # copy of this software and associated documentation files (the "Software"),
@@ -19,15 +20,35 @@
19
20
  # OTHER DEALINGS IN THE SOFTWARE.
20
21
 
21
22
 
22
-
23
23
  module Serial
24
+
24
25
  class OutOfBound < RuntimeError; end
25
26
  class Invalid < RuntimeError; end
26
27
 
28
+ # For some serial-numbers a comparision is
29
+ # simply not defined. In this case an Exception of this
30
+ # kind will be raised
31
+ class ComparisonImpossible < RuntimeError; end
32
+
33
+ # This class implements a serialnumber with it's operations as
34
+ # described in rfc1982. This may for example be used to manage
35
+ # serials as present in SOA-Records
36
+ #
37
+ # It defines only one basic operation, that is adding a fixnum.
38
+ # It is does also define an order.
39
+ #
40
+ # == Examples
41
+ # sn = Serial::RFC1982.new(100)
42
+ # sn2 = sn + 12
43
+ # sn2 > sn
44
+ #
27
45
  class RFC1982
28
46
  include Comparable
29
47
  attr_reader :serial_bits,:value
30
48
 
49
+ # Creates a serialnumber object from the fixnum given
50
+ # * the serial_bits define the domain of integers that can be
51
+ # represented with the fixnum.
31
52
  def initialize(number,serial_bits = 32)
32
53
  raise OutOfBound,"The number of serial_bits must be >= 2" unless serial_bits >= 2
33
54
  @serial_bits = serial_bits
@@ -35,14 +56,9 @@ module Serial
35
56
  @value = number
36
57
  end
37
58
 
38
- def ensure_valid!(number)
39
- raise Invalid,"Serial must be a fixnum" unless %w(Fixnum Bignum).include?(number.class.name)
40
- raise OutOfBound,"Negative numbers are not allowd" if number < 0
41
- if bits_needed_for(number) > serial_bits
42
- raise OutOfBound,"Given number #{number} can not be represented with #{serial_bits} serial_bits"
43
- end
44
- end
45
-
59
+ # Add a fixnum value to the serialnumber.
60
+ # Note that the resulting value may be smaller than
61
+ # the initial value due to a wrap-around on the serial-bits boundary
46
62
  def +(number)
47
63
  if summand_out_of_bound?(number)
48
64
  raise OutOfBound,"The summand #{number} is out of bound"
@@ -51,6 +67,15 @@ module Serial
51
67
  Serial::RFC1982.new(sum,serial_bits)
52
68
  end
53
69
 
70
+ def to_s
71
+ value.to_s
72
+ end
73
+
74
+ def to_i
75
+ value.to_i
76
+ end
77
+
78
+ protected
54
79
  def <=>(other)
55
80
  unless other.respond_to?(:value)
56
81
  raise Invalid,"Expected #{other} to respond_to :value"
@@ -58,9 +83,17 @@ module Serial
58
83
  return 0 if equal?(value,other.value)
59
84
  return -1 if less?(value,other.value)
60
85
  return 1 if greater?(value,other.value)
86
+ raise ComparisonImpossible, "The comparison is undefined"
87
+ end
88
+
89
+ def ensure_valid!(number)
90
+ raise Invalid,"Serial must be a fixnum" unless %w(Fixnum Bignum).include?(number.class.name)
91
+ raise OutOfBound,"Negative numbers are not allowd" if number < 0
92
+ if bits_needed_for(number) > serial_bits
93
+ raise OutOfBound,"Given number #{number} can not be represented with #{serial_bits} serial_bits"
94
+ end
61
95
  end
62
96
 
63
- protected
64
97
  def boundary
65
98
  @boundary ||= (2 ** (serial_bits - 1))
66
99
  end
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{serialnumber}
5
- s.version = "0.0.9"
5
+ s.version = "0.0.10"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["David Krentzlin"]
9
- s.date = %q{2011-07-13}
9
+ s.date = %q{2011-07-14}
10
10
  s.description = %q{Serialarithmetic as described in rfc1982}
11
11
  s.email = ["david.krentzlin@lisp-unleashed.de"]
12
12
  s.files = [".hgignore", ".hgtags", "Gemfile", "Gemfile.lock", "README", "Rakefile", "VERSION", "autotest/discover.rb", "lib/serialnumber.rb", "lib/serialnumber/rfc1982.rb", "serialnumber.gemspec", "spec/serial_spec.rb", "spec/spec_helper.rb"]
@@ -1,4 +1,5 @@
1
- # Author: David Krentzlin <david.krentzlin@lisp-unleashed.de>
1
+ # Author:: David Krentzlin <david.krentzlin@lisp-unleashed.de>
2
+ # Copyright:: Copyright (c) 2011 David Krentzlin
2
3
  #
3
4
  # Permission is hereby granted, free of charge, to any person obtaining a
4
5
  # copy of this software and associated documentation files (the "Software"),
@@ -19,7 +20,7 @@
19
20
  # OTHER DEALINGS IN THE SOFTWARE.
20
21
 
21
22
 
22
- require 'serial/rfc1982'
23
+ require 'serialnumber/rfc1982'
23
24
 
24
25
  describe Serial::RFC1982 do
25
26
 
@@ -90,5 +91,15 @@ describe Serial::RFC1982 do
90
91
  s101.should > s100
91
92
  end
92
93
  end
94
+
95
+ it "allows the value to be retrieved as a string" do
96
+ Serial::RFC1982.new(100).to_s.should eq("100")
97
+ end
98
+
99
+ it "allows the value to be retrieved as a integer" do
100
+ Serial::RFC1982.new(100).to_i.should eq(100)
101
+ end
102
+
103
+
93
104
  end
94
105
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: serialnumber
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
4
+ hash: 11
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 9
10
- version: 0.0.9
9
+ - 10
10
+ version: 0.0.10
11
11
  platform: ruby
12
12
  authors:
13
13
  - David Krentzlin
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-07-13 00:00:00 +02:00
18
+ date: 2011-07-14 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency