hydra-remote_identifier 0.2.0 → 0.2.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c555e2e358d784219f8aeae86457d9a456410470
4
- data.tar.gz: 1e6e8f346332a2692a6c04001837cb18ca3ef6db
3
+ metadata.gz: 10836a31b160f5f0061cb2d18a6ccce899434f52
4
+ data.tar.gz: feb33ac8e38e21c1bc001207d17ce834ef4c620e
5
5
  SHA512:
6
- metadata.gz: 8ce31c0525b6c307bcebc30f9a227a87d047ad76da1a872c3a5454b900d2081f5aeedd67a0126bed876cba6337d0ec1efee78086f487c5a9377198b7fd68bd54
7
- data.tar.gz: 8379665c7d8f1a022a3e09bf3f7ef4ed4fa126caebda959325f2585c437e3e4eb68ddb4c149e004f8c7b813997f404ee670ee56fa120d4e1b9b41e4f8bfc0c79
6
+ metadata.gz: b7cc709cba8c837303e438c6b71d369a49eb995ba17023dbef89f9814be236f59de0aa7decbf930541590cc6283da0781b9952267bcab1e8d5b21f4ff24d03ae
7
+ data.tar.gz: e7181ea4930d62f5c83c6886d49903c2566ead86ac600b615d8040749347bb809de0edf95673d053f38fb2125e9071c5a15d3e58f43c3b9989a7a27b1ed94153
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Hydra::RemoteIdentifier
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/hydra-remote_identifier.png)](http://badge.fury.io/rb/hydra-remote_identifier)
4
+
3
5
  Coordinate the registration and minting of remote identifiers for persisted
4
6
  objects.
5
7
 
@@ -23,8 +25,8 @@ Configure your remote identifiers with credentials and what have you:
23
25
 
24
26
  doi_credentials = Psych.load('/path/to/doi_credentials.yml')
25
27
  Hydra::RemoteIdentifier.configure do |config|
26
- config.configure_remote_service(:doi, doi_credentials) do |doi|
27
- doi.register(target_class) do |map|
28
+ config.remote_service(:doi, doi_credentials) do |doi|
29
+ doi.register(Book, Page) do |map|
28
30
  map.target :url
29
31
  map.creator :creator
30
32
  map.title :title
@@ -12,7 +12,7 @@ module Hydra::RemoteIdentifier
12
12
  #
13
13
  # @example
14
14
  # Hydra::RemoteIdentifier.configure do |config|
15
- # config.configure_remote_service(:doi, doi_credentials) do |doi|
15
+ # config.remote_service(:doi, doi_credentials) do |doi|
16
16
  # doi.register(target_class) do |map|
17
17
  # map.target :url
18
18
  # map.creator :creator
@@ -31,6 +31,24 @@ module Hydra::RemoteIdentifier
31
31
  yield(configuration)
32
32
  end
33
33
 
34
+ # Using the RemoteService mint the corresponding remote identifier for
35
+ # the target. You must first configure the RemoteService and target's class
36
+ # to define the attribute map. See Hydra::RemoteIdentifier.configure
37
+ #
38
+ #
39
+ # @example
40
+ # Hydra::RemoteIdentifier.mint(:doi, book)
41
+ #
42
+ # @param remote_service_name [#to_s]
43
+ # @param target [#registered_remote_identifier_minters]
44
+ def mint(remote_service_name, target)
45
+ # @TODO - there is a better way to do this but this is "complete/correct"
46
+ remote_service = configuration.find_remote_service(remote_service_name)
47
+ target.registered_remote_identifier_minters.each do |minter|
48
+ minter.call(target) if minter.remote_service == remote_service
49
+ end
50
+ end
51
+
34
52
  end
35
53
 
36
54
  end
@@ -1,4 +1,5 @@
1
1
  require File.expand_path('../remote_services', __FILE__)
2
+ require File.expand_path('../registration', __FILE__)
2
3
 
3
4
  module Hydra::RemoteIdentifier
4
5
 
@@ -7,25 +8,23 @@ module Hydra::RemoteIdentifier
7
8
  class Configuration
8
9
 
9
10
  def initialize(options = {})
10
- @remote_service_namespace_container = options.fetch(:remote_service_namespace_container, Hydra::RemoteIdentifier::RemoteServices)
11
+ @remote_service_namespace_container = options.fetch(:remote_service_namespace_container, RemoteServices)
12
+ @registration_builder = options.fetch(:registration_builder, Registration)
11
13
  @remote_services = {}
12
14
  end
13
- attr_reader :remote_service_namespace_container
14
- private :remote_service_namespace_container
15
+ attr_reader :remote_service_namespace_container, :registration_builder
16
+ private :remote_service_namespace_container, :registration_builder
15
17
  attr_reader :remote_services
16
18
 
17
19
  def find_remote_service(service_name)
18
- remote_services.fetch(service_name, remote_service_class_lookup(service_name).new)
20
+ remote_services.fetch(service_name)
19
21
  end
20
22
 
21
- def remote_service(service_name, *args, &block)
22
- remote_service_class_lookup(service_name).configure(*args, &block)
23
- end
24
-
25
- def configure_remote_service(service_name, *args, &block)
23
+ def remote_service(service_name, *args)
26
24
  remote_service = remote_service_class_lookup(service_name).new(*args)
27
- remote_services[service_name]
28
- yield(Registration.new(remote_service))
25
+ remote_services[service_name] = remote_service
26
+ registration = registration_builder.new(remote_service)
27
+ yield(registration)
29
28
  remote_service
30
29
  end
31
30
 
@@ -1,5 +1,5 @@
1
1
  module Hydra
2
2
  module RemoteIdentifier
3
- VERSION = "0.2.0"
3
+ VERSION = "0.2.1"
4
4
  end
5
5
  end
@@ -6,11 +6,9 @@ module Hydra::RemoteIdentifier
6
6
  around do |example|
7
7
  module RemoteServices
8
8
  class MyRemoteService
9
- class << self
10
- attr_reader :options
11
- def configure(*args, &block)
12
- @options = [args, block]
13
- end
9
+ attr_reader :options
10
+ def initialize(*options)
11
+ @options = options
14
12
  end
15
13
  end
16
14
  end
@@ -18,15 +16,19 @@ module Hydra::RemoteIdentifier
18
16
  RemoteServices.send(:remove_const, :MyRemoteService)
19
17
  end
20
18
 
21
- subject { Configuration.new }
22
-
23
- context 'with a missing service' do
24
- specify do
25
- expect { subject.remote_service(:obviously_missing_service) }.to raise_error(NotImplementedError)
19
+ subject { Configuration.new(registration_builder: registration_builder) }
20
+ let(:registration_builder) {
21
+ Class.new do
22
+ attr_reader :remote_service
23
+ def initialize(remote_service)
24
+ @remote_service = remote_service
25
+ end
26
26
  end
27
+ }
28
+ context 'with a missing service' do
27
29
  specify do
28
30
  expect {
29
- subject.find_remote_service(:obviously_missing_service)
31
+ subject.remote_service(:obviously_missing_service)
30
32
  }.to raise_error(NotImplementedError)
31
33
  end
32
34
  end
@@ -34,15 +36,11 @@ module Hydra::RemoteIdentifier
34
36
  context 'with an existing service' do
35
37
  let(:block) { lambda {} }
36
38
  specify do
37
- expect {
38
- subject.remote_service(:my_remote_service, :arg, &block)
39
- }.to change(RemoteServices::MyRemoteService, :options).from(nil).to([[:arg], block])
40
- end
41
- specify do
42
- expect(subject.find_remote_service(:my_remote_service)).to be_an_instance_of(RemoteServices::MyRemoteService)
39
+ expect {|reg|
40
+ subject.remote_service(:my_remote_service, &reg)
41
+ }.to yield_with_args(registration_builder)
43
42
  end
44
43
  end
45
-
46
44
  end
47
45
 
48
46
  end
@@ -14,7 +14,7 @@ module Hydra::RemoteIdentifier
14
14
  subject.register(target_class, &map)
15
15
  }.to change{ target_class.respond_to?(:registered_remote_identifier_minters) }.from(false).to(true)
16
16
  end
17
- it 'adds a .registered_remote_identifier_minters method' do
17
+ it 'registers the minting coordinator on the target class' do
18
18
  subject.register(target_class, &map)
19
19
  expect(target_class.registered_remote_identifier_minters).to eq [:minting_coordinator]
20
20
  end
@@ -4,12 +4,17 @@ module Hydra::RemoteIdentifier
4
4
 
5
5
  describe RemoteService do
6
6
 
7
- describe 'instance methods' do
8
- let(:payload) { 'abc' }
9
- subject { RemoteService.new }
7
+ let(:payload) { 'abc' }
8
+ subject { RemoteService.new }
9
+
10
+ context '#call' do
10
11
  it { expect { subject.call(payload) }.to raise_error NotImplementedError }
12
+ end
13
+
14
+ context '#valid_attribute?' do
11
15
  it { expect { subject.valid_attribute?(:attribute_name) }.to raise_error NotImplementedError }
12
16
  end
17
+
13
18
  end
14
19
 
15
- end
20
+ end
@@ -1,3 +1,4 @@
1
+ require 'spec_helper'
1
2
  require File.expand_path('../../../../lib/hydra/remote_identifier', __FILE__)
2
3
  module Hydra::RemoteIdentifier
3
4
 
@@ -34,7 +35,7 @@ module Hydra::RemoteIdentifier
34
35
 
35
36
  before(:each) do
36
37
  Hydra::RemoteIdentifier.configure do |config|
37
- config.configure_remote_service(:doi, doi_options) do |doi|
38
+ config.remote_service(:doi, doi_options) do |doi|
38
39
  doi.register(target_class) do |map|
39
40
  map.target :url
40
41
  map.creator :creator
@@ -49,9 +50,7 @@ module Hydra::RemoteIdentifier
49
50
 
50
51
  it 'works!', VCR::SpecSupport.merge(record: :new_episodes, cassette_name: 'doi-integration') do
51
52
  expect {
52
- target_class.registered_remote_identifier_minters.each do |minter|
53
- minter.call(target)
54
- end
53
+ Hydra::RemoteIdentifier.mint(:doi, target)
55
54
  }.to change(target, :set_identifier).from(nil).to(expected_doi)
56
55
  end
57
56
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hydra-remote_identifier
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Friesen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-03 00:00:00.000000000 Z
11
+ date: 2013-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -145,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
145
  version: '0'
146
146
  requirements: []
147
147
  rubyforge_project:
148
- rubygems_version: 2.0.3
148
+ rubygems_version: 2.0.7
149
149
  signing_key:
150
150
  specification_version: 4
151
151
  summary: Handles the registration and minting of remote identifiers (i.e. DOI, ARK,