noid-rails 3.0.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.
- checksums.yaml +7 -0
- data/.gitignore +36 -0
- data/.rspec +2 -0
- data/.rubocop.yml +24 -0
- data/.rubocop_todo.yml +107 -0
- data/.travis.yml +11 -0
- data/CONTRIBUTING.md +159 -0
- data/Gemfile +39 -0
- data/LICENSE +15 -0
- data/README.md +214 -0
- data/Rakefile +23 -0
- data/app/models/minter_state.rb +16 -0
- data/db/migrate/20160610010003_create_minter_states.rb +16 -0
- data/db/migrate/20161021203429_rename_minter_state_random_to_rand.rb +7 -0
- data/lib/generators/noid/rails/install_generator.rb +22 -0
- data/lib/generators/noid/rails/seed_generator.rb +37 -0
- data/lib/noid/rails/config.rb +35 -0
- data/lib/noid/rails/engine.rb +10 -0
- data/lib/noid/rails/minter/base.rb +65 -0
- data/lib/noid/rails/minter/db.rb +82 -0
- data/lib/noid/rails/minter/file.rb +65 -0
- data/lib/noid/rails/minter.rb +5 -0
- data/lib/noid/rails/rspec.rb +67 -0
- data/lib/noid/rails/service.rb +26 -0
- data/lib/noid/rails/version.rb +7 -0
- data/lib/noid-rails.rb +29 -0
- data/lib/tasks/noid_tasks.rake +59 -0
- data/noid-rails.gemspec +31 -0
- data/spec/models/minter_state_spec.rb +41 -0
- data/spec/spec_helper.rb +40 -0
- data/spec/support/minterstate_table.rb +13 -0
- data/spec/support/shared_examples/minter.rb +39 -0
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +16 -0
- data/spec/unit/config_spec.rb +45 -0
- data/spec/unit/db_minter_spec.rb +88 -0
- data/spec/unit/file_minter_spec.rb +54 -0
- data/spec/unit/noid_spec.rb +43 -0
- data/spec/unit/rspec_spec.rb +90 -0
- data/spec/unit/service_spec.rb +32 -0
- metadata +225 -0
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
shared_examples 'a minter' do
|
4
|
+
describe '#mint' do
|
5
|
+
subject { minter.mint }
|
6
|
+
|
7
|
+
it { is_expected.not_to be_empty }
|
8
|
+
|
9
|
+
it 'does not mint the same ID twice in a row' do
|
10
|
+
expect(subject).not_to eq described_class.new.mint
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'is valid' do
|
14
|
+
expect(minter.valid?(subject)).to be true
|
15
|
+
expect(described_class.new.valid?(subject)).to be true
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'with a different template' do
|
19
|
+
it 'is invalid' do
|
20
|
+
expect(described_class.new('.reedddk').valid?(subject)).to be false
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'when the id already exists' do
|
26
|
+
let(:existing_id) { 'ef12ef12f' }
|
27
|
+
let(:unique_id) { 'bb22bb22b' }
|
28
|
+
|
29
|
+
before do
|
30
|
+
expect(subject).to receive(:next_id).and_return(existing_id, unique_id)
|
31
|
+
allow(subject).to receive(:identifier_in_use?).with(existing_id).and_return(true)
|
32
|
+
allow(subject).to receive(:identifier_in_use?).with(unique_id).and_return(false)
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'skips the existing id' do
|
36
|
+
expect(subject.mint).to eq unique_id
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/generators'
|
4
|
+
|
5
|
+
class TestAppGenerator < Rails::Generators::Base
|
6
|
+
source_root './spec/test_app_templates'
|
7
|
+
|
8
|
+
# if you need to generate any additional configuration
|
9
|
+
# into the test app, this generator will be run immediately
|
10
|
+
# after setting up the application
|
11
|
+
|
12
|
+
def install_engine
|
13
|
+
generate 'noid:rails:install'
|
14
|
+
rake 'db:migrate'
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe Noid::Rails::Config do
|
4
|
+
subject { described_class.new }
|
5
|
+
|
6
|
+
it { is_expected.to respond_to(:template) }
|
7
|
+
it { is_expected.to respond_to(:statefile) }
|
8
|
+
it { is_expected.to respond_to(:namespace) }
|
9
|
+
it { is_expected.to respond_to(:minter_class) }
|
10
|
+
|
11
|
+
describe '#template' do
|
12
|
+
let(:default) { '.reeddeeddk' }
|
13
|
+
|
14
|
+
it 'has a default' do
|
15
|
+
expect(subject.template).to eq default
|
16
|
+
end
|
17
|
+
|
18
|
+
describe 'overriding' do
|
19
|
+
before { subject.template = custom_template }
|
20
|
+
|
21
|
+
let(:custom_template) { '.dddddd' }
|
22
|
+
|
23
|
+
it 'allows setting a custom template' do
|
24
|
+
expect(subject.template).to eq custom_template
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '#minter_class' do
|
30
|
+
let(:default) { Noid::Rails::Minter::File }
|
31
|
+
|
32
|
+
it 'has a default' do
|
33
|
+
expect(subject.minter_class).to eq default
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'when overridden' do
|
37
|
+
before { subject.minter_class = different_minter }
|
38
|
+
let(:different_minter) { Noid::Rails::Minter::File }
|
39
|
+
|
40
|
+
it 'uses the different minter' do
|
41
|
+
expect(subject.minter_class).to eq different_minter
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe Noid::Rails::Minter::Db do
|
4
|
+
include MinterStateHelper
|
5
|
+
|
6
|
+
after { reset_minter_state_table }
|
7
|
+
subject(:db_minter) { described_class.new }
|
8
|
+
|
9
|
+
before do
|
10
|
+
reset_minter_state_table
|
11
|
+
end
|
12
|
+
|
13
|
+
it_behaves_like 'a minter' do
|
14
|
+
let(:minter) { db_minter }
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#initialize' do
|
18
|
+
it 'raises on bad templates' do
|
19
|
+
expect { described_class.new('reeddeeddk') }.to raise_error(Noid::TemplateError)
|
20
|
+
expect { described_class.new('') }.to raise_error(Noid::TemplateError)
|
21
|
+
end
|
22
|
+
it 'returns object w/ default template' do
|
23
|
+
expect(db_minter).to be_instance_of described_class
|
24
|
+
expect(db_minter).to be_a Noid::Minter
|
25
|
+
expect(db_minter.template).to be_instance_of Noid::Template
|
26
|
+
expect(db_minter.template.to_s).to eq Noid::Rails.config.template
|
27
|
+
end
|
28
|
+
context 'with a user provided template' do
|
29
|
+
let(:db_minter) { described_class.new('.reedddk') }
|
30
|
+
|
31
|
+
it 'accepts valid template arg' do
|
32
|
+
expect(db_minter).to be_instance_of described_class
|
33
|
+
expect(db_minter).to be_a Noid::Minter
|
34
|
+
expect(db_minter.template).to be_instance_of Noid::Template
|
35
|
+
expect(db_minter.template.to_s).to eq '.reedddk'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '#read' do
|
41
|
+
subject { db_minter.read }
|
42
|
+
|
43
|
+
context 'when the database has been initialized' do
|
44
|
+
it 'has the expected namespace and template' do
|
45
|
+
expect(subject).to include(namespace: Noid::Rails.config.namespace,
|
46
|
+
template: Noid::Rails.config.template)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context 'when the database has not been initialized' do
|
51
|
+
before do
|
52
|
+
MinterState.destroy_all
|
53
|
+
end
|
54
|
+
it 'has the expected namespace and template' do
|
55
|
+
expect(subject).to include(namespace: Noid::Rails.config.namespace,
|
56
|
+
template: Noid::Rails.config.template)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe '#write!' do
|
62
|
+
let(:starting_state) { db_minter.read }
|
63
|
+
let(:minter) { Noid::Minter.new(starting_state) }
|
64
|
+
|
65
|
+
before { minter.mint }
|
66
|
+
|
67
|
+
it 'changes the state of the minter' do
|
68
|
+
expect { db_minter.write!(minter) }
|
69
|
+
.to change { db_minter.read[:seq] }
|
70
|
+
.from(starting_state[:seq]).to(minter.seq)
|
71
|
+
.and change { db_minter.read[:counters] }
|
72
|
+
.from(starting_state[:counters]).to(minter.counters)
|
73
|
+
.and change { db_minter.read[:rand] }
|
74
|
+
.from(starting_state[:rand]).to(Marshal.dump(minter.instance_variable_get(:@rand)))
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe '#next_id' do
|
79
|
+
let(:stub_minter) { described_class.new }
|
80
|
+
let(:locked) { MinterState }
|
81
|
+
|
82
|
+
it 'locks DB row and does not query twice' do
|
83
|
+
expect(MinterState).to receive(:lock).and_return(locked).once
|
84
|
+
expect(locked).to receive(:find_by!).once.and_return(MinterState.first)
|
85
|
+
stub_minter.send(:next_id)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe Noid::Rails::Minter::File do
|
4
|
+
it { is_expected.to respond_to(:mint) }
|
5
|
+
|
6
|
+
it 'has a default statefile' do
|
7
|
+
expect(subject.statefile).to eq Noid::Rails.config.statefile
|
8
|
+
end
|
9
|
+
it 'has a default template' do
|
10
|
+
expect(subject.template.to_s).to eq Noid::Rails.config.template
|
11
|
+
end
|
12
|
+
|
13
|
+
it_behaves_like 'a minter' do
|
14
|
+
let(:minter) { described_class.new }
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#initialize' do
|
18
|
+
let(:template) { '.rededk' }
|
19
|
+
let(:statefile) { '/tmp/foobar' }
|
20
|
+
|
21
|
+
subject { described_class.new(template, statefile) }
|
22
|
+
|
23
|
+
it 'respects the custom template' do
|
24
|
+
expect(subject.template.to_s).to eq template
|
25
|
+
end
|
26
|
+
it 'respects the custom statefile' do
|
27
|
+
expect(subject.statefile).to eq statefile
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#read' do
|
32
|
+
it 'returns a hash' do
|
33
|
+
expect(subject.read).to be_a(Hash)
|
34
|
+
end
|
35
|
+
it 'has the expected template' do
|
36
|
+
expect(subject.read[:template]).to eq Noid::Rails.config.template
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '#write!' do
|
41
|
+
let(:starting_state) { subject.read }
|
42
|
+
let(:minter) { Noid::Minter.new(starting_state) }
|
43
|
+
|
44
|
+
before { minter.mint }
|
45
|
+
it 'changes the state of the minter' do
|
46
|
+
expect { subject.write!(minter) }.to change { subject.read[:seq] }
|
47
|
+
.from(starting_state[:seq]).to(minter.seq)
|
48
|
+
.and change { subject.read[:rand] }
|
49
|
+
.from(starting_state[:rand]).to(Marshal.dump(minter.instance_variable_get(:@rand)))
|
50
|
+
.and change { subject.read[:counters] }
|
51
|
+
.to(minter.counters)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe Noid::Rails do
|
4
|
+
describe '#configure' do
|
5
|
+
it { is_expected.to respond_to(:configure) }
|
6
|
+
end
|
7
|
+
|
8
|
+
describe '#config' do
|
9
|
+
it 'returns a config object' do
|
10
|
+
expect(subject.config).to be_instance_of Noid::Rails::Config
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#treeify' do
|
15
|
+
subject { described_class.treeify(id) }
|
16
|
+
|
17
|
+
let(:id) { 'abc123def45' }
|
18
|
+
|
19
|
+
it { is_expected.to eq 'ab/c1/23/de/abc123def45' }
|
20
|
+
|
21
|
+
context 'with a seven-digit identifier' do
|
22
|
+
let(:id) { 'abc123z' }
|
23
|
+
|
24
|
+
it { is_expected.to eq 'ab/c1/23/z/abc123z' }
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'with an empty string' do
|
28
|
+
let(:id) { '' }
|
29
|
+
|
30
|
+
it 'raises ArgumentError' do
|
31
|
+
expect { subject }.to raise_error(ArgumentError)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'with a nil' do
|
36
|
+
let(:id) { nil }
|
37
|
+
|
38
|
+
it 'raises ArgumentError' do
|
39
|
+
expect { subject }.to raise_error(ArgumentError)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'noid/rails/rspec'
|
4
|
+
|
5
|
+
RSpec.describe Noid::Rails::RSpec do
|
6
|
+
include described_class
|
7
|
+
|
8
|
+
let(:configured_minter) { @configured_minter }
|
9
|
+
let(:var_name) { :@original_minter }
|
10
|
+
|
11
|
+
before do
|
12
|
+
@configured_minter = Class.new(Noid::Rails::Minter::Base)
|
13
|
+
@reset_minter = Noid::Rails.config.minter_class
|
14
|
+
|
15
|
+
Noid::Rails.configure do |noid_config|
|
16
|
+
noid_config.minter_class = @configured_minter
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
after do
|
21
|
+
Noid::Rails.configure do |noid_config|
|
22
|
+
noid_config.minter_class = @reset_minter
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '#disable_production_minter!' do
|
27
|
+
it 'changes the configured minter' do
|
28
|
+
expect { disable_production_minter! }
|
29
|
+
.to change { Noid::Rails.config.minter_class }
|
30
|
+
.from(configured_minter)
|
31
|
+
.to described_class::DEFAULT_TEST_MINTER
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'accepts custom test minter at call time' do
|
35
|
+
my_minter = Class.new(Noid::Rails::Minter::Base)
|
36
|
+
|
37
|
+
expect { disable_production_minter!(test_minter: my_minter) }
|
38
|
+
.to change { Noid::Rails.config.minter_class }
|
39
|
+
.from(configured_minter)
|
40
|
+
.to my_minter
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'does not overwrite stored minter on second call' do
|
44
|
+
disable_production_minter!
|
45
|
+
|
46
|
+
expect { disable_production_minter! }.not_to change { described_class.instance_variable_get(var_name) }
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'still reenables after second call' do
|
50
|
+
2.times { disable_production_minter! }
|
51
|
+
expect { enable_production_minter! }
|
52
|
+
.to change { Noid::Rails.config.minter_class }
|
53
|
+
.from(described_class::DEFAULT_TEST_MINTER).to configured_minter
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'disables after reenable' do
|
57
|
+
disable_production_minter!
|
58
|
+
enable_production_minter!
|
59
|
+
expect { disable_production_minter! }
|
60
|
+
.to change { Noid::Rails.config.minter_class }
|
61
|
+
.from(configured_minter).to described_class::DEFAULT_TEST_MINTER
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe '#enable_production_minter!' do
|
66
|
+
it 'does nothing when already enabled' do
|
67
|
+
expect { enable_production_minter! }
|
68
|
+
.not_to change { Noid::Rails.config.minter_class }
|
69
|
+
end
|
70
|
+
|
71
|
+
context 'with minter disabled' do
|
72
|
+
before { disable_production_minter! }
|
73
|
+
|
74
|
+
it 'reenables the originally configured minter' do
|
75
|
+
expect { enable_production_minter! }
|
76
|
+
.to change { Noid::Rails.config.minter_class }
|
77
|
+
.from(described_class::DEFAULT_TEST_MINTER)
|
78
|
+
.to configured_minter
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'enables after re-disable' do
|
82
|
+
enable_production_minter!
|
83
|
+
disable_production_minter!
|
84
|
+
expect { enable_production_minter! }
|
85
|
+
.to change { Noid::Rails.config.minter_class }
|
86
|
+
.from(described_class::DEFAULT_TEST_MINTER).to configured_minter
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe Noid::Rails::Service do
|
4
|
+
describe 'public API' do
|
5
|
+
it { is_expected.to respond_to(:valid?) }
|
6
|
+
it { is_expected.to respond_to(:mint) }
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'has a default minter' do
|
10
|
+
expect(subject.minter).to be_instance_of Noid::Rails::Minter::File
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'with a custom minter' do
|
14
|
+
let(:minter) { double('minter') }
|
15
|
+
let(:identifier) { 'abc123' }
|
16
|
+
let(:new_service) { described_class.new(minter) }
|
17
|
+
|
18
|
+
it 'allows injecting a custom minter' do
|
19
|
+
expect(new_service.minter).to eq minter
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'delegates validity checking to the minter' do
|
23
|
+
expect(minter).to receive(:valid?).with(identifier).once
|
24
|
+
new_service.valid? identifier
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'delegates minting to the minter' do
|
28
|
+
expect(minter).to receive(:mint).once
|
29
|
+
new_service.mint
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
metadata
ADDED
@@ -0,0 +1,225 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: noid-rails
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 3.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Michael J. Giarlo
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-12-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: actionpack
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 5.0.0
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '6'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 5.0.0
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '6'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: noid
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0.9'
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0.9'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: bundler
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '1.7'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '1.7'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: engine_cart
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '1.0'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '1.0'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: rake
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '11'
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '11'
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: rspec
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - "~>"
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '3.2'
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '3.2'
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: rubocop
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 0.52.0
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - "~>"
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: 0.52.0
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: rubocop-rspec
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - "~>"
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: 1.20.1
|
124
|
+
type: :development
|
125
|
+
prerelease: false
|
126
|
+
version_requirements: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - "~>"
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: 1.20.1
|
131
|
+
- !ruby/object:Gem::Dependency
|
132
|
+
name: sqlite3
|
133
|
+
requirement: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - ">="
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '0'
|
138
|
+
type: :development
|
139
|
+
prerelease: false
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0'
|
145
|
+
description: Noid identifier services for Rails-based applications.
|
146
|
+
email:
|
147
|
+
- leftwing@alumni.rutgers.edu
|
148
|
+
executables: []
|
149
|
+
extensions: []
|
150
|
+
extra_rdoc_files: []
|
151
|
+
files:
|
152
|
+
- ".gitignore"
|
153
|
+
- ".rspec"
|
154
|
+
- ".rubocop.yml"
|
155
|
+
- ".rubocop_todo.yml"
|
156
|
+
- ".travis.yml"
|
157
|
+
- CONTRIBUTING.md
|
158
|
+
- Gemfile
|
159
|
+
- LICENSE
|
160
|
+
- README.md
|
161
|
+
- Rakefile
|
162
|
+
- app/models/minter_state.rb
|
163
|
+
- db/migrate/20160610010003_create_minter_states.rb
|
164
|
+
- db/migrate/20161021203429_rename_minter_state_random_to_rand.rb
|
165
|
+
- lib/generators/noid/rails/install_generator.rb
|
166
|
+
- lib/generators/noid/rails/seed_generator.rb
|
167
|
+
- lib/noid-rails.rb
|
168
|
+
- lib/noid/rails/config.rb
|
169
|
+
- lib/noid/rails/engine.rb
|
170
|
+
- lib/noid/rails/minter.rb
|
171
|
+
- lib/noid/rails/minter/base.rb
|
172
|
+
- lib/noid/rails/minter/db.rb
|
173
|
+
- lib/noid/rails/minter/file.rb
|
174
|
+
- lib/noid/rails/rspec.rb
|
175
|
+
- lib/noid/rails/service.rb
|
176
|
+
- lib/noid/rails/version.rb
|
177
|
+
- lib/tasks/noid_tasks.rake
|
178
|
+
- noid-rails.gemspec
|
179
|
+
- spec/models/minter_state_spec.rb
|
180
|
+
- spec/spec_helper.rb
|
181
|
+
- spec/support/minterstate_table.rb
|
182
|
+
- spec/support/shared_examples/minter.rb
|
183
|
+
- spec/test_app_templates/lib/generators/test_app_generator.rb
|
184
|
+
- spec/unit/config_spec.rb
|
185
|
+
- spec/unit/db_minter_spec.rb
|
186
|
+
- spec/unit/file_minter_spec.rb
|
187
|
+
- spec/unit/noid_spec.rb
|
188
|
+
- spec/unit/rspec_spec.rb
|
189
|
+
- spec/unit/service_spec.rb
|
190
|
+
homepage: https://github.com/samvera/noid-rails
|
191
|
+
licenses:
|
192
|
+
- Apache2
|
193
|
+
metadata: {}
|
194
|
+
post_install_message:
|
195
|
+
rdoc_options: []
|
196
|
+
require_paths:
|
197
|
+
- lib
|
198
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
199
|
+
requirements:
|
200
|
+
- - ">="
|
201
|
+
- !ruby/object:Gem::Version
|
202
|
+
version: '0'
|
203
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
204
|
+
requirements:
|
205
|
+
- - ">="
|
206
|
+
- !ruby/object:Gem::Version
|
207
|
+
version: '0'
|
208
|
+
requirements: []
|
209
|
+
rubyforge_project:
|
210
|
+
rubygems_version: 2.7.1
|
211
|
+
signing_key:
|
212
|
+
specification_version: 4
|
213
|
+
summary: Noid identifier services for Rails-based applications
|
214
|
+
test_files:
|
215
|
+
- spec/models/minter_state_spec.rb
|
216
|
+
- spec/spec_helper.rb
|
217
|
+
- spec/support/minterstate_table.rb
|
218
|
+
- spec/support/shared_examples/minter.rb
|
219
|
+
- spec/test_app_templates/lib/generators/test_app_generator.rb
|
220
|
+
- spec/unit/config_spec.rb
|
221
|
+
- spec/unit/db_minter_spec.rb
|
222
|
+
- spec/unit/file_minter_spec.rb
|
223
|
+
- spec/unit/noid_spec.rb
|
224
|
+
- spec/unit/rspec_spec.rb
|
225
|
+
- spec/unit/service_spec.rb
|