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
         
     |