<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>zhangky (Zhang Kai Yu)</title>
    <link>https://ruby-china.org/zhangky</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>推荐大家一个前端 query string 解析器</title>
      <description>&lt;p&gt;Ruby on Rails 用 rack 风格的 query string 解析，sinatra 也是，网上很多前端 query string 解析，然而很多不支持 rack 的格式。
于是我写了一个解析器，很轻量，叫做 Query String Parser
项目在这里：
&lt;a href="https://github.com/cheunghy/query-parser" rel="nofollow" target="_blank"&gt;https://github.com/cheunghy/query-parser&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;NPM 包地址：&lt;a href="https://www.npmjs.com/package/query-string-parser" rel="nofollow" target="_blank"&gt;https://www.npmjs.com/package/query-string-parser&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;如果有人有兴趣可以做一个 gem 封装。&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;paramObject&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;title&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Post 1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;tags&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;node&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;script&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;javascript&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;title&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Post 2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;tags&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;node&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;why&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;not&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;author&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Somebody&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Today&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nx"&gt;queryString&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;objectToQuery&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;paramObject&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;posts%5B%5D%5Btitle%5D=Post%201&amp;amp;posts%5B%5D%5Btags%5D%5B%5D=node&amp;amp;posts%5B%5D%5Btags%5D%5B%5D=script&amp;amp;posts%5B%5D%5Btags%5D%5B%5D=javascript&amp;amp;posts%5B%5D%5Btitle%5D=Post%202&amp;amp;posts%5B%5D%5Btags%5D%5B%5D=node&amp;amp;posts%5B%5D%5Btags%5D%5B%5D=why&amp;amp;posts%5B%5D%5Btags%5D%5B%5D=not&amp;amp;author=Somebody&amp;amp;date=Today&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="nf"&gt;parseQuery&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;queryString&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;And&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;object&lt;/span&gt; &lt;span class="nx"&gt;comes&lt;/span&gt; &lt;span class="nx"&gt;back&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>zhangky</author>
      <pubDate>Fri, 07 Aug 2015 20:56:43 +0800</pubDate>
      <link>https://ruby-china.org/topics/26821</link>
      <guid>https://ruby-china.org/topics/26821</guid>
    </item>
    <item>
      <title>召集伙伴一起开发 JS Native 开发框架</title>
      <description>&lt;p&gt;召集伙伴一起开发 js native 开发框架&lt;/p&gt;

&lt;p&gt;我来描述一下这个框架：&lt;/p&gt;

&lt;p&gt;使用这个框架可以写一份 js 代码，然后得到一个网页版应用，一个 iOS 应用，一个 OS X 应用，以后还会支持安卓，甚至 windows。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;这个框架包含一个 ruby 命令 helper，像 rails 那样的，有 rails new 这种命令。&lt;/li&gt;
&lt;li&gt;这个框架使用 coffeeScript 来作为网页端的主体。&lt;/li&gt;
&lt;li&gt;使用混合 Objective-C 跟 javaScript 来作为 iOS 及 OS X 端的主体。&lt;/li&gt;
&lt;li&gt;由于 Swift 缺少一些元编程特性，和过于新，所以使用 Objective-C。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;无论是网页，还是本地，用户的代码不会有区别。
网页端 follow 本地的 view 层级，而不是本地使用 css 来编程。&lt;/p&gt;

&lt;p&gt;地址，包括初期的代码：
&lt;a href="https://github.com/cheunghy/CocoaBean" rel="nofollow" target="_blank"&gt;https://github.com/cheunghy/CocoaBean&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;我会把更详细的信息更新在 github 项目的 wiki 中。&lt;/p&gt;

&lt;p&gt;如果想和我一起开发，请联系我。&lt;/p&gt;</description>
      <author>zhangky</author>
      <pubDate>Mon, 16 Mar 2015 16:48:03 +0800</pubDate>
      <link>https://ruby-china.org/topics/24678</link>
      <guid>https://ruby-china.org/topics/24678</guid>
    </item>
    <item>
      <title>一些關於 Ruby 4.2 的 dom testing</title>
      <description>&lt;p&gt;這個 Module，&lt;code&gt;ActionDispatch::Assertions::SelectorAssertions&lt;/code&gt;已經被移動到了
&lt;code&gt;Rails::Dom::Testing::Assertions::SelectorAssertions&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;其內部的實現也已轉移到 Nokogiri。&lt;/p&gt;

&lt;p&gt;在手動引入&lt;code&gt;assert_select&lt;/code&gt;的時候
不僅要修正 &lt;code&gt;include Rails::Dom::Testing::Assertions::SelectorAssertions&lt;/code&gt;
還要重新實現另外兩個方法：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;html_document&lt;/span&gt;
   &lt;span class="no"&gt;Nokogiri&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;HTML&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vi"&gt;@your_own_html_document&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 &lt;span class="k"&gt;end&lt;/span&gt;

 &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;document_root_element&lt;/span&gt;
   &lt;span class="n"&gt;html_document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;root&lt;/span&gt;
 &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>zhangky</author>
      <pubDate>Sun, 21 Dec 2014 11:07:02 +0800</pubDate>
      <link>https://ruby-china.org/topics/23310</link>
      <guid>https://ruby-china.org/topics/23310</guid>
    </item>
    <item>
      <title>省份和城市大家怎么设计的？</title>
      <description>&lt;p&gt;很多产品都有用户信息，一般会让用户选择自己所在国家，省份，城市，区县。&lt;/p&gt;

&lt;p&gt;大家各是怎么设计的？
放在数据库里面，还是其他地方？
如果是放在数据库里面，用户存储一个 id 指向省份，还是存储字符串？&lt;/p&gt;</description>
      <author>zhangky</author>
      <pubDate>Thu, 04 Dec 2014 11:03:49 +0800</pubDate>
      <link>https://ruby-china.org/topics/23018</link>
      <guid>https://ruby-china.org/topics/23018</guid>
    </item>
  </channel>
</rss>
