<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Neo&#039;s notes &#187; Ruby</title>
	<atom:link href="http://www.neocanable.com/category/ruby/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.neocanable.com</link>
	<description>记录一些琐碎的技术问题&#124;发泄胸中的各种不满</description>
	<lastBuildDate>Tue, 17 Jan 2012 05:37:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>thinking-sphinx的排序</title>
		<link>http://www.neocanable.com/thinking-sphinx-sor/</link>
		<comments>http://www.neocanable.com/thinking-sphinx-sor/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 13:59:20 +0000</pubDate>
		<dc:creator>Neo</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby On Rails]]></category>

		<guid isPermaLink="false">http://www.neocanable.com/?p=635</guid>
		<description><![CDATA[sphinx本身支持datetime、integer、float、string等类型的排序，但是thinking-sphinx在定义索引的时候给人造成的误区简直让人想骂娘！ indexes :accepted_id, :sortable =&#62; true 这行是假象，默认是用字符串排序，即使accepted_id 是整型的！ 正确写法 &#160;has :accepted_id, :type =&#62; :integer 这里声明accepted_id是个属性，支持integer类型的排序和索引！ 唉，看文档是王道啊]]></description>
			<content:encoded><![CDATA[<p>sphinx本身支持datetime、integer、float、string等类型的排序，但是thinking-sphinx在定义索引的时候给人造成的误区简直让人想骂娘！</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">indexes <span style="color:#ff3333; font-weight:bold;">:accepted_id</span>, <span style="color:#ff3333; font-weight:bold;">:sortable</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span></div></div>
<p>这行是假象，默认是用字符串排序，即使accepted_id 是整型的！</p>
<p>正确写法</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;has <span style="color:#ff3333; font-weight:bold;">:accepted_id</span>, <span style="color:#ff3333; font-weight:bold;">:type</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> :<span style="color:#CC0066; font-weight:bold;">integer</span></div></div>
<p>这里声明accepted_id是个属性，支持integer类型的排序和索引！</p>
<p>唉，看文档是王道啊</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neocanable.com/thinking-sphinx-sor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>commitments 承诺</title>
		<link>http://www.neocanable.com/commitments-%e6%89%bf%e8%af%ba/</link>
		<comments>http://www.neocanable.com/commitments-%e6%89%bf%e8%af%ba/#comments</comments>
		<pubDate>Fri, 18 Nov 2011 17:18:56 +0000</pubDate>
		<dc:creator>Neo</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.neocanable.com/?p=612</guid>
		<description><![CDATA[晚上读了读mysql2这个gem的代码，凌乱！ mysql的ruby client支持autocommit的设置，mysql的gem我没实验过 也不知道commit是通过commitments演化来的，还是 commitments是根据commit演化来的，但是从命名的风格和程序上来说，确实respect 承诺，如机器里面的二进制一般，不崩盘，不改本色]]></description>
			<content:encoded><![CDATA[<p>晚上读了读mysql2这个gem的代码，凌乱！<br />
mysql的ruby client支持autocommit的设置，mysql的gem我没实验过</p>
<p>也不知道commit是通过commitments演化来的，还是<br />
commitments是根据commit演化来的，但是从命名的风格和程序上来说，确实respect</p>
<p>承诺，如机器里面的二进制一般，不崩盘，不改本色</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neocanable.com/commitments-%e6%89%bf%e8%af%ba/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>resque使用</title>
		<link>http://www.neocanable.com/resque-usag/</link>
		<comments>http://www.neocanable.com/resque-usag/#comments</comments>
		<pubDate>Fri, 18 Nov 2011 17:03:38 +0000</pubDate>
		<dc:creator>Neo</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby On Rails]]></category>

		<guid isPermaLink="false">http://www.neocanable.com/?p=607</guid>
		<description><![CDATA[resque 是ruby和redis结合做的一个消息队列，稳定性和成熟性还有待考察，但是，用起来真是很爽 安装 gem install resque --no-ri --no-rdoc 或者rails3直接写到Gemfile里面，然后bundle install 在rails或者ruby 的app里导入项目，然后require到resque和job文件 执行rake resque:work QUEUE=&#8217;*'或者针对个别的job单独启动，用起来太舒服了！！！！！！ 不能忘了配置redis:) 案例 在app目录下建立jobs目录 在RAILS_ROOT/config/initializers/resque.rb中加入 &#160;Dir&#91;&#34;#{Rails.root}/app/jobs/*.rb&#34;&#93;.each &#123; &#124;file&#124; require file &#125; 建立一个可执行的ruby文件job1.rb class Job1 &#160; @queue = :job1 &#160; def self.perform&#40;arg&#41; &#160; &#160; &#160;p &#34;your code here!!!&#34; &#160; end end 执行 rake resque:work QUEUE='*' 可以看到&#8221;your code here!!!&#8221; 类的字符串输出]]></description>
			<content:encoded><![CDATA[<p>resque 是ruby和redis结合做的一个消息队列，稳定性和成熟性还有待考察，但是，用起来真是很爽</p>
<p>安装</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">gem install resque <span style="color:#006600; font-weight:bold;">--</span>no<span style="color:#006600; font-weight:bold;">-</span>ri <span style="color:#006600; font-weight:bold;">--</span>no<span style="color:#006600; font-weight:bold;">-</span>rdoc</div></div>
<p>或者rails3直接写到Gemfile里面，然后bundle install</p>
<p>在rails或者ruby 的app里导入项目，然后require到resque和job文件</p>
<p>执行rake resque:work QUEUE=&#8217;*'或者针对个别的job单独启动，用起来太舒服了！！！！！！<br />
不能忘了配置redis:)</p>
<p>案例</p>
<p>在app目录下建立jobs目录<br />
在RAILS_ROOT/config/initializers/resque.rb中加入</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;<span style="color:#CC00FF; font-weight:bold;">Dir</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;#{Rails.root}/app/jobs/*.rb&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">each</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">|</span>file<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#CC0066; font-weight:bold;">require</span> file <span style="color:#006600; font-weight:bold;">&#125;</span></div></div>
<p>建立一个可执行的ruby文件job1.rb</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#9966CC; font-weight:bold;">class</span> Job1<br />
&nbsp; <span style="color:#0066ff; font-weight:bold;">@queue</span> = <span style="color:#ff3333; font-weight:bold;">:job1</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">perform</span><span style="color:#006600; font-weight:bold;">&#40;</span>arg<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color:#CC0066; font-weight:bold;">p</span> <span style="color:#996600;">&quot;your code here!!!&quot;</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></div>
<p>执行</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">rake resque:work QUEUE=<span style="color:#996600;">'*'</span></div></div>
<p>可以看到&#8221;your code here!!!&#8221; 类的字符串输出</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neocanable.com/resque-usag/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ruby irb 中文乱码</title>
		<link>http://www.neocanable.com/ruby-irb-readline-support-on-mac-os/</link>
		<comments>http://www.neocanable.com/ruby-irb-readline-support-on-mac-os/#comments</comments>
		<pubDate>Sat, 27 Aug 2011 07:26:27 +0000</pubDate>
		<dc:creator>Neo</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.neocanable.com/?p=376</guid>
		<description><![CDATA[ruby版本： ruby1.9.2 系统： mac os 10.6 原因：irb输入中文不识别，fcker&#8217;s question! 解决方法： 下载readline6.1，当前最新的版本应该 解压，config,make, make install 安装完成后，就要去你的ruby目录下，如果用rvm,那么去： cd ~/.rvm/src/ruby-(version)/ext/readline 安装方式： ruby extconf.rb make &#038;&#038; make install ok]]></description>
			<content:encoded><![CDATA[<p>ruby版本： ruby1.9.2<br />
系统： mac os 10.6</p>
<p>原因：irb输入中文不识别，fcker&#8217;s question!</p>
<p>解决方法：</p>
<p>下载readline6.1，当前最新的版本应该<br />
解压，config,make, make install</p>
<p>安装完成后，就要去你的ruby目录下，如果用rvm,那么去：<br />
cd ~/.rvm/src/ruby-(version)/ext/readline</p>
<p>安装方式：<br />
ruby extconf.rb<br />
make &#038;&#038; make install</p>
<p>ok</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neocanable.com/ruby-irb-readline-support-on-mac-os/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>rails migration 独立使用</title>
		<link>http://www.neocanable.com/just-use-rails-migration/</link>
		<comments>http://www.neocanable.com/just-use-rails-migration/#comments</comments>
		<pubDate>Sat, 19 Mar 2011 11:51:23 +0000</pubDate>
		<dc:creator>Neo</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby On Rails]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.neocanable.com/?p=267</guid>
		<description><![CDATA[将migration的rake任务从rails里面抠出来!!! DB_ENV = &#34;development&#34; ROOT = File.expand_path&#40;File.dirname&#40;__FILE__&#41;&#41; database_config = File.expand_path&#40;File.dirname&#40;__FILE__&#41; + &#34;/database.yml&#34;&#41; log_path = File.expand_path&#40;File.dirname&#40;__FILE__&#41; + &#34;/migration.log&#34;&#41; namespace :db do &#160; task :environment =&#62; :load_config do &#160; &#160; ActiveRecord::Base.establish_connection&#40;YAML.load&#40;File.new&#40;database_config&#41;&#41;&#91;DB_ENV&#93;&#41; &#160; &#160; ActiveRecord::Base.logger = Logger.new&#40;log_path&#41; &#160; end &#160; task :load_config do &#160; &#160; require 'active_record' &#160; &#160; ActiveRecord::Base.configurations = YAML.load&#40;File.new&#40;database_config&#41;&#41; &#160; end &#160; desc '创建数据库' &#160; [...]]]></description>
			<content:encoded><![CDATA[<p><strong>将migration的rake任务从rails里面抠出来!!!</strong></p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">DB_ENV = <span style="color:#996600;">&quot;development&quot;</span><br />
ROOT = <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">expand_path</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">dirname</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">__FILE__</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
database_config = <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">expand_path</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">dirname</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">__FILE__</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#996600;">&quot;/database.yml&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
log_path = <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">expand_path</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">dirname</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">__FILE__</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#996600;">&quot;/migration.log&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
<br />
namespace <span style="color:#ff3333; font-weight:bold;">:db</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; task <span style="color:#ff3333; font-weight:bold;">:environment</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:load_config</span> <span style="color:#9966CC; font-weight:bold;">do</span> <br />
&nbsp; &nbsp; <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">establish_connection</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">YAML</span>.<span style="color:#CC0066; font-weight:bold;">load</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>database_config<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#91;</span>DB_ENV<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">logger</span> = <span style="color:#CC00FF; font-weight:bold;">Logger</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>log_path<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; task <span style="color:#ff3333; font-weight:bold;">:load_config</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'active_record'</span><br />
&nbsp; &nbsp; <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">configurations</span> = <span style="color:#CC00FF; font-weight:bold;">YAML</span>.<span style="color:#CC0066; font-weight:bold;">load</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>database_config<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; desc <span style="color:#996600;">'创建数据库'</span><br />
&nbsp; task <span style="color:#ff3333; font-weight:bold;">:create</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:load_config</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; create_database<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">configurations</span><span style="color:#006600; font-weight:bold;">&#91;</span>DB_ENV<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; desc <span style="color:#996600;">'删除数据库'</span><br />
&nbsp; task <span style="color:#ff3333; font-weight:bold;">:drop</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:load_config</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; config = <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">configurations</span><span style="color:#006600; font-weight:bold;">&#91;</span>DB_ENV<span style="color:#006600; font-weight:bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">begin</span><br />
&nbsp; &nbsp; &nbsp; drop_database<span style="color:#006600; font-weight:bold;">&#40;</span>config<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">rescue</span> <span style="color:#CC00FF; font-weight:bold;">Exception</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> e<br />
&nbsp; &nbsp; &nbsp; <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Couldn't drop #{config['database']} : #{e.inspect}&quot;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; desc <span style="color:#996600;">&quot;迁移数据库&quot;</span><br />
&nbsp; task <span style="color:#ff3333; font-weight:bold;">:migrate</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:environment</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Migration</span>.<span style="color:#9900CC;">verbose</span> = ENV<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;VERBOSE&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span> ? ENV<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;VERBOSE&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span> == <span style="color:#996600;">&quot;true&quot;</span> : <span style="color:#0000FF; font-weight:bold;">true</span><br />
&nbsp; &nbsp; <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Migrator</span>.<span style="color:#9900CC;">migrate</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;migrate&quot;</span>, ENV<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;VERSION&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span> ? ENV<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;VERSION&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">to_i</span> : <span style="color:#0000FF; font-weight:bold;">nil</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#6666ff; font-weight:bold;">Rake::Task</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;db:schema:dump&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">invoke</span> <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">schema_format</span> == <span style="color:#ff3333; font-weight:bold;">:ruby</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
<br />
&nbsp; desc <span style="color:#996600;">'重置数据库'</span><br />
&nbsp; task <span style="color:#ff3333; font-weight:bold;">:reset</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span> <span style="color:#996600;">'db:drop'</span>, <span style="color:#996600;">'db:setup'</span> <span style="color:#006600; font-weight:bold;">&#93;</span><br />
<br />
&nbsp; desc <span style="color:#996600;">'重置数据库并且执行seed'</span><br />
&nbsp; task <span style="color:#ff3333; font-weight:bold;">:setup</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span> <span style="color:#996600;">'db:create'</span>, <span style="color:#996600;">'db:schema:load'</span>, <span style="color:#996600;">'db:seed'</span> <span style="color:#006600; font-weight:bold;">&#93;</span><br />
<br />
&nbsp; desc <span style="color:#996600;">'执行 seed.rb'</span><br />
&nbsp; task <span style="color:#ff3333; font-weight:bold;">:seed</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:environment</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; seed_file = <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">expand_path</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">dirname</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">__FILE__</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#996600;">&quot;/seed.rb&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#CC0066; font-weight:bold;">load</span><span style="color:#006600; font-weight:bold;">&#40;</span>seed_file<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">exist</span>?<span style="color:#006600; font-weight:bold;">&#40;</span>seed_file<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; namespace <span style="color:#ff3333; font-weight:bold;">:schema</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; desc <span style="color:#996600;">&quot;创建schema.rb&quot;</span><br />
&nbsp; &nbsp; task <span style="color:#ff3333; font-weight:bold;">:dump</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:environment</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'active_record/schema_dumper'</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#CC0066; font-weight:bold;">open</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">expand_path</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">dirname</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">__FILE__</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#996600;">&quot;/schema.rb&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>, <span style="color:#996600;">&quot;wb&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>file<span style="color:#006600; font-weight:bold;">|</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#6666ff; font-weight:bold;">ActiveRecord::SchemaDumper</span>.<span style="color:#9900CC;">dump</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">connection</span>, file<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#6666ff; font-weight:bold;">Rake::Task</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;db:schema:dump&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">reenable</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; desc <span style="color:#996600;">&quot;load schema.rb到数据库&quot;</span><br />
&nbsp; &nbsp; task :<span style="color:#CC0066; font-weight:bold;">load</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:environment</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; file = <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">expand_path</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">dirname</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">__FILE__</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#996600;">&quot;/schema.rb&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">exists</span>?<span style="color:#006600; font-weight:bold;">&#40;</span>file<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#CC0066; font-weight:bold;">load</span><span style="color:#006600; font-weight:bold;">&#40;</span>file<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; abort <span style="color:#006600; font-weight:bold;">%</span><span style="color:#006600; font-weight:bold;">&#123;</span>error<span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; namespace <span style="color:#ff3333; font-weight:bold;">:structure</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; desc <span style="color:#996600;">&quot;导出sql文件&quot;</span><br />
&nbsp; &nbsp; task <span style="color:#ff3333; font-weight:bold;">:dump</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:environment</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; abcs = <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">configurations</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">case</span> abcs<span style="color:#006600; font-weight:bold;">&#91;</span>DB_ENV<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;adapter&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">when</span> <span style="color:#996600;">&quot;mysql&quot;</span>, <span style="color:#996600;">&quot;oci&quot;</span>, <span style="color:#996600;">&quot;oracle&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">establish_connection</span><span style="color:#006600; font-weight:bold;">&#40;</span>abcs<span style="color:#006600; font-weight:bold;">&#91;</span>DB_ENV<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#CC0066; font-weight:bold;">open</span><span style="color:#006600; font-weight:bold;">&#40;</span>ROOT <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#996600;">&quot;/#{DB_ENV}_structure.sql&quot;</span>, <span style="color:#996600;">&quot;wb&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>f<span style="color:#006600; font-weight:bold;">|</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; f <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">connection</span>.<span style="color:#9900CC;">structure_dump</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#CC0066; font-weight:bold;">raise</span> <span style="color:#996600;">&quot;不支持数据库类型： '#{abcs[&quot;</span>test<span style="color:#996600;">&quot;][&quot;</span>adapter<span style="color:#996600;">&quot;]}'&quot;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">connection</span>.<span style="color:#9900CC;">supports_migrations</span>?<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#CC0066; font-weight:bold;">open</span><span style="color:#006600; font-weight:bold;">&#40;</span>ROOT <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#996600;">&quot;/#{DB_ENV}_structure.sql&quot;</span>, <span style="color:#996600;">&quot;a&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>f<span style="color:#006600; font-weight:bold;">|</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; f <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">connection</span>.<span style="color:#9900CC;">dump_schema_information</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
<span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
<span style="color:#9966CC; font-weight:bold;">def</span> drop_database<span style="color:#006600; font-weight:bold;">&#40;</span>config<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">case</span> config<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'adapter'</span><span style="color:#006600; font-weight:bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">when</span> <span style="color:#996600;">'mysql'</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">establish_connection</span><span style="color:#006600; font-weight:bold;">&#40;</span>config<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">connection</span>.<span style="color:#9900CC;">drop_database</span> config<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'database'</span><span style="color:#006600; font-weight:bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">else</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#ff6633; font-weight:bold;">$stderr</span>.<span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;删除数据库出错&quot;</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
<span style="color:#9966CC; font-weight:bold;">def</span> create_database<span style="color:#006600; font-weight:bold;">&#40;</span>config<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">case</span> config<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'adapter'</span><span style="color:#006600; font-weight:bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">when</span> <span style="color:#996600;">'mysql'</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@charset</span> &nbsp; = <span style="color:#996600;">'utf8'</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@collation</span> = <span style="color:#996600;">'utf8_unicode_ci'</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">begin</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">establish_connection</span><span style="color:#006600; font-weight:bold;">&#40;</span>config.<span style="color:#9900CC;">merge</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'database'</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">nil</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">connection</span>.<span style="color:#9900CC;">create_database</span><span style="color:#006600; font-weight:bold;">&#40;</span>config<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'database'</span><span style="color:#006600; font-weight:bold;">&#93;</span>, <span style="color:#ff3333; font-weight:bold;">:charset</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#40;</span>@charset<span style="color:#006600; font-weight:bold;">&#41;</span>, <span style="color:#ff3333; font-weight:bold;">:collation</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#40;</span>@collation<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">establish_connection</span><span style="color:#006600; font-weight:bold;">&#40;</span>config<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">rescue</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#ff6633; font-weight:bold;">$stderr</span>.<span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;创建数据库出错&quot;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">else</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#ff6633; font-weight:bold;">$stderr</span>.<span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;擦,就支持mysql&quot;</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></div>
<p>目录结构</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">.<br />
<span style="color: #000000; font-weight: bold;">|</span>-- Rakefile<br />
<span style="color: #000000; font-weight: bold;">|</span>-- database.yml<br />
<span style="color: #000000; font-weight: bold;">|</span>-- migrate<br />
<span style="color: #000000; font-weight: bold;">|</span> &nbsp; <span style="color: #000000; font-weight: bold;">`</span>-- <span style="color: #000000;">20110124014258</span>_old_version.rb<br />
<span style="color: #000000; font-weight: bold;">|</span> &nbsp; <span style="color: #000000; font-weight: bold;">`</span>-- <span style="color: #000000;">20110124014259</span>_old_version.rb<br />
<span style="color: #000000; font-weight: bold;">`</span>-- schema.rb</div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.neocanable.com/just-use-rails-migration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ruby method before filters</title>
		<link>http://www.neocanable.com/ruby-method-before-filters/</link>
		<comments>http://www.neocanable.com/ruby-method-before-filters/#comments</comments>
		<pubDate>Mon, 29 Nov 2010 17:51:07 +0000</pubDate>
		<dc:creator>Neo</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.neocanable.com/?p=205</guid>
		<description><![CDATA[rails 里面有alias_method_chain实现了方法的前置过滤 这里的是用alias_method实现的 class MethodFilter &#160; def self.before_filter&#40;method&#41; &#160; &#160; puts &#34;add before filter here&#34; &#160; &#160; method = method.to_s &#160; &#160; eval_string = &#34; &#160; &#160; &#160; alias_method :old_#{method}, :#{method} &#160; &#160; &#160; def #{method}(*args) &#160; &#160; &#160; &#160; puts 'call' &#160; &#160; &#160; &#160; old_#{method}(*args) &#160; &#160; &#160; &#160; puts 'after' &#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>rails 里面有alias_method_chain实现了方法的前置过滤<br />
这里的是用alias_method实现的</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#9966CC; font-weight:bold;">class</span> MethodFilter<br />
<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">before_filter</span><span style="color:#006600; font-weight:bold;">&#40;</span>method<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;add before filter here&quot;</span><br />
&nbsp; &nbsp; method = method.<span style="color:#9900CC;">to_s</span><br />
&nbsp; &nbsp; eval_string = <span style="color:#996600;">&quot;<br />
&nbsp; &nbsp; &nbsp; alias_method :old_#{method}, :#{method}<br />
<br />
&nbsp; &nbsp; &nbsp; def #{method}(*args)<br />
&nbsp; &nbsp; &nbsp; &nbsp; puts 'call'<br />
&nbsp; &nbsp; &nbsp; &nbsp; old_#{method}(*args)<br />
&nbsp; &nbsp; &nbsp; &nbsp; puts 'after'<br />
&nbsp; &nbsp; &nbsp; end<br />
&nbsp; &nbsp; &quot;</span><br />
&nbsp; &nbsp; class_eval<span style="color:#006600; font-weight:bold;">&#40;</span>eval_string<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
<span style="color:#9966CC; font-weight:bold;">class</span> Demo <span style="color:#006600; font-weight:bold;">&lt;</span> MethodFilter<br />
<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> hello<br />
&nbsp; &nbsp; <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;hello&quot;</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; before_filter<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:hello</span><span style="color:#006600; font-weight:bold;">&#41;</span> <br />
<span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
Demo.<span style="color:#9900CC;">new</span>.<span style="color:#9900CC;">hello</span></div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.neocanable.com/ruby-method-before-filters/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>rvm使用(原)</title>
		<link>http://www.neocanable.com/rvm-usage/</link>
		<comments>http://www.neocanable.com/rvm-usage/#comments</comments>
		<pubDate>Mon, 01 Nov 2010 15:51:58 +0000</pubDate>
		<dc:creator>Neo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.neocanable.com/?p=207</guid>
		<description><![CDATA[ruby version manager(RVM) 一.安装，网上常用的方法有两种 第一种方法(需要安装git) mkdir -p ~/.rvm/src/rvm/ cd ~/.rvm/src git clone http://github.com/wayneeseguin/rvm.git cd rvm ./install 第二种方法 $ bash &#60; &#60;&#40; curl http://rvm.beginrescueend.com/releases/rvm-install-head &#41; 官方这两种方法都给了，还是第二种方法简单给力 使用方法,更新自己的bash session,也就是~/.bashrc(这个要看用的是哪个类型的shell，如果是zsh,那么就是zshrc) 添加一行[[ -s "$HOME/.rvm/scripts/rvm" ]] &#038;&#038; . &#8220;$HOME/.rvm/scripts/rvm&#8221; 然后source一下.bashrc就OK了 二.使用rvm 1.装两种ruby的版本 rvm install 1.9.1 rvm install 1.8.7 安装ruby的企业版本 rvm install ree-1.8.7-2010.02 2.更换ruby版本 rvm 1.8.7 &#8211;default,就是将ruby 1.8.7换成默认的版本 3.更新ruby版本 rvm upgrade [...]]]></description>
			<content:encoded><![CDATA[<p>ruby version manager(RVM)</p>
<p>一.安装，网上常用的方法有两种<br />
第一种方法(需要安装git)</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #660033;">-p</span> ~<span style="color: #000000; font-weight: bold;">/</span>.rvm<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>rvm<span style="color: #000000; font-weight: bold;">/</span><br />
<span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>.rvm<span style="color: #000000; font-weight: bold;">/</span>src<br />
<span style="color: #c20cb9; font-weight: bold;">git clone</span> http:<span style="color: #000000; font-weight: bold;">//</span>github.com<span style="color: #000000; font-weight: bold;">/</span>wayneeseguin<span style="color: #000000; font-weight: bold;">/</span>rvm.git<br />
<span style="color: #7a0874; font-weight: bold;">cd</span> rvm<br />
.<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">install</span></div></div>
<p>第二种方法</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">bash</span> <span style="color: #000000; font-weight: bold;">&lt;</span> <span style="color: #000000; font-weight: bold;">&lt;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span> curl http:<span style="color: #000000; font-weight: bold;">//</span>rvm.beginrescueend.com<span style="color: #000000; font-weight: bold;">/</span>releases<span style="color: #000000; font-weight: bold;">/</span>rvm-install-head <span style="color: #7a0874; font-weight: bold;">&#41;</span></div></div>
<p>官方这两种方法都给了，还是第二种方法简单给力<br />
使用方法,更新自己的bash session,也就是~/.bashrc(这个要看用的是哪个类型的shell，如果是zsh,那么就是zshrc)<br />
添加一行[[ -s "$HOME/.rvm/scripts/rvm" ]] &#038;&#038; . &#8220;$HOME/.rvm/scripts/rvm&#8221; 然后source一下.bashrc就OK了</p>
<p>二.使用rvm<br />
1.装两种ruby的版本<br />
rvm install 1.9.1<br />
rvm install 1.8.7</p>
<p>安装ruby的企业版本<br />
rvm install ree-1.8.7-2010.02</p>
<p>2.更换ruby版本<br />
rvm 1.8.7 &#8211;default,就是将ruby 1.8.7换成默认的版本</p>
<p>3.更新ruby版本<br />
rvm upgrade 1.9.1 如果你的1.9.1安装的是一个非release版本的ruby,那么rvm将会为你安装一个release版本</p>
<p>三.管理gems 和bundle</p>
<p>http://marcgrabanski.com/articles/gem-management-with-rvm-and-bundler</p>
<p>1.rvm exec</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">rvm 1.8.7 <span style="color: #7a0874; font-weight: bold;">exec</span> gem <span style="color: #c20cb9; font-weight: bold;">install</span> rails&nbsp; <span style="color: #666666; font-style: italic;"># 只在1.8.7下面安装rails</span><br />
rvm 1.8.7 <span style="color: #7a0874; font-weight: bold;">exec</span> gem uninstall rails &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># 卸载1.8.7下面的rails</span><br />
rvm 1.8.7 1.9.1 gem <span style="color: #c20cb9; font-weight: bold;">install</span> rails &nbsp; <span style="color: #666666; font-style: italic;"># 两个版本下面都安装rails</span><br />
rvm <span style="color: #7a0874; font-weight: bold;">exec</span> gem <span style="color: #c20cb9; font-weight: bold;">install</span> rails &nbsp; &nbsp; &nbsp;&nbsp; <span style="color: #666666; font-style: italic;"># 多个版本都安装rails</span><br />
<br />
rvm ruby demo.rb &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span style="color: #666666; font-style: italic;"># 用所有的ruby版本执行demo.rb</span><br />
rvm 1.8.7 ruby demo.rb &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span style="color: #666666; font-style: italic;"># 用所有的ruby版本执行demo.rb</span></div></div>
<p>2.rvm rake</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">rvm 1.8.7 1.9.1 rake db:migrate &nbsp; <span style="color: #666666; font-style: italic;"># 使用两个ruby版本运行</span><br />
rvm 1.8.7 rake db:migrate &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># 使用一个ruby版本运行</span></div></div>
<p>3.使用命名的gem版本</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">rvm gemset create demo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span style="color: #666666; font-style: italic;"># 创建一个叫做demo的gem版本，然后使用它</span><br />
rvm gemset use demo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># 使用创建的gem环境</span></div></div>
<p>可以看到这里下安装了哪些gems<br />
neo@ubuntu:~/.rvm/help$ gem list<br />
*** LOCAL GEMS ***<br />
rake (0.8.7)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neocanable.com/rvm-usage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>rails关键字过滤</title>
		<link>http://www.neocanable.com/ruby-dfa-tree/</link>
		<comments>http://www.neocanable.com/ruby-dfa-tree/#comments</comments>
		<pubDate>Tue, 26 Oct 2010 19:25:39 +0000</pubDate>
		<dc:creator>Neo</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby On Rails]]></category>

		<guid isPermaLink="false">http://www.neocanable.com/?p=46</guid>
		<description><![CDATA[从前了解关键字过滤以为就是普通正则表达式的循环，原来关键词的过滤也是有算法的！！！ 下面是一个简单的实现的dfa词法树，写给一个论坛板块做关键词过滤的，随着关键词的递增，耗时与正则表达式比起来要节约很多 class WordReplacement &#60; ActiveRecord::Base &#160; def self.replacement_hash &#160; &#160; Hash&#91;*all.collect&#123;&#124;re&#124; &#91;re.regex_str,re.replacement&#93; &#125;.flatten&#93; &#160; end &#160; def self.filter_word_tree&#40;object = nil&#41; &#160; &#160; word_tree = Array.new&#40;256&#41; &#160; &#160; word_tree &#60;&#60; 0 &#160; &#160; object = replacement_hash if object.nil? &#160; &#160; object.each do &#124;word,replace&#124; &#160; &#160; &#160; temp &#160;= word_tree &#160; &#160; &#160; bytes = word.bytes.to_a [...]]]></description>
			<content:encoded><![CDATA[<p>从前了解关键字过滤以为就是普通正则表达式的循环，原来关键词的过滤也是有算法的！！！<br />
下面是一个简单的实现的dfa词法树，写给一个论坛板块做关键词过滤的，随着关键词的递增，耗时与正则表达式比起来要节约很多</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#9966CC; font-weight:bold;">class</span> WordReplacement <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span><br />
<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">replacement_hash</span><br />
&nbsp; &nbsp; <span style="color:#CC00FF; font-weight:bold;">Hash</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">*</span>all.<span style="color:#9900CC;">collect</span><span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>re<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#006600; font-weight:bold;">&#91;</span>re.<span style="color:#9900CC;">regex_str</span>,re.<span style="color:#9900CC;">replacement</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>.<span style="color:#9900CC;">flatten</span><span style="color:#006600; font-weight:bold;">&#93;</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">filter_word_tree</span><span style="color:#006600; font-weight:bold;">&#40;</span>object = <span style="color:#0000FF; font-weight:bold;">nil</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; word_tree = <span style="color:#CC0066; font-weight:bold;">Array</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">256</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; word_tree <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#006666;">0</span><br />
<br />
&nbsp; &nbsp; object = replacement_hash <span style="color:#9966CC; font-weight:bold;">if</span> object.<span style="color:#0000FF; font-weight:bold;">nil</span>?<br />
<br />
&nbsp; &nbsp; object.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>word,replace<span style="color:#006600; font-weight:bold;">|</span><br />
&nbsp; &nbsp; &nbsp; temp &nbsp;= word_tree<br />
&nbsp; &nbsp; &nbsp; bytes = word.<span style="color:#9900CC;">bytes</span>.<span style="color:#9900CC;">to_a</span><br />
&nbsp; &nbsp; &nbsp; len &nbsp; = bytes.<span style="color:#9900CC;">size</span><br />
<br />
&nbsp; &nbsp; &nbsp; bytes.<span style="color:#9900CC;">each_with_index</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>asicc_code,arr_index<span style="color:#006600; font-weight:bold;">|</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">if</span> arr_index <span style="color:#006600; font-weight:bold;">&lt;</span> len <span style="color:#006600; font-weight:bold;">-</span> <span style="color:#006666;">1</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">if</span> temp<span style="color:#006600; font-weight:bold;">&#91;</span>asicc_code<span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#0000FF; font-weight:bold;">nil</span>?<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; node = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#CC0066; font-weight:bold;">Array</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">256</span><span style="color:#006600; font-weight:bold;">&#41;</span>,<span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; temp<span style="color:#006600; font-weight:bold;">&#91;</span>asicc_code<span style="color:#006600; font-weight:bold;">&#93;</span> = node<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">elsif</span> temp<span style="color:#006600; font-weight:bold;">&#91;</span>asicc_code<span style="color:#006600; font-weight:bold;">&#93;</span> == <span style="color:#006666;">1</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; node = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#CC0066; font-weight:bold;">Array</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">256</span><span style="color:#006600; font-weight:bold;">&#41;</span>,<span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; temp<span style="color:#006600; font-weight:bold;">&#91;</span>asicc_code<span style="color:#006600; font-weight:bold;">&#93;</span> = node<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">else</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; temp = temp<span style="color:#006600; font-weight:bold;">&#91;</span>asicc_code<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; temp<span style="color:#006600; font-weight:bold;">&#91;</span>asicc_code<span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#006666;">1</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span> <span style="color:#008000; font-style:italic;"># end if</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span> <span style="color:#008000; font-style:italic;"># end bytes</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span> <span style="color:#008000; font-style:italic;"># end word</span><br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#91;</span>word_tree,<span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span><br />
<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">handle_word</span><span style="color:#006600; font-weight:bold;">&#40;</span>do_words,replace = <span style="color:#0000FF; font-weight:bold;">true</span>,word_tree = <span style="color:#0000FF; font-weight:bold;">nil</span>,word_hash = <span style="color:#0000FF; font-weight:bold;">nil</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; word_tree = filter_word_tree <span style="color:#9966CC; font-weight:bold;">if</span> word_tree.<span style="color:#0000FF; font-weight:bold;">nil</span>?<br />
&nbsp; &nbsp; word_hash = replacement_hash <span style="color:#9966CC; font-weight:bold;">if</span> word_hash.<span style="color:#0000FF; font-weight:bold;">nil</span>?<br />
&nbsp; &nbsp; temp &nbsp; &nbsp; &nbsp;= word_tree<br />
&nbsp; &nbsp; nodeTree &nbsp;= word_tree<br />
&nbsp; &nbsp; words &nbsp; &nbsp; = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span><br />
&nbsp; &nbsp; word &nbsp; &nbsp; &nbsp;= <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span><br />
&nbsp; &nbsp; to_replace= <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span><br />
&nbsp; &nbsp; a &nbsp; &nbsp; &nbsp; &nbsp; = <span style="color:#006666;">0</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">while</span> a <span style="color:#006600; font-weight:bold;">&lt;</span> do_words.<span style="color:#9900CC;">size</span><br />
&nbsp; &nbsp; &nbsp; index = do_words<span style="color:#006600; font-weight:bold;">&#91;</span>a<span style="color:#006600; font-weight:bold;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; temp = temp<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#91;</span>index<span style="color:#006600; font-weight:bold;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">if</span> temp.<span style="color:#0000FF; font-weight:bold;">nil</span>?<br />
&nbsp; &nbsp; &nbsp; &nbsp; temp = nodeTree<br />
&nbsp; &nbsp; &nbsp; &nbsp; a = a <span style="color:#006600; font-weight:bold;">-</span> word.<span style="color:#9900CC;">size</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; word = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; to_replace = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">elsif</span> temp == <span style="color:#006666;">1</span> <span style="color:#9966CC; font-weight:bold;">or</span> temp<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#93;</span> == <span style="color:#006666;">1</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; word <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> index<br />
&nbsp; &nbsp; &nbsp; &nbsp; to_replace <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> a<br />
&nbsp; &nbsp; &nbsp; &nbsp; words <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> word<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">if</span> replace<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; replace_word = word_hash<span style="color:#006600; font-weight:bold;">&#91;</span>asicc_code_to_s<span style="color:#006600; font-weight:bold;">&#40;</span>word<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; do_words<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#40;</span>a<span style="color:#006600; font-weight:bold;">-</span>to_replace.<span style="color:#9900CC;">size</span> <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#41;</span>,to_replace.<span style="color:#9900CC;">size</span><span style="color:#006600; font-weight:bold;">&#93;</span> = replace_word<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a = <span style="color:#006600; font-weight:bold;">&#40;</span>a <span style="color:#006600; font-weight:bold;">-</span> to_replace.<span style="color:#9900CC;">size</span> <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#006600; font-weight:bold;">&#40;</span>replace_word.<span style="color:#9900CC;">size</span> <span style="color:#006600; font-weight:bold;">-</span> <span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a = a <span style="color:#006600; font-weight:bold;">-</span> word.<span style="color:#9900CC;">size</span> <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#006666;">1</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; word = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; to_replace = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; temp = nodeTree<br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; word <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> index<br />
&nbsp; &nbsp; &nbsp; &nbsp; to_replace <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> a<br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; &nbsp; a <span style="color:#006600; font-weight:bold;">+</span>= <span style="color:#006666;">1</span> &nbsp; <br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; <span style="color:#0000FF; font-weight:bold;">return</span> do_words <span style="color:#9966CC; font-weight:bold;">if</span> replace<br />
&nbsp; &nbsp; words.<span style="color:#9900CC;">collect</span><span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>e<span style="color:#006600; font-weight:bold;">|</span> e.<span style="color:#9900CC;">collect</span><span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>ch<span style="color:#006600; font-weight:bold;">|</span>ch.<span style="color:#9900CC;">chr</span><span style="color:#006600; font-weight:bold;">&#125;</span>.<span style="color:#9900CC;">join</span> <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; protected<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">asicc_code_to_s</span><span style="color:#006600; font-weight:bold;">&#40;</span>words<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; words.<span style="color:#9900CC;">collect</span><span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>e<span style="color:#006600; font-weight:bold;">|</span> e.<span style="color:#9900CC;">chr</span> <span style="color:#006600; font-weight:bold;">&#125;</span>.<span style="color:#9900CC;">join</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.neocanable.com/ruby-dfa-tree/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ruby observer模式</title>
		<link>http://www.neocanable.com/ruby-observer/</link>
		<comments>http://www.neocanable.com/ruby-observer/#comments</comments>
		<pubDate>Sun, 26 Sep 2010 13:18:27 +0000</pubDate>
		<dc:creator>Neo</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.neocanable.com/?p=37</guid>
		<description><![CDATA[ruby的观察者模式范例 require 'observer' class User &#160; include Observable &#160; attr_accessor :username &#160; attr_accessor :password &#160; &#160; def initialize&#40;username,password&#41; &#160; &#160; &#160; @username = username &#160; &#160; &#160; @password = password &#160; end &#160; &#160; def change_username &#160; &#160; &#160; &#160; changed &#160; &#160; &#160; &#160; @username = &#34;find_by_username&#34; &#160; &#160; &#160; &#160; notify_observers &#160; end [...]]]></description>
			<content:encoded><![CDATA[<p>ruby的观察者模式范例</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'observer'</span><br />
<span style="color:#9966CC; font-weight:bold;">class</span> User<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">include</span> <span style="color:#CC00FF; font-weight:bold;">Observable</span><br />
&nbsp; attr_accessor <span style="color:#ff3333; font-weight:bold;">:username</span><br />
&nbsp; attr_accessor <span style="color:#ff3333; font-weight:bold;">:password</span><br />
&nbsp; <br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> initialize<span style="color:#006600; font-weight:bold;">&#40;</span>username,password<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@username</span> = username<br />
&nbsp; &nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@password</span> = password<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; <br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> change_username<br />
&nbsp; &nbsp; &nbsp; &nbsp; changed<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@username</span> = <span style="color:#996600;">&quot;find_by_username&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; notify_observers<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
<span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
<span style="color:#9966CC; font-weight:bold;">class</span> Foo<br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> update<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#CC0066; font-weight:bold;">p</span> <span style="color:#996600;">&quot;attribute has update&quot;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span> &nbsp; &nbsp;<br />
<span style="color:#9966CC; font-weight:bold;">end</span><br />
<span style="color:#008000; font-style:italic;">#试着改变username属性</span><br />
&nbsp; user = User.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;neo&quot;</span>,<span style="color:#996600;">&quot;123&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; user.<span style="color:#9900CC;">add_observer</span><span style="color:#006600; font-weight:bold;">&#40;</span>Foo.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; user.<span style="color:#9900CC;">change_username</span></div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.neocanable.com/ruby-observer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ruby diff工具</title>
		<link>http://www.neocanable.com/ruby-diff-tools/</link>
		<comments>http://www.neocanable.com/ruby-diff-tools/#comments</comments>
		<pubDate>Fri, 06 Aug 2010 19:09:54 +0000</pubDate>
		<dc:creator>Neo</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.neocanable.com/?p=29</guid>
		<description><![CDATA[基于ruby_lcs简单的文件版本比较(假装支持HTML); ruby_lcs不支持中文,需要重写String类的size方法,需要修改Diff::LCS.traverse_sequences 默认都中文会变成乱码类似&#8221;\232\234\232&#8243;，而string的[]会将它分成&#8221;\232&#8243;、&#8221;\234&#8243;、&#8221;\232 require 'jcode' class String &#160; def size &#160; &#160; self.jsize &#160; end end class NeoDiff &#160; $KCODE = &#34;u&#34; &#160; attr_accessor :output &#160; attr_accessor :last_call &#160; &#160; def initialize&#40;output&#41; &#160; &#160; @output = output &#160; &#160; @last_call = nil &#160; end &#160; &#160; def change&#40;event&#41; &#160; &#160; if @last_call.nil? &#160; &#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>基于ruby_lcs简单的文件版本比较(假装支持HTML);<br />
ruby_lcs不支持中文,需要重写String类的size方法,需要修改Diff::LCS.traverse_sequences<br />
默认都中文会变成乱码类似&#8221;\232\234\232&#8243;，而string的[]会将它分成&#8221;\232&#8243;、&#8221;\234&#8243;、&#8221;\232</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'jcode'</span><br />
<span style="color:#9966CC; font-weight:bold;">class</span> <span style="color:#CC0066; font-weight:bold;">String</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> size<br />
&nbsp; &nbsp; <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">jsize</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
<span style="color:#9966CC; font-weight:bold;">class</span> NeoDiff <br />
&nbsp; <span style="color:#ff6633; font-weight:bold;">$KCODE</span> = <span style="color:#996600;">&quot;u&quot;</span><br />
&nbsp; attr_accessor <span style="color:#ff3333; font-weight:bold;">:output</span><br />
&nbsp; attr_accessor <span style="color:#ff3333; font-weight:bold;">:last_call</span><br />
&nbsp; <br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> initialize<span style="color:#006600; font-weight:bold;">&#40;</span>output<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@output</span> = output<br />
&nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@last_call</span> = <span style="color:#0000FF; font-weight:bold;">nil</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; <br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> change<span style="color:#006600; font-weight:bold;">&#40;</span>event<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#0066ff; font-weight:bold;">@last_call</span>.<span style="color:#0000FF; font-weight:bold;">nil</span>?<br />
&nbsp; &nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@output</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#996600;">&quot;&lt;span class='change'&gt;#{event.old_element}&quot;</span> <br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">elsif</span> <span style="color:#0066ff; font-weight:bold;">@last_call</span> == <span style="color:#996600;">&quot;change&quot;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@output</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> event.<span style="color:#9900CC;">old_element</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">else</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@output</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#996600;">&quot;&lt;/span&gt;&lt;span class='change'&gt;#{event.old_element}&quot;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@last_call</span> = <span style="color:#996600;">&quot;change&quot;</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> match<span style="color:#006600; font-weight:bold;">&#40;</span>event<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#0066ff; font-weight:bold;">@last_call</span>.<span style="color:#0000FF; font-weight:bold;">nil</span>?<br />
&nbsp; &nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@output</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#996600;">&quot;&lt;span class='match'&gt;#{event.old_element}&quot;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">elsif</span> <span style="color:#0066ff; font-weight:bold;">@last_call</span> == <span style="color:#996600;">&quot;match&quot;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@output</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> event.<span style="color:#9900CC;">old_element</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">else</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@output</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#996600;">&quot;&lt;/span&gt;&lt;span class='match'&gt;#{event.old_element}&quot;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@last_call</span> = <span style="color:#996600;">&quot;match&quot;</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> discard_a<span style="color:#006600; font-weight:bold;">&#40;</span>event<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#0066ff; font-weight:bold;">@last_call</span>.<span style="color:#0000FF; font-weight:bold;">nil</span>?<br />
&nbsp; &nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@output</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#996600;">&quot;&lt;span class='only_a'&gt;#{event.old_element}&quot;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">elsif</span> <span style="color:#0066ff; font-weight:bold;">@last_call</span> == <span style="color:#996600;">&quot;discard_a&quot;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@output</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> event.<span style="color:#9900CC;">old_element</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">else</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@output</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#996600;">&quot;&lt;/span&gt;&lt;span class='only_a'&gt;#{event.old_element}&quot;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@last_call</span> = <span style="color:#996600;">&quot;discard_a&quot;</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> discard_b<span style="color:#006600; font-weight:bold;">&#40;</span>event<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#0066ff; font-weight:bold;">@last_call</span>.<span style="color:#0000FF; font-weight:bold;">nil</span>?<br />
&nbsp; &nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@output</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#996600;">&quot;&lt;span class='only_b'&gt;#{event.new_element}&quot;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">elsif</span> <span style="color:#0066ff; font-weight:bold;">@last_call</span> == <span style="color:#996600;">&quot;discard_b&quot;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@output</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> event.<span style="color:#9900CC;">new_element</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">else</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@output</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#996600;">&quot;&lt;/span&gt;&lt;span class='only_b'&gt;#{event.new_element}&quot;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@last_call</span> = <span style="color:#996600;">&quot;discard_b&quot;</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.neocanable.com/ruby-diff-tools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

