jalc 1.0.0 → 1.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/.rubocop.yml +3 -0
- data/CHANGELOG.md +4 -0
- data/README.md +34 -0
- data/jalc.gemspec +2 -0
- data/lib/jalc/registration/client.rb +60 -0
- data/lib/jalc/registration/config.rb +17 -0
- data/lib/jalc/registration/error.rb +8 -0
- data/lib/jalc/registration/middleware/parse_xml.rb +15 -0
- data/lib/jalc/registration/middleware/raise_error.rb +29 -0
- data/lib/jalc/registration.rb +34 -0
- data/lib/jalc/rest/client.rb +2 -2
- data/lib/jalc/rest/error.rb +1 -28
- data/lib/jalc/rest/{response → middleware}/raise_error.rb +29 -1
- data/lib/jalc/version.rb +1 -1
- data/lib/jalc.rb +1 -0
- metadata +23 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0dc45fa2ad1bb26e588c4b99dcd4b79ce9ef6eb1b1ce758fc241b1aefcf553a1
|
4
|
+
data.tar.gz: 4ab4bd89829b7ad3af731359e9bf0424585e2991255e4a6e29564991937d94d5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b105bfbf4b983932942144f965d45016ed7d64df42448d425ac94d53479f030f9ddd9bbbc3bdfcb5951fc13365233cdb888fe04478a377caba897d9f5f5e6feb
|
7
|
+
data.tar.gz: 3465ba5121e720647d40f0dca8b8060990736ea0d712a06b0d6f926a5700966a731f28a1382c84562246498c188b0c22b9ba5d0c01384d27bb2a225e94735bfd
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -42,6 +42,40 @@ doi_res = JaLC::REST.doi(doi)
|
|
42
42
|
doi_res.body['data']
|
43
43
|
```
|
44
44
|
|
45
|
+
### JaLC Registration API
|
46
|
+
|
47
|
+
See https://japanlinkcenter.org/top/doc/JaLC_tech_interface_doc.pdf for API detail
|
48
|
+
|
49
|
+
```ruby
|
50
|
+
require 'jalc'
|
51
|
+
|
52
|
+
JaLC::Registration.configure do |config|
|
53
|
+
config.id = 'sankichi92'
|
54
|
+
config.password = ENV['JALC_PASSWORD']
|
55
|
+
end
|
56
|
+
|
57
|
+
res = JaLC::Registration.post(File.open('/path/to/xml'))
|
58
|
+
# response.body is an instance of REXML::Document
|
59
|
+
res.body.root.elements['head/okcnt'].text #=> 1
|
60
|
+
|
61
|
+
# With XML head/result_method=2 (Async)
|
62
|
+
async_res = JaLC::Registration.post(StringIO.new(<<~XML))
|
63
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
64
|
+
<root>
|
65
|
+
<head>
|
66
|
+
<result_method>2</result_method>
|
67
|
+
</head>
|
68
|
+
<body>
|
69
|
+
...
|
70
|
+
</body
|
71
|
+
</root>
|
72
|
+
XML
|
73
|
+
exec_id = async_res.body.root.elements['head/exec_id'].text #=> 12345
|
74
|
+
|
75
|
+
result_res = JaLC::Registration.get_result(exec_id)
|
76
|
+
res.body.root.elements['head/status'].text
|
77
|
+
```
|
78
|
+
|
45
79
|
## Development
|
46
80
|
|
47
81
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/jalc.gemspec
CHANGED
@@ -16,6 +16,7 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.metadata['homepage_uri'] = spec.homepage
|
17
17
|
spec.metadata['source_code_uri'] = 'https://github.com/sankichi92/jalc-ruby'
|
18
18
|
spec.metadata['changelog_uri'] = 'https://github.com/sankichi92/jalc-ruby/blob/main/CHANGELOG.md'
|
19
|
+
spec.metadata['github_repo'] = 'https://github.com/sankichi92/jalc-ruby.git'
|
19
20
|
|
20
21
|
# Specify which files should be added to the gem when it is released.
|
21
22
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
@@ -30,6 +31,7 @@ Gem::Specification.new do |spec|
|
|
30
31
|
|
31
32
|
# Uncomment to register a new dependency of your gem
|
32
33
|
spec.add_dependency 'faraday', '>= 1.0', '< 3.0'
|
34
|
+
spec.add_dependency 'faraday-multipart', '~> 1.0'
|
33
35
|
|
34
36
|
# For more information and examples about making a new gem, check out our
|
35
37
|
# guide at: https://bundler.io/guides/creating_gem.html
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'faraday'
|
4
|
+
require 'faraday/multipart'
|
5
|
+
|
6
|
+
require_relative '../version'
|
7
|
+
require_relative 'middleware/parse_xml'
|
8
|
+
require_relative 'middleware/raise_error'
|
9
|
+
|
10
|
+
module JaLC
|
11
|
+
module Registration
|
12
|
+
BASE_URL = 'https://japanlinkcenter.org'
|
13
|
+
|
14
|
+
class Client
|
15
|
+
def initialize(id:, password:, logger: nil, base_url: BASE_URL)
|
16
|
+
@id = id
|
17
|
+
@password = password
|
18
|
+
@logger = logger
|
19
|
+
@base_url = base_url
|
20
|
+
end
|
21
|
+
|
22
|
+
def post(xml_file)
|
23
|
+
conn.post(
|
24
|
+
'/jalc/infoRegistry/registDataReceive/index',
|
25
|
+
{
|
26
|
+
login_id: Faraday::Multipart::ParamPart.new(@id, 'text/plain'),
|
27
|
+
login_password: Faraday::Multipart::ParamPart.new(@password, 'text/plain'),
|
28
|
+
fname: Faraday::Multipart::FilePart.new(xml_file, 'text/xml'),
|
29
|
+
},
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
def get_result(exec_id)
|
34
|
+
conn.get(
|
35
|
+
'/jalc/infoRegistry/registDataResult/index',
|
36
|
+
{
|
37
|
+
login_id: @id,
|
38
|
+
login_password: @password,
|
39
|
+
exec_id: exec_id,
|
40
|
+
},
|
41
|
+
)
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def conn
|
47
|
+
@conn ||= Faraday.new(
|
48
|
+
url: @base_url,
|
49
|
+
headers: { 'User-Agent' => "jalc-ruby v#{VERSION}" },
|
50
|
+
) do |f|
|
51
|
+
f.request :multipart
|
52
|
+
f.use Middleware::RaiseError
|
53
|
+
f.use Middleware::ParseXML
|
54
|
+
f.response :raise_error
|
55
|
+
f.response :logger, @logger, { headers: false } if @logger
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'logger'
|
4
|
+
|
5
|
+
module JaLC
|
6
|
+
module Registration
|
7
|
+
class Config
|
8
|
+
attr_accessor :id, :password, :logger
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@id = nil
|
12
|
+
@password = nil
|
13
|
+
@logger = ::Logger.new($stdout)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rexml'
|
4
|
+
|
5
|
+
module JaLC
|
6
|
+
module Registration
|
7
|
+
module Middleware
|
8
|
+
class ParseXML < Faraday::Middleware
|
9
|
+
def on_complete(env)
|
10
|
+
env[:body] = REXML::Document.new(env[:body].to_s)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'faraday'
|
4
|
+
|
5
|
+
require_relative '../error'
|
6
|
+
|
7
|
+
module JaLC
|
8
|
+
module Registration
|
9
|
+
module Middleware
|
10
|
+
class RaiseError < Faraday::Middleware
|
11
|
+
def on_complete(env)
|
12
|
+
case env.body.root.elements['head/errcd']&.text
|
13
|
+
when '*'
|
14
|
+
raise AuthenticationError,
|
15
|
+
'Wrong login_id/login_password or non-registered IP address request (errcd=*)'
|
16
|
+
when '#'
|
17
|
+
raise InvalidXMLError, 'XML format is invalid or any required params are blank (errcd=#)'
|
18
|
+
when '+'
|
19
|
+
raise RegistrationError, 'Non-XML file, non UTF-8 encoding or other error (errcd=+)'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class RegistrationError < Error; end
|
26
|
+
class AuthenticationError < RegistrationError; end
|
27
|
+
class InvalidXMLError < RegistrationError; end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'forwardable'
|
4
|
+
|
5
|
+
require_relative 'registration/client'
|
6
|
+
require_relative 'registration/config'
|
7
|
+
|
8
|
+
module JaLC
|
9
|
+
module Registration
|
10
|
+
class << self
|
11
|
+
extend Forwardable
|
12
|
+
|
13
|
+
def_delegators :client, :post, :get_result
|
14
|
+
|
15
|
+
def configure
|
16
|
+
yield config
|
17
|
+
end
|
18
|
+
|
19
|
+
def config
|
20
|
+
@config ||= Config.new
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def client
|
26
|
+
@client ||= Client.new(
|
27
|
+
id: config.id,
|
28
|
+
password: config.password,
|
29
|
+
logger: config.logger,
|
30
|
+
)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/jalc/rest/client.rb
CHANGED
@@ -4,7 +4,7 @@ require 'uri'
|
|
4
4
|
|
5
5
|
require 'faraday'
|
6
6
|
|
7
|
-
require_relative '
|
7
|
+
require_relative 'middleware/raise_error'
|
8
8
|
require_relative '../version'
|
9
9
|
|
10
10
|
module JaLC
|
@@ -54,7 +54,7 @@ module JaLC
|
|
54
54
|
url: @base_url,
|
55
55
|
headers: { 'User-Agent' => "jalc-ruby v#{VERSION}" },
|
56
56
|
) do |f|
|
57
|
-
f.use
|
57
|
+
f.use Middleware::RaiseError
|
58
58
|
f.response :json
|
59
59
|
f.response :logger, @logger, { headers: false } if @logger
|
60
60
|
end
|
data/lib/jalc/rest/error.rb
CHANGED
@@ -1,35 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'faraday'
|
4
|
-
|
5
3
|
module JaLC
|
6
4
|
module REST
|
7
|
-
class Error < StandardError
|
8
|
-
|
9
|
-
class HTTPError < Error
|
10
|
-
attr_reader :response
|
11
|
-
|
12
|
-
def initialize(msg = nil, response: nil)
|
13
|
-
@response = response
|
14
|
-
msg ||= response[:body].dig('message', 'errors', 'message') if response && response[:body].respond_to?(:dig)
|
15
|
-
msg ||= "the server responded with status #{response[:status]}" if response
|
16
|
-
|
17
|
-
super(msg)
|
18
|
-
end
|
19
|
-
|
20
|
-
def inspect
|
21
|
-
if response
|
22
|
-
%(#<#{self.class} response=#{response.inspect}>)
|
23
|
-
else
|
24
|
-
super
|
25
|
-
end
|
26
|
-
end
|
5
|
+
class Error < StandardError
|
27
6
|
end
|
28
|
-
|
29
|
-
class ClientError < HTTPError; end
|
30
|
-
class BadRequestError < ClientError; end
|
31
|
-
class ResourceNotFound < ClientError; end
|
32
|
-
class ServerError < HTTPError; end
|
33
|
-
class NilStatusError < ServerError; end
|
34
7
|
end
|
35
8
|
end
|
@@ -6,7 +6,7 @@ require_relative '../error'
|
|
6
6
|
|
7
7
|
module JaLC
|
8
8
|
module REST
|
9
|
-
class
|
9
|
+
class Middleware
|
10
10
|
class RaiseError < Faraday::Middleware
|
11
11
|
def on_complete(env)
|
12
12
|
case env[:status]
|
@@ -26,6 +26,8 @@ module JaLC
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
+
private
|
30
|
+
|
29
31
|
def response_values(env)
|
30
32
|
{
|
31
33
|
status: env.status,
|
@@ -41,5 +43,31 @@ module JaLC
|
|
41
43
|
end
|
42
44
|
end
|
43
45
|
end
|
46
|
+
|
47
|
+
class HTTPError < Error
|
48
|
+
attr_reader :response
|
49
|
+
|
50
|
+
def initialize(msg = nil, response: nil)
|
51
|
+
@response = response
|
52
|
+
msg ||= response[:body].dig('message', 'errors', 'message') if response && response[:body].respond_to?(:dig)
|
53
|
+
msg ||= "the server responded with status #{response[:status]}" if response
|
54
|
+
|
55
|
+
super(msg)
|
56
|
+
end
|
57
|
+
|
58
|
+
def inspect
|
59
|
+
if response
|
60
|
+
%(#<#{self.class} response=#{response.inspect}>)
|
61
|
+
else
|
62
|
+
super
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
class ClientError < HTTPError; end
|
68
|
+
class BadRequestError < ClientError; end
|
69
|
+
class ResourceNotFound < ClientError; end
|
70
|
+
class ServerError < HTTPError; end
|
71
|
+
class NilStatusError < ServerError; end
|
44
72
|
end
|
45
73
|
end
|
data/lib/jalc/version.rb
CHANGED
data/lib/jalc.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jalc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Takahiro Miyoshi
|
@@ -30,6 +30,20 @@ dependencies:
|
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '3.0'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: faraday-multipart
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1.0'
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '1.0'
|
33
47
|
description:
|
34
48
|
email:
|
35
49
|
- takahiro-miyoshi@sankichi.net
|
@@ -49,11 +63,17 @@ files:
|
|
49
63
|
- bin/setup
|
50
64
|
- jalc.gemspec
|
51
65
|
- lib/jalc.rb
|
66
|
+
- lib/jalc/registration.rb
|
67
|
+
- lib/jalc/registration/client.rb
|
68
|
+
- lib/jalc/registration/config.rb
|
69
|
+
- lib/jalc/registration/error.rb
|
70
|
+
- lib/jalc/registration/middleware/parse_xml.rb
|
71
|
+
- lib/jalc/registration/middleware/raise_error.rb
|
52
72
|
- lib/jalc/rest.rb
|
53
73
|
- lib/jalc/rest/client.rb
|
54
74
|
- lib/jalc/rest/config.rb
|
55
75
|
- lib/jalc/rest/error.rb
|
56
|
-
- lib/jalc/rest/
|
76
|
+
- lib/jalc/rest/middleware/raise_error.rb
|
57
77
|
- lib/jalc/version.rb
|
58
78
|
- sig/jalc/rest.rbs
|
59
79
|
homepage: https://github.com/sankichi92/jalc-ruby
|
@@ -63,6 +83,7 @@ metadata:
|
|
63
83
|
homepage_uri: https://github.com/sankichi92/jalc-ruby
|
64
84
|
source_code_uri: https://github.com/sankichi92/jalc-ruby
|
65
85
|
changelog_uri: https://github.com/sankichi92/jalc-ruby/blob/main/CHANGELOG.md
|
86
|
+
github_repo: https://github.com/sankichi92/jalc-ruby.git
|
66
87
|
rubygems_mfa_required: 'true'
|
67
88
|
post_install_message:
|
68
89
|
rdoc_options: []
|