hydra-remote_identifier 0.2.0 → 0.2.1

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