Class: OpenBD::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/openbd/client.rb

Constant Summary collapse

API_BASE_URL =
'http://api.openbd.jp/'.freeze
PATH_TO_GET =
'v1/get'
PATH_TO_COVERAGE =
'v1/coverage'
PATH_TO_SCHEMA =
'v1/schema'

Instance Method Summary collapse

Constructor Details

#initialize(adapter: :net_http, response_parser: :json) ⇒ Client

Returns a new instance of Client.



8
9
10
11
# File 'lib/openbd/client.rb', line 8

def initialize(adapter: :net_http, response_parser: :json)
  @adapter = adapter
  @response_parser = response_parser
end

Instance Method Details

#bulk_get(isbns) ⇒ Object



21
22
23
24
25
26
27
# File 'lib/openbd/client.rb', line 21

def bulk_get(isbns)
  post_request(
    method: PATH_TO_GET,
    params: { isbn: normalize_isbns(isbns) },
    response_class: ::OpenBD::Responses::Get
  )
end

#connectionObject



45
46
47
48
49
50
# File 'lib/openbd/client.rb', line 45

def connection
  @connection ||= ::Faraday::Connection.new(url: API_BASE_URL) do |connection|
    connection.adapter @adapter
    connection.response @response_parser
  end
end

#coverageObject



29
30
31
32
33
34
35
# File 'lib/openbd/client.rb', line 29

def coverage
  get_request(
    method: PATH_TO_COVERAGE,
    params: nil,
    response_class: ::OpenBD::Responses::Coverage
  )
end

#get(isbns) ⇒ Object



13
14
15
16
17
18
19
# File 'lib/openbd/client.rb', line 13

def get(isbns)
  get_request(
    method: PATH_TO_GET,
    params: { isbn: normalize_isbns(isbns) },
    response_class: ::OpenBD::Responses::Get
  )
end

#get_request(method:, params:, response_class:) ⇒ Object



52
53
54
55
# File 'lib/openbd/client.rb', line 52

def get_request(method:, params:, response_class:)
  faraday_response = connection.get(method, params)
  response_class.new(faraday_response)
end

#normalize_isbns(isbns) ⇒ Object



65
66
67
68
69
70
71
72
73
74
# File 'lib/openbd/client.rb', line 65

def normalize_isbns(isbns)
  case isbns
  when String
    isbns
  when Numeric
    isbns.to_s
  when Array
    isbns.join(",")
  end
end

#post_request(method:, params:, response_class:) ⇒ Object



57
58
59
60
61
62
63
# File 'lib/openbd/client.rb', line 57

def post_request(method:, params:, response_class:)
  faraday_response = connection.post do |req|
    req.url method
    req.body = "isbn=#{params[:isbn]}"
  end
  response_class.new(faraday_response)
end

#schemaObject



37
38
39
40
41
42
43
# File 'lib/openbd/client.rb', line 37

def schema
  get_request(
    method: PATH_TO_SCHEMA,
    params: nil,
    response_class: ::OpenBD::Responses::Schema
  )
end