noid 0.3.1 → 0.4.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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.1
1
+ 0.4.0
@@ -0,0 +1,6 @@
1
+ class Noidtest < ActiveRecord::Base
2
+ include Noid::ActiveRecord::Provider
3
+
4
+ identifier_field :identifier
5
+ minter Noid::Persistence::JSON.new(:template => 's.sdd', :filename => persistence_path)
6
+ end
data/lib/noid.rb CHANGED
@@ -6,6 +6,8 @@ require 'noid/persistence/json'
6
6
  require 'noid/identifier'
7
7
  require 'noid/identifier/singleton'
8
8
  require 'noid/identifier/anvl'
9
+ require 'noid/active_record'
10
+ require 'noid/active_record/provider'
9
11
  module Noid
10
12
 
11
13
  end
@@ -0,0 +1,5 @@
1
+ module Noid
2
+ module ActiveRecord
3
+
4
+ end
5
+ end
@@ -0,0 +1,36 @@
1
+ module Noid::ActiveRecord
2
+ module Provider
3
+ def self.included base
4
+ base.send :before_create, :mint_identifier
5
+ # base.send :attr_accessor, :minter
6
+ class << base
7
+ def minter value = nil
8
+ @minter = value if value
9
+ @minter
10
+ end
11
+
12
+ def identifier_field value = nil
13
+ @identifier_field = value if value
14
+ @identifier_field
15
+ end
16
+
17
+ def persistence_path
18
+ File.join RAILS_ROOT, "db/#{self.to_s}_NOID.js"
19
+ end
20
+ end
21
+ end
22
+
23
+ def minter= value
24
+ @minter = value
25
+ end
26
+
27
+ def minter
28
+ @minter || self.class.minter
29
+ end
30
+
31
+ def mint_identifier
32
+ self.send "#{self.class.instance_variable_get('@identifier_field')}=", self.minter.mint unless self.attribute_present? self.class.instance_variable_get('@identifier_field')
33
+ end
34
+
35
+ end
36
+ end
data/lib/noid/base.rb CHANGED
@@ -9,6 +9,7 @@ module Noid
9
9
  @max = nil
10
10
  @min = nil
11
11
  @config = { :identifier => {} }.merge args
12
+ super() if respond_to?('super')
12
13
  setup_mask args
13
14
  end
14
15
 
@@ -117,7 +118,8 @@ module Noid
117
118
  end
118
119
 
119
120
  def setup_mask args
120
- @prefix, @mask = args[:template].split('.')
121
+ @template = args[:template]
122
+ @prefix, @mask = @template.split('.')
121
123
 
122
124
  @prefix = "#{args[:namespace]}/#{@prefix}" if args[:namespace]
123
125
 
@@ -4,14 +4,16 @@ module Noid::Persistence
4
4
  FILENAME = 'NOID.js'
5
5
  def initialize args = {}
6
6
  @file = args[:filename] || FILENAME
7
- data = load_json
7
+ @json = args[:json] || File.read(@file) rescue nil
8
+ data = load_json if @json
9
+ data ||= {}
8
10
  super data.merge(args)
9
11
  save
10
12
  end
11
13
 
12
14
  protected
13
15
  def load_json
14
- data = ::JSON.parse(File.read(@file)) if File.exists? @file
16
+ data = ::JSON.parse(@json) rescue nil
15
17
  data ||= {}
16
18
  data = data.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo} unless data.empty?
17
19
  data[:counters] = data[:counters].map { |x| x.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo} } if data[:counters]
@@ -20,10 +22,16 @@ module Noid::Persistence
20
22
  end
21
23
 
22
24
  def save
25
+ str = self.to_json
23
26
  File.open(@file, 'w') do |f|
24
- str = { :identifier => { :class => identifier }, :s => @s, :counters => @counters, :seed => @seed, }.to_json
25
27
  f.write(str)
26
- end
28
+ end unless @file == '/dev/null'
29
+
30
+ str
31
+ end
32
+
33
+ def to_json
34
+ str = { :template => @template, :identifier => { :class => identifier.name }, :s => @s, :counters => @counters, :seed => @seed }.to_json
27
35
  end
28
36
 
29
37
  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.3.1"
8
+ s.version = "0.4.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-16}
12
+ s.date = %q{2010-12-23}
13
13
  s.description = %q{}
14
14
  s.email = %q{chris@cbeer.info}
15
15
  s.extra_rdoc_files = [
@@ -23,7 +23,10 @@ Gem::Specification.new do |s|
23
23
  "README.rdoc",
24
24
  "Rakefile",
25
25
  "VERSION",
26
+ "doc/active_record_sample.rb",
26
27
  "lib/noid.rb",
28
+ "lib/noid/active_record.rb",
29
+ "lib/noid/active_record/provider.rb",
27
30
  "lib/noid/base.rb",
28
31
  "lib/noid/identifier.rb",
29
32
  "lib/noid/identifier/anvl.rb",
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: 17
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 3
9
- - 1
10
- version: 0.3.1
8
+ - 4
9
+ - 0
10
+ version: 0.4.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-16 00:00:00 -05:00
18
+ date: 2010-12-23 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -136,7 +136,10 @@ files:
136
136
  - README.rdoc
137
137
  - Rakefile
138
138
  - VERSION
139
+ - doc/active_record_sample.rb
139
140
  - lib/noid.rb
141
+ - lib/noid/active_record.rb
142
+ - lib/noid/active_record/provider.rb
140
143
  - lib/noid/base.rb
141
144
  - lib/noid/identifier.rb
142
145
  - lib/noid/identifier/anvl.rb