echonet_lite 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.
Files changed (346) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +5 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +6 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +43 -0
  9. data/Rakefile +6 -0
  10. data/bin/console +14 -0
  11. data/bin/setup +8 -0
  12. data/echonet_lite.gemspec +37 -0
  13. data/lib/echonet_lite.rb +149 -0
  14. data/lib/echonet_lite/version.rb +3 -0
  15. data/vendor/bundle/bin/htmldiff +29 -0
  16. data/vendor/bundle/bin/htmldiff.bat +6 -0
  17. data/vendor/bundle/bin/ldiff +29 -0
  18. data/vendor/bundle/bin/ldiff.bat +6 -0
  19. data/vendor/bundle/bin/rspec +27 -0
  20. data/vendor/bundle/bin/rspec.bat +6 -0
  21. data/vendor/bundle/cache/diff-lcs-1.3.gem +0 -0
  22. data/vendor/bundle/cache/echonet_lite-0.1.0.gem +0 -0
  23. data/vendor/bundle/cache/ipaddr-1.0.0.gem +0 -0
  24. data/vendor/bundle/cache/ipaddress-0.8.3.gem +0 -0
  25. data/vendor/bundle/cache/rspec-3.6.0.gem +0 -0
  26. data/vendor/bundle/cache/rspec-core-3.6.0.gem +0 -0
  27. data/vendor/bundle/cache/rspec-expectations-3.6.0.gem +0 -0
  28. data/vendor/bundle/cache/rspec-mocks-3.6.0.gem +0 -0
  29. data/vendor/bundle/cache/rspec-support-3.6.0.gem +0 -0
  30. data/vendor/bundle/doc/echonet_lite-0.1.0/ri/EL/GSET-c.ri +0 -0
  31. data/vendor/bundle/doc/echonet_lite-0.1.0/ri/EL/Hexadecimal_str-c.ri +0 -0
  32. data/vendor/bundle/doc/echonet_lite-0.1.0/ri/EL/Receive-c.ri +0 -0
  33. data/vendor/bundle/doc/echonet_lite-0.1.0/ri/EL/ReceivePrint-c.ri +0 -0
  34. data/vendor/bundle/doc/echonet_lite-0.1.0/ri/EL/SETC-c.ri +0 -0
  35. data/vendor/bundle/doc/echonet_lite-0.1.0/ri/EL/SETI-c.ri +0 -0
  36. data/vendor/bundle/doc/echonet_lite-0.1.0/ri/EL/cdesc-EL.ri +0 -0
  37. data/vendor/bundle/doc/echonet_lite-0.1.0/ri/EL/pattern-c.ri +0 -0
  38. data/vendor/bundle/doc/echonet_lite-0.1.0/ri/EL/search-c.ri +0 -0
  39. data/vendor/bundle/doc/echonet_lite-0.1.0/ri/EL/sendOPC1-c.ri +0 -0
  40. data/vendor/bundle/doc/echonet_lite-0.1.0/ri/EL/sendString-c.ri +0 -0
  41. data/vendor/bundle/doc/echonet_lite-0.1.0/ri/EL/udp_send-c.ri +0 -0
  42. data/vendor/bundle/doc/echonet_lite-0.1.0/ri/EchonetLite/cdesc-EchonetLite.ri +0 -0
  43. data/vendor/bundle/doc/echonet_lite-0.1.0/ri/cache.ri +0 -0
  44. data/vendor/bundle/gems/diff-lcs-1.3/.rspec +1 -0
  45. data/vendor/bundle/gems/diff-lcs-1.3/Code-of-Conduct.md +74 -0
  46. data/vendor/bundle/gems/diff-lcs-1.3/Contributing.md +83 -0
  47. data/vendor/bundle/gems/diff-lcs-1.3/History.md +220 -0
  48. data/vendor/bundle/gems/diff-lcs-1.3/License.md +39 -0
  49. data/vendor/bundle/gems/diff-lcs-1.3/Manifest.txt +37 -0
  50. data/vendor/bundle/gems/diff-lcs-1.3/README.rdoc +84 -0
  51. data/vendor/bundle/gems/diff-lcs-1.3/Rakefile +57 -0
  52. data/vendor/bundle/gems/diff-lcs-1.3/autotest/discover.rb +1 -0
  53. data/vendor/bundle/gems/diff-lcs-1.3/bin/htmldiff +32 -0
  54. data/vendor/bundle/gems/diff-lcs-1.3/bin/ldiff +6 -0
  55. data/vendor/bundle/gems/diff-lcs-1.3/docs/COPYING.txt +339 -0
  56. data/vendor/bundle/gems/diff-lcs-1.3/docs/artistic.txt +127 -0
  57. data/vendor/bundle/gems/diff-lcs-1.3/lib/diff-lcs.rb +3 -0
  58. data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs.rb +725 -0
  59. data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs/array.rb +7 -0
  60. data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs/block.rb +37 -0
  61. data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs/callbacks.rb +322 -0
  62. data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs/change.rb +181 -0
  63. data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs/htmldiff.rb +149 -0
  64. data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs/hunk.rb +276 -0
  65. data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs/internals.rb +307 -0
  66. data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs/ldiff.rb +167 -0
  67. data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs/string.rb +5 -0
  68. data/vendor/bundle/gems/diff-lcs-1.3/spec/change_spec.rb +65 -0
  69. data/vendor/bundle/gems/diff-lcs-1.3/spec/diff_spec.rb +47 -0
  70. data/vendor/bundle/gems/diff-lcs-1.3/spec/fixtures/ds1.csv +50 -0
  71. data/vendor/bundle/gems/diff-lcs-1.3/spec/fixtures/ds2.csv +51 -0
  72. data/vendor/bundle/gems/diff-lcs-1.3/spec/hunk_spec.rb +72 -0
  73. data/vendor/bundle/gems/diff-lcs-1.3/spec/issues_spec.rb +49 -0
  74. data/vendor/bundle/gems/diff-lcs-1.3/spec/lcs_spec.rb +56 -0
  75. data/vendor/bundle/gems/diff-lcs-1.3/spec/ldiff_spec.rb +47 -0
  76. data/vendor/bundle/gems/diff-lcs-1.3/spec/patch_spec.rb +422 -0
  77. data/vendor/bundle/gems/diff-lcs-1.3/spec/sdiff_spec.rb +214 -0
  78. data/vendor/bundle/gems/diff-lcs-1.3/spec/spec_helper.rb +321 -0
  79. data/vendor/bundle/gems/diff-lcs-1.3/spec/traverse_balanced_spec.rb +310 -0
  80. data/vendor/bundle/gems/diff-lcs-1.3/spec/traverse_sequences_spec.rb +139 -0
  81. data/vendor/bundle/gems/echonet_lite-0.1.0/.gitignore +12 -0
  82. data/vendor/bundle/gems/echonet_lite-0.1.0/.rspec +2 -0
  83. data/vendor/bundle/gems/echonet_lite-0.1.0/.travis.yml +5 -0
  84. data/vendor/bundle/gems/echonet_lite-0.1.0/CODE_OF_CONDUCT.md +74 -0
  85. data/vendor/bundle/gems/echonet_lite-0.1.0/Gemfile +6 -0
  86. data/vendor/bundle/gems/echonet_lite-0.1.0/LICENSE.txt +21 -0
  87. data/vendor/bundle/gems/echonet_lite-0.1.0/README.md +43 -0
  88. data/vendor/bundle/gems/echonet_lite-0.1.0/Rakefile +6 -0
  89. data/vendor/bundle/gems/echonet_lite-0.1.0/bin/console +14 -0
  90. data/vendor/bundle/gems/echonet_lite-0.1.0/bin/setup +8 -0
  91. data/vendor/bundle/gems/echonet_lite-0.1.0/echonet_lite.gemspec +37 -0
  92. data/vendor/bundle/gems/echonet_lite-0.1.0/lib/echonet_lite.rb +149 -0
  93. data/vendor/bundle/gems/echonet_lite-0.1.0/lib/echonet_lite/version.rb +3 -0
  94. data/vendor/bundle/gems/ipaddr-1.0.0/.gitignore +9 -0
  95. data/vendor/bundle/gems/ipaddr-1.0.0/.travis.yml +6 -0
  96. data/vendor/bundle/gems/ipaddr-1.0.0/Gemfile +4 -0
  97. data/vendor/bundle/gems/ipaddr-1.0.0/LICENSE.txt +23 -0
  98. data/vendor/bundle/gems/ipaddr-1.0.0/README.md +54 -0
  99. data/vendor/bundle/gems/ipaddr-1.0.0/Rakefile +10 -0
  100. data/vendor/bundle/gems/ipaddr-1.0.0/bin/console +14 -0
  101. data/vendor/bundle/gems/ipaddr-1.0.0/bin/setup +8 -0
  102. data/vendor/bundle/gems/ipaddr-1.0.0/ipaddr.gemspec +28 -0
  103. data/vendor/bundle/gems/ipaddr-1.0.0/lib/ipaddr.rb +662 -0
  104. data/vendor/bundle/gems/ipaddress-0.8.3/.document +5 -0
  105. data/vendor/bundle/gems/ipaddress-0.8.3/.gitignore +18 -0
  106. data/vendor/bundle/gems/ipaddress-0.8.3/.rock.yml +5 -0
  107. data/vendor/bundle/gems/ipaddress-0.8.3/CHANGELOG.rdoc +115 -0
  108. data/vendor/bundle/gems/ipaddress-0.8.3/Gemfile +3 -0
  109. data/vendor/bundle/gems/ipaddress-0.8.3/LICENSE.txt +20 -0
  110. data/vendor/bundle/gems/ipaddress-0.8.3/README.rdoc +998 -0
  111. data/vendor/bundle/gems/ipaddress-0.8.3/Rakefile +66 -0
  112. data/vendor/bundle/gems/ipaddress-0.8.3/ipaddress.gemspec +26 -0
  113. data/vendor/bundle/gems/ipaddress-0.8.3/lib/ipaddress.rb +227 -0
  114. data/vendor/bundle/gems/ipaddress-0.8.3/lib/ipaddress/ipv4.rb +1114 -0
  115. data/vendor/bundle/gems/ipaddress-0.8.3/lib/ipaddress/ipv6.rb +895 -0
  116. data/vendor/bundle/gems/ipaddress-0.8.3/lib/ipaddress/mongoid.rb +75 -0
  117. data/vendor/bundle/gems/ipaddress-0.8.3/lib/ipaddress/prefix.rb +265 -0
  118. data/vendor/bundle/gems/ipaddress-0.8.3/lib/ipaddress/version.rb +3 -0
  119. data/vendor/bundle/gems/ipaddress-0.8.3/test/ipaddress/ipv4_test.rb +600 -0
  120. data/vendor/bundle/gems/ipaddress-0.8.3/test/ipaddress/ipv6_test.rb +426 -0
  121. data/vendor/bundle/gems/ipaddress-0.8.3/test/ipaddress/mongoid_test.rb +70 -0
  122. data/vendor/bundle/gems/ipaddress-0.8.3/test/ipaddress/prefix_test.rb +153 -0
  123. data/vendor/bundle/gems/ipaddress-0.8.3/test/ipaddress_test.rb +82 -0
  124. data/vendor/bundle/gems/ipaddress-0.8.3/test/test_helper.rb +35 -0
  125. data/vendor/bundle/gems/rspec-3.6.0/LICENSE.md +27 -0
  126. data/vendor/bundle/gems/rspec-3.6.0/README.md +39 -0
  127. data/vendor/bundle/gems/rspec-3.6.0/lib/rspec.rb +3 -0
  128. data/vendor/bundle/gems/rspec-3.6.0/lib/rspec/version.rb +5 -0
  129. data/vendor/bundle/gems/rspec-core-3.6.0/.document +5 -0
  130. data/vendor/bundle/gems/rspec-core-3.6.0/.yardopts +8 -0
  131. data/vendor/bundle/gems/rspec-core-3.6.0/Changelog.md +2167 -0
  132. data/vendor/bundle/gems/rspec-core-3.6.0/LICENSE.md +26 -0
  133. data/vendor/bundle/gems/rspec-core-3.6.0/README.md +384 -0
  134. data/vendor/bundle/gems/rspec-core-3.6.0/exe/rspec +4 -0
  135. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/autorun.rb +3 -0
  136. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core.rb +185 -0
  137. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/backtrace_formatter.rb +65 -0
  138. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/bisect/coordinator.rb +66 -0
  139. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/bisect/example_minimizer.rb +169 -0
  140. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/bisect/runner.rb +169 -0
  141. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/bisect/server.rb +70 -0
  142. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/configuration.rb +2177 -0
  143. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/configuration_options.rb +196 -0
  144. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/drb.rb +113 -0
  145. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/dsl.rb +98 -0
  146. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/example.rb +653 -0
  147. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/example_group.rb +883 -0
  148. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/example_status_persister.rb +235 -0
  149. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/filter_manager.rb +231 -0
  150. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/flat_map.rb +20 -0
  151. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters.rb +265 -0
  152. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/base_formatter.rb +70 -0
  153. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/base_text_formatter.rb +75 -0
  154. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/bisect_formatter.rb +69 -0
  155. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/bisect_progress_formatter.rb +144 -0
  156. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/console_codes.rb +68 -0
  157. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/deprecation_formatter.rb +223 -0
  158. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/documentation_formatter.rb +70 -0
  159. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/exception_presenter.rb +496 -0
  160. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/fallback_message_formatter.rb +28 -0
  161. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/helpers.rb +110 -0
  162. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/html_formatter.rb +153 -0
  163. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/html_printer.rb +414 -0
  164. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/html_snippet_extractor.rb +118 -0
  165. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/json_formatter.rb +101 -0
  166. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/profile_formatter.rb +68 -0
  167. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/progress_formatter.rb +29 -0
  168. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/protocol.rb +182 -0
  169. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/snippet_extractor.rb +134 -0
  170. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/syntax_highlighter.rb +91 -0
  171. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/hooks.rb +624 -0
  172. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/invocations.rb +85 -0
  173. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/memoized_helpers.rb +535 -0
  174. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/metadata.rb +499 -0
  175. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/metadata_filter.rb +255 -0
  176. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/minitest_assertions_adapter.rb +31 -0
  177. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/mocking_adapters/flexmock.rb +31 -0
  178. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/mocking_adapters/mocha.rb +57 -0
  179. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/mocking_adapters/null.rb +14 -0
  180. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/mocking_adapters/rr.rb +31 -0
  181. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/mocking_adapters/rspec.rb +32 -0
  182. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/notifications.rb +514 -0
  183. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/option_parser.rb +309 -0
  184. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/ordering.rb +158 -0
  185. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/output_wrapper.rb +29 -0
  186. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/pending.rb +165 -0
  187. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/profiler.rb +32 -0
  188. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/project_initializer.rb +48 -0
  189. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/project_initializer/.rspec +1 -0
  190. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/project_initializer/spec/spec_helper.rb +100 -0
  191. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/rake_task.rb +168 -0
  192. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/reporter.rb +260 -0
  193. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/ruby_project.rb +53 -0
  194. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/runner.rb +193 -0
  195. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/sandbox.rb +37 -0
  196. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/set.rb +54 -0
  197. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/shared_context.rb +55 -0
  198. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/shared_example_group.rb +271 -0
  199. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/shell_escape.rb +49 -0
  200. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/test_unit_assertions_adapter.rb +30 -0
  201. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/version.rb +9 -0
  202. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/warnings.rb +40 -0
  203. data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/world.rb +264 -0
  204. data/vendor/bundle/gems/rspec-expectations-3.6.0/.document +5 -0
  205. data/vendor/bundle/gems/rspec-expectations-3.6.0/.yardopts +6 -0
  206. data/vendor/bundle/gems/rspec-expectations-3.6.0/Changelog.md +1072 -0
  207. data/vendor/bundle/gems/rspec-expectations-3.6.0/LICENSE.md +25 -0
  208. data/vendor/bundle/gems/rspec-expectations-3.6.0/README.md +305 -0
  209. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/expectations.rb +82 -0
  210. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/expectations/block_snippet_extractor.rb +253 -0
  211. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/expectations/configuration.rb +201 -0
  212. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/expectations/expectation_target.rb +127 -0
  213. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/expectations/fail_with.rb +39 -0
  214. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/expectations/failure_aggregator.rb +194 -0
  215. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/expectations/handler.rb +170 -0
  216. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/expectations/minitest_integration.rb +58 -0
  217. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/expectations/syntax.rb +132 -0
  218. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/expectations/version.rb +8 -0
  219. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers.rb +1025 -0
  220. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/aliased_matcher.rb +116 -0
  221. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in.rb +52 -0
  222. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/all.rb +85 -0
  223. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/base_matcher.rb +193 -0
  224. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/be.rb +288 -0
  225. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/be_between.rb +77 -0
  226. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/be_instance_of.rb +22 -0
  227. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/be_kind_of.rb +16 -0
  228. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/be_within.rb +72 -0
  229. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/change.rb +387 -0
  230. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/compound.rb +272 -0
  231. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/contain_exactly.rb +301 -0
  232. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/cover.rb +24 -0
  233. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/eq.rb +40 -0
  234. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/eql.rb +34 -0
  235. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/equal.rb +81 -0
  236. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/exist.rb +90 -0
  237. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/has.rb +103 -0
  238. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/have_attributes.rb +114 -0
  239. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/include.rb +143 -0
  240. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/match.rb +106 -0
  241. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/operators.rb +128 -0
  242. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/output.rb +200 -0
  243. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/raise_error.rb +230 -0
  244. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/respond_to.rb +165 -0
  245. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/satisfy.rb +60 -0
  246. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/start_or_end_with.rb +94 -0
  247. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/throw_symbol.rb +132 -0
  248. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/yield.rb +432 -0
  249. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/composable.rb +169 -0
  250. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/dsl.rb +527 -0
  251. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/english_phrasing.rb +58 -0
  252. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/expecteds_for_multiple_diffs.rb +73 -0
  253. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/fail_matchers.rb +42 -0
  254. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/generated_descriptions.rb +42 -0
  255. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/matcher_delegator.rb +35 -0
  256. data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/matcher_protocol.rb +99 -0
  257. data/vendor/bundle/gems/rspec-mocks-3.6.0/.document +5 -0
  258. data/vendor/bundle/gems/rspec-mocks-3.6.0/.yardopts +6 -0
  259. data/vendor/bundle/gems/rspec-mocks-3.6.0/Changelog.md +1073 -0
  260. data/vendor/bundle/gems/rspec-mocks-3.6.0/LICENSE.md +25 -0
  261. data/vendor/bundle/gems/rspec-mocks-3.6.0/README.md +460 -0
  262. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks.rb +130 -0
  263. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance.rb +11 -0
  264. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance/chain.rb +110 -0
  265. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance/error_generator.rb +31 -0
  266. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance/expect_chain_chain.rb +31 -0
  267. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance/expectation_chain.rb +50 -0
  268. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance/message_chains.rb +83 -0
  269. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance/proxy.rb +116 -0
  270. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance/recorder.rb +289 -0
  271. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance/stub_chain.rb +51 -0
  272. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance/stub_chain_chain.rb +23 -0
  273. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/argument_list_matcher.rb +100 -0
  274. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/argument_matchers.rb +320 -0
  275. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/configuration.rb +212 -0
  276. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/error_generator.rb +369 -0
  277. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/example_methods.rb +434 -0
  278. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/instance_method_stasher.rb +146 -0
  279. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/marshal_extension.rb +41 -0
  280. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/matchers/expectation_customization.rb +20 -0
  281. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/matchers/have_received.rb +130 -0
  282. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/matchers/receive.rb +132 -0
  283. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/matchers/receive_message_chain.rb +82 -0
  284. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/matchers/receive_messages.rb +77 -0
  285. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/message_chain.rb +87 -0
  286. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/message_expectation.rb +740 -0
  287. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/method_double.rb +287 -0
  288. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/method_reference.rb +202 -0
  289. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/minitest_integration.rb +68 -0
  290. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/mutate_const.rb +339 -0
  291. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/object_reference.rb +149 -0
  292. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/order_group.rb +81 -0
  293. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/proxy.rb +484 -0
  294. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/space.rb +238 -0
  295. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/standalone.rb +3 -0
  296. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/syntax.rb +325 -0
  297. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/targets.rb +124 -0
  298. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/test_double.rb +171 -0
  299. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/verifying_double.rb +129 -0
  300. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/verifying_message_expectation.rb +54 -0
  301. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/verifying_proxy.rb +220 -0
  302. data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/version.rb +9 -0
  303. data/vendor/bundle/gems/rspec-support-3.6.0/Changelog.md +211 -0
  304. data/vendor/bundle/gems/rspec-support-3.6.0/LICENSE.md +23 -0
  305. data/vendor/bundle/gems/rspec-support-3.6.0/README.md +40 -0
  306. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support.rb +139 -0
  307. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/caller_filter.rb +83 -0
  308. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/comparable_version.rb +46 -0
  309. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/differ.rb +215 -0
  310. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/directory_maker.rb +63 -0
  311. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/encoded_string.rb +165 -0
  312. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/fuzzy_matcher.rb +48 -0
  313. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/hunk_generator.rb +47 -0
  314. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/matcher_definition.rb +42 -0
  315. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/method_signature_verifier.rb +392 -0
  316. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/mutex.rb +73 -0
  317. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/object_formatter.rb +268 -0
  318. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/recursive_const_methods.rb +76 -0
  319. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/reentrant_mutex.rb +53 -0
  320. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/ruby_features.rb +162 -0
  321. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/source.rb +75 -0
  322. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/source/location.rb +21 -0
  323. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/source/node.rb +107 -0
  324. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/source/token.rb +87 -0
  325. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/spec.rb +81 -0
  326. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/spec/deprecation_helpers.rb +64 -0
  327. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/spec/formatting_support.rb +9 -0
  328. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/spec/in_sub_process.rb +69 -0
  329. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/spec/library_wide_checks.rb +150 -0
  330. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/spec/shell_out.rb +84 -0
  331. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/spec/stderr_splitter.rb +63 -0
  332. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/spec/string_matcher.rb +46 -0
  333. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/spec/with_isolated_directory.rb +13 -0
  334. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/spec/with_isolated_stderr.rb +13 -0
  335. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/version.rb +7 -0
  336. data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/warnings.rb +39 -0
  337. data/vendor/bundle/specifications/diff-lcs-1.3.gemspec +61 -0
  338. data/vendor/bundle/specifications/echonet_lite-0.1.0.gemspec +43 -0
  339. data/vendor/bundle/specifications/ipaddr-1.0.0.gemspec +38 -0
  340. data/vendor/bundle/specifications/ipaddress-0.8.3.gemspec +35 -0
  341. data/vendor/bundle/specifications/rspec-3.6.0.gemspec +42 -0
  342. data/vendor/bundle/specifications/rspec-core-3.6.0.gemspec +62 -0
  343. data/vendor/bundle/specifications/rspec-expectations-3.6.0.gemspec +50 -0
  344. data/vendor/bundle/specifications/rspec-mocks-3.6.0.gemspec +50 -0
  345. data/vendor/bundle/specifications/rspec-support-3.6.0.gemspec +41 -0
  346. metadata +444 -0
@@ -0,0 +1,75 @@
1
+ module IPAddress
2
+
3
+ #
4
+ # Mongoid field serialization
5
+ #
6
+ # IPAddress objects are converted to String
7
+ #
8
+ # IPAddress.mongoize IPAddress.parse("172.16.10.1")
9
+ # #=> "172.16.10.1"
10
+ #
11
+ # Prefix will be removed from host adresses
12
+ #
13
+ # IPAddress.mongoize "172.16.10.1/32"
14
+ # #=> "172.16.10.1"
15
+ #
16
+ # Prefix will be kept for network addresses
17
+ #
18
+ # IPAddress.mongoize "172.16.10.1/24"
19
+ # #=> "172.16.10.1/24"
20
+ #
21
+ # IPv6 addresses will be stored uncompressed to ease DB search and sorting
22
+ #
23
+ # IPAddress.mongoize "2001:db8::8:800:200c:417a"
24
+ # #=> "2001:0db8:0000:0000:0008:0800:200c:417a"
25
+ # IPAddress.mongoize "2001:db8::8:800:200c:417a/64"
26
+ # #=> "2001:0db8:0000:0000:0008:0800:200c:417a/64"
27
+ #
28
+ # Invalid addresses will be serialized as nil
29
+ #
30
+ # IPAddress.mongoize "invalid"
31
+ # #=> nil
32
+ # IPAddress.mongoize ""
33
+ # #=> nil
34
+ # IPAddress.mongoize 1
35
+ # #=> nil
36
+ # IPAddress.mongoize nil
37
+ # #=> nil
38
+ #
39
+ def self.mongoize(ipaddress)
40
+ ipaddress = self.parse(ipaddress) unless ipaddress.is_a?(IPAddress)
41
+ if ipaddress.bits.length == ipaddress.prefix
42
+ ipaddress.address
43
+ elsif ipaddress.is_a?(IPAddress::IPv6)
44
+ ipaddress.to_string_uncompressed
45
+ else
46
+ ipaddress.to_string
47
+ end
48
+ rescue ArgumentError
49
+ nil
50
+ end
51
+
52
+ #
53
+ # Mongoid field deserialization
54
+ #
55
+ def self.demongoize(string)
56
+ parse(string)
57
+ rescue ArgumentError
58
+ nil
59
+ end
60
+
61
+ #
62
+ # Delegates to IPAddress.mongoize
63
+ #
64
+ def self.evolve(ipaddress)
65
+ mongoize(ipaddress)
66
+ end
67
+
68
+ #
69
+ # Sends self object to IPAddress#mongoize
70
+ #
71
+ def mongoize
72
+ IPAddress.mongoize(self)
73
+ end
74
+
75
+ end
@@ -0,0 +1,265 @@
1
+ module IPAddress
2
+
3
+ #
4
+ # =NAME
5
+ #
6
+ # IPAddress::Prefix
7
+ #
8
+ # =SYNOPSIS
9
+ #
10
+ # Parent class for Prefix32 and Prefix128
11
+ #
12
+ # =DESCRIPTION
13
+ #
14
+ # IPAddress::Prefix is the parent class for IPAddress::Prefix32
15
+ # and IPAddress::Prefix128, defining some modules in common for
16
+ # both the subclasses.
17
+ #
18
+ # IPAddress::Prefix shouldn't be accesses directly, unless
19
+ # for particular needs.
20
+ #
21
+ class Prefix
22
+
23
+ include Comparable
24
+
25
+ attr_reader :prefix
26
+
27
+ #
28
+ # Creates a new general prefix
29
+ #
30
+ def initialize(num)
31
+ @prefix = num.to_i
32
+ end
33
+
34
+ #
35
+ # Returns a string with the prefix
36
+ #
37
+ def to_s
38
+ "#@prefix"
39
+ end
40
+ alias_method :inspect, :to_s
41
+
42
+ #
43
+ # Returns the prefix
44
+ #
45
+ def to_i
46
+ @prefix
47
+ end
48
+
49
+ #
50
+ # Compare the prefix
51
+ #
52
+ def <=>(oth)
53
+ @prefix <=> oth.to_i
54
+ end
55
+
56
+ #
57
+ # Sums two prefixes or a prefix to a
58
+ # number, returns a Fixnum
59
+ #
60
+ def +(oth)
61
+ if oth.is_a? Fixnum
62
+ self.prefix + oth
63
+ else
64
+ self.prefix + oth.prefix
65
+ end
66
+ end
67
+
68
+ #
69
+ # Returns the difference between two
70
+ # prefixes, or a prefix and a number,
71
+ # as a Fixnum
72
+ #
73
+ def -(oth)
74
+ if oth.is_a? Fixnum
75
+ self.prefix - oth
76
+ else
77
+ (self.prefix - oth.prefix).abs
78
+ end
79
+ end
80
+
81
+ end # class Prefix
82
+
83
+
84
+ class Prefix32 < Prefix
85
+
86
+ IN4MASK = 0xffffffff
87
+
88
+ #
89
+ # Creates a new prefix object for 32 bits IPv4 addresses
90
+ #
91
+ # prefix = IPAddress::Prefix32.new 24
92
+ # #=> 24
93
+ #
94
+ def initialize(num)
95
+ unless (0..32).include? num
96
+ raise ArgumentError, "Prefix must be in range 0..32, got: #{num}"
97
+ end
98
+ super(num)
99
+ end
100
+
101
+ #
102
+ # Returns the length of the host portion
103
+ # of a netmask.
104
+ #
105
+ # prefix = Prefix32.new 24
106
+ #
107
+ # prefix.host_prefix
108
+ # #=> 8
109
+ #
110
+ def host_prefix
111
+ 32 - @prefix
112
+ end
113
+
114
+ #
115
+ # Transforms the prefix into a string of bits
116
+ # representing the netmask
117
+ #
118
+ # prefix = IPAddress::Prefix32.new 24
119
+ #
120
+ # prefix.bits
121
+ # #=> "11111111111111111111111100000000"
122
+ #
123
+ def bits
124
+ "%.32b" % to_u32
125
+ end
126
+
127
+ #
128
+ # Gives the prefix in IPv4 dotted decimal format,
129
+ # i.e. the canonical netmask we're all used to
130
+ #
131
+ # prefix = IPAddress::Prefix32.new 24
132
+ #
133
+ # prefix.to_ip
134
+ # #=> "255.255.255.0"
135
+ #
136
+ def to_ip
137
+ [bits].pack("B*").unpack("CCCC").join(".")
138
+ end
139
+
140
+ #
141
+ # An array of octets of the IPv4 dotted decimal
142
+ # format
143
+ #
144
+ # prefix = IPAddress::Prefix32.new 24
145
+ #
146
+ # prefix.octets
147
+ # #=> [255, 255, 255, 0]
148
+ #
149
+ def octets
150
+ to_ip.split(".").map{|i| i.to_i}
151
+ end
152
+
153
+ #
154
+ # Unsigned 32 bits decimal number representing
155
+ # the prefix
156
+ #
157
+ # prefix = IPAddress::Prefix32.new 24
158
+ #
159
+ # prefix.to_u32
160
+ # #=> 4294967040
161
+ #
162
+ def to_u32
163
+ (IN4MASK >> host_prefix) << host_prefix
164
+ end
165
+
166
+ #
167
+ # Shortcut for the octecs in the dotted decimal
168
+ # representation
169
+ #
170
+ # prefix = IPAddress::Prefix32.new 24
171
+ #
172
+ # prefix[2]
173
+ # #=> 255
174
+ #
175
+ def [](index)
176
+ octets[index]
177
+ end
178
+
179
+ #
180
+ # The hostmask is the contrary of the subnet mask,
181
+ # as it shows the bits that can change within the
182
+ # hosts
183
+ #
184
+ # prefix = IPAddress::Prefix32.new 24
185
+ #
186
+ # prefix.hostmask
187
+ # #=> "0.0.0.255"
188
+ #
189
+ def hostmask
190
+ [~to_u32].pack("N").unpack("CCCC").join(".")
191
+ end
192
+
193
+ #
194
+ # Creates a new prefix by parsing a netmask in
195
+ # dotted decimal form
196
+ #
197
+ # prefix = IPAddress::Prefix32::parse_netmask "255.255.255.0"
198
+ # #=> 24
199
+ #
200
+ def self.parse_netmask(netmask)
201
+ octets = netmask.split(".").map{|i| i.to_i}
202
+ num = octets.pack("C"*octets.size).unpack("B*").first.count "1"
203
+ return self.new(num)
204
+ end
205
+
206
+ end # class Prefix32 < Prefix
207
+
208
+ class Prefix128 < Prefix
209
+
210
+ #
211
+ # Creates a new prefix object for 128 bits IPv6 addresses
212
+ #
213
+ # prefix = IPAddress::Prefix128.new 64
214
+ # #=> 64
215
+ #
216
+ def initialize(num=128)
217
+ unless (0..128).include? num.to_i
218
+ raise ArgumentError, "Prefix must be in range 0..128, got: #{num}"
219
+ end
220
+ super(num.to_i)
221
+ end
222
+
223
+ #
224
+ # Transforms the prefix into a string of bits
225
+ # representing the netmask
226
+ #
227
+ # prefix = IPAddress::Prefix128.new 64
228
+ #
229
+ # prefix.bits
230
+ # #=> "1111111111111111111111111111111111111111111111111111111111111111"
231
+ # "0000000000000000000000000000000000000000000000000000000000000000"
232
+ #
233
+ def bits
234
+ "1" * @prefix + "0" * (128 - @prefix)
235
+ end
236
+
237
+ #
238
+ # Unsigned 128 bits decimal number representing
239
+ # the prefix
240
+ #
241
+ # prefix = IPAddress::Prefix128.new 64
242
+ #
243
+ # prefix.to_u128
244
+ # #=> 340282366920938463444927863358058659840
245
+ #
246
+ def to_u128
247
+ bits.to_i(2)
248
+ end
249
+
250
+ #
251
+ # Returns the length of the host portion
252
+ # of a netmask.
253
+ #
254
+ # prefix = Prefix128.new 96
255
+ #
256
+ # prefix.host_prefix
257
+ # #=> 32
258
+ #
259
+ def host_prefix
260
+ 128 - @prefix
261
+ end
262
+
263
+ end # class Prefix123 < Prefix
264
+
265
+ end # module IPAddress
@@ -0,0 +1,3 @@
1
+ module Ipaddress
2
+ VERSION = "0.8.3"
3
+ end
@@ -0,0 +1,600 @@
1
+ require 'test_helper'
2
+
3
+ class IPv4Test < Minitest::Test
4
+
5
+ def setup
6
+ @klass = IPAddress::IPv4
7
+
8
+ @valid_ipv4 = {
9
+ "0.0.0.0/0" => ["0.0.0.0", 0],
10
+ "10.0.0.0" => ["10.0.0.0", 32],
11
+ "10.0.0.1" => ["10.0.0.1", 32],
12
+ "10.0.0.1/24" => ["10.0.0.1", 24],
13
+ "10.0.0.1/255.255.255.0" => ["10.0.0.1", 24]}
14
+
15
+ @invalid_ipv4 = ["10.0.0.256",
16
+ "10.0.0.0.0",
17
+ "10.0.0",
18
+ "10.0"]
19
+
20
+ @valid_ipv4_range = ["10.0.0.1-254",
21
+ "10.0.1-254.0",
22
+ "10.1-254.0.0"]
23
+
24
+ @netmask_values = {
25
+ "0.0.0.0/0" => "0.0.0.0",
26
+ "10.0.0.0/8" => "255.0.0.0",
27
+ "172.16.0.0/16" => "255.255.0.0",
28
+ "192.168.0.0/24" => "255.255.255.0",
29
+ "192.168.100.4/30" => "255.255.255.252",
30
+ "192.168.12.4/32" => "255.255.255.255"}
31
+
32
+ @decimal_values ={
33
+ "0.0.0.0/0" => 0,
34
+ "10.0.0.0/8" => 167772160,
35
+ "172.16.0.0/16" => 2886729728,
36
+ "192.168.0.0/24" => 3232235520,
37
+ "192.168.100.4/30" => 3232261124}
38
+
39
+ @hex_values = {
40
+ "10.0.0.0" => "0a000000",
41
+ "172.16.5.4" => "ac100504",
42
+ "192.168.100.4" => "c0a86404",
43
+ }
44
+
45
+ @ip = @klass.new("172.16.10.1/24")
46
+ @network = @klass.new("172.16.10.0/24")
47
+
48
+ @broadcast = {
49
+ "10.0.0.0/8" => "10.255.255.255/8",
50
+ "172.16.0.0/16" => "172.16.255.255/16",
51
+ "192.168.0.0/24" => "192.168.0.255/24",
52
+ "192.168.100.4/30" => "192.168.100.7/30",
53
+ "192.168.12.3/31" => "255.255.255.255/31",
54
+ "10.0.0.1/32" => "10.0.0.1/32"}
55
+
56
+ @networks = {
57
+ "10.5.4.3/8" => "10.0.0.0/8",
58
+ "172.16.5.4/16" => "172.16.0.0/16",
59
+ "192.168.4.3/24" => "192.168.4.0/24",
60
+ "192.168.100.5/30" => "192.168.100.4/30",
61
+ "192.168.1.3/31" => "192.168.1.2/31",
62
+ "192.168.2.5/32" => "192.168.2.5/32"}
63
+
64
+ @class_a = @klass.new("10.0.0.1/8")
65
+ @class_b = @klass.new("172.16.0.1/16")
66
+ @class_c = @klass.new("192.168.0.1/24")
67
+
68
+ @classful = {
69
+ "10.1.1.1" => 8,
70
+ "150.1.1.1" => 16,
71
+ "200.1.1.1" => 24 }
72
+
73
+ @in_range = {
74
+ "10.32.0.1" => ["10.32.0.253", 253],
75
+ "192.0.0.0" => ["192.1.255.255", 131072]
76
+ }
77
+
78
+ end
79
+
80
+ def test_initialize
81
+ @valid_ipv4.keys.each do |i|
82
+ ip = @klass.new(i)
83
+ assert_instance_of @klass, ip
84
+ end
85
+ assert_instance_of IPAddress::Prefix32, @ip.prefix
86
+ assert_raises (ArgumentError) do
87
+ @klass.new
88
+ end
89
+ end
90
+
91
+ def test_initialize_format_error
92
+ @invalid_ipv4.each do |i|
93
+ assert_raises(ArgumentError) {@klass.new(i)}
94
+ end
95
+ assert_raises (ArgumentError) {@klass.new("10.0.0.0/asd")}
96
+ end
97
+
98
+ def test_initialize_without_prefix
99
+ ip = @klass.new("10.10.0.0")
100
+ assert_instance_of IPAddress::Prefix32, ip.prefix
101
+ assert_equal 32, ip.prefix.to_i
102
+ end
103
+
104
+ def test_attributes
105
+ @valid_ipv4.each do |arg,attr|
106
+ ip = @klass.new(arg)
107
+ assert_equal attr.first, ip.address
108
+ assert_equal attr.last, ip.prefix.to_i
109
+ end
110
+ end
111
+
112
+ def test_octets
113
+ ip = @klass.new("10.1.2.3/8")
114
+ assert_equal ip.octets, [10,1,2,3]
115
+ end
116
+
117
+ def test_initialize_should_require_ip
118
+ assert_raises(ArgumentError) { @klass.new }
119
+ end
120
+
121
+ def test_method_data
122
+ if RUBY_VERSION < "2.0"
123
+ assert_equal "\254\020\n\001", @ip.data
124
+ else
125
+ assert_equal "\xAC\x10\n\x01".b, @ip.data
126
+ end
127
+ end
128
+
129
+ def test_method_to_string
130
+ @valid_ipv4.each do |arg,attr|
131
+ ip = @klass.new(arg)
132
+ assert_equal attr.join("/"), ip.to_string
133
+ end
134
+ end
135
+
136
+ def test_method_to_s
137
+ @valid_ipv4.each do |arg,attr|
138
+ ip = @klass.new(arg)
139
+ assert_equal attr.first, ip.to_s
140
+ end
141
+ end
142
+
143
+ def test_netmask
144
+ @netmask_values.each do |addr,mask|
145
+ ip = @klass.new(addr)
146
+ assert_equal mask, ip.netmask
147
+ end
148
+ end
149
+
150
+ def test_method_to_u32
151
+ @decimal_values.each do |addr,int|
152
+ ip = @klass.new(addr)
153
+ assert_equal int, ip.to_u32
154
+ end
155
+ end
156
+
157
+ def test_method_to_hex
158
+ @hex_values.each do |addr,hex|
159
+ ip = @klass.new(addr)
160
+ assert_equal hex, ip.to_hex
161
+ end
162
+ end
163
+
164
+ def test_method_network?
165
+ assert_equal true, @network.network?
166
+ assert_equal false, @ip.network?
167
+ end
168
+
169
+ def test_one_address_network
170
+ network = @klass.new("172.16.10.1/32")
171
+ assert_equal false, network.network?
172
+ end
173
+
174
+ def test_method_broadcast
175
+ @broadcast.each do |addr,bcast|
176
+ ip = @klass.new(addr)
177
+ assert_instance_of @klass, ip.broadcast
178
+ assert_equal bcast, ip.broadcast.to_string
179
+ end
180
+ end
181
+
182
+ def test_method_network
183
+ @networks.each do |addr,net|
184
+ ip = @klass.new addr
185
+ assert_instance_of @klass, ip.network
186
+ assert_equal net, ip.network.to_string
187
+ end
188
+ end
189
+
190
+ def test_method_bits
191
+ ip = @klass.new("127.0.0.1")
192
+ assert_equal "01111111000000000000000000000001", ip.bits
193
+ end
194
+
195
+ def test_method_first
196
+ ip = @klass.new("192.168.100.0/24")
197
+ assert_instance_of @klass, ip.first
198
+ assert_equal "192.168.100.1", ip.first.to_s
199
+ ip = @klass.new("192.168.100.50/24")
200
+ assert_instance_of @klass, ip.first
201
+ assert_equal "192.168.100.1", ip.first.to_s
202
+ ip = @klass.new("192.168.100.50/32")
203
+ assert_instance_of @klass, ip.first
204
+ assert_equal "192.168.100.50", ip.first.to_s
205
+ ip = @klass.new("192.168.100.50/31")
206
+ assert_instance_of @klass, ip.first
207
+ assert_equal "192.168.100.50", ip.first.to_s
208
+ end
209
+
210
+ def test_method_last
211
+ ip = @klass.new("192.168.100.0/24")
212
+ assert_instance_of @klass, ip.last
213
+ assert_equal "192.168.100.254", ip.last.to_s
214
+ ip = @klass.new("192.168.100.50/24")
215
+ assert_instance_of @klass, ip.last
216
+ assert_equal "192.168.100.254", ip.last.to_s
217
+ ip = @klass.new("192.168.100.50/32")
218
+ assert_instance_of @klass, ip.last
219
+ assert_equal "192.168.100.50", ip.last.to_s
220
+ ip = @klass.new("192.168.100.50/31")
221
+ assert_instance_of @klass, ip.last
222
+ assert_equal "192.168.100.51", ip.last.to_s
223
+ end
224
+
225
+ def test_method_each_host
226
+ ip = @klass.new("10.0.0.1/29")
227
+ arr = []
228
+ ip.each_host {|i| arr << i.to_s}
229
+ expected = ["10.0.0.1","10.0.0.2","10.0.0.3",
230
+ "10.0.0.4","10.0.0.5","10.0.0.6"]
231
+ assert_equal expected, arr
232
+ end
233
+
234
+ def test_method_each
235
+ ip = @klass.new("10.0.0.1/29")
236
+ arr = []
237
+ ip.each {|i| arr << i.to_s}
238
+ expected = ["10.0.0.0","10.0.0.1","10.0.0.2",
239
+ "10.0.0.3","10.0.0.4","10.0.0.5",
240
+ "10.0.0.6","10.0.0.7"]
241
+ assert_equal expected, arr
242
+ end
243
+
244
+ def test_method_size
245
+ ip = @klass.new("10.0.0.1/29")
246
+ assert_equal 8, ip.size
247
+ end
248
+
249
+ def test_method_hosts
250
+ ip = @klass.new("10.0.0.1/29")
251
+ expected = ["10.0.0.1","10.0.0.2","10.0.0.3",
252
+ "10.0.0.4","10.0.0.5","10.0.0.6"]
253
+ assert_equal expected, ip.hosts.map {|i| i.to_s}
254
+ end
255
+
256
+ def test_method_network_u32
257
+ assert_equal 2886732288, @ip.network_u32
258
+ end
259
+
260
+ def test_method_broadcast_u32
261
+ assert_equal 2886732543, @ip.broadcast_u32
262
+ end
263
+
264
+ def test_method_include?
265
+ ip = @klass.new("192.168.10.100/24")
266
+ addr = @klass.new("192.168.10.102/24")
267
+ assert_equal true, ip.include?(addr)
268
+ assert_equal false, ip.include?(@klass.new("172.16.0.48"))
269
+ ip = @klass.new("10.0.0.0/8")
270
+ assert_equal true, ip.include?(@klass.new("10.0.0.0/9"))
271
+ assert_equal true, ip.include?(@klass.new("10.1.1.1/32"))
272
+ assert_equal true, ip.include?(@klass.new("10.1.1.1/9"))
273
+ assert_equal false, ip.include?(@klass.new("172.16.0.0/16"))
274
+ assert_equal false, ip.include?(@klass.new("10.0.0.0/7"))
275
+ assert_equal false, ip.include?(@klass.new("5.5.5.5/32"))
276
+ assert_equal false, ip.include?(@klass.new("11.0.0.0/8"))
277
+ ip = @klass.new("13.13.0.0/13")
278
+ assert_equal false, ip.include?(@klass.new("13.16.0.0/32"))
279
+ end
280
+
281
+ def test_method_include_all?
282
+ ip = @klass.new("192.168.10.100/24")
283
+ addr1 = @klass.new("192.168.10.102/24")
284
+ addr2 = @klass.new("192.168.10.103/24")
285
+ assert_equal true, ip.include_all?(addr1,addr2)
286
+ assert_equal false, ip.include_all?(addr1, @klass.new("13.16.0.0/32"))
287
+ end
288
+
289
+ def test_method_ipv4?
290
+ assert_equal true, @ip.ipv4?
291
+ end
292
+
293
+ def test_method_ipv6?
294
+ assert_equal false, @ip.ipv6?
295
+ end
296
+
297
+ def test_method_private?
298
+ assert_equal true, @klass.new("192.168.10.50/24").private?
299
+ assert_equal true, @klass.new("192.168.10.50/16").private?
300
+ assert_equal true, @klass.new("172.16.77.40/24").private?
301
+ assert_equal true, @klass.new("172.16.10.50/14").private?
302
+ assert_equal true, @klass.new("10.10.10.10/10").private?
303
+ assert_equal true, @klass.new("10.0.0.0/8").private?
304
+ assert_equal false, @klass.new("192.168.10.50/12").private?
305
+ assert_equal false, @klass.new("3.3.3.3").private?
306
+ assert_equal false, @klass.new("10.0.0.0/7").private?
307
+ assert_equal false, @klass.new("172.32.0.0/12").private?
308
+ assert_equal false, @klass.new("172.16.0.0/11").private?
309
+ assert_equal false, @klass.new("192.0.0.2/24").private?
310
+ end
311
+
312
+ def test_method_octet
313
+ assert_equal 172, @ip[0]
314
+ assert_equal 16, @ip[1]
315
+ assert_equal 10, @ip[2]
316
+ assert_equal 1, @ip[3]
317
+ end
318
+
319
+ def test_method_a?
320
+ assert_equal true, @class_a.a?
321
+ assert_equal false, @class_b.a?
322
+ assert_equal false, @class_c.a?
323
+ end
324
+
325
+ def test_method_b?
326
+ assert_equal true, @class_b.b?
327
+ assert_equal false, @class_a.b?
328
+ assert_equal false, @class_c.b?
329
+ end
330
+
331
+ def test_method_c?
332
+ assert_equal true, @class_c.c?
333
+ assert_equal false, @class_a.c?
334
+ assert_equal false, @class_b.c?
335
+ end
336
+
337
+ def test_method_to_ipv6
338
+ assert_equal "ac10:0a01", @ip.to_ipv6
339
+ end
340
+
341
+ def test_method_reverse
342
+ assert_equal "1.10.16.172.in-addr.arpa", @ip.reverse
343
+ end
344
+
345
+ def test_method_compare
346
+ ip1 = @klass.new("10.1.1.1/8")
347
+ ip2 = @klass.new("10.1.1.1/16")
348
+ ip3 = @klass.new("172.16.1.1/14")
349
+ ip4 = @klass.new("10.1.1.1/8")
350
+
351
+ # ip2 should be greater than ip1
352
+ assert_equal true, ip1 < ip2
353
+ assert_equal false, ip1 > ip2
354
+ assert_equal false, ip2 < ip1
355
+ # ip2 should be less than ip3
356
+ assert_equal true, ip2 < ip3
357
+ assert_equal false, ip2 > ip3
358
+ # ip1 should be less than ip3
359
+ assert_equal true, ip1 < ip3
360
+ assert_equal false, ip1 > ip3
361
+ assert_equal false, ip3 < ip1
362
+ # ip1 should be equal to itself
363
+ assert_equal true, ip1 == ip1
364
+ # ip1 should be equal to ip4
365
+ assert_equal true, ip1 == ip4
366
+ # test sorting
367
+ arr = ["10.1.1.1/8","10.1.1.1/16","172.16.1.1/14"]
368
+ assert_equal arr, [ip1,ip2,ip3].sort.map{|s| s.to_string}
369
+ # test same prefix
370
+ ip1 = @klass.new("10.0.0.0/24")
371
+ ip2 = @klass.new("10.0.0.0/16")
372
+ ip3 = @klass.new("10.0.0.0/8")
373
+ arr = ["10.0.0.0/8","10.0.0.0/16","10.0.0.0/24"]
374
+ assert_equal arr, [ip1,ip2,ip3].sort.map{|s| s.to_string}
375
+ end
376
+
377
+ def test_method_minus
378
+ ip1 = @klass.new("10.1.1.1/8")
379
+ ip2 = @klass.new("10.1.1.10/8")
380
+ assert_equal 9, ip2 - ip1
381
+ assert_equal 9, ip1 - ip2
382
+ end
383
+
384
+ def test_method_plus
385
+ ip1 = @klass.new("172.16.10.1/24")
386
+ ip2 = @klass.new("172.16.11.2/24")
387
+ assert_equal ["172.16.10.0/23"], (ip1+ip2).map{|i| i.to_string}
388
+
389
+ ip2 = @klass.new("172.16.12.2/24")
390
+ assert_equal [ip1.network.to_string, ip2.network.to_string],
391
+ (ip1 + ip2).map{|i| i.to_string}
392
+
393
+ ip1 = @klass.new("10.0.0.0/23")
394
+ ip2 = @klass.new("10.0.2.0/24")
395
+ assert_equal ["10.0.0.0/23","10.0.2.0/24"], (ip1+ip2).map{|i| i.to_string}
396
+
397
+ ip1 = @klass.new("10.0.0.0/23")
398
+ ip2 = @klass.new("10.0.2.0/24")
399
+ assert_equal ["10.0.0.0/23","10.0.2.0/24"], (ip2+ip1).map{|i| i.to_string}
400
+
401
+ ip1 = @klass.new("10.0.0.0/16")
402
+ ip2 = @klass.new("10.0.2.0/24")
403
+ assert_equal ["10.0.0.0/16"], (ip1+ip2).map{|i| i.to_string}
404
+
405
+ ip1 = @klass.new("10.0.0.0/23")
406
+ ip2 = @klass.new("10.1.0.0/24")
407
+ assert_equal ["10.0.0.0/23","10.1.0.0/24"], (ip1+ip2).map{|i| i.to_string}
408
+
409
+ end
410
+
411
+ def test_method_netmask_equal
412
+ ip = @klass.new("10.1.1.1/16")
413
+ assert_equal 16, ip.prefix.to_i
414
+ ip.netmask = "255.255.255.0"
415
+ assert_equal 24, ip.prefix.to_i
416
+ end
417
+
418
+ def test_method_split
419
+ assert_raises(ArgumentError) {@ip.split(0)}
420
+ assert_raises(ArgumentError) {@ip.split(257)}
421
+
422
+ assert_equal @ip.network, @ip.split(1).first
423
+
424
+ arr = ["172.16.10.0/27", "172.16.10.32/27", "172.16.10.64/27",
425
+ "172.16.10.96/27", "172.16.10.128/27", "172.16.10.160/27",
426
+ "172.16.10.192/27", "172.16.10.224/27"]
427
+ assert_equal arr, @network.split(8).map {|s| s.to_string}
428
+ arr = ["172.16.10.0/27", "172.16.10.32/27", "172.16.10.64/27",
429
+ "172.16.10.96/27", "172.16.10.128/27", "172.16.10.160/27",
430
+ "172.16.10.192/26"]
431
+ assert_equal arr, @network.split(7).map {|s| s.to_string}
432
+ arr = ["172.16.10.0/27", "172.16.10.32/27", "172.16.10.64/27",
433
+ "172.16.10.96/27", "172.16.10.128/26", "172.16.10.192/26"]
434
+ assert_equal arr, @network.split(6).map {|s| s.to_string}
435
+ arr = ["172.16.10.0/27", "172.16.10.32/27", "172.16.10.64/27",
436
+ "172.16.10.96/27", "172.16.10.128/25"]
437
+ assert_equal arr, @network.split(5).map {|s| s.to_string}
438
+ arr = ["172.16.10.0/26", "172.16.10.64/26", "172.16.10.128/26",
439
+ "172.16.10.192/26"]
440
+ assert_equal arr, @network.split(4).map {|s| s.to_string}
441
+ arr = ["172.16.10.0/26", "172.16.10.64/26", "172.16.10.128/25"]
442
+ assert_equal arr, @network.split(3).map {|s| s.to_string}
443
+ arr = ["172.16.10.0/25", "172.16.10.128/25"]
444
+ assert_equal arr, @network.split(2).map {|s| s.to_string}
445
+ arr = ["172.16.10.0/24"]
446
+ assert_equal arr, @network.split(1).map {|s| s.to_string}
447
+ end
448
+
449
+ def test_method_subnet
450
+ assert_raises(ArgumentError) {@network.subnet(23)}
451
+ assert_raises(ArgumentError) {@network.subnet(33)}
452
+ arr = ["172.16.10.0/26", "172.16.10.64/26", "172.16.10.128/26",
453
+ "172.16.10.192/26"]
454
+ assert_equal arr, @network.subnet(26).map {|s| s.to_string}
455
+ arr = ["172.16.10.0/25", "172.16.10.128/25"]
456
+ assert_equal arr, @network.subnet(25).map {|s| s.to_string}
457
+ arr = ["172.16.10.0/24"]
458
+ assert_equal arr, @network.subnet(24).map {|s| s.to_string}
459
+ end
460
+
461
+ def test_method_supernet
462
+ assert_raises(ArgumentError) {@ip.supernet(24)}
463
+ assert_equal "0.0.0.0/0", @ip.supernet(0).to_string
464
+ assert_equal "0.0.0.0/0", @ip.supernet(-2).to_string
465
+ assert_equal "172.16.10.0/23", @ip.supernet(23).to_string
466
+ assert_equal "172.16.8.0/22", @ip.supernet(22).to_string
467
+ end
468
+
469
+ def test_classmethod_parse_u32
470
+ @decimal_values.each do |addr,int|
471
+ ip = @klass.parse_u32(int)
472
+ ip.prefix = addr.split("/").last.to_i
473
+ assert_equal ip.to_string, addr
474
+ end
475
+ end
476
+
477
+ def test_classhmethod_extract
478
+ str = "foobar172.16.10.1barbaz"
479
+ assert_equal "172.16.10.1", @klass.extract(str).to_s
480
+ end
481
+
482
+ def test_classmethod_summarize
483
+
484
+ # Should return self if only one network given
485
+ assert_equal [@ip.network], @klass.summarize(@ip)
486
+
487
+ # Summarize homogeneous networks
488
+ ip1 = @klass.new("172.16.10.1/24")
489
+ ip2 = @klass.new("172.16.11.2/24")
490
+ assert_equal ["172.16.10.0/23"], @klass.summarize(ip1,ip2).map{|i| i.to_string}
491
+
492
+ ip1 = @klass.new("10.0.0.1/24")
493
+ ip2 = @klass.new("10.0.1.1/24")
494
+ ip3 = @klass.new("10.0.2.1/24")
495
+ ip4 = @klass.new("10.0.3.1/24")
496
+ assert_equal ["10.0.0.0/22"], @klass.summarize(ip1,ip2,ip3,ip4).map{|i| i.to_string}
497
+ assert_equal ["10.0.0.0/22"], @klass.summarize(ip4,ip3,ip2,ip1).map{|i| i.to_string}
498
+
499
+ # Summarize non homogeneous networks
500
+ ip1 = @klass.new("10.0.0.0/23")
501
+ ip2 = @klass.new("10.0.2.0/24")
502
+ assert_equal ["10.0.0.0/23","10.0.2.0/24"], @klass.summarize(ip1,ip2).map{|i| i.to_string}
503
+
504
+ ip1 = @klass.new("10.0.0.0/16")
505
+ ip2 = @klass.new("10.0.2.0/24")
506
+ assert_equal ["10.0.0.0/16"], @klass.summarize(ip1,ip2).map{|i| i.to_string}
507
+
508
+ ip1 = @klass.new("10.0.0.0/23")
509
+ ip2 = @klass.new("10.1.0.0/24")
510
+ assert_equal ["10.0.0.0/23","10.1.0.0/24"], @klass.summarize(ip1,ip2).map{|i| i.to_string}
511
+
512
+ ip1 = @klass.new("10.0.0.0/23")
513
+ ip2 = @klass.new("10.0.2.0/23")
514
+ ip3 = @klass.new("10.0.4.0/24")
515
+ ip4 = @klass.new("10.0.6.0/24")
516
+ assert_equal ["10.0.0.0/22","10.0.4.0/24","10.0.6.0/24"],
517
+ @klass.summarize(ip1,ip2,ip3,ip4).map{|i| i.to_string}
518
+
519
+ ip1 = @klass.new("10.0.1.1/24")
520
+ ip2 = @klass.new("10.0.2.1/24")
521
+ ip3 = @klass.new("10.0.3.1/24")
522
+ ip4 = @klass.new("10.0.4.1/24")
523
+ result = ["10.0.1.0/24","10.0.2.0/23","10.0.4.0/24"]
524
+ assert_equal result, @klass.summarize(ip1,ip2,ip3,ip4).map{|i| i.to_string}
525
+ assert_equal result, @klass.summarize(ip4,ip3,ip2,ip1).map{|i| i.to_string}
526
+
527
+ ip1 = @klass.new("10.0.1.1/24")
528
+ ip2 = @klass.new("10.10.2.1/24")
529
+ ip3 = @klass.new("172.16.0.1/24")
530
+ ip4 = @klass.new("172.16.1.1/24")
531
+ result = ["10.0.1.0/24","10.10.2.0/24","172.16.0.0/23"]
532
+ assert_equal result, @klass.summarize(ip1,ip2,ip3,ip4).map{|i| i.to_string}
533
+
534
+ ips = [@klass.new("10.0.0.12/30"),
535
+ @klass.new("10.0.100.0/24")]
536
+ result = ["10.0.0.12/30", "10.0.100.0/24"]
537
+ assert_equal result, @klass.summarize(*ips).map{|i| i.to_string}
538
+
539
+ ips = [@klass.new("172.16.0.0/31"),
540
+ @klass.new("10.10.2.1/32")]
541
+ result = ["10.10.2.1/32", "172.16.0.0/31"]
542
+ assert_equal result, @klass.summarize(*ips).map{|i| i.to_string}
543
+
544
+ ips = [@klass.new("172.16.0.0/32"),
545
+ @klass.new("10.10.2.1/32")]
546
+ result = ["10.10.2.1/32", "172.16.0.0/32"]
547
+ assert_equal result, @klass.summarize(*ips).map{|i| i.to_string}
548
+
549
+ end
550
+
551
+ def test_classmethod_parse_data
552
+ ip = @klass.parse_data "\254\020\n\001"
553
+ assert_instance_of @klass, ip
554
+ assert_equal "172.16.10.1", ip.address
555
+ assert_equal "172.16.10.1/32", ip.to_string
556
+ end
557
+
558
+ def test_classmethod_parse_classful
559
+ @classful.each do |ip,prefix|
560
+ res = @klass.parse_classful(ip)
561
+ assert_equal prefix, res.prefix
562
+ assert_equal "#{ip}/#{prefix}", res.to_string
563
+ end
564
+ assert_raises(ArgumentError){ @klass.parse_classful("192.168.256.257") }
565
+ end
566
+
567
+ def test_network_split
568
+ @classful.each do |ip,net|
569
+ x = @klass.new("#{ip}/#{net}")
570
+ assert_equal x.split(1).length, 1
571
+ assert_equal x.split(2).length, 2
572
+ assert_equal x.split(32).length, 32
573
+ assert_equal x.split(256).length, 256
574
+ end
575
+ end
576
+
577
+ def test_in_range
578
+ @in_range.each do |s,d|
579
+ ip = @klass.new(s)
580
+ assert_equal ip.to(d[0]).length, d[1]
581
+ end
582
+ end
583
+
584
+ def test_octect_updates
585
+ ip = @klass.new("10.0.1.15/32")
586
+ ip[1] = 15
587
+ assert_equal "10.15.1.15/32", ip.to_string
588
+
589
+ ip = @klass.new("172.16.100.1")
590
+ ip[3] = 200
591
+ assert_equal "172.16.100.200/32", ip.to_string
592
+
593
+ ip = @klass.new("192.168.199.0/24")
594
+ ip[2] = 200
595
+ assert_equal "192.168.200.0/24", ip.to_string
596
+ end
597
+
598
+ end # class IPv4Test
599
+
600
+