orcid 0.0.4 → 0.1.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 +4 -4
- data/.gitignore +10 -0
- data/.hound.yml +793 -0
- data/.travis.yml +14 -0
- data/Gemfile +14 -0
- data/README.md +107 -6
- data/Rakefile +17 -9
- data/app/assets/images/orcid/.keep +0 -0
- data/app/controllers/orcid/application_controller.rb +13 -4
- data/app/controllers/orcid/profile_connections_controller.rb +34 -6
- data/app/controllers/orcid/profile_requests_controller.rb +18 -15
- data/app/models/orcid/profile.rb +15 -5
- data/app/models/orcid/profile_connection.rb +20 -20
- data/app/models/orcid/profile_request.rb +39 -20
- data/app/models/orcid/work.rb +45 -55
- data/app/models/orcid/work/xml_parser.rb +45 -0
- data/app/models/orcid/work/xml_renderer.rb +29 -0
- data/app/services/orcid/remote/profile_creation_service.rb +40 -32
- data/app/services/orcid/remote/profile_query_service.rb +82 -0
- data/app/services/orcid/remote/profile_query_service/query_parameter_builder.rb +43 -0
- data/app/services/orcid/remote/profile_query_service/search_response.rb +31 -0
- data/app/services/orcid/remote/service.rb +16 -13
- data/app/services/orcid/remote/work_service.rb +58 -43
- data/app/templates/orcid/work.template.v1.1.xml.erb +32 -1
- data/app/views/orcid/profile_connections/_orcid_connector.html.erb +14 -0
- data/app/views/orcid/profile_connections/new.html.erb +4 -4
- data/bin/rails +8 -0
- data/config/{application.yml → application.yml.example} +3 -13
- data/config/locales/orcid.en.yml +5 -1
- data/config/routes.rb +4 -2
- data/lib/generators/orcid/install/install_generator.rb +46 -7
- data/lib/orcid.rb +23 -11
- data/lib/orcid/configuration.rb +32 -13
- data/lib/orcid/configuration/provider.rb +27 -13
- data/lib/orcid/engine.rb +20 -4
- data/lib/orcid/exceptions.rb +33 -4
- data/lib/orcid/named_callbacks.rb +3 -1
- data/lib/orcid/spec_support.rb +19 -9
- data/lib/orcid/version.rb +1 -1
- data/lib/tasks/orcid_tasks.rake +3 -3
- data/orcid.gemspec +51 -0
- data/rubocop.txt +1164 -0
- data/script/fast_specs +22 -0
- data/spec/controllers/orcid/profile_connections_controller_spec.rb +101 -0
- data/spec/controllers/orcid/profile_requests_controller_spec.rb +116 -0
- data/spec/factories/orcid_profile_requests.rb +11 -0
- data/spec/factories/users.rb +9 -0
- data/spec/fast_helper.rb +12 -0
- data/spec/features/batch_profile_spec.rb +31 -0
- data/spec/features/non_ui_based_interactions_spec.rb +117 -0
- data/spec/features/profile_connection_feature_spec.rb +19 -0
- data/spec/features/public_api_query_spec.rb +36 -0
- data/spec/fixtures/orcid_works.xml +55 -0
- data/spec/lib/orcid/configuration/provider_spec.rb +40 -0
- data/spec/lib/orcid/configuration_spec.rb +38 -0
- data/spec/lib/orcid/named_callbacks_spec.rb +28 -0
- data/spec/lib/orcid_spec.rb +97 -0
- data/spec/models/orcid/profile_connection_spec.rb +81 -0
- data/spec/models/orcid/profile_request_spec.rb +131 -0
- data/spec/models/orcid/profile_spec.rb +76 -0
- data/spec/models/orcid/work/xml_parser_spec.rb +40 -0
- data/spec/models/orcid/work/xml_renderer_spec.rb +18 -0
- data/spec/models/orcid/work_spec.rb +53 -0
- data/spec/services/orcid/remote/profile_creation_service_spec.rb +40 -0
- data/spec/services/orcid/remote/profile_query_service/query_parameter_builder_spec.rb +44 -0
- data/spec/services/orcid/remote/profile_query_service/search_response_spec.rb +14 -0
- data/spec/services/orcid/remote/profile_query_service_spec.rb +118 -0
- data/spec/services/orcid/remote/service_spec.rb +26 -0
- data/spec/services/orcid/remote/work_service_spec.rb +44 -0
- data/spec/spec_helper.rb +99 -0
- data/spec/support/non_orcid_models.rb +11 -0
- data/spec/support/stub_callback.rb +25 -0
- data/spec/test_app_templates/Gemfile.extra +3 -0
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +36 -0
- data/spec/views/orcid/profile_connections/new.html.erb_spec.rb +25 -0
- data/spec/views/orcid/profile_requests/new.html.erb_spec.rb +23 -0
- metadata +119 -29
- data/app/runners/orcid/profile_lookup_runner.rb +0 -33
- data/app/runners/orcid/runner.rb +0 -15
- data/app/services/orcid/remote/profile_lookup_service.rb +0 -56
- data/app/services/orcid/remote/profile_lookup_service/search_response.rb +0 -23
- data/lib/orcid/query_parameter_builder.rb +0 -38
@@ -0,0 +1,43 @@
|
|
1
|
+
require_dependency 'orcid/remote/profile_query_service'
|
2
|
+
module Orcid
|
3
|
+
module Remote
|
4
|
+
class ProfileQueryService
|
5
|
+
# http://support.orcid.org/knowledgebase/articles/132354-searching-with-the-public-api
|
6
|
+
module QueryParameterBuilder
|
7
|
+
|
8
|
+
module_function
|
9
|
+
# Responsible for converting an arbitrary query string to the acceptable
|
10
|
+
# Orcid query format.
|
11
|
+
#
|
12
|
+
# @TODO - Note this is likely not correct, but is providing the singular
|
13
|
+
# point of entry
|
14
|
+
def call(input = {})
|
15
|
+
params = {}
|
16
|
+
q_params = []
|
17
|
+
text_params = []
|
18
|
+
input.each do |key, value|
|
19
|
+
next if value.nil? || value.to_s.strip == ''
|
20
|
+
case key.to_s
|
21
|
+
when 'start', 'row'
|
22
|
+
params[key] = value
|
23
|
+
when 'q', 'text'
|
24
|
+
text_params << "#{value}"
|
25
|
+
else
|
26
|
+
q_params << "#{key.to_s.gsub('_', '-')}:#{value}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
case text_params.size
|
31
|
+
when 0; then nil
|
32
|
+
when 1
|
33
|
+
q_params << "text:#{text_params.first}"
|
34
|
+
else
|
35
|
+
q_params << "text:((#{text_params.join(') AND (')}))"
|
36
|
+
end
|
37
|
+
params[:q] = q_params.join(' AND ')
|
38
|
+
params
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require_dependency 'orcid/remote/profile_query_service'
|
2
|
+
module Orcid
|
3
|
+
module Remote
|
4
|
+
class ProfileQueryService
|
5
|
+
# A search response against Orcid. This should implement the Questioning
|
6
|
+
# Authority query response object interface.
|
7
|
+
class SearchResponse
|
8
|
+
delegate :[], :has_key?, :key?, :fetch, to: :@records
|
9
|
+
def initialize(attributes = {})
|
10
|
+
@attributes = attributes.with_indifferent_access
|
11
|
+
end
|
12
|
+
|
13
|
+
def id
|
14
|
+
@attributes.fetch(:id)
|
15
|
+
end
|
16
|
+
|
17
|
+
def orcid_profile_id
|
18
|
+
@attributes.fetch(:id)
|
19
|
+
end
|
20
|
+
|
21
|
+
def label
|
22
|
+
@attributes.fetch(:label)
|
23
|
+
end
|
24
|
+
|
25
|
+
def biography
|
26
|
+
@attributes.fetch(:biography)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -1,19 +1,22 @@
|
|
1
1
|
require 'orcid/named_callbacks'
|
2
|
-
module Orcid
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
2
|
+
module Orcid
|
3
|
+
module Remote
|
4
|
+
# An abstract service class, responsible for making remote calls and
|
5
|
+
# issuing a callback.
|
6
|
+
class Service
|
7
|
+
def initialize
|
8
|
+
@callbacks = Orcid::NamedCallbacks.new
|
9
|
+
yield(@callbacks) if block_given?
|
10
|
+
end
|
8
11
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
+
def call
|
13
|
+
fail NotImplementedError, ("Define #{self.class}#call")
|
14
|
+
end
|
12
15
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
+
def callback(name, *args)
|
17
|
+
@callbacks.call(name, *args)
|
18
|
+
args
|
19
|
+
end
|
16
20
|
end
|
17
|
-
|
18
21
|
end
|
19
22
|
end
|
@@ -1,52 +1,67 @@
|
|
1
1
|
require 'orcid/exceptions'
|
2
|
-
module Orcid
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
2
|
+
module Orcid
|
3
|
+
module Remote
|
4
|
+
# Responsible for interacting with the Orcid works endpoint
|
5
|
+
class WorkService
|
6
|
+
def self.call(orcid_profile_id, options = {})
|
7
|
+
new(orcid_profile_id, options).call
|
8
|
+
end
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
10
|
+
attr_reader(
|
11
|
+
:headers, :token, :orcid_profile_id, :body, :request_method, :path
|
12
|
+
)
|
13
|
+
def initialize(orcid_profile_id, options = {})
|
14
|
+
@orcid_profile_id = orcid_profile_id
|
15
|
+
@request_method = options.fetch(:request_method) { :get }
|
16
|
+
@body = options.fetch(:body) { '' }
|
17
|
+
@token = options.fetch(:token) { default_token }
|
18
|
+
@headers = options.fetch(:headers) { default_headers }
|
19
|
+
@path = options.fetch(:path) { default_path }
|
20
|
+
end
|
17
21
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
22
|
+
# :post will append works to the Orcid Profile
|
23
|
+
# :put will replace the existing Orcid Profile works with the payload
|
24
|
+
# :get will retrieve the Orcid Profile
|
25
|
+
# http://support.orcid.org/knowledgebase/articles/177528-add-works-technical-developer
|
26
|
+
def call
|
27
|
+
response = deliver
|
28
|
+
response.body
|
29
|
+
end
|
26
30
|
|
27
|
-
|
28
|
-
def deliver
|
29
|
-
token.request(request_method, path, body: body, headers: headers)
|
30
|
-
rescue OAuth2::Error => e
|
31
|
-
raise Orcid::RemoteServiceError.new(
|
32
|
-
response_body: e.response.body,
|
33
|
-
response_status: e.response.status,
|
34
|
-
client: token.client,
|
35
|
-
token: token,
|
36
|
-
request_method: request_method,
|
37
|
-
request_path: path,
|
38
|
-
request_body: body,
|
39
|
-
request_headers: headers
|
40
|
-
)
|
41
|
-
end
|
31
|
+
protected
|
42
32
|
|
43
|
-
|
44
|
-
|
45
|
-
|
33
|
+
def deliver
|
34
|
+
token.request(request_method, path, body: body, headers: headers)
|
35
|
+
rescue OAuth2::Error => e
|
36
|
+
handle_oauth_error(e)
|
37
|
+
end
|
46
38
|
|
47
|
-
|
48
|
-
|
49
|
-
|
39
|
+
def handle_oauth_error(e)
|
40
|
+
fail Orcid::RemoteServiceError,
|
41
|
+
response_body: e.response.body,
|
42
|
+
response_status: e.response.status,
|
43
|
+
client: token.client,
|
44
|
+
token: token,
|
45
|
+
request_method: request_method,
|
46
|
+
request_path: path,
|
47
|
+
request_body: body,
|
48
|
+
request_headers: headers
|
49
|
+
end
|
50
|
+
|
51
|
+
def default_token
|
52
|
+
Orcid.access_token_for(orcid_profile_id)
|
53
|
+
end
|
50
54
|
|
55
|
+
def default_headers
|
56
|
+
{
|
57
|
+
'Accept' => 'application/xml',
|
58
|
+
'Content-Type' => 'application/orcid+xml'
|
59
|
+
}
|
60
|
+
end
|
61
|
+
|
62
|
+
def default_path
|
63
|
+
"v1.1/#{orcid_profile_id}/orcid-works/"
|
64
|
+
end
|
65
|
+
end
|
51
66
|
end
|
52
67
|
end
|
@@ -9,10 +9,41 @@
|
|
9
9
|
<orcid-work>
|
10
10
|
<work-title>
|
11
11
|
<title><%= work.title %></title>
|
12
|
+
<% if work.subtitle.present? %><subtitle><%= work.subtitle %></subtitle><% end %>
|
12
13
|
</work-title>
|
14
|
+
<% if work.journal_title.present? %><journal-title><%= work.journal_title %></journal-title><% end %>
|
15
|
+
<% if work.short_description.present? %><short-description><%= work.short_description %></short-description><% end %>
|
16
|
+
<% if work.work_citation? %><work-citation>
|
17
|
+
<work-citation-type><%= work.citation_type %></work-citation-type>
|
18
|
+
<citation><%= work.citation %></citation>
|
19
|
+
</work-citation><% end %>
|
13
20
|
<work-type><%= work.work_type %></work-type>
|
21
|
+
<% if work.publication_date? %><publication-date>
|
22
|
+
<year><%= work.publication_year %></year>
|
23
|
+
<% if work.publication_month.present? %><month><%= work.publication_month %></month><% end %>
|
24
|
+
<publication-date><% end %>
|
25
|
+
<% if work.external_identifiers.present? %><work-external-identifiers>
|
26
|
+
<% work.external_identifiers.each do |external_identifier| %><work-external-identifier>
|
27
|
+
<work-external-identifier-type><%= external_identifier.type %></work-external-identifier-type>
|
28
|
+
<work-external-identifier-id><%= external_identifier.identifier %></work-external-identifier-id>
|
29
|
+
</work-external-identifier><% end %>
|
30
|
+
</work-external-identifiers><% end %>
|
31
|
+
<% if work.url.present? %><url><%= work.url %></url><% end %>
|
32
|
+
<!--
|
33
|
+
<work_contributors>
|
34
|
+
<contributor>
|
35
|
+
<credit_name/>
|
36
|
+
<contributor_attributes>
|
37
|
+
<contributor_sequence/>
|
38
|
+
<contributor_role/>
|
39
|
+
</contributor_attributes>
|
40
|
+
</contributor>
|
41
|
+
</work_contributors>
|
42
|
+
-->
|
43
|
+
<% if work.language_code.present? %><language-code><%= work.language_code %></language-code><% end %>
|
44
|
+
<% if work.country.present? %><country><%= work.country %></country><% end %>
|
14
45
|
</orcid-work>
|
15
46
|
<% end %></orcid-works>
|
16
47
|
</orcid-activities>
|
17
48
|
</orcid-profile>
|
18
|
-
</orcid-message>
|
49
|
+
</orcid-message>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<% profile_connection = Orcid::ProfileConnection.new %>
|
2
|
+
<p><br />
|
3
|
+
<%= link_to "Look up your existing ORCID", orcid.new_profile_connection_path(profile_connection:{text: default_search_text}) %>
|
4
|
+
<span>-OR-</span>
|
5
|
+
<%= link_to "Create an ORCID", orcid.new_profile_request_path %>
|
6
|
+
</p>
|
7
|
+
<p>-OR-</p>
|
8
|
+
<%= simple_form_for(profile_connection, as: :profile_connection, url: orcid.profile_connections_path, method: :post) do |f| %>
|
9
|
+
<%= f.input :orcid_profile_id, label: "Enter your existing ORCID (####-####-####-####)", class:"orcid-input" %>
|
10
|
+
<button type="submit" class="search-submit btn btn-primary" id="keyword-search-submit" tabindex="2">
|
11
|
+
<span class="orcid-connect">Connect</span>
|
12
|
+
</button>
|
13
|
+
<% end %>
|
14
|
+
|
@@ -1,19 +1,19 @@
|
|
1
1
|
<%= simple_form_for(profile_connection, as: :profile_connection, url: orcid.new_profile_connection_path, method: :get, html: {class: 'search-form'}) do |f| %>
|
2
|
-
<%= field_set_tag("Search ORCID Profiles"
|
2
|
+
<%= field_set_tag("Search ORCID Profiles") do %>
|
3
3
|
<% profile_connection.available_query_attribute_names.each do |field_name| %>
|
4
4
|
<%= f.input field_name, as: :search %>
|
5
5
|
<% end %>
|
6
6
|
<% end %>
|
7
7
|
<button type="submit" class="search-submit btn btn-primary" id="keyword-search-submit" tabindex="2">
|
8
|
-
<i class="icon-search icon-white"></i><span
|
8
|
+
<i class="icon-search icon-white"></i><span>Search</span>
|
9
9
|
</button>
|
10
10
|
<% end %>
|
11
11
|
|
12
12
|
<% profile_connection.with_orcid_profile_candidates do |candidates| %>
|
13
13
|
<%= simple_form_for(profile_connection, as: :profile_connection, url: orcid.profile_connections_path,) do |f| %>
|
14
|
-
<%= field_set_tag("Select an ORCID Profile"
|
14
|
+
<%= field_set_tag("Select an ORCID Profile") do %>
|
15
15
|
<%= f.collection_radio_buttons :orcid_profile_id, candidates, :id, :label %>
|
16
16
|
<% end %>
|
17
17
|
<%= f.submit %>
|
18
18
|
<% end %>
|
19
|
-
<% end %>
|
19
|
+
<% end %>
|
data/bin/rails
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# This command will automatically be run when you run "rails" with Rails 4 gems installed from the root of your application.
|
3
|
+
|
4
|
+
ENGINE_ROOT = File.expand_path('../..', __FILE__)
|
5
|
+
ENGINE_PATH = File.expand_path('../../lib/orcid/engine', __FILE__)
|
6
|
+
|
7
|
+
require 'rails/all'
|
8
|
+
require 'rails/engine/commands'
|
@@ -6,20 +6,10 @@
|
|
6
6
|
# GMAIL_USERNAME: Your_Gmail_Username
|
7
7
|
# makes 'Your_Gmail_Username' available as ENV["GMAIL_USERNAME"]
|
8
8
|
|
9
|
-
# Add application configuration variables here, as shown below.
|
10
|
-
#
|
11
|
-
ADMIN_NAME: First User
|
12
|
-
ADMIN_EMAIL: user@example.com
|
13
|
-
ADMIN_PASSWORD: changeme
|
14
|
-
|
15
9
|
# From http://support.orcid.org/knowledgebase/articles/162412-tutorial-create-a-new-profile-using-curl
|
16
|
-
ORCID_APP_ID: 0000-
|
17
|
-
ORCID_APP_SECRET:
|
18
|
-
|
19
|
-
ORCID_EXISTING_PUB_EMAIL: jeremy.n.friesen@gmail.com
|
20
|
-
ORCID_EXISTING_PUB_PROFILE_ID: 0000-0002-3636-1153
|
21
|
-
ORCID_EXISTING_PUB_NAME: Jeremy Friesen
|
10
|
+
ORCID_APP_ID: 0000-0000-0000-0000
|
11
|
+
ORCID_APP_SECRET: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
|
22
12
|
|
23
|
-
ORCID_CLAIMED_PROFILE_ID: 0000-
|
13
|
+
ORCID_CLAIMED_PROFILE_ID: 0000-0000-0000-0000
|
24
14
|
ORCID_CLAIMED_PROFILE_PASSWORD: password1A
|
25
15
|
ORCID_CLAIMED_PROFILE_EMAIL: cwksfxyqkmrudrfrdxvlzjxl@mailinator.com
|
data/config/locales/orcid.en.yml
CHANGED
@@ -25,4 +25,8 @@ en:
|
|
25
25
|
messages:
|
26
26
|
existing_request_not_found: "Unable to find an existing Orcid Profile request. Go ahead and create one."
|
27
27
|
existing_request: "You have already submitted an Orcid Profile request."
|
28
|
-
previously_connected_profile: "You have already connected to an Orcid Profile (%{orcid_profile_id})."
|
28
|
+
previously_connected_profile: "You have already connected to an Orcid Profile (%{orcid_profile_id})."
|
29
|
+
connections:
|
30
|
+
messages:
|
31
|
+
profile_connection_not_found: "Unable to find an existing Orcid Profile connection."
|
32
|
+
verified_profile_connection_exists: "You have already connected and verified your Orcid Profile (%{orcid_profile_id})."
|
data/config/routes.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
Orcid::Engine.routes.draw do
|
2
|
-
|
3
|
-
|
2
|
+
scope module: 'orcid' do
|
3
|
+
resource :profile_request, only: [:show, :new, :create]
|
4
|
+
resources :profile_connections, only: [:new, :create, :index]
|
5
|
+
end
|
4
6
|
end
|
@@ -1,10 +1,28 @@
|
|
1
1
|
require 'rails/generators'
|
2
2
|
|
3
3
|
module Orcid
|
4
|
+
# If you want to quickly add Orcid integration into your application.
|
5
|
+
# This assumes the use of the ubiqutous Devise gem.
|
4
6
|
class InstallGenerator < Rails::Generators::Base
|
5
7
|
source_root File.expand_path('../templates', __FILE__)
|
6
8
|
|
7
9
|
class_option :devise, default: false, type: :boolean
|
10
|
+
class_option :skip_application_yml, default: false, type: :boolean
|
11
|
+
|
12
|
+
def create_application_yml
|
13
|
+
unless options[:skip_application_yml]
|
14
|
+
create_file 'config/application.yml' do
|
15
|
+
orcid_app_id = ask('What is your Orcid Client ID?')
|
16
|
+
orcid_app_secret = ask('What is your Orcid Client Secret?')
|
17
|
+
[
|
18
|
+
'',
|
19
|
+
"ORCID_APP_ID: #{orcid_app_id}",
|
20
|
+
"ORCID_APP_SECRET: #{orcid_app_secret}",
|
21
|
+
''
|
22
|
+
].join("\n")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
8
26
|
|
9
27
|
def install_devise_multi_auth
|
10
28
|
if options[:devise]
|
@@ -14,14 +32,26 @@ module Orcid
|
|
14
32
|
end
|
15
33
|
end
|
16
34
|
|
35
|
+
def copy_locale
|
36
|
+
copy_file(
|
37
|
+
'../../../../../config/locales/orcid.en.yml',
|
38
|
+
'config/locales/orcid.en.yml'
|
39
|
+
)
|
40
|
+
end
|
41
|
+
|
17
42
|
def install_migrations
|
18
|
-
rake
|
43
|
+
rake 'orcid:install:migrations'
|
19
44
|
end
|
20
45
|
|
21
|
-
def
|
22
|
-
config_code =
|
23
|
-
insert_into_file
|
46
|
+
def update_devise_user
|
47
|
+
config_code = ', :omniauthable, :omniauth_providers => [:orcid]'
|
48
|
+
insert_into_file(
|
49
|
+
'app/models/user.rb',
|
50
|
+
config_code, after: /:validatable/, verbose: false
|
51
|
+
)
|
52
|
+
end
|
24
53
|
|
54
|
+
def update_devise_omniauth_provider
|
25
55
|
init_code = %(
|
26
56
|
config.omniauth(:orcid, Orcid.provider.id, Orcid.provider.secret,
|
27
57
|
scope: Orcid.provider.authentication_scope,
|
@@ -32,16 +62,25 @@ module Orcid
|
|
32
62
|
}
|
33
63
|
)
|
34
64
|
)
|
35
|
-
insert_into_file
|
65
|
+
insert_into_file(
|
66
|
+
'config/initializers/devise.rb',
|
67
|
+
init_code, after: /Devise\.setup.*$/, verbose: true
|
68
|
+
)
|
36
69
|
end
|
37
70
|
|
38
71
|
def mount_orcid_engine
|
39
72
|
route 'mount Orcid::Engine => "/orcid"'
|
40
73
|
end
|
41
74
|
|
42
|
-
def
|
43
|
-
|
75
|
+
def migrate_the_database
|
76
|
+
rake 'db:migrate'
|
44
77
|
end
|
45
78
|
|
79
|
+
def install_initializer
|
80
|
+
template(
|
81
|
+
'orcid_initializer.rb.erb',
|
82
|
+
'config/initializers/orcid_initializer.rb'
|
83
|
+
)
|
84
|
+
end
|
46
85
|
end
|
47
86
|
end
|