<?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/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>tech-memo &#187; ruby</title>
	<atom:link href="http://tech.hapicky.com/archives/tag/ruby/feed" rel="self" type="application/rss+xml" />
	<link>http://tech.hapicky.com</link>
	<description>ソフトウェアエンジニアリングに関するメモ書き</description>
	<lastBuildDate>Tue, 02 Feb 2010 05:42:30 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tech.hapicky.com/archives/tag/ruby/feed" />
		<item>
		<title>ルーティングのテスト</title>
		<link>http://tech.hapicky.com/archives/389</link>
		<comments>http://tech.hapicky.com/archives/389#comments</comments>
		<pubDate>Tue, 02 Feb 2010 05:42:30 +0000</pubDate>
		<dc:creator>hapicky</dc:creator>
				<category><![CDATA[今日のテストコード]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[テストコード]]></category>

		<guid isPermaLink="false">http://tech.hapicky.com/?p=389</guid>
		<description><![CDATA[railsのルーティングのテスト。 :id => /\d+/ と指定している部分「これじゃ部分一致では？」と思いましたが、ActionController::Routing::Route#generation_requirements で\Aと\Zで挟まれて再コンパイルされてますね。 config/routes.rb ?View Code RUBY1 2 3 4 5 6 ActionController::Routing::Routes.draw do &#124;map&#124; map.with_options&#40;:controller =&#62; 'products'&#41; do &#124;products&#124; products.connect 'products/:id', :action =&#62; 'show', :id =&#62; /\d+/ products.connect 'products', :action =&#62; 'create', :conditions =&#62; &#123; :method =&#62; :post &#125; end end spec/controllers/products_controller_spec.rb ?View Code RUBY1 2 3 4 5 6 7 [...]]]></description>
			<content:encoded><![CDATA[<p>railsのルーティングのテスト。<br />
<code>:id => /\d+/</code> と指定している部分「これじゃ部分一致では？」と思いましたが、ActionController::Routing::Route#generation_requirements で\Aと\Zで挟まれて再コンパイルされてますね。</p>
<p>config/routes.rb</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p389code3'); return false;">View Code</a> RUBY</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3893"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p389code3"><pre class="ruby" style="font-family:monospace;"><span style="color:#6666ff; font-weight:bold;">ActionController::Routing::Routes</span>.<span style="color:#9900CC;">draw</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>map<span style="color:#006600; font-weight:bold;">|</span>
  map.<span style="color:#9900CC;">with_options</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:controller</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'products'</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>products<span style="color:#006600; font-weight:bold;">|</span>
    products.<span style="color:#9900CC;">connect</span> <span style="color:#996600;">'products/:id'</span>, <span style="color:#ff3333; font-weight:bold;">:action</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'show'</span>, <span style="color:#ff3333; font-weight:bold;">:id</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">/</span>\d<span style="color:#006600; font-weight:bold;">+/</span>
    products.<span style="color:#9900CC;">connect</span> <span style="color:#996600;">'products'</span>, <span style="color:#ff3333; font-weight:bold;">:action</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'create'</span>, <span style="color:#ff3333; font-weight:bold;">:conditions</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#ff3333; font-weight:bold;">:method</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:post</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>spec/controllers/products_controller_spec.rb</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p389code4'); return false;">View Code</a> RUBY</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3894"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
</pre></td><td class="code" id="p389code4"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'spec_helper'</span>
&nbsp;
describe ProductsController <span style="color:#9966CC; font-weight:bold;">do</span>
&nbsp;
  describe <span style="color:#996600;">'ルーティングのテスト'</span> <span style="color:#9966CC; font-weight:bold;">do</span>
&nbsp;
    it <span style="color:#996600;">'Products#show'</span> <span style="color:#9966CC; font-weight:bold;">do</span>
      params_from<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:get</span>, <span style="color:#996600;">'/products/123'</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">should</span> == <span style="color:#006600; font-weight:bold;">&#123;</span> 
        <span style="color:#ff3333; font-weight:bold;">:controller</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'products'</span>,
        <span style="color:#ff3333; font-weight:bold;">:action</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'show'</span>,
        <span style="color:#ff3333; font-weight:bold;">:id</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'123'</span>
      <span style="color:#006600; font-weight:bold;">&#125;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
    it <span style="color:#996600;">'idが数字のみでない場合は404'</span> <span style="color:#9966CC; font-weight:bold;">do</span>
      <span style="color:#CC0066; font-weight:bold;">lambda</span> <span style="color:#006600; font-weight:bold;">&#123;</span> 
        params_from<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:get</span>, <span style="color:#996600;">'/products/123abc'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
      <span style="color:#006600; font-weight:bold;">&#125;</span>.<span style="color:#9900CC;">should</span> raise_error<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#6666ff; font-weight:bold;">ActionController::RoutingError</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
    it <span style="color:#996600;">'Product#create'</span> <span style="color:#9966CC; font-weight:bold;">do</span>
      params_from<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:post</span>, <span style="color:#996600;">'/products'</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">should</span> == <span style="color:#006600; font-weight:bold;">&#123;</span> 
        <span style="color:#ff3333; font-weight:bold;">:controller</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'products'</span>,
        <span style="color:#ff3333; font-weight:bold;">:action</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'create'</span>
      <span style="color:#006600; font-weight:bold;">&#125;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
    it <span style="color:#996600;">'createはPOSTのみ'</span> <span style="color:#9966CC; font-weight:bold;">do</span>
      <span style="color:#CC0066; font-weight:bold;">lambda</span> <span style="color:#006600; font-weight:bold;">&#123;</span> 
        params_from<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:get</span>, <span style="color:#996600;">'/products'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
      <span style="color:#006600; font-weight:bold;">&#125;</span>.<span style="color:#9900CC;">should</span> raise_error<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#6666ff; font-weight:bold;">ActionController::MethodNotAllowed</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>参考:</p>
<ul>
<li><a href="http://api.rubyonrails.org/classes/ActionController/Routing.html">Routing &#8211; Rails Framework  Documentation</a></li>
<li><a href="http://rspec.rubyforge.org/rspec-rails/1.3.2/classes/Spec/Rails/Example/RoutingHelpers.html">RoutingHelpers &#8211; RSpec Documentation</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tech.hapicky.com/archives/389/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tech.hapicky.com/archives/389" />
	</item>
		<item>
		<title>Google Chart APIを使ってQRコードを生成する</title>
		<link>http://tech.hapicky.com/archives/353</link>
		<comments>http://tech.hapicky.com/archives/353#comments</comments>
		<pubDate>Thu, 28 Jan 2010 11:01:56 +0000</pubDate>
		<dc:creator>hapicky</dc:creator>
				<category><![CDATA[今日のテストコード]]></category>
		<category><![CDATA[GoogleChartAPI]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[テストコード]]></category>

		<guid isPermaLink="false">http://tech.hapicky.com/?p=353</guid>
		<description><![CDATA[QRコードの生成にGoogle Chart APIを使ってみました。 rspec-railsのhave_tagマッチャを使うときはassert_selectのドキュメントを見ながらの場合が多いですね。早く覚えてしまいたい。 app/helpers/chart_helper.rb ?View Code RUBY1 2 3 4 5 6 7 8 9 10 11 12 13 14 module ChartHelper &#160; def qr_code_tag&#40;text, options = &#123;&#125;&#41; param = &#123; :cht =&#62; 'qr', :chl =&#62; text &#125; param&#91;:chs&#93; = options.delete&#40;:chart_size&#41; &#124;&#124; '120x120' uri = URI::HTTP.build&#40;:host =&#62; 'chart.apis.google.com', :path =&#62; '/chart', :query =&#62; param.to_query&#41; [...]]]></description>
			<content:encoded><![CDATA[<p>QRコードの生成にGoogle Chart APIを使ってみました。<br />
rspec-railsのhave_tagマッチャを使うときはassert_selectのドキュメントを見ながらの場合が多いですね。早く覚えてしまいたい。<br />
<img src="http://chart.apis.google.com/chart?chl=http%3A%2F%2Ftech.hapicky.com%2F&amp;chs=120x120&amp;cht=qr" alt="tech-memo" /><br />
app/helpers/chart_helper.rb</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p353code7'); return false;">View Code</a> RUBY</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3537"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code" id="p353code7"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">module</span> ChartHelper
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> qr_code_tag<span style="color:#006600; font-weight:bold;">&#40;</span>text, options = <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    param = <span style="color:#006600; font-weight:bold;">&#123;</span> 
      <span style="color:#ff3333; font-weight:bold;">:cht</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'qr'</span>,
      <span style="color:#ff3333; font-weight:bold;">:chl</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> text
    <span style="color:#006600; font-weight:bold;">&#125;</span>
    param<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:chs</span><span style="color:#006600; font-weight:bold;">&#93;</span> = options.<span style="color:#9900CC;">delete</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:chart_size</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">||</span> <span style="color:#996600;">'120x120'</span>
    uri = <span style="color:#CC00FF; font-weight:bold;"><span style="color:#6666ff; font-weight:bold;">URI::HTTP</span></span>.<span style="color:#9900CC;">build</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:host</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'chart.apis.google.com'</span>, <span style="color:#ff3333; font-weight:bold;">:path</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'/chart'</span>, <span style="color:#ff3333; font-weight:bold;">:query</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> param.<span style="color:#9900CC;">to_query</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
    image_tag uri.<span style="color:#9900CC;">to_s</span>, options
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>spec/helpers/chart_helper_spec.rb</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p353code8'); return false;">View Code</a> RUBY</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3538"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="code" id="p353code8"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'spec_helper'</span>
&nbsp;
describe ChartHelper <span style="color:#9966CC; font-weight:bold;">do</span>
&nbsp;
  it <span style="color:#996600;">'指定したテキストを含むQRコードを得られること'</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    tag = helper.<span style="color:#9900CC;">qr_code_tag</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'http://tech.hapicky.com/'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    expected_src = <span style="color:#996600;">'http://chart.apis.google.com/chart?chl=http%3A%2F%2Ftech.hapicky.com%2F&amp;amp;chs=120x120&amp;amp;cht=qr'</span>
    tag.<span style="color:#9900CC;">should</span> have_tag<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'img[src=?]'</span>, expected_src<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  it <span style="color:#996600;">'サイズ指定できること'</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    tag = helper.<span style="color:#9900CC;">qr_code_tag</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'http://tech.hapicky.com/'</span>, <span style="color:#ff3333; font-weight:bold;">:chart_size</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'300x300'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    expected_src = <span style="color:#996600;">'http://chart.apis.google.com/chart?chl=http%3A%2F%2Ftech.hapicky.com%2F&amp;amp;chs=300x300&amp;amp;cht=qr'</span>
    tag.<span style="color:#9900CC;">should</span> have_tag<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'img[src=?]'</span>, expected_src<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  it <span style="color:#996600;">'altの指定ができること'</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    tag = helper.<span style="color:#9900CC;">qr_code_tag</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'http://tech.hapicky.com/'</span>, <span style="color:#ff3333; font-weight:bold;">:alt</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'tech-memo'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    expected_src = <span style="color:#996600;">'http://chart.apis.google.com/chart?chl=http%3A%2F%2Ftech.hapicky.com%2F&amp;amp;chs=120x120&amp;amp;cht=qr'</span>
    tag.<span style="color:#9900CC;">should</span> have_tag<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'img[src=?][alt=tech-memo]'</span>, expected_src<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>参考:</p>
<ul>
<li><a href="http://rspec.rubyforge.org/rspec-rails/1.3.2/classes/Spec/Rails/Matchers.html#M000019">have_tag &#8211; RSpec Documentation</a></li>
<li><a href="http://api.rubyonrails.org/classes/ActionController/Assertions/SelectorAssertions.html#M000569">assert_select &#8211; Rails Framework Documentation</a></li>
<li><a href="http://code.google.com/intl/en/apis/chart/types.html#qrcodes">Google Chart API (QR Code)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tech.hapicky.com/archives/353/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tech.hapicky.com/archives/353" />
	</item>
		<item>
		<title>rspecのincludeマッチャ</title>
		<link>http://tech.hapicky.com/archives/344</link>
		<comments>http://tech.hapicky.com/archives/344#comments</comments>
		<pubDate>Wed, 27 Jan 2010 11:47:00 +0000</pubDate>
		<dc:creator>hapicky</dc:creator>
				<category><![CDATA[今日のテストコード]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[テストコード]]></category>

		<guid isPermaLink="false">http://tech.hapicky.com/?p=344</guid>
		<description><![CDATA[rspecのincludeマッチャ。Hashの場合の挙動はバージョン間で色々と違いがありますね。 ?View Code RUBY1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 require 'rubygems' gem 'rspec', '&#62;= 1.1.12' require 'spec' &#160; describe 'includeマッチャ' do &#160; before :each do @lang_authors = &#123; [...]]]></description>
			<content:encoded><![CDATA[<p>rspecのincludeマッチャ。Hashの場合の挙動はバージョン間で色々と違いがありますね。</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p344code10'); return false;">View Code</a> RUBY</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p34410"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
</pre></td><td class="code" id="p344code10"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rubygems'</span>
gem <span style="color:#996600;">'rspec'</span>, <span style="color:#996600;">'&gt;= 1.1.12'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'spec'</span>
&nbsp;
describe <span style="color:#996600;">'includeマッチャ'</span> <span style="color:#9966CC; font-weight:bold;">do</span>
&nbsp;
  before <span style="color:#ff3333; font-weight:bold;">:each</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    <span style="color:#0066ff; font-weight:bold;">@lang_authors</span> = <span style="color:#006600; font-weight:bold;">&#123;</span> 
      <span style="color:#ff3333; font-weight:bold;">:ruby</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'まつもとゆきひろ'</span>,
      <span style="color:#ff3333; font-weight:bold;">:python</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'Guido van Rossum'</span>,
      <span style="color:#ff3333; font-weight:bold;">:perl</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'Larry Wall'</span>
    <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  it <span style="color:#996600;">'Hashが指定されたキーを持つか'</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    <span style="color:#008000; font-style:italic;"># 以下はrspec 1.1.10, 1.1.11 でエラーになる</span>
    <span style="color:#0066ff; font-weight:bold;">@lang_authors</span>.<span style="color:#9900CC;">should</span> <span style="color:#9966CC; font-weight:bold;">include</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:ruby</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#0066ff; font-weight:bold;">@lang_authors</span>.<span style="color:#9900CC;">should</span> <span style="color:#9966CC; font-weight:bold;">include</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:python</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#0066ff; font-weight:bold;">@lang_authors</span>.<span style="color:#9900CC;">should_not</span> <span style="color:#9966CC; font-weight:bold;">include</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:vb</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  it <span style="color:#996600;">'Hashが指定されたキーと値の組み合わせを持つか'</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    <span style="color:#008000; font-style:italic;"># 以下はrspec 1.1.10より前だと失敗する</span>
    <span style="color:#0066ff; font-weight:bold;">@lang_authors</span>.<span style="color:#9900CC;">should</span> <span style="color:#9966CC; font-weight:bold;">include</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:ruby</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'まつもとゆきひろ'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#0066ff; font-weight:bold;">@lang_authors</span>.<span style="color:#9900CC;">should_not</span> <span style="color:#9966CC; font-weight:bold;">include</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:ruby</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'まつもとひろゆき'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  it <span style="color:#996600;">'その他はinclude?による評価'</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    <span style="color:#0066ff; font-weight:bold;">@lang_authors</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:python</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">should</span> <span style="color:#9966CC; font-weight:bold;">include</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'os'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#0066ff; font-weight:bold;">@lang_authors</span>.<span style="color:#9900CC;">keys</span>.<span style="color:#9900CC;">should</span> <span style="color:#9966CC; font-weight:bold;">include</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:perl</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>参考:</p>
<ul>
<li><a href="http://rspec.rubyforge.org/rspec/1.3.0/">rspec</a></li>
<li><a href="http://rspec.rubyforge.org/rspec/1.3.0/files/History_rdoc.html">rspec History.rdoc</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tech.hapicky.com/archives/344/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tech.hapicky.com/archives/344" />
	</item>
		<item>
		<title>HTTP接続に依存した処理のテスト</title>
		<link>http://tech.hapicky.com/archives/328</link>
		<comments>http://tech.hapicky.com/archives/328#comments</comments>
		<pubDate>Tue, 26 Jan 2010 10:25:44 +0000</pubDate>
		<dc:creator>hapicky</dc:creator>
				<category><![CDATA[今日のテストコード]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[webmock]]></category>
		<category><![CDATA[テストコード]]></category>

		<guid isPermaLink="false">http://tech.hapicky.com/?p=328</guid>
		<description><![CDATA[HTTP接続に依存した処理をテスト。以下ではwebmockを使っていますが他にもfakewebなどありますね。 ?View Code RUBY1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 require 'rubygems' require 'spec' require 'webmock/rspec' require 'open-uri' &#160; class [...]]]></description>
			<content:encoded><![CDATA[<p>HTTP接続に依存した処理をテスト。以下ではwebmockを使っていますが他にもfakewebなどありますね。</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p328code12'); return false;">View Code</a> RUBY</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p32812"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
</pre></td><td class="code" id="p328code12"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rubygems'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'spec'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'webmock/rspec'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'open-uri'</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> HttpClient
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> initialize<span style="color:#006600; font-weight:bold;">&#40;</span>url<span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#0066ff; font-weight:bold;">@url</span> = url
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> fetch_body
    <span style="color:#9966CC; font-weight:bold;">begin</span>
      <span style="color:#CC0066; font-weight:bold;">open</span><span style="color:#006600; font-weight:bold;">&#40;</span>@url<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">|</span>io<span style="color:#006600; font-weight:bold;">|</span> io.<span style="color:#9900CC;">read</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
    <span style="color:#9966CC; font-weight:bold;">rescue</span> <span style="color:#6666ff; font-weight:bold;">OpenURI::HTTPError</span>
      <span style="color:#0000FF; font-weight:bold;">nil</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
describe HttpClient <span style="color:#9966CC; font-weight:bold;">do</span>
&nbsp;
  TEST_URL = <span style="color:#996600;">'http://www.example.com/test'</span>
&nbsp;
  before <span style="color:#ff3333; font-weight:bold;">:each</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    <span style="color:#0066ff; font-weight:bold;">@client</span> = HttpClient.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>TEST_URL<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  it <span style="color:#996600;">'ステータスコード200の場合はbodyの内容を返すこと'</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    body = <span style="color:#996600;">&quot;OK&quot;</span>
    WebMock.<span style="color:#9900CC;">stub_request</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:get</span>, TEST_URL<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">to_return</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:body</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> body, <span style="color:#ff3333; font-weight:bold;">:status</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">200</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#0066ff; font-weight:bold;">@client</span>.<span style="color:#9900CC;">fetch_body</span>.<span style="color:#9900CC;">should</span> == body
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  it <span style="color:#996600;">'接続できない場合はnilを返すこと'</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    body = <span style="color:#996600;">&quot;NG!&quot;</span>
    WebMock.<span style="color:#9900CC;">stub_request</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:get</span>, TEST_URL<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">to_return</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:body</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> body, <span style="color:#ff3333; font-weight:bold;">:status</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">404</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#0066ff; font-weight:bold;">@client</span>.<span style="color:#9900CC;">fetch_body</span>.<span style="color:#9900CC;">should</span> be_nil
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>参考: </p>
<ul>
<li><a href="http://github.com/bblimke/webmock">bblimke&#8217;s webmock at master &#8211; GitHub</a></li>
<li><a href="http://fakeweb.rubyforge.org/">FakeWeb</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tech.hapicky.com/archives/328/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tech.hapicky.com/archives/328" />
	</item>
		<item>
		<title>テンポラリディレクトリを使ったテスト</title>
		<link>http://tech.hapicky.com/archives/312</link>
		<comments>http://tech.hapicky.com/archives/312#comments</comments>
		<pubDate>Mon, 25 Jan 2010 11:19:05 +0000</pubDate>
		<dc:creator>hapicky</dc:creator>
				<category><![CDATA[今日のテストコード]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[テストコード]]></category>

		<guid isPermaLink="false">http://tech.hapicky.com/?p=312</guid>
		<description><![CDATA[テスト中にファイル書き込みを行いたいのでテンポラリディレクトリを利用する。終わったら掃除。 ?View Code RUBY1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 require 'rubygems' require 'spec' require 'tmpdir' &#160; describe 'テンポラリディレクトリを使ったテスト' do before :all do @tmp = Dir.mktmpdir end &#160; it 'なんらかのテスト' do # @tmp に書き込みを行うテストなど end &#160; after :all do FileUtils.remove_entry_secure @tmp if File.exist?&#40;@tmp&#41; end end [...]]]></description>
			<content:encoded><![CDATA[<p>テスト中にファイル書き込みを行いたいのでテンポラリディレクトリを利用する。終わったら掃除。</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p312code14'); return false;">View Code</a> RUBY</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p31214"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code" id="p312code14"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rubygems'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'spec'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'tmpdir'</span>
&nbsp;
describe <span style="color:#996600;">'テンポラリディレクトリを使ったテスト'</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  before <span style="color:#ff3333; font-weight:bold;">:all</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    <span style="color:#0066ff; font-weight:bold;">@tmp</span> = <span style="color:#CC00FF; font-weight:bold;">Dir</span>.<span style="color:#9900CC;">mktmpdir</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  it <span style="color:#996600;">'なんらかのテスト'</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    <span style="color:#008000; font-style:italic;"># @tmp に書き込みを行うテストなど</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  after <span style="color:#ff3333; font-weight:bold;">:all</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    <span style="color:#CC00FF; font-weight:bold;">FileUtils</span>.<span style="color:#9900CC;">remove_entry_secure</span> <span style="color:#0066ff; font-weight:bold;">@tmp</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>@tmp<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>参考: </p>
<ul>
<li><a href="http://www.ruby-lang.org/ja/man/html/fileutils.html">fileutils &#8211; Rubyリファレンスマニュアル</a></li>
<li><a href="http://www.ruby-lang.org/ja/man/html/tmpdir.html">tmpdir &#8211; Rubyリファレンスマニュアル</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tech.hapicky.com/archives/312/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tech.hapicky.com/archives/312" />
	</item>
		<item>
		<title>Ruby会議2009 2, 3日目</title>
		<link>http://tech.hapicky.com/archives/203</link>
		<comments>http://tech.hapicky.com/archives/203#comments</comments>
		<pubDate>Mon, 20 Jul 2009 16:11:37 +0000</pubDate>
		<dc:creator>hapicky</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[RubyKaigi]]></category>

		<guid isPermaLink="false">http://tech.hapicky.com/?p=203</guid>
		<description><![CDATA[引き続き2, 3日目。 卜部 昌平氏「Ruby 1.8 のゆくえ」 1.8のメンテナの卜部さんが、現状と今後について説明してくださいました。 1.8.5 終了済み 1.8.6 1.8.7を使いたくないという人もいるそうで、メンテが必要な状況。Engine Yardの方がやっている。 1.8.7 最近のコミットのうち1/3がバグ修正。 いつまでメンテするかはなんともいえない。 1.8.8 1.9への移行ギャップを少なくしたいという意図がある。 以下のようなコードがパースエラーにならないようにしたい。 ?View Code RUBYif RUBY_VERSION &#62;= &#34;1.9.0&#34; # code for 1.9 else # code for 1.8 end 1.8.9 ありません。1.9使ってください。 Yugui氏 「Ruby 1.9.2ロードマップ」 続いてYuguiさんが1.9について説明。 1.9.1 p243リリースする。 1.9.2 プレビューリリースする。 仕様に対する要望があれば今のうちに。 機能としては地味だが、1.9のgrand designは固まった。as better 1.9.1. ruby1.9自体は安定してきているので、どんどん移行してほしいとのこと。 大井 宏友氏「Railsサイト安定運用の心構え ~8つのサービスから学ぶ」 Xen上でRailsを運用してますよ、というお話。 mongrelからpassengerへ移行してきている。 [...]]]></description>
			<content:encoded><![CDATA[<p>引き続き2, 3日目。</p>
<p><a href="http://rubykaigi.org/2009/ja/talks/18H01"><strong>卜部 昌平氏「Ruby 1.8 のゆくえ」</strong></a></p>
<p>1.8のメンテナの卜部さんが、現状と今後について説明してくださいました。</p>
<ul>
<li>1.8.5
<ul>
<li>終了済み</li>
</ul>
</li>
<li>1.8.6
<ul>
<li>1.8.7を使いたくないという人もいるそうで、メンテが必要な状況。Engine Yardの方がやっている。</li>
</ul>
</li>
<li>1.8.7
<ul>
<li>最近のコミットのうち1/3がバグ修正。</li>
<li>いつまでメンテするかはなんともいえない。</li>
</ul>
</li>
<li>1.8.8
<ul>
<li>1.9への移行ギャップを少なくしたいという意図がある。</li>
<li>以下のようなコードがパースエラーにならないようにしたい。</li>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p203code16'); return false;">View Code</a> RUBY</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p20316"><td class="code" id="p203code16"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">if</span> RUBY_VERSION <span style="color:#006600; font-weight:bold;">&gt;</span>= <span style="color:#996600;">&quot;1.9.0&quot;</span>
  <span style="color:#008000; font-style:italic;"># code for 1.9</span>
<span style="color:#9966CC; font-weight:bold;">else</span>
  <span style="color:#008000; font-style:italic;"># code for 1.8</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

</ul>
</li>
<li>1.8.9
<ul>
<li>ありません。1.9使ってください。</li>
</ul>
</li>
</ul>
<p><a href="http://rubykaigi.org/2009/ja/talks/18H02"><strong>Yugui氏 「Ruby 1.9.2ロードマップ」</strong></a></p>
<p>続いてYuguiさんが1.9について説明。</p>
<ul>
<li>1.9.1
<ul>
<li>p243リリースする。</li>
</ul>
</li>
<li>1.9.2
<ul>
<li>プレビューリリースする。</li>
<li>仕様に対する要望があれば今のうちに。</li>
<li>機能としては地味だが、1.9のgrand designは固まった。as better 1.9.1.</li>
</ul>
</li>
</ul>
<p>ruby1.9自体は安定してきているので、どんどん移行してほしいとのこと。</p>
<p><a href="http://rubykaigi.org/2009/ja/talks/18H10"><strong>大井 宏友氏「Railsサイト安定運用の心構え ~8つのサービスから学ぶ」</strong></a></p>
<p>Xen上でRailsを運用してますよ、というお話。</p>
<ul>
<li>mongrelからpassengerへ移行してきている。
<ul>
<li>理由: 再起動が楽、パフォーマンスもよい。</li>
<li><a href="http://www.rubyenterpriseedition.com/">Ruby Enterprise Edition</a> を使っている。</li>
</ul>
</li>
<li>Xen上でRailsを動作させている。
<ul>
<li>webとappだけ仮想マシンに載せている。</li>
<li>メモリ:16GB, CPU:Quad x 2のハードウェアに最大13VM（割当メモリ各1GB）</li>
<li>mongrelの最大インスタンス数はメモリ1GBで10, 2GBで24</li>
<li>よくある注意事項
<ul>
<li>無意識にActiveRecordを使ってパフォーマンスに問題が発生しがち。</li>
<li>ログのローテーションを忘れがち。</li>
<li>Xen上ではひとつのVMがスワップを使いだすと、他のVMにも影響する。mongrelの定期リスタートや監視が必要。</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><a href="http://rubykaigi.org/2009/ja/talks/18S06"><strong>遠藤 侑介氏「concov: 時系列に注目したテストカバレッジビューア」</strong></a></p>
<p>テストカバレッジを時系列で把握することで、テストがないコードの追加やカバレッジの低下を可視化するツールconcovの紹介。<br />
参照: <a href="http://d.hatena.ne.jp/ku-ma-me/20090708/">http://d.hatena.ne.jp/ku-ma-me/20090708/</a></p>
<p><a href="http://rubykaigi.org/2009/ja/talks/18S07"><strong>nari氏「RubyのGC改善による私のエコライフ」</strong></a></p>
<p>GCのお話。<br />
Ruby Enterprise Editionで行われている改善を本家に採用できないか検証したが、「forkが頻繁に発生しないようなアプリだと逆に遅くなる」とのこと。ちょっと期待しちゃいました。</p>
<p>3日目は遅刻&#038;早退+体調不良でセッションの内容があんまり頭に入らなかった&#8230;。</p>
<p>私は去年参加した時と今回で勤めている会社が違うのですが、そのせいもあって前回とは違った聞き方をできたような気がします。少しだけ、事前に目的意識を持ったり、今後の取り組みへの判断材料を得たりできたかな。</p>
<p>今年も貴重な体験となりました。ruby会議実行委員会のみなさん、rubyコミュニティのみなさん、ありがとうございました。</p>
]]></content:encoded>
			<wfw:commentRss>http://tech.hapicky.com/archives/203/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tech.hapicky.com/archives/203" />
	</item>
		<item>
		<title>Ruby会議2009 1日目</title>
		<link>http://tech.hapicky.com/archives/186</link>
		<comments>http://tech.hapicky.com/archives/186#comments</comments>
		<pubDate>Fri, 17 Jul 2009 17:04:27 +0000</pubDate>
		<dc:creator>hapicky</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[RubyKaigi]]></category>

		<guid isPermaLink="false">http://tech.hapicky.com/?p=186</guid>
		<description><![CDATA[去年に続き、今年もRuby会議に参加しています。参加したセッションで気になったことなどをメモ。 Scott Chacon氏「Using Git and GitHub to Develop One Million Times Faster」 gitいいよ、どんどん使って。という話 オフラインな状況でも使える ローカルに対する操作だから速い ブランチ、マージが楽 githubとか探せばプロジェクトもいっぱいある というような話だったように思う。英語自信なし。 いくつかプロジェクトをgithubでwatchしてはいるものの、自分ではまだほとんど使っていません。ちょっと使ってみようと思います。 高井 直人氏「『エンタープライズRails』に学ぶ企業ユーザのためのRails活用の極意」 ご自身が監訳された書籍を紹介しつつ、その内容について講演。「きっと業務に対してrubyをどう適用したらいい結果がでるか、常日頃考えているんだろうな」という印象を受けました。こういう方、尊敬しちゃいますね。 企業にとって最も重要な資産は「データ」 データ中心アプローチのメリットを整理 RailsにおけるDOAとの類似、相違を整理 類似: モデル中心、CRUD分析重視 相違: データモデルを重視しない、業務ルールはアプリケーション層のみで実現 くらいを導入として話された後、書籍の内容をいくつか紹介 データベースの制約をうまく使ってデータを保護しよう NOT NULLだけでなく、チェック制約、外部キー制約など モデルのバリデーションはあくまでユーザー向け マイグレーションではexecuteでテーブル定義 複合主キーを使う 複合主キーだと、無駄なSQLを回避できるなどメリットもあるよね composite_primary_keysプラグイン使って データベースビューを利用する 多数のJOINが必要な場合などは、ビューを定義してそれを参照するARを用意するとシンプルになるよ セッション後は会場内の書籍売り場が、購入希望者でいっぱいでした。 Yehuda Katz氏「From Rails to Rack: Making Rails 3 a Better Ruby Citizen」 このセッションの英語はあんまり理解できなかった&#8230;。だいぶ雰囲気。 Rails3では各種コンポーネントへの密結合を解消し、rubyの色んな資産と協調していくよ、という話。たぶん。 [...]]]></description>
			<content:encoded><![CDATA[<p>去年に続き、今年もRuby会議に参加しています。参加したセッションで気になったことなどをメモ。</p>
<p><a href="http://rubykaigi.org/2009/ja/talks/17H01"><strong>Scott Chacon氏「Using Git and GitHub to Develop One Million Times Faster」</strong></a></p>
<p>gitいいよ、どんどん使って。という話</p>
<ul>
<li>オフラインな状況でも使える</li>
<li>ローカルに対する操作だから速い</li>
<li>ブランチ、マージが楽</li>
<li>githubとか探せばプロジェクトもいっぱいある</li>
</ul>
<p>というような話だったように思う。英語自信なし。</p>
<p>いくつかプロジェクトをgithubでwatchしてはいるものの、自分ではまだほとんど使っていません。ちょっと使ってみようと思います。</p>
<p><a href="http://rubykaigi.org/2009/ja/talks/17H03"><strong>高井 直人氏「『エンタープライズRails』に学ぶ企業ユーザのためのRails活用の極意」</strong></a></p>
<p>ご自身が監訳された書籍を紹介しつつ、その内容について講演。「きっと業務に対してrubyをどう適用したらいい結果がでるか、常日頃考えているんだろうな」という印象を受けました。こういう方、尊敬しちゃいますね。</p>
<ul>
<li>企業にとって最も重要な資産は「データ」</li>
<li>データ中心アプローチのメリットを整理</li>
<li>RailsにおけるDOAとの類似、相違を整理
<ul>
<li>類似: モデル中心、CRUD分析重視</li>
<li>相違: データモデルを重視しない、業務ルールはアプリケーション層のみで実現</li>
</ul>
</li>
</ul>
<p>くらいを導入として話された後、書籍の内容をいくつか紹介</p>
<ul>
<li>データベースの制約をうまく使ってデータを保護しよう
<ul>
<li>NOT NULLだけでなく、チェック制約、外部キー制約など</li>
<li>モデルのバリデーションはあくまでユーザー向け</li>
<li>マイグレーションではexecuteでテーブル定義</li>
</ul>
</li>
<li>複合主キーを使う
<ul>
<li>複合主キーだと、無駄なSQLを回避できるなどメリットもあるよね</li>
<li>composite_primary_keysプラグイン使って</li>
</ul>
</li>
<li>データベースビューを利用する
<ul>
<li>
多数のJOINが必要な場合などは、ビューを定義してそれを参照するARを用意するとシンプルになるよ</li>
</ul>
</li>
</ul>
<p>セッション後は会場内の書籍売り場が、購入希望者でいっぱいでした。</p>
<p><a href="http://rubykaigi.org/2009/ja/talks/17H04"><strong>Yehuda Katz氏「From Rails to Rack: Making Rails 3 a Better Ruby Citizen」</strong></a></p>
<p>このセッションの英語はあんまり理解できなかった&#8230;。だいぶ雰囲気。</p>
<p>Rails3では各種コンポーネントへの密結合を解消し、rubyの色んな資産と協調していくよ、という話。たぶん。<br />
そのためにAPIを定義しなおし、インターフェイスさえ揃えれば他のコンポーネントを利用できるようするみたい。具体的にコードを交えて説明してくださいました。</p>
<p>ActiveSupport::Concernのdepends_onメソッドが気になりますね。AOPっぽいことをスマートに表現してる印象。ちょっと違う？</p>
<p>明日も朝から参加なのでいいかげん寝ます。</p>
]]></content:encoded>
			<wfw:commentRss>http://tech.hapicky.com/archives/186/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tech.hapicky.com/archives/186" />
	</item>
		<item>
		<title>NetBeansでruby-debug</title>
		<link>http://tech.hapicky.com/archives/25</link>
		<comments>http://tech.hapicky.com/archives/25#comments</comments>
		<pubDate>Sat, 28 Jun 2008 15:57:47 +0000</pubDate>
		<dc:creator>hapicky</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://tech.hapicky.com/archives/25</guid>
		<description><![CDATA[NetBeansでrubyアプリケーションのデバッグ環境を整えてみました。 環境は以下のとおりです。 OS：Mac OSX（10.5 PowerPC） ruby：1.8.6 NetBeans：6.1 まずNetBeansのアップデートがないか確認しましょう。 メニューの[Tools]->[Plugins]を表示し、アップデートがあればインストールしておきます。 次にNetBeansのメニューから[Tools]->[Ruby Platforms]を選択。 [Debugger engine]にClassic Debuggerとある場合は「Install Fast Debugger」ボタンが表示されるかと思います。でも私の場合はgemのインストールにroot権限が必要なので、このボタンからはインストールできません。 ターミナルから以下にようにしてruby-debug-ideをインストールします。 &#62; sudo gem install ruby-debug-ide -v 0.1.10 ※最新の0.2.0をインストールしてしまうとデバッガが動作しませんでした。（NetBeans Wikiでも言及されていないような…。） gemのインストールが済んだらNetBeansを再起動し、再度[Tools]->[Ruby Platforms]を確認。 [Debugger engine]にFast Debuggerと表示されていれば準備OKです。 適当な箇所にブレークポイントを設定して、[Run]->[Debug Main Project]してみましょう♪]]></description>
			<content:encoded><![CDATA[<p>NetBeansでrubyアプリケーションのデバッグ環境を整えてみました。<br />
環境は以下のとおりです。</p>
<ul>
<li>OS：Mac OSX（10.5 PowerPC）</li>
<li>ruby：1.8.6</li>
<li>NetBeans：6.1</li>
</ul>
<p>まずNetBeansのアップデートがないか確認しましょう。<br />
メニューの[Tools]->[Plugins]を表示し、アップデートがあればインストールしておきます。</p>
<p>次にNetBeansのメニューから[Tools]->[Ruby Platforms]を選択。<br />
[Debugger engine]に<em>Classic Debugger</em>とある場合は「Install Fast Debugger」ボタンが表示されるかと思います。でも私の場合はgemのインストールにroot権限が必要なので、このボタンからはインストールできません。</p>
<p>ターミナルから以下にようにしてruby-debug-ideをインストールします。</p>
<pre class="brush:bash">&gt; sudo gem install ruby-debug-ide -v 0.1.10</pre>
<p>※最新の0.2.0をインストールしてしまうとデバッガが動作しませんでした。（<a href="http://wiki.netbeans.org/RubyDebugging"  target="_blank">NetBeans Wiki</a>でも言及されていないような…。）</p>
<p>gemのインストールが済んだらNetBeansを再起動し、再度[Tools]->[Ruby Platforms]を確認。<br />
[Debugger engine]に<em>Fast Debugger</em>と表示されていれば準備OKです。<br />
適当な箇所にブレークポイントを設定して、[Run]->[Debug Main Project]してみましょう♪</p>
]]></content:encoded>
			<wfw:commentRss>http://tech.hapicky.com/archives/25/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tech.hapicky.com/archives/25" />
	</item>
		<item>
		<title>RubyKaigi&#8217;08に行ってきました。</title>
		<link>http://tech.hapicky.com/archives/23</link>
		<comments>http://tech.hapicky.com/archives/23#comments</comments>
		<pubDate>Sun, 22 Jun 2008 13:49:10 +0000</pubDate>
		<dc:creator>hapicky</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[RubyKaigi]]></category>

		<guid isPermaLink="false">http://tech.hapicky.com/archives/23</guid>
		<description><![CDATA[昨日、今日と日本 Ruby 会議 2008に行ってきました。 今の私がrubyに触れるのは、「Railsを利用する」時がほとんど。 セッションの内容も初めて聞く内容ばかりでしたが、たいへん勉強＆刺激になりました。 私が気になったトピックとしては、 RSpec On Rails Rails2.1（特にnamed_scope） MacRuby あたり。 あと池澤一廣さんのライトニング・トークスもとてもよかった。元気をもらいました。 自分も一歩一歩着実に、技術に挑戦し続けていきたいですね。]]></description>
			<content:encoded><![CDATA[<p>昨日、今日と<a href="http://jp.rubyist.net/RubyKaigi2008/" target="_blank">日本 Ruby 会議 2008</a>に行ってきました。</p>
<p>今の私がrubyに触れるのは、「Railsを利用する」時がほとんど。<br />
セッションの内容も初めて聞く内容ばかりでしたが、たいへん勉強＆刺激になりました。</p>
<p>私が気になったトピックとしては、</p>
<ul>
<li><a href="http://rspec.rubyforge.org/documentation/rails/index.html" target="_blank">RSpec On Rails</a></li>
<li>Rails2.1（特に<a href="http://ryandaigle.com/articles/2008/3/24/what-s-new-in-edge-rails-has-finder-functionality" target="_blank">named_scope</a>）</li>
<li><a href="http://ruby.macosforge.org/trac/wiki/MacRuby" target="_blank">MacRuby</a></li>
</ul>
<p>あたり。</p>
<p>あと池澤一廣さんのライトニング・トークスもとてもよかった。元気をもらいました。</p>
<p>自分も一歩一歩着実に、技術に挑戦し続けていきたいですね。</p>
]]></content:encoded>
			<wfw:commentRss>http://tech.hapicky.com/archives/23/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tech.hapicky.com/archives/23" />
	</item>
		<item>
		<title>rubyでiTunesStore検索</title>
		<link>http://tech.hapicky.com/archives/6</link>
		<comments>http://tech.hapicky.com/archives/6#comments</comments>
		<pubDate>Fri, 04 Jan 2008 16:23:54 +0000</pubDate>
		<dc:creator>hapicky</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[itunes]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">/tech-memo/?p=6</guid>
		<description><![CDATA[iTunesStoreを検索するrubyスクリプトを作ってみました。 itunesstore.zip 使い方は、 上記zipを展開し、lib/itunes_store.rbをロードパスに置いてください。 jsonライブラリに依存しているので、gemでインストールするなどしてください。 以下のように記述することで、検索結果をHashの配列で取得できます。 require 'itunes_store' itunes = ItunesStore::Search.new results = itunes.search('beatles', :media =&#62; ItunesStore::Media::MUSIC, :entity =&#62; 'album') お気づきの点などあればご指摘お願いします。]]></description>
			<content:encoded><![CDATA[<p>iTunesStoreを検索するrubyスクリプトを作ってみました。<br />
<a href="http://macmini.local/tech-memo/wp-content/uploads/2008/01/itunesstore.zip" title="itunesstore.zip">itunesstore.zip</a><br />
使い方は、
<ul>
<li>上記zipを展開し、lib/itunes_store.rbをロードパスに置いてください。</li>
<li><a href="http://json.rubyforge.org/">jsonライブラリ</a>に依存しているので、gemでインストールするなどしてください。</li>
<li>以下のように記述することで、検索結果をHashの配列で取得できます。
<pre>require 'itunes_store'
itunes = ItunesStore::Search.new
results = itunes.search('beatles', :media =&gt; ItunesStore::Media::MUSIC,
			:entity =&gt; 'album')</pre>
</li>
</ul>
<p>お気づきの点などあればご指摘お願いします。</p>
]]></content:encoded>
			<wfw:commentRss>http://tech.hapicky.com/archives/6/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tech.hapicky.com/archives/6" />
	</item>
	</channel>
</rss>

