facter 2.1.0-x64-mingw32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of facter might be problematic. Click here for more details.

Files changed (440) hide show
  1. checksums.yaml +7 -0
  2. data/COMMITTERS.md +194 -0
  3. data/CONTRIBUTING.md +65 -0
  4. data/Gemfile +53 -0
  5. data/LICENSE +15 -0
  6. data/README.md +33 -0
  7. data/Rakefile +79 -0
  8. data/bin/facter +20 -0
  9. data/etc/facter.conf +5 -0
  10. data/ext/build_defaults.yaml +24 -0
  11. data/ext/debian/changelog.erb +59 -0
  12. data/ext/debian/compat +1 -0
  13. data/ext/debian/control +14 -0
  14. data/ext/debian/copyright +19 -0
  15. data/ext/debian/docs +1 -0
  16. data/ext/debian/lintian-overrides +0 -0
  17. data/ext/debian/rules +10 -0
  18. data/ext/debian/source/format +1 -0
  19. data/ext/facter-diff +74 -0
  20. data/ext/ips/facter.p5m.erb +10 -0
  21. data/ext/ips/rules +7 -0
  22. data/ext/ips/transforms +18 -0
  23. data/ext/osx/file_mapping.yaml +27 -0
  24. data/ext/osx/preflight.erb +33 -0
  25. data/ext/osx/prototype.plist.erb +38 -0
  26. data/ext/project_data.yaml +36 -0
  27. data/ext/redhat/facter.spec.erb +220 -0
  28. data/ext/solaris/pkginfo +7 -0
  29. data/install.rb +380 -0
  30. data/lib/facter.rb +261 -0
  31. data/lib/facter/Cfkey.rb +42 -0
  32. data/lib/facter/application.rb +204 -0
  33. data/lib/facter/architecture.rb +50 -0
  34. data/lib/facter/augeasversion.rb +28 -0
  35. data/lib/facter/blockdevices.rb +105 -0
  36. data/lib/facter/core/aggregate.rb +220 -0
  37. data/lib/facter/core/directed_graph.rb +46 -0
  38. data/lib/facter/core/execution.rb +123 -0
  39. data/lib/facter/core/execution/base.rb +81 -0
  40. data/lib/facter/core/execution/posix.rb +50 -0
  41. data/lib/facter/core/execution/windows.rb +57 -0
  42. data/lib/facter/core/logging.rb +169 -0
  43. data/lib/facter/core/resolvable.rb +94 -0
  44. data/lib/facter/core/suitable.rb +113 -0
  45. data/lib/facter/dhcp_servers.rb +39 -0
  46. data/lib/facter/domain.rb +99 -0
  47. data/lib/facter/ec2.rb +44 -0
  48. data/lib/facter/ec2/rest.rb +130 -0
  49. data/lib/facter/facterversion.rb +15 -0
  50. data/lib/facter/filesystems.rb +38 -0
  51. data/lib/facter/fqdn.rb +24 -0
  52. data/lib/facter/gce.rb +16 -0
  53. data/lib/facter/gce/metadata.rb +87 -0
  54. data/lib/facter/hardwareisa.rb +20 -0
  55. data/lib/facter/hardwaremodel.rb +67 -0
  56. data/lib/facter/hostname.rb +31 -0
  57. data/lib/facter/id.rb +21 -0
  58. data/lib/facter/interfaces.rb +46 -0
  59. data/lib/facter/ipaddress.rb +171 -0
  60. data/lib/facter/ipaddress6.rb +82 -0
  61. data/lib/facter/iphostnumber.rb +29 -0
  62. data/lib/facter/kernel.rb +22 -0
  63. data/lib/facter/kernelmajversion.rb +23 -0
  64. data/lib/facter/kernelrelease.rb +50 -0
  65. data/lib/facter/kernelversion.rb +22 -0
  66. data/lib/facter/ldom.rb +47 -0
  67. data/lib/facter/lsbdistcodename.rb +16 -0
  68. data/lib/facter/lsbdistdescription.rb +25 -0
  69. data/lib/facter/lsbdistid.rb +16 -0
  70. data/lib/facter/lsbdistrelease.rb +16 -0
  71. data/lib/facter/lsbmajdistrelease.rb +27 -0
  72. data/lib/facter/lsbrelease.rb +16 -0
  73. data/lib/facter/macaddress.rb +97 -0
  74. data/lib/facter/macosx.rb +56 -0
  75. data/lib/facter/manufacturer.rb +68 -0
  76. data/lib/facter/memory.rb +168 -0
  77. data/lib/facter/netmask.rb +42 -0
  78. data/lib/facter/network.rb +20 -0
  79. data/lib/facter/operatingsystem.rb +141 -0
  80. data/lib/facter/operatingsystemmajrelease.rb +47 -0
  81. data/lib/facter/operatingsystemrelease.rb +250 -0
  82. data/lib/facter/osfamily.rb +37 -0
  83. data/lib/facter/partitions.rb +35 -0
  84. data/lib/facter/path.rb +14 -0
  85. data/lib/facter/physicalprocessorcount.rb +91 -0
  86. data/lib/facter/processor.rb +168 -0
  87. data/lib/facter/ps.rb +30 -0
  88. data/lib/facter/puppetversion.rb +20 -0
  89. data/lib/facter/rubysitedir.rb +12 -0
  90. data/lib/facter/rubyversion.rb +12 -0
  91. data/lib/facter/selinux.rb +99 -0
  92. data/lib/facter/ssh.rb +72 -0
  93. data/lib/facter/timezone.rb +14 -0
  94. data/lib/facter/uniqueid.rb +4 -0
  95. data/lib/facter/uptime.rb +34 -0
  96. data/lib/facter/uptime_days.rb +15 -0
  97. data/lib/facter/uptime_hours.rb +15 -0
  98. data/lib/facter/uptime_seconds.rb +24 -0
  99. data/lib/facter/util/architecture.rb +19 -0
  100. data/lib/facter/util/collection.rb +161 -0
  101. data/lib/facter/util/composite_loader.rb +12 -0
  102. data/lib/facter/util/config.rb +63 -0
  103. data/lib/facter/util/confine.rb +66 -0
  104. data/lib/facter/util/dhcp_servers.rb +43 -0
  105. data/lib/facter/util/directory_loader.rb +83 -0
  106. data/lib/facter/util/ec2.rb +106 -0
  107. data/lib/facter/util/fact.rb +204 -0
  108. data/lib/facter/util/file_read.rb +37 -0
  109. data/lib/facter/util/formatter.rb +39 -0
  110. data/lib/facter/util/ip.rb +285 -0
  111. data/lib/facter/util/ip/windows.rb +215 -0
  112. data/lib/facter/util/loader.rb +155 -0
  113. data/lib/facter/util/macaddress.rb +43 -0
  114. data/lib/facter/util/macosx.rb +73 -0
  115. data/lib/facter/util/manufacturer.rb +99 -0
  116. data/lib/facter/util/memory.rb +228 -0
  117. data/lib/facter/util/netmask.rb +40 -0
  118. data/lib/facter/util/normalization.rb +94 -0
  119. data/lib/facter/util/nothing_loader.rb +12 -0
  120. data/lib/facter/util/operatingsystem.rb +21 -0
  121. data/lib/facter/util/parser.rb +158 -0
  122. data/lib/facter/util/partitions.rb +41 -0
  123. data/lib/facter/util/partitions/linux.rb +65 -0
  124. data/lib/facter/util/plist.rb +24 -0
  125. data/lib/facter/util/plist/generator.rb +228 -0
  126. data/lib/facter/util/plist/parser.rb +226 -0
  127. data/lib/facter/util/posix.rb +16 -0
  128. data/lib/facter/util/processor.rb +289 -0
  129. data/lib/facter/util/registry.rb +11 -0
  130. data/lib/facter/util/resolution.rb +160 -0
  131. data/lib/facter/util/solaris_zones.rb +158 -0
  132. data/lib/facter/util/unix_root.rb +5 -0
  133. data/lib/facter/util/uptime.rb +81 -0
  134. data/lib/facter/util/values.rb +109 -0
  135. data/lib/facter/util/virtual.rb +180 -0
  136. data/lib/facter/util/vlans.rb +21 -0
  137. data/lib/facter/util/windows_root.rb +7 -0
  138. data/lib/facter/util/wmi.rb +16 -0
  139. data/lib/facter/util/xendomains.rb +10 -0
  140. data/lib/facter/version.rb +86 -0
  141. data/lib/facter/virtual.rb +311 -0
  142. data/lib/facter/vlans.rb +17 -0
  143. data/lib/facter/xendomains.rb +20 -0
  144. data/lib/facter/zfs_version.rb +10 -0
  145. data/lib/facter/zonename.rb +6 -0
  146. data/lib/facter/zones.rb +17 -0
  147. data/lib/facter/zpool_version.rb +10 -0
  148. data/spec/fixtures/cpuinfo/amd64dual +57 -0
  149. data/spec/fixtures/cpuinfo/amd64quad +79 -0
  150. data/spec/fixtures/cpuinfo/amd64solo +23 -0
  151. data/spec/fixtures/cpuinfo/amd64tri +86 -0
  152. data/spec/fixtures/cpuinfo/amd64twentyfour +600 -0
  153. data/spec/fixtures/cpuinfo/bbg3-armel +12 -0
  154. data/spec/fixtures/cpuinfo/beaglexm-armel +12 -0
  155. data/spec/fixtures/cpuinfo/panda-armel +17 -0
  156. data/spec/fixtures/cpuinfo/ppc64 +19 -0
  157. data/spec/fixtures/cpuinfo/sparc +10 -0
  158. data/spec/fixtures/hpux/machinfo/hppa-rp4440 +26 -0
  159. data/spec/fixtures/hpux/machinfo/ia64-rx2620 +49 -0
  160. data/spec/fixtures/hpux/machinfo/ia64-rx6600 +26 -0
  161. data/spec/fixtures/hpux/machinfo/ia64-rx8640 +53 -0
  162. data/spec/fixtures/hpux/machinfo/superdome-server-SD32B +53 -0
  163. data/spec/fixtures/hpux/machinfo/superdome2-16s +31 -0
  164. data/spec/fixtures/hpux/sched.models +174 -0
  165. data/spec/fixtures/hpux/unistd.h +1534 -0
  166. data/spec/fixtures/ifconfig/bsd_ifconfig_all_with_multiple_interfaces +18 -0
  167. data/spec/fixtures/ifconfig/centos_5_5 +17 -0
  168. data/spec/fixtures/ifconfig/centos_5_5_eth0 +8 -0
  169. data/spec/fixtures/ifconfig/darwin_10_3_0 +26 -0
  170. data/spec/fixtures/ifconfig/darwin_10_3_0_en0 +6 -0
  171. data/spec/fixtures/ifconfig/darwin_10_6_4 +28 -0
  172. data/spec/fixtures/ifconfig/darwin_10_6_4_en1 +6 -0
  173. data/spec/fixtures/ifconfig/darwin_10_6_6_dualstack +8 -0
  174. data/spec/fixtures/ifconfig/darwin_10_6_6_dualstack_en1 +7 -0
  175. data/spec/fixtures/ifconfig/darwin_9_8_0 +26 -0
  176. data/spec/fixtures/ifconfig/darwin_9_8_0_en0 +6 -0
  177. data/spec/fixtures/ifconfig/darwin_ifconfig_all_with_multiple_interfaces +23 -0
  178. data/spec/fixtures/ifconfig/fedora_10 +36 -0
  179. data/spec/fixtures/ifconfig/fedora_10_eth0 +9 -0
  180. data/spec/fixtures/ifconfig/fedora_13 +18 -0
  181. data/spec/fixtures/ifconfig/fedora_13_eth0 +9 -0
  182. data/spec/fixtures/ifconfig/fedora_8 +38 -0
  183. data/spec/fixtures/ifconfig/fedora_8_eth0 +9 -0
  184. data/spec/fixtures/ifconfig/freebsd_6_0 +12 -0
  185. data/spec/fixtures/ifconfig/ifconfig_net_tools_1.60.txt +19 -0
  186. data/spec/fixtures/ifconfig/ifconfig_ubuntu_1204.txt +16 -0
  187. data/spec/fixtures/ifconfig/linux_ifconfig_all_with_multiple_interfaces +19 -0
  188. data/spec/fixtures/ifconfig/linux_ifconfig_no_addr +19 -0
  189. data/spec/fixtures/ifconfig/linux_ifconfig_no_mac +8 -0
  190. data/spec/fixtures/ifconfig/linux_ifconfig_venet +24 -0
  191. data/spec/fixtures/ifconfig/open_solaris_10 +12 -0
  192. data/spec/fixtures/ifconfig/open_solaris_b132 +20 -0
  193. data/spec/fixtures/ifconfig/openbsd_bridge_rules +11 -0
  194. data/spec/fixtures/ifconfig/sunos_ifconfig_all_with_multiple_interfaces +10 -0
  195. data/spec/fixtures/ifconfig/ubuntu_7_04 +38 -0
  196. data/spec/fixtures/ifconfig/ubuntu_7_04_eth0 +9 -0
  197. data/spec/fixtures/ldom/ldom_v1 +6 -0
  198. data/spec/fixtures/netstat/centos_5_5 +5 -0
  199. data/spec/fixtures/netstat/darwin_10_3_0 +35 -0
  200. data/spec/fixtures/netstat/darwin_10_6_4 +29 -0
  201. data/spec/fixtures/netstat/darwin_10_6_6_dualstack +34 -0
  202. data/spec/fixtures/netstat/darwin_9_8_0 +28 -0
  203. data/spec/fixtures/netstat/fedora_10 +7 -0
  204. data/spec/fixtures/netstat/open_solaris_10 +16 -0
  205. data/spec/fixtures/netstat/open_solaris_b132 +17 -0
  206. data/spec/fixtures/netstat/ubuntu_7_04 +7 -0
  207. data/spec/fixtures/processorcount/solaris-psrinfo +24 -0
  208. data/spec/fixtures/processorcount/solaris-sparc-kstat-cpu-info +1216 -0
  209. data/spec/fixtures/processorcount/solaris-x86_64-kstat-cpu-info +225 -0
  210. data/spec/fixtures/unit/dhcp_servers/nmcli_devices +4 -0
  211. data/spec/fixtures/unit/dhcp_servers/nmcli_devices_disconnected +4 -0
  212. data/spec/fixtures/unit/dhcp_servers/nmcli_eth0_dhcp +36 -0
  213. data/spec/fixtures/unit/dhcp_servers/nmcli_eth0_static +24 -0
  214. data/spec/fixtures/unit/dhcp_servers/nmcli_wlan0_dhcp +49 -0
  215. data/spec/fixtures/unit/dhcp_servers/nmcli_wlan0_static +37 -0
  216. data/spec/fixtures/unit/dhcp_servers/route +3 -0
  217. data/spec/fixtures/unit/dhcp_servers/route_nogw +1 -0
  218. data/spec/fixtures/unit/ec2/rest/meta-data/root +20 -0
  219. data/spec/fixtures/unit/filesystems/linux +28 -0
  220. data/spec/fixtures/unit/gce/metadata/metadata.json +69 -0
  221. data/spec/fixtures/unit/interfaces/ifconfig_net_tools_1.60.txt +19 -0
  222. data/spec/fixtures/unit/interfaces/ifconfig_net_tools_1.60.txt.em1 +10 -0
  223. data/spec/fixtures/unit/interfaces/ifconfig_net_tools_1.60.txt.lo +8 -0
  224. data/spec/fixtures/unit/ipaddress/ifconfig_multiple_127_addresses.txt +20 -0
  225. data/spec/fixtures/unit/ipaddress/ifconfig_net_tools_1.60.txt +19 -0
  226. data/spec/fixtures/unit/ipaddress/ifconfig_non_english_locale.txt +18 -0
  227. data/spec/fixtures/unit/ipaddress/ifconfig_ubuntu_1204.txt +16 -0
  228. data/spec/fixtures/unit/kernelrelease/openbsd-5.3 +2 -0
  229. data/spec/fixtures/unit/kernelrelease/openbsd-5.3-current +3 -0
  230. data/spec/fixtures/unit/memory/aix-svmon +9 -0
  231. data/spec/fixtures/unit/memory/aix-swap_l +2 -0
  232. data/spec/fixtures/unit/memory/darwin-swapinfo-multiple +3 -0
  233. data/spec/fixtures/unit/memory/darwin-swapinfo-single +2 -0
  234. data/spec/fixtures/unit/memory/darwin-vm_stat +13 -0
  235. data/spec/fixtures/unit/memory/dragonfly-vmstat +3 -0
  236. data/spec/fixtures/unit/memory/freebsd-vmstat +3 -0
  237. data/spec/fixtures/unit/memory/linux-proc_meminfo +10 -0
  238. data/spec/fixtures/unit/memory/openbsd-vmstat +3 -0
  239. data/spec/fixtures/unit/memory/smartos_zone_swap_l-single +2 -0
  240. data/spec/fixtures/unit/memory/solaris-prtconf +4 -0
  241. data/spec/fixtures/unit/memory/solaris-swap_l-multiple +3 -0
  242. data/spec/fixtures/unit/memory/solaris-swap_l-single +2 -0
  243. data/spec/fixtures/unit/memory/solaris-vmstat +3 -0
  244. data/spec/fixtures/unit/netmask/darwin_10_8_5.txt +30 -0
  245. data/spec/fixtures/unit/netmask/ifconfig_aix_7.txt +3 -0
  246. data/spec/fixtures/unit/netmask/ifconfig_net_tools_1.60.txt +19 -0
  247. data/spec/fixtures/unit/netmask/ifconfig_ubuntu_1204.txt +16 -0
  248. data/spec/fixtures/unit/selinux/selinux_sestatus +6 -0
  249. data/spec/fixtures/unit/util/dhcp_servers/route +3 -0
  250. data/spec/fixtures/unit/util/dhcp_servers/route_nogw +1 -0
  251. data/spec/fixtures/unit/util/ec2/centos-arp-ec2.out +1 -0
  252. data/spec/fixtures/unit/util/ec2/linux-arp-ec2.out +1 -0
  253. data/spec/fixtures/unit/util/ec2/linux-arp-not-ec2.out +5 -0
  254. data/spec/fixtures/unit/util/ec2/solaris8_arp_a_not_ec2.out +7 -0
  255. data/spec/fixtures/unit/util/ec2/windows-2008-arp-a-not-ec2.out +6 -0
  256. data/spec/fixtures/unit/util/ec2/windows-2008-arp-a.out +10 -0
  257. data/spec/fixtures/unit/util/ip/6.0-STABLE_FreeBSD_ifconfig +12 -0
  258. data/spec/fixtures/unit/util/ip/Mac_OS_X_10.5.5_ifconfig +26 -0
  259. data/spec/fixtures/unit/util/ip/darwin_ifconfig_all_with_multiple_interfaces +10 -0
  260. data/spec/fixtures/unit/util/ip/darwin_ifconfig_single_interface +6 -0
  261. data/spec/fixtures/unit/util/ip/debian_kfreebsd_ifconfig +40 -0
  262. data/spec/fixtures/unit/util/ip/hpux_1111_ifconfig_lan0 +2 -0
  263. data/spec/fixtures/unit/util/ip/hpux_1111_ifconfig_lan1 +2 -0
  264. data/spec/fixtures/unit/util/ip/hpux_1111_ifconfig_lo0 +2 -0
  265. data/spec/fixtures/unit/util/ip/hpux_1111_lanscan +5 -0
  266. data/spec/fixtures/unit/util/ip/hpux_1111_netstat_in +4 -0
  267. data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_ifconfig_lan0 +2 -0
  268. data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_ifconfig_lan1 +2 -0
  269. data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_ifconfig_lo0 +2 -0
  270. data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_lanscan +5 -0
  271. data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_netstat_in +4 -0
  272. data/spec/fixtures/unit/util/ip/hpux_1131_ifconfig_lan0 +2 -0
  273. data/spec/fixtures/unit/util/ip/hpux_1131_ifconfig_lan1 +2 -0
  274. data/spec/fixtures/unit/util/ip/hpux_1131_ifconfig_lo0 +2 -0
  275. data/spec/fixtures/unit/util/ip/hpux_1131_lanscan +4 -0
  276. data/spec/fixtures/unit/util/ip/hpux_1131_netstat_in +4 -0
  277. data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_ifconfig_lan1 +2 -0
  278. data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_ifconfig_lan4 +2 -0
  279. data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_ifconfig_lan4_1 +2 -0
  280. data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_ifconfig_lo0 +2 -0
  281. data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_lanscan +9 -0
  282. data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_netstat_in +6 -0
  283. data/spec/fixtures/unit/util/ip/linux_2_6_35_proc_net_bonding_bond0 +19 -0
  284. data/spec/fixtures/unit/util/ip/linux_get_single_interface_eth0 +10 -0
  285. data/spec/fixtures/unit/util/ip/linux_get_single_interface_ib0 +8 -0
  286. data/spec/fixtures/unit/util/ip/linux_get_single_interface_lo +9 -0
  287. data/spec/fixtures/unit/util/ip/linux_ifconfig_all_with_single_interface +18 -0
  288. data/spec/fixtures/unit/util/ip/linux_ifconfig_ib0 +8 -0
  289. data/spec/fixtures/unit/util/ip/solaris_ifconfig_all_with_multiple_interfaces +8 -0
  290. data/spec/fixtures/unit/util/ip/solaris_ifconfig_single_interface +3 -0
  291. data/spec/fixtures/unit/util/ip/windows_netsh_all_interfaces +12 -0
  292. data/spec/fixtures/unit/util/ip/windows_netsh_single_interface +7 -0
  293. data/spec/fixtures/unit/util/ip/windows_netsh_single_interface6 +18 -0
  294. data/spec/fixtures/unit/util/manufacturer/freebsd_dmidecode +42 -0
  295. data/spec/fixtures/unit/util/manufacturer/intel_linux_dmidecode +549 -0
  296. data/spec/fixtures/unit/util/manufacturer/linux_dmidecode_with_spaces +60 -0
  297. data/spec/fixtures/unit/util/manufacturer/opensolaris_smbios +33 -0
  298. data/spec/fixtures/unit/util/manufacturer/smartos_smbios +533 -0
  299. data/spec/fixtures/unit/util/manufacturer/solaris_sunfire_v120_prtdiag +33 -0
  300. data/spec/fixtures/unit/util/manufacturer/solaris_t5220_prtdiag +136 -0
  301. data/spec/fixtures/unit/util/operatingsystem/cumuluslinux.txt +8 -0
  302. data/spec/fixtures/unit/util/operatingsystem/redhat-7.txt +12 -0
  303. data/spec/fixtures/unit/util/operatingsystem/sabayon.txt +7 -0
  304. data/spec/fixtures/unit/util/operatingsystem/wheezy.txt +9 -0
  305. data/spec/fixtures/unit/util/partitions/partitions/mount +9 -0
  306. data/spec/fixtures/unit/util/processor/solaris-i86pc +28 -0
  307. data/spec/fixtures/unit/util/processor/solaris-sun4u +151 -0
  308. data/spec/fixtures/unit/util/processor/x86-pentium2 +41 -0
  309. data/spec/fixtures/unit/util/uptime/kstat_boot_time +1 -0
  310. data/spec/fixtures/unit/util/uptime/sysctl_kern_boottime_darwin +1 -0
  311. data/spec/fixtures/unit/util/uptime/sysctl_kern_boottime_openbsd +1 -0
  312. data/spec/fixtures/unit/util/uptime/ubuntu_proc_uptime +1 -0
  313. data/spec/fixtures/unit/util/virtual/invalid_unicode_dmi_entries +0 -0
  314. data/spec/fixtures/unit/util/virtual/solaris10_proc_self_status1 +0 -0
  315. data/spec/fixtures/unit/util/vlans/centos-5-no-vlans +2 -0
  316. data/spec/fixtures/unit/util/vlans/linux_vlan_config +6 -0
  317. data/spec/fixtures/unit/util/xendomains/xendomains +4 -0
  318. data/spec/fixtures/unit/virtual/sysfs_dmi_entries_raw.txt +0 -0
  319. data/spec/fixtures/unit/zfs_version/freebsd_8.2 +14 -0
  320. data/spec/fixtures/unit/zfs_version/freebsd_9.0 +13 -0
  321. data/spec/fixtures/unit/zfs_version/linux-fuse_0.6.9 +14 -0
  322. data/spec/fixtures/unit/zfs_version/solaris_10 +10 -0
  323. data/spec/fixtures/unit/zfs_version/solaris_11 +12 -0
  324. data/spec/fixtures/unit/zpool_version/freebsd_8.2 +26 -0
  325. data/spec/fixtures/unit/zpool_version/freebsd_9.0 +38 -0
  326. data/spec/fixtures/unit/zpool_version/linux-fuse_0.6.9 +35 -0
  327. data/spec/fixtures/unit/zpool_version/solaris_10 +31 -0
  328. data/spec/fixtures/unit/zpool_version/solaris_11 +43 -0
  329. data/spec/fixtures/virtual/proc_1_cgroup/in_a_container +9 -0
  330. data/spec/fixtures/virtual/proc_1_cgroup/in_a_docker_container +8 -0
  331. data/spec/fixtures/virtual/proc_1_cgroup/not_in_a_container +9 -0
  332. data/spec/fixtures/virtual/proc_self_status/vserver_2_1/guest +37 -0
  333. data/spec/fixtures/virtual/proc_self_status/vserver_2_1/host +36 -0
  334. data/spec/fixtures/virtual/proc_self_status/vserver_2_3/guest +39 -0
  335. data/spec/fixtures/virtual/proc_self_status/vserver_2_3/host +39 -0
  336. data/spec/integration/facter_spec.rb +39 -0
  337. data/spec/lib/facter_spec/cpuinfo.rb +15 -0
  338. data/spec/lib/facter_spec/windows_network.rb +64 -0
  339. data/spec/puppetlabs_spec/files.rb +57 -0
  340. data/spec/puppetlabs_spec/fixtures.rb +49 -0
  341. data/spec/puppetlabs_spec/matchers.rb +87 -0
  342. data/spec/puppetlabs_spec/verbose.rb +9 -0
  343. data/spec/puppetlabs_spec_helper.rb +26 -0
  344. data/spec/shared_contexts/platform.rb +55 -0
  345. data/spec/shared_formats/parses.rb +3 -0
  346. data/spec/spec_helper.rb +75 -0
  347. data/spec/unit/application_spec.rb +101 -0
  348. data/spec/unit/architecture_spec.rb +63 -0
  349. data/spec/unit/blockdevices_spec.rb +109 -0
  350. data/spec/unit/core/aggregate_spec.rb +125 -0
  351. data/spec/unit/core/directed_graph_spec.rb +79 -0
  352. data/spec/unit/core/execution/base_spec.rb +130 -0
  353. data/spec/unit/core/execution/posix_spec.rb +86 -0
  354. data/spec/unit/core/execution/windows_spec.rb +106 -0
  355. data/spec/unit/core/execution_spec.rb +42 -0
  356. data/spec/unit/core/logging_spec.rb +104 -0
  357. data/spec/unit/core/resolvable_spec.rb +81 -0
  358. data/spec/unit/core/suitable_spec.rb +106 -0
  359. data/spec/unit/dhcp_servers_spec.rb +152 -0
  360. data/spec/unit/domain_spec.rb +310 -0
  361. data/spec/unit/ec2/rest_spec.rb +145 -0
  362. data/spec/unit/ec2_spec.rb +127 -0
  363. data/spec/unit/facter_spec.rb +108 -0
  364. data/spec/unit/filesystems_spec.rb +50 -0
  365. data/spec/unit/fqdn_spec.rb +16 -0
  366. data/spec/unit/gce/metadata_spec.rb +49 -0
  367. data/spec/unit/gce_spec.rb +34 -0
  368. data/spec/unit/hardwareisa_spec.rb +41 -0
  369. data/spec/unit/hardwaremodel_spec.rb +56 -0
  370. data/spec/unit/hostname_spec.rb +40 -0
  371. data/spec/unit/id_spec.rb +29 -0
  372. data/spec/unit/interfaces_spec.rb +57 -0
  373. data/spec/unit/ipaddress6_spec.rb +161 -0
  374. data/spec/unit/ipaddress_spec.rb +114 -0
  375. data/spec/unit/kernel_spec.rb +24 -0
  376. data/spec/unit/kernelmajversion_spec.rb +22 -0
  377. data/spec/unit/kernelrelease_spec.rb +69 -0
  378. data/spec/unit/kernelversion_spec.rb +32 -0
  379. data/spec/unit/ldom_spec.rb +75 -0
  380. data/spec/unit/lsbdistcodename_spec.rb +25 -0
  381. data/spec/unit/lsbdistdescription_spec.rb +25 -0
  382. data/spec/unit/lsbdistid_spec.rb +25 -0
  383. data/spec/unit/lsbdistrelease_spec.rb +25 -0
  384. data/spec/unit/lsbmajdistrelease_spec.rb +13 -0
  385. data/spec/unit/lsbrelease_spec.rb +25 -0
  386. data/spec/unit/macaddress_spec.rb +73 -0
  387. data/spec/unit/manufacturer_spec.rb +115 -0
  388. data/spec/unit/memory_spec.rb +470 -0
  389. data/spec/unit/netmask_spec.rb +106 -0
  390. data/spec/unit/operatingsystem_spec.rb +160 -0
  391. data/spec/unit/operatingsystemmajrelease_spec.rb +38 -0
  392. data/spec/unit/operatingsystemrelease_spec.rb +236 -0
  393. data/spec/unit/osfamily_spec.rb +62 -0
  394. data/spec/unit/partitions_spec.rb +48 -0
  395. data/spec/unit/physicalprocessorcount_spec.rb +85 -0
  396. data/spec/unit/processor_spec.rb +401 -0
  397. data/spec/unit/ps_spec.rb +42 -0
  398. data/spec/unit/selinux_spec.rb +114 -0
  399. data/spec/unit/ssh_spec.rb +77 -0
  400. data/spec/unit/uniqueid_spec.rb +27 -0
  401. data/spec/unit/uptime_spec.rb +110 -0
  402. data/spec/unit/util/collection_spec.rb +258 -0
  403. data/spec/unit/util/config_spec.rb +97 -0
  404. data/spec/unit/util/confine_spec.rb +148 -0
  405. data/spec/unit/util/dhcp_servers_spec.rb +63 -0
  406. data/spec/unit/util/directory_loader_spec.rb +88 -0
  407. data/spec/unit/util/ec2_spec.rb +184 -0
  408. data/spec/unit/util/fact_spec.rb +142 -0
  409. data/spec/unit/util/file_read_spec.rb +29 -0
  410. data/spec/unit/util/formatter_spec.rb +50 -0
  411. data/spec/unit/util/ip/windows_spec.rb +80 -0
  412. data/spec/unit/util/ip_spec.rb +467 -0
  413. data/spec/unit/util/loader_spec.rb +286 -0
  414. data/spec/unit/util/macaddress_spec.rb +141 -0
  415. data/spec/unit/util/macosx_spec.rb +114 -0
  416. data/spec/unit/util/manufacturer_spec.rb +223 -0
  417. data/spec/unit/util/normalization_spec.rb +113 -0
  418. data/spec/unit/util/operatingsystem_spec.rb +92 -0
  419. data/spec/unit/util/parser_spec.rb +200 -0
  420. data/spec/unit/util/partitions/partitions_spec.rb +67 -0
  421. data/spec/unit/util/partitions_spec.rb +19 -0
  422. data/spec/unit/util/posix_spec.rb +11 -0
  423. data/spec/unit/util/processor_spec.rb +92 -0
  424. data/spec/unit/util/registry_spec.rb +76 -0
  425. data/spec/unit/util/resolution_spec.rb +129 -0
  426. data/spec/unit/util/solaris_zones_spec.rb +127 -0
  427. data/spec/unit/util/uptime_spec.rb +126 -0
  428. data/spec/unit/util/values_spec.rb +171 -0
  429. data/spec/unit/util/virtual_spec.rb +364 -0
  430. data/spec/unit/util/vlans_spec.rb +42 -0
  431. data/spec/unit/util/wmi_spec.rb +19 -0
  432. data/spec/unit/util/xendomains_spec.rb +21 -0
  433. data/spec/unit/version_spec.rb +42 -0
  434. data/spec/unit/virtual_spec.rb +519 -0
  435. data/spec/unit/zfs_version_spec.rb +75 -0
  436. data/spec/unit/zonename_spec.rb +14 -0
  437. data/spec/unit/zones_spec.rb +55 -0
  438. data/spec/unit/zpool_version_spec.rb +75 -0
  439. data/spec/watchr.rb +125 -0
  440. metadata +815 -0
@@ -0,0 +1,99 @@
1
+ # mamufacturer.rb
2
+ # Support methods for manufacturer specific facts
3
+
4
+ require 'facter/util/posix'
5
+
6
+ module Facter::Manufacturer
7
+ def self.get_dmi_table()
8
+ case Facter.value(:kernel)
9
+ when 'Linux', 'GNU/kFreeBSD'
10
+ cmd = '/usr/sbin/dmidecode'
11
+ when 'FreeBSD'
12
+ cmd = '/usr/local/sbin/dmidecode'
13
+ when 'NetBSD', 'DragonFly'
14
+ cmd = '/usr/pkg/sbin/dmidecode'
15
+ when 'SunOS'
16
+ cmd = '/usr/sbin/smbios'
17
+ end
18
+
19
+ if cmd and (output = Facter::Core::Execution.exec("#{cmd} 2>/dev/null"))
20
+
21
+ if output.respond_to?(:force_encoding)
22
+ output.force_encoding(Encoding::ASCII_8BIT)
23
+ end
24
+
25
+ return output
26
+ end
27
+ end
28
+
29
+ def self.dmi_find_system_info(name)
30
+ splitstr= Facter.value(:kernel) == 'SunOS' ? "ID SIZE TYPE" : /^Handle/
31
+ output = self.get_dmi_table()
32
+ return if output.nil?
33
+ name.each_pair do |key,v|
34
+ v.each do |v2|
35
+ v2.each_pair do |value,facterkey|
36
+ output.split(splitstr).each do |line|
37
+ if line =~ /#{key}/ and line =~ /\n\s+#{value} (.+)\n/
38
+ result = $1.strip
39
+ Facter.add(facterkey) do
40
+ confine :kernel => [ :linux, :freebsd, :netbsd, :sunos, :"gnu/kfreebsd", :dragonfly ]
41
+ setcode do
42
+ result
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ def self.sysctl_find_system_info(name)
53
+ name.each do |sysctlkey,facterkey|
54
+ Facter.add(facterkey) do
55
+ confine :kernel => [:openbsd, :darwin]
56
+ setcode { Facter::Util::POSIX.sysctl(sysctlkey) }
57
+ end
58
+ end
59
+ end
60
+
61
+ def self.prtdiag_sparc_find_system_info()
62
+ # Parses prtdiag for a SPARC architecture string, won't work with Solaris x86
63
+ output = Facter::Core::Execution.exec('/usr/sbin/prtdiag 2>/dev/null')
64
+
65
+ # System Configuration: Sun Microsystems sun4u Sun SPARC Enterprise M3000 Server
66
+ if output and output =~ /^System Configuration:\s+(.+?)\s+(sun\d+\S+)\s+(.+)/
67
+ Facter.add('manufacturer') do
68
+ setcode do
69
+ $1
70
+ end
71
+ end
72
+ Facter.add('productname') do
73
+ setcode do
74
+ $3
75
+ end
76
+ end
77
+ end
78
+
79
+ Facter.add('serialnumber') do
80
+ setcode "/usr/sbin/sneep"
81
+ end
82
+ end
83
+
84
+ def self.win32_find_system_info(name)
85
+ require 'facter/util/wmi'
86
+ value = ""
87
+ wmi = Facter::Util::WMI.connect()
88
+ name.each do |facterkey, win32key|
89
+ query = wmi.ExecQuery("select * from Win32_#{win32key.last}")
90
+ Facter.add(facterkey) do
91
+ confine :kernel => :windows
92
+ setcode do
93
+ query.each { |x| value = x.__send__( (win32key.first).to_sym) }
94
+ value
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,228 @@
1
+ ## memory.rb
2
+ ## Support module for memory related facts
3
+ ##
4
+
5
+ require 'facter/util/posix'
6
+
7
+ module Facter::Memory
8
+ def self.meminfo_number(tag)
9
+ memsize = ""
10
+ size = [0]
11
+ File.readlines("/proc/meminfo").each do |l|
12
+ size = $1.to_f if l =~ /^#{tag}:\s+(\d+)\s+\S+/
13
+ if tag == "MemFree" &&
14
+ l =~ /^(?:Buffers|Cached):\s+(\d+)\s+\S+/
15
+ size += $1.to_f
16
+ end
17
+ end
18
+ size / 1024.0
19
+ end
20
+
21
+ def self.scale_number(size, multiplier)
22
+ suffixes = ['', 'kB', 'MB', 'GB', 'TB']
23
+
24
+ s = suffixes.shift
25
+ while s != multiplier
26
+ s = suffixes.shift
27
+ end
28
+
29
+ while size > 1024.0
30
+ size /= 1024.0
31
+ s = suffixes.shift
32
+ end
33
+
34
+ "%.2f %s" % [size, s]
35
+ end
36
+
37
+ def self.vmstat_find_free_memory(args = [])
38
+ cmd = 'vmstat'
39
+ cmd += (' ' + args.join(' ')) unless args.empty?
40
+ row = Facter::Core::Execution.exec(cmd).split("\n")[-1]
41
+ if row =~ /^\s*\d+\s*\d+\s*\d+\s*\d+\s*(\d+)/
42
+ memfree = $1
43
+ end
44
+ end
45
+
46
+ # Darwin had to be different. It's generally opaque with how much RAM it is
47
+ # using, and this figure could be improved upon too I fear.
48
+ # Parses the output of "vm_stat", takes the pages free & pages speculative
49
+ # and multiples that by the page size (also given in output). Ties in with
50
+ # what activity monitor outputs for free memory.
51
+ def self.vmstat_darwin_find_free_memory()
52
+
53
+ memfree = 0
54
+ pagesize = 0
55
+ memspecfree = 0
56
+
57
+ vmstats = Facter::Core::Execution.exec('vm_stat')
58
+ vmstats.each_line do |vmline|
59
+ case
60
+ when vmline =~ /page\ssize\sof\s(\d+)\sbytes/
61
+ pagesize = $1.to_i
62
+ when vmline =~ /^Pages\sfree:\s+(\d+)\./
63
+ memfree = $1.to_i
64
+ when vmline =~ /^Pages\sspeculative:\s+(\d+)\./
65
+ memspecfree = $1.to_i
66
+ end
67
+ end
68
+
69
+ freemem = ( memfree + memspecfree ) * pagesize
70
+ end
71
+
72
+ # on AIX use svmon to get the free memory:
73
+ # it's the third value on the line starting with memory
74
+ # svmon can be run by non root users
75
+ def self.svmon_aix_find_free_memory()
76
+ Facter::Core::Execution.exec("/usr/bin/svmon -O unit=KB") =~ /^memory\s+\d+\s+\d+\s+(\d+)\s+/
77
+ $1
78
+ end
79
+
80
+ def self.mem_free(kernel = Facter.value(:kernel))
81
+ output = mem_free_info(kernel)
82
+ scale_mem_free_value output, kernel
83
+ end
84
+
85
+ def self.mem_free_info(kernel = Facter.value(:kernel))
86
+ case kernel
87
+ when /OpenBSD/i, /SunOS/i, /Dragonfly/i
88
+ vmstat_find_free_memory()
89
+ when /FreeBSD/i
90
+ vmstat_find_free_memory(["-H"])
91
+ when /Darwin/i
92
+ vmstat_darwin_find_free_memory()
93
+ when /AIX/i
94
+ svmon_aix_find_free_memory()
95
+ end
96
+ end
97
+
98
+ def self.scale_mem_free_value (value, kernel)
99
+ case kernel
100
+ when /OpenBSD/i, /FreeBSD/i, /SunOS/i, /Dragonfly/i, /AIX/i
101
+ value.to_f / 1024.0
102
+ when /Darwin/i
103
+ value.to_f / 1024.0 / 1024.0
104
+ else
105
+ value.to_f
106
+ end
107
+ end
108
+
109
+ def self.mem_size(kernel = Facter.value(:kernel))
110
+ output = mem_size_info(kernel)
111
+ scale_mem_size_value output, kernel
112
+ end
113
+
114
+ def self.mem_size_info(kernel = Facter.value(:kernel))
115
+ case kernel
116
+ when /Dragonfly/i, /FreeBSD/i, /OpenBSD/i
117
+ Facter::Util::POSIX.sysctl("hw.physmem")
118
+ when /Darwin/i
119
+ Facter::Util::POSIX.sysctl("hw.memsize")
120
+ when /AIX/i
121
+ if Facter::Core::Execution.exec("/usr/bin/svmon -O unit=KB") =~ /^memory\s+(\d+)\s+/
122
+ $1
123
+ end
124
+ end
125
+ end
126
+
127
+ def self.scale_mem_size_value(value, kernel)
128
+ case kernel
129
+ when /OpenBSD/i, /FreeBSD/i, /Darwin/i, /Dragonfly/i
130
+ value.to_f / 1024.0 / 1024.0
131
+ when /AIX/i
132
+ value.to_f / 1024.0
133
+ else
134
+ value.to_f
135
+ end
136
+ end
137
+
138
+ def self.swap_size(kernel = Facter.value(:kernel))
139
+ output = swap_info(kernel)
140
+ parse_swap output, kernel, :size if output
141
+ end
142
+
143
+ def self.swap_free(kernel = Facter.value(:kernel))
144
+ output = swap_info(kernel)
145
+ parse_swap output, kernel, :free if output
146
+ end
147
+
148
+ def self.swap_info(kernel = Facter.value(:kernel))
149
+ case kernel
150
+ when /AIX/i
151
+ (Facter.value(:id) == "root") ? Facter::Core::Execution.exec('swap -l 2>/dev/null') : nil
152
+ when /OpenBSD/i
153
+ Facter::Core::Execution.exec('swapctl -s')
154
+ when /FreeBSD/i
155
+ Facter::Core::Execution.exec('swapinfo -k')
156
+ when /Darwin/i
157
+ Facter::Util::POSIX.sysctl('vm.swapusage')
158
+ when /SunOS/i
159
+ Facter::Core::Execution.exec('/usr/sbin/swap -l 2>/dev/null')
160
+ end
161
+ end
162
+
163
+ def self.parse_swap (output, kernel = Facter.value(:kernel), size_or_free = :size)
164
+ value_in_mb = 0.0
165
+ value = 0
166
+ is_size = size_or_free == :size
167
+ unless output.nil?
168
+ output.each_line do |line|
169
+ value += parse_swap_line(line, kernel, is_size)
170
+ end
171
+ end
172
+ value_in_mb = scale_swap_value(value, kernel)
173
+ end
174
+
175
+ # There is a lot of duplication here because of concern over being able to add
176
+ # new platforms in a reasonable manner. For all of these platforms the first
177
+ # regex corresponds to the swap size value and the second corresponds to the swap
178
+ # free value, but this may not always be the case. In Ruby 1.9.3 it is possible
179
+ # to give these names, but sadly 1.8.7 does not support this.
180
+
181
+ def self.parse_swap_line(line, kernel, is_size)
182
+ case kernel
183
+ when /AIX/i
184
+ if line =~ /^\/\S+\s.*\s+(\S+)MB\s+(\S+)MB/
185
+ (is_size) ? $1.to_i : $2.to_i
186
+ else
187
+ 0
188
+ end
189
+ when /OpenBSD/i
190
+ if line =~ /^total: (\d+) (\d+)-blocks allocated, (\d+) used, (\d+) available$/
191
+ (is_size) ? ($1.to_i * $2.to_i) : ($4.to_i * $2.to_i)
192
+ else
193
+ 0
194
+ end
195
+ when /FreeBSD/i
196
+ if line =~ /\S+\s+(\d+)\s+\d+\s+(\d+)\s+\d+%$/
197
+ (is_size) ? $1.to_i : $2.to_i
198
+ else
199
+ 0
200
+ end
201
+ when /Darwin/i
202
+ if line =~ /total\s=\s(\S+)M\s+used\s=\s\S+M\s+free\s=\s(\S+)M\s/
203
+ (is_size) ? $1.to_i : $2.to_i
204
+ else
205
+ 0
206
+ end
207
+ when /SunOS/i
208
+ if line =~ /^\S+\s.*\s+(\d+)\s+(\d+)$/
209
+ (is_size) ? $1.to_i : $2.to_i
210
+ else
211
+ 0
212
+ end
213
+ end
214
+ end
215
+
216
+ def self.scale_swap_value(value, kernel)
217
+ case kernel
218
+ when /FreeBSD/i
219
+ value.to_f / 1024.0
220
+ when /OpenBSD/i
221
+ value.to_f / 1024.0 / 1024.0
222
+ when /SunOS/i
223
+ value.to_f / 2 / 1024.0
224
+ else
225
+ value.to_f
226
+ end
227
+ end
228
+ end
@@ -0,0 +1,40 @@
1
+ module Facter::NetMask
2
+ def self.get_netmask
3
+ netmask = nil;
4
+ ipregex = %r{(\d{1,3}\.){3}\d{1,3}}
5
+
6
+ ops = nil
7
+ case Facter.value(:kernel)
8
+ when 'Linux'
9
+ ops = {
10
+ :ifconfig_opts => ['2>/dev/null'],
11
+ :regex => %r{#{Facter.value(:ipaddress)}.*?(?:Mask:|netmask)\s*(#{ipregex})}x,
12
+ :munge => nil,
13
+ }
14
+ when 'SunOS'
15
+ ops = {
16
+ :ifconfig_opts => ['-a'],
17
+ :regex => %r{\s+ inet \s #{Facter.value(:ipaddress)} \s netmask \s (\w{8})}x,
18
+ :munge => Proc.new { |mask| mask.scan(/../).collect do |byte| byte.to_i(16) end.join('.') }
19
+ }
20
+ when 'FreeBSD','NetBSD','OpenBSD', 'Darwin', 'GNU/kFreeBSD', 'DragonFly', 'AIX'
21
+ ops = {
22
+ :ifconfig_opts => ['-a'],
23
+ :regex => %r{\s+ inet \s #{Facter.value(:ipaddress)} \s netmask \s 0x(\w{8})}x,
24
+ :munge => Proc.new { |mask| mask.scan(/../).collect do |byte| byte.to_i(16) end.join('.') }
25
+ }
26
+ end
27
+
28
+ String(Facter::Util::IP.exec_ifconfig(ops[:ifconfig_opts])).split(/\n/).collect do |line|
29
+ matches = line.match(ops[:regex])
30
+ if !matches.nil?
31
+ if ops[:munge].nil?
32
+ netmask = matches[1]
33
+ else
34
+ netmask = ops[:munge].call(matches[1])
35
+ end
36
+ end
37
+ end
38
+ netmask
39
+ end
40
+ end
@@ -0,0 +1,94 @@
1
+ module Facter
2
+ module Util
3
+ module Normalization
4
+ class NormalizationError < StandardError; end
5
+
6
+ VALID_TYPES = [Integer, Float, TrueClass, FalseClass, NilClass, String, Array, Hash]
7
+
8
+ module_function
9
+
10
+ # Recursively normalize the given data structure
11
+ #
12
+ # @api public
13
+ # @raise [NormalizationError] If the data structure contained an invalid element.
14
+ # @return [void]
15
+ def normalize(value)
16
+ case value
17
+ when Integer, Float, TrueClass, FalseClass, NilClass
18
+ value
19
+ when String
20
+ normalize_string(value)
21
+ when Array
22
+ normalize_array(value)
23
+ when Hash
24
+ normalize_hash(value)
25
+ else
26
+ raise NormalizationError, "Expected #{value} to be one of #{VALID_TYPES.inspect}, but was #{value.class}"
27
+ end
28
+ end
29
+
30
+ # @!method normalize_string(value)
31
+ #
32
+ # Attempt to normalize and validate the given string.
33
+ #
34
+ # On Ruby 1.8 the string is checked by stripping out all non UTF-8
35
+ # characters and comparing the converted string to the original. If they
36
+ # do not match then the string is considered invalid.
37
+ #
38
+ # On Ruby 1.9+, the string is validate by checking that the string encoding
39
+ # is UTF-8 and that the string content matches the encoding. If the string
40
+ # is not an expected encoding then it is converted to UTF-8.
41
+ #
42
+ # @api public
43
+ # @raise [NormalizationError] If the string used an unsupported encoding or did not match its encoding
44
+ # @param value [String]
45
+ # @return [void]
46
+
47
+ if RUBY_VERSION =~ /^1\.8/
48
+ require 'iconv'
49
+
50
+ def normalize_string(value)
51
+ converted = Iconv.conv('UTF-8//IGNORE', 'UTF-8', value)
52
+ if converted != value
53
+ raise NormalizationError, "String #{value.inspect} is not valid UTF-8"
54
+ end
55
+ value
56
+ end
57
+ else
58
+ def normalize_string(value)
59
+ value = value.encode(Encoding::UTF_8)
60
+
61
+ unless value.valid_encoding?
62
+ raise NormalizationError, "String #{value.inspect} doesn't match the reported encoding #{value.encoding}"
63
+ end
64
+
65
+ value
66
+ rescue EncodingError
67
+ raise NormalizationError, "String encoding #{value.encoding} is not UTF-8 and could not be converted to UTF-8"
68
+ end
69
+ end
70
+
71
+ # Validate all elements of the array.
72
+ #
73
+ # @api public
74
+ # @raise [NormalizationError] If one of the elements failed validation
75
+ # @param value [Array]
76
+ # @return [void]
77
+ def normalize_array(value)
78
+ value.collect do |elem|
79
+ normalize(elem)
80
+ end
81
+ end
82
+
83
+ # Validate all keys and values of the hash.
84
+ #
85
+ # @api public
86
+ # @raise [NormalizationError] If one of the keys or values failed normalization
87
+ # @param value [Hash]
88
+ # @return [void]
89
+ def normalize_hash(value)
90
+ Hash[value.collect { |k, v| [ normalize(k), normalize(v) ] } ]
91
+ end
92
+ end
93
+ end
94
+ end