nokogiri 1.0.0 → 1.6.8.1

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

Potentially problematic release.


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

Files changed (309) hide show
  1. checksums.yaml +7 -0
  2. data/.autotest +26 -0
  3. data/.cross_rubies +9 -0
  4. data/.editorconfig +17 -0
  5. data/.gemtest +0 -0
  6. data/.travis.yml +51 -0
  7. data/CHANGELOG.rdoc +1160 -0
  8. data/CONTRIBUTING.md +42 -0
  9. data/C_CODING_STYLE.rdoc +33 -0
  10. data/Gemfile +22 -0
  11. data/LICENSE.txt +31 -0
  12. data/Manifest.txt +284 -40
  13. data/README.md +166 -0
  14. data/ROADMAP.md +111 -0
  15. data/Rakefile +310 -199
  16. data/STANDARD_RESPONSES.md +47 -0
  17. data/Y_U_NO_GEMSPEC.md +155 -0
  18. data/appveyor.yml +22 -0
  19. data/bin/nokogiri +118 -0
  20. data/build_all +45 -0
  21. data/dependencies.yml +29 -0
  22. data/ext/nokogiri/depend +358 -0
  23. data/ext/nokogiri/extconf.rb +664 -34
  24. data/ext/nokogiri/html_document.c +120 -33
  25. data/ext/nokogiri/html_document.h +1 -1
  26. data/ext/nokogiri/html_element_description.c +279 -0
  27. data/ext/nokogiri/html_element_description.h +10 -0
  28. data/ext/nokogiri/html_entity_lookup.c +32 -0
  29. data/ext/nokogiri/html_entity_lookup.h +8 -0
  30. data/ext/nokogiri/html_sax_parser_context.c +116 -0
  31. data/ext/nokogiri/html_sax_parser_context.h +11 -0
  32. data/ext/nokogiri/html_sax_push_parser.c +87 -0
  33. data/ext/nokogiri/html_sax_push_parser.h +9 -0
  34. data/ext/nokogiri/nokogiri.c +145 -0
  35. data/ext/nokogiri/nokogiri.h +131 -0
  36. data/ext/nokogiri/xml_attr.c +94 -0
  37. data/ext/nokogiri/xml_attr.h +9 -0
  38. data/ext/nokogiri/xml_attribute_decl.c +70 -0
  39. data/ext/nokogiri/xml_attribute_decl.h +9 -0
  40. data/ext/nokogiri/xml_cdata.c +23 -19
  41. data/ext/nokogiri/xml_cdata.h +1 -1
  42. data/ext/nokogiri/xml_comment.c +69 -0
  43. data/ext/nokogiri/xml_comment.h +9 -0
  44. data/ext/nokogiri/xml_document.c +501 -54
  45. data/ext/nokogiri/xml_document.h +14 -1
  46. data/ext/nokogiri/xml_document_fragment.c +48 -0
  47. data/ext/nokogiri/xml_document_fragment.h +10 -0
  48. data/ext/nokogiri/xml_dtd.c +109 -24
  49. data/ext/nokogiri/xml_dtd.h +3 -1
  50. data/ext/nokogiri/xml_element_content.c +123 -0
  51. data/ext/nokogiri/xml_element_content.h +10 -0
  52. data/ext/nokogiri/xml_element_decl.c +69 -0
  53. data/ext/nokogiri/xml_element_decl.h +9 -0
  54. data/ext/nokogiri/xml_encoding_handler.c +79 -0
  55. data/ext/nokogiri/xml_encoding_handler.h +8 -0
  56. data/ext/nokogiri/xml_entity_decl.c +110 -0
  57. data/ext/nokogiri/xml_entity_decl.h +10 -0
  58. data/ext/nokogiri/xml_entity_reference.c +52 -0
  59. data/ext/nokogiri/xml_entity_reference.h +9 -0
  60. data/ext/nokogiri/xml_io.c +60 -0
  61. data/ext/nokogiri/xml_io.h +11 -0
  62. data/ext/nokogiri/xml_libxml2_hacks.c +112 -0
  63. data/ext/nokogiri/xml_libxml2_hacks.h +12 -0
  64. data/ext/nokogiri/xml_namespace.c +117 -0
  65. data/ext/nokogiri/xml_namespace.h +13 -0
  66. data/ext/nokogiri/xml_node.c +1285 -315
  67. data/ext/nokogiri/xml_node.h +4 -6
  68. data/ext/nokogiri/xml_node_set.c +415 -54
  69. data/ext/nokogiri/xml_node_set.h +6 -2
  70. data/ext/nokogiri/xml_processing_instruction.c +56 -0
  71. data/ext/nokogiri/xml_processing_instruction.h +9 -0
  72. data/ext/nokogiri/xml_reader.c +316 -77
  73. data/ext/nokogiri/xml_reader.h +1 -1
  74. data/ext/nokogiri/xml_relax_ng.c +161 -0
  75. data/ext/nokogiri/xml_relax_ng.h +9 -0
  76. data/ext/nokogiri/xml_sax_parser.c +215 -80
  77. data/ext/nokogiri/xml_sax_parser.h +30 -1
  78. data/ext/nokogiri/xml_sax_parser_context.c +262 -0
  79. data/ext/nokogiri/xml_sax_parser_context.h +10 -0
  80. data/ext/nokogiri/xml_sax_push_parser.c +115 -0
  81. data/ext/nokogiri/xml_sax_push_parser.h +9 -0
  82. data/ext/nokogiri/xml_schema.c +205 -0
  83. data/ext/nokogiri/xml_schema.h +9 -0
  84. data/ext/nokogiri/xml_syntax_error.c +45 -175
  85. data/ext/nokogiri/xml_syntax_error.h +4 -2
  86. data/ext/nokogiri/xml_text.c +37 -14
  87. data/ext/nokogiri/xml_text.h +1 -1
  88. data/ext/nokogiri/xml_xpath_context.c +230 -13
  89. data/ext/nokogiri/xml_xpath_context.h +2 -1
  90. data/ext/nokogiri/xslt_stylesheet.c +196 -34
  91. data/ext/nokogiri/xslt_stylesheet.h +6 -1
  92. data/lib/nokogiri/css/node.rb +18 -61
  93. data/lib/nokogiri/css/parser.rb +725 -17
  94. data/lib/nokogiri/css/parser.y +126 -63
  95. data/lib/nokogiri/css/parser_extras.rb +91 -0
  96. data/lib/nokogiri/css/syntax_error.rb +7 -0
  97. data/lib/nokogiri/css/tokenizer.rb +148 -5
  98. data/lib/nokogiri/css/tokenizer.rex +31 -39
  99. data/lib/nokogiri/css/xpath_visitor.rb +109 -51
  100. data/lib/nokogiri/css.rb +24 -3
  101. data/lib/nokogiri/decorators/slop.rb +42 -0
  102. data/lib/nokogiri/html/builder.rb +27 -1
  103. data/lib/nokogiri/html/document.rb +329 -3
  104. data/lib/nokogiri/html/document_fragment.rb +39 -0
  105. data/lib/nokogiri/html/element_description.rb +23 -0
  106. data/lib/nokogiri/html/element_description_defaults.rb +671 -0
  107. data/lib/nokogiri/html/entity_lookup.rb +13 -0
  108. data/lib/nokogiri/html/sax/parser.rb +35 -4
  109. data/lib/nokogiri/html/sax/parser_context.rb +16 -0
  110. data/lib/nokogiri/html/sax/push_parser.rb +36 -0
  111. data/lib/nokogiri/html.rb +18 -76
  112. data/lib/nokogiri/syntax_error.rb +4 -0
  113. data/lib/nokogiri/version.rb +106 -1
  114. data/lib/nokogiri/xml/attr.rb +14 -0
  115. data/lib/nokogiri/xml/attribute_decl.rb +18 -0
  116. data/lib/nokogiri/xml/builder.rb +395 -31
  117. data/lib/nokogiri/xml/cdata.rb +4 -2
  118. data/lib/nokogiri/xml/character_data.rb +7 -0
  119. data/lib/nokogiri/xml/document.rb +267 -12
  120. data/lib/nokogiri/xml/document_fragment.rb +149 -0
  121. data/lib/nokogiri/xml/dtd.rb +27 -1
  122. data/lib/nokogiri/xml/element_content.rb +36 -0
  123. data/lib/nokogiri/xml/element_decl.rb +13 -0
  124. data/lib/nokogiri/xml/entity_decl.rb +19 -0
  125. data/lib/nokogiri/xml/namespace.rb +13 -0
  126. data/lib/nokogiri/xml/node/save_options.rb +61 -0
  127. data/lib/nokogiri/xml/node.rb +748 -109
  128. data/lib/nokogiri/xml/node_set.rb +200 -72
  129. data/lib/nokogiri/xml/parse_options.rb +120 -0
  130. data/lib/nokogiri/xml/pp/character_data.rb +18 -0
  131. data/lib/nokogiri/xml/pp/node.rb +56 -0
  132. data/lib/nokogiri/xml/pp.rb +2 -0
  133. data/lib/nokogiri/xml/processing_instruction.rb +8 -0
  134. data/lib/nokogiri/xml/reader.rb +102 -4
  135. data/lib/nokogiri/xml/relax_ng.rb +32 -0
  136. data/lib/nokogiri/xml/sax/document.rb +114 -2
  137. data/lib/nokogiri/xml/sax/parser.rb +97 -7
  138. data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
  139. data/lib/nokogiri/xml/sax/push_parser.rb +60 -0
  140. data/lib/nokogiri/xml/sax.rb +2 -7
  141. data/lib/nokogiri/xml/schema.rb +63 -0
  142. data/lib/nokogiri/xml/searchable.rb +221 -0
  143. data/lib/nokogiri/xml/syntax_error.rb +27 -1
  144. data/lib/nokogiri/xml/text.rb +4 -1
  145. data/lib/nokogiri/xml/xpath/syntax_error.rb +11 -0
  146. data/lib/nokogiri/xml/xpath.rb +4 -0
  147. data/lib/nokogiri/xml/xpath_context.rb +3 -1
  148. data/lib/nokogiri/xml.rb +45 -38
  149. data/lib/nokogiri/xslt/stylesheet.rb +19 -0
  150. data/lib/nokogiri/xslt.rb +47 -2
  151. data/lib/nokogiri.rb +117 -24
  152. data/lib/xsd/xmlparser/nokogiri.rb +102 -0
  153. data/patches/sort-patches-by-date +25 -0
  154. data/ports/archives/libxml2-2.9.4.tar.gz +0 -0
  155. data/ports/archives/libxslt-1.1.29.tar.gz +0 -0
  156. data/suppressions/README.txt +1 -0
  157. data/suppressions/nokogiri_ree-1.8.7.358.supp +61 -0
  158. data/suppressions/nokogiri_ruby-1.8.7.370.supp +0 -0
  159. data/suppressions/nokogiri_ruby-1.9.2.320.supp +28 -0
  160. data/suppressions/nokogiri_ruby-1.9.3.327.supp +28 -0
  161. data/tasks/test.rb +100 -0
  162. data/test/css/test_nthiness.rb +73 -6
  163. data/test/css/test_parser.rb +184 -39
  164. data/test/css/test_tokenizer.rb +72 -19
  165. data/test/css/test_xpath_visitor.rb +44 -2
  166. data/test/decorators/test_slop.rb +20 -0
  167. data/test/files/2ch.html +108 -0
  168. data/test/files/GH_1042.html +18 -0
  169. data/test/files/address_book.rlx +12 -0
  170. data/test/files/address_book.xml +10 -0
  171. data/test/files/atom.xml +344 -0
  172. data/test/files/bar/bar.xsd +4 -0
  173. data/test/files/bogus.xml +0 -0
  174. data/test/files/dont_hurt_em_why.xml +422 -0
  175. data/test/files/encoding.html +82 -0
  176. data/test/files/encoding.xhtml +84 -0
  177. data/test/files/exslt.xml +8 -0
  178. data/test/files/exslt.xslt +35 -0
  179. data/test/files/foo/foo.xsd +4 -0
  180. data/test/files/metacharset.html +10 -0
  181. data/test/files/namespace_pressure_test.xml +1684 -0
  182. data/test/files/noencoding.html +47 -0
  183. data/test/files/po.xml +32 -0
  184. data/test/files/po.xsd +66 -0
  185. data/test/files/saml/saml20assertion_schema.xsd +283 -0
  186. data/test/files/saml/saml20protocol_schema.xsd +302 -0
  187. data/test/files/saml/xenc_schema.xsd +146 -0
  188. data/test/files/saml/xmldsig_schema.xsd +318 -0
  189. data/test/files/shift_jis.html +10 -0
  190. data/test/files/shift_jis.xml +5 -0
  191. data/test/files/shift_jis_no_charset.html +9 -0
  192. data/test/files/slow-xpath.xml +25509 -0
  193. data/test/files/snuggles.xml +3 -0
  194. data/test/files/staff.dtd +10 -0
  195. data/test/files/test_document_url/bar.xml +2 -0
  196. data/test/files/test_document_url/document.dtd +4 -0
  197. data/test/files/test_document_url/document.xml +6 -0
  198. data/test/files/tlm.html +2 -1
  199. data/test/files/to_be_xincluded.xml +2 -0
  200. data/test/files/valid_bar.xml +2 -0
  201. data/test/files/xinclude.xml +4 -0
  202. data/test/helper.rb +124 -13
  203. data/test/html/sax/test_parser.rb +118 -4
  204. data/test/html/sax/test_parser_context.rb +46 -0
  205. data/test/html/sax/test_push_parser.rb +87 -0
  206. data/test/html/test_builder.rb +94 -8
  207. data/test/html/test_document.rb +626 -11
  208. data/test/html/test_document_encoding.rb +145 -0
  209. data/test/html/test_document_fragment.rb +301 -0
  210. data/test/html/test_element_description.rb +105 -0
  211. data/test/html/test_named_characters.rb +14 -0
  212. data/test/html/test_node.rb +212 -0
  213. data/test/html/test_node_encoding.rb +85 -0
  214. data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +14 -0
  215. data/test/namespaces/test_namespaces_aliased_default.rb +24 -0
  216. data/test/namespaces/test_namespaces_in_builder_doc.rb +75 -0
  217. data/test/namespaces/test_namespaces_in_cloned_doc.rb +31 -0
  218. data/test/namespaces/test_namespaces_in_created_doc.rb +75 -0
  219. data/test/namespaces/test_namespaces_in_parsed_doc.rb +80 -0
  220. data/test/namespaces/test_namespaces_preservation.rb +31 -0
  221. data/test/test_convert_xpath.rb +2 -47
  222. data/test/test_css_cache.rb +45 -0
  223. data/test/test_encoding_handler.rb +48 -0
  224. data/test/test_memory_leak.rb +156 -0
  225. data/test/test_nokogiri.rb +103 -1
  226. data/test/test_soap4r_sax.rb +52 -0
  227. data/test/test_xslt_transforms.rb +293 -8
  228. data/test/xml/node/test_save_options.rb +28 -0
  229. data/test/xml/node/test_subclass.rb +44 -0
  230. data/test/xml/sax/test_parser.rb +309 -8
  231. data/test/xml/sax/test_parser_context.rb +115 -0
  232. data/test/xml/sax/test_push_parser.rb +157 -0
  233. data/test/xml/test_attr.rb +67 -0
  234. data/test/xml/test_attribute_decl.rb +86 -0
  235. data/test/xml/test_builder.rb +327 -2
  236. data/test/xml/test_c14n.rb +180 -0
  237. data/test/xml/test_cdata.rb +32 -2
  238. data/test/xml/test_comment.rb +40 -0
  239. data/test/xml/test_document.rb +846 -35
  240. data/test/xml/test_document_encoding.rb +31 -0
  241. data/test/xml/test_document_fragment.rb +271 -0
  242. data/test/xml/test_dtd.rb +153 -9
  243. data/test/xml/test_dtd_encoding.rb +31 -0
  244. data/test/xml/test_element_content.rb +56 -0
  245. data/test/xml/test_element_decl.rb +73 -0
  246. data/test/xml/test_entity_decl.rb +122 -0
  247. data/test/xml/test_entity_reference.rb +251 -0
  248. data/test/xml/test_namespace.rb +96 -0
  249. data/test/xml/test_node.rb +1126 -105
  250. data/test/xml/test_node_attributes.rb +115 -0
  251. data/test/xml/test_node_encoding.rb +69 -0
  252. data/test/xml/test_node_inheritance.rb +32 -0
  253. data/test/xml/test_node_reparenting.rb +549 -0
  254. data/test/xml/test_node_set.rb +668 -9
  255. data/test/xml/test_parse_options.rb +64 -0
  256. data/test/xml/test_processing_instruction.rb +30 -0
  257. data/test/xml/test_reader.rb +589 -0
  258. data/test/xml/test_reader_encoding.rb +134 -0
  259. data/test/xml/test_relax_ng.rb +60 -0
  260. data/test/xml/test_schema.rb +142 -0
  261. data/test/xml/test_syntax_error.rb +30 -0
  262. data/test/xml/test_text.rb +49 -2
  263. data/test/xml/test_unparented_node.rb +440 -0
  264. data/test/xml/test_xinclude.rb +83 -0
  265. data/test/xml/test_xpath.rb +445 -0
  266. data/test/xslt/test_custom_functions.rb +133 -0
  267. data/test/xslt/test_exception_handling.rb +37 -0
  268. data/test_all +107 -0
  269. metadata +459 -115
  270. data/History.txt +0 -6
  271. data/README.ja.txt +0 -86
  272. data/README.txt +0 -87
  273. data/ext/nokogiri/html_sax_parser.c +0 -32
  274. data/ext/nokogiri/html_sax_parser.h +0 -11
  275. data/ext/nokogiri/native.c +0 -40
  276. data/ext/nokogiri/native.h +0 -51
  277. data/ext/nokogiri/xml_xpath.c +0 -46
  278. data/ext/nokogiri/xml_xpath.h +0 -11
  279. data/lib/nokogiri/css/generated_parser.rb +0 -653
  280. data/lib/nokogiri/css/generated_tokenizer.rb +0 -159
  281. data/lib/nokogiri/decorators/hpricot/node.rb +0 -58
  282. data/lib/nokogiri/decorators/hpricot/node_set.rb +0 -14
  283. data/lib/nokogiri/decorators/hpricot/xpath_visitor.rb +0 -17
  284. data/lib/nokogiri/decorators/hpricot.rb +0 -3
  285. data/lib/nokogiri/decorators.rb +0 -1
  286. data/lib/nokogiri/hpricot.rb +0 -47
  287. data/lib/nokogiri/xml/after_handler.rb +0 -18
  288. data/lib/nokogiri/xml/before_handler.rb +0 -32
  289. data/lib/nokogiri/xml/element.rb +0 -6
  290. data/lib/nokogiri/xml/entity_declaration.rb +0 -9
  291. data/nokogiri.gemspec +0 -34
  292. data/test/hpricot/files/basic.xhtml +0 -17
  293. data/test/hpricot/files/boingboing.html +0 -2266
  294. data/test/hpricot/files/cy0.html +0 -3653
  295. data/test/hpricot/files/immob.html +0 -400
  296. data/test/hpricot/files/pace_application.html +0 -1320
  297. data/test/hpricot/files/tenderlove.html +0 -16
  298. data/test/hpricot/files/uswebgen.html +0 -220
  299. data/test/hpricot/files/utf8.html +0 -1054
  300. data/test/hpricot/files/week9.html +0 -1723
  301. data/test/hpricot/files/why.xml +0 -19
  302. data/test/hpricot/load_files.rb +0 -7
  303. data/test/hpricot/test_alter.rb +0 -67
  304. data/test/hpricot/test_builder.rb +0 -27
  305. data/test/hpricot/test_parser.rb +0 -423
  306. data/test/hpricot/test_paths.rb +0 -15
  307. data/test/hpricot/test_preserved.rb +0 -78
  308. data/test/hpricot/test_xml.rb +0 -30
  309. data/test/test_reader.rb +0 -222
data/Y_U_NO_GEMSPEC.md ADDED
@@ -0,0 +1,155 @@
1
+ (note: this was originally a blog post published at http://blog.flavorjon.es/2012/03/y-u-no-gemspec.html)
2
+
3
+ ## tl;dr
4
+
5
+ 1. Team Nokogiri are not 10-foot-tall code-crunching robots, so `master` is usually unstable.
6
+ 2. Unstable code can corrupt your data and crash your application, which would make everybody look bad.
7
+ 3. Therefore, the _risk_ associated with using unstable code is severe; for you _and_ for Team Nokogiri.
8
+ 4. The absence of a gemspec is a risk mitigation tactic.
9
+ 5. You can always ask for an RC release.
10
+
11
+
12
+ ## Why Isn't There a Gemspec!?
13
+
14
+ OHAI! Thank you for asking this question!
15
+
16
+ Team Nokogiri gets asked this pretty frequently. Just a sample from
17
+ the historical record:
18
+
19
+ * [Issue #274](https://github.com/sparklemotion/nokogiri/issues/274)
20
+ * [Issue #371](https://github.com/sparklemotion/nokogiri/issues/371)
21
+ * [A commit removing nokogiri.gemspec](https://github.com/sparklemotion/nokogiri/commit/7f17a643a05ca381d65131515b54d4a3a61ca2e1#commitcomment-667477)
22
+ * [A nokogiri-talk thread](http://groups.google.com/group/nokogiri-talk/browse_thread/thread/4706b002e492d23f)
23
+ * [Another nokogiri-talk thread](http://groups.google.com/group/nokogiri-talk/browse_thread/thread/0b201bb80ea3eea0)
24
+
25
+ Sometimes people imply that we've forgotten, or that we don't how to
26
+ properly manage our codebase. Those people are super fun to respond
27
+ to!
28
+
29
+ We've gone back and forth a couple of times over the past few years,
30
+ but the current policy of Team Nokogiri is to **not** provide a
31
+ gemspec in the Github repo. This is a conscious choice, not an
32
+ oversight.
33
+
34
+
35
+ ## But You Didn't Answer the Question!
36
+
37
+ Ah, I was hoping you wouldn't notice. Well, OK, let's do this, if
38
+ you're serious about it.
39
+
40
+ I'd like to start by talking about _risk_. Specifically, the risk
41
+ associated with using a known-unstable version of Nokogiri.
42
+
43
+
44
+ ### Risk
45
+
46
+ One common way to evaluate the _risk_ of an incident is:
47
+
48
+ risk = probability x impact
49
+
50
+ You can read more about this on [the internets](http://en.wikipedia.org/wiki/Risk_Matrix).
51
+
52
+ The _risk_ associated with a Nokogiri bug could be loosely defined by
53
+ answering the questions:
54
+
55
+ * "How likely is it that a bug exists?" (probability)
56
+ * "How severe will the consequences of a bug be?" (impact)
57
+
58
+
59
+ ### Probability
60
+
61
+ The `master` branch should be considered unstable. Team Nokogiri are
62
+ not 10-foot-tall code-crunching robots; we are humans. We make
63
+ mistakes, and as a result, any arbitrary commit on `master` is likely
64
+ to contain bugs.
65
+
66
+ Just as an example, Nokogiri `master` was unstable for about five
67
+ months between November 2011 and March 2012. It was unstable not
68
+ because we were sloppy, or didn't care, but because the fixes were
69
+ hard and unobvious.
70
+
71
+ When we release Nokogiri, we test for memory leaks and invalid memory
72
+ access on all kinds of platforms with many flavors of Ruby and lots of
73
+ versions of libxml2. Because these tests are time-consuming, we don't
74
+ run them on every commit. We run them often when preparing a release.
75
+
76
+ If we're releasing Nokogiri, it means we think it's rock solid.
77
+
78
+ And if we're not releasing it, it means there are probably bugs.
79
+
80
+
81
+ ### Impact
82
+
83
+ Nokogiri is a gem with native extensions. This means it's not pure
84
+ Ruby -- there's C or Java code being compiled and run, which means
85
+ that there's always a chance that the gem will crash your application,
86
+ or worse. Possible outcomes include:
87
+
88
+ * leaking memory
89
+ * corrupting data
90
+ * making benign code crash (due to memory corruption)
91
+
92
+ So, then, a bug in a native extension can have much worse downside
93
+ than you might think. It's not just going to do something unexpected;
94
+ it's possibly going to do terrible, awful things to your application
95
+ and data.
96
+
97
+ **Nobody** wants that to happen. Especially Team Nokogiri.
98
+
99
+
100
+ ### Risk, Redux
101
+
102
+ So, if you accept the equation
103
+
104
+ risk = probability x impact
105
+
106
+ and you believe me when I say that:
107
+
108
+ * the probablility of a bug in unreleased code is high, and
109
+ * the impact of a bug is likely to be severe,
110
+
111
+ then you should easily see that the _risk_ associated with a bug in
112
+ Nokogiri is quite high.
113
+
114
+ Part of Team Nokogiri's job is to try to mitigate this risk. We have a
115
+ number of tactics that we use to accomplish this:
116
+
117
+ * we respond quickly to bug reports, particularly when they are possible memory issues
118
+ * we review each others' commits
119
+ * we have a thorough test suite, and we test-drive new features
120
+ * we discuss code design and issues on a core developer mailing list
121
+ * we use valgrind to test for memory issues (leaks and invalid
122
+ access) on multiple combinations of OS, libxml2 and Ruby
123
+ * we package release candidates, and encourage devs to use them
124
+ * **we do NOT commit a gemspec in our git repository**
125
+
126
+ Yes, that's right, the absence of a gemspec is a risk mitigation
127
+ tactic. Not only does Team Nokogiri not want to imply support for
128
+ `master`, we want to **actively discourage** people from using
129
+ it. Because it's not stable.
130
+
131
+
132
+ ## But I Want to Do It Anyway
133
+
134
+ Another option, is to email the [nokogiri-talk
135
+ list](http://groups.google.com/group/nokogiri-talk) and ask for a
136
+ release candidate to be built. We're pretty accommodating if there's a
137
+ bugfix that's a blocker for you. And if we can't release an RC, we'll
138
+ tell you why.
139
+
140
+ And in the end, nothing is stopping you from cloning the repo and
141
+ generating a private gemspec. This is an extra step or two, but it has
142
+ the benefit of making sure developers have thought through the costs
143
+ and risks involved; and it tends to select for developers who know
144
+ what they're doing.
145
+
146
+
147
+ ## In Conclusion
148
+
149
+ Team Nokogiri takes stability very seriously. We want everybody who
150
+ uses Nokogiri to have a pleasant experience. And so we want to make
151
+ sure that you're using the best software we can make.
152
+
153
+ Please keep in mind that we're trying very hard to do the right thing
154
+ for all Nokogiri users out there in Rubyland. Nokogiri loves you very
155
+ much, and we hope you love it back.
data/appveyor.yml ADDED
@@ -0,0 +1,22 @@
1
+ install:
2
+ - SET PATH=C:\Ruby%ruby_version%\bin;%PATH%
3
+ - SET PATH=C:\MinGW\bin;%PATH%
4
+ - SET RAKEOPT=-rdevkit
5
+ - ruby --version
6
+ - gem --version
7
+ - bundle install
8
+
9
+ build: off
10
+
11
+ test_script:
12
+ - bundle exec rake
13
+
14
+ environment:
15
+ matrix:
16
+ - ruby_version: "22"
17
+ - ruby_version: "22-x64"
18
+ - ruby_version: "21"
19
+ - ruby_version: "21-x64"
20
+ - ruby_version: "200"
21
+ - ruby_version: "200-x64"
22
+ - ruby_version: "193"
data/bin/nokogiri ADDED
@@ -0,0 +1,118 @@
1
+ #!/usr/bin/env ruby
2
+ require 'optparse'
3
+ require 'open-uri'
4
+ require 'uri'
5
+ require 'rubygems'
6
+ require 'nokogiri'
7
+ autoload :IRB, 'irb'
8
+
9
+ parse_class = Nokogiri
10
+ encoding = nil
11
+
12
+ # This module provides some tunables with the nokogiri CLI for use in
13
+ # your ~/.nokogirirc.
14
+ module Nokogiri::CLI
15
+ class << self
16
+ # Specify the console engine, defaulted to IRB.
17
+ #
18
+ # call-seq:
19
+ # require 'pry'
20
+ # Nokogiri::CLI.console = Pry
21
+ attr_writer :console
22
+
23
+ def console
24
+ case @console
25
+ when Symbol
26
+ Kernel.const_get(@console)
27
+ else
28
+ @console
29
+ end
30
+ end
31
+
32
+ attr_accessor :rcfile
33
+ end
34
+
35
+ self.rcfile = File.expand_path('~/.nokogirirc')
36
+ self.console = :IRB
37
+ end
38
+
39
+ opts = OptionParser.new do |opts|
40
+ opts.banner = "Nokogiri: an HTML, XML, SAX, and Reader parser"
41
+ opts.define_head "Usage: nokogiri <uri|path> [options]"
42
+ opts.separator ""
43
+ opts.separator "Examples:"
44
+ opts.separator " nokogiri https://www.ruby-lang.org/"
45
+ opts.separator " nokogiri ./public/index.html"
46
+ opts.separator " curl -s http://www.nokogiri.org | nokogiri -e'p $_.css(\"h1\").length'"
47
+ opts.separator ""
48
+ opts.separator "Options:"
49
+
50
+ opts.on("--type type", "Parse as type: xml or html (default: auto)", [:xml, :html]) do |v|
51
+ parse_class = {:xml => Nokogiri::XML, :html => Nokogiri::HTML}[v]
52
+ end
53
+
54
+ opts.on("-C file", "Specifies initialization file to load (default #{Nokogiri::CLI.rcfile})") do |v|
55
+ Nokogiri::CLI.rcfile = v
56
+ end
57
+
58
+ opts.on("-E", "--encoding encoding", "Read as encoding (default: #{encoding || 'none'})") do |v|
59
+ encoding = v
60
+ end
61
+
62
+ opts.on("-e command", "Specifies script from command-line.") do |v|
63
+ @script = v
64
+ end
65
+
66
+ opts.on("--rng <uri|path>", "Validate using this rng file.") do |v|
67
+ @rng = open(v) {|f| Nokogiri::XML::RelaxNG(f)}
68
+ end
69
+
70
+ opts.on_tail("-?", "--help", "Show this message") do
71
+ puts opts
72
+ exit
73
+ end
74
+
75
+ opts.on_tail("-v", "--version", "Show version") do
76
+ puts Nokogiri::VersionInfo.instance.to_markdown
77
+ exit
78
+ end
79
+ end
80
+ opts.parse!
81
+
82
+ url = ARGV.shift
83
+
84
+ if url.to_s.strip.empty? && $stdin.tty?
85
+ puts opts
86
+ exit 1
87
+ end
88
+
89
+ if File.file?(Nokogiri::CLI.rcfile)
90
+ load Nokogiri::CLI.rcfile
91
+ end
92
+
93
+ if url || $stdin.tty?
94
+ case uri = (URI(url) rescue url)
95
+ when URI::HTTP
96
+ @doc = parse_class.parse(uri.read, url, encoding)
97
+ else
98
+ @doc = parse_class.parse(open(url).read, nil, encoding)
99
+ end
100
+ else
101
+ @doc = parse_class.parse($stdin, nil, encoding)
102
+ end
103
+
104
+ $_ = @doc
105
+
106
+ if @rng
107
+ @rng.validate(@doc).each do |error|
108
+ puts error.message
109
+ end
110
+ else
111
+ if @script
112
+ eval @script, binding, '<main>'
113
+ else
114
+ puts "Your document is stored in @doc..."
115
+ Nokogiri::CLI.console.start
116
+ end
117
+ end
118
+
data/build_all ADDED
@@ -0,0 +1,45 @@
1
+ #! /usr/bin/env bash
2
+ #
3
+ # script to build gems for all relevant platforms:
4
+ # - MRI et al (standard gem)
5
+ # - windows (x86-mingw32 and x64-mingw32)
6
+ # - jruby
7
+ #
8
+
9
+ # Load RVM into a shell session *as a function*
10
+ if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then
11
+ source "$HOME/.rvm/scripts/rvm"
12
+ elif [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then
13
+ source "/usr/local/rvm/scripts/rvm"
14
+ else
15
+ echo "ERROR: An RVM installation was not found.\n"
16
+ fi
17
+
18
+ set -o errexit
19
+ #set -x
20
+
21
+ rm -rf tmp pkg
22
+ bundle exec rake clean clobber
23
+
24
+ # holding pen
25
+ rm -rf gems
26
+ mkdir -p gems
27
+
28
+ # windows
29
+ bundle exec rake gem:windows
30
+ cp -v pkg/nokogiri*{x86,x64}-mingw32*.gem gems
31
+
32
+ # MRI
33
+ bundle exec rake clean
34
+ bundle exec rake gem
35
+ cp -v pkg/nokogiri*.gem gems
36
+
37
+ # jruby
38
+ bundle exec rake clean clobber
39
+ bundle exec rake generate
40
+
41
+ rvm jruby-1.7.19
42
+ gem install bundler --conservative
43
+ bundle install --quiet --local || bundle install
44
+ bundle exec rake gem
45
+ cp -v pkg/nokogiri*java.gem gems
data/dependencies.yml ADDED
@@ -0,0 +1,29 @@
1
+ libxml2:
2
+ version: "2.9.4"
3
+ md5: "ae249165c173b1ff386ee8ad676815f5" # manually confirmed via `gpg --verify`
4
+ # gpg: Signature made Mon 23 May 2016 04:02:13 AM EDT using DSA key ID DE95BC1F
5
+ # gpg: Good signature from "Daniel Veillard (Red Hat work email) <veillard@redhat.com>"
6
+ # gpg: aka "Daniel Veillard <Daniel.Veillard@w3.org>"
7
+ # gpg: WARNING: This key is not certified with a trusted signature!
8
+ # gpg: There is no indication that the signature belongs to the owner.
9
+ # Primary key fingerprint: C744 15BA 7C9C 7F78 F02E 1DC3 4606 B8A5 DE95 BC1F
10
+
11
+ libxslt:
12
+ version: "1.1.29"
13
+ md5: "a129d3c44c022de3b9dcf6d6f288d72e"
14
+ # gpg: Signature made Mon 23 May 2016 09:58:52 PM EDT using DSA key ID DE95BC1F
15
+ # gpg: Good signature from "Daniel Veillard (Red Hat work email) <veillard@redhat.com>"
16
+ # gpg: aka "Daniel Veillard <Daniel.Veillard@w3.org>"
17
+ # gpg: WARNING: This key is not certified with a trusted signature!
18
+ # gpg: There is no indication that the signature belongs to the owner.
19
+ # Primary key fingerprint: C744 15BA 7C9C 7F78 F02E 1DC3 4606 B8A5 DE95 BC1F
20
+
21
+ zlib:
22
+ version: "1.2.8"
23
+ md5: "44d667c142d7cda120332623eab69f40"
24
+
25
+ libiconv:
26
+ version: "1.14"
27
+ md5: "e34509b1623cec449dfeb73d7ce9c6c6"
28
+ # gpg: Signature made Sun 07 Aug 2011 01:58:18 PM EDT using DSA key ID F059B1D1
29
+ # gpg: BAD signature from "Bruno Haible (Open Source Development) <bruno@clisp.org>"