-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
1478 lines (922 loc) · 61.4 KB
/
index.html
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<!--[if IEMobile 7 ]><html class="no-js iem7"><![endif]-->
<!--[if lt IE 9]><html class="no-js lte-ie8"><![endif]-->
<!--[if (gt IE 8)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" lang="en"><!--<![endif]-->
<head>
<meta charset="utf-8">
<title>CilaCila</title>
<meta name="author" content="Karma">
<meta name="description" content="The Power of Variable Names 以问题为导向(Problem Orientation) 一个好的名字表达的是what而不是how 最适当的名字长度:8-20 ">
<!-- http://t.co/dKP3o1e -->
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="canonical" href="http://karmaQ.github.com">
<link href="/favicon.png" rel="icon">
<link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
<script src="/javascripts/modernizr-2.0.js"></script>
<script src="/javascripts/ender.js"></script>
<script src="/javascripts/octopress.js" type="text/javascript"></script>
<link href="/atom.xml" rel="alternate" title="CilaCila" type="application/atom+xml">
<!-- font-family: 'Knewave', cursive; -->
<link href='http://fonts.googleapis.com/css?family=Knewave' rel='stylesheet' type='text/css'>
<!-- font-family: 'Cantata One', serif; -->
<link href='http://fonts.googleapis.com/css?family=Cantata+One' rel='stylesheet' type='text/css'>
</head>
<body >
<header role="banner"><hgroup>
<h1>
<a href="/">CilaCila</a>
<span>A blogging framework for hackers.</span>
</h1>
</hgroup>
</header>
<nav role="navigation"><ul class="subscription" data-subscription="rss">
<li><a href="/atom.xml" rel="subscribe-rss" title="subscribe via RSS">RSS</a></li>
</ul>
<form action="http://google.com/search" method="get">
<fieldset role="search">
<input type="hidden" name="q" value="site:karmaQ.github.com" />
<input class="search" type="text" name="q" results="0" placeholder="Search"/>
</fieldset>
</form>
<ul class="main-navigation">
<li><a href="/">Home</a></li>
<li><a href="/blog/archives">Archives</a></li>
</ul>
</nav>
<div id="main">
<div id="content">
<div class="blog-index">
<article>
<header>
<h1 class="entry-title"><a href="/blog/2012/08/03/code-complete-tips/">[Code Complete]tips</a></h1>
<p class="meta">
<time datetime="2012-08-03T15:56:00+08:00" pubdate data-updated="true">Aug 3<span>rd</span>, 2012</time>
| <a href="/blog/2012/08/03/code-complete-tips/#disqus_thread">Comments</a>
|
</p>
</header>
<div class="entry-content"><h1>The Power of Variable Names</h1>
<ul>
<li>以问题为导向(Problem Orientation)
<ul>
<li>一个好的名字表达的是what而不是how</li>
</ul>
</li>
<li>最适当的名字长度:8-20</li>
<li></li>
</ul>
</div>
</article>
<article>
<header>
<h1 class="entry-title"><a href="/blog/2012/07/05/keep-finders-on-their-own-model/">Keep Finders on Their Own Model</a></h1>
<p class="meta">
<time datetime="2012-07-05T16:12:00+08:00" pubdate data-updated="true">Jul 5<span>th</span>, 2012</time>
| <a href="/blog/2012/07/05/keep-finders-on-their-own-model/#disqus_thread">Comments</a>
|
</p>
</header>
<div class="entry-content"><p><strong>solution but needs your judgment</strong></p>
<pre><code>class User < ActiveRecord::Base
has_many :memberships def find_recent_active_memberships
memberships.only_active.order_by_activity.limit(5) end end
class Membership < ActiveRecord::Base belongs_to :user scope :only_active, where(:active => true) scope :order_by_activity, order('last_active_on DESC') end
</code></pre>
</div>
</article>
<article>
<header>
<h1 class="entry-title"><a href="/blog/2012/07/05/put-all-find-calls-into-finders-on-the-model/">Put All Find() Calls Into Finders on the Model</a></h1>
<p class="meta">
<time datetime="2012-07-05T15:28:00+08:00" pubdate data-updated="true">Jul 5<span>th</span>, 2012</time>
| <a href="/blog/2012/07/05/put-all-find-calls-into-finders-on-the-model/#disqus_thread">Comments</a>
|
<span class="categories">
<a class='category' href='/blog/categories/bestpractice/'>BestPractice</a>, <a class='category' href='/blog/categories/rails/'>Rails</a>
</span>
</p>
</header>
<div class="entry-content"><pre><code><ul> <% User.find(:order => "last_name").each do |user| -%> <li><%= user.last_name %> <%= user.first_name %></li> <% end %> </ul>
</code></pre>
<p>===========></p>
<pre><code>class UsersController < ApplicationController def index @users = User.order("last_name") end end
<ul> <% @users.each do |user| -%> <li><%= user.last_name %> <%= user.first_name %></li> <% end %> </ul>===========>
class UsersController < ApplicationController def index @users = User.ordered end end
class User < ActiveRecord::Base
def self.ordered order("last_name") end end
</code></pre>
<p><strong>Solution</strong> class User < ActiveRecord::Base scope :ordered, order(“last_name”) end</p>
</div>
</article>
<article>
<header>
<h1 class="entry-title"><a href="/blog/2012/06/27/follow-the-law-of-demeter/">Follow the Law of Demeter</a></h1>
<p class="meta">
<time datetime="2012-06-27T14:59:00+08:00" pubdate data-updated="true">Jun 27<span>th</span>, 2012</time>
| <a href="/blog/2012/06/27/follow-the-law-of-demeter/#disqus_thread">Comments</a>
|
<span class="categories">
<a class='category' href='/blog/categories/bestpractice/'>BestPractice</a>, <a class='category' href='/blog/categories/rails/'>Rails</a>
</span>
</p>
</header>
<div class="entry-content"><h3>Follow the law of Demeter</h3>
<pre><code>class Address < ActiveRecord::Base
belongs_to :customer end
class Customer < ActiveRecord::Base has_one :address has_many :invoices end
class Invoice < ActiveRecord::Base
belongs_to :customer end
# Views
<%= @invoice.customer.name %> <%= @invoice.customer.address.street %>
<%= @invoice.customer.address.city %>
<%= @invoice.customer.address.state %>
<%= @invoice.customer.address.zip_code %>
</code></pre>
<p>Law of Demeter:
lays out the concept that an object can call methods on a related object but that it should not reach through that object to call a method on a third. In Rails, this could be summed up as “use only one dot.”</p>
<p>So we can write a method :</p>
<pre><code>class Customer < ActiveRecord::Base
has_one :address has_many :invoices def street address.street end def city
address.city end def state address.state end
end
<%= @invoice.customer_name %>
<%= @invoice.customer_street %>
</code></pre>
<p>In addition, your public interface on Invoice has been polluted by methods that arguably have nothing to do with the rest of your interface for invoices.</p>
<p><strong>Solution</strong></p>
<p>Fortunately, Ruby on Rails includes a function that addresses the first concern. This method is the class-level delegate method. This method provides a shortcut for indicating that one or more methods that will be created on your object are actually provided by a related object. Using this delegate method, you can rewrite your exam- ple like this:</p>
<pre><code>class Customer < ActiveRecord::Base
has_one :address has_many :invoices delegate :street, :city, :state, :zip_code, :to => :address
end
class Invoice < ActiveRecord::Base belongs_to :customer delegate :name, :street, :to => :customer, :prefix => true
end
</code></pre>
</div>
</article>
<article>
<header>
<h1 class="entry-title"><a href="/blog/2012/06/26/ruby-way/">Ruby Way</a></h1>
<p class="meta">
<time datetime="2012-06-26T09:55:00+08:00" pubdate data-updated="true">Jun 26<span>th</span>, 2012</time>
| <a href="/blog/2012/06/26/ruby-way/#disqus_thread">Comments</a>
|
<span class="categories">
<a class='category' href='/blog/categories/ruby/'>Ruby</a>
</span>
</p>
</header>
<div class="entry-content"><p>面试时发现了自己的很多不足,从今天起再次系统的学习一下Ruby</p>
<h3>Ruby.new</h3>
<hr />
<ul>
<li>类是状态和使用这些状态的方法的组合</li>
<li>标准的构造函数成为new</li>
<li>方法是通过向对象发送该消息来唤起调用的,消息包含方法名称以及方法可能需要的参数.(来自smalltalk)</li>
<li>点(“.”)之前的东西称为receiver ,点后边的名字是调用的方法</li>
<li>代码写在一行的话,可以用分号分句</li>
<li>名称的第一个字符表示这个名称如何被使用: 局部变量,方法参数和方法名都以小写字母或者下划线开始,全局变量以美元符号为前缀,实例变量以@开始,类变量则以@@开始,最后类名称,模块名称都必须以大写祖母开始(@后不可直接跟数字).</li>
<li>包含多个单词的实例变量名称在词与词之间用下划线连接,类变量则以很合大小写方式区分</li>
</ul>
<hr />
<ul>
<li>nil是一个对象,不表示任何东西</li>
<li>nil和false代表false,其余的都是true(包括0)</li>
<li>语句修饰符(satement modifiers)</li>
<li>/patten/ 正则表达式也是对象</li>
<li>=~ 匹配操作符,用于匹配字符串,他返回的是模式开始的位置,否则返回nil</li>
<li>block只是在花括号或者do..end之间的一组代码(花括号的绑定更紧一些),一般来说单行的时候使用花括号,多行使用do/end</li>
<li>把block放在含有方法调用的源码行的结尾处可以实现关联,参数在block之前,方法可以使用yield一次或者多次的调用(incoke)block.</li>
<li>在block中||之间给出的参数名来自yield</li>
</ul>
<h3>Classes,Objects and Variables</h3>
<ul>
<li>initialize 方法把调用new时所使用的参数传入该方法</li>
<li>每个对象都有对实例变量的一份拷贝</li>
<li>Ruby中类永远都不是封闭的,可以打开并添加新的feature</li>
<li>用 < 表示继承 , super 回想当前对象的弗雷发送一个消息,要求它调用子类中的同名方法.</li>
<li>当定义一个类而没有指定父类时,Ruby默认以object类作为其父类</li>
<li>Ruby可以通过创建一个名字以等号接的方法来达成这一目标,这些方法可以作为赋值操作的目标</li>
<li>attr_reader attr_writer</li>
<li>属性就是一个方法,通过方法暴漏出来的外部形态我们称之为属性,其他的动作就是方法.</li>
<li>类变量被所有的对象共享,并且只存在一份拷贝,类变量在使用前必须被初始化(通常就是赋值).</li>
<li>类变量对类及其实例都是似有的,如果你想让他们都能够被外部世界访问,需要通过实例方法或者类方法.</li>
<li>通过在方法名之前防止类名(.)来定义类方法,或者使用self.以及class <<self 来定义类方法</li>
<li>通过private_class_method :mothed_name 来将方法私有化.</li>
<li>public 可以被任何人调用,没有访问限制,方法默认是public的,protected方法只能被定义了该方法的类或其子类的对象所调用,整个家族均可访问,private方法不能被明确的接收者调用</li>
<li>访问控制是在程序运行时动态判定的,只有当代码试图执行首先的方法时才会得到一个访问违规.</li>
<li>使用pubilc,protected,private三个函数来为类或者模块定义方法的指定访问级别,也可以将方法名作为参数列表传入访问控制函数来设置他们的访问级别</li>
<li>变量是对象的引用而不是对象,对象大多保存在堆中,并且由变量指向他们</li>
<li>使用dup来避免创建别名</li>
</ul>
<h3>Containers,Blocks and Iterators</h3>
<ul>
<li></li>
</ul>
</div>
</article>
<article>
<header>
<h1 class="entry-title"><a href="/blog/2012/06/05/lets-rspec/">Lets Rspec</a></h1>
<p class="meta">
<time datetime="2012-06-05T11:16:00+08:00" pubdate data-updated="true">Jun 5<span>th</span>, 2012</time>
| <a href="/blog/2012/06/05/lets-rspec/#disqus_thread">Comments</a>
|
</p>
</header>
<div class="entry-content">
</div>
</article>
<article>
<header>
<h1 class="entry-title"><a href="/blog/2012/05/28/bundler-and-gems/">[Rails Tutorial]Bundler and Gems</a></h1>
<p class="meta">
<time datetime="2012-05-28T12:41:00+08:00" pubdate data-updated="true">May 28<span>th</span>, 2012</time>
| <a href="/blog/2012/05/28/bundler-and-gems/#disqus_thread">Comments</a>
|
<span class="categories">
<a class='category' href='/blog/categories/bundler/'>Bundler</a>, <a class='category' href='/blog/categories/gems/'>Gems</a>, <a class='category' href='/blog/categories/rubyonrails/'>RubyonRails</a>
</span>
</p>
</header>
<div class="entry-content"><p>rails 3 中新增加了一个Library管理工具 <a href="http://gembundler.com/">Bundler</a>,它提供了好的工具来管理rails3项目依赖的gems。我们需要通过Gemfile来管理requires.</p>
<p>下面是Gemfile的一般写法:</p>
<p>每个Gemfile至少要依赖于一个以上的源,通过以下的形式进行声明:</p>
<pre><code>source :rubygems
source "http://rubygems.org"
source :rubyforge
source "http://gems.rubyforge.org"
source :gemcutter
source "http://gemcutter.org"
</code></pre>
<p>当然的由于众所周知的墙的问题,使用上边的源可能会出现某些问题…我推荐使用淘宝提供的墙内源:</p>
<pre><code>source 'http://ruby.taobao.org'
</code></pre>
<p>通过gem关键字来声明所依赖的Gems</p>
<pre><code>gem "nokogiri"
gem "rails", "3.0.0.beta3"
gem "rack", ">=1.0"
gem "thin", "~>1.1"
</code></pre>
<p>第一个参数是gem的名字,第二个参数可以指定版本,后边说明符的用法如下</p>
<ul>
<li>首先是类似于 3.0.0.beta3 这样直接指定版本号</li>
<li>>= 1.0 表示大于1.0版本</li>
<li>~> 比较有意思,我们用一个例子来说明 ~> 2.0.3 就相当于 >= 2.0.3 并且 < 2.1. ~> 2.1 表示 >= 2.1 并且 < 3.0. ~> 2.2.beta 将匹配类似与 2.2.beta.12 的版本号。</li>
</ul>
<p>关于Gems的详细介绍可以参见<a href="http://docs.rubygems.org/read/chapter/16#page74">这里</a></p>
<ul>
<li>Version 2.1.0 — 基版本</li>
<li>Version 2.2.0 — 引入了一些新特性</li>
<li>Version 2.2.1 — 修正一些Bugs</li>
<li>Version 2.2.2 — 精简了代码</li>
<li>Version 2.3.0 — 更多的新特性</li>
<li>Version 3.0.0 — 重写了接口. 应用 2.x 的代码可能会出现兼容性问题。</li>
</ul>
<p>如果 require 的档名不同,可以加上 :require 参数</p>
<pre><code>gem "rspec", :require => "spec"
gem "sqlite3-ruby", "1.2.5", :require => "sqlite3"
gem "gem-release", :require => false
gem "redis", :require => ["redis/connection/hiredis", "redis"]
</code></pre>
<p>更神奇的是还可以用 Git 当做来源,甚至可以指定 branch, tag 或 ref,当然了默认的 branch 是 master 啦。</p>
<pre><code>gem "nokogiri", :git => "git://github.com/tenderlove/nokogiri.git", :branch => "1.4" git "git://github.com/wycats/thor.git", :tag => "v0.13.4"
gem "thor"
</code></pre>
<p>如果你是一个Gem的开发者,你还可以直接指定本地的gem哦</p>
<pre><code>gem "nokogiri", :path => "~/sw/gems/nokogiri"
</code></pre>
<p>最后还要介绍一个比较重要的关键字 Group,可以指定某些Gem在特定的环境下被加载:</p>
<pre><code>gem "wirble", :group => :development
gem "ruby-debug", :group => [:development, :test]
group :test do
gem "rspec"
end
</code></pre>
<p>没有指定 Group 的Gems是属于 Default Group 的。
通过 Group 我们可以更方便的执行 Bundle ,比如</p>
<pre><code>$ bundle install --without test development
</code></pre>
<p>Group的功能还是很强大的,大多数特性咱也不太会用的说,<a href="http://yehudakatz.com/2010/05/09/the-how-and-why-of-bundler-groups/">这里</a>有老外写的某文章,可以看看啦。</p>
<p>直接执行<code>$ bundle</code>可以列出常用的命令,比如</p>
<pre><code>bundle check # 检查目前缺少哪些Gems
bundle init # 在当前目录生成Gemfile
bundle install # 根据Gemfile安装环境到当前的系统
</code></pre>
<hr />
<p>关于 RubyGems 我觉得没理由不看<a href="http://docs.rubygems.org/read/chapter/1">官方文档</a>的吧,各个方面都特别详细,有时间好好看看.</p>
</div>
</article>
<article>
<header>
<h1 class="entry-title"><a href="/blog/2012/05/27/our-first-tests/">[Rails Tutorial] 自动化测试环境</a></h1>
<p class="meta">
<time datetime="2012-05-27T16:22:00+08:00" pubdate data-updated="true">May 27<span>th</span>, 2012</time>
| <a href="/blog/2012/05/27/our-first-tests/#disqus_thread">Comments</a>
|
<span class="categories">
<a class='category' href='/blog/categories/rspec/'>Rspec</a>, <a class='category' href='/blog/categories/rubyonrails/'>RubyonRails</a>, <a class='category' href='/blog/categories/tests/'>Tests</a>
</span>
</p>
</header>
<div class="entry-content"><p>今天的这篇主要参考的Ruby-China的<a href="http://ruby-china.org/topics/2990">这篇帖子</a>,基本是照搬…Orz</p>
<h4>1、 新建项目(不启用Test::Unit,不执行Bundle)</h4>
<pre><code>$ rails new appname --skip-test-unit --skip-bundle
</code></pre>
<h4>2、 修改 Gemfile ,并 bundle install</h4>
<p>OS X 要安装 growl-notify ,是<a href="http://growl.info/extras.php">这里</a>还是<a href="http://soft.macx.cn/Growl133-3189.htm">这里</a>,就看你了。
liveload的<a href="http://help.livereload.com/kb/general-use/browser-extensions">浏览器扩展</a></p>
<figure class='code'><figcaption><span> (Gemfile)</span> <a href='/downloads/code/our_first_tests/Gemfile'>download</a></figcaption>
<div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
<span class='line-number'>44</span>
<span class='line-number'>45</span>
<span class='line-number'>46</span>
<span class='line-number'>47</span>
<span class='line-number'>48</span>
<span class='line-number'>49</span>
<span class='line-number'>50</span>
<span class='line-number'>51</span>
<span class='line-number'>52</span>
<span class='line-number'>53</span>
<span class='line-number'>54</span>
<span class='line-number'>55</span>
<span class='line-number'>56</span>
<span class='line-number'>57</span>
<span class='line-number'>58</span>
<span class='line-number'>59</span>
<span class='line-number'>60</span>
<span class='line-number'>61</span>
<span class='line-number'>62</span>
<span class='line-number'>63</span>
<span class='line-number'>64</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="nb">require</span> <span class="s1">'rbconfig'</span>
</span><span class='line'><span class="no">HOST_OS</span> <span class="o">=</span> <span class="no">RbConfig</span><span class="o">::</span><span class="no">CONFIG</span><span class="o">[</span><span class="s1">'host_os'</span><span class="o">]</span>
</span><span class='line'><span class="n">source</span> <span class="s1">'http://rubygems.org'</span>
</span><span class='line'>
</span><span class='line'><span class="n">gem</span> <span class="s1">'rails'</span><span class="p">,</span> <span class="s1">'3.2.3'</span>
</span><span class='line'>
</span><span class='line'><span class="c1"># Gems used only for assets and not required</span>
</span><span class='line'><span class="c1"># in production environments by default.</span>
</span><span class='line'><span class="n">group</span> <span class="ss">:assets</span> <span class="k">do</span>
</span><span class='line'> <span class="n">gem</span> <span class="s1">'sass-rails'</span><span class="p">,</span> <span class="s1">'~> 3.2.3'</span>
</span><span class='line'> <span class="n">gem</span> <span class="s1">'coffee-rails'</span><span class="p">,</span> <span class="s1">'~> 3.2.1'</span>
</span><span class='line'> <span class="n">gem</span> <span class="s1">'uglifier'</span><span class="p">,</span> <span class="s1">'>= 1.0.3'</span>
</span><span class='line'><span class="k">end</span>
</span><span class='line'>
</span><span class='line'><span class="n">gem</span> <span class="s1">'jquery-rails'</span>
</span><span class='line'><span class="n">gem</span> <span class="s1">'rspec-rails'</span> <span class="p">,</span><span class="ss">:group</span> <span class="o">=></span> <span class="o">[</span><span class="ss">:development</span><span class="p">,</span><span class="ss">:test</span><span class="o">]</span>
</span><span class='line'>
</span><span class='line'><span class="c1"># jquery-ui</span>
</span><span class='line'><span class="c1"># gem 'jquery-ui-rails'</span>
</span><span class='line'>
</span><span class='line'><span class="c1"># bootstrap</span>
</span><span class='line'><span class="c1"># gem 'anjlab-bootstrap-rails', :require => 'bootstrap-rails',:git => 'git://github.com/anjlab/bootstrap-rails.git'</span>
</span><span class='line'>
</span><span class='line'><span class="k">if</span> <span class="no">HOST_OS</span> <span class="o">=~</span> <span class="sr">/linux/i</span>
</span><span class='line'> <span class="n">gem</span> <span class="s1">'therubyracer'</span><span class="p">,</span> <span class="s1">'>= 0.8.2'</span>
</span><span class='line'><span class="k">end</span>
</span><span class='line'><span class="k">case</span> <span class="no">HOST_OS</span>
</span><span class='line'> <span class="k">when</span> <span class="sr">/darwin/i</span>
</span><span class='line'> <span class="n">gem</span> <span class="s1">'rb-fsevent'</span><span class="p">,</span> <span class="ss">:group</span> <span class="o">=></span> <span class="ss">:development</span>
</span><span class='line'> <span class="n">gem</span> <span class="s1">'growl'</span><span class="p">,</span> <span class="ss">:group</span> <span class="o">=></span> <span class="ss">:development</span>
</span><span class='line'> <span class="n">gem</span> <span class="s1">'guard-pow'</span><span class="p">,</span> <span class="ss">:group</span> <span class="o">=></span> <span class="ss">:development</span>
</span><span class='line'> <span class="k">when</span> <span class="sr">/linux/i</span>
</span><span class='line'> <span class="n">gem</span> <span class="s1">'libnotify'</span><span class="p">,</span> <span class="ss">:group</span> <span class="o">=></span> <span class="ss">:development</span>
</span><span class='line'> <span class="n">gem</span> <span class="s1">'rb-inotify'</span><span class="p">,</span> <span class="ss">:group</span> <span class="o">=></span> <span class="ss">:development</span>
</span><span class='line'> <span class="k">when</span> <span class="sr">/mswin|windows/i</span>
</span><span class='line'> <span class="n">gem</span> <span class="s1">'rb-fchange'</span><span class="p">,</span> <span class="ss">:group</span> <span class="o">=></span> <span class="ss">:development</span>
</span><span class='line'> <span class="n">gem</span> <span class="s1">'win32console'</span><span class="p">,</span> <span class="ss">:group</span> <span class="o">=></span> <span class="ss">:development</span>
</span><span class='line'> <span class="n">gem</span> <span class="s1">'rb-notifu'</span><span class="p">,</span> <span class="ss">:group</span> <span class="o">=></span> <span class="ss">:development</span>
</span><span class='line'><span class="k">end</span>
</span><span class='line'>
</span><span class='line'>
</span><span class='line'><span class="c1"># Use unicorn as the web server</span>
</span><span class='line'><span class="c1"># gem 'unicorn'</span>
</span><span class='line'>
</span><span class='line'><span class="c1"># Deploy with Capistrano</span>
</span><span class='line'><span class="c1"># gem 'capistrano'</span>
</span><span class='line'>
</span><span class='line'><span class="c1"># To use debugger</span>
</span><span class='line'><span class="c1"># gem 'ruby-debug19', :require => 'ruby-debug'</span>
</span><span class='line'>
</span><span class='line'><span class="n">group</span> <span class="ss">:test</span> <span class="k">do</span>
</span><span class='line'> <span class="c1"># Pretty printed test output</span>
</span><span class='line'> <span class="n">gem</span> <span class="s1">'turn'</span><span class="p">,</span> <span class="ss">:require</span> <span class="o">=></span> <span class="kp">false</span>
</span><span class='line'> <span class="n">gem</span> <span class="s1">'factory_girl_rails'</span> <span class="p">,</span> <span class="s2">"~> 1.1.0"</span> <span class="p">,</span><span class="ss">:require</span> <span class="o">=></span> <span class="kp">false</span>
</span><span class='line'> <span class="n">gem</span> <span class="s1">'database_cleaner'</span><span class="p">,</span> <span class="s2">">= 0.6.7"</span>
</span><span class='line'> <span class="c1"># gem 'mongoid-rspec', ">= 1.4.4"</span>
</span><span class='line'> <span class="n">gem</span> <span class="s2">"capybara"</span><span class="p">,</span><span class="s2">">= 1.1.1"</span>
</span><span class='line'> <span class="n">gem</span> <span class="s2">"launchy"</span><span class="p">,</span> <span class="s2">">= 2.0.5"</span>
</span><span class='line'> <span class="n">gem</span> <span class="s1">'guard-spork'</span>
</span><span class='line'> <span class="n">gem</span> <span class="s1">'spork'</span><span class="p">,</span> <span class="s1">'~> 0.9.0'</span>
</span><span class='line'> <span class="n">gem</span> <span class="s2">"guard-rspec"</span>
</span><span class='line'> <span class="n">gem</span> <span class="s1">'guard-livereload'</span>
</span><span class='line'> <span class="n">gem</span> <span class="s1">'guard-bundler'</span>
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
<h4>3、 初始化 Rspec,Guard, Spork</h4>
<pre><code>$ rails g rspec:install
$ guard init
</code></pre>
<p><del>$ bin/guard init rspec && bin/guard init spork</del></p>
<p>修改 Guardfile</p>
<figure class='code'><figcaption><span> (Guardfile)</span> <a href='/downloads/code/our_first_tests/Guardfile'>download</a></figcaption>
<div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
<span class='line-number'>44</span>
<span class='line-number'>45</span>
<span class='line-number'>46</span>
<span class='line-number'>47</span>
<span class='line-number'>48</span>
<span class='line-number'>49</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="c1"># A sample Guardfile</span>
</span><span class='line'><span class="c1"># More info at https://github.com/guard/guard#readme</span>
</span><span class='line'><span class="n">guard</span> <span class="s1">'livereload'</span> <span class="k">do</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="sr">%r{app/.+\.(erb|haml)}</span><span class="p">)</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="sr">%r{app/helpers/.+\.rb}</span><span class="p">)</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="sr">%r{(public/|app/assets).+\.(css|js|html)}</span><span class="p">)</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="sr">%r{(app/assets/.+\.css)\.s[ac]ss}</span><span class="p">)</span> <span class="p">{</span> <span class="o">|</span><span class="n">m</span><span class="o">|</span> <span class="n">m</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span> <span class="p">}</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="sr">%r{(app/assets/.+\.js)\.coffee}</span><span class="p">)</span> <span class="p">{</span> <span class="o">|</span><span class="n">m</span><span class="o">|</span> <span class="n">m</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span> <span class="p">}</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="sr">%r{config/locales/.+\.yml}</span><span class="p">)</span>
</span><span class='line'><span class="k">end</span>
</span><span class='line'>
</span><span class='line'><span class="n">guard</span> <span class="s1">'pow'</span> <span class="k">do</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="s1">'.powrc'</span><span class="p">)</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="s1">'.powenv'</span><span class="p">)</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="s1">'.rvmrc'</span><span class="p">)</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="s1">'Gemfile'</span><span class="p">)</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="s1">'Gemfile.lock'</span><span class="p">)</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="s1">'config/application.rb'</span><span class="p">)</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="s1">'config/environment.rb'</span><span class="p">)</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="sr">%r{^config/environments/.*\.rb$}</span><span class="p">)</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="sr">%r{^config/initializers/.*\.rb$}</span><span class="p">)</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="sr">%r{^config/settings(\.local)?\.yml$}</span><span class="p">)</span>
</span><span class='line'><span class="k">end</span>
</span><span class='line'>
</span><span class='line'><span class="n">guard</span> <span class="s1">'spork'</span><span class="p">,</span> <span class="ss">:cucumber_env</span> <span class="o">=></span> <span class="p">{</span> <span class="s1">'RAILS_ENV'</span> <span class="o">=></span> <span class="s1">'test'</span> <span class="p">},</span> <span class="ss">:rspec_env</span> <span class="o">=></span> <span class="p">{</span> <span class="s1">'RAILS_ENV'</span> <span class="o">=></span> <span class="s1">'test'</span> <span class="p">}</span> <span class="k">do</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="s1">'config/application.rb'</span><span class="p">)</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="s1">'config/environment.rb'</span><span class="p">)</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="sr">%r{^config/environments/.+\.rb$}</span><span class="p">)</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="sr">%r{^config/initializers/.+\.rb$}</span><span class="p">)</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="s1">'spec/spec_helper.rb'</span><span class="p">)</span>
</span><span class='line'><span class="k">end</span>
</span><span class='line'>
</span><span class='line'><span class="n">guard</span> <span class="s1">'rspec'</span><span class="p">,</span> <span class="ss">:version</span> <span class="o">=></span> <span class="mi">2</span> <span class="p">,</span><span class="ss">:cli</span> <span class="o">=></span> <span class="s2">"--drb"</span><span class="p">,</span><span class="ss">:notification</span> <span class="o">=></span> <span class="kp">true</span> <span class="k">do</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="sr">%r{^spec/.+_spec\.rb$}</span><span class="p">)</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="sr">%r{^lib/(.+)\.rb$}</span><span class="p">)</span> <span class="p">{</span> <span class="o">|</span><span class="n">m</span><span class="o">|</span> <span class="s2">"spec/lib/</span><span class="si">#{</span><span class="n">m</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span><span class="si">}</span><span class="s2">_spec.rb"</span> <span class="p">}</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="s1">'spec/spec_helper.rb'</span><span class="p">)</span> <span class="p">{</span> <span class="s2">"spec/"</span> <span class="p">}</span>
</span><span class='line'>
</span><span class='line'> <span class="c1"># Rails example</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="sr">%r{^spec/.+_spec\.rb$}</span><span class="p">)</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="sr">%r{^app/(.+)\.rb$}</span><span class="p">)</span> <span class="p">{</span> <span class="o">|</span><span class="n">m</span><span class="o">|</span> <span class="s2">"spec/</span><span class="si">#{</span><span class="n">m</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span><span class="si">}</span><span class="s2">_spec.rb"</span> <span class="p">}</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="sr">%r{^lib/(.+)\.rb$}</span><span class="p">)</span> <span class="p">{</span> <span class="o">|</span><span class="n">m</span><span class="o">|</span> <span class="s2">"spec/lib/</span><span class="si">#{</span><span class="n">m</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span><span class="si">}</span><span class="s2">_spec.rb"</span> <span class="p">}</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="sr">%r{^app/controllers/(.+)_(controller)\.rb$}</span><span class="p">)</span> <span class="p">{</span> <span class="o">|</span><span class="n">m</span><span class="o">|</span> <span class="o">[</span><span class="s2">"spec/routing/</span><span class="si">#{</span><span class="n">m</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span><span class="si">}</span><span class="s2">_routing_spec.rb"</span><span class="p">,</span> <span class="s2">"spec/</span><span class="si">#{</span><span class="n">m</span><span class="o">[</span><span class="mi">2</span><span class="o">]</span><span class="si">}</span><span class="s2">s/</span><span class="si">#{</span><span class="n">m</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span><span class="si">}</span><span class="s2">_</span><span class="si">#{</span><span class="n">m</span><span class="o">[</span><span class="mi">2</span><span class="o">]</span><span class="si">}</span><span class="s2">_spec.rb"</span><span class="p">,</span> <span class="s2">"spec/acceptance/</span><span class="si">#{</span><span class="n">m</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span><span class="si">}</span><span class="s2">_spec.rb"</span><span class="o">]</span> <span class="p">}</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="sr">%r{^spec/support/(.+)\.rb$}</span><span class="p">)</span> <span class="p">{</span> <span class="s2">"spec/"</span> <span class="p">}</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="s1">'spec/spec_helper.rb'</span><span class="p">)</span> <span class="p">{</span> <span class="s2">"spec/"</span> <span class="p">}</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="s1">'config/routes.rb'</span><span class="p">)</span> <span class="p">{</span> <span class="s2">"spec/routing"</span> <span class="p">}</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="s1">'app/controllers/application_controller.rb'</span><span class="p">)</span> <span class="p">{</span> <span class="s2">"spec/controllers"</span> <span class="p">}</span>
</span><span class='line'> <span class="c1"># Capybara request specs</span>
</span><span class='line'> <span class="n">watch</span><span class="p">(</span><span class="sr">%r{^app/views/(.+)/.*\.(erb|haml)$}</span><span class="p">)</span> <span class="p">{</span> <span class="o">|</span><span class="n">m</span><span class="o">|</span> <span class="s2">"spec/requests/</span><span class="si">#{</span><span class="n">m</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span><span class="si">}</span><span class="s2">_spec.rb"</span> <span class="p">}</span>
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
<h4>4、 修改 spechelper</h4>
<p>如果你没有使用activerecorder 一定要按注释修改文件.</p>
<figure class='code'><figcaption><span> (spec_helper.rb)</span> <a href='/downloads/code/our_first_tests/spec_helper.rb'>download</a></figcaption>
<div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
<span class='line-number'>44</span>
<span class='line-number'>45</span>
<span class='line-number'>46</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="nb">require</span> <span class="s1">'rubygems'</span>
</span><span class='line'><span class="nb">require</span> <span class="s1">'spork'</span>
</span><span class='line'>
</span><span class='line'><span class="no">Spork</span><span class="o">.</span><span class="n">prefork</span> <span class="k">do</span>
</span><span class='line'> <span class="c1"># Loading more in this block will cause your tests to run faster. However, </span>
</span><span class='line'> <span class="c1"># if you change any configuration or code from libraries loaded here, you'll</span>
</span><span class='line'> <span class="c1"># need to restart spork for it take effect.</span>
</span><span class='line'> <span class="c1"># This file is copied to spec/ when you run 'rails generate rspec:install'</span>
</span><span class='line'> <span class="no">ENV</span><span class="o">[</span><span class="s2">"RAILS_ENV"</span><span class="o">]</span> <span class="o">||=</span> <span class="s1">'test'</span>
</span><span class='line'> <span class="nb">require</span> <span class="no">File</span><span class="o">.</span><span class="n">expand_path</span><span class="p">(</span><span class="s2">"../../config/environment"</span><span class="p">,</span> <span class="bp">__FILE__</span><span class="p">)</span>
</span><span class='line'> <span class="nb">require</span> <span class="s1">'rspec/rails'</span>
</span><span class='line'> <span class="nb">require</span> <span class="s1">'rspec/autorun'</span>
</span><span class='line'>
</span><span class='line'> <span class="c1"># Requires supporting ruby files with custom matchers and macros, etc,</span>
</span><span class='line'> <span class="c1"># in spec/support/ and its subdirectories.</span>
</span><span class='line'> <span class="no">Dir</span><span class="o">[</span><span class="no">Rails</span><span class="o">.</span><span class="n">root</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s2">"spec/support/**/*.rb"</span><span class="p">)</span><span class="o">].</span><span class="n">each</span> <span class="p">{</span><span class="o">|</span><span class="n">f</span><span class="o">|</span> <span class="nb">require</span> <span class="n">f</span><span class="p">}</span>
</span><span class='line'>
</span><span class='line'> <span class="no">RSpec</span><span class="o">.</span><span class="n">configure</span> <span class="k">do</span> <span class="o">|</span><span class="n">config</span><span class="o">|</span>
</span><span class='line'> <span class="c1"># == Mock Framework</span>
</span><span class='line'> <span class="c1">#</span>
</span><span class='line'> <span class="c1"># If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:</span>
</span><span class='line'> <span class="c1">#</span>
</span><span class='line'> <span class="c1"># config.mock_with :mocha</span>
</span><span class='line'> <span class="c1"># config.mock_with :flexmock</span>
</span><span class='line'> <span class="c1"># config.mock_with :rr</span>
</span><span class='line'> <span class="n">config</span><span class="o">.</span><span class="n">mock_with</span> <span class="ss">:rspec</span>
</span><span class='line'>
</span><span class='line'> <span class="c1"># Remove this line if you're not using ActiveRecord or ActiveRecord fixtures</span>
</span><span class='line'> <span class="n">config</span><span class="o">.</span><span class="n">fixture_path</span> <span class="o">=</span> <span class="s2">"</span><span class="si">#{</span><span class="o">::</span><span class="no">Rails</span><span class="o">.</span><span class="n">root</span><span class="si">}</span><span class="s2">/spec/fixtures"</span>
</span><span class='line'>
</span><span class='line'> <span class="c1"># If you're not using ActiveRecord, or you'd prefer not to run each of your</span>
</span><span class='line'> <span class="c1"># examples within a transaction, remove the following line or assign false</span>
</span><span class='line'> <span class="c1"># instead of true.</span>