noid 0.1.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +2 -0
- data/VERSION +1 -1
- data/lib/noid.rb +3 -1
- data/lib/noid/{minter.rb → base.rb} +51 -44
- data/lib/noid/persistence.rb +4 -0
- data/lib/noid/persistence/json.rb +36 -0
- data/noid.gemspec +15 -5
- data/test/test_binding.rb +26 -17
- data/test/test_noid.rb +18 -38
- data/test/test_persistence.rb +47 -0
- metadata +45 -13
data/Gemfile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/lib/noid.rb
CHANGED
@@ -1,64 +1,38 @@
|
|
1
|
+
require 'backports'
|
2
|
+
|
1
3
|
module Noid
|
2
|
-
class
|
4
|
+
class Base
|
3
5
|
XDIGIT = ['0','1','2','3','4','5','6','7','8','9','b','c','d','f','g','h','j','k','l','n','p','q','r','s','t','v','w','x','z']
|
4
6
|
MAX_COUNTERS = 293
|
5
7
|
|
6
8
|
def initialize args = {}
|
7
|
-
|
8
9
|
@max = nil
|
9
10
|
@min = nil
|
11
|
+
@config = { :identifier => {} }.merge args
|
12
|
+
setup_mask args
|
13
|
+
end
|
10
14
|
|
11
|
-
@identifier_class = args[:identifier_class]
|
12
|
-
@identifier_class ||= String
|
13
|
-
|
14
|
-
@prefix, @mask = args[:template].split('.')
|
15
|
-
|
16
|
-
@prefix = "#{args[:namespace]}/#{@prefix}" if args[:namespace]
|
17
|
-
|
18
|
-
@type, @characters = @mask.split '', 2
|
19
|
-
@characters = @characters.split ''
|
20
|
-
@check = @characters.pop and true if @characters.last == 'k'
|
21
|
-
case @type
|
22
|
-
when 's'
|
23
|
-
@s = 0
|
24
|
-
when 'z'
|
25
|
-
@s = 0
|
26
|
-
when 'r'
|
27
|
-
|
28
|
-
percounter = max / MAX_COUNTERS + 1
|
29
|
-
t = 0
|
30
|
-
@s = Array.new(max/percounter) do |i|
|
31
|
-
{ :value => case i
|
32
|
-
when 0 then 0
|
33
|
-
else t += percounter
|
34
|
-
end, :max => t + percounter }
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
39
15
|
|
40
16
|
def mint
|
41
17
|
str = @prefix
|
18
|
+
n = @s
|
19
|
+
@s += 1
|
20
|
+
|
42
21
|
case @type
|
43
22
|
when 's'
|
44
|
-
n = @s
|
45
|
-
@s += 1
|
46
|
-
str += n2xdig(n)
|
47
23
|
when 'z'
|
48
|
-
n = @s
|
49
|
-
@s += 1
|
50
|
-
str += n2xdig(n)
|
51
24
|
when 'r'
|
52
|
-
|
53
|
-
|
54
|
-
@
|
55
|
-
@
|
56
|
-
|
25
|
+
raise Exception if @counters.size == 0
|
26
|
+
i = @rand.rand(@counters.size)
|
27
|
+
n = @counters[i][:value]
|
28
|
+
@counters[i][:value] += 1
|
29
|
+
@counters.delete_at(i) if @counters[i][:value] == @counters[i][:max]
|
57
30
|
end
|
31
|
+
str += n2xdig(n)
|
58
32
|
|
59
33
|
str += checkdigit(str) if @check
|
60
34
|
|
61
|
-
|
35
|
+
identifier.new str
|
62
36
|
end
|
63
37
|
|
64
38
|
def valid? id
|
@@ -79,8 +53,8 @@ module Noid
|
|
79
53
|
end
|
80
54
|
|
81
55
|
protected
|
82
|
-
def
|
83
|
-
@
|
56
|
+
def identifier
|
57
|
+
@config[:identifier][:class] || String
|
84
58
|
end
|
85
59
|
|
86
60
|
def checkdigit str
|
@@ -141,5 +115,38 @@ module Noid
|
|
141
115
|
|
142
116
|
xdig.reverse
|
143
117
|
end
|
118
|
+
|
119
|
+
def setup_mask args
|
120
|
+
@prefix, @mask = args[:template].split('.')
|
121
|
+
|
122
|
+
@prefix = "#{args[:namespace]}/#{@prefix}" if args[:namespace]
|
123
|
+
|
124
|
+
@type, @characters = @mask.split '', 2
|
125
|
+
@characters = @characters.split ''
|
126
|
+
@check = @characters.pop and true if @characters.last == 'k'
|
127
|
+
@s = args[:s] || 0
|
128
|
+
case @type
|
129
|
+
when 's'
|
130
|
+
when 'z'
|
131
|
+
when 'r'
|
132
|
+
@rand = Random.new(args[:seed]) if args[:seed]
|
133
|
+
@rand ||= Random.new
|
134
|
+
@seed = @rand.seed
|
135
|
+
|
136
|
+
if args[:s]
|
137
|
+
args[:s].times { @rand.rand }
|
138
|
+
end
|
139
|
+
|
140
|
+
percounter = max / (args[:max_counters] || MAX_COUNTERS) + 1
|
141
|
+
t = 0
|
142
|
+
@counters = args[:counters]
|
143
|
+
@counters ||= Array.new(max/percounter) do |i|
|
144
|
+
{ :value => case i
|
145
|
+
when 0 then 0
|
146
|
+
else t += percounter
|
147
|
+
end, :max => t + percounter }
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
144
151
|
end
|
145
152
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'json'
|
2
|
+
module Noid::Persistence
|
3
|
+
class JSON < Noid::Base
|
4
|
+
FILENAME = 'NOID.js'
|
5
|
+
def initialize args = {}
|
6
|
+
@file = args[:filename] || FILENAME
|
7
|
+
data = load_json
|
8
|
+
super data.merge(args)
|
9
|
+
save
|
10
|
+
end
|
11
|
+
|
12
|
+
def mint
|
13
|
+
a = super
|
14
|
+
save
|
15
|
+
return a
|
16
|
+
end
|
17
|
+
|
18
|
+
protected
|
19
|
+
def load_json
|
20
|
+
data = ::JSON.parse(File.read(@file)) if File.exists? @file
|
21
|
+
data ||= {}
|
22
|
+
data = data.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo} unless data.empty?
|
23
|
+
data[:counters] = data[:counters].map { |x| x.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo} } if data[:counters]
|
24
|
+
data[:identifier] = { :class => Kernel.const_get(data[:identifier]['class']) } if data[:identifier]
|
25
|
+
data
|
26
|
+
end
|
27
|
+
|
28
|
+
def save
|
29
|
+
File.open(@file, 'w') do |f|
|
30
|
+
str = { :identifier => { :class => identifier }, :s => @s, :counters => @counters, :seed => @seed, }.to_json
|
31
|
+
f.write(str)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
data/noid.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{noid}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Chris Beer"]
|
12
|
-
s.date = %q{2010-12-
|
12
|
+
s.date = %q{2010-12-16}
|
13
13
|
s.description = %q{}
|
14
14
|
s.email = %q{chris@cbeer.info}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -24,14 +24,17 @@ Gem::Specification.new do |s|
|
|
24
24
|
"Rakefile",
|
25
25
|
"VERSION",
|
26
26
|
"lib/noid.rb",
|
27
|
+
"lib/noid/base.rb",
|
27
28
|
"lib/noid/identifier.rb",
|
28
29
|
"lib/noid/identifier/anvl.rb",
|
29
30
|
"lib/noid/identifier/singleton.rb",
|
30
|
-
"lib/noid/
|
31
|
+
"lib/noid/persistence.rb",
|
32
|
+
"lib/noid/persistence/json.rb",
|
31
33
|
"noid.gemspec",
|
32
34
|
"test/helper.rb",
|
33
35
|
"test/test_binding.rb",
|
34
|
-
"test/test_noid.rb"
|
36
|
+
"test/test_noid.rb",
|
37
|
+
"test/test_persistence.rb"
|
35
38
|
]
|
36
39
|
s.homepage = %q{http://github.com/cbeer/noid}
|
37
40
|
s.licenses = ["MIT"]
|
@@ -41,7 +44,8 @@ Gem::Specification.new do |s|
|
|
41
44
|
s.test_files = [
|
42
45
|
"test/helper.rb",
|
43
46
|
"test/test_binding.rb",
|
44
|
-
"test/test_noid.rb"
|
47
|
+
"test/test_noid.rb",
|
48
|
+
"test/test_persistence.rb"
|
45
49
|
]
|
46
50
|
|
47
51
|
if s.respond_to? :specification_version then
|
@@ -50,12 +54,16 @@ Gem::Specification.new do |s|
|
|
50
54
|
|
51
55
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
52
56
|
s.add_runtime_dependency(%q<anvl>, [">= 0"])
|
57
|
+
s.add_runtime_dependency(%q<json>, [">= 0"])
|
58
|
+
s.add_runtime_dependency(%q<backports>, [">= 0"])
|
53
59
|
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
54
60
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
55
61
|
s.add_development_dependency(%q<jeweler>, ["~> 1.5.1"])
|
56
62
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
57
63
|
else
|
58
64
|
s.add_dependency(%q<anvl>, [">= 0"])
|
65
|
+
s.add_dependency(%q<json>, [">= 0"])
|
66
|
+
s.add_dependency(%q<backports>, [">= 0"])
|
59
67
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
60
68
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
61
69
|
s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
|
@@ -63,6 +71,8 @@ Gem::Specification.new do |s|
|
|
63
71
|
end
|
64
72
|
else
|
65
73
|
s.add_dependency(%q<anvl>, [">= 0"])
|
74
|
+
s.add_dependency(%q<json>, [">= 0"])
|
75
|
+
s.add_dependency(%q<backports>, [">= 0"])
|
66
76
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
67
77
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
68
78
|
s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
|
data/test/test_binding.rb
CHANGED
@@ -1,33 +1,42 @@
|
|
1
1
|
require 'helper'
|
2
2
|
require 'anvl'
|
3
|
+
require 'tmpdir'
|
3
4
|
|
4
5
|
class TestNoidBinding < Test::Unit::TestCase
|
5
6
|
context "Noid" do
|
6
7
|
should "accept identifier_class for NOID bindings" do
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
Dir.mktmpdir do |d|
|
9
|
+
Dir.chdir d
|
10
|
+
n = Noid::Base.new :template => 'r.rek', :identifier => { :class => Noid::Identifier::Base }
|
11
|
+
id = n.mint
|
12
|
+
assert_equal(Noid::Identifier::Base, id.class)
|
13
|
+
id['abc'] = 123
|
14
|
+
assert_equal(123, id['abc'])
|
15
|
+
end
|
12
16
|
end
|
13
17
|
|
14
18
|
should "use singleton instance to persist NOID bindings" do
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
+
Dir.mktmpdir do |d|
|
20
|
+
Dir.chdir d
|
21
|
+
n = Noid::Base.new :template => 'r.rek', :identifier => { :class => Noid::Identifier::Singleton }
|
22
|
+
id = n.mint
|
23
|
+
id['abc'] = 123
|
24
|
+
assert_equal(123, id['abc'])
|
19
25
|
|
20
|
-
|
21
|
-
|
26
|
+
id2 = Noid::Identifier::Singleton.new id.id
|
27
|
+
assert_equal(123, id2['abc'])
|
28
|
+
end
|
22
29
|
end
|
23
30
|
|
24
31
|
should "user anvl instance to persist NOID binding info" do
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
32
|
+
Dir.mktmpdir do |d|
|
33
|
+
Dir.chdir d
|
34
|
+
n = Noid::Base.new :template => 'r.rek', :identifier => { :class => Noid::Identifier::Anvl }
|
35
|
+
id = n.mint
|
36
|
+
id['abc'] = "123"
|
37
|
+
assert_equal(Noid::Identifier::Anvl, id.class)
|
38
|
+
assert_equal("123", id['abc'])
|
39
|
+
end
|
31
40
|
end
|
32
41
|
end
|
33
42
|
end
|
data/test/test_noid.rb
CHANGED
@@ -3,31 +3,31 @@ require 'helper'
|
|
3
3
|
class TestNoid < Test::Unit::TestCase
|
4
4
|
context "Noid" do
|
5
5
|
should "generate checkdigits correctly" do
|
6
|
-
n = Noid::
|
6
|
+
n = Noid::Base.new :template => 's.zd'
|
7
7
|
assert_equal('q', n.send(:checkdigit, '13030/xf93gt2'))
|
8
8
|
end
|
9
9
|
|
10
10
|
should "generate max sequence for type 'r'" do
|
11
|
-
n = Noid::
|
11
|
+
n = Noid::Base.new :template => 's.rd'
|
12
12
|
assert_equal(0, n.send(:min))
|
13
13
|
assert_equal(10, n.send(:max))
|
14
14
|
|
15
|
-
n = Noid::
|
15
|
+
n = Noid::Base.new :template => 's.rdd'
|
16
16
|
assert_equal(0, n.send(:min))
|
17
17
|
assert_equal(100, n.send(:max))
|
18
18
|
end
|
19
19
|
|
20
20
|
should "generate quasi-random counters for type 'r'" do
|
21
|
-
n = Noid::
|
22
|
-
assert_equal((0..9).map { |x| {:value => x, :max => (x + 1)} }, n.
|
21
|
+
n = Noid::Base.new :template => 's.rd'
|
22
|
+
assert_equal((0..9).map { |x| {:value => x, :max => (x + 1)} }, n.instance_variable_get('@counters'))
|
23
23
|
|
24
|
-
n = Noid::
|
25
|
-
s = n.
|
24
|
+
n = Noid::Base.new :template => 's.rdde'
|
25
|
+
s = n.instance_variable_get('@counters')
|
26
26
|
assert_contains(s, {:value => 2890, :max => 2900})
|
27
27
|
end
|
28
28
|
|
29
29
|
should "generate random sequence for type 'r'" do
|
30
|
-
n = Noid::
|
30
|
+
n = Noid::Base.new :template => 's.rd'
|
31
31
|
a = 10.times.map { |i| n.mint }
|
32
32
|
|
33
33
|
10.times do |i|
|
@@ -37,14 +37,14 @@ class TestNoid < Test::Unit::TestCase
|
|
37
37
|
end
|
38
38
|
|
39
39
|
should "generate numeric sequence for type 's'" do
|
40
|
-
n = Noid::
|
40
|
+
n = Noid::Base.new :template => 's.sd'
|
41
41
|
10.times do |i|
|
42
42
|
assert_equal("s#{i}", n.mint)
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
46
|
should "generate extended sequence for type 's'" do
|
47
|
-
n = Noid::
|
47
|
+
n = Noid::Base.new :template => 's.se'
|
48
48
|
10.times do |i|
|
49
49
|
assert_equal("s#{i}", n.mint)
|
50
50
|
end
|
@@ -55,7 +55,7 @@ class TestNoid < Test::Unit::TestCase
|
|
55
55
|
end
|
56
56
|
|
57
57
|
should "raise an exception when overflowing sequence" do
|
58
|
-
n = Noid::
|
58
|
+
n = Noid::Base.new :template => 's.sd'
|
59
59
|
10.times do |i|
|
60
60
|
assert_equal("s#{i}", n.mint)
|
61
61
|
end
|
@@ -66,20 +66,20 @@ class TestNoid < Test::Unit::TestCase
|
|
66
66
|
end
|
67
67
|
|
68
68
|
should "generate sequence for type 's' with checkdigit" do
|
69
|
-
n = Noid::
|
69
|
+
n = Noid::Base.new :template => 's.sdk'
|
70
70
|
assert_equal('s0s', n.mint)
|
71
71
|
assert_equal('s1v', n.mint)
|
72
72
|
assert_equal('s2x', n.mint)
|
73
73
|
end
|
74
74
|
|
75
75
|
should "generate sequence for type 'z' with checkdigit" do
|
76
|
-
n = Noid::
|
76
|
+
n = Noid::Base.new :template => 'z.zdk'
|
77
77
|
assert_equal('z0z', n.mint)
|
78
78
|
assert_equal('z11', n.mint)
|
79
79
|
assert_equal('z23', n.mint)
|
80
80
|
end
|
81
81
|
should "generate sequence for type 'z', adding new digits as needed" do
|
82
|
-
n = Noid::
|
82
|
+
n = Noid::Base.new :template => 'z.zdk'
|
83
83
|
assert_equal('z0z', n.mint)
|
84
84
|
assert_equal('z11', n.mint)
|
85
85
|
assert_equal('z23', n.mint)
|
@@ -88,7 +88,7 @@ class TestNoid < Test::Unit::TestCase
|
|
88
88
|
end
|
89
89
|
|
90
90
|
should "generate sequence for type 'z', adding new xdigits as needed" do
|
91
|
-
n = Noid::
|
91
|
+
n = Noid::Base.new :template => 'z.zdek'
|
92
92
|
assert_equal('z00z', n.mint)
|
93
93
|
assert_equal('z012', n.mint)
|
94
94
|
assert_equal('z025', n.mint)
|
@@ -107,7 +107,7 @@ class TestNoid < Test::Unit::TestCase
|
|
107
107
|
end
|
108
108
|
|
109
109
|
should "validate 'r' digit sequences" do
|
110
|
-
n = Noid::
|
110
|
+
n = Noid::Base.new :template => 'r.rd'
|
111
111
|
|
112
112
|
assert_equal(true, n.valid?('r1') )
|
113
113
|
assert_equal(true, n.valid?('r9') )
|
@@ -117,7 +117,7 @@ class TestNoid < Test::Unit::TestCase
|
|
117
117
|
end
|
118
118
|
|
119
119
|
should "validate 'r' xdigit sequences" do
|
120
|
-
n = Noid::
|
120
|
+
n = Noid::Base.new :template => 'r.re'
|
121
121
|
|
122
122
|
assert_equal(true, n.valid?('r1') )
|
123
123
|
assert_equal(true, n.valid?('r9') )
|
@@ -125,30 +125,10 @@ class TestNoid < Test::Unit::TestCase
|
|
125
125
|
assert_equal(true, n.valid?('rb'))
|
126
126
|
end
|
127
127
|
should "validate 'r' xdigit + checkdigit sequences" do
|
128
|
-
n = Noid::
|
128
|
+
n = Noid::Base.new :template => 'r.rek'
|
129
129
|
|
130
130
|
assert_equal(true, n.valid?('r2w') )
|
131
131
|
assert_equal(false, n.valid?('r2b') )
|
132
132
|
end
|
133
|
-
|
134
|
-
should "accept identifier_class for NOID bindings" do
|
135
|
-
n = Noid::Minter.new :template => 'r.rek', :identifier_class => Noid::Identifier::Base
|
136
|
-
id = n.mint
|
137
|
-
assert_equal(Noid::Identifier::Base, id.class)
|
138
|
-
id['abc'] = 123
|
139
|
-
assert_equal(123, id['abc'])
|
140
|
-
end
|
141
|
-
|
142
|
-
should "use singleton instance to persist NOID bindings" do
|
143
|
-
n = Noid::Minter.new :template => 'r.rek', :identifier_class => Noid::Identifier::Singleton
|
144
|
-
id = n.mint
|
145
|
-
id['abc'] = 123
|
146
|
-
assert_equal(123, id['abc'])
|
147
|
-
|
148
|
-
id2 = Noid::Identifier::Singleton.new id.id
|
149
|
-
assert_equal(123, id2['abc'])
|
150
|
-
end
|
151
|
-
|
152
|
-
|
153
133
|
end
|
154
134
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'tmpdir'
|
4
|
+
|
5
|
+
class TestNoidPersistence < Test::Unit::TestCase
|
6
|
+
context "Noid" do
|
7
|
+
should "persist data using the JSON module" do
|
8
|
+
Dir.mktmpdir do |d|
|
9
|
+
Dir.chdir d
|
10
|
+
n = Noid::Persistence::JSON.new(:template => 's.sd')
|
11
|
+
assert_equal('s0', n.mint)
|
12
|
+
assert_equal(1, n.instance_variable_get('@s'))
|
13
|
+
m = Noid::Persistence::JSON.new(:template => 's.sd')
|
14
|
+
assert_equal('s1', m.mint)
|
15
|
+
assert_equal(2, m.instance_variable_get('@s'))
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
should "persist data in a supplied file" do
|
20
|
+
Dir.mktmpdir do |d|
|
21
|
+
Dir.chdir d
|
22
|
+
n = Noid::Persistence::JSON.new(:template => 's.sd', :filename => 'NOID.json')
|
23
|
+
assert(File.exists?('NOID.json'))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
should "persist seed data for random" do
|
28
|
+
Dir.mktmpdir do |d|
|
29
|
+
Dir.chdir d
|
30
|
+
n = Noid::Persistence::JSON.new(:template => 'r.rd')
|
31
|
+
n.mint
|
32
|
+
assert_equal(1, n.instance_variable_get('@s'))
|
33
|
+
|
34
|
+
m = Noid::Persistence::JSON.new(:template => 'r.rd')
|
35
|
+
assert_equal(n.instance_variable_get('@counters'), m.instance_variable_get('@counters'))
|
36
|
+
assert_equal(n.instance_variable_get('@s'), m.instance_variable_get('@s'))
|
37
|
+
assert_equal(n.instance_variable_get('@mask'), m.instance_variable_get('@mask'))
|
38
|
+
assert_equal(n.instance_variable_get('@characters'), m.instance_variable_get('@characters'))
|
39
|
+
assert_equal(n.instance_variable_get('@rand').seed, m.instance_variable_get('@rand').seed)
|
40
|
+
assert_equal(n.send(:min), m.send(:min))
|
41
|
+
assert_equal(n.send(:max), m.send(:max))
|
42
|
+
5.times { assert_equal(n.mint, m.mint) }
|
43
|
+
assert_equal(6, m.instance_variable_get('@s'))
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: noid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 3
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Chris Beer
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-12-
|
18
|
+
date: 2010-12-16 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -33,9 +33,9 @@ dependencies:
|
|
33
33
|
version: "0"
|
34
34
|
requirement: *id001
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
|
-
type: :
|
36
|
+
type: :runtime
|
37
37
|
prerelease: false
|
38
|
-
name:
|
38
|
+
name: json
|
39
39
|
version_requirements: &id002 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
@@ -46,11 +46,39 @@ dependencies:
|
|
46
46
|
- 0
|
47
47
|
version: "0"
|
48
48
|
requirement: *id002
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
type: :runtime
|
51
|
+
prerelease: false
|
52
|
+
name: backports
|
53
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
hash: 3
|
59
|
+
segments:
|
60
|
+
- 0
|
61
|
+
version: "0"
|
62
|
+
requirement: *id003
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
type: :development
|
65
|
+
prerelease: false
|
66
|
+
name: shoulda
|
67
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
hash: 3
|
73
|
+
segments:
|
74
|
+
- 0
|
75
|
+
version: "0"
|
76
|
+
requirement: *id004
|
49
77
|
- !ruby/object:Gem::Dependency
|
50
78
|
type: :development
|
51
79
|
prerelease: false
|
52
80
|
name: bundler
|
53
|
-
version_requirements: &
|
81
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
54
82
|
none: false
|
55
83
|
requirements:
|
56
84
|
- - ~>
|
@@ -61,12 +89,12 @@ dependencies:
|
|
61
89
|
- 0
|
62
90
|
- 0
|
63
91
|
version: 1.0.0
|
64
|
-
requirement: *
|
92
|
+
requirement: *id005
|
65
93
|
- !ruby/object:Gem::Dependency
|
66
94
|
type: :development
|
67
95
|
prerelease: false
|
68
96
|
name: jeweler
|
69
|
-
version_requirements: &
|
97
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
70
98
|
none: false
|
71
99
|
requirements:
|
72
100
|
- - ~>
|
@@ -77,12 +105,12 @@ dependencies:
|
|
77
105
|
- 5
|
78
106
|
- 1
|
79
107
|
version: 1.5.1
|
80
|
-
requirement: *
|
108
|
+
requirement: *id006
|
81
109
|
- !ruby/object:Gem::Dependency
|
82
110
|
type: :development
|
83
111
|
prerelease: false
|
84
112
|
name: rcov
|
85
|
-
version_requirements: &
|
113
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
86
114
|
none: false
|
87
115
|
requirements:
|
88
116
|
- - ">="
|
@@ -91,7 +119,7 @@ dependencies:
|
|
91
119
|
segments:
|
92
120
|
- 0
|
93
121
|
version: "0"
|
94
|
-
requirement: *
|
122
|
+
requirement: *id007
|
95
123
|
description: ""
|
96
124
|
email: chris@cbeer.info
|
97
125
|
executables: []
|
@@ -109,14 +137,17 @@ files:
|
|
109
137
|
- Rakefile
|
110
138
|
- VERSION
|
111
139
|
- lib/noid.rb
|
140
|
+
- lib/noid/base.rb
|
112
141
|
- lib/noid/identifier.rb
|
113
142
|
- lib/noid/identifier/anvl.rb
|
114
143
|
- lib/noid/identifier/singleton.rb
|
115
|
-
- lib/noid/
|
144
|
+
- lib/noid/persistence.rb
|
145
|
+
- lib/noid/persistence/json.rb
|
116
146
|
- noid.gemspec
|
117
147
|
- test/helper.rb
|
118
148
|
- test/test_binding.rb
|
119
149
|
- test/test_noid.rb
|
150
|
+
- test/test_persistence.rb
|
120
151
|
has_rdoc: true
|
121
152
|
homepage: http://github.com/cbeer/noid
|
122
153
|
licenses:
|
@@ -155,3 +186,4 @@ test_files:
|
|
155
186
|
- test/helper.rb
|
156
187
|
- test/test_binding.rb
|
157
188
|
- test/test_noid.rb
|
189
|
+
- test/test_persistence.rb
|