rakuten_web_service 1.15.0 → 1.17.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.
Files changed (114) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +17 -1
  3. data/CHANGELOG.md +8 -0
  4. data/README.ja.md +5 -1
  5. data/README.md +5 -1
  6. data/Rakefile +44 -0
  7. data/lib/rakuten_web_service/books/book.rb +1 -1
  8. data/lib/rakuten_web_service/books/cd.rb +1 -1
  9. data/lib/rakuten_web_service/books/dvd.rb +1 -1
  10. data/lib/rakuten_web_service/books/foreign_book.rb +1 -1
  11. data/lib/rakuten_web_service/books/game.rb +1 -1
  12. data/lib/rakuten_web_service/books/genre.rb +1 -1
  13. data/lib/rakuten_web_service/books/magazine.rb +1 -1
  14. data/lib/rakuten_web_service/books/software.rb +1 -1
  15. data/lib/rakuten_web_service/books/total.rb +1 -1
  16. data/lib/rakuten_web_service/client.rb +6 -0
  17. data/lib/rakuten_web_service/configuration.rb +20 -4
  18. data/lib/rakuten_web_service/error.rb +4 -1
  19. data/lib/rakuten_web_service/gora/course.rb +1 -1
  20. data/lib/rakuten_web_service/gora/course_detail.rb +1 -1
  21. data/lib/rakuten_web_service/gora/plan.rb +1 -1
  22. data/lib/rakuten_web_service/ichiba/genre.rb +2 -2
  23. data/lib/rakuten_web_service/ichiba/item.rb +1 -1
  24. data/lib/rakuten_web_service/ichiba/product.rb +4 -4
  25. data/lib/rakuten_web_service/ichiba/ranking.rb +1 -1
  26. data/lib/rakuten_web_service/ichiba/tag_group.rb +1 -1
  27. data/lib/rakuten_web_service/kobo/ebook.rb +1 -1
  28. data/lib/rakuten_web_service/kobo/genre.rb +1 -1
  29. data/lib/rakuten_web_service/recipe/category.rb +1 -1
  30. data/lib/rakuten_web_service/recipe.rb +1 -1
  31. data/lib/rakuten_web_service/resource.rb +8 -0
  32. data/lib/rakuten_web_service/travel/area_class.rb +1 -1
  33. data/lib/rakuten_web_service/travel/hotel.rb +1 -1
  34. data/lib/rakuten_web_service/version.rb +1 -1
  35. data/rakuten_web_service.gemspec +2 -1
  36. data/sig/generated/attributes.rbs +611 -0
  37. data/sig/manifest.yaml +5 -0
  38. data/sig/rakuten_web_service/all_proxy.rbs +12 -0
  39. data/sig/rakuten_web_service/books/book.rbs +7 -0
  40. data/sig/rakuten_web_service/books/cd.rbs +7 -0
  41. data/sig/rakuten_web_service/books/dvd.rbs +7 -0
  42. data/sig/rakuten_web_service/books/foreign_book.rbs +7 -0
  43. data/sig/rakuten_web_service/books/game.rbs +7 -0
  44. data/sig/rakuten_web_service/books/genre.rbs +7 -0
  45. data/sig/rakuten_web_service/books/magazine.rbs +7 -0
  46. data/sig/rakuten_web_service/books/resource.rbs +27 -0
  47. data/sig/rakuten_web_service/books/software.rbs +7 -0
  48. data/sig/rakuten_web_service/books/total.rbs +10 -0
  49. data/sig/rakuten_web_service/books.rbs +0 -0
  50. data/sig/rakuten_web_service/client.rbs +21 -0
  51. data/sig/rakuten_web_service/configuration.rbs +43 -0
  52. data/sig/rakuten_web_service/error.rbs +35 -0
  53. data/sig/rakuten_web_service/genre.rbs +33 -0
  54. data/sig/rakuten_web_service/genre_information.rbs +16 -0
  55. data/sig/rakuten_web_service/gora/course.rbs +6 -0
  56. data/sig/rakuten_web_service/gora/course_detail.rbs +19 -0
  57. data/sig/rakuten_web_service/gora/plan.rbs +17 -0
  58. data/sig/rakuten_web_service/gora.rbs +0 -0
  59. data/sig/rakuten_web_service/ichiba/genre.rbs +9 -0
  60. data/sig/rakuten_web_service/ichiba/item.rbs +18 -0
  61. data/sig/rakuten_web_service/ichiba/product.rbs +7 -0
  62. data/sig/rakuten_web_service/ichiba/ranking.rbs +6 -0
  63. data/sig/rakuten_web_service/ichiba/shop.rbs +7 -0
  64. data/sig/rakuten_web_service/ichiba/tag.rbs +7 -0
  65. data/sig/rakuten_web_service/ichiba/tag_group.rbs +7 -0
  66. data/sig/rakuten_web_service/ichiba.rbs +0 -0
  67. data/sig/rakuten_web_service/kobo/ebook.rbs +9 -0
  68. data/sig/rakuten_web_service/kobo/genre.rbs +7 -0
  69. data/sig/rakuten_web_service/kobo.rbs +0 -0
  70. data/sig/rakuten_web_service/recipe/category.rbs +25 -0
  71. data/sig/rakuten_web_service/recipe.rbs +5 -0
  72. data/sig/rakuten_web_service/resource.rbs +64 -0
  73. data/sig/rakuten_web_service/response.rbs +38 -0
  74. data/sig/rakuten_web_service/search_result.rbs +56 -0
  75. data/sig/rakuten_web_service/string_support.rbs +4 -0
  76. data/sig/rakuten_web_service/travel/area_class.rbs +65 -0
  77. data/sig/rakuten_web_service/travel/hotel.rbs +11 -0
  78. data/sig/rakuten_web_service/travel/open_struct.rbs +9 -0
  79. data/sig/rakuten_web_service/travel/resource.rbs +7 -0
  80. data/sig/rakuten_web_service/travel/search_result.rbs +31 -0
  81. data/sig/rakuten_web_service/travel.rbs +0 -0
  82. data/sig/rakuten_web_service/version.rbs +3 -0
  83. data/sig/rakuten_web_service.rbs +12 -0
  84. data/spec/rakuten_web_service/books/book_spec.rb +2 -1
  85. data/spec/rakuten_web_service/books/cd_spec.rb +2 -1
  86. data/spec/rakuten_web_service/books/dvd_spec.rb +2 -1
  87. data/spec/rakuten_web_service/books/foreign_book_spec.rb +2 -1
  88. data/spec/rakuten_web_service/books/game_spec.rb +2 -1
  89. data/spec/rakuten_web_service/books/genre_spec.rb +2 -1
  90. data/spec/rakuten_web_service/books/magazine_spec.rb +2 -1
  91. data/spec/rakuten_web_service/books/software_spec.rb +2 -1
  92. data/spec/rakuten_web_service/books/total_spec.rb +2 -1
  93. data/spec/rakuten_web_service/client_spec.rb +34 -1
  94. data/spec/rakuten_web_service/configuration_spec.rb +64 -5
  95. data/spec/rakuten_web_service/genre_spec.rb +1 -0
  96. data/spec/rakuten_web_service/gora/course_detail_spec.rb +2 -1
  97. data/spec/rakuten_web_service/gora/course_spec.rb +2 -1
  98. data/spec/rakuten_web_service/gora/plan_spec.rb +2 -1
  99. data/spec/rakuten_web_service/ichiba/genre_spec.rb +2 -1
  100. data/spec/rakuten_web_service/ichiba/item_spec.rb +2 -1
  101. data/spec/rakuten_web_service/ichiba/product_search_spec.rb +2 -1
  102. data/spec/rakuten_web_service/ichiba/ranking_spec.rb +2 -1
  103. data/spec/rakuten_web_service/ichiba/shop_spec.rb +2 -1
  104. data/spec/rakuten_web_service/ichiba/tag_group_spec.rb +2 -1
  105. data/spec/rakuten_web_service/kobo/ebook_spec.rb +2 -1
  106. data/spec/rakuten_web_service/kobo/genre_spec.rb +2 -1
  107. data/spec/rakuten_web_service/recipe/category_spec.rb +2 -1
  108. data/spec/rakuten_web_service/recipe_spec.rb +2 -1
  109. data/spec/rakuten_web_service/resource_spec.rb +30 -0
  110. data/spec/rakuten_web_service/travel/area_class_spec.rb +2 -1
  111. data/spec/rakuten_web_service/travel/simple_hotel_search_spec.rb +2 -1
  112. data/spec/rakuten_web_service_spec.rb +1 -0
  113. data/spec/spec_helper.rb +1 -0
  114. metadata +65 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7f7894bebde1ddcb2c184141bf764c2cc7e01f3b3fbac6c932e7cac7ab8c3778
4
- data.tar.gz: '084fb6985c486101c11539103d971e01cce71c5a3295e69b5cb605cd3ab03901'
3
+ metadata.gz: 7680e31b8cfe5db1599dfa4e721a69819fc5f4a47a2b36c12c703a7f967457ea
4
+ data.tar.gz: e13ad84b8941b87dd2ad6bfbdd496efec1639bc27d4d262935889ac49e1f23ac
5
5
  SHA512:
6
- metadata.gz: 791825d74938ee78f55510c446c74934ec2b0173547a82926370b2ba8505d94aff4f2e53c5ae9b5abf949ce82e8563bafd27457c8b08899ce6bdb1c1c1e28050
7
- data.tar.gz: 7826d1c307a0dcf2b66c913c4bd987b3a0f09a6abb2f06690474fe7252b2cc8a13eb850ee69b58eee7b60456447883fcab8a54b5901706989d69b472604b3f51
6
+ metadata.gz: 7776c1c27d1ab2e47c9c6d23bc770e572490605e5e98f187c35d17f3a1cfae7e17ddd4ce4f963fa902dfebdc05528767d9348add83ff54c47197bbcd84b11847
7
+ data.tar.gz: 0b0bf4c5223e8dcdbbbc6e20e09743b738a5f8499ce2de1701c84fcfca608526dff24fb87ce7c593e459a02397da49179d183f1053aa65f24c27dfab325518a8
@@ -13,10 +13,10 @@ jobs:
13
13
  strategy:
14
14
  matrix:
15
15
  ruby-version:
16
- - 3.1
17
16
  - 3.2
18
17
  - 3.3
19
18
  - 3.4
19
+ - 4.0
20
20
  - head
21
21
 
22
22
  steps:
@@ -29,3 +29,19 @@ jobs:
29
29
  bundler-cache: true
30
30
  - name: Run test
31
31
  run: bundle exec rake
32
+
33
+ rbs:
34
+ runs-on: ubuntu-latest
35
+
36
+ steps:
37
+ - uses: actions/checkout@v4
38
+ - uses: ruby/setup-ruby@v1
39
+ env:
40
+ BUNDLE_WITHOUT: vscode
41
+ with:
42
+ ruby-version: 4.0
43
+ bundler-cache: true
44
+ - name: Check generated RBS signatures are up to date
45
+ run: bundle exec rake sig:check
46
+ - name: Validate RBS signatures
47
+ run: bundle exec rbs -r uri -r json -I sig validate
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v1.17.0 (2026/06/02)
4
+
5
+ ### Improvements
6
+
7
+ - Ships RBS type signatures under `sig/` so users can type-check code that uses this gem.
8
+ - `SearchResult`, `Response` and `AllProxy` are generic over the resource class, so e.g. `Ichiba::Item.search(...).first` is typed as `Ichiba::Item?`.
9
+ - Reader methods defined by `attribute` are declared in `sig/generated/attributes.rbs`, generated by `rake sig:generate`.
10
+
3
11
  ## v1.13.2 (2023/03/26)
4
12
 
5
13
  ### Improvements
data/README.ja.md CHANGED
@@ -9,7 +9,7 @@ English version is [here](http://github.com/rakuten-ws/rws-ruby-sdk/blob/master/
9
9
 
10
10
  ## 前提条件
11
11
 
12
- * Ruby 3.1 またはそれ以上のバージョンであること
12
+ * Ruby 3.2 またはそれ以上のバージョンであること
13
13
 
14
14
  ## インストール方法
15
15
 
@@ -51,6 +51,10 @@ gem install rakuten_web_service
51
51
  # (必須) アプリケーションID
52
52
  c.application_id = 'YOUR_APPLICATION_ID'
53
53
 
54
+ # (必須) アクセスキー
55
+ # 注意: セキュリティ上の理由から、この値はシークレットマネージャーまたは環境変数から取得することを推奨します。
56
+ c.access_key = 'YOUR_ACCESS_KEY'
57
+
54
58
  # (任意) 楽天アフィリエイトID
55
59
  c.affiliate_id = 'YOUR_AFFILIATE_ID' # default: nil
56
60
 
data/README.md CHANGED
@@ -32,7 +32,7 @@ This gem provides a client for easily accessing [Rakuten Web Service APIs](https
32
32
 
33
33
  ## Prerequisite
34
34
 
35
- * Ruby 3.1 or later
35
+ * Ruby 3.2 or later
36
36
 
37
37
  ## Installation
38
38
 
@@ -72,6 +72,10 @@ At first, you have to specify your application's key. And you can tell the clien
72
72
  # (Required) Appliction ID for your application.
73
73
  c.application_id = 'YOUR_APPLICATION_ID'
74
74
 
75
+ # (Required) Access key
76
+ # Note: For security purposes, we recommend retrieving this value from a secrets manager or environment variable.
77
+ c.access_key = 'YOUR_ACCESS_KEY'
78
+
75
79
  # (Optional) Affiliate ID for your Rakuten account.
76
80
  c.affiliate_id = 'YOUR_AFFILIATE_ID' # default: nil
77
81
 
data/Rakefile CHANGED
@@ -14,6 +14,50 @@ task :endpoints do
14
14
  puts table
15
15
  end
16
16
 
17
+ namespace :sig do
18
+ ATTRIBUTES_SIG = 'sig/generated/attributes.rbs'
19
+
20
+ # Builds RBS declarations for the reader methods that `Resource.attribute`
21
+ # defines dynamically, so they are visible to type checkers.
22
+ def attributes_sig
23
+ require 'rakuten_web_service'
24
+
25
+ resource_file = File.expand_path('lib/rakuten_web_service/resource.rb', __dir__)
26
+ resource_classes = ObjectSpace.each_object(Class).select { |klass| klass < RakutenWebService::Resource }
27
+
28
+ sig = +"# This file is generated by `rake sig:generate`. Do not edit it by hand.\n"
29
+ resource_classes.sort_by(&:name).each do |klass|
30
+ # Skip methods overridden by a hand-written definition; those are
31
+ # declared in the hand-written signatures.
32
+ method_names = klass.attribute_methods.uniq.select do |method_name|
33
+ klass.instance_method(method_name).source_location&.first == resource_file
34
+ end
35
+ next if method_names.empty?
36
+
37
+ sig << "\nclass #{klass.name} < #{klass.superclass.name}\n"
38
+ method_names.each do |method_name|
39
+ return_type = method_name.end_with?('?') ? 'bool' : 'untyped'
40
+ sig << " def #{method_name}: () -> #{return_type}\n"
41
+ end
42
+ sig << "end\n"
43
+ end
44
+ sig
45
+ end
46
+
47
+ desc "Generate #{ATTRIBUTES_SIG} from the attributes declared in resources"
48
+ task :generate do
49
+ FileUtils.mkdir_p(File.dirname(ATTRIBUTES_SIG))
50
+ File.write(ATTRIBUTES_SIG, attributes_sig)
51
+ end
52
+
53
+ desc "Check that #{ATTRIBUTES_SIG} is up to date"
54
+ task :check do
55
+ unless File.exist?(ATTRIBUTES_SIG) && File.read(ATTRIBUTES_SIG) == attributes_sig
56
+ abort "#{ATTRIBUTES_SIG} is outdated. Run `rake sig:generate`."
57
+ end
58
+ end
59
+ end
60
+
17
61
  RSpec::Core::RakeTask.new do |t|
18
62
  t.pattern = 'spec/**/*_spec.rb'
19
63
  t.rspec_opts = '-c -fd'
@@ -5,8 +5,8 @@ require 'rakuten_web_service/books/resource'
5
5
  module RakutenWebService
6
6
  module Books
7
7
  class Book < Books::Resource
8
- endpoint 'https://app.rakuten.co.jp/services/api/BooksBook/Search/20170404'
9
8
 
9
+ endpoint 'https://openapi.rakuten.co.jp/services/api/BooksBook/Search/20170404'
10
10
  attribute :title, :titleKana, :subTitle, :subTitleKana,
11
11
  :seriesName, :seriesNameKana,
12
12
  :contents, :contentsKana,
@@ -5,7 +5,7 @@ require 'rakuten_web_service/books/resource'
5
5
  module RakutenWebService
6
6
  module Books
7
7
  class CD < Books::Resource
8
- endpoint 'https://app.rakuten.co.jp/services/api/BooksCD/Search/20170404'
8
+ endpoint 'https://openapi.rakuten.co.jp/services/api/BooksCD/Search/20170404'
9
9
 
10
10
  attribute :title, :titleKana, :artistName, :artistNameKana,
11
11
  :label, :jan, :makerCode,
@@ -5,7 +5,7 @@ require 'rakuten_web_service/books/resource'
5
5
  module RakutenWebService
6
6
  module Books
7
7
  class DVD < Books::Resource
8
- endpoint 'https://app.rakuten.co.jp/services/api/BooksDVD/Search/20170404'
8
+ endpoint 'https://openapi.rakuten.co.jp/services/api/BooksDVD/Search/20170404'
9
9
 
10
10
  attribute :title, :titleKana, :artistName, :artistNameKana,
11
11
  :label, :jan, :makerCode,
@@ -5,7 +5,7 @@ require 'rakuten_web_service/resource'
5
5
  module RakutenWebService
6
6
  module Books
7
7
  class ForeignBook < Books::Resource
8
- endpoint 'https://app.rakuten.co.jp/services/api/BooksForeignBook/Search/20170404'
8
+ endpoint 'https://openapi.rakuten.co.jp/services/api/BooksForeignBook/Search/20170404'
9
9
 
10
10
  attribute :title, :titleKana, :japaneseTitle,
11
11
  :author, :authorKana,
@@ -5,7 +5,7 @@ require 'rakuten_web_service/books/resource'
5
5
  module RakutenWebService
6
6
  module Books
7
7
  class Game < Books::Resource
8
- endpoint 'https://app.rakuten.co.jp/services/api/BooksGame/Search/20170404'
8
+ endpoint 'https://openapi.rakuten.co.jp/services/api/BooksGame/Search/20170404'
9
9
 
10
10
  attribute :title, :titleKana, :hardware, :jan, :makerCode,
11
11
  :itemCaption,
@@ -7,7 +7,7 @@ module RakutenWebService
7
7
  class Genre < RakutenWebService::BaseGenre
8
8
  self.resource_name = 'books_genre'
9
9
 
10
- endpoint 'https://app.rakuten.co.jp/services/api/BooksGenre/Search/20121128'
10
+ endpoint 'https://openapi.rakuten.co.jp/services/api/BooksGenre/Search/20121128'
11
11
 
12
12
  attribute :booksGenreId, :booksGenreName, :genreLevel, :itemCount
13
13
 
@@ -5,7 +5,7 @@ require 'rakuten_web_service/books/resource'
5
5
  module RakutenWebService
6
6
  module Books
7
7
  class Magazine < Books::Resource
8
- endpoint 'https://app.rakuten.co.jp/services/api/BooksMagazine/Search/20170404'
8
+ endpoint 'https://openapi.rakuten.co.jp/services/api/BooksMagazine/Search/20170404'
9
9
 
10
10
  attribute :title, :titleKana, :publisherName, :jan,
11
11
  :itemCaption,
@@ -5,7 +5,7 @@ require 'rakuten_web_service/books/resource'
5
5
  module RakutenWebService
6
6
  module Books
7
7
  class Software < Books::Resource
8
- endpoint 'https://app.rakuten.co.jp/services/api/BooksSoftware/Search/20170404'
8
+ endpoint 'https://openapi.rakuten.co.jp/services/api/BooksSoftware/Search/20170404'
9
9
 
10
10
  attribute :title, :titleKana, :os, :jan, :makerCode,
11
11
  :itemCaption,
@@ -5,7 +5,7 @@ require 'rakuten_web_service/books/resource'
5
5
  module RakutenWebService
6
6
  module Books
7
7
  class Total < Books::Resource
8
- endpoint 'https://app.rakuten.co.jp/services/api/BooksTotal/Search/20170404'
8
+ endpoint 'https://openapi.rakuten.co.jp/services/api/BooksTotal/Search/20170404'
9
9
 
10
10
  parser do |response|
11
11
  response['Items'].map do |item|
@@ -39,6 +39,12 @@ module RakutenWebService
39
39
  end
40
40
  path = "#{path}?#{URI.encode_www_form(params)}"
41
41
  header = { 'User-Agent' => USER_AGENT }
42
+ if RakutenWebService.configuration.access_key
43
+ case RakutenWebService.configuration.access_key_transport
44
+ when :access_key_header
45
+ header['accessKey'] = RakutenWebService.configuration.access_key
46
+ end
47
+ end
42
48
  http.get(path, header)
43
49
  end
44
50
  end
@@ -4,12 +4,17 @@ require 'rakuten_web_service/string_support'
4
4
 
5
5
  module RakutenWebService
6
6
  class Configuration
7
- attr_accessor :application_id, :affiliate_id, :max_retries, :debug
7
+ attr_accessor :application_id, :affiliate_id, :max_retries, :debug, :access_key
8
+ attr_reader :access_key_transport
9
+
10
+ ALLOWED_ACCESS_KEY_TRANSPORTS = [:access_key_header, :query].freeze
8
11
 
9
12
  def initialize
10
13
  @application_id = ENV['RWS_APPLICATION_ID']
11
14
  @affiliate_id = ENV['RWS_AFFILIATE_ID']
12
15
  @max_retries = 5
16
+ @access_key = ENV['RWS_ACCESS_KEY']
17
+ @access_key_transport = :access_key_header
13
18
  end
14
19
 
15
20
  def generate_parameters(params)
@@ -17,18 +22,29 @@ module RakutenWebService
17
22
  end
18
23
 
19
24
  def default_parameters
20
- raise 'Application ID is not defined' unless has_required_options?
21
- { application_id: application_id, affiliate_id: affiliate_id, format_version: '2' }
25
+ raise 'Application ID and access key are not defined' unless has_required_options?
26
+ params = { application_id: application_id, affiliate_id: affiliate_id, format_version: '2' }
27
+ if access_key_transport == :query
28
+ params[:access_key] = access_key
29
+ end
30
+ params
22
31
  end
23
32
 
24
33
  def has_required_options?
25
- application_id && application_id != ''
34
+ application_id && application_id != '' && access_key && access_key != ''
26
35
  end
27
36
 
28
37
  def debug_mode?
29
38
  ENV.key?('RWS_SDK_DEBUG') || debug
30
39
  end
31
40
 
41
+ def access_key_transport=(value)
42
+ unless ALLOWED_ACCESS_KEY_TRANSPORTS.include?(value&.to_sym)
43
+ raise ArgumentError, "Invalid access_key_transport value: #{value}, expected one of: #{ALLOWED_ACCESS_KEY_TRANSPORTS.inspect}"
44
+ end
45
+ @access_key_transport = value&.to_sym
46
+ end
47
+
32
48
  private
33
49
 
34
50
  using RakutenWebService::StringSupport
@@ -8,7 +8,10 @@ module RakutenWebService
8
8
 
9
9
  def self.for(response)
10
10
  error_class = repository[response.code.to_i]
11
- error_class.new(JSON.parse(response.body)['error_description'])
11
+ json_body = JSON.parse(response.body)
12
+ # Note: In some case (e.g. authentication info missing), the server returns another format of error response like following:
13
+ # {"errors"=>{"errorCode"=>400, "errorMessage"=>"accessKey must be present as a query parameter or in the header"}}
14
+ error_class.new(json_body['error_description'] || json_body.dig('errors', 'errorMessage'))
12
15
  end
13
16
 
14
17
  def self.repository
@@ -5,7 +5,7 @@ require 'rakuten_web_service/resource'
5
5
  module RakutenWebService
6
6
  module Gora
7
7
  class Course < Resource
8
- endpoint 'https://app.rakuten.co.jp/services/api/Gora/GoraGolfCourseSearch/20170623'
8
+ endpoint 'https://openapi.rakuten.co.jp/services/api/Gora/GoraGolfCourseSearch/20170623'
9
9
 
10
10
  parser do |response|
11
11
  response['Items'].map { |item| new(item) }
@@ -11,7 +11,7 @@ module RakutenWebService
11
11
  end
12
12
  end
13
13
 
14
- endpoint 'https://app.rakuten.co.jp/services/api/Gora/GoraGolfCourseDetail/20170623'
14
+ endpoint 'https://openapi.rakuten.co.jp/services/api/Gora/GoraGolfCourseDetail/20170623'
15
15
 
16
16
  parser do |response|
17
17
  [new(response['Item'])]
@@ -5,7 +5,7 @@ require 'rakuten_web_service/resource'
5
5
  module RakutenWebService
6
6
  module Gora
7
7
  class Plan < Resource
8
- endpoint 'https://app.rakuten.co.jp/services/api/Gora/GoraPlanSearch/20170623'
8
+ endpoint 'https://openapi.rakuten.co.jp/services/api/Gora/GoraPlanSearch/20170623'
9
9
 
10
10
  parser do |response|
11
11
  response['Items'].map { |item| new(item) }
@@ -7,9 +7,9 @@ require 'rakuten_web_service/ichiba/product'
7
7
  module RakutenWebService
8
8
  module Ichiba
9
9
  class Genre < RakutenWebService::BaseGenre
10
- endpoint 'https://app.rakuten.co.jp/services/api/IchibaGenre/Search/20140222'
10
+ endpoint 'https://openapi.rakuten.co.jp/ichibagt/api/IchibaGenre/Search/20170711'
11
11
 
12
- attribute :genreId, :genreName, :genreLevel, :itemCount
12
+ attribute :genreId, :genreName, :genreLevel, :englishName, :linkGenreId, :chopperFlg, :lowestFlg, :itemCount
13
13
 
14
14
  root_id 0
15
15
 
@@ -15,7 +15,7 @@ module RakutenWebService
15
15
  end
16
16
  end
17
17
 
18
- endpoint 'https://app.rakuten.co.jp/services/api/IchibaItem/Search/20220601'
18
+ endpoint 'https://openapi.rakuten.co.jp/services/api/IchibaItem/Search/20220601'
19
19
 
20
20
  parser do |response|
21
21
  (response['Items'] || []).map { |item| Item.new(item) }
@@ -6,14 +6,14 @@ require 'rakuten_web_service/ichiba/genre'
6
6
  module RakutenWebService
7
7
  module Ichiba
8
8
  class Product < Resource
9
- endpoint 'https://app.rakuten.co.jp/services/api/Product/Search/20170426'
9
+ endpoint 'https://openapi.rakuten.co.jp/ichibaproduct/api/Product/Search/20250801'
10
10
 
11
11
  parser do |response|
12
12
  (response['Products'] || []).map { |prod| Product.new(prod) }
13
13
  end
14
14
 
15
- attribute :productId, :productName, :productNo, :brandName,
16
- :productUrlPC, :productUrlMobile, :affiliateUrl,
15
+ attribute :productId, :productCode, :productName, :productNo, :brandName,
16
+ :productUrlPC, :productUrlMobile, :searchUrl, :affiliateUrl,
17
17
  :smallImageUrl, :mediumImageUrl,
18
18
  :productCaption, :releaseDate,
19
19
  :makerCode, :makerName, :makerNameKana, :makerNameFormal,
@@ -24,7 +24,7 @@ module RakutenWebService
24
24
  :minPrice, :salesMinPrice, :usedExcludeMinPrice, :usedExcludeSalesMinPrice,
25
25
  :averagePrice,
26
26
  :reviewCount, :reviewAverage, :reviewUrlPC, :reviewUrlMobile,
27
- :rankTargetGenreId, :rankTargetProductCount,
27
+ :rank, :rankTargetGenreId, :rankTargetProductCount,
28
28
  :genreId, :genreName,
29
29
  :ProductDetails
30
30
 
@@ -5,7 +5,7 @@ require 'rakuten_web_service/ichiba/item'
5
5
  module RakutenWebService
6
6
  module Ichiba
7
7
  class RankingItem < RakutenWebService::Ichiba::Item
8
- endpoint 'https://app.rakuten.co.jp/services/api/IchibaItem/Ranking/20220601'
8
+ endpoint 'https://openapi.rakuten.co.jp/services/api/IchibaItem/Ranking/20220601'
9
9
 
10
10
  parser do |response|
11
11
  response['Items'].map { |item| RankingItem.new(item) }
@@ -5,7 +5,7 @@ require 'rakuten_web_service/resource'
5
5
  module RakutenWebService
6
6
  module Ichiba
7
7
  class TagGroup < Resource
8
- endpoint 'https://app.rakuten.co.jp/services/api/IchibaTag/Search/20140222'
8
+ endpoint 'https://openapi.rakuten.co.jp/services/api/IchibaTag/Search/20140222'
9
9
 
10
10
  parser do |response|
11
11
  response['tagGroups'].map { |tag_group| TagGroup.new(tag_group) }
@@ -5,7 +5,7 @@ require 'rakuten_web_service/resource'
5
5
  module RakutenWebService
6
6
  module Kobo
7
7
  class Ebook < RakutenWebService::Resource
8
- endpoint 'https://app.rakuten.co.jp/services/api/Kobo/EbookSearch/20170426'
8
+ endpoint 'https://openapi.rakuten.co.jp/services/api/Kobo/EbookSearch/20170426'
9
9
 
10
10
  attribute :title, :titleKana, :subTitle, :seriesName,
11
11
  :author, :authorKana, :publisherName,
@@ -9,7 +9,7 @@ module RakutenWebService
9
9
 
10
10
  root_id '101'
11
11
 
12
- endpoint 'https://app.rakuten.co.jp/services/api/Kobo/GenreSearch/20131010'
12
+ endpoint 'https://openapi.rakuten.co.jp/services/api/Kobo/GenreSearch/20131010'
13
13
 
14
14
  attribute :koboGenreId, :koboGenreName, :genreLevel, :itemCount
15
15
 
@@ -27,7 +27,7 @@ module RakutenWebService
27
27
  end
28
28
 
29
29
  class Category < Resource
30
- endpoint 'https://app.rakuten.co.jp/services/api/Recipe/CategoryList/20170426'
30
+ endpoint 'https://openapi.rakuten.co.jp/services/api/Recipe/CategoryList/20170426'
31
31
 
32
32
  attribute :categoryId, :categoryName, :categoryUrl, :parentCategoryId, :categoryType
33
33
 
@@ -6,7 +6,7 @@ require 'rakuten_web_service/recipe/category'
6
6
 
7
7
  module RakutenWebService
8
8
  class Recipe < Resource
9
- endpoint 'https://app.rakuten.co.jp/services/api/Recipe/CategoryRanking/20170426'
9
+ endpoint 'https://openapi.rakuten.co.jp/services/api/Recipe/CategoryRanking/20170426'
10
10
 
11
11
  attribute :recipeId, :recipeTitle, :recipeUrl,
12
12
  :foodImageUrl, :mediumImageUrl, :smallImageUrl,
@@ -34,6 +34,12 @@ module RakutenWebService
34
34
  end
35
35
  end
36
36
 
37
+ # Names of the reader methods defined by `attribute` on this class
38
+ # (not including ones inherited from superclasses).
39
+ def attribute_methods
40
+ @attribute_methods ||= []
41
+ end
42
+
37
43
  def search(options)
38
44
  SearchResult.new(options, self)
39
45
  end
@@ -69,6 +75,7 @@ module RakutenWebService
69
75
  define_method method_name do
70
76
  get_attribute(attribute_name)
71
77
  end
78
+ attribute_methods << method_name
72
79
  end
73
80
 
74
81
  def define_asking_method_for_attribute(attribute_name)
@@ -79,6 +86,7 @@ module RakutenWebService
79
86
  define_method "#{method_name}?" do
80
87
  get_attribute(attribute_name) == 1
81
88
  end
89
+ attribute_methods << "#{method_name}?"
82
90
  end
83
91
  end
84
92
 
@@ -18,7 +18,7 @@ module RakutenWebService
18
18
  module_function :search, :[]
19
19
 
20
20
  class Base < RakutenWebService::Travel::Resource
21
- endpoint 'https://app.rakuten.co.jp/services/api/Travel/GetAreaClass/20131024'
21
+ endpoint 'https://openapi.rakuten.co.jp/engine/api/Travel/GetAreaClass/20140210'
22
22
 
23
23
  parser do |response|
24
24
  response['areaClasses']['largeClasses'].map do |data|
@@ -5,7 +5,7 @@ require 'rakuten_web_service/travel/resource'
5
5
  module RakutenWebService
6
6
  module Travel
7
7
  class Hotel < RakutenWebService::Travel::Resource
8
- endpoint 'https://app.rakuten.co.jp/services/api/Travel/SimpleHotelSearch/20170426'
8
+ endpoint 'https://openapi.rakuten.co.jp/services/api/Travel/SimpleHotelSearch/20170426'
9
9
 
10
10
  parser do |response|
11
11
  response['hotels'].map do |hotel_info|
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RakutenWebService
4
- VERSION = '1.15.0'
4
+ VERSION = '1.17.0'
5
5
  end
@@ -15,7 +15,7 @@ Gem::Specification.new do |spec|
15
15
  spec.files = `git ls-files`.split($/)
16
16
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
17
  spec.require_paths = ['lib']
18
- spec.required_ruby_version = '>= 3.1.0'
18
+ spec.required_ruby_version = '>= 3.2.0'
19
19
 
20
20
  spec.add_dependency 'base64', '~> 0.2'
21
21
  spec.add_dependency 'bigdecimal', '~> 3.1'
@@ -24,6 +24,7 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency 'bundler'
25
25
  spec.add_development_dependency 'debug'
26
26
  spec.add_development_dependency 'rake', '~> 13.0'
27
+ spec.add_development_dependency 'rbs', '~> 4.0'
27
28
  spec.add_development_dependency 'rexml', '~> 3.2'
28
29
  spec.add_development_dependency 'rspec', '~> 3.9'
29
30
  spec.add_development_dependency 'tapp', '~> 1.5.1'