noid 0.0.2 → 0.1.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
@@ -2,6 +2,7 @@ source "http://rubygems.org"
2
2
  # Add dependencies required to use your gem here.
3
3
  # Example:
4
4
  # gem "activesupport", ">= 2.3.5"
5
+ gem "anvl"
5
6
 
6
7
  # Add dependencies to develop your gem here.
7
8
  # Include everything needed to run rake, tests, features, etc.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.1.0
data/lib/noid.rb CHANGED
@@ -1,4 +1,7 @@
1
1
  require 'noid/minter'
2
+ require 'noid/identifier'
3
+ require 'noid/identifier/singleton'
4
+ require 'noid/identifier/anvl'
2
5
  module Noid
3
6
 
4
7
  end
@@ -0,0 +1,24 @@
1
+ module Noid::Identifier
2
+ class Base
3
+ def initialize id
4
+ @id = id
5
+ @metadata = {}
6
+ end
7
+
8
+ def id
9
+ @id
10
+ end
11
+
12
+ def [] key
13
+ @metadata[key]
14
+ end
15
+
16
+ def []= key, value
17
+ @metadata[key] = value
18
+ end
19
+
20
+ def push hash
21
+ @metadata.merge! hash
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,32 @@
1
+ module Noid::Identifier
2
+ class Anvl < Base
3
+ def initialize id
4
+ @id = id
5
+ @metadata = ::ANVL::Document.new
6
+ end
7
+
8
+ def []= key, value
9
+ super
10
+ save
11
+ end
12
+
13
+ def push hash
14
+ @metadata << hash
15
+ save
16
+ end
17
+
18
+ private
19
+ def file
20
+ @id
21
+ end
22
+
23
+ def save
24
+ File.open(file, 'w') do |f|
25
+ f.write @metadata.to_s
26
+ end
27
+
28
+ end
29
+
30
+
31
+ end
32
+ end
@@ -0,0 +1,14 @@
1
+ module Noid::Identifier
2
+ class Singleton < Base
3
+ @@identifiers = {}
4
+ @@identifiers = {}
5
+ def self.new id
6
+ @@identifiers[id] ||= super(id)
7
+ @@identifiers[id]
8
+ end
9
+
10
+ def self.identifiers
11
+ @@identifiers
12
+ end
13
+ end
14
+ end
data/lib/noid/minter.rb CHANGED
@@ -8,6 +8,9 @@ module Noid
8
8
  @max = nil
9
9
  @min = nil
10
10
 
11
+ @identifier_class = args[:identifier_class]
12
+ @identifier_class ||= String
13
+
11
14
  @prefix, @mask = args[:template].split('.')
12
15
 
13
16
  @prefix = "#{args[:namespace]}/#{@prefix}" if args[:namespace]
@@ -55,7 +58,7 @@ module Noid
55
58
 
56
59
  str += checkdigit(str) if @check
57
60
 
58
- str
61
+ @identifier_class.new str
59
62
  end
60
63
 
61
64
  def valid? id
data/noid.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{noid}
8
- s.version = "0.0.2"
8
+ s.version = "0.1.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"]
@@ -24,9 +24,13 @@ Gem::Specification.new do |s|
24
24
  "Rakefile",
25
25
  "VERSION",
26
26
  "lib/noid.rb",
27
+ "lib/noid/identifier.rb",
28
+ "lib/noid/identifier/anvl.rb",
29
+ "lib/noid/identifier/singleton.rb",
27
30
  "lib/noid/minter.rb",
28
31
  "noid.gemspec",
29
32
  "test/helper.rb",
33
+ "test/test_binding.rb",
30
34
  "test/test_noid.rb"
31
35
  ]
32
36
  s.homepage = %q{http://github.com/cbeer/noid}
@@ -36,6 +40,7 @@ Gem::Specification.new do |s|
36
40
  s.summary = %q{Nice Opaque Identifier}
37
41
  s.test_files = [
38
42
  "test/helper.rb",
43
+ "test/test_binding.rb",
39
44
  "test/test_noid.rb"
40
45
  ]
41
46
 
@@ -44,17 +49,20 @@ Gem::Specification.new do |s|
44
49
  s.specification_version = 3
45
50
 
46
51
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
52
+ s.add_runtime_dependency(%q<anvl>, [">= 0"])
47
53
  s.add_development_dependency(%q<shoulda>, [">= 0"])
48
54
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
49
55
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.1"])
50
56
  s.add_development_dependency(%q<rcov>, [">= 0"])
51
57
  else
58
+ s.add_dependency(%q<anvl>, [">= 0"])
52
59
  s.add_dependency(%q<shoulda>, [">= 0"])
53
60
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
54
61
  s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
55
62
  s.add_dependency(%q<rcov>, [">= 0"])
56
63
  end
57
64
  else
65
+ s.add_dependency(%q<anvl>, [">= 0"])
58
66
  s.add_dependency(%q<shoulda>, [">= 0"])
59
67
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
60
68
  s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
@@ -0,0 +1,33 @@
1
+ require 'helper'
2
+ require 'anvl'
3
+
4
+ class TestNoidBinding < Test::Unit::TestCase
5
+ context "Noid" do
6
+ 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'])
12
+ end
13
+
14
+ 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
+
20
+ id2 = Noid::Identifier::Singleton.new id.id
21
+ assert_equal(123, id2['abc'])
22
+ end
23
+
24
+ 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
+
31
+ end
32
+ end
33
+ end
data/test/test_noid.rb CHANGED
@@ -130,5 +130,25 @@ class TestNoid < Test::Unit::TestCase
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
+
133
153
  end
134
154
  end
metadata CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
+ - 1
8
9
  - 0
9
- - 2
10
- version: 0.0.2
10
+ version: 0.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Chris Beer
@@ -19,9 +19,9 @@ date: 2010-12-12 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- type: :development
22
+ type: :runtime
23
23
  prerelease: false
24
- name: shoulda
24
+ name: anvl
25
25
  version_requirements: &id001 !ruby/object:Gem::Requirement
26
26
  none: false
27
27
  requirements:
@@ -35,8 +35,22 @@ dependencies:
35
35
  - !ruby/object:Gem::Dependency
36
36
  type: :development
37
37
  prerelease: false
38
- name: bundler
38
+ name: shoulda
39
39
  version_requirements: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ hash: 3
45
+ segments:
46
+ - 0
47
+ version: "0"
48
+ requirement: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ type: :development
51
+ prerelease: false
52
+ name: bundler
53
+ version_requirements: &id003 !ruby/object:Gem::Requirement
40
54
  none: false
41
55
  requirements:
42
56
  - - ~>
@@ -47,12 +61,12 @@ dependencies:
47
61
  - 0
48
62
  - 0
49
63
  version: 1.0.0
50
- requirement: *id002
64
+ requirement: *id003
51
65
  - !ruby/object:Gem::Dependency
52
66
  type: :development
53
67
  prerelease: false
54
68
  name: jeweler
55
- version_requirements: &id003 !ruby/object:Gem::Requirement
69
+ version_requirements: &id004 !ruby/object:Gem::Requirement
56
70
  none: false
57
71
  requirements:
58
72
  - - ~>
@@ -63,12 +77,12 @@ dependencies:
63
77
  - 5
64
78
  - 1
65
79
  version: 1.5.1
66
- requirement: *id003
80
+ requirement: *id004
67
81
  - !ruby/object:Gem::Dependency
68
82
  type: :development
69
83
  prerelease: false
70
84
  name: rcov
71
- version_requirements: &id004 !ruby/object:Gem::Requirement
85
+ version_requirements: &id005 !ruby/object:Gem::Requirement
72
86
  none: false
73
87
  requirements:
74
88
  - - ">="
@@ -77,7 +91,7 @@ dependencies:
77
91
  segments:
78
92
  - 0
79
93
  version: "0"
80
- requirement: *id004
94
+ requirement: *id005
81
95
  description: ""
82
96
  email: chris@cbeer.info
83
97
  executables: []
@@ -95,9 +109,13 @@ files:
95
109
  - Rakefile
96
110
  - VERSION
97
111
  - lib/noid.rb
112
+ - lib/noid/identifier.rb
113
+ - lib/noid/identifier/anvl.rb
114
+ - lib/noid/identifier/singleton.rb
98
115
  - lib/noid/minter.rb
99
116
  - noid.gemspec
100
117
  - test/helper.rb
118
+ - test/test_binding.rb
101
119
  - test/test_noid.rb
102
120
  has_rdoc: true
103
121
  homepage: http://github.com/cbeer/noid
@@ -135,4 +153,5 @@ specification_version: 3
135
153
  summary: Nice Opaque Identifier
136
154
  test_files:
137
155
  - test/helper.rb
156
+ - test/test_binding.rb
138
157
  - test/test_noid.rb