tdiary 5.5.1 → 5.6.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 (175) hide show
  1. checksums.yaml +4 -4
  2. data/ChangeLog +2 -0
  3. data/Gemfile +2 -1
  4. data/Gemfile.lock +37 -37
  5. data/doc/UPGRADE.md +1 -1
  6. data/lib/tdiary/admin.rb +11 -13
  7. data/lib/tdiary/application.rb +2 -7
  8. data/lib/tdiary/author_only_base.rb +78 -9
  9. data/lib/tdiary/base.rb +2 -2
  10. data/lib/tdiary/cgi_adapter.rb +7 -5
  11. data/lib/tdiary/cgi_compat.rb +27 -97
  12. data/lib/tdiary/configuration.rb +4 -0
  13. data/lib/tdiary/core_ext.rb +146 -1
  14. data/lib/tdiary/dispatcher/index_main.rb +5 -23
  15. data/lib/tdiary/dispatcher/update_main.rb +2 -17
  16. data/lib/tdiary/dispatcher.rb +29 -15
  17. data/lib/tdiary/filter/default.rb +2 -2
  18. data/lib/tdiary/filter/spam.rb +2 -2
  19. data/lib/tdiary/filter.rb +1 -1
  20. data/lib/tdiary/plugin/00default.rb +18 -3
  21. data/lib/tdiary/plugin/en/00default.rb +15 -0
  22. data/lib/tdiary/plugin/ja/00default.rb +15 -0
  23. data/lib/tdiary/plugin.rb +1 -1
  24. data/lib/tdiary/rack/error_handler.rb +36 -0
  25. data/lib/tdiary/rack.rb +1 -0
  26. data/lib/tdiary/request.rb +3 -2
  27. data/lib/tdiary/server.rb +25 -3
  28. data/lib/tdiary/version.rb +1 -1
  29. data/lib/tdiary/view.rb +33 -28
  30. data/lib/tdiary/view_helper.rb +10 -2
  31. data/lib/tdiary.rb +6 -1
  32. data/misc/plugin/image.rb +1 -1
  33. data/misc/plugin/makerss.rb +3 -3
  34. data/tdiary.conf.sample +8 -0
  35. data/tdiary.conf.sample-en +8 -0
  36. data/vendor/bundle/ruby/3.4.0/cache/net-imap-0.6.6.gem +0 -0
  37. data/vendor/bundle/ruby/3.4.0/cache/net-protocol-0.3.0.gem +0 -0
  38. data/vendor/bundle/ruby/3.4.0/cache/rack-3.2.7.gem +0 -0
  39. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/cgi-0.5.2/gem_make.out +5 -5
  40. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/date-3.5.1/gem_make.out +5 -5
  41. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/Gemfile +3 -4
  42. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/README.md +1 -1
  43. data/vendor/bundle/ruby/3.4.0/gems/net-imap-0.6.6/Rakefile +24 -0
  44. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/command_data.rb +62 -92
  45. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/config/attr_accessors.rb +8 -9
  46. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/config/attr_inheritance.rb +64 -1
  47. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/config/attr_version_defaults.rb +1 -4
  48. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/config.rb +209 -35
  49. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/connection_state.rb +1 -1
  50. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/data_encoding.rb +127 -27
  51. data/vendor/bundle/ruby/3.4.0/gems/net-imap-0.6.6/lib/net/imap/errors.rb +372 -0
  52. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/esearch_result.rb +6 -0
  53. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/response_data.rb +90 -11
  54. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/response_parser/parser_utils.rb +14 -23
  55. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/response_parser.rb +41 -26
  56. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/response_reader.rb +16 -21
  57. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/scram_authenticator.rb +3 -3
  58. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/search_result.rb +11 -1
  59. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sequence_set.rb +620 -312
  60. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/uidplus_data.rb +2 -63
  61. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap.rb +279 -162
  62. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/net-imap.gemspec +1 -1
  63. data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/rakelib/rdoc.rake +1 -18
  64. data/vendor/bundle/ruby/3.4.0/gems/{net-protocol-0.2.2/LICENSE.txt → net-protocol-0.3.0/BSDL} +3 -3
  65. data/vendor/bundle/ruby/3.4.0/gems/net-protocol-0.3.0/COPYING +56 -0
  66. data/vendor/bundle/ruby/3.4.0/gems/{net-protocol-0.2.2 → net-protocol-0.3.0}/lib/net/protocol.rb +58 -4
  67. data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/CHANGELOG.md +54 -1
  68. data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/utils.rb +3 -3
  69. data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/version.rb +1 -1
  70. data/vendor/bundle/ruby/3.4.0/specifications/{net-imap-0.5.15.gemspec → net-imap-0.6.6.gemspec} +4 -4
  71. data/vendor/bundle/ruby/3.4.0/specifications/{net-protocol-0.2.2.gemspec → net-protocol-0.3.0.gemspec} +5 -5
  72. data/vendor/bundle/ruby/3.4.0/specifications/{rack-3.2.6.gemspec → rack-3.2.7.gemspec} +3 -3
  73. data/views/tdiary.rconf +2 -0
  74. metadata +127 -131
  75. data/vendor/bundle/ruby/3.4.0/cache/net-imap-0.5.15.gem +0 -0
  76. data/vendor/bundle/ruby/3.4.0/cache/net-protocol-0.2.2.gem +0 -0
  77. data/vendor/bundle/ruby/3.4.0/cache/rack-3.2.6.gem +0 -0
  78. data/vendor/bundle/ruby/3.4.0/gems/net-imap-0.5.15/Rakefile +0 -13
  79. data/vendor/bundle/ruby/3.4.0/gems/net-imap-0.5.15/lib/net/imap/data_lite.rb +0 -226
  80. data/vendor/bundle/ruby/3.4.0/gems/net-imap-0.5.15/lib/net/imap/errors.rb +0 -118
  81. data/vendor/bundle/ruby/3.4.0/gems/net-protocol-0.2.2/Gemfile +0 -7
  82. data/vendor/bundle/ruby/3.4.0/gems/net-protocol-0.2.2/Rakefile +0 -10
  83. data/vendor/bundle/ruby/3.4.0/gems/net-protocol-0.2.2/bin/console +0 -14
  84. data/vendor/bundle/ruby/3.4.0/gems/net-protocol-0.2.2/bin/setup +0 -8
  85. data/vendor/bundle/ruby/3.4.0/gems/net-protocol-0.2.2/net-protocol.gemspec +0 -33
  86. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/BSDL +0 -0
  87. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/COPYING +0 -0
  88. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/LICENSE.txt +0 -0
  89. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/docs/styles.css +0 -0
  90. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/authenticators.rb +0 -0
  91. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/config/attr_type_coercion.rb +0 -0
  92. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/deprecated_client_options.rb +0 -0
  93. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/fetch_data.rb +0 -0
  94. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/flags.rb +0 -0
  95. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/anonymous_authenticator.rb +0 -0
  96. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/authentication_exchange.rb +0 -0
  97. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/authenticators.rb +0 -0
  98. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/client_adapter.rb +0 -0
  99. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/cram_md5_authenticator.rb +0 -0
  100. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/digest_md5_authenticator.rb +0 -0
  101. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/external_authenticator.rb +0 -0
  102. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/gs2_header.rb +0 -0
  103. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/login_authenticator.rb +0 -0
  104. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/oauthbearer_authenticator.rb +0 -0
  105. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/plain_authenticator.rb +0 -0
  106. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/protocol_adapters.rb +0 -0
  107. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/scram_algorithm.rb +0 -0
  108. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/stringprep.rb +0 -0
  109. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl/xoauth2_authenticator.rb +0 -0
  110. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl.rb +0 -0
  111. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/sasl_adapter.rb +0 -0
  112. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/stringprep/nameprep.rb +0 -0
  113. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/stringprep/saslprep.rb +0 -0
  114. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/stringprep/saslprep_tables.rb +0 -0
  115. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/stringprep/tables.rb +0 -0
  116. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/stringprep/trace.rb +0 -0
  117. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/stringprep.rb +0 -0
  118. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/lib/net/imap/vanished_data.rb +0 -0
  119. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/rakelib/benchmarks.rake +0 -0
  120. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/rakelib/rfcs.rake +0 -0
  121. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/rakelib/saslprep.rake +0 -0
  122. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/rakelib/string_prep_tables_generator.rb +0 -0
  123. /data/vendor/bundle/ruby/3.4.0/gems/{net-imap-0.5.15 → net-imap-0.6.6}/sample/net-imap.rb +0 -0
  124. /data/vendor/bundle/ruby/3.4.0/gems/{net-protocol-0.2.2 → net-protocol-0.3.0}/README.md +0 -0
  125. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/CONTRIBUTING.md +0 -0
  126. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/MIT-LICENSE +0 -0
  127. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/README.md +0 -0
  128. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/SPEC.rdoc +0 -0
  129. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/auth/abstract/handler.rb +0 -0
  130. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/auth/abstract/request.rb +0 -0
  131. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/auth/basic.rb +0 -0
  132. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/bad_request.rb +0 -0
  133. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/body_proxy.rb +0 -0
  134. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/builder.rb +0 -0
  135. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/cascade.rb +0 -0
  136. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/common_logger.rb +0 -0
  137. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/conditional_get.rb +0 -0
  138. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/config.rb +0 -0
  139. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/constants.rb +0 -0
  140. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/content_length.rb +0 -0
  141. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/content_type.rb +0 -0
  142. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/deflater.rb +0 -0
  143. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/directory.rb +0 -0
  144. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/etag.rb +0 -0
  145. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/events.rb +0 -0
  146. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/files.rb +0 -0
  147. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/head.rb +0 -0
  148. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/headers.rb +0 -0
  149. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/lint.rb +0 -0
  150. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/lock.rb +0 -0
  151. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/media_type.rb +0 -0
  152. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/method_override.rb +0 -0
  153. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/mime.rb +0 -0
  154. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/mock.rb +0 -0
  155. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/mock_request.rb +0 -0
  156. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/mock_response.rb +0 -0
  157. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/multipart/generator.rb +0 -0
  158. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/multipart/parser.rb +0 -0
  159. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/multipart/uploaded_file.rb +0 -0
  160. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/multipart.rb +0 -0
  161. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/null_logger.rb +0 -0
  162. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/query_parser.rb +0 -0
  163. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/recursive.rb +0 -0
  164. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/reloader.rb +0 -0
  165. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/request.rb +0 -0
  166. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/response.rb +0 -0
  167. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/rewindable_input.rb +0 -0
  168. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/runtime.rb +0 -0
  169. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/sendfile.rb +0 -0
  170. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/show_exceptions.rb +0 -0
  171. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/show_status.rb +0 -0
  172. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/static.rb +0 -0
  173. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/tempfile_reaper.rb +0 -0
  174. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack/urlmap.rb +0 -0
  175. /data/vendor/bundle/ruby/3.4.0/gems/{rack-3.2.6 → rack-3.2.7}/lib/rack.rb +0 -0
@@ -54,9 +54,72 @@ module Net
54
54
  # Creates a new config, which inherits from +self+.
55
55
  def new(**attrs) self.class.new(self, **attrs) end
56
56
 
57
+ # :call-seq:
58
+ # inherited?(attr) -> true or false
59
+ # inherited?(*attrs) -> true or false
60
+ # inherited? -> true or false
61
+ #
57
62
  # Returns +true+ if +attr+ is inherited from #parent and not overridden
58
63
  # by this config.
59
- def inherited?(attr) data[attr] == INHERITED end
64
+ #
65
+ # When multiple +attrs+ are given, returns +true+ if *all* of them are
66
+ # inherited, or +false+ if any of them are overriden. When no +attrs+
67
+ # are given, returns +true+ if *all* attributes are inherited, or
68
+ # +false+ if any attribute is overriden.
69
+ #
70
+ # Related: #overrides?
71
+ def inherited?(*attrs)
72
+ attrs = data.members if attrs.empty?
73
+ attrs.all? { data[_1] == INHERITED }
74
+ end
75
+
76
+ # :call-seq:
77
+ # inherits_defaults?(*attrs) -> true | Rational | nil | false
78
+ #
79
+ # Returns whether all +attrs+ are inherited from a default config.
80
+ # When no +attrs+ are given, returns whether *all* attributes are
81
+ # inherited from a default config.
82
+ #
83
+ # Returns +true+ when all attributes inherit from Config.default, the
84
+ # version number (as a Rational) when all attributes inherit from a
85
+ # versioned default (see Config@Versioned+defaults), +nil+ if any
86
+ # attributes inherit from Config.global overrides (but not from
87
+ # non-global ancestors), or +false+ when any attributes have been
88
+ # overridden by +self+ or an ancestor (besides global or default
89
+ # configs),
90
+ #
91
+ # Related: #overrides?
92
+ def inherits_defaults?(*attrs)
93
+ if equal?(Config.default)
94
+ true
95
+ elsif equal?(Config.global)
96
+ true if inherited?(*attrs)
97
+ elsif (v = AttrVersionDefaults::VERSIONS.find { equal? Config[_1] })
98
+ attrs = DEFAULT_TO_INHERIT if attrs.empty?
99
+ attrs &= DEFAULT_TO_INHERIT
100
+ (attrs.empty? || parent.inherits_defaults?(*attrs)) && v
101
+ else
102
+ inherited?(*attrs) && parent.inherits_defaults?(*attrs)
103
+ end
104
+ end
105
+
106
+ # :call-seq:
107
+ # overrides?(attr) -> true or false
108
+ # overrides?(*attrs) -> true or false
109
+ # overrides? -> true or false
110
+ #
111
+ # Returns +true+ if +attr+ is defined on this config and not inherited
112
+ # from #parent.
113
+ #
114
+ # When multiple +attrs+ are given, returns +true+ if
115
+ # *any* of them are defined on +self+. When no +attrs+ are given,
116
+ # returns +true+ if *any* attribute is overriden.
117
+ #
118
+ # Related: #inherited?
119
+ def overrides?(*attrs)
120
+ attrs = data.members if attrs.empty?
121
+ attrs.any? { data[_1] != INHERITED }
122
+ end
60
123
 
61
124
  # :call-seq:
62
125
  # reset -> self
@@ -59,10 +59,6 @@ module Net
59
59
  end
60
60
 
61
61
  def self.compile_version_defaults!
62
- # Temporarily assign Config.default, enabling #load_defaults(:default)
63
- version_defaults[:default] = Config.default
64
- # Use #load_defaults so some attributes are inherited from global.
65
- version_defaults[:default] = Config.new.load_defaults(:default).freeze
66
62
  version_defaults[0.0r] = Config[version_defaults.fetch(0.0r)]
67
63
 
68
64
  VERSIONS.each_cons(2) do |prior, version|
@@ -81,6 +77,7 @@ module Net
81
77
 
82
78
  version_defaults[:original] = Config[0.0r]
83
79
  version_defaults[:current] = Config[CURRENT_VERSION]
80
+ version_defaults[:default] = Config[CURRENT_VERSION]
84
81
  version_defaults[:next] = Config[NEXT_VERSION]
85
82
  version_defaults[:future] = Config[FUTURE_VERSION]
86
83
 
@@ -234,13 +234,26 @@ module Net
234
234
  # Do not use +SASL-IR+, even when it is supported by the server and the
235
235
  # mechanism.
236
236
  #
237
+ # [+:when_capabilities_cached+]
238
+ # Use +SASL-IR+ when Net::IMAP#capabilities_cached? is +true+ and it is
239
+ # supported by the server and the mechanism, but do not send a
240
+ # +CAPABILITY+ command to discover the server capabilities.
241
+ #
242
+ # <em>(+:when_capabilities_cached+ option was added by +v0.6.0+)</em>
243
+ #
237
244
  # [+true+ <em>(default since +v0.4+)</em>]
238
245
  # Use +SASL-IR+ when it is supported by the server and the mechanism.
239
- attr_accessor :sasl_ir, type: :boolean, defaults: {
246
+ attr_accessor :sasl_ir, type: Enum[
247
+ false, :when_capabilities_cached, true
248
+ ], defaults: {
240
249
  0.0r => false,
241
250
  0.4r => true,
242
251
  }
243
252
 
253
+ # :stopdoc:
254
+ alias sasl_ir? sasl_ir
255
+ # :startdoc:
256
+
244
257
  # Controls the behavior of Net::IMAP#login when the +LOGINDISABLED+
245
258
  # capability is present. When enforced, Net::IMAP will raise a
246
259
  # LoginDisabledError when that capability is present.
@@ -268,6 +281,40 @@ module Net
268
281
  0.5r => true,
269
282
  }
270
283
 
284
+ # The maximum bytesize for sending non-synchronizing literals, when the
285
+ # server supports them. To disable non-synchronizing literals, set the
286
+ # value to +-1+.
287
+ #
288
+ # Non-synchronizing literals are only sent when the server's
289
+ # capabilities[rdoc-ref:IMAP#capabilities] have been
290
+ # cached[rdoc-ref:IMAP#capabilities_cached?] and include either
291
+ # <tt>LITERAL+</tt> [RFC7888[https://www.rfc-editor.org/rfc/rfc7888]],
292
+ # <tt>LITERAL-</tt> [RFC7888[https://www.rfc-editor.org/rfc/rfc7888]], or
293
+ # +IMAP4rev2+ [RFC9051[https://www.rfc-editor.org/rfc/rfc9051]].
294
+ #
295
+ # For <tt>LITERAL+</tt>, this value is the only limit on whether a literal
296
+ # value is sent as non-synchronizing literals. For <tt>LITERAL-</tt> and
297
+ # <tt>IMAP4rev2</tt>, non-synchronizing literals must also be smaller than
298
+ # +4096+ bytes.
299
+ #
300
+ # Non-synchronizing literals avoid the latency of waiting for the server
301
+ # to allow continuation. However, if a client sends a non-synchronizing
302
+ # literal that is too large for the server, the server may need to close
303
+ # the connection. Because <tt>LITERAL+</tt> does not directly indicate
304
+ # the server's limits, it's best to avoid sending very large
305
+ # non-synchronized literals.
306
+ #
307
+ # ==== Versioned Defaults
308
+ #
309
+ # max_non_synchronizing_literal <em>was added in +v0.6.4+.</em>
310
+ #
311
+ # * original: +-1+ (_never_ send non-synchronizing literals)
312
+ # * +0.6+: 16 KiB
313
+ attr_accessor :max_non_synchronizing_literal, type: Integer, defaults: {
314
+ 0.0r => -1,
315
+ 0.6r => 16 << 16, # 16 KiB
316
+ }
317
+
271
318
  # The maximum allowed server response size. When +nil+, there is no limit
272
319
  # on response size.
273
320
  #
@@ -347,39 +394,32 @@ module Net
347
394
  #
348
395
  # Alias for responses_without_block
349
396
 
350
- # Whether ResponseParser should use the deprecated UIDPlusData or
351
- # CopyUIDData for +COPYUID+ response codes, and UIDPlusData or
352
- # AppendUIDData for +APPENDUID+ response codes.
397
+ # **NOTE:** <em>+UIDPlusData+ has been removed since +v0.6.0+, and this
398
+ # config option only affects deprecation warnings.
399
+ # This config option will be **removed** in +v0.7.0+.</em>
353
400
  #
354
- # UIDPlusData stores its data in arrays of numbers, which is vulnerable to
355
- # a memory exhaustion denial of service attack from an untrusted or
356
- # compromised server. Set this option to +false+ to completely block this
357
- # vulnerability. Otherwise, parser_max_deprecated_uidplus_data_size
358
- # mitigates this vulnerability.
401
+ # ResponseParser always returns CopyUIDData for +COPYUID+ response codes,
402
+ # and AppendUIDData for +APPENDUID+ response codes. Previously, this
403
+ # option determined when UIDPlusData would be returned instead.
359
404
  #
360
- # AppendUIDData and CopyUIDData are _mostly_ backward-compatible with
361
- # UIDPlusData. Most applications should be able to upgrade with little
362
- # or no changes.
405
+ # Parser support for +UIDPLUS+ added in +v0.3.2+.
363
406
  #
364
- # <em>(Parser support for +UIDPLUS+ added in +v0.3.2+.)</em>
407
+ # Config option added in +v0.4.19+ and +v0.5.6+.
365
408
  #
366
- # <em>(Config option added in +v0.4.19+ and +v0.5.6+.)</em>
409
+ # <em>UIDPlusData removed in +v0.6.0+.</em>
367
410
  #
368
- # <em>UIDPlusData will be removed in +v0.6+ and this config setting will
369
- # be ignored.</em>
370
- #
371
- # ==== Valid options
411
+ # ==== Options
372
412
  #
373
413
  # [+true+ <em>(original default)</em>]
374
- # ResponseParser only uses UIDPlusData.
414
+ # <em>Since v0.6.0:</em>
415
+ # Prints a deprecation warning when parsing +COPYUID+ or +APPENDUID+.
375
416
  #
376
417
  # [+:up_to_max_size+ <em>(default since +v0.5.6+)</em>]
377
- # ResponseParser uses UIDPlusData when the +uid-set+ size is below
378
- # parser_max_deprecated_uidplus_data_size. Above that size,
379
- # ResponseParser uses AppendUIDData or CopyUIDData.
418
+ # <em>Since v0.6.0:</em>
419
+ # Prints a deprecation warning when parsing +COPYUID+ or +APPENDUID+.
380
420
  #
381
- # [+false+ <em>(planned default for +v0.6+)</em>]
382
- # ResponseParser _only_ uses AppendUIDData and CopyUIDData.
421
+ # [+false+ <em>(default since +v0.6.0+)</em>]
422
+ # This is the only supported option <em>(since v0.6.0)</em>.
383
423
  attr_accessor :parser_use_deprecated_uidplus_data, type: Enum[
384
424
  true, :up_to_max_size, false
385
425
  ], defaults: {
@@ -388,22 +428,22 @@ module Net
388
428
  0.6r => false,
389
429
  }
390
430
 
391
- # The maximum +uid-set+ size that ResponseParser will parse into
392
- # deprecated UIDPlusData. This limit only applies when
393
- # parser_use_deprecated_uidplus_data is not +false+.
431
+ # **NOTE:** <em>+UIDPlusData+ has been removed since +v0.6.0+, and this
432
+ # config option is ignored.
433
+ # This config option will be **removed** in +v0.7.0+.</em>
394
434
  #
395
- # <em>(Parser support for +UIDPLUS+ added in +v0.3.2+.)</em>
435
+ # ResponseParser always returns CopyUIDData for +COPYUID+ response codes,
436
+ # and AppendUIDData for +APPENDUID+ response codes. Previously, this
437
+ # option determined when UIDPlusData would be returned instead.
396
438
  #
397
- # <em>Support for limiting UIDPlusData to a maximum size was added in
398
- # +v0.3.8+, +v0.4.19+, and +v0.5.6+.</em>
439
+ # Parser support for +UIDPLUS+ added in +v0.3.2+.
399
440
  #
400
- # <em>UIDPlusData will be removed in +v0.6+.</em>
441
+ # Support for limiting UIDPlusData to a maximum size was added in
442
+ # +v0.3.8+, +v0.4.19+, and +v0.5.6+.
401
443
  #
402
- # ==== Versioned Defaults
444
+ # <em>UIDPlusData was removed in +v0.6.0+.</em>
403
445
  #
404
- # Because this limit guards against a remote server causing catastrophic
405
- # memory exhaustion, the versioned default (used by #load_defaults) also
406
- # applies to versions without the feature.
446
+ # ==== Versioned Defaults
407
447
  #
408
448
  # * +0.3+ and prior: <tt>10,000</tt>
409
449
  # * +0.4+: <tt>1,000</tt>
@@ -485,12 +525,146 @@ module Net
485
525
  # Returns all config attributes in a hash.
486
526
  def to_h; data.members.to_h { [_1, send(_1)] } end
487
527
 
528
+ # Returns a string representation of overriden config attributes and the
529
+ # inheritance chain.
530
+ #
531
+ # Attributes overridden by ancestors are also inspected, recursively.
532
+ # Attributes that are inherited from default configs are not shown (see
533
+ # Config@Versioned+defaults and Config@Named+defaults).
534
+ #
535
+ # # (Line breaks have been added to the example output for legibility.)
536
+ #
537
+ # Net::IMAP::Config.new(0.4)
538
+ # .new(open_timeout: 10, enforce_logindisabled: true)
539
+ # .inspect
540
+ # #=> "#<Net::IMAP::Config:0x0000745871125410 open_timeout=10 enforce_logindisabled=true
541
+ # # inherits from Net::IMAP::Config[0.4]
542
+ # # inherits from Net::IMAP::Config.global
543
+ # # inherits from Net::IMAP::Config.default>"
544
+ #
545
+ # Non-default attributes are listed after the ancestor config from which
546
+ # they are inherited.
547
+ #
548
+ # # (Line breaks have been added to the example output for legibility.)
549
+ #
550
+ # config = Net::IMAP::Config.global
551
+ # .new(open_timeout: 10, idle_response_timeout: 2)
552
+ # .new(enforce_logindisabled: :when_capabilities_cached, sasl_ir: false)
553
+ # config.inspect
554
+ # #=> "#<Net::IMAP::Config:0x00007ce2a1e20e40 sasl_ir=false enforce_logindisabled=:when_capabilities_cached
555
+ # # inherits from Net::IMAP::Config:0x00007ce2a1e20f80 open_timeout=10 idle_response_timeout=2
556
+ # # inherits from Net::IMAP::Config.global
557
+ # # inherits from Net::IMAP::Config.default>"
558
+ #
559
+ # Net::IMAP.debug = true
560
+ # config.inspect
561
+ # #=> "#<Net::IMAP::Config:0x00007ce2a1e20e40 sasl_ir=false enforce_logindisabled=:when_capabilities_cached
562
+ # # inherits from Net::IMAP::Config:0x00007ce2a1e20f80 open_timeout=10 idle_response_timeout=2
563
+ # # inherits from Net::IMAP::Config.global debug=true
564
+ # # inherits from Net::IMAP::Config.default>"
565
+ #
566
+ # Use +pp+ (see #pretty_print) to inspect _all_ config attributes,
567
+ # including default values.
568
+ #
569
+ # Use #to_h to inspect all config attributes ignoring inheritance.
570
+ def inspect;
571
+ "#<#{inspect_recursive}>"
572
+ end
573
+ alias to_s inspect
574
+
575
+ # Used by PP[https://docs.ruby-lang.org/en/master/PP.html] to create a
576
+ # string representation of all config attributes and the inheritance
577
+ # chain. Inherited attributes are listed with the ancestor config from
578
+ # which they are inherited.
579
+ #
580
+ # pp Config.new[0.4].new(open_timeout: 10, idle_response_timeout: 10)
581
+ # # #<Net::IMAP::Config:0x0000745871125410
582
+ # # open_timeout=10
583
+ # # idle_response_timeout=10
584
+ # # inherits from Net::IMAP::Config[0.4]
585
+ # # responses_without_block=:silence_deprecation_warning
586
+ # # max_response_size=nil
587
+ # # sasl_ir=true
588
+ # # enforce_logindisabled=false
589
+ # # parser_use_deprecated_uidplus_data=true
590
+ # # parser_max_deprecated_uidplus_data_size=1000
591
+ # # inherits from Net::IMAP::Config.global
592
+ # # inherits from Net::IMAP::Config.default
593
+ # # debug=false>
594
+ #
595
+ # Related: #inspect, #to_h.
596
+ def pretty_print(pp)
597
+ pp.group(2, "#<", ">") do
598
+ pretty_print_recursive(pp)
599
+ end
600
+ end
601
+
602
+ # :stopdoc:
603
+
488
604
  protected
489
605
 
606
+ def named_default?
607
+ equal?(Config.default) ||
608
+ AttrVersionDefaults::VERSIONS.any? { equal? Config[_1] }
609
+ end
610
+
611
+ def name
612
+ if equal? Config.default then "#{Config}.default"
613
+ elsif equal? Config.global then "#{Config}.global"
614
+ elsif equal? Config[0.0r] then "#{Config}[:original]"
615
+ elsif (v = AttrVersionDefaults::VERSIONS.find { equal? Config[_1] })
616
+ "%s[%0.1f]" % [Config, v]
617
+ else
618
+ Kernel.instance_method(:to_s).bind_call(self).delete("<#>")
619
+ end
620
+ end
621
+
622
+ def inspect_recursive(attrs = AttrAccessors.struct.members)
623
+ strings = [name]
624
+ assigned = assigned_attrs_hash(attrs)
625
+ strings.concat assigned.map { "%s=%p" % _1 }
626
+ if parent
627
+ if parent.equal?(Config.default)
628
+ inherited_overrides = []
629
+ elsif parent
630
+ inherited_overrides = attrs - assigned.keys
631
+ inherited_overrides &= DEFAULT_TO_INHERIT if parent.named_default?
632
+ end
633
+ strings << "inherits from #{parent.inspect_recursive(inherited_overrides)}"
634
+ end
635
+ strings.join " "
636
+ end
637
+
638
+ def pretty_print_recursive(pp, attrs = AttrAccessors.struct.members)
639
+ pp.text name
640
+ assigned = assigned_attrs_hash(attrs)
641
+ pp.breakable
642
+ pp.seplist(assigned, ->{pp.breakable}) do |key, val|
643
+ pp.text key.to_s
644
+ pp.text "="
645
+ pp.pp val
646
+ end
647
+ if parent
648
+ pp.breakable if assigned.any?
649
+ pp.nest(2) do
650
+ pp.text "inherits from "
651
+ parent.pretty_print_recursive(pp, attrs - assigned.keys)
652
+ end
653
+ elsif assigned.empty?
654
+ pp.text "(overridden)"
655
+ end
656
+ end
657
+
658
+ def assigned_attrs_hash(attrs)
659
+ own_attrs = attrs.reject { inherited?(_1) }
660
+ own_attrs.to_h { [_1, data[_1]] }
661
+ end
662
+
490
663
  def defaults_hash
491
664
  to_h.reject {|k,v| DEFAULT_TO_INHERIT.include?(k) }
492
665
  end
493
666
 
667
+ Struct = AttrAccessors.struct
494
668
  @default = AttrVersionDefaults.compile_default!
495
669
  @global = default.new
496
670
  AttrVersionDefaults.compile_version_defaults!
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Net
4
4
  class IMAP
5
- class ConnectionState < Net::IMAP::Data # :nodoc:
5
+ class ConnectionState < Data # :nodoc:
6
6
  def self.define(symbol, *attrs)
7
7
  symbol => Symbol
8
8
  state = super(*attrs)
@@ -155,57 +155,157 @@ module Net
155
155
 
156
156
  # Common validators of number and nz_number types
157
157
  module NumValidator # :nodoc
158
+ NUMBER_RE = /\A\d+\z/
159
+ NZ_NUMBER_RE = /\A[1-9]\d*\z/
158
160
  module_function
159
161
 
160
- # Check is passed argument valid 'number' in RFC 3501 terminology
162
+ # Check if argument is a valid 'number' according to RFC 3501
163
+ # number = 1*DIGIT
164
+ # ; Unsigned 32-bit integer
165
+ # ; (0 <= n < 4,294,967,296)
161
166
  def valid_number?(num)
162
- # [RFC 3501]
163
- # number = 1*DIGIT
164
- # ; Unsigned 32-bit integer
165
- # ; (0 <= n < 4,294,967,296)
166
- num >= 0 && num < 4294967296
167
+ 0 <= num && num <= 0xffff_ffff
167
168
  end
168
169
 
169
- # Check is passed argument valid 'nz_number' in RFC 3501 terminology
170
+ # Check if argument is a valid 'nz-number' according to RFC 3501
171
+ # nz-number = digit-nz *DIGIT
172
+ # ; Non-zero unsigned 32-bit integer
173
+ # ; (0 < n < 4,294,967,296)
170
174
  def valid_nz_number?(num)
171
- # [RFC 3501]
172
- # nz-number = digit-nz *DIGIT
173
- # ; Non-zero unsigned 32-bit integer
174
- # ; (0 < n < 4,294,967,296)
175
- num != 0 && valid_number?(num)
175
+ 0 < num && num <= 0xffff_ffff
176
176
  end
177
177
 
178
- # Check is passed argument valid 'mod_sequence_value' in RFC 4551 terminology
178
+ # Check if argument is a valid 'number64' according to RFC 9051
179
+ # number64 = 1*DIGIT
180
+ # ; Unsigned 63-bit integer
181
+ # ; (0 <= n <= 9,223,372,036,854,775,807)
182
+ def valid_number64?(num)
183
+ 0 <= num && num <= 0x7fff_ffff_ffff_ffff
184
+ end
185
+
186
+ # Check if argument is a valid 'number64' according to RFC 9051
187
+ # nz-number64 = digit-nz *DIGIT
188
+ # ; Unsigned 63-bit integer
189
+ # ; (0 < n <= 9,223,372,036,854,775,807)
190
+ def valid_nz_number64?(num)
191
+ 0 < num && num <= 0x7fff_ffff_ffff_ffff
192
+ end
193
+
194
+ # Check if argument is a valid 'mod-sequence-value' according to RFC 4551
195
+ # mod-sequence-value = 1*DIGIT
196
+ # ; Positive unsigned 64-bit integer
197
+ # ; (mod-sequence)
198
+ # ; (1 <= n < 18,446,744,073,709,551,615)
179
199
  def valid_mod_sequence_value?(num)
180
- # mod-sequence-value = 1*DIGIT
181
- # ; Positive unsigned 64-bit integer
182
- # ; (mod-sequence)
183
- # ; (1 <= n < 18,446,744,073,709,551,615)
184
- num >= 1 && num < 18446744073709551615
200
+ 1 <= num && num < 0xffff_ffff_ffff_ffff
201
+ end
202
+
203
+ # Check if argument is a valid 'mod-sequence-valzer' according to RFC 4551
204
+ # mod-sequence-valzer = "0" / mod-sequence-value
205
+ def valid_mod_sequence_valzer?(num)
206
+ 0 <= num && num < 0xffff_ffff_ffff_ffff
185
207
  end
186
208
 
187
209
  # Ensure argument is 'number' or raise DataFormatError
188
210
  def ensure_number(num)
189
211
  return num if valid_number?(num)
190
-
191
- msg = "number must be unsigned 32-bit integer: #{num}"
192
- raise DataFormatError, msg
212
+ raise DataFormatError,
213
+ "number must be unsigned 32-bit integer: #{num}"
193
214
  end
194
215
 
195
- # Ensure argument is 'nz_number' or raise DataFormatError
216
+ # Ensure argument is 'nz-number' or raise DataFormatError
196
217
  def ensure_nz_number(num)
197
218
  return num if valid_nz_number?(num)
219
+ raise DataFormatError,
220
+ "nz-number must be non-zero unsigned 32-bit integer: #{num}"
221
+ end
222
+
223
+ # Ensure argument is 'number64' or raise DataFormatError
224
+ def ensure_number64(num)
225
+ return num if valid_number64?(num)
226
+ raise DataFormatError,
227
+ "number64 must be unsigned 63-bit integer: #{num}"
228
+ end
198
229
 
199
- msg = "nz_number must be non-zero unsigned 32-bit integer: #{num}"
200
- raise DataFormatError, msg
230
+ # Ensure argument is 'nz-number64' or raise DataFormatError
231
+ def ensure_nz_number64(num)
232
+ return num if valid_nz_number64?(num)
233
+ raise DataFormatError,
234
+ "nz-number64 must be non-zero unsigned 63-bit integer: #{num}"
201
235
  end
202
236
 
203
- # Ensure argument is 'mod_sequence_value' or raise DataFormatError
237
+ # Ensure argument is 'mod-sequence-value' or raise DataFormatError
204
238
  def ensure_mod_sequence_value(num)
205
239
  return num if valid_mod_sequence_value?(num)
240
+ raise DataFormatError,
241
+ "mod-sequence-value must be non-zero unsigned 64-bit integer: #{num}"
242
+ end
206
243
 
207
- msg = "mod_sequence_value must be unsigned 64-bit integer: #{num}"
208
- raise DataFormatError, msg
244
+ # Ensure argument is 'mod-sequence-valzer' or raise DataFormatError
245
+ def ensure_mod_sequence_valzer(num)
246
+ return num if valid_mod_sequence_valzer?(num)
247
+ raise DataFormatError,
248
+ "mod-sequence-valzer must be unsigned 64-bit integer: #{num}"
249
+ end
250
+
251
+ # Like #ensure_number, but usable with numeric String input.
252
+ def coerce_number(num)
253
+ case num
254
+ when Integer then ensure_number num
255
+ when NUMBER_RE then ensure_number num.to_i
256
+ else
257
+ raise DataFormatError, "%p is not a valid number" % [num]
258
+ end
259
+ end
260
+
261
+ # Like #ensure_nz_number, but usable with numeric String input.
262
+ def coerce_nz_number(num)
263
+ case num
264
+ when Integer then ensure_nz_number num
265
+ when NZ_NUMBER_RE then ensure_nz_number num.to_i
266
+ else
267
+ raise DataFormatError, "%p is not a valid nz-number" % [num]
268
+ end
269
+ end
270
+
271
+ # Like #ensure_number64, but usable with numeric String input.
272
+ def coerce_number64(num)
273
+ case num
274
+ when Integer then ensure_number64 num
275
+ when NUMBER_RE then ensure_number64 num.to_i
276
+ else
277
+ raise DataFormatError, "%p is not a valid number64" % [num]
278
+ end
279
+ end
280
+
281
+ # Like #ensure_nz_number64, but usable with numeric String input.
282
+ def coerce_nz_number64(num)
283
+ case num
284
+ when Integer then ensure_nz_number64 num
285
+ when NZ_NUMBER_RE then ensure_nz_number64 num.to_i
286
+ else
287
+ raise DataFormatError, "%p is not a valid nz-number64" % [num]
288
+ end
289
+ end
290
+
291
+ # Like #ensure_mod_sequence_value, but usable with numeric String input.
292
+ def coerce_mod_sequence_value(num)
293
+ case num
294
+ when Integer then ensure_mod_sequence_value num
295
+ when NUMBER_RE then ensure_mod_sequence_value num.to_i
296
+ else
297
+ raise DataFormatError, "%p is not a valid mod-sequence-value" % [num]
298
+ end
299
+ end
300
+
301
+ # Like #ensure_mod_sequence_valzer, but usable with numeric String input.
302
+ def coerce_mod_sequence_valzer(num)
303
+ case num
304
+ when Integer then ensure_mod_sequence_valzer num
305
+ when NUMBER_RE then ensure_mod_sequence_valzer num.to_i
306
+ else
307
+ raise DataFormatError, "%p is not a valid mod-sequence-valzer" % [num]
308
+ end
209
309
  end
210
310
 
211
311
  end