noid 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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