noid 0.1.0 → 0.3.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.
data/Gemfile CHANGED
@@ -3,6 +3,8 @@ source "http://rubygems.org"
3
3
  # Example:
4
4
  # gem "activesupport", ">= 2.3.5"
5
5
  gem "anvl"
6
+ gem "json"
7
+ gem "backports"
6
8
 
7
9
  # Add dependencies to develop your gem here.
8
10
  # Include everything needed to run rake, tests, features, etc.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.3.0
data/lib/noid.rb CHANGED
@@ -1,4 +1,6 @@
1
- require 'noid/minter'
1
+ require 'noid/base'
2
+ require 'noid/persistence'
3
+ require 'noid/persistence/json'
2
4
  require 'noid/identifier'
3
5
  require 'noid/identifier/singleton'
4
6
  require 'noid/identifier/anvl'
@@ -1,64 +1,38 @@
1
+ require 'backports'
2
+
1
3
  module Noid
2
- class Minter
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
- i = rand(@s.size)
53
- n = @s[i][:value]
54
- @s[i][:value] += 1
55
- @s.delete_at(i) if @s[i][:value] == @s[i][:max]
56
- str += n2xdig(n)
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
- @identifier_class.new str
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 s
83
- @s
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,4 @@
1
+ module Noid
2
+ module Persistence
3
+ end
4
+ 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.1.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}
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/minter.rb",
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
- n = Noid::Minter.new :template => 'r.rek', :identifier_class => Noid::Identifier::Base
8
- id = n.mint
9
- assert_equal(Noid::Identifier::Base, id.class)
10
- id['abc'] = 123
11
- assert_equal(123, id['abc'])
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
- n = Noid::Minter.new :template => 'r.rek', :identifier_class => Noid::Identifier::Singleton
16
- id = n.mint
17
- id['abc'] = 123
18
- assert_equal(123, id['abc'])
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
- id2 = Noid::Identifier::Singleton.new id.id
21
- assert_equal(123, id2['abc'])
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
- n = Noid::Minter.new :template => 'r.rek', :identifier_class => Noid::Identifier::Anvl
26
- id = n.mint
27
- id['abc'] = 123
28
- assert_equal(Noid::Identifier::Anvl, id.class)
29
- assert_equal("123", id['abc'])
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::Minter.new :template => 's.zd'
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::Minter.new :template => 's.rd'
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::Minter.new :template => 's.rdd'
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::Minter.new :template => 's.rd'
22
- assert_equal((0..9).map { |x| {:value => x, :max => (x + 1)} }, n.send(:s))
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::Minter.new :template => 's.rdde'
25
- s = n.send(:s)
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::Minter.new :template => 's.rd'
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::Minter.new :template => 's.sd'
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::Minter.new :template => 's.se'
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::Minter.new :template => 's.sd'
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::Minter.new :template => 's.sdk'
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::Minter.new :template => 'z.zdk'
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::Minter.new :template => 'z.zdk'
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::Minter.new :template => 'z.zdek'
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::Minter.new :template => 'r.rd'
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::Minter.new :template => 'r.re'
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::Minter.new :template => 'r.rek'
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: 27
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
8
+ - 3
9
9
  - 0
10
- version: 0.1.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-12 00:00:00 -05:00
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: :development
36
+ type: :runtime
37
37
  prerelease: false
38
- name: shoulda
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: &id003 !ruby/object:Gem::Requirement
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: *id003
92
+ requirement: *id005
65
93
  - !ruby/object:Gem::Dependency
66
94
  type: :development
67
95
  prerelease: false
68
96
  name: jeweler
69
- version_requirements: &id004 !ruby/object:Gem::Requirement
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: *id004
108
+ requirement: *id006
81
109
  - !ruby/object:Gem::Dependency
82
110
  type: :development
83
111
  prerelease: false
84
112
  name: rcov
85
- version_requirements: &id005 !ruby/object:Gem::Requirement
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: *id005
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/minter.rb
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