tdiary-contrib 3.2.2.20130518

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/.travis.yml +7 -0
  4. data/Gemfile +13 -0
  5. data/Gemfile.lock +35 -0
  6. data/README.en.md +12 -0
  7. data/README.md +13 -0
  8. data/Rakefile +41 -0
  9. data/doc/en/filter/spambayes.txt +3 -0
  10. data/doc/en/plugin.txt +1 -0
  11. data/doc/en/style/hatena.txt +10 -0
  12. data/doc/en/style/markdown.txt +16 -0
  13. data/doc/en/util.txt +1 -0
  14. data/doc/ja/filter/antirefspam.history.txt +59 -0
  15. data/doc/ja/filter/antirefspam.txt +86 -0
  16. data/doc/ja/filter/comment_key.ja.html +182 -0
  17. data/doc/ja/filter/spambayes.txt +3 -0
  18. data/doc/ja/plugin/add_bookmark.txt +50 -0
  19. data/doc/ja/plugin/category_to_tag.txt +21 -0
  20. data/doc/ja/plugin/cocoment.txt +31 -0
  21. data/doc/ja/plugin/google_adsense.txt +25 -0
  22. data/doc/ja/plugin/google_analytics.txt +7 -0
  23. data/doc/ja/plugin/image_detail.txt +69 -0
  24. data/doc/ja/plugin/image_gps.txt +36 -0
  25. data/doc/ja/plugin/image_gps2.txt +41 -0
  26. data/doc/ja/plugin/livedoor_weather.txt +105 -0
  27. data/doc/ja/plugin/opensearch_ad.txt +16 -0
  28. data/doc/ja/plugin/section_footer.txt +84 -0
  29. data/doc/ja/plugin/select_theme.txt +1 -0
  30. data/doc/ja/plugin.txt +13 -0
  31. data/doc/ja/style/hatena.txt +10 -0
  32. data/doc/ja/style/markdown.txt +13 -0
  33. data/doc/ja/util.txt +12 -0
  34. data/filter/antirefspam.rb +263 -0
  35. data/filter/commentkey.rb +29 -0
  36. data/filter/commentsize.rb +18 -0
  37. data/filter/hidecomment.rb +13 -0
  38. data/filter/iplookup.rb +55 -0
  39. data/filter/plugin/antirefspam.rb +59 -0
  40. data/filter/plugin/commentkey.rb +58 -0
  41. data/filter/plugin/commentsize.rb +12 -0
  42. data/filter/plugin/en/iplookup.rb +9 -0
  43. data/filter/plugin/en/spambayes.rb +123 -0
  44. data/filter/plugin/iplookup.rb +39 -0
  45. data/filter/plugin/ja/antirefspam.rb +91 -0
  46. data/filter/plugin/ja/commentkey.rb +17 -0
  47. data/filter/plugin/ja/commentsize.rb +6 -0
  48. data/filter/plugin/ja/iplookup.rb +9 -0
  49. data/filter/plugin/ja/spambayes.rb +124 -0
  50. data/filter/plugin/spambayes.rb +501 -0
  51. data/filter/plugin/zh/iplookup.rb +9 -0
  52. data/filter/rblcheck.rb +36 -0
  53. data/filter/spambayes.rb +535 -0
  54. data/filter/spamlookup.rb +37 -0
  55. data/io/dbi_io/ChangeLog +19 -0
  56. data/io/dbi_io/README.ja +39 -0
  57. data/io/dbi_io/dbi_io.rb +181 -0
  58. data/io/dbi_io/plugin/refererDbiIO.rb +76 -0
  59. data/io/dbi_io/tdiary_table.sql +42 -0
  60. data/js/appstore.js +109 -0
  61. data/js/datepicker.js +69 -0
  62. data/js/editor.js +82 -0
  63. data/js/flickr.js +157 -0
  64. data/js/image_ex.js +79 -0
  65. data/js/jquery.socialbutton.js +842 -0
  66. data/js/nicovideo.js +17 -0
  67. data/js/picasa.js +322 -0
  68. data/js/plugin_checker.js +71 -0
  69. data/js/prettify/lang-apollo.js +2 -0
  70. data/js/prettify/lang-clj.js +18 -0
  71. data/js/prettify/lang-css.js +2 -0
  72. data/js/prettify/lang-go.js +1 -0
  73. data/js/prettify/lang-hs.js +2 -0
  74. data/js/prettify/lang-lisp.js +3 -0
  75. data/js/prettify/lang-lua.js +2 -0
  76. data/js/prettify/lang-ml.js +2 -0
  77. data/js/prettify/lang-n.js +4 -0
  78. data/js/prettify/lang-proto.js +1 -0
  79. data/js/prettify/lang-scala.js +2 -0
  80. data/js/prettify/lang-sql.js +2 -0
  81. data/js/prettify/lang-tex.js +1 -0
  82. data/js/prettify/lang-vb.js +2 -0
  83. data/js/prettify/lang-vhdl.js +3 -0
  84. data/js/prettify/lang-wiki.js +2 -0
  85. data/js/prettify/lang-xq.js +3 -0
  86. data/js/prettify/lang-yaml.js +2 -0
  87. data/js/prettify/prettify.css +1 -0
  88. data/js/prettify/prettify.js +28 -0
  89. data/js/referer.js +17 -0
  90. data/js/show_and_hide.js +39 -0
  91. data/js/socialbutton.js +126 -0
  92. data/js/twitter_anywhere.js +28 -0
  93. data/js/yahoo_kousei.js +21 -0
  94. data/lib/bayes/convert.rb +34 -0
  95. data/lib/bayes.rb +232 -0
  96. data/lib/exifparser/BUGS +1 -0
  97. data/lib/exifparser/ChangeLog +169 -0
  98. data/lib/exifparser/README +15 -0
  99. data/lib/exifparser/install.rb +1015 -0
  100. data/lib/exifparser/lib/exifparser/makernote/canon.rb +502 -0
  101. data/lib/exifparser/lib/exifparser/makernote/fujifilm.rb +415 -0
  102. data/lib/exifparser/lib/exifparser/makernote/minolta.rb +84 -0
  103. data/lib/exifparser/lib/exifparser/makernote/mk_nikonflensname.rb +39 -0
  104. data/lib/exifparser/lib/exifparser/makernote/nikon.rb +267 -0
  105. data/lib/exifparser/lib/exifparser/makernote/nikon2.rb +581 -0
  106. data/lib/exifparser/lib/exifparser/makernote/nikonflensname.rb +438 -0
  107. data/lib/exifparser/lib/exifparser/makernote/olympus.rb +225 -0
  108. data/lib/exifparser/lib/exifparser/makernote/prove.rb +84 -0
  109. data/lib/exifparser/lib/exifparser/makernote/sigma.rb +237 -0
  110. data/lib/exifparser/lib/exifparser/pre-setup.rb +1 -0
  111. data/lib/exifparser/lib/exifparser/scan.rb +278 -0
  112. data/lib/exifparser/lib/exifparser/tag.rb +2298 -0
  113. data/lib/exifparser/lib/exifparser/thumbnail.rb +76 -0
  114. data/lib/exifparser/lib/exifparser/utils.rb +88 -0
  115. data/lib/exifparser/lib/exifparser.rb +265 -0
  116. data/lib/exifparser/sample/exifview.rb +279 -0
  117. data/lib/tdiary-contrib.rb +19 -0
  118. data/lib/wgs2tky.rb +93 -0
  119. data/misc/section_footer2/buzzurl.yaml +6 -0
  120. data/misc/section_footer2/fc2.yaml +6 -0
  121. data/misc/section_footer2/ldc.yaml +6 -0
  122. data/misc/section_footer2/retweet.yaml +7 -0
  123. data/misc/section_footer2/twitter.yaml +7 -0
  124. data/misc/section_footer2/yahoo.yaml +6 -0
  125. data/misc/tdiarygraph/tdiarygraph120x90e.swf +0 -0
  126. data/misc/tdiarygraph/tdiarygraph125x125e.swf +0 -0
  127. data/misc/tdiarygraph/tdiarygraph240x180e.swf +0 -0
  128. data/misc/tdiarygraph/tdiarygraph468x60e.swf +0 -0
  129. data/misc/tdiarygraph/tdiarygraph728x90e.swf +0 -0
  130. data/misc/tdiarytimes/tdiarytimes125x125r.swf +0 -0
  131. data/misc/tdiarytimes/tdiarytimes125x125r7.swf +0 -0
  132. data/misc/tdiarytimes/tdiarytimes125x125s.swf +0 -0
  133. data/misc/tdiarytimes/tdiarytimes125x30.swf +0 -0
  134. data/misc/tdiarytimes/tdiarytimes234x30.swf +0 -0
  135. data/misc/tdiarytimes/tdiarytimes468x30.swf +0 -0
  136. data/plugin/add_bookmark.rb +89 -0
  137. data/plugin/apple_webclip.rb +26 -0
  138. data/plugin/appstore.rb +47 -0
  139. data/plugin/bigpresen.rb +86 -0
  140. data/plugin/bitly.rb +39 -0
  141. data/plugin/bootstrap-navi.rb +54 -0
  142. data/plugin/canonical.rb +9 -0
  143. data/plugin/category_similar.rb +73 -0
  144. data/plugin/category_to_tag.rb +60 -0
  145. data/plugin/category_to_tagcloud.rb +172 -0
  146. data/plugin/cocomment.rb +37 -0
  147. data/plugin/code-prettify.rb +23 -0
  148. data/plugin/coderwall.rb +34 -0
  149. data/plugin/datepicker.rb +28 -0
  150. data/plugin/day2section.rb +20 -0
  151. data/plugin/del_footer.rb +111 -0
  152. data/plugin/description_from_body.rb +23 -0
  153. data/plugin/development.rb +16 -0
  154. data/plugin/editor.rb +11 -0
  155. data/plugin/en/add_bookmark.rb +20 -0
  156. data/plugin/en/del_footer.rb +10 -0
  157. data/plugin/en/git-register.rb +3 -0
  158. data/plugin/en/livedoor_weather.rb +25 -0
  159. data/plugin/en/microsummary.rb +18 -0
  160. data/plugin/en/nicovideo.rb +38 -0
  161. data/plugin/en/openid.rb +8 -0
  162. data/plugin/en/section_footer.rb +6 -0
  163. data/plugin/en/section_footer2.rb +3 -0
  164. data/plugin/en/socialbutton.rb +5 -0
  165. data/plugin/everytrail.rb +39 -0
  166. data/plugin/facebook_comments.rb +59 -0
  167. data/plugin/flickr.rb +209 -0
  168. data/plugin/gist.rb +16 -0
  169. data/plugin/git-register.rb +240 -0
  170. data/plugin/github_badge.rb +27 -0
  171. data/plugin/github_link.rb +9 -0
  172. data/plugin/goo_gl.rb +42 -0
  173. data/plugin/google_adsense.rb +132 -0
  174. data/plugin/google_analytics.rb +39 -0
  175. data/plugin/google_map.rb +168 -0
  176. data/plugin/google_sitemaps.rb +60 -0
  177. data/plugin/google_webmaster.rb +22 -0
  178. data/plugin/hatena_bookmark_nocomment.rb +9 -0
  179. data/plugin/hatena_star.rb +66 -0
  180. data/plugin/hb_footer.rb +255 -0
  181. data/plugin/hb_footer4sec.rb +244 -0
  182. data/plugin/hb_footer4sec_js.rb +30 -0
  183. data/plugin/hide_comment_form.rb +4 -0
  184. data/plugin/hide_sidebar_iphone.rb +21 -0
  185. data/plugin/iddy.rb +81 -0
  186. data/plugin/image_detail.rb +143 -0
  187. data/plugin/image_ex.rb +462 -0
  188. data/plugin/image_gps.rb +128 -0
  189. data/plugin/inline_wiki.rb +6 -0
  190. data/plugin/instagr.rb +64 -0
  191. data/plugin/ja/add_bookmark.rb +20 -0
  192. data/plugin/ja/del_footer.rb +10 -0
  193. data/plugin/ja/flickr.rb +62 -0
  194. data/plugin/ja/git-register.rb +3 -0
  195. data/plugin/ja/google_sitemaps.rb +35 -0
  196. data/plugin/ja/livedoor_weather.rb +25 -0
  197. data/plugin/ja/microsummary.rb +18 -0
  198. data/plugin/ja/nicovideo.rb +41 -0
  199. data/plugin/ja/openid.rb +7 -0
  200. data/plugin/ja/section_footer.rb +6 -0
  201. data/plugin/ja/section_footer2.rb +4 -0
  202. data/plugin/ja/socialbutton.rb +6 -0
  203. data/plugin/jdate.rb +20 -0
  204. data/plugin/jholiday.rb +16 -0
  205. data/plugin/jmonth.rb +20 -0
  206. data/plugin/jquery_ui_theme.rb +55 -0
  207. data/plugin/jroku.rb +28 -0
  208. data/plugin/jyear.rb +37 -0
  209. data/plugin/latlonglab_route.rb +25 -0
  210. data/plugin/lazy_referer.rb +38 -0
  211. data/plugin/livedoor_weather.rb +180 -0
  212. data/plugin/make_link.rb +44 -0
  213. data/plugin/makerss_category.rb +43 -0
  214. data/plugin/makerss_comment.rb +35 -0
  215. data/plugin/microsummary.rb +62 -0
  216. data/plugin/mm_footer.rb +215 -0
  217. data/plugin/monthly_autopagerize.rb +67 -0
  218. data/plugin/my_hotentry.rb +132 -0
  219. data/plugin/navi_day.rb +118 -0
  220. data/plugin/navi_this_month.rb +15 -0
  221. data/plugin/nicovideo.rb +115 -0
  222. data/plugin/notify_miniblog.rb +134 -0
  223. data/plugin/ogp.rb +55 -0
  224. data/plugin/ohmsha_estore.rb +71 -0
  225. data/plugin/openid.rb +90 -0
  226. data/plugin/opensearch_ad.rb +33 -0
  227. data/plugin/picasa.rb +56 -0
  228. data/plugin/plugin_checker.rb +41 -0
  229. data/plugin/popit.rb +22 -0
  230. data/plugin/prettify.rb +19 -0
  231. data/plugin/prezi.rb +10 -0
  232. data/plugin/profile.rb +222 -0
  233. data/plugin/puboo.rb +93 -0
  234. data/plugin/pygments_css.rb +76 -0
  235. data/plugin/rating.rb +419 -0
  236. data/plugin/recent_estraier.rb +50 -0
  237. data/plugin/recent_tweet.rb +71 -0
  238. data/plugin/retweet.rb +86 -0
  239. data/plugin/rubykaigi.rb +99 -0
  240. data/plugin/search-bing.rb +87 -0
  241. data/plugin/search-default.rb +264 -0
  242. data/plugin/search-google-custom.rb +60 -0
  243. data/plugin/search-yahoo-websearch.rb +121 -0
  244. data/plugin/search-yahoo.rb +109 -0
  245. data/plugin/section_footer.rb +195 -0
  246. data/plugin/section_footer2.rb +278 -0
  247. data/plugin/section_permalink.rb +73 -0
  248. data/plugin/section_permalink_anchor.rb +39 -0
  249. data/plugin/select_style.rb +42 -0
  250. data/plugin/select_theme.rb +90 -0
  251. data/plugin/show_and_hide.rb +77 -0
  252. data/plugin/slideshare.rb +10 -0
  253. data/plugin/socialbutton.rb +60 -0
  254. data/plugin/tatsu_zine.rb +93 -0
  255. data/plugin/tdiarygraph_flashstyle.rb +296 -0
  256. data/plugin/tdiarytimes.rb +166 -0
  257. data/plugin/tdiarytimes2.rb +406 -0
  258. data/plugin/tdiarytimes_flashstyle.rb +263 -0
  259. data/plugin/tdiarytimes_textstyle.rb +290 -0
  260. data/plugin/title_anchor.rb +16 -0
  261. data/plugin/tweet_quote.rb +106 -0
  262. data/plugin/twitpic.rb +10 -0
  263. data/plugin/twitter.rb +46 -0
  264. data/plugin/twitter_anywhere.rb +209 -0
  265. data/plugin/twitter_badge.rb +42 -0
  266. data/plugin/twitter_js.rb +59 -0
  267. data/plugin/ustream.rb +19 -0
  268. data/plugin/vimeo.rb +14 -0
  269. data/plugin/volatile.rb +89 -0
  270. data/plugin/vote.rb +100 -0
  271. data/plugin/wikiloc.rb +27 -0
  272. data/plugin/windex.rb +512 -0
  273. data/plugin/yahoo_kousei.rb +79 -0
  274. data/plugin/yahoo_map.rb +97 -0
  275. data/plugin/youtube.rb +33 -0
  276. data/plugin/yshop.rb +189 -0
  277. data/plugin/zenback.rb +46 -0
  278. data/spec/apple_webclip_spec.rb +46 -0
  279. data/spec/fixtures/friendfeed.xml +2 -0
  280. data/spec/fixtures/github.json +1 -0
  281. data/spec/fixtures/twitter.xml +73 -0
  282. data/spec/gist_spec.rb +16 -0
  283. data/spec/github_link_spec.rb +39 -0
  284. data/spec/google_analytics_spec.rb +60 -0
  285. data/spec/jdate_spec.rb +23 -0
  286. data/spec/jmonth_spec.rb +28 -0
  287. data/spec/jyear_spec.rb +21 -0
  288. data/spec/my_hotentry_spec.rb +78 -0
  289. data/spec/openid_spec.rb +246 -0
  290. data/spec/opensearch_ad_spec.rb +50 -0
  291. data/spec/profile_spec.rb +88 -0
  292. data/spec/rcov.opts +2 -0
  293. data/spec/spec_helper.rb +223 -0
  294. data/spec/title_anchor_spec.rb +39 -0
  295. data/spec/twitter_js_spec.rb +116 -0
  296. data/spec/youtube_spec.rb +20 -0
  297. data/style/hatena_style.rb +1011 -0
  298. data/style/markdown_style.rb +239 -0
  299. data/style/wikiext_style.rb +21 -0
  300. data/tdiary-contrib.gemspec +25 -0
  301. data/util/clean-spam/README.ja +1 -0
  302. data/util/clean-spam/tdiary-comment-clean +46 -0
  303. data/util/clean-spam/tdiary-comment-clean2 +81 -0
  304. data/util/clean-spam/tdiary-referer-clean +46 -0
  305. data/util/convert_pstore.rb +82 -0
  306. data/util/estraier-search/ChangeLog +36 -0
  307. data/util/estraier-search/README.ja +114 -0
  308. data/util/estraier-search/en/estraier-register.rb +3 -0
  309. data/util/estraier-search/estraier-register.rb +298 -0
  310. data/util/estraier-search/estraier-search.rb +273 -0
  311. data/util/estraier-search/estraier.rhtml +73 -0
  312. data/util/estraier-search/estraier.rxml +23 -0
  313. data/util/estraier-search/i.estraier.rhtml +31 -0
  314. data/util/estraier-search/ja/estraier-register.rb +3 -0
  315. data/util/image-gallery/README.ja +27 -0
  316. data/util/image-gallery/image-gallery.rb +523 -0
  317. data/util/image-gallery/image-gallery.rb.euc-jp +523 -0
  318. data/util/image-gallery/js/SmoothGallery/Changelog +52 -0
  319. data/util/image-gallery/js/SmoothGallery/css/ReMooz.css +186 -0
  320. data/util/image-gallery/js/SmoothGallery/css/img/carrow1.gif +0 -0
  321. data/util/image-gallery/js/SmoothGallery/css/img/carrow2.gif +0 -0
  322. data/util/image-gallery/js/SmoothGallery/css/img/closebox.gif +0 -0
  323. data/util/image-gallery/js/SmoothGallery/css/img/closebox.png +0 -0
  324. data/util/image-gallery/js/SmoothGallery/css/img/fleche1.gif +0 -0
  325. data/util/image-gallery/js/SmoothGallery/css/img/fleche1.png +0 -0
  326. data/util/image-gallery/js/SmoothGallery/css/img/fleche2.gif +0 -0
  327. data/util/image-gallery/js/SmoothGallery/css/img/fleche2.png +0 -0
  328. data/util/image-gallery/js/SmoothGallery/css/img/loading-bar-black.gif +0 -0
  329. data/util/image-gallery/js/SmoothGallery/css/img/open.gif +0 -0
  330. data/util/image-gallery/js/SmoothGallery/css/img/open.png +0 -0
  331. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_e.png +0 -0
  332. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_n.png +0 -0
  333. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_ne.png +0 -0
  334. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_nw.png +0 -0
  335. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_s.png +0 -0
  336. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_se.png +0 -0
  337. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_sw.png +0 -0
  338. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_w.png +0 -0
  339. data/util/image-gallery/js/SmoothGallery/css/img/spinner.gif +0 -0
  340. data/util/image-gallery/js/SmoothGallery/css/jd.gallery.css +371 -0
  341. data/util/image-gallery/js/SmoothGallery/css/layout.css +91 -0
  342. data/util/image-gallery/js/SmoothGallery/license.txt +621 -0
  343. data/util/image-gallery/js/SmoothGallery/resizer.php +113 -0
  344. data/util/image-gallery/js/SmoothGallery/scripts/Changelog +52 -0
  345. data/util/image-gallery/js/SmoothGallery/scripts/History.Routing.js +126 -0
  346. data/util/image-gallery/js/SmoothGallery/scripts/History.js +109 -0
  347. data/util/image-gallery/js/SmoothGallery/scripts/ReMooz.js +364 -0
  348. data/util/image-gallery/js/SmoothGallery/scripts/jd.gallery.js +843 -0
  349. data/util/image-gallery/js/SmoothGallery/scripts/jd.gallery.set.js +183 -0
  350. data/util/image-gallery/js/SmoothGallery/scripts/jd.gallery.transitions.js +90 -0
  351. data/util/image-gallery/js/SmoothGallery/scripts/jdgalleryresize.js +828 -0
  352. data/util/image-gallery/js/SmoothGallery/scripts/license.txt +621 -0
  353. data/util/image-gallery/js/SmoothGallery/scripts/mootools-1.2-more.js +103 -0
  354. data/util/image-gallery/js/SmoothGallery/scripts/mootools-1.2.1-core-yc.js +349 -0
  355. data/util/image-gallery/js/SmoothGallery/scripts/resizer.php +113 -0
  356. data/util/image-gallery/misc/plugin/recent_image.rb +406 -0
  357. data/util/image-gallery/skel/gallery.rhtml +154 -0
  358. data/util/image-gallery/skel/gallery.rhtml.euc-jp +154 -0
  359. data/util/image-gallery/tdiary.conf.igsample +8 -0
  360. data/util/image-gallery/theme/image-gallery.css +85 -0
  361. data/util/image2flickr.rb +282 -0
  362. data/util/posttdiary/README.ja +12 -0
  363. data/util/posttdiary/posttdiary-ex.rb +1155 -0
  364. data/util/posttdiary/posttdiary.rb +245 -0
  365. data/util/rast-search/ChangeLog +55 -0
  366. data/util/rast-search/README.ja +99 -0
  367. data/util/rast-search/en/rast-register.rb +3 -0
  368. data/util/rast-search/i.rast.rhtml +33 -0
  369. data/util/rast-search/ja/rast-register.rb +3 -0
  370. data/util/rast-search/rast-register.rb +326 -0
  371. data/util/rast-search/rast-search.rb +249 -0
  372. data/util/rast-search/rast.rhtml +66 -0
  373. data/util/rast-search/rast.rxml +21 -0
  374. data/util/section_link/README +11 -0
  375. data/util/section_link/misc/plugin/section_link.rb +68 -0
  376. data/util/section_link/misc/plugin/section_link_anchor.rb +38 -0
  377. data/util/section_link/tdiary/tdiary_day_ext.rb +21 -0
  378. data/util/section_link/tdiary/tdiaryext_style.rb +36 -0
  379. data/util/section_link/tdiary/wikiext_style.rb +36 -0
  380. data/util/tdiary-for-ruby1.9/compatible.rb +97 -0
  381. data/util/tdiary-for-ruby1.9/tdiary-2.2.0.patch +98 -0
  382. data/util/tdiary-for-ruby1.9/tdiary-2.3.1.patch +212 -0
  383. data/util/tdiary-grep/README +4 -0
  384. data/util/tdiary-grep/grep.rb +445 -0
  385. data/util/tdiary-mode/http.el +130 -0
  386. data/util/tdiary-mode/tdiary-mode.el +613 -0
  387. data/util/tdiary-vim/ChangeLog +25 -0
  388. data/util/tdiary-vim/README +60 -0
  389. data/util/tdiary-vim/tdiary.vim +350 -0
  390. data/util/tdiarysearch/README.en +53 -0
  391. data/util/tdiarysearch/README.ja +99 -0
  392. data/util/tdiarysearch/search.rb +504 -0
  393. metadata +497 -0
@@ -0,0 +1,59 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2011, KADO Masanori <kdmsnr@gmail.com>
3
+ # You can redistribute it and/or modify it under GPL.
4
+
5
+ add_header_proc do
6
+ <<-HTML
7
+ <meta property="fb:admins" content="#{h @conf['facebook_comments.YOUR_FACEBOOK_USER_ID']}"/>
8
+ <meta property="fb:app_id" content="#{h @conf['facebook_comments.YOUR_APPLICATION_ID']}">
9
+ HTML
10
+ end
11
+
12
+ def facebook_comments(href = '')
13
+ <<-HTML
14
+ <div id="fb-root"></div><script src="http://connect.facebook.net/ja_JP/all.js#appId=#{h @conf['facebook_comments.YOUR_APPLICATION_ID']}&amp;xfbml=1"></script><fb:comments href="#{h href}" num_posts="#{h @conf['facebook_comments.num_posts']}" width="#{h @conf['facebook_comments.width']}"></fb:comments>
15
+ HTML
16
+ end
17
+
18
+ add_body_leave_proc do |date|
19
+ if @mode == 'day'
20
+ href = @conf.base_url + anchor( @date.strftime('%Y%m%d') )
21
+ facebook_comments(href)
22
+ end
23
+ end
24
+
25
+ add_conf_proc( 'Facebook Comments', 'Facebook Comments', 'etc' ) do
26
+ if @mode == 'saveconf' then
27
+ @conf['facebook_comments.YOUR_FACEBOOK_USER_ID'] =
28
+ @cgi.params['facebook_comments.YOUR_FACEBOOK_USER_ID'][0]
29
+ @conf['facebook_comments.YOUR_APPLICATION_ID'] =
30
+ @cgi.params['facebook_comments.YOUR_APPLICATION_ID'][0]
31
+ @conf['facebook_comments.num_posts'] =
32
+ @cgi.params['facebook_comments.num_posts'][0]
33
+ @conf['facebook_comments.width'] =
34
+ @cgi.params['facebook_comments.width'][0]
35
+ end
36
+
37
+ <<-HTML
38
+ <h3>YOUR_FACEBOOK_USER_ID</h3>
39
+ <p><input size="88" name="facebook_comments.YOUR_FACEBOOK_USER_ID" value="#{h @conf['facebook_comments.YOUR_FACEBOOK_USER_ID']}"></p>
40
+
41
+ <h3>YOUR_APPLICATION_ID</h3>
42
+ <p><input size="88" name="facebook_comments.YOUR_APPLICATION_ID" value="#{h @conf['facebook_comments.YOUR_APPLICATION_ID']}"></p>
43
+
44
+ <h3>num posts</h3>
45
+ <p><input size="20" name="facebook_comments.num_posts" value="#{h @conf['facebook_comments.num_posts']}"></p>
46
+
47
+ <h3>width</h3>
48
+ <p><input size="20" name="facebook_comments.width" value="#{h @conf['facebook_comments.width']}"></p>
49
+ HTML
50
+ end
51
+
52
+ # Local Variables:
53
+ # mode: ruby
54
+ # indent-tabs-mode: t
55
+ # tab-width: 3
56
+ # ruby-indent-level: 3
57
+ # End:
58
+ # vim: ts=3
59
+
data/plugin/flickr.rb ADDED
@@ -0,0 +1,209 @@
1
+ # show photo image on Flickr.com
2
+ #
3
+ # usage:
4
+ # flickr(photo_id[, size[, place]])
5
+ # - photo_id: The id of the photo to show.
6
+ # - size: Size of photo. (optional)
7
+ # Choose from square, thumbnail, small, medium, or large.
8
+ # - place: class name of img element. default is 'flickr'.
9
+ #
10
+ # flickr_left(photo_id[, size])
11
+ #
12
+ # flickr_right(photo_id[, size])
13
+ #
14
+ # options configurable through settings:
15
+ # @conf['flickr.apikey'] : a key for access Flickr API
16
+ # @conf['flickr.default_size'] : default image size
17
+ #
18
+ # Copyright (c) MATSUOKA Kohei <http://www.machu.jp/>
19
+ # Distributed under the GPL
20
+ #
21
+ require 'net/http'
22
+ require 'digest/md5'
23
+ require 'rexml/document'
24
+
25
+ @conf['flickr.apikey'] ||= 'f7e7fb8cc34e52db3e5af5e1727d0c0b'
26
+ @conf['flickr.default_size'] ||= 'medium'
27
+
28
+ if /\A(form|edit|preview|showcomment)\z/ === @mode then
29
+ enable_js('flickr.js')
30
+ add_js_setting('$tDiary.plugin.flickr')
31
+ add_js_setting('$tDiary.plugin.flickr.apiKey', %Q|'#{@conf['flickr.apikey']}'|)
32
+ add_js_setting('$tDiary.plugin.flickr.userId', %Q|'#{@conf['flickr.user_id']}'|)
33
+ end
34
+
35
+ def flickr(photo_id, size = nil, place = 'flickr')
36
+ if @conf['flickr.apikey'] == nil || @conf['flickr.apikey'].empty?
37
+ return '[ERROR] flickr.rb: API Key is not specified.'
38
+ end
39
+ size ||= @conf['flickr.default_size']
40
+ size = 'small' if @conf.iphone?
41
+ photo = flickr_photo_info(photo_id.to_s, size)
42
+ unless photo
43
+ return '[ERROR] flickr.rb: failed to get photo.'
44
+ end
45
+
46
+ if @cgi.mobile_agent?
47
+ body = %Q|<a href="#{photo[:src]}" class="flickr">#{photo[:title]}</a>|
48
+ else
49
+ body = %Q|<a href="#{photo[:page]}" class="flickr"><img title="#{photo[:title]}" alt="#{photo[:title]}" src="#{photo[:src]}" class="#{place}"|
50
+ unless @conf.iphone?
51
+ body << %Q| width="#{photo[:width]}"| if photo[:width]
52
+ body << %Q| height="#{photo[:height]}"| if photo[:height]
53
+ end
54
+ body << %Q|></a>|
55
+ end
56
+
57
+ body
58
+ end
59
+
60
+ def flickr_left(photo_id, size = nil)
61
+ flickr(photo_id, size, 'left')
62
+ end
63
+
64
+ def flickr_right(photo_id, size = nil)
65
+ flickr(photo_id, size, 'right')
66
+ end
67
+
68
+ def flickr_photo_info(photo_id, size)
69
+ photo = {}
70
+
71
+ begin
72
+ flickr_open('flickr.photos.getInfo', photo_id) {|f|
73
+ res = REXML::Document.new(f)
74
+ photo[:page] = res.elements['//rsp/photo/urls/url'].text
75
+ photo[:title] = res.elements['//rsp/photo/title'].text
76
+ }
77
+ flickr_open('flickr.photos.getSizes', photo_id) {|f|
78
+ res = REXML::Document.new(f)
79
+ res.elements.each('//rsp/sizes/size') do |s|
80
+ if s.attributes['label'].downcase == size.downcase
81
+ photo[:src] = s.attributes['source']
82
+ photo[:width] = s.attributes['width']
83
+ photo[:height] = s.attributes['height']
84
+ end
85
+ end
86
+ }
87
+ rescue Exception => e
88
+ return nil
89
+ end
90
+ photo
91
+ end
92
+
93
+ def flickr_open(method, photo_id)
94
+ cache_dir = "#{@cache_path}/flickr"
95
+ Dir::mkdir(cache_dir) unless File::directory?(cache_dir)
96
+
97
+ file = "#{cache_dir}/#{photo_id}.#{method}"
98
+ unless File.exist?(file)
99
+ req = Flickr::Request.new(@conf['flickr.apikey'])
100
+ req['method'] = method
101
+ req['photo_id'] = photo_id
102
+ begin
103
+ timeout(5) do
104
+ open(file, 'w') {|fout|
105
+ fout.puts req.open
106
+ }
107
+ end
108
+ rescue TimeoutError => e
109
+ File.delete(file)
110
+ raise e
111
+ end
112
+ end
113
+ open(file) {|f| yield f }
114
+ end
115
+
116
+ # delete cache files
117
+ def flickr_clear_cache
118
+ cache_dir = "#{@cache_path}/flickr"
119
+ Dir.glob("#{cache_dir}/*.flickr.photos.{getInfo,getSizes}") do |cache|
120
+ # File.unlink(cache)
121
+ File.rename(cache, "#{cache}.org")
122
+ end
123
+ end
124
+
125
+ FLICKER_FORM_PID = 'plugin_flickr_pid'
126
+ add_edit_proc do |date|
127
+ <<-FORM
128
+ <div id="flickr_form" style="margin: 1em 0">
129
+ <div>
130
+ Flickr: <input type="text" id="flickr_search_text">
131
+ <select id="flickr_search_count">
132
+ <option value="10">10</option>
133
+ <option value="20">20</option>
134
+ <option value="30">30</option>
135
+ <option value="40">40</option>
136
+ <option value="50">50</option>
137
+ </select>
138
+
139
+ <input id="flickr_search" type="button" value="Get flickr photos"></input>
140
+ </div>
141
+ <div id="flickr_photo_size">
142
+ Photo size:
143
+ <input type="radio" id="flickr_photo_size_square" name="flickr_photo_size" value="square">
144
+ <label for="flickr_photo_size_square">square</label>
145
+ <input type="radio" id="flickr_photo_size_thumbnail" name="flickr_photo_size" value="thumbnail">
146
+ <label for="flickr_photo_size_thumbnail">thumbnail</label>
147
+ <input type="radio" id="flickr_photo_size_small" name="flickr_photo_size" value="small">
148
+ <label for="flickr_photo_size_small">small</label>
149
+ <input type="radio" id="flickr_photo_size_medium" name="flickr_photo_size" value="medium" checked="true">
150
+ <label for="flickr_photo_size_medium">medium</label>
151
+ <input type="radio" id="flickr_photo_size_medium640" name="flickr_photo_size" value="medium 640">
152
+ <label for="flickr_photo_size_medium640">medium 640</label>
153
+ <input type="radio" id="flickr_photo_size_large" name="flickr_photo_size" value="large">
154
+ <label for="flickr_photo_size_large">large</label>
155
+ </div>
156
+ <div id="flickr_photos" style="margin: 1em">
157
+ <!-- <img src="dummy" height="100" width="100" title="dummy"> -->
158
+ </div>
159
+ </div>
160
+ FORM
161
+ end
162
+
163
+ def flickr_slideshow(tag, id = nil)
164
+ id ||= @conf['flickr.id']
165
+ return unless id
166
+ %Q|<iframe align="center" src="http://www.flickr.com/slideShow/index.gne?user_id=#{id}&amp;tags=#{tag}" frameBorder="0" width="500" scrolling="no" height="500"></iframe>|
167
+ end
168
+
169
+ def flickr_slideshow_by_set(set_id)
170
+ return unless set_id
171
+ %Q|<iframe align="center" src="http://www.flickr.com/slideShow/index.gne?set_id=#{set_id}" frameBorder="0" width="500" scrolling="no" height="500"></iframe>|
172
+ end
173
+
174
+ module Flickr
175
+ class Request < Hash
176
+ def initialize(api_key, secret = nil)
177
+ self['api_key'] = api_key
178
+ @secret = secret
179
+ end
180
+
181
+ def open
182
+ Net::HTTP.version_1_2
183
+ Net::HTTP.start('www.flickr.com') {|http|
184
+ response = http.get(query)
185
+ response.body
186
+ }
187
+ end
188
+
189
+ def query
190
+ sign = @secret ? "&api_sig=#{signature}" : ''
191
+ base_path + sort.map{|key, val| "#{key}=#{val}" }.join('&') + sign
192
+ end
193
+
194
+ def signature
195
+ data = sort.map{|key, val| "#{key}#{val}" }.join
196
+ Digest::MD5.hexdigest("#{@secret}#{data}")
197
+ end
198
+
199
+ def base_path
200
+ '/services/rest/?'
201
+ end
202
+ end
203
+
204
+ class RequestAuth < Request
205
+ def base_path
206
+ '/services/auth/?'
207
+ end
208
+ end
209
+ end
data/plugin/gist.rb ADDED
@@ -0,0 +1,16 @@
1
+ # show code snippet via gist.github.com
2
+ #
3
+ # usage:
4
+ # gist(gist_id)
5
+ # - gist_id: The id of the code snippet on gitst.github.com (e.g. 2056 for http://gist.github.com/2056)
6
+ #
7
+ # Copyright (c) KAKUTANI Shintaro <http://kakutani.com/>
8
+ # Distributed under the GPL
9
+
10
+ def gist( gist_id )
11
+ gist_snippet_url = "http://gist.github.com/#{gist_id}"
12
+ return (<<-EOS).chomp
13
+ <div class="gist_plugin"><script src="#{gist_snippet_url}.js"></script>
14
+ <noscript><a href="#{gist_snippet_url}">gist:#{gist_id}</a></noscript></div>
15
+ EOS
16
+ end
@@ -0,0 +1,240 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+ # git-register.rb
4
+ #
5
+ # Copyright (C) 2011 hajime miyauchi <hajime.miyauchi@gmail.com>
6
+ # You can redistribute it and/or modify it under GPL2.
7
+ #
8
+ # tDiaryのデータを日別でGitに登録するプラグインです
9
+ #
10
+ # 1. プラグインディレクトリ(例: plugin)にgit-register.rbを設置。
11
+ # 2. プラグインディレクトリにja/git-register.rb、en/git-register.rbを設置。
12
+ # 3. tdiary.confにリポジトリを指定(リポジトリの場所を/var/git-respoと仮定)
13
+ # @options["git.repository_dir"] = "/var/git-repos"
14
+ # 4. リポジトリを作成(Apacheの起動ユーザをapacheと仮定)
15
+ # $ mkdir /var/git-repos
16
+ # $ cd /var/git-repos
17
+ # $ git init
18
+ # $ git config user.name "自分の名前"
19
+ # $ git config user.email "メールアドレス"
20
+ # $ chown apache.apache -R /var/git-repos
21
+ # 5. リポジトリに一括commit(tDiaryのインストールディレクトリを/var/www/tdiaryと仮定)
22
+ # $ cd /var/www/tdiary
23
+ # $ ruby --encoding=UTF-8 git-register.rb
24
+ #
25
+
26
+ mode = ""
27
+ if $0 == __FILE__
28
+ require 'cgi'
29
+ ARGV << '' # dummy argument against cgi.rb offline mode.
30
+ @cgi = CGI::new
31
+ mode = "CMD"
32
+ else
33
+ mode = "PLUGIN"
34
+ end
35
+
36
+ if mode == "PLUGIN"
37
+ add_body_leave_proc do |date|
38
+ end
39
+ end
40
+
41
+ unless $tdiary_git_register_loaded
42
+ $tdiary_git_register_loaded ||= true
43
+
44
+ if mode == "CMD"
45
+ tdiary_path = "."
46
+ tdiary_conf = "."
47
+ $stdout.sync = true
48
+
49
+ def usage
50
+ puts "git-register.rb"
51
+ puts " register to git index files from tDiary's database."
52
+ puts " usage: ruby --encoding=UTF-8 git-register.rb [-p <tDiary directory>] [-c <tdiary.conf directory>]"
53
+ exit
54
+ end
55
+
56
+ require 'getoptlong'
57
+ parser = GetoptLong::new
58
+ parser.set_options(['--path', '-p', GetoptLong::REQUIRED_ARGUMENT], ['--conf', '-c', GetoptLong::REQUIRED_ARGUMENT])
59
+ begin
60
+ parser.each do |opt, arg|
61
+ case opt
62
+ when '--path'
63
+ tdiary_path = arg
64
+ when '--conf'
65
+ tdiary_conf = arg
66
+ end
67
+ end
68
+ rescue
69
+ usage
70
+ exit( 1 )
71
+ end
72
+
73
+ tdiary_conf = tdiary_path unless tdiary_conf
74
+ Dir::chdir( tdiary_conf )
75
+
76
+ begin
77
+ $:.unshift tdiary_path
78
+ require "#{tdiary_path}/tdiary"
79
+ rescue LoadError
80
+ $stderr.puts "git-register.rb: cannot load tdiary.rb. <#{tdiary_path}/tdiary>\n"
81
+ $stderr.puts " usage: ruby --encoding=UTF-8 git-register.rb [-p <tDiary directory>] [-c <tdiary.conf directory>]"
82
+ exit( 1 )
83
+ end
84
+ end
85
+
86
+ module ::TDiary
87
+ #
88
+ # Register
89
+ #
90
+ class GitRegister < TDiaryBase
91
+ def initialize(repository_dir, diary)
92
+ @repository_dir = repository_dir
93
+ @diary = diary
94
+ @date = diary.date
95
+ end
96
+
97
+ def execute()
98
+ dir = @date.strftime("#{@repository_dir}%Y%m/")
99
+ Dir::mkdir( dir ) unless FileTest::directory?( dir )
100
+
101
+ td2_file = @date.strftime("#{dir}%Y%m%d.td2")
102
+ fh = File::open(td2_file, 'w')
103
+
104
+ fh.puts( "Date: #{@date}" )
105
+ fh.puts( "Title: #{@diary.title}" )
106
+ fh.puts( "Last-Modified: #{@diary.last_modified.to_i}" )
107
+ fh.puts( "Visible: #{@diary.visible? ? 'true' : 'false'}" )
108
+ fh.puts( "Format: #{@diary.style}" )
109
+ fh.puts
110
+ fh.puts( @diary.to_src.gsub( /\r/, '' ).gsub( /\n\./, "\n.." ) )
111
+
112
+ fh.close
113
+
114
+ # commit
115
+ require 'shellwords'
116
+
117
+ msg = "#{ENV['REMOTE_ADDR']} - #{ENV['REMOTE_HOST']}"
118
+
119
+ Dir.chdir("#{@repository_dir}") do
120
+ td2_file2 = @date.strftime("%Y%m/%Y%m%d.td2")
121
+ system("git add -- #{Shellwords.shellescape(td2_file2)}".untaint)
122
+ system("git commit -q -m \"#{msg}\" -- #{Shellwords.shellescape(td2_file2)}".untaint)
123
+ end
124
+ end
125
+
126
+ protected
127
+
128
+ def mode; 'day'; end
129
+ def cookie_name; ''; end
130
+ def cookie_mail; ''; end
131
+
132
+ def convert(str)
133
+ str
134
+ end
135
+ end
136
+
137
+ #
138
+ # Main
139
+ #
140
+ class GitRegisterMain < TDiaryBase
141
+ def initialize(conf)
142
+ super(CGI::new, 'day.rhtml', conf)
143
+ end
144
+
145
+ def execute(out = $stdout)
146
+ require 'fileutils'
147
+ repository_dir = @conf['git.repository_dir']
148
+ calendar
149
+ @years.keys.sort.reverse_each do |year|
150
+ out << "(#{year.to_s}/) "
151
+ @years[year.to_s].sort.reverse_each do |month|
152
+ @io.transaction(Time::local(year.to_i, month.to_i)) do |diaries|
153
+ diaries.sort.reverse_each do |day, diary|
154
+ out << diary.date.strftime('%m%d ')
155
+ GitRegister.new(repository_dir, diary).execute
156
+ end
157
+ false
158
+ end
159
+ end
160
+ end
161
+ end
162
+ end
163
+ end
164
+
165
+ if mode == "CMD"
166
+ begin
167
+ require 'cgi'
168
+ if TDiary::Config.instance_method(:initialize).arity != 0
169
+ # for tDiary 2.1 or later
170
+ cgi = CGI.new
171
+ conf = TDiary::Config::new(cgi)
172
+ else
173
+ # for tDiary 2.0 or earlier
174
+ conf = TDiary::Config::new
175
+ end
176
+ conf.header = ''
177
+ conf.footer = ''
178
+ conf.show_comment = true
179
+ conf.hide_comment_form = true
180
+ conf.show_nyear = false
181
+ def conf.bot?; true; end
182
+ TDiary::GitRegisterMain.new(conf).execute
183
+ rescue
184
+ print $!, "\n"
185
+ $@.each do |v|
186
+ print v, "\n"
187
+ end
188
+ exit( 1 )
189
+ end
190
+
191
+ puts
192
+ else
193
+ add_update_proc do
194
+ conf = @conf.clone
195
+ conf.header = ''
196
+ conf.footer = ''
197
+ conf.show_comment = true
198
+ conf.hide_comment_form = true
199
+ conf.show_nyear = false
200
+ def conf.bot?; true; end
201
+
202
+ repository_dir = @conf['git.repository_dir']
203
+ diary = @diaries[@date.strftime('%Y%m%d')]
204
+
205
+ TDiary::GitRegister.new(repository_dir, diary).execute
206
+ end
207
+
208
+ if !@conf['git.hideconf'] && (@mode == 'conf' || @mode == 'saveconf')
209
+ args = ['git_register', @git_register_conf_label]
210
+ args << 'update' if TDIARY_VERSION > '2.1.3'
211
+ add_conf_proc(*args) do
212
+ str = <<-HTML
213
+ <h3 class="subtitle">#{@git_register_conf_header}</h3>
214
+ <p>
215
+ <label for="git_register_rebuild"><input id="git_register_rebuild" type="checkbox" name="git_register_rebuild" value="1">
216
+ #{@git_register_conf_description}</label>
217
+ </p>
218
+ HTML
219
+ if @mode == 'saveconf'
220
+ if @cgi.valid?( 'git_register_rebuild' )
221
+ str << '<p>The following diaries were registered.</p>'
222
+ out = ''
223
+ TDiary::GitRegisterMain.new(@conf).execute(out)
224
+ str << "<p>#{out}</p>"
225
+ end
226
+ end
227
+ str
228
+ end
229
+ end
230
+ end
231
+
232
+ end # $tdiary_git_register_loaded
233
+
234
+ # Local Variables:
235
+ # mode: ruby
236
+ # indent-tabs-mode: t
237
+ # tab-width: 3
238
+ # ruby-indent-level: 3
239
+ # End:
240
+
@@ -0,0 +1,27 @@
1
+ # Github Badge, by drnic plugin.
2
+ # http://drnicjavascript.rubyforge.org/github_badge/
3
+ #
4
+ # usage:
5
+ # github_badge(username, list_length, head, theme, title, show_all)
6
+ # - username: user name on github.com
7
+ # - list_length: project list length
8
+ # - theme: specify theme for badge. "white" or "black".
9
+ # - title: top text display on the badge.
10
+ # - show_all: 'Show All' message.
11
+ #
12
+ # Copyright (c) 2008 KAKUTANI Shintaro <http://kakutani.com/>
13
+ # Distributed under the GPL
14
+
15
+ def github_badge( username, list_length = 10, head = "div", theme = "white", title = "My Projects", show_all = "Show all" )
16
+ return (<<-EOS).chomp
17
+ <div id="github-badge"></div>
18
+ <script type="text/javascript" charset="utf-8">
19
+ GITHUB_USERNAME="#{ username }";
20
+ GITHUB_LIST_LENGTH=#{ list_length };
21
+ GITHUB_THEME="#{ theme }";
22
+ GITHUB_TITLE="#{ title }"
23
+ GITHUB_SHOW_ALL = "#{ show_all }"
24
+ </script>
25
+ <script src="http://drnicjavascript.rubyforge.org/github_badge/dist/github-badge-launcher.js" type="text/javascript"></script>
26
+ EOS
27
+ end
@@ -0,0 +1,9 @@
1
+ def gh_link(gh_identifier, text=nil)
2
+ text = gh_identifier.split('/').last if text.nil?
3
+ id_and_name, number = gh_identifier.split('#')
4
+
5
+ url = "https://github.com/#{id_and_name}"
6
+ url = url + "/issues/#{number}" if number
7
+
8
+ "<a href='#{url}'>#{h text}</a>"
9
+ end
data/plugin/goo_gl.rb ADDED
@@ -0,0 +1,42 @@
1
+ #
2
+ # goo_gl.rb - shorten URL by goo.gl
3
+ #
4
+ # usage: shorten_url_you_got = goo_gl( 'long_url' ) || long_url
5
+ #
6
+ # Copyright (C) 2011, tamoot <tamoot+tdiary@gmail.com>
7
+ # You can redistribute it and/or modify it under GPL.
8
+ #
9
+
10
+ require 'json'
11
+ require 'net/https'
12
+
13
+ def goo_gl( long_url )
14
+ return nil if !long_url or long_url.empty?
15
+
16
+ # on memory
17
+ @goo_gl_cache ||= {} # cached only on memory
18
+ return @goo_gl_cache[long_url] if @goo_gl_cache[long_url]
19
+
20
+ # proxy
21
+ px_host, px_port = (@conf['proxy'] || '').split( /:/ )
22
+ px_port = 80 if px_host and !px_port
23
+
24
+ # params
25
+ params = {'longUrl' => long_url}.to_json
26
+
27
+ https = nil
28
+ begin
29
+ https = Net::HTTP::Proxy(px_host, px_port).new('www.googleapis.com', 443)
30
+ https.use_ssl = true
31
+ res, body = https.post("/urlshortener/v1/url", params, {'Content-Type' => 'application/json'})
32
+ @goo_gl_cache[long_url] = JSON::parse(body)["id"] if res.code == '200'
33
+ rescue Exception => e
34
+ # do nothing..
35
+
36
+ ensure
37
+ https.finish if https && https.started?
38
+
39
+ end
40
+
41
+ return @goo_gl_cache[long_url]
42
+ end