Skip to content

Commit b05aa79

Browse files
committed
added minitest tests, added 2 entities in order to handle compability between rails versions
1 parent 558340a commit b05aa79

10 files changed

+136
-74
lines changed

Rakefile

+3-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ end
2727
# Rake libs default is lib
2828
# libs << path to load test_helper, etc..
2929
Rake::TestTask.new do |t|
30-
t.libs << 'tests/spec'
31-
t.pattern = FileList['tests/spec/*_spec.rb']
30+
t.libs << "tests/spec"
31+
t.pattern = "tests/spec/**/*_spec.rb"
32+
t.test_files = FileList["tests/spec/**/*_spec.rb"]
3233
t.verbose = true
3334
end

impressionist.gemspec

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ Gem::Specification.new do |s|
2626
# Capybara has dropped support for Ruby 1.8.7 onwards version 2.0.3
2727
s.add_development_dependency 'capybara', '>= 2.0.3'
2828
s.add_development_dependency 'rake', '>= 0.9'
29-
s.add_development_dependency 'rails', '3.1.12'
29+
s.add_development_dependency 'rails', '3.2.12'
3030
s.add_development_dependency 'rdoc', '>= 2.4.2'
3131
s.add_development_dependency 'rspec-rails'
3232
s.add_development_dependency 'simplecov'

lib/impressionist/load.rb

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
require "impressionist/engine"
1+
require 'impressionist/engine'
22

3-
require "impressionist/set_up_association"
3+
require 'impressionist/setup_association'
44

5-
require "impressionist/counter_cache"
5+
require 'impressionist/counter_cache'
66

7-
require "impressionist/update_counters"
8-
9-
require "impressionist/rails_toggle"
7+
require 'impressionist/update_counters'
108

9+
require 'impressionist/rails_toggle'

lib/impressionist/models/active_record/impression.rb

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
# Responsability
2+
## See CounterCache TODO: extract it into a class
23
# * be able to update_counters
34
# * log an error if imps_id and imps_type can not be found
4-
# asks updatable? whether it may or may not be updated
5+
# * asks updatable? whether it may or may not be updated
56
# FIX exeception raising when no imps_id is found
67

78
class Impression < ActiveRecord::Base
9+
810
include Impressionist::CounterCache
9-
include Impressionist::SetUpAssociation
11+
# sets belongs_to and attr_accessible
12+
Impressionist::SetupAssociation.new(self).set
1013

1114
after_save :impressionable_counter_cache_updatable?
1215

lib/impressionist/rails_toggle.rb

+9-13
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,21 @@ module Impressionist
22
# Responsability
33
# Toggles between rails > 3.1 < 4
44
# In order to make attr_accessible available in a rails app < 4
5-
class RailsToggle
6-
7-
attr_reader :r_version
8-
9-
def initialize(version)
10-
@r_version = version.to_s
11-
end
125

13-
# if Rails 4, it does not include attr_accessible
14-
# and it returns false
15-
def valid?
16-
greater_than_4? ? false : true
6+
class RailsToggle
7+
# decides where or not to include attr_accessible
8+
def should_include?
9+
ask_rails || false
1710
end
1811

1912
private
2013

21-
def greater_than_4?
22-
r_version == "4" ? true : false
14+
# returns false if rails >= 4
15+
# true if rails < 4
16+
def ask_rails
17+
::Rails::VERSION::MAJOR.to_i >= 4 ? false : true
2318
end
2419

2520
end
21+
2622
end

lib/impressionist/set_up_association.rb

-28
This file was deleted.
+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
module Impressionist
2+
# Impressionist::SetupAssociation.new(entity).set
3+
class SetupAssociation
4+
def initialize(receiver)
5+
@receiver = receiver
6+
end
7+
8+
# True or False
9+
# Note toggle returns false if rails >= 4
10+
def include_attr_acc?
11+
toggle && make_accessible
12+
end
13+
14+
def define_belongs_to
15+
receiver.belongs_to(:impressionable, :polymorphic => true)
16+
end
17+
18+
# returns done if thruthy
19+
def set
20+
:done if (include_attr_acc? && define_belongs_to)
21+
end
22+
23+
private
24+
attr_reader :receiver, :toggle
25+
26+
def make_accessible
27+
receiver.
28+
attr_accessible(:impressionable_type,
29+
:impressionable_id,
30+
:controller_name,
31+
:request_hash,
32+
:session_hash,
33+
:action_name,
34+
:ip_address,
35+
:view_name,
36+
:referrer,
37+
:message,
38+
:user_id)
39+
end
40+
41+
def toggle
42+
t = RailsToggle.new
43+
t.should_include?
44+
end
45+
end
46+
end
47+
48+
File renamed without changes.

tests/spec/rails_toggle_spec.rb

+10-22
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,26 @@
11
# Responsability
22
# Test whether rails version > 4
33
# includes attr_accessible if < 4
4-
require 'test_helper.rb'
4+
require 'minitest_helper'
55
require 'impressionist/rails_toggle'
66

77
module Impressionist
88
describe RailsToggle do
99

10-
describe "Rails 4" do
11-
before do
12-
@toggle = RailsToggle.new("4")
13-
end
14-
15-
it "return current rails version" do
16-
@toggle.r_version.must_equal "4"
17-
end
18-
19-
it "must not load attr_accessible" do
20-
@toggle.valid?.must_equal false
21-
end
10+
before {
11+
@toggle = RailsToggle.new
12+
}
2213

23-
end
24-
25-
describe "Rails 3.1.x" do
14+
describe "Rails 4" do
2615

27-
before do
28-
@toggle = RailsToggle.new("3")
16+
# see your_minitest_path/lib/minitest/mock.rb
17+
it "must not include attr_accessible" do
18+
@toggle.stub :ask_rails, false do
19+
refute @toggle.should_include?
20+
end
2921
end
3022

31-
it "includes" do
32-
@toggle.valid?.must_equal true
33-
end
3423
end
3524

3625
end
37-
3826
end

tests/spec/setup_association_spec.rb

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
require 'minitest_helper'
2+
require 'impressionist/setup_association'
3+
4+
module Impressionist
5+
describe SetupAssociation do
6+
7+
let(:mock) { Minitest::Mock.new }
8+
let(:set_up) { SetupAssociation.new(mock) }
9+
10+
before do
11+
# expects attr_accessible to return true
12+
# and pass 11 arguments
13+
mock.
14+
expect(:attr_accessible, true) do |args|
15+
args.size == 11
16+
end
17+
18+
end
19+
20+
describe "attr_accessible" do
21+
22+
it "includes" do
23+
set_up.stub :toggle, true do
24+
set_up.include_attr_acc?.must_equal true
25+
26+
mock.verify
27+
end
28+
end
29+
30+
end
31+
32+
describe "belongs_to" do
33+
34+
it "active_record" do
35+
mock.expect(:belongs_to, true, [Symbol, Hash])
36+
set_up.define_belongs_to.must_equal true
37+
end
38+
39+
end
40+
41+
describe "#set" do
42+
43+
it "sets an association" do
44+
def set_up.include_attr_acc?; true; end
45+
46+
set_up.stub(:define_belongs_to, true) {
47+
set_up.set.must_equal :done
48+
}
49+
50+
end
51+
52+
end
53+
54+
end
55+
end

0 commit comments

Comments
 (0)