draper 0.13.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore CHANGED
@@ -6,4 +6,5 @@ pkg/*
6
6
  coverage.data
7
7
  coverage/*
8
8
  .yardoc
9
- tmp
9
+ tmp
10
+ vendor/bundle
@@ -10,6 +10,10 @@
10
10
 
11
11
  * Allow proper overriding of special ActiveModel methods
12
12
 
13
+ == v0.12.3
14
+
15
+ * Fix i18n issue, see #202
16
+
13
17
  == 0.12.2
14
18
 
15
19
  * Fix bug with initializing ammeter
@@ -357,6 +357,26 @@ Now when you call the association it will use a decorator.
357
357
  <%= @article.author.fancy_name %>
358
358
  ```
359
359
 
360
+ ### A note on Rails configuration
361
+
362
+ Draper loads your application's decorators when Rails start. This may lead to an issue with configuring I18n, whereby the settings you provide in `./config/application.rb` are ignored. This happens when you use the `I18n` constant at the class-level in one of the models that have a decorator, as in the following example:
363
+
364
+ ```ruby
365
+ # app/models/user.rb
366
+ class User < ActiveRecord::Base
367
+ validates :email, presence: { message: I18n.t('invalid_email') }
368
+ end
369
+
370
+ # app/decorators/user_decorator.rb
371
+ class UserDecorator < ApplicationDecorator
372
+ decorates :user
373
+ end
374
+ ```
375
+
376
+ Note how the `validates` line is executed when the `User` class is loaded, triggering the initialization of the I18n framework _before_ Rails had a chance to apply its configuration.
377
+
378
+ Using `I18n` directly in your model definition **is an antipattern**. The preferred solution would be to not override the `message` option in your `validates` macro, but provide the `activerecord.errors.models.attributes.user.email.presence` key in your translation files.
379
+
360
380
  ## Contributing
361
381
 
362
382
  1. Fork it.
@@ -16,9 +16,6 @@ Gem::Specification.new do |s|
16
16
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
17
  s.require_paths = ["lib"]
18
18
 
19
- s.add_dependency 'activesupport', '~> 3.2'
20
- s.add_dependency 'rake', '~> 0.9.2'
21
- s.add_dependency 'rspec', '~> 2.10'
22
19
  s.add_dependency 'activesupport', '~> 3.2'
23
20
  s.add_dependency 'actionpack', '~> 3.2'
24
21
 
@@ -26,5 +23,7 @@ Gem::Specification.new do |s|
26
23
  s.add_development_dependency 'guard'
27
24
  s.add_development_dependency 'guard-rspec'
28
25
  s.add_development_dependency 'launchy'
26
+ s.add_development_dependency 'rake', '~> 0.9.2'
27
+ s.add_development_dependency 'rspec', '~> 2.10'
29
28
  s.add_development_dependency 'yard'
30
29
  end
@@ -10,11 +10,9 @@ module Draper::ActiveModelSupport
10
10
 
11
11
  proxies.each do |method_name, dependency|
12
12
  if base.model.kind_of?(dependency) || dependency.nil?
13
- class << base
14
- self
15
- end.class_eval do
13
+ base.singleton_class.class_eval do
16
14
  if !base.class.instance_methods.include?(method_name) || base.class.instance_method(method_name).owner === Draper::Base
17
- send(:define_method, method_name) do |*args, &block|
15
+ define_method(method_name) do |*args, &block|
18
16
  model.send(method_name, *args, &block)
19
17
  end
20
18
  end
@@ -11,8 +11,6 @@ module Draper
11
11
  self.denied = DEFAULT_DENIED
12
12
  self.allowed = DEFAULT_ALLOWED
13
13
 
14
-
15
-
16
14
  # Initialize a new decorator instance by passing in
17
15
  # an instance of the source class. Pass in an optional
18
16
  # context inside the options hash is stored for later use.
@@ -30,14 +30,10 @@ module Draper
30
30
  @wrapped_collection == other
31
31
  end
32
32
 
33
- def [](index)
34
- @klass.new(@wrapped_collection[index], @options)
35
- end
36
-
37
33
  def to_s
38
34
  "#<DecoratedEnumerableProxy of #{@klass} for #{@wrapped_collection.inspect}>"
39
35
  end
40
-
36
+
41
37
  def context=(input)
42
38
  self.map { |member| member.context = input }
43
39
  end
@@ -30,7 +30,7 @@ module Draper
30
30
  # This is the standard "Rails Way" to add paths from which constants
31
31
  # can be loaded.
32
32
  #
33
- config.before_initialize do |app|
33
+ config.after_initialize do |app|
34
34
  app.config.paths.add 'app/decorators', :eager_load => true
35
35
  end
36
36
 
@@ -46,5 +46,12 @@ module Draper
46
46
  end
47
47
  end
48
48
 
49
+ console do
50
+ require 'action_controller/test_case'
51
+ ApplicationController.new.set_current_view_context
52
+ Draper::ViewContext.current.controller.request ||= ActionController::TestRequest.new
53
+ Draper::ViewContext.current.request ||= Draper::ViewContext.current.controller.request
54
+ Draper::ViewContext.current.params ||= {}
55
+ end
49
56
  end
50
57
  end
@@ -1,3 +1,3 @@
1
1
  module Draper
2
- VERSION = "0.13.0"
2
+ VERSION = "0.14.0"
3
3
  end
@@ -7,35 +7,35 @@ describe Draper::Base do
7
7
  let(:non_active_model_source){ NonActiveModelProduct.new }
8
8
 
9
9
  context("proxying class methods") do
10
- it "should pass missing class method calls on to the wrapped class" do
10
+ it "pass missing class method calls on to the wrapped class" do
11
11
  subject.class.sample_class_method.should == "sample class method"
12
12
  end
13
13
 
14
- it "should respond_to a wrapped class method" do
14
+ it "respond_to a wrapped class method" do
15
15
  subject.class.should respond_to(:sample_class_method)
16
16
  end
17
17
 
18
- it "should still respond_to its own class methods" do
18
+ it "still respond_to its own class methods" do
19
19
  subject.class.should respond_to(:own_class_method)
20
20
  end
21
21
  end
22
22
 
23
23
  context(".helpers") do
24
- it "should have a valid view_context" do
24
+ it "have a valid view_context" do
25
25
  subject.helpers.should be
26
26
  end
27
27
 
28
- it "should be aliased to .h" do
28
+ it "is aliased to .h" do
29
29
  subject.h.should == subject.helpers
30
30
  end
31
31
  end
32
32
 
33
33
  context("#helpers") do
34
- it "should have a valid view_context" do
34
+ it "have a valid view_context" do
35
35
  Decorator.helpers.should be
36
36
  end
37
37
 
38
- it "should be aliased to #h" do
38
+ it "is aliased to #h" do
39
39
  Decorator.h.should == Decorator.helpers
40
40
  end
41
41
  end
@@ -50,7 +50,7 @@ describe Draper::Base do
50
50
  ProductDecorator.new(product_decorator).model.should be_instance_of Product
51
51
  end
52
52
 
53
- it "should handle plural-like words properly'" do
53
+ it "handle plural-like words properly'" do
54
54
  class Business; end
55
55
  expect do
56
56
  class BusinessDecorator < Draper::Base
@@ -183,13 +183,13 @@ describe Draper::Base do
183
183
  end
184
184
 
185
185
  context(".wrapped_object") do
186
- it "should return the wrapped object" do
186
+ it "return the wrapped object" do
187
187
  subject.wrapped_object.should == source
188
188
  end
189
189
  end
190
190
 
191
191
  context(".source / .to_source") do
192
- it "should return the wrapped object" do
192
+ it "return the wrapped object" do
193
193
  subject.to_source == source
194
194
  subject.source == source
195
195
  end
@@ -204,42 +204,42 @@ describe Draper::Base do
204
204
  end
205
205
  end
206
206
 
207
- it "should not override a defined method with a source method" do
207
+ it "not override a defined method with a source method" do
208
208
  DecoratorWithApplicationHelper.new(source).length.should == "overridden"
209
209
  end
210
210
 
211
- it "should not copy the .class, .inspect, or other existing methods" do
211
+ it "not copy the .class, .inspect, or other existing methods" do
212
212
  source.class.should_not == subject.class
213
213
  source.inspect.should_not == subject.inspect
214
214
  source.to_s.should_not == subject.to_s
215
215
  end
216
216
 
217
217
  context "when an ActiveModel descendant" do
218
- it "should always proxy to_param if it is not defined on the decorator itself" do
218
+ it "always proxy to_param if it is not defined on the decorator itself" do
219
219
  source.stub(:to_param).and_return(1)
220
220
  Draper::Base.new(source).to_param.should == 1
221
221
  end
222
222
 
223
- it "should always proxy id if it is not defined on the decorator itself" do
223
+ it "always proxy id if it is not defined on the decorator itself" do
224
224
  source.stub(:id).and_return(123456789)
225
225
  Draper::Base.new(source).id.should == 123456789
226
226
  end
227
227
 
228
- it "should always proxy errors if it is not defined on the decorator itself" do
228
+ it "always proxy errors if it is not defined on the decorator itself" do
229
229
  Draper::Base.new(source).errors.should be_an_instance_of ActiveModel::Errors
230
230
  end
231
231
 
232
- it "should never proxy to_param if it is defined on the decorator itself" do
232
+ it "never proxy to_param if it is defined on the decorator itself" do
233
233
  source.stub(:to_param).and_return(1)
234
234
  DecoratorWithSpecialMethods.new(source).to_param.should == "foo"
235
235
  end
236
236
 
237
- it "should never proxy id if it is defined on the decorator itself" do
237
+ it "never proxy id if it is defined on the decorator itself" do
238
238
  source.stub(:id).and_return(123456789)
239
239
  DecoratorWithSpecialMethods.new(source).id.should == 1337
240
240
  end
241
241
 
242
- it "should never proxy errors if it is defined on the decorator itself" do
242
+ it "never proxy errors if it is defined on the decorator itself" do
243
243
  DecoratorWithSpecialMethods.new(source).errors.should be_an_instance_of Array
244
244
  end
245
245
  end
@@ -266,24 +266,24 @@ describe Draper::Base do
266
266
  end
267
267
  end
268
268
 
269
- it "should wrap source methods so they still accept blocks" do
269
+ it "wrap source methods so they still accept blocks" do
270
270
  subject.block{"marker"}.should == "marker"
271
271
  end
272
272
 
273
273
  context ".find" do
274
- it "should lookup the associated model when passed an integer" do
274
+ it "lookup the associated model when passed an integer" do
275
275
  pd = ProductDecorator.find(1)
276
276
  pd.should be_instance_of(ProductDecorator)
277
277
  pd.model.should be_instance_of(Product)
278
278
  end
279
279
 
280
- it "should lookup the associated model when passed a string" do
280
+ it "lookup the associated model when passed a string" do
281
281
  pd = ProductDecorator.find("1")
282
282
  pd.should be_instance_of(ProductDecorator)
283
283
  pd.model.should be_instance_of(Product)
284
284
  end
285
285
 
286
- it "should accept and store a context" do
286
+ it "accept and store a context" do
287
287
  pd = ProductDecorator.find(1, :context => :admin)
288
288
  pd.context.should == :admin
289
289
  end
@@ -453,14 +453,14 @@ describe Draper::Base do
453
453
  end
454
454
 
455
455
  context('.==') do
456
- it "should compare the decorated models" do
456
+ it "compare the decorated models" do
457
457
  other = Draper::Base.new(source)
458
458
  subject.should == other
459
459
  end
460
460
  end
461
461
 
462
462
  context ".respond_to?" do
463
- it "should delegate respond_to? to the decorated model" do
463
+ it "delegate respond_to? to the decorated model" do
464
464
  other = Draper::Base.new(source)
465
465
  source.should_receive(:respond_to?).with(:whatever, true)
466
466
  subject.respond_to?(:whatever, true)
@@ -470,15 +470,15 @@ describe Draper::Base do
470
470
  context 'position accessors' do
471
471
  [:first, :last].each do |method|
472
472
  context "##{method}" do
473
- it "should return a decorated instance" do
473
+ it "return a decorated instance" do
474
474
  ProductDecorator.send(method).should be_instance_of ProductDecorator
475
475
  end
476
476
 
477
- it "should return the #{method} instance of the wrapped class" do
477
+ it "return the #{method} instance of the wrapped class" do
478
478
  ProductDecorator.send(method).model.should == Product.send(method)
479
479
  end
480
480
 
481
- it "should accept an optional context" do
481
+ it "accept an optional context" do
482
482
  ProductDecorator.send(method, :context => :admin).context.should == :admin
483
483
  end
484
484
  end
@@ -499,32 +499,32 @@ describe Draper::Base do
499
499
  let(:empty_collection) { [] }
500
500
  subject { ProductDecorator.decorate(paged_array) }
501
501
 
502
- it "should proxy all calls to decorated collection" do
502
+ it "proxy all calls to decorated collection" do
503
503
  paged_array.page_number.should == "magic_value"
504
504
  subject.page_number.should == "magic_value"
505
505
  end
506
506
 
507
- it "should support Rails partial lookup for a collection" do
507
+ it "support Rails partial lookup for a collection" do
508
508
  # to support Rails render @collection the returned collection
509
509
  # (or its proxy) should implement #to_ary.
510
510
  subject.respond_to?(:to_ary).should be true
511
511
  subject.to_ary.first.should == ProductDecorator.decorate(paged_array.first)
512
512
  end
513
513
 
514
- it "should delegate respond_to? to the wrapped collection" do
514
+ it "delegate respond_to? to the wrapped collection" do
515
515
  decorator = ProductDecorator.decorate(paged_array)
516
516
  paged_array.should_receive(:respond_to?).with(:whatever, true)
517
517
  decorator.respond_to?(:whatever, true)
518
518
  end
519
519
 
520
- it "should return blank for a decorated empty collection" do
520
+ it "return blank for a decorated empty collection" do
521
521
  # This tests that respond_to? is defined for the DecoratedEnumerableProxy
522
522
  # since activesupport calls respond_to?(:empty) in #blank
523
523
  decorator = ProductDecorator.decorate(empty_collection)
524
524
  decorator.should be_blank
525
525
  end
526
526
 
527
- it "should return whether the member is in the array for a decorated wrapped collection" do
527
+ it "return whether the member is in the array for a decorated wrapped collection" do
528
528
  # This tests that include? is defined for the DecoratedEnumerableProxy
529
529
  member = paged_array.first
530
530
  subject.respond_to?(:include?)
@@ -533,20 +533,20 @@ describe Draper::Base do
533
533
  subject.include?(Product.new).should == false
534
534
  end
535
535
 
536
- it "should equal each other when decorating the same collection" do
536
+ it "equal each other when decorating the same collection" do
537
537
  subject_one = ProductDecorator.decorate(paged_array)
538
538
  subject_two = ProductDecorator.decorate(paged_array)
539
539
  subject_one.should == subject_two
540
540
  end
541
541
 
542
- it "should not equal each other when decorating different collections" do
542
+ it "not equal each other when decorating different collections" do
543
543
  subject_one = ProductDecorator.decorate(paged_array)
544
544
  new_paged_array = paged_array + [Product.new]
545
545
  subject_two = ProductDecorator.decorate(new_paged_array)
546
546
  subject_one.should_not == subject_two
547
547
  end
548
548
 
549
- it "should allow decorated access by index" do
549
+ it "allow decorated access by index" do
550
550
  subject = ProductDecorator.decorate(paged_array)
551
551
  subject[0].should be_instance_of ProductDecorator
552
552
  end
@@ -572,18 +572,18 @@ describe Draper::Base do
572
572
  end
573
573
 
574
574
  context '#all' do
575
- it "should return a decorated collection" do
575
+ it "return a decorated collection" do
576
576
  ProductDecorator.all.first.should be_instance_of ProductDecorator
577
577
  end
578
578
 
579
- it "should accept a context" do
579
+ it "accept a context" do
580
580
  collection = ProductDecorator.all(:context => :admin)
581
581
  collection.first.context.should == :admin
582
582
  end
583
583
  end
584
584
 
585
585
  context(".source / .to_source") do
586
- it "should return the wrapped object" do
586
+ it "return the wrapped object" do
587
587
  subject.to_source == source
588
588
  subject.source == source
589
589
  end
@@ -593,19 +593,19 @@ describe Draper::Base do
593
593
  describe "a sample usage with denies" do
594
594
  let(:subject_with_denies){ DecoratorWithDenies.new(source) }
595
595
 
596
- it "should proxy methods not listed in denies" do
596
+ it "proxy methods not listed in denies" do
597
597
  subject_with_denies.should respond_to(:hello_world)
598
598
  end
599
599
 
600
- it "should not echo methods specified with denies" do
600
+ it "not echo methods specified with denies" do
601
601
  subject_with_denies.should_not respond_to(:goodnight_moon)
602
602
  end
603
603
 
604
- it "should not clobber other decorators' methods" do
604
+ it "not clobber other decorators' methods" do
605
605
  subject.should respond_to(:hello_world)
606
606
  end
607
607
 
608
- it "should not allow method_missing to circumvent a deny" do
608
+ it "not allow method_missing to circumvent a deny" do
609
609
  expect{subject_with_denies.title}.to raise_error(NoMethodError)
610
610
  end
611
611
  end
@@ -615,20 +615,20 @@ describe Draper::Base do
615
615
 
616
616
  let(:subject_with_multiple_allows){ DecoratorWithMultipleAllows.new(source) }
617
617
 
618
- it "should echo the allowed method" do
618
+ it "echo the allowed method" do
619
619
  subject_with_allows.should respond_to(:goodnight_moon)
620
620
  end
621
621
 
622
- it "should echo _only_ the allowed method" do
622
+ it "echo _only_ the allowed method" do
623
623
  subject_with_allows.should_not respond_to(:hello_world)
624
624
  end
625
625
 
626
- it "should echo the combined allowed methods" do
626
+ it "echo the combined allowed methods" do
627
627
  subject_with_multiple_allows.should respond_to(:goodnight_moon)
628
628
  subject_with_multiple_allows.should respond_to(:hello_world)
629
629
  end
630
630
 
631
- it "should echo _only_ the combined allowed methods" do
631
+ it "echo _only_ the combined allowed methods" do
632
632
  subject_with_multiple_allows.should_not respond_to(:title)
633
633
  end
634
634
  end
@@ -660,19 +660,19 @@ describe Draper::Base do
660
660
  end
661
661
  }
662
662
 
663
- it "should raise an exception for a blank allows" do
663
+ it "raise an exception for a blank allows" do
664
664
  expect {blank_allows}.should raise_error(ArgumentError)
665
665
  end
666
666
 
667
- it "should raise an exception for a blank denies" do
667
+ it "raise an exception for a blank denies" do
668
668
  expect {blank_denies}.should raise_error(ArgumentError)
669
669
  end
670
670
 
671
- it "should raise an exception for calling allows then denies" do
671
+ it "raise an exception for calling allows then denies" do
672
672
  expect {using_allows_then_denies}.should raise_error(ArgumentError)
673
673
  end
674
674
 
675
- it "should raise an exception for calling denies then allows" do
675
+ it "raise an exception for calling denies then allows" do
676
676
  expect {using_denies_then_allows}.should raise_error(ArgumentError)
677
677
  end
678
678
  end
@@ -680,23 +680,23 @@ describe Draper::Base do
680
680
  context "in a Rails application" do
681
681
  let(:decorator){ DecoratorWithApplicationHelper.decorate(Object.new) }
682
682
 
683
- it "should have access to ApplicationHelper helpers" do
683
+ it "have access to ApplicationHelper helpers" do
684
684
  decorator.uses_hello_world == "Hello, World!"
685
685
  end
686
686
 
687
- it "should be able to use the content_tag helper" do
687
+ it "is able to use the content_tag helper" do
688
688
  decorator.sample_content.to_s.should == "<span>Hello, World!</span>"
689
689
  end
690
690
 
691
- it "should be able to use the link_to helper" do
691
+ it "is able to use the link_to helper" do
692
692
  decorator.sample_link.should == "<a href=\"/World\">Hello</a>"
693
693
  end
694
694
 
695
- it "should be able to use the pluralize helper" do
695
+ it "is able to use the pluralize helper" do
696
696
  decorator.sample_truncate.should == "Once..."
697
697
  end
698
698
 
699
- it "should be able to use l rather than helpers.l" do
699
+ it "is able to use l rather than helpers.l" do
700
700
  now = Time.now
701
701
  decorator.helpers.should_receive(:localize).with(now)
702
702
  decorator.l now
@@ -7,12 +7,12 @@ describe Draper::ActiveModelSupport do
7
7
  its(:decorator) { should be_kind_of(ProductDecorator) }
8
8
  its(:decorator) { should be(subject.decorator) }
9
9
 
10
- it 'should have abillity to pass block' do
10
+ it 'have abillity to pass block' do
11
11
  a = Product.new.decorator { |d| d.awesome_title }
12
12
  a.should eql "Awesome Title"
13
13
  end
14
14
 
15
- it 'should be aliased to .decorate' do
15
+ it 'is aliased to .decorate' do
16
16
  subject.decorator.model.should == subject.decorate.model
17
17
  end
18
18
  end
@@ -23,12 +23,12 @@ describe Draper::ActiveModelSupport do
23
23
 
24
24
  its(:decorate) { should be_kind_of(Draper::DecoratedEnumerableProxy) }
25
25
 
26
- it "should decorate the collection" do
26
+ it "decorate the collection" do
27
27
  subject.decorate.size.should == 1
28
28
  subject.decorate.to_ary[0].model.should be_a(klass)
29
29
  end
30
30
 
31
- it "should return a new instance each time it is called" do
31
+ it "return a new instance each time it is called" do
32
32
  subject.decorate.should_not == subject.decorate
33
33
  end
34
34
  end
@@ -1,4 +1,3 @@
1
- require 'rubygems'
2
1
  require 'bundler/setup'
3
2
  require 'ammeter/init'
4
3
  require 'rails'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: draper
3
3
  version: !ruby/object:Gem::Version
4
- hash: 43
4
+ hash: 39
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 13
8
+ - 14
9
9
  - 0
10
- version: 0.13.0
10
+ version: 0.14.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jeff Casimir
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2012-05-12 00:00:00 Z
19
+ date: 2012-05-17 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  name: activesupport
@@ -34,112 +34,111 @@ dependencies:
34
34
  type: :runtime
35
35
  version_requirements: *id001
36
36
  - !ruby/object:Gem::Dependency
37
- name: rake
37
+ name: actionpack
38
38
  prerelease: false
39
39
  requirement: &id002 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
43
43
  - !ruby/object:Gem::Version
44
- hash: 63
44
+ hash: 3
45
45
  segments:
46
- - 0
47
- - 9
46
+ - 3
48
47
  - 2
49
- version: 0.9.2
48
+ version: "3.2"
50
49
  type: :runtime
51
50
  version_requirements: *id002
52
51
  - !ruby/object:Gem::Dependency
53
- name: rspec
52
+ name: ammeter
54
53
  prerelease: false
55
54
  requirement: &id003 !ruby/object:Gem::Requirement
56
55
  none: false
57
56
  requirements:
58
57
  - - ~>
59
58
  - !ruby/object:Gem::Version
60
- hash: 23
59
+ hash: 19
61
60
  segments:
61
+ - 0
62
62
  - 2
63
- - 10
64
- version: "2.10"
65
- type: :runtime
63
+ - 2
64
+ version: 0.2.2
65
+ type: :development
66
66
  version_requirements: *id003
67
67
  - !ruby/object:Gem::Dependency
68
- name: activesupport
68
+ name: guard
69
69
  prerelease: false
70
70
  requirement: &id004 !ruby/object:Gem::Requirement
71
71
  none: false
72
72
  requirements:
73
- - - ~>
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  hash: 3
76
76
  segments:
77
- - 3
78
- - 2
79
- version: "3.2"
80
- type: :runtime
77
+ - 0
78
+ version: "0"
79
+ type: :development
81
80
  version_requirements: *id004
82
81
  - !ruby/object:Gem::Dependency
83
- name: actionpack
82
+ name: guard-rspec
84
83
  prerelease: false
85
84
  requirement: &id005 !ruby/object:Gem::Requirement
86
85
  none: false
87
86
  requirements:
88
- - - ~>
87
+ - - ">="
89
88
  - !ruby/object:Gem::Version
90
89
  hash: 3
91
90
  segments:
92
- - 3
93
- - 2
94
- version: "3.2"
95
- type: :runtime
91
+ - 0
92
+ version: "0"
93
+ type: :development
96
94
  version_requirements: *id005
97
95
  - !ruby/object:Gem::Dependency
98
- name: ammeter
96
+ name: launchy
99
97
  prerelease: false
100
98
  requirement: &id006 !ruby/object:Gem::Requirement
101
99
  none: false
102
100
  requirements:
103
- - - ~>
101
+ - - ">="
104
102
  - !ruby/object:Gem::Version
105
- hash: 19
103
+ hash: 3
106
104
  segments:
107
105
  - 0
108
- - 2
109
- - 2
110
- version: 0.2.2
106
+ version: "0"
111
107
  type: :development
112
108
  version_requirements: *id006
113
109
  - !ruby/object:Gem::Dependency
114
- name: guard
110
+ name: rake
115
111
  prerelease: false
116
112
  requirement: &id007 !ruby/object:Gem::Requirement
117
113
  none: false
118
114
  requirements:
119
- - - ">="
115
+ - - ~>
120
116
  - !ruby/object:Gem::Version
121
- hash: 3
117
+ hash: 63
122
118
  segments:
123
119
  - 0
124
- version: "0"
120
+ - 9
121
+ - 2
122
+ version: 0.9.2
125
123
  type: :development
126
124
  version_requirements: *id007
127
125
  - !ruby/object:Gem::Dependency
128
- name: guard-rspec
126
+ name: rspec
129
127
  prerelease: false
130
128
  requirement: &id008 !ruby/object:Gem::Requirement
131
129
  none: false
132
130
  requirements:
133
- - - ">="
131
+ - - ~>
134
132
  - !ruby/object:Gem::Version
135
- hash: 3
133
+ hash: 23
136
134
  segments:
137
- - 0
138
- version: "0"
135
+ - 2
136
+ - 10
137
+ version: "2.10"
139
138
  type: :development
140
139
  version_requirements: *id008
141
140
  - !ruby/object:Gem::Dependency
142
- name: launchy
141
+ name: yard
143
142
  prerelease: false
144
143
  requirement: &id009 !ruby/object:Gem::Requirement
145
144
  none: false
@@ -152,20 +151,6 @@ dependencies:
152
151
  version: "0"
153
152
  type: :development
154
153
  version_requirements: *id009
155
- - !ruby/object:Gem::Dependency
156
- name: yard
157
- prerelease: false
158
- requirement: &id010 !ruby/object:Gem::Requirement
159
- none: false
160
- requirements:
161
- - - ">="
162
- - !ruby/object:Gem::Version
163
- hash: 3
164
- segments:
165
- - 0
166
- version: "0"
167
- type: :development
168
- version_requirements: *id010
169
154
  description: Draper implements a decorator or presenter pattern for Rails applications.
170
155
  email:
171
156
  - jeff@casimircreative.com
@@ -286,7 +271,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
286
271
  requirements: []
287
272
 
288
273
  rubyforge_project: draper
289
- rubygems_version: 1.8.24
274
+ rubygems_version: 1.8.15
290
275
  signing_key:
291
276
  specification_version: 3
292
277
  summary: Decorator pattern implementation for Rails.