Skip to content

Commit

Permalink
Merge pull request #73 from projecthydra/mixin
Browse files Browse the repository at this point in the history
Add a module mixin to make integration easier
  • Loading branch information
jcoyne committed May 25, 2017
2 parents bb47977 + 451c102 commit 255fd61
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 14 deletions.
16 changes: 2 additions & 14 deletions README.md
Expand Up @@ -63,26 +63,14 @@ noid_service.valid? 'xyz123foobar'

## ActiveFedora integration

To get ActiveFedora to automatically call your Noid service whenever a new ActiveFedora object is saved, create a method on your model called `assign_id` and have it talk to your Noid service, e.g.:
To get ActiveFedora to automatically call your Noid service whenever a new ActiveFedora object is saved, include the `ActiveFedora::Noid::Model`, e.g.:

```ruby
# app/models/my_object.rb
require 'active_fedora/noid'

class MyObject < ActiveFedora::Base
# ...

def assign_id
noid_service.mint
end

# ...

private

def noid_service
@noid_service ||= ActiveFedora::Noid::Service.new
end
include ActiveFedora::Noid::Model
end
```

Expand Down
1 change: 1 addition & 0 deletions lib/active_fedora/noid.rb
Expand Up @@ -4,6 +4,7 @@
require 'active_fedora/noid/engine'
require 'active_fedora/noid/service'
require 'active_fedora/noid/minter'
require 'active_fedora/noid/model'

module ActiveFedora
module Noid
Expand Down
21 changes: 21 additions & 0 deletions lib/active_fedora/noid/model.rb
@@ -0,0 +1,21 @@
# frozen_string_literal: true

module ActiveFedora
module Noid
# Mix this class into an ActiveFedora:Base model in order to have you new objects
# created with a noid id.
module Model
## This overrides the default behavior, which is to ask Fedora for an id
# @see ActiveFedora::Persistence.assign_id
def assign_id
service.mint
end

private

def service
@service ||= ActiveFedora::Noid::Service.new
end
end
end
end
22 changes: 22 additions & 0 deletions spec/models/active_fedora/noid/model_spec.rb
@@ -0,0 +1,22 @@
# frozen_string_literal: true
require 'spec_helper'

RSpec.describe ActiveFedora::Noid::Model do
let(:sample_class) do
Class.new(ActiveFedora::Base) do
include ActiveFedora::Noid::Model
end
end
let(:instance) { sample_class.new }
let(:service) { instance_double(ActiveFedora::Noid::Service, mint: '1234') }

before do
allow(ActiveFedora::Noid::Service).to receive(:new).and_return(service)
end

describe '#assign_id' do
it 'returns the id from the noid service' do
expect(instance.assign_id).to eq '1234'
end
end
end

0 comments on commit 255fd61

Please sign in to comment.