draper 2.1.0 → 3.0.0.pre1

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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -1
  3. data/.travis.yml +2 -7
  4. data/CHANGELOG.md +6 -0
  5. data/Gemfile +4 -5
  6. data/README.md +36 -8
  7. data/Rakefile +3 -2
  8. data/draper.gemspec +11 -10
  9. data/lib/draper.rb +1 -1
  10. data/lib/draper/automatic_delegation.rb +1 -1
  11. data/lib/draper/decoratable.rb +1 -2
  12. data/lib/draper/decorator.rb +0 -12
  13. data/lib/draper/railtie.rb +0 -8
  14. data/lib/draper/tasks/test.rake +2 -15
  15. data/lib/draper/test/rspec_integration.rb +1 -5
  16. data/lib/draper/test_case.rb +4 -8
  17. data/lib/draper/version.rb +1 -1
  18. data/lib/draper/view_context/build_strategy.rb +1 -1
  19. data/lib/generators/rspec/templates/decorator_spec.rb +1 -1
  20. data/spec/draper/decoratable_spec.rb +3 -5
  21. data/spec/draper/decorator_spec.rb +8 -0
  22. data/spec/draper/factory_spec.rb +3 -3
  23. data/spec/draper/helper_proxy_spec.rb +1 -1
  24. data/spec/dummy/app/views/posts/_post.html.erb +8 -6
  25. data/spec/dummy/config/mongoid.yml +104 -41
  26. data/spec/dummy/spec/decorators/active_model_serializers_spec.rb +4 -8
  27. data/spec/dummy/spec/decorators/post_decorator_spec.rb +0 -2
  28. data/spec/dummy/spec/mailers/post_mailer_spec.rb +0 -8
  29. data/spec/dummy/spec/shared_examples/decoratable.rb +0 -2
  30. data/spec/dummy/test/decorators/minitest/view_context_test.rb +1 -1
  31. data/spec/dummy/test/decorators/test_unit/view_context_test.rb +1 -1
  32. data/spec/generators/decorator/decorator_generator_spec.rb +3 -2
  33. data/spec/integration/integration_spec.rb +11 -8
  34. data/spec/performance/benchmark.rb +1 -1
  35. data/spec/spec_helper.rb +0 -1
  36. data/spec/support/matchers/have_text.rb +2 -2
  37. metadata +44 -33
  38. data/gemfiles/4.0.gemfile +0 -3
  39. data/gemfiles/4.1.gemfile +0 -3
  40. data/gemfiles/4.2.gemfile +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b85cf531330b6947bd3bd6970e527ca62149975a
4
- data.tar.gz: e063ca4cd9757a4bfc7ad5eb3970b852fa62f1f8
3
+ metadata.gz: 016c0c7b5f38f0560c5629e83abcc175401cdcb4
4
+ data.tar.gz: eb23dac2cdc58bf4a2eedccd0f468b25f2df49b8
5
5
  SHA512:
6
- metadata.gz: d51ffa67dbb810f7d093bf2bf7c7b0c216cc03231150dbec62b0915fc098ac7bd28b8975541ac99abe3fcdae541d98133d3e7fc176335f16615c6cd6169111bb
7
- data.tar.gz: 0006c748a474980dcc613530ed51fa1b9b469e3bbf63eb5ed3eb72d06ab2d5c692c439d5cc43cc139c00ce0032329ac77518600efc351c10b0b1c5b6fa81af51
6
+ metadata.gz: 4fc57f67ed9b7f7779f93c7393c4a91a883ed5a5393dffa6be88da26171bfa6ae463db4d73c5d8831dc4c8f5f4fa3d6e61e3a38c8fec02e9d481c7c3e88ab85d
7
+ data.tar.gz: 972827d365bf4d02bc8bb9f817c6fab065a9de81bf9f80c3de67b2be8fc12b1216d5e459fa561997afe9debad1456d704da2d2f8d108aef8fdcccbc6139da317
data/.gitignore CHANGED
@@ -1,5 +1,7 @@
1
1
  *.gem
2
- *.rvmrc
2
+ .rvmrc
3
+ .ruby-version
4
+ .ruby-gemset
3
5
  .bundle
4
6
  Gemfile.lock
5
7
  pkg/*
@@ -4,10 +4,5 @@ services:
4
4
  - mongodb
5
5
 
6
6
  rvm:
7
- - 2.1.5
8
- - 2.2.1
9
-
10
- env:
11
- - "RAILS_VERSION=4.0"
12
- - "RAILS_VERSION=4.1"
13
- - "RAILS_VERSION=4.2"
7
+ - 2.2.5
8
+ - 2.3.1
@@ -1,5 +1,11 @@
1
1
  # Draper Changelog
2
2
 
3
+ ## 3.0.0.pre1 - 2016-07-10
4
+
5
+ * Added support for Rails 5, dropped 4.0 - 4.2
6
+ * Ruby >= 2.2 is required, matching Rails 5
7
+ * Dropped support for ActiveModelSerializers 0.8
8
+
3
9
  ## 2.1.0 - 2015-03-26
4
10
 
5
11
  * Cleared most issues and merged a few PRs
data/Gemfile CHANGED
@@ -7,10 +7,9 @@ platforms :ruby do
7
7
  end
8
8
 
9
9
  platforms :jruby do
10
- gem "minitest", ">= 3.0"
11
- gem "activerecord-jdbcsqlite3-adapter", ">= 1.3.0.beta2"
10
+ gem "minitest"
11
+ gem "activerecord-jdbcsqlite3-adapter"
12
12
  end
13
13
 
14
- version = ENV["RAILS_VERSION"] || "4.1"
15
-
16
- eval_gemfile File.expand_path("../gemfiles/#{version}.gemfile", __FILE__)
14
+ gem "rails", "~> 5.0"
15
+ gem "mongoid", github: "mongodb/mongoid"
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # Draper: View Models for Rails
2
2
 
3
3
  [![TravisCI Build Status](https://travis-ci.org/drapergem/draper.svg?branch=master)](http://travis-ci.org/drapergem/draper)
4
- [![Code Climate](https://codeclimate.com/github/drapergem/draper.png)](https://codeclimate.com/github/drapergem/draper)
5
- [![Inline docs](http://inch-ci.org/github/drapergem/draper.png?branch=master)](http://inch-ci.org/github/drapergem/draper)
4
+ [![Code Climate](https://codeclimate.com/github/drapergem/draper.svg)](https://codeclimate.com/github/drapergem/draper)
5
+ [![Inline docs](http://inch-ci.org/github/drapergem/draper.svg?branch=master)](http://inch-ci.org/github/drapergem/draper)
6
6
 
7
7
  Draper adds an object-oriented layer of presentation logic to your Rails
8
8
  application.
@@ -48,7 +48,7 @@ end
48
48
  But it makes you a little uncomfortable. `publication_status` lives in a
49
49
  nebulous namespace spread across all controllers and view. Down the road, you
50
50
  might want to display the publication status of a `Book`. And, of course, your
51
- design calls for a slighly different formatting to the date for a `Book`.
51
+ design calls for a slightly different formatting to the date for a `Book`.
52
52
 
53
53
  Now your helper method can either switch based on the input class type (poor
54
54
  Ruby style), or you break it out into two methods, `book_publication_status` and
@@ -110,7 +110,7 @@ Decorators are the ideal place to:
110
110
  Add Draper to your Gemfile:
111
111
 
112
112
  ```ruby
113
- gem 'draper', '~> 1.3'
113
+ gem 'draper'
114
114
  ```
115
115
 
116
116
  And run `bundle install` within your app's directory.
@@ -276,6 +276,19 @@ omitted.
276
276
  delegate :current_page, :per_page, :offset, :total_entries, :total_pages
277
277
  ```
278
278
 
279
+ If needed, you can then set the collection_decorator_class of your CustomDecorator as follows:
280
+ ```ruby
281
+ class ArticleDecorator < Draper::Decorator
282
+ def self.collection_decorator_class
283
+ PaginatingDecorator
284
+ end
285
+ end
286
+
287
+ ArticleDecorator.decorate_collection(@articles.paginate)
288
+ # => Collection decorated by PaginatingDecorator
289
+ # => Members decorated by ArticleDecorator
290
+ ```
291
+
279
292
  ### Decorating Associated Objects
280
293
 
281
294
  You can automatically decorate associated models when the primary model is
@@ -379,6 +392,15 @@ In your `Spork.prefork` block of `spec_helper.rb`, add this:
379
392
  require 'draper/test/rspec_integration'
380
393
  ```
381
394
 
395
+ #### Custom Draper Controller ViewContext
396
+ If running tests in an engine setting with a controller other than "ApplicationController," set a custom controller in `spec_helper.rb`
397
+
398
+ ```ruby
399
+ config.before(:each, type: :decorator) do |example|
400
+ Draper::ViewContext.controller = ExampleEngine::CustomRootController.new
401
+ end
402
+ ```
403
+
382
404
  ### Isolated Tests
383
405
 
384
406
  In tests, Draper needs to build a view context to access helper methods. By
@@ -564,13 +586,15 @@ end
564
586
 
565
587
  This is only necessary when proxying class methods.
566
588
 
589
+ Once this association between the decorator and the model is set up, you can call
590
+ `SomeModel.decorator_class` to access class methods defined in the decorator.
591
+ If necessary, you can check if your model is decorated with `SomeModel.decorator_class?`.
592
+
567
593
  ### Making Models Decoratable
568
594
 
569
595
  Models get their `decorate` method from the `Draper::Decoratable` module, which
570
596
  is included in `ActiveRecord::Base` and `Mongoid::Document` by default. If
571
- you're [using another
572
- ORM](https://github.com/drapergem/draper/wiki/Using-other-ORMs) (including
573
- versions of Mongoid prior to 3.0), or want to decorate plain old Ruby objects,
597
+ you're using another ORM, or want to decorate plain old Ruby objects,
574
598
  you can include this module manually.
575
599
 
576
600
  ## Contributors
@@ -579,7 +603,11 @@ Draper was conceived by Jeff Casimir and heavily refined by Steve Klabnik and a
579
603
  great community of open source
580
604
  [contributors](https://github.com/drapergem/draper/contributors).
581
605
 
582
- ### Core Team
606
+ ### Current maintainers
607
+
608
+ * Sean Linsley
609
+
610
+ ### Historical maintainers
583
611
 
584
612
  * Jeff Casimir (jeff@jumpstartlab.com)
585
613
  * Steve Klabnik (steve@jumpstartlab.com)
data/Rakefile CHANGED
@@ -16,7 +16,8 @@ desc "Run all specs"
16
16
  task "spec" => "spec:all"
17
17
 
18
18
  namespace "spec" do
19
- task "all" => ["draper", "generators", "integration"]
19
+ # TODOD: add back "generators"
20
+ task "all" => ["draper", "integration"]
20
21
 
21
22
  def spec_task(name)
22
23
  desc "Run #{name} specs"
@@ -64,6 +65,6 @@ namespace "db" do
64
65
  run_in_dummy_app "rm -f db/*.sqlite3"
65
66
  run_in_dummy_app "RAILS_ENV=development rake db:schema:load db:seed"
66
67
  run_in_dummy_app "RAILS_ENV=production rake db:schema:load db:seed"
67
- run_in_dummy_app "RAILS_ENV=test rake db:schema:load"
68
+ run_in_dummy_app "RAILS_ENV=test rake db:environment:set db:schema:load"
68
69
  end
69
70
  end
@@ -1,6 +1,4 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "draper/version"
1
+ require File.join(__dir__, "lib", "draper", "version")
4
2
 
5
3
  Gem::Specification.new do |s|
6
4
  s.name = "draper"
@@ -17,15 +15,18 @@ Gem::Specification.new do |s|
17
15
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
16
  s.require_paths = ["lib"]
19
17
 
20
- s.add_dependency 'activesupport', '>= 3.0'
21
- s.add_dependency 'actionpack', '>= 3.0'
18
+ s.required_ruby_version = '>= 2.2.2'
19
+
20
+ s.add_dependency 'activesupport', '~> 5.0'
21
+ s.add_dependency 'actionpack', '~> 5.0'
22
22
  s.add_dependency 'request_store', '~> 1.0'
23
- s.add_dependency 'activemodel', '>= 3.0'
23
+ s.add_dependency 'activemodel', '~> 5.0'
24
+ s.add_dependency 'activemodel-serializers-xml', '~> 1.0'
24
25
 
25
26
  s.add_development_dependency 'ammeter'
26
- s.add_development_dependency 'rake', '>= 0.9.2'
27
- s.add_development_dependency 'rspec-rails', '~> 3.2'
28
- s.add_development_dependency 'minitest-rails', '>= 1.0'
27
+ s.add_development_dependency 'rake'
28
+ s.add_development_dependency 'rspec-rails'
29
+ s.add_development_dependency 'minitest-rails'
29
30
  s.add_development_dependency 'capybara'
30
- s.add_development_dependency 'active_model_serializers'
31
+ s.add_development_dependency 'active_model_serializers', '~> 0.10'
31
32
  end
@@ -33,7 +33,7 @@ module Draper
33
33
  extend Draper::HelperSupport
34
34
  extend Draper::DecoratesAssigned
35
35
 
36
- before_filter :activate_draper
36
+ before_action :activate_draper
37
37
  end
38
38
  end
39
39
 
@@ -6,7 +6,7 @@ module Draper
6
6
  def method_missing(method, *args, &block)
7
7
  return super unless delegatable?(method)
8
8
 
9
- self.class.delegate method
9
+ self.singleton_class.delegate method
10
10
  send(method, *args, &block)
11
11
  end
12
12
 
@@ -56,8 +56,7 @@ module Draper
56
56
  # @param [Hash] options
57
57
  # see {Decorator.decorate_collection}.
58
58
  def decorate(options = {})
59
- collection = Rails::VERSION::MAJOR >= 4 ? all : scoped
60
- decorator_class.decorate_collection(collection, options.reverse_merge(with: nil))
59
+ decorator_class.decorate_collection(all, options.reverse_merge(with: nil))
61
60
  end
62
61
 
63
62
  def decorator_class?
@@ -203,18 +203,6 @@ module Draper
203
203
  super || object.instance_of?(klass)
204
204
  end
205
205
 
206
- if RUBY_VERSION < "2.0"
207
- # nasty hack to stop 1.9.x using the delegated `to_s` in `inspect`
208
- alias_method :_to_s, :to_s
209
-
210
- def inspect
211
- ivars = instance_variables.map do |name|
212
- "#{name}=#{instance_variable_get(name).inspect}"
213
- end
214
- _to_s.insert(-2, " #{ivars.join(", ")}")
215
- end
216
- end
217
-
218
206
  delegate :to_s
219
207
 
220
208
  # In case object is nil
@@ -43,14 +43,6 @@ module Draper
43
43
  end
44
44
  end
45
45
 
46
- initializer "draper.setup_active_model_serializers" do |app|
47
- ActiveSupport.on_load :active_model_serializers do
48
- if defined?(ActiveModel::ArraySerializerSupport)
49
- Draper::CollectionDecorator.send :include, ActiveModel::ArraySerializerSupport
50
- end
51
- end
52
- end
53
-
54
46
  initializer "draper.minitest-rails_integration" do |app|
55
47
  ActiveSupport.on_load :minitest do
56
48
  require "draper/test/minitest_integration"
@@ -1,22 +1,9 @@
1
1
  require 'rake/testtask'
2
-
3
- test_task = if Rails.version.to_f < 3.2
4
- require 'rails/test_unit/railtie'
5
- Rake::TestTask
6
- else
7
- require 'rails/test_unit/sub_test_task'
8
- Rails::SubTestTask
9
- end
2
+ require 'rails/test_unit/railtie'
10
3
 
11
4
  namespace :test do
12
- test_task.new(:decorators => "test:prepare") do |t|
5
+ Rake::TestTask.new(:decorators => "test:prepare") do |t|
13
6
  t.libs << "test"
14
7
  t.pattern = "test/decorators/**/*_test.rb"
15
8
  end
16
9
  end
17
-
18
- if Rails.version.to_f < 4.2 && Rake::Task.task_defined?('test:run')
19
- Rake::Task['test:run'].enhance do
20
- Rake::Task['test:decorators'].invoke
21
- end
22
- end
@@ -7,11 +7,7 @@ module Draper
7
7
  end
8
8
 
9
9
  RSpec.configure do |config|
10
- if RSpec::Core::Version::STRING.starts_with?("3")
11
- config.include DecoratorExampleGroup, file_path: %r{spec/decorators}, type: :decorator
12
- else
13
- config.include DecoratorExampleGroup, example_group: {file_path: %r{spec/decorators}}, type: :decorator
14
- end
10
+ config.include DecoratorExampleGroup, file_path: %r{spec/decorators}, type: :decorator
15
11
 
16
12
  [:decorator, :controller, :mailer].each do |type|
17
13
  config.before(:each, type: type) { Draper::ViewContext.clear! }
@@ -29,14 +29,10 @@ module Draper
29
29
  end
30
30
  end
31
31
 
32
- if defined?(ActionController::TestCase)
33
- class ActionController::TestCase
34
- include Draper::TestCase::ViewContextTeardown
35
- end
32
+ if defined? ActionController::TestCase
33
+ ActionController::TestCase.include Draper::TestCase::ViewContextTeardown
36
34
  end
37
35
 
38
- if defined?(ActionMailer::TestCase)
39
- class ActionMailer::TestCase
40
- include Draper::TestCase::ViewContextTeardown
41
- end
36
+ if defined? ActionMailer::TestCase
37
+ ActionMailer::TestCase.include Draper::TestCase::ViewContextTeardown
42
38
  end
@@ -1,3 +1,3 @@
1
1
  module Draper
2
- VERSION = "2.1.0"
2
+ VERSION = "3.0.0.pre1"
3
3
  end
@@ -38,7 +38,7 @@ module Draper
38
38
 
39
39
  def controller
40
40
  (Draper::ViewContext.controller || ApplicationController.new).tap do |controller|
41
- controller.request ||= ActionController::TestRequest.new if defined?(ActionController::TestRequest)
41
+ controller.request ||= ActionController::TestRequest.create
42
42
  end
43
43
  end
44
44
  end
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  describe <%= class_name %>Decorator do
4
4
  end
@@ -128,11 +128,9 @@ module Draper
128
128
  end
129
129
 
130
130
  describe ".decorate" do
131
- let(:scoping_method) { Rails::VERSION::MAJOR >= 4 ? :all : :scoped }
132
-
133
131
  it "calls #decorate_collection on .decorator_class" do
134
132
  scoped = [Product.new]
135
- Product.stub scoping_method => scoped
133
+ Product.stub all: scoped
136
134
 
137
135
  Product.decorator_class.should_receive(:decorate_collection).with(scoped, with: nil).and_return(:decorated_collection)
138
136
  expect(Product.decorate).to be :decorated_collection
@@ -140,7 +138,7 @@ module Draper
140
138
 
141
139
  it "accepts options" do
142
140
  options = {with: ProductDecorator, context: {some: "context"}}
143
- Product.stub scoping_method => []
141
+ Product.stub all: []
144
142
 
145
143
  Product.decorator_class.should_receive(:decorate_collection).with([], options)
146
144
  Product.decorate(options)
@@ -162,7 +160,7 @@ module Draper
162
160
 
163
161
  context "for ActiveModel classes" do
164
162
  it "infers the decorator from the model name" do
165
- Product.stub(:model_name).and_return("Other")
163
+ allow(Product).to receive(:model_name){"Other"}
166
164
 
167
165
  expect(Product.decorator_class).to be OtherDecorator
168
166
  end
@@ -604,6 +604,14 @@ module Draper
604
604
  expect(decorator.methods).to include :hello_world
605
605
  end
606
606
 
607
+ it "allows decorator to decorate different classes of objects" do
608
+ decorator_1 = Decorator.new(double)
609
+ decorator_2 = Decorator.new(double(hello_world: :delegated))
610
+
611
+ decorator_2.hello_world
612
+ expect(decorator_1.methods).not_to include :hello_world
613
+ end
614
+
607
615
  it "passes blocks to delegated methods" do
608
616
  object = Model.new
609
617
  object.stub(:hello_world) { |*args, &block| block.call }
@@ -99,7 +99,7 @@ module Draper
99
99
  options = {foo: "bar"}
100
100
  worker = Factory::Worker.new(double, object)
101
101
  decorator = ->(*){}
102
- worker.stub decorator: decorator
102
+ allow(worker).to receive(:decorator){ decorator }
103
103
 
104
104
  decorator.should_receive(:call).with(object, options).and_return(:decorated)
105
105
  expect(worker.call(options)).to be :decorated
@@ -227,8 +227,8 @@ module Draper
227
227
  it "returns the .decorate_collection method from the object's decorator" do
228
228
  object = []
229
229
  decorator_class = Class.new(Decorator)
230
- object.stub decorator_class: decorator_class
231
- object.stub decorate: nil
230
+ allow(object).to receive(:decorator_class){ decorator_class }
231
+ allow(object).to receive(:decorate){ nil }
232
232
  worker = Factory::Worker.new(nil, object)
233
233
 
234
234
  decorator_class.should_receive(:decorate_collection).with(object, foo: "bar", with: nil).and_return(:decorated)
@@ -52,7 +52,7 @@ module Draper
52
52
  view_context = double
53
53
  helper_proxy = HelperProxy.new(view_context)
54
54
 
55
- view_context.stub(:capture) { |*args, &block| [*args, block.call] }
55
+ allow(view_context).to receive(:capture) { |*args, &block| [*args, block.call] }
56
56
  expect(helper_proxy.capture(:first_arg, :second_arg){:yielded}).to \
57
57
  be_eql [:first_arg, :second_arg, :yielded]
58
58
  end
@@ -20,14 +20,16 @@
20
20
  <dt>Helpers from the controller:</dt>
21
21
  <dd id="goodnight_moon"><%= post.goodnight_moon %></dd>
22
22
 
23
- <dt>Path with decorator:</dt>
24
- <dd id="path_with_decorator"><%= post_path(post) %></dd>
23
+ <% unless defined? mailer %>
24
+ <dt>Path with decorator:</dt>
25
+ <dd id="path_with_decorator"><%= post_url(post) %></dd>
25
26
 
26
- <dt>Path with model:</dt>
27
- <dd id="path_with_model"><%= post.path_with_model %></dd>
27
+ <dt>Path with model:</dt>
28
+ <dd id="path_with_model"><%= post.path_with_model %></dd>
28
29
 
29
- <dt>Path with id:</dt>
30
- <dd id="path_with_id"><%= post.path_with_id %></dd>
30
+ <dt>Path with id:</dt>
31
+ <dd id="path_with_id"><%= post.path_with_id %></dd>
32
+ <% end %>
31
33
 
32
34
  <dt>URL with decorator:</dt>
33
35
  <dd id="url_with_decorator"><%= post_url(post) %></dd>
@@ -1,54 +1,117 @@
1
1
  development:
2
- # Configure available database sessions. (required)
3
- sessions:
4
- # Defines the default session. (required)
2
+ # Configure available database clients. (required)
3
+ clients:
4
+ # Defines the default client. (required)
5
5
  default:
6
6
  # Defines the name of the default database that Mongoid can connect to.
7
7
  # (required).
8
8
  database: dummy_development
9
- # Provides the hosts the default session can connect to. Must be an array
9
+ # Provides the hosts the default client can connect to. Must be an array
10
10
  # of host:port pairs. (required)
11
11
  hosts:
12
12
  - localhost:27017
13
13
  options:
14
- # Change whether the session persists in safe mode by default.
15
- # (default: false)
16
- # safe: false
17
-
18
- # Change the default consistency model to :eventual or :strong.
19
- # :eventual will send reads to secondaries, :strong sends everything
20
- # to master. (default: :eventual)
21
- # consistency: :eventual
22
-
23
- # How many times Moped should attempt to retry an operation after
24
- # failure. (default: 30)
25
- # max_retries: 30
26
-
27
- # The time in seconds that Moped should wait before retrying an
28
- # operation on failure. (default: 1)
29
- # retry_interval: 1
30
- # Configure Mongoid specific options. (optional)
31
- options:
32
- # Configuration for whether or not to allow access to fields that do
33
- # not have a field definition on the model. (default: true)
34
- # allow_dynamic_fields: true
14
+ # Change the default write concern. (default = { w: 1 })
15
+ # write:
16
+ # w: 1
17
+
18
+ # Change the default read preference. Valid options for mode are: :secondary,
19
+ # :secondary_preferred, :primary, :primary_preferred, :nearest
20
+ # (default: primary)
21
+ # read:
22
+ # mode: :secondary_preferred
23
+ # tag_sets:
24
+ # - use: web
25
+
26
+ # The name of the user for authentication.
27
+ # user: 'user'
28
+
29
+ # The password of the user for authentication.
30
+ # password: 'password'
31
+
32
+ # The user's database roles.
33
+ # roles:
34
+ # - 'dbOwner'
35
+
36
+ # Change the default authentication mechanism. Valid options are: :scram,
37
+ # :mongodb_cr, :mongodb_x509, and :plain. (default on 3.0 is :scram, default
38
+ # on 2.4 and 2.6 is :plain)
39
+ # auth_mech: :scram
40
+
41
+ # The database or source to authenticate the user against. (default: admin)
42
+ # auth_source: admin
43
+
44
+ # Force a the driver cluster to behave in a certain manner instead of auto-
45
+ # discovering. Can be one of: :direct, :replica_set, :sharded. Set to :direct
46
+ # when connecting to hidden members of a replica set.
47
+ # connect: :direct
48
+
49
+ # Changes the default time in seconds the server monitors refresh their status
50
+ # via ismaster commands. (default: 10)
51
+ # heartbeat_frequency: 10
52
+
53
+ # The time in seconds for selecting servers for a near read preference. (default: 5)
54
+ # local_threshold: 5
55
+
56
+ # The timeout in seconds for selecting a server for an operation. (default: 30)
57
+ # server_selection_timeout: 30
58
+
59
+ # The maximum number of connections in the connection pool. (default: 5)
60
+ # max_pool_size: 5
61
+
62
+ # The minimum number of connections in the connection pool. (default: 1)
63
+ # min_pool_size: 1
64
+
65
+ # The time to wait, in seconds, in the connection pool for a connection
66
+ # to be checked in before timing out. (default: 5)
67
+ # wait_queue_timeout: 5
35
68
 
36
- # Enable the identity map, needed for eager loading. (default: false)
37
- # identity_map_enabled: false
69
+ # The time to wait to establish a connection before timing out, in seconds.
70
+ # (default: 5)
71
+ # connect_timeout: 5
38
72
 
73
+ # The timeout to wait to execute operations on a socket before raising an error.
74
+ # (default: 5)
75
+ # socket_timeout: 5
76
+
77
+ # The name of the replica set to connect to. Servers provided as seeds that do
78
+ # not belong to this replica set will be ignored.
79
+ # replica_set: name
80
+
81
+ # Whether to connect to the servers via ssl. (default: false)
82
+ # ssl: true
83
+
84
+ # The certificate file used to identify the connection against MongoDB.
85
+ # ssl_cert: /path/to/my.cert
86
+
87
+ # The private keyfile used to identify the connection against MongoDB.
88
+ # Note that even if the key is stored in the same file as the certificate,
89
+ # both need to be explicitly specified.
90
+ # ssl_key: /path/to/my.key
91
+
92
+ # A passphrase for the private key.
93
+ # ssl_key_pass_phrase: password
94
+
95
+ # Whether or not to do peer certification validation. (default: true)
96
+ # ssl_verify: true
97
+
98
+ # The file containing a set of concatenated certification authority certifications
99
+ # used to validate certs passed from the other end of the connection.
100
+ # ssl_ca_cert: /path/to/ca.cert
101
+
102
+
103
+ # Configure Mongoid specific options. (optional)
104
+ options:
39
105
  # Includes the root model name in json serialization. (default: false)
40
106
  # include_root_in_json: false
41
107
 
42
- # Include the _type field in serializaion. (default: false)
108
+ # Include the _type field in serialization. (default: false)
43
109
  # include_type_for_serialization: false
44
110
 
45
111
  # Preload all models in development, needed when models use
46
112
  # inheritance. (default: false)
47
113
  # preload_models: false
48
114
 
49
- # Protect id and type from mass assignment. (default: true)
50
- # protect_sensitive_fields: true
51
-
52
115
  # Raise an error when performing a #find and the document is not found.
53
116
  # (default: true)
54
117
  # raise_not_found_error: true
@@ -57,23 +120,23 @@ development:
57
120
  # existing method. (default: false)
58
121
  # scope_overwrite_exception: false
59
122
 
60
- # Skip the database version check, used when connecting to a db without
61
- # admin access. (default: false)
62
- # skip_version_check: false
63
-
64
- # User Active Support's time zone in conversions. (default: true)
123
+ # Use Active Support's time zone in conversions. (default: true)
65
124
  # use_activesupport_time_zone: true
66
125
 
67
126
  # Ensure all times are UTC in the app side. (default: false)
68
127
  # use_utc: false
128
+
129
+ # Set the Mongoid and Ruby driver log levels when not in a Rails
130
+ # environment. The Mongoid logger will be set to the Rails logger
131
+ # otherwise.(default: :info)
132
+ # log_level: :info
69
133
  test:
70
- sessions:
134
+ clients:
71
135
  default:
72
136
  database: dummy_test
73
137
  hosts:
74
138
  - localhost:27017
75
139
  options:
76
- # In the test environment we lower the retries and retry interval to
77
- # low amounts for fast failures.
78
- max_retries: 1
79
- retry_interval: 0
140
+ read:
141
+ mode: :primary
142
+ max_pool_size: 1
@@ -2,15 +2,11 @@ require 'spec_helper'
2
2
 
3
3
  describe Draper::CollectionDecorator do
4
4
  describe "#active_model_serializer" do
5
- it "returns ActiveModel::ArraySerializer" do
6
- collection_decorator = Draper::CollectionDecorator.new([])
7
- if defined?(ActiveModel::ArraySerializerSupport)
8
- collection_serializer = collection_decorator.active_model_serializer
9
- else
10
- collection_serializer = ActiveModel::Serializer.serializer_for(collection_decorator)
11
- end
5
+ it "returns ActiveModel::Serializer::CollectionSerializer" do
6
+ collection_decorator = Draper::CollectionDecorator.new([])
7
+ collection_serializer = ActiveModel::Serializer.serializer_for(collection_decorator)
12
8
 
13
- expect(collection_serializer).to be ActiveModel::ArraySerializer
9
+ expect(collection_serializer).to be ActiveModel::Serializer::CollectionSerializer
14
10
  end
15
11
  end
16
12
  end
@@ -54,8 +54,6 @@ describe PostDecorator do
54
54
  end
55
55
 
56
56
  it "serializes to XML" do
57
- pending("Rails < 3.2 does not use `serializable_hash` in `to_xml`") if Rails.version.to_f < 3.2
58
-
59
57
  xml = Capybara.string(decorator.to_xml)
60
58
  expect(xml).to have_css "post > updated-at", text: "overridden"
61
59
  end
@@ -10,14 +10,6 @@ describe PostMailer do
10
10
  expect(email_body).to have_content "Today"
11
11
  end
12
12
 
13
- it "can use path helpers with a model" do
14
- expect(email_body).to have_css "#path_with_model", text: "/en/posts/#{post.id}"
15
- end
16
-
17
- it "can use path helpers with an id" do
18
- expect(email_body).to have_css "#path_with_id", text: "/en/posts/#{post.id}"
19
- end
20
-
21
13
  it "can use url helpers with a model" do
22
14
  expect(email_body).to have_css "#url_with_model", text: "http://www.example.com:12345/en/posts/#{post.id}"
23
15
  end
@@ -11,8 +11,6 @@ shared_examples_for "a decoratable model" do
11
11
 
12
12
  describe "#==" do
13
13
  it "is true for other instances' decorators" do
14
- pending "Mongoid < 3.1 overrides `#==`" if defined?(Mongoid) && Mongoid::VERSION.to_f < 3.1 && described_class < Mongoid::Document
15
-
16
14
  described_class.create
17
15
  one = described_class.first
18
16
  other = described_class.first
@@ -14,7 +14,7 @@ describe "A decorator test" do
14
14
  end
15
15
 
16
16
  describe "A controller test" do
17
- tests Class.new(ActionController::Base)
17
+ subject{ Class.new(ActionController::Base) }
18
18
 
19
19
  it_does_not_leak_view_context
20
20
  end
@@ -14,7 +14,7 @@ class DecoratorTest < Draper::TestCase
14
14
  end
15
15
 
16
16
  class ControllerTest < ActionController::TestCase
17
- tests Class.new(ActionController::Base)
17
+ subject{ Class.new(ActionController::Base) }
18
18
 
19
19
  it_does_not_leak_view_context
20
20
  end
@@ -40,8 +40,9 @@ describe Rails::Generators::DecoratorGenerator do
40
40
 
41
41
  context "with an ApplicationDecorator" do
42
42
  before do
43
- Object.any_instance.stub(:require).with("application_decorator").and_return (
44
- stub_const "ApplicationDecorator", Class.new)
43
+ allow_any_instance_of(Object).to receive(:require).with("application_decorator").and_return(
44
+ stub_const "ApplicationDecorator", Class.new
45
+ )
45
46
  end
46
47
 
47
48
  before { run_generator %w(YourModel) }
@@ -38,16 +38,19 @@ app.start_server do
38
38
  expect(page).to have_text("Goodnight, moon!").in("#goodnight_moon")
39
39
  end
40
40
 
41
- it "can be passed to path helpers" do
42
- expect(page).to have_text("/en/posts/1").in("#path_with_decorator")
43
- end
41
+ # _path helpers aren't available in mailers
42
+ if type == :view
43
+ it "can be passed to path helpers" do
44
+ expect(page).to have_text("/en/posts/1").in("#path_with_decorator")
45
+ end
44
46
 
45
- it "can use path helpers with a model" do
46
- expect(page).to have_text("/en/posts/1").in("#path_with_model")
47
- end
47
+ it "can use path helpers with a model" do
48
+ expect(page).to have_text("/en/posts/1").in("#path_with_model")
49
+ end
48
50
 
49
- it "can use path helpers with an id" do
50
- expect(page).to have_text("/en/posts/1").in("#path_with_id")
51
+ it "can use path helpers with an id" do
52
+ expect(page).to have_text("/en/posts/1").in("#path_with_id")
53
+ end
51
54
  end
52
55
 
53
56
  it "can be passed to url helpers" do
@@ -1,7 +1,7 @@
1
1
  require 'rubygems'
2
2
  ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
3
3
  require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
4
- Bundler.require(:default) if defined?(Bundler)
4
+ Bundler.require :default
5
5
 
6
6
  require "benchmark"
7
7
  require "draper"
@@ -1,6 +1,5 @@
1
1
  require 'bundler/setup'
2
2
  require 'draper'
3
- require 'rails/version'
4
3
  require 'action_controller'
5
4
  require 'action_controller/test_case'
6
5
 
@@ -21,11 +21,11 @@ module HaveTextMatcher
21
21
  @subject.has_css?(@css || "*", text: @text)
22
22
  end
23
23
 
24
- def failure_message_for_should
24
+ def failure_message
25
25
  "expected to find #{@text.inspect} #{within}"
26
26
  end
27
27
 
28
- def failure_message_for_should_not
28
+ def failure_message_when_negated
29
29
  "expected not to find #{@text.inspect} #{within}"
30
30
  end
31
31
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: draper
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 3.0.0.pre1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Casimir
@@ -9,36 +9,36 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-03-27 00:00:00.000000000 Z
12
+ date: 2016-07-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ">="
18
+ - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '3.0'
20
+ version: '5.0'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - ">="
25
+ - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: '3.0'
27
+ version: '5.0'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: actionpack
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - ">="
32
+ - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: '3.0'
34
+ version: '5.0'
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - ">="
39
+ - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: '3.0'
41
+ version: '5.0'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: request_store
44
44
  requirement: !ruby/object:Gem::Requirement
@@ -57,16 +57,30 @@ dependencies:
57
57
  name: activemodel
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - ">="
60
+ - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: '3.0'
62
+ version: '5.0'
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - ">="
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '5.0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: activemodel-serializers-xml
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '1.0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
68
82
  - !ruby/object:Gem::Version
69
- version: '3.0'
83
+ version: '1.0'
70
84
  - !ruby/object:Gem::Dependency
71
85
  name: ammeter
72
86
  requirement: !ruby/object:Gem::Requirement
@@ -87,42 +101,42 @@ dependencies:
87
101
  requirements:
88
102
  - - ">="
89
103
  - !ruby/object:Gem::Version
90
- version: 0.9.2
104
+ version: '0'
91
105
  type: :development
92
106
  prerelease: false
93
107
  version_requirements: !ruby/object:Gem::Requirement
94
108
  requirements:
95
109
  - - ">="
96
110
  - !ruby/object:Gem::Version
97
- version: 0.9.2
111
+ version: '0'
98
112
  - !ruby/object:Gem::Dependency
99
113
  name: rspec-rails
100
114
  requirement: !ruby/object:Gem::Requirement
101
115
  requirements:
102
- - - "~>"
116
+ - - ">="
103
117
  - !ruby/object:Gem::Version
104
- version: '3.2'
118
+ version: '0'
105
119
  type: :development
106
120
  prerelease: false
107
121
  version_requirements: !ruby/object:Gem::Requirement
108
122
  requirements:
109
- - - "~>"
123
+ - - ">="
110
124
  - !ruby/object:Gem::Version
111
- version: '3.2'
125
+ version: '0'
112
126
  - !ruby/object:Gem::Dependency
113
127
  name: minitest-rails
114
128
  requirement: !ruby/object:Gem::Requirement
115
129
  requirements:
116
130
  - - ">="
117
131
  - !ruby/object:Gem::Version
118
- version: '1.0'
132
+ version: '0'
119
133
  type: :development
120
134
  prerelease: false
121
135
  version_requirements: !ruby/object:Gem::Requirement
122
136
  requirements:
123
137
  - - ">="
124
138
  - !ruby/object:Gem::Version
125
- version: '1.0'
139
+ version: '0'
126
140
  - !ruby/object:Gem::Dependency
127
141
  name: capybara
128
142
  requirement: !ruby/object:Gem::Requirement
@@ -141,16 +155,16 @@ dependencies:
141
155
  name: active_model_serializers
142
156
  requirement: !ruby/object:Gem::Requirement
143
157
  requirements:
144
- - - ">="
158
+ - - "~>"
145
159
  - !ruby/object:Gem::Version
146
- version: '0'
160
+ version: '0.10'
147
161
  type: :development
148
162
  prerelease: false
149
163
  version_requirements: !ruby/object:Gem::Requirement
150
164
  requirements:
151
- - - ">="
165
+ - - "~>"
152
166
  - !ruby/object:Gem::Version
153
- version: '0'
167
+ version: '0.10'
154
168
  description: Draper adds an object-oriented layer of presentation logic to your Rails
155
169
  apps.
156
170
  email:
@@ -172,9 +186,6 @@ files:
172
186
  - README.md
173
187
  - Rakefile
174
188
  - draper.gemspec
175
- - gemfiles/4.0.gemfile
176
- - gemfiles/4.1.gemfile
177
- - gemfiles/4.2.gemfile
178
189
  - lib/draper.rb
179
190
  - lib/draper/automatic_delegation.rb
180
191
  - lib/draper/collection_decorator.rb
@@ -314,15 +325,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
314
325
  requirements:
315
326
  - - ">="
316
327
  - !ruby/object:Gem::Version
317
- version: '0'
328
+ version: 2.2.2
318
329
  required_rubygems_version: !ruby/object:Gem::Requirement
319
330
  requirements:
320
- - - ">="
331
+ - - ">"
321
332
  - !ruby/object:Gem::Version
322
- version: '0'
333
+ version: 1.3.1
323
334
  requirements: []
324
335
  rubyforge_project:
325
- rubygems_version: 2.4.6
336
+ rubygems_version: 2.5.1
326
337
  signing_key:
327
338
  specification_version: 4
328
339
  summary: View Models for Rails
@@ -1,3 +0,0 @@
1
- gem "rails", "~> 4.0.0"
2
- gem "mongoid", "~> 4.0"
3
- gem "devise", "~> 3.0.0"
@@ -1,3 +0,0 @@
1
- gem "rails", "~> 4.1.0"
2
- gem "mongoid", "~> 4.0"
3
- gem "devise", "~> 3.2"
@@ -1,3 +0,0 @@
1
- gem "rails", "~> 4.2.0"
2
- gem "mongoid", "~> 4.0"
3
- gem "devise", "~> 3.4"