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,12 @@
1
+ module Facter
2
+ module Util
3
+
4
+ # An external fact loader that doesn't load anything
5
+ # This makes it possible to disable loading
6
+ # of external facts
7
+ class NothingLoader
8
+ def load(collection)
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,21 @@
1
+ module Facter
2
+ module Util
3
+ module Operatingsystem
4
+
5
+ # @see http://www.freedesktop.org/software/systemd/man/os-release.html
6
+ def self.os_release(file = '/etc/os-release')
7
+ values = {}
8
+
9
+ if File.readable?(file)
10
+ File.readlines(file).each do |line|
11
+ if (match = line.match(/^(\w+)=["']?(.+?)["']?$/))
12
+ values[match[1]] = match[2]
13
+ end
14
+ end
15
+ end
16
+
17
+ values
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,158 @@
1
+ # This class acts as the factory and parent class for parsed
2
+ # facts such as scripts, text, json and yaml files.
3
+ #
4
+ # Parsers must subclass this class and provide their own #results method.
5
+ require 'facter'
6
+ require 'yaml'
7
+
8
+ module Facter::Util::Parser
9
+ @parsers = []
10
+
11
+ # For support mutliple extensions you can pass an array of extensions as
12
+ # +ext+.
13
+ def self.extension_matches?(filename, ext)
14
+ extension = case ext
15
+ when String
16
+ ext.downcase
17
+ when Enumerable
18
+ ext.collect {|x| x.downcase }
19
+ end
20
+ [extension].flatten.to_a.include?(file_extension(filename).downcase)
21
+ end
22
+
23
+ def self.file_extension(filename)
24
+ File.extname(filename).sub(".", '')
25
+ end
26
+
27
+ def self.register(klass, &suitable)
28
+ @parsers << [klass, suitable]
29
+ end
30
+
31
+ def self.parser_for(filename)
32
+ registration = @parsers.detect { |k| k[1].call(filename) }
33
+
34
+ if registration.nil?
35
+ NothingParser.new
36
+ else
37
+ registration[0].new(filename)
38
+ end
39
+ end
40
+
41
+ class Base
42
+ attr_reader :filename
43
+
44
+ def initialize(filename, content = nil)
45
+ @filename = filename
46
+ @content = content
47
+ end
48
+
49
+ def content
50
+ @content ||= File.read(filename)
51
+ end
52
+
53
+ # results on the base class is really meant to be just an exception handler
54
+ # wrapper.
55
+ def results
56
+ parse_results
57
+ rescue Exception => detail
58
+ Facter.log_exception(detail, "Failed to handle #{filename} as #{self.class} facts: #{detail.message}")
59
+ nil
60
+ end
61
+
62
+ def parse_results
63
+ raise ArgumentError, "Subclasses must respond to parse_results"
64
+ end
65
+ end
66
+
67
+ module KeyValuePairOutputFormat
68
+ def self.parse(output)
69
+ return {} if output.nil?
70
+
71
+ result = {}
72
+ re = /^(.+?)=(.+)$/
73
+ output.each_line do |line|
74
+ if match_data = re.match(line.chomp)
75
+ result[match_data[1]] = match_data[2]
76
+ end
77
+ end
78
+ result
79
+ end
80
+ end
81
+
82
+ class YamlParser < Base
83
+ def parse_results
84
+ YAML.load(content)
85
+ end
86
+ end
87
+
88
+ register(YamlParser) do |filename|
89
+ extension_matches?(filename, "yaml")
90
+ end
91
+
92
+ class TextParser < Base
93
+ def parse_results
94
+ KeyValuePairOutputFormat.parse content
95
+ end
96
+ end
97
+
98
+ register(TextParser) do |filename|
99
+ extension_matches?(filename, "txt")
100
+ end
101
+
102
+ class JsonParser < Base
103
+ def parse_results
104
+ if Facter.json?
105
+ JSON.load(content)
106
+ else
107
+ Facter.warnonce "Cannot parse JSON data file #{filename} without the json library."
108
+ Facter.warnonce "Suggested next step is `gem install json` to install the json library."
109
+ nil
110
+ end
111
+ end
112
+ end
113
+
114
+ register(JsonParser) do |filename|
115
+ extension_matches?(filename, "json")
116
+ end
117
+
118
+ class ScriptParser < Base
119
+ def parse_results
120
+ KeyValuePairOutputFormat.parse Facter::Core::Execution.exec(quote(filename))
121
+ end
122
+
123
+ private
124
+
125
+ def quote(filename)
126
+ filename.index(' ') ? "\"#{filename}\"" : filename
127
+ end
128
+ end
129
+
130
+ register(ScriptParser) do |filename|
131
+ if Facter::Util::Config.is_windows?
132
+ extension_matches?(filename, %w{bat cmd com exe}) && File.file?(filename)
133
+ else
134
+ File.executable?(filename) && File.file?(filename) && ! extension_matches?(filename, %w{bat cmd com exe})
135
+ end
136
+ end
137
+
138
+ # Executes and parses the key value output of Powershell scripts
139
+ class PowershellParser < Base
140
+ # Returns a hash of facts from powershell output
141
+ def parse_results
142
+ shell_command = "powershell -NoProfile -NonInteractive -NoLogo -ExecutionPolicy Bypass -File \"#{filename}\""
143
+ KeyValuePairOutputFormat.parse Facter::Core::Execution.exec(shell_command)
144
+ end
145
+ end
146
+
147
+ register(PowershellParser) do |filename|
148
+ Facter::Util::Config.is_windows? && extension_matches?(filename, "ps1") && File.file?(filename)
149
+ end
150
+
151
+ # A parser that is used when there is no other parser that can handle the file
152
+ # The return from results indicates to the caller the file was not parsed correctly.
153
+ class NothingParser
154
+ def results
155
+ nil
156
+ end
157
+ end
158
+ end
@@ -0,0 +1,41 @@
1
+ require 'facter/util/partitions/linux'
2
+
3
+ module Facter::Util::Partitions
4
+ IMPLEMENTATIONS = {
5
+ 'Linux' => Linux
6
+ }
7
+
8
+ module NoImplementation
9
+ def self.list
10
+ []
11
+ end
12
+ end
13
+
14
+ def self.implementation
15
+ IMPLEMENTATIONS[Facter.fact(:kernel).value] || NoImplementation
16
+ end
17
+
18
+ def self.list
19
+ implementation.list
20
+ end
21
+
22
+ def self.uuid(partition)
23
+ implementation.uuid(partition)
24
+ end
25
+
26
+ def self.size(partition)
27
+ implementation.size(partition)
28
+ end
29
+
30
+ def self.mount(partition)
31
+ implementation.mount(partition)
32
+ end
33
+
34
+ def self.filesystem(partition)
35
+ implementation.filesystem(partition)
36
+ end
37
+
38
+ def self.available?
39
+ !self.list.empty?
40
+ end
41
+ end
@@ -0,0 +1,65 @@
1
+ module Facter::Util::Partitions
2
+ module Linux
3
+ # Only Linux 2.6+ kernels support sysfs which is required to easily get device details
4
+ SYSFS_BLOCK_DIRECTORY = '/sys/block/'
5
+ DEVDISK_BY_UUID_DIRECTORY = '/dev/disk/by-uuid/'
6
+
7
+ def self.list
8
+ if File.exist?(SYSFS_BLOCK_DIRECTORY)
9
+ devices = Dir.entries(SYSFS_BLOCK_DIRECTORY).select { |d| File.exist?( SYSFS_BLOCK_DIRECTORY + d + "/device" ) }
10
+
11
+ if devices.empty?
12
+ []
13
+ else
14
+ devices.collect do |device|
15
+ Dir.glob( SYSFS_BLOCK_DIRECTORY + device + "/#{device}*" ).collect do |d|
16
+ File.basename(d)
17
+ end
18
+ end.flatten
19
+ end
20
+ else
21
+ []
22
+ end
23
+ end
24
+
25
+ def self.uuid(partition)
26
+ uuid = nil
27
+ if File.exist?(DEVDISK_BY_UUID_DIRECTORY)
28
+ Dir.entries(DEVDISK_BY_UUID_DIRECTORY).each do |file|
29
+ qualified_file = File.join(DEVDISK_BY_UUID_DIRECTORY, file)
30
+
31
+ #A uuid is 16 octets long (RFC4122) which is 32hex chars + 4 '-'s
32
+ next unless file.length == 36
33
+ next unless File.symlink?(qualified_file)
34
+ next unless File.readlink(qualified_file).match(%r[(?:\.\./\.\./|/dev/)#{partition}$])
35
+
36
+ uuid = file
37
+ end
38
+ end
39
+ uuid
40
+ end
41
+
42
+ def self.size(partition)
43
+ read_size(partition)
44
+ end
45
+
46
+ def self.mount(partition)
47
+ if Facter::Core::Execution.which('mount')
48
+ Facter::Core::Execution.exec('mount').scan(/\/dev\/#{partition}\son\s(\S+)/).flatten.first
49
+ end
50
+ end
51
+
52
+ def self.filesystem(partition)
53
+ if Facter::Core::Execution.which('blkid')
54
+ Facter::Core::Execution.exec("blkid #{File.join('/dev', partition)}").scan(/TYPE="(.+)"/).flatten.first
55
+ end
56
+ end
57
+
58
+ private
59
+ def self.read_size(partition)
60
+ if device = partition.match(/(\D+)/)[1] and File.readable?(File.join(SYSFS_BLOCK_DIRECTORY, device, partition, 'size'))
61
+ File.read(File.join(SYSFS_BLOCK_DIRECTORY, device, partition, 'size')).chomp
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,24 @@
1
+ #--
2
+ ##############################################################
3
+ # Copyright 2006, Ben Bleything <ben@bleything.net> and #
4
+ # Patrick May <patrick@hexane.org> #
5
+ # #
6
+ # Distributed under the MIT license. #
7
+ ##############################################################
8
+ #++
9
+ # = Plist
10
+ #
11
+ # This is the main file for plist. Everything interesting happens in Plist and Plist::Emit.
12
+
13
+ require 'base64'
14
+ require 'cgi'
15
+ require 'stringio'
16
+
17
+ require 'facter/util/plist/generator'
18
+ require 'facter/util/plist/parser'
19
+
20
+ module Plist
21
+ VERSION = '3.0.0'
22
+ end
23
+
24
+ # $Id: plist.rb 1781 2006-10-16 01:01:35Z luke $
@@ -0,0 +1,228 @@
1
+ #--###########################################################
2
+ # Copyright 2006, Ben Bleything <ben@bleything.net> and #
3
+ # Patrick May <patrick@hexane.org> #
4
+ # #
5
+ # Distributed under the MIT license. #
6
+ ##############################################################
7
+ #++
8
+ # See Plist::Emit.
9
+ module Plist
10
+ # === Create a plist
11
+ # You can dump an object to a plist in one of two ways:
12
+ #
13
+ # * <tt>Plist::Emit.dump(obj)</tt>
14
+ # * <tt>obj.to_plist</tt>
15
+ # * This requires that you mixin the <tt>Plist::Emit</tt> module, which is already done for +Array+ and +Hash+.
16
+ #
17
+ # The following Ruby classes are converted into native plist types:
18
+ # Array, Bignum, Date, DateTime, Fixnum, Float, Hash, Integer, String, Symbol, Time, true, false
19
+ # * +Array+ and +Hash+ are both recursive; their elements will be converted into plist nodes inside the <array> and <dict> containers (respectively).
20
+ # * +IO+ (and its descendants) and +StringIO+ objects are read from and their contents placed in a <data> element.
21
+ # * User classes may implement +to_plist_node+ to dictate how they should be serialized; otherwise the object will be passed to <tt>Marshal.dump</tt> and the result placed in a <data> element.
22
+ #
23
+ # For detailed usage instructions, refer to USAGE[link:files/docs/USAGE.html] and the methods documented below.
24
+ module Emit
25
+ # Helper method for injecting into classes. Calls <tt>Plist::Emit.dump</tt> with +self+.
26
+ def to_plist(envelope = true)
27
+ return Plist::Emit.dump(self, envelope)
28
+ end
29
+
30
+ # Helper method for injecting into classes. Calls <tt>Plist::Emit.save_plist</tt> with +self+.
31
+ def save_plist(filename)
32
+ Plist::Emit.save_plist(self, filename)
33
+ end
34
+
35
+ # The following Ruby classes are converted into native plist types:
36
+ # Array, Bignum, Date, DateTime, Fixnum, Float, Hash, Integer, String, Symbol, Time
37
+ #
38
+ # Write us (via RubyForge) if you think another class can be coerced safely into one of the expected plist classes.
39
+ #
40
+ # +IO+ and +StringIO+ objects are encoded and placed in <data> elements; other objects are <tt>Marshal.dump</tt>'ed unless they implement +to_plist_node+.
41
+ #
42
+ # The +envelope+ parameters dictates whether or not the resultant plist fragment is wrapped in the normal XML/plist header and footer. Set it to false if you only want the fragment.
43
+ def self.dump(obj, envelope = true)
44
+ output = plist_node(obj)
45
+
46
+ output = wrap(output) if envelope
47
+
48
+ return output
49
+ end
50
+
51
+ # Writes the serialized object's plist to the specified filename.
52
+ def self.save_plist(obj, filename)
53
+ File.open(filename, 'wb') do |f|
54
+ f.write(Plist::Emit.dump(obj))
55
+ end
56
+ end
57
+
58
+ private
59
+ def self.plist_node(element)
60
+ output = ''
61
+
62
+ if element.respond_to? :to_plist_node
63
+ output << element.to_plist_node
64
+ else
65
+ case element
66
+ when Array
67
+ if element.empty?
68
+ output << "<array/>\n"
69
+ else
70
+ output << tag('array') {
71
+ element.collect {|e| plist_node(e)}
72
+ }
73
+ end
74
+ when Hash
75
+ if element.empty?
76
+ output << "<dict/>\n"
77
+ else
78
+ inner_tags = []
79
+
80
+ element.keys.sort.each do |k|
81
+ v = element[k]
82
+ inner_tags << tag('key', CGI::escapeHTML(k.to_s))
83
+ inner_tags << plist_node(v)
84
+ end
85
+
86
+ output << tag('dict') {
87
+ inner_tags
88
+ }
89
+ end
90
+ when true, false
91
+ output << "<#{element}/>\n"
92
+ when Time
93
+ output << tag('date', element.utc.strftime('%Y-%m-%dT%H:%M:%SZ'))
94
+ when Date # also catches DateTime
95
+ output << tag('date', element.strftime('%Y-%m-%dT%H:%M:%SZ'))
96
+ when String, Symbol, Fixnum, Bignum, Integer, Float
97
+ output << tag(element_type(element), CGI::escapeHTML(element.to_s))
98
+ when IO, StringIO
99
+ element.rewind
100
+ contents = element.read
101
+ # note that apple plists are wrapped at a different length then
102
+ # what ruby's base64 wraps by default.
103
+ # I used #encode64 instead of #b64encode (which allows a length arg)
104
+ # because b64encode is b0rked and ignores the length arg.
105
+ data = "\n"
106
+ Base64::encode64(contents).gsub(/\s+/, '').scan(/.{1,68}/o) { data << $& << "\n" }
107
+ output << tag('data', data)
108
+ else
109
+ output << comment( 'The <data> element below contains a Ruby object which has been serialized with Marshal.dump.' )
110
+ data = "\n"
111
+ Base64::encode64(Marshal.dump(element)).gsub(/\s+/, '').scan(/.{1,68}/o) { data << $& << "\n" }
112
+ output << tag('data', data )
113
+ end
114
+ end
115
+
116
+ return output
117
+ end
118
+
119
+ def self.comment(content)
120
+ return "<!-- #{content} -->\n"
121
+ end
122
+
123
+ def self.tag(type, contents = '', &block)
124
+ out = nil
125
+
126
+ if block_given?
127
+ out = IndentedString.new
128
+ out << "<#{type}>"
129
+ out.raise_indent
130
+
131
+ out << block.call
132
+
133
+ out.lower_indent
134
+ out << "</#{type}>"
135
+ else
136
+ out = "<#{type}>#{contents.to_s}</#{type}>\n"
137
+ end
138
+
139
+ return out.to_s
140
+ end
141
+
142
+ def self.wrap(contents)
143
+ output = ''
144
+
145
+ output << '<?xml version="1.0" encoding="UTF-8"?>' + "\n"
146
+ output << '<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">' + "\n"
147
+ output << '<plist version="1.0">' + "\n"
148
+
149
+ output << contents
150
+
151
+ output << '</plist>' + "\n"
152
+
153
+ return output
154
+ end
155
+
156
+ def self.element_type(item)
157
+ return case item
158
+ when String, Symbol; 'string'
159
+ when Fixnum, Bignum, Integer; 'integer'
160
+ when Float; 'real'
161
+ else
162
+ raise "Don't know about this data type... something must be wrong!"
163
+ end
164
+ end
165
+
166
+ private
167
+
168
+ class IndentedString #:nodoc:
169
+ attr_accessor :indent_string
170
+
171
+ @@indent_level = 0
172
+
173
+ def initialize(str = "\t")
174
+ @indent_string = str
175
+ @contents = ''
176
+ end
177
+
178
+ def to_s
179
+ return @contents
180
+ end
181
+
182
+ def raise_indent
183
+ @@indent_level += 1
184
+ end
185
+
186
+ def lower_indent
187
+ @@indent_level -= 1 if @@indent_level > 0
188
+ end
189
+
190
+ def <<(val)
191
+ if val.is_a? Array
192
+ val.each do |f|
193
+ self << f
194
+ end
195
+ else
196
+ # if it's already indented, don't bother indenting further
197
+ unless val =~ /\A#{@indent_string}/
198
+ indent = @indent_string * @@indent_level
199
+
200
+ @contents << val.gsub(/^/, indent)
201
+ else
202
+ @contents << val
203
+ end
204
+
205
+ # it already has a newline, don't add another
206
+ @contents << "\n" unless val =~ /\n$/
207
+ end
208
+ end
209
+ end
210
+ end
211
+ end
212
+
213
+ # we need to add this so sorting hash keys works properly
214
+ class Symbol #:nodoc:
215
+ def <=> (other)
216
+ self.to_s <=> other.to_s
217
+ end
218
+ end
219
+
220
+ class Array #:nodoc:
221
+ include Plist::Emit
222
+ end
223
+
224
+ class Hash #:nodoc:
225
+ include Plist::Emit
226
+ end
227
+
228
+ # $Id: generator.rb 1781 2006-10-16 01:01:35Z luke $