carrierwave-datamapper 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,18 +3,28 @@
3
3
  This gem adds support for DataMapper to CarrierWave, see the CarrierWave
4
4
  documentation for more detailed usage instructions.
5
5
 
6
- Install it like this:
6
+ = Installation
7
7
 
8
8
  gem install carrierwave-datamapper
9
9
 
10
- Use it like this:
10
+ Using bundler:
11
+
12
+ gem 'carrierwave-datamapper', :require => 'carrierwave/datamapper'
13
+
14
+ = Usage
11
15
 
12
16
  require 'carrierwave/datamapper'
13
17
 
14
- Make sure to disable auto_validation on the mounted column.
18
+ class ImageUploader < CarrierWave::Uploader::Base
19
+ include CarrierWave::MiniMagick
20
+ end
15
21
 
16
- Using bundler:
22
+ class Image
23
+ include DataMapper::Resource
17
24
 
18
- gem 'carrierwave-datamapper', :require => 'carrierwave/datamapper'
25
+ property :id, Serial
26
+
27
+ mount_uploader :source, ImageUploader
28
+ end
19
29
 
20
30
  This used to be part of CarrierWave but has been extracted.
@@ -6,7 +6,7 @@ Gem::Specification.new do |s|
6
6
  s.name = "carrierwave-datamapper"
7
7
  s.version = Carrierwave::Datamapper::VERSION
8
8
  s.platform = Gem::Platform::RUBY
9
- s.authors = ["Jonas Nicklas", "Trevor Turk"]
9
+ s.authors = ["Jonas Nicklas", "Trevor Turk", "Piotr Solnica"]
10
10
  s.email = ["jonas.nicklas@gmail.com"]
11
11
  s.homepage = "https://github.com/jnicklas/carrierwave-datamapper"
12
12
  s.summary = %q{Datamapper support for CarrierWave}
@@ -19,10 +19,12 @@ Gem::Specification.new do |s|
19
19
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
20
  s.require_paths = ["lib"]
21
21
 
22
- s.add_dependency "dm-core", ["~> 1.0"]
23
- s.add_dependency "carrierwave", ["~> 0.5.6"]
24
- s.add_development_dependency "rspec", ["~> 2.0"]
25
- s.add_development_dependency "dm-validations", ["~> 1.0"]
26
- s.add_development_dependency "dm-migrations", ["~> 1.0"]
27
- s.add_development_dependency "dm-sqlite-adapter", ["~> 1.0"]
22
+ s.add_dependency "dm-core", ["~> 1.1"]
23
+ s.add_dependency "carrierwave", ["~> 0.6.0"]
24
+
25
+ s.add_development_dependency "rake", ["~> 0.9.2"]
26
+ s.add_development_dependency "rspec", ["~> 2.8"]
27
+ s.add_development_dependency "dm-validations", ["~> 1.1"]
28
+ s.add_development_dependency "dm-migrations", ["~> 1.1"]
29
+ s.add_development_dependency "dm-sqlite-adapter", ["~> 1.1"]
28
30
  end
@@ -18,14 +18,18 @@ module CarrierWave
18
18
  properties.delete(properties[column])
19
19
  end
20
20
 
21
- property column, Property::Uploader
21
+ uploader_property = if options[:mount_on]
22
+ properties[options[:mount_on]]
23
+ else
24
+ property column, Property::Uploader
25
+ end
22
26
 
23
27
  super
24
28
 
25
29
  alias_method :read_uploader, :attribute_get
26
30
  alias_method :write_uploader, :attribute_set
27
31
 
28
- pre_hook = ::DataMapper.const_defined?(:Validate) ? :valid? : :save
32
+ pre_hook = ::DataMapper.const_defined?(:Validations) ? :valid? : :save
29
33
 
30
34
  before pre_hook, "write_#{column}_identifier".to_sym
31
35
  after :save, "store_#{column}!".to_sym
@@ -37,14 +41,16 @@ module CarrierWave
37
41
  class_eval <<-RUBY
38
42
  def remove_#{column}=(value)
39
43
  _mounter(:#{column}).remove = value
40
- attribute_set(:#{column}, '') if _mounter(:#{column}).remove?
44
+ attribute_set(:#{uploader_property.name}, '') if _mounter(:#{column}).remove?
41
45
  end
42
46
 
43
47
  def #{column}=(value)
44
- attribute_set(:#{column}, value)
48
+ attribute_set(:#{uploader_property.name}, value)
45
49
  super(value)
46
50
  end
47
51
  RUBY
52
+
53
+ uploader_property
48
54
  end
49
55
 
50
56
  end # DataMapper
@@ -2,12 +2,15 @@ module CarrierWave
2
2
  module DataMapper
3
3
  module Property
4
4
  class Uploader < ::DataMapper::Property::String
5
+
6
+ length 255
7
+
5
8
  def custom?
6
9
  true
7
10
  end
8
11
 
9
12
  def initialize(model, name, options = {})
10
- if ::DataMapper.const_defined?(:Validate)
13
+ if ::DataMapper.const_defined?(:Validations)
11
14
  options[:auto_validation] = false
12
15
  end
13
16
 
@@ -1,5 +1,5 @@
1
1
  module Carrierwave
2
2
  module Datamapper
3
- VERSION = "0.2.0"
3
+ VERSION = "0.2.1"
4
4
  end
5
5
  end
@@ -0,0 +1,207 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe CarrierWave::DataMapper do
6
+ let(:uploader) { Class.new(CarrierWave::Uploader::Base) }
7
+ let(:uploader_name) { :image }
8
+ let(:file) { stub_file('test.jpeg') }
9
+
10
+
11
+ let(:described_class) do
12
+ klass = Class.new do
13
+ include DataMapper::Resource
14
+
15
+ storage_names[:default] = 'events'
16
+
17
+ property :id, DataMapper::Property::Serial
18
+
19
+ def self.name; :event; end
20
+ end
21
+
22
+ klass.mount_uploader uploader_name, uploader
23
+ klass
24
+ end
25
+
26
+ before do
27
+ DataMapper.finalize.auto_migrate!
28
+ end
29
+
30
+ let(:object) { described_class.new }
31
+
32
+ describe '#image' do
33
+ subject { object.image }
34
+
35
+ context 'with a new resource' do
36
+ context 'when nothing has been assigned' do
37
+ let(:object) { described_class.new }
38
+
39
+ it { should be_blank }
40
+ end
41
+
42
+ context 'when file name is set' do
43
+ before do
44
+ object.attribute_set(:image, 'test.jpeg')
45
+ object.save
46
+ object.reload
47
+ end
48
+
49
+ its(:current_path) { should == public_path('uploads/test.jpeg') }
50
+ end
51
+ end
52
+
53
+ context 'with a persisted resource' do
54
+ let(:object) { described_class.first }
55
+
56
+ context 'when an empty string has been assigned' do
57
+ before do
58
+ repository(:default).adapter.execute("INSERT INTO events (image) VALUES ('')")
59
+ end
60
+
61
+ it { should be_blank }
62
+ end
63
+
64
+ context 'when a value is stored in the database' do
65
+ before do
66
+ repository(:default).adapter.execute("INSERT INTO events (image) VALUES ('test.jpg')")
67
+ end
68
+
69
+ it { should be_an_instance_of(uploader) }
70
+ end
71
+ end
72
+ end
73
+
74
+ describe '#image=' do
75
+ context 'when a file is assigned' do
76
+ before do
77
+ object.image = file
78
+ end
79
+
80
+ it "caches a file" do
81
+ object.image.should be_an_instance_of(uploader)
82
+ end
83
+
84
+ it "copies a file into into the cache directory" do
85
+ object.image.current_path.should =~ %r[^#{public_path('uploads/tmp')}]
86
+ end
87
+
88
+ context "with a saved resource" do
89
+ before do
90
+ object.save
91
+ object.image = stub_file('test.jpeg')
92
+ end
93
+
94
+ it "marks the resource as dirty" do
95
+ object.dirty?.should be(true)
96
+ end
97
+ end
98
+ end
99
+
100
+ context 'when nil is assigned' do
101
+ before do
102
+ object.image = nil
103
+ end
104
+
105
+ it "does nothing" do
106
+ object.image.should be_blank
107
+ end
108
+ end
109
+
110
+ context 'when nil is assigned' do
111
+ before do
112
+ object.image = 'nil'
113
+ end
114
+
115
+ it "does nothing" do
116
+ object.image.should be_blank
117
+ end
118
+ end
119
+
120
+ it "should write nothing to the database, to prevent overriden filenames to fail because of unassigned attributes" do
121
+ object.attribute_get(:image).should be_nil
122
+ end
123
+ end
124
+
125
+ describe '#save' do
126
+ context 'when no file has been assigned' do
127
+ before do
128
+ object.save
129
+ end
130
+
131
+ it "does nothing" do
132
+ object.image.should be_blank
133
+ end
134
+ end
135
+
136
+ context 'when a file has been assigned' do
137
+ before do
138
+ object.image = file
139
+ object.save
140
+ end
141
+
142
+ context 'without validations' do
143
+ it "copies the file to the upload directory" do
144
+ object.image.should be_an_instance_of(uploader)
145
+ object.image.current_path.should == public_path('uploads/test.jpeg')
146
+ end
147
+
148
+ it "assigns the filename to the database" do
149
+ object.reload
150
+ object.attribute_get(:image).should == 'test.jpeg'
151
+ end
152
+
153
+ context 'when remove_image? returns true' do
154
+ before do
155
+ object.remove_image = true
156
+ object.save
157
+ object.reload
158
+ end
159
+
160
+ it "removes the image" do
161
+ object.image.should be_blank
162
+ object.attribute_get(:image).should == ''
163
+ end
164
+ end
165
+ end
166
+
167
+ context "with validations" do
168
+ before(:all) do
169
+ described_class.validates_with_block(:textfile) { [false, "FAIL!"] }
170
+ end
171
+
172
+ it "should do nothing when a validation fails" do
173
+ object.image.should be_an_instance_of(uploader)
174
+ object.image.current_path.should =~ %r[^#{public_path('uploads/tmp')}]
175
+ end
176
+
177
+ it "should assign the filename before validation" do
178
+ object.reload
179
+ object.attribute_get(:image).should == 'test.jpeg'
180
+ end
181
+ end
182
+ end
183
+ end
184
+
185
+ describe '#destroy' do
186
+ context 'when no file has been assigned' do
187
+ it "does nothing when no file has been assigned" do
188
+ object.destroy
189
+ end
190
+ end
191
+
192
+ context 'when a file has been assigned' do
193
+ before do
194
+ object.image = file
195
+ object.save.should be_true
196
+ File.exist?(public_path('uploads/test.jpeg')).should be_true
197
+ object.image.should be_an_instance_of(uploader)
198
+ object.image.current_path.should == public_path('uploads/test.jpeg')
199
+ object.destroy
200
+ end
201
+
202
+ it "removes the file from the filesystem" do
203
+ File.exist?(public_path('uploads/test.jpeg')).should be_false
204
+ end
205
+ end
206
+ end
207
+ end
@@ -2,9 +2,13 @@ require 'rubygems'
2
2
  require 'bundler/setup'
3
3
  require 'rspec'
4
4
 
5
- require 'carrierwave'
6
5
  require 'carrierwave/datamapper'
7
6
 
7
+ require 'dm-validations'
8
+ require 'dm-migrations'
9
+
10
+ DataMapper.setup(:default, 'sqlite3::memory:')
11
+
8
12
  def file_path( *paths )
9
13
  File.expand_path(File.join(File.dirname(__FILE__), 'fixtures', *paths))
10
14
  end
@@ -0,0 +1,80 @@
1
+ require 'spec_helper'
2
+
3
+ describe CarrierWave::DataMapper, '.mount_uploader' do
4
+ let(:described_class) do
5
+ Class.new do
6
+ include DataMapper::Resource
7
+ property :id, DataMapper::Property::Serial
8
+
9
+ def self.name; :spec_model; end
10
+ end
11
+ end
12
+
13
+ let(:uploader_name) { :image }
14
+ let(:uploader) { Class.new(CarrierWave::Uploader::Base) }
15
+
16
+ before do
17
+ DataMapper.finalize
18
+ end
19
+
20
+ describe 'Model' do
21
+ specify { described_class.should respond_to(:mount_uploader) }
22
+ end
23
+
24
+ context 'after mounting an uploader' do
25
+ let!(:uploader_property) do
26
+ described_class.mount_uploader(uploader_name, uploader)
27
+ end
28
+
29
+ describe 'Uploader Property' do
30
+ subject { uploader_property }
31
+
32
+ it { should be_instance_of(CarrierWave::DataMapper::Property::Uploader) }
33
+
34
+ its(:name) { should == uploader_name }
35
+ its(:custom?) { should be(true) }
36
+
37
+ specify 'has auto-validation turned off' do
38
+ subject.options[:auto_validation].should be(false)
39
+ end
40
+ end
41
+
42
+ describe 'Resource' do
43
+ subject { described_class.new }
44
+
45
+ it { should respond_to("remove_#{uploader_name}=") }
46
+ it { should respond_to("#{uploader_name}=") }
47
+ end
48
+ end
49
+
50
+ context "when using the :mount_on option" do
51
+ let(:uploader_column) { :image_file_name }
52
+
53
+ let(:described_class) do
54
+ Class.new do
55
+ include DataMapper::Resource
56
+
57
+ property :id, DataMapper::Property::Serial
58
+
59
+ property :image_file_name, String
60
+
61
+ def self.name; :spec_model; end
62
+ end
63
+ end
64
+
65
+ let!(:uploader_property) do
66
+ described_class.mount_uploader uploader_name, uploader,
67
+ :mount_on => :image_file_name
68
+ end
69
+
70
+ it "should not define a new uploader property" do
71
+ described_class.properties.should_not be_named(:image)
72
+ end
73
+
74
+ describe 'Uploader Property' do
75
+ subject { uploader_property }
76
+
77
+ its(:name) { should == uploader_column }
78
+ end
79
+ end
80
+ end
metadata CHANGED
@@ -1,125 +1,102 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: carrierwave-datamapper
3
- version: !ruby/object:Gem::Version
4
- hash: 23
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.1
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 2
9
- - 0
10
- version: 0.2.0
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Jonas Nicklas
14
9
  - Trevor Turk
10
+ - Piotr Solnica
15
11
  autorequire:
16
12
  bindir: bin
17
13
  cert_chain: []
18
-
19
- date: 2011-07-12 00:00:00 -05:00
20
- default_executable:
21
- dependencies:
22
- - !ruby/object:Gem::Dependency
14
+ date: 2012-04-25 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
23
17
  name: dm-core
24
- prerelease: false
25
- requirement: &id001 !ruby/object:Gem::Requirement
18
+ requirement: &70257289127860 !ruby/object:Gem::Requirement
26
19
  none: false
27
- requirements:
20
+ requirements:
28
21
  - - ~>
29
- - !ruby/object:Gem::Version
30
- hash: 15
31
- segments:
32
- - 1
33
- - 0
34
- version: "1.0"
22
+ - !ruby/object:Gem::Version
23
+ version: '1.1'
35
24
  type: :runtime
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: carrierwave
39
25
  prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
26
+ version_requirements: *70257289127860
27
+ - !ruby/object:Gem::Dependency
28
+ name: carrierwave
29
+ requirement: &70257289124900 !ruby/object:Gem::Requirement
41
30
  none: false
42
- requirements:
31
+ requirements:
43
32
  - - ~>
44
- - !ruby/object:Gem::Version
45
- hash: 7
46
- segments:
47
- - 0
48
- - 5
49
- - 6
50
- version: 0.5.6
33
+ - !ruby/object:Gem::Version
34
+ version: 0.6.0
51
35
  type: :runtime
52
- version_requirements: *id002
53
- - !ruby/object:Gem::Dependency
54
- name: rspec
55
36
  prerelease: false
56
- requirement: &id003 !ruby/object:Gem::Requirement
37
+ version_requirements: *70257289124900
38
+ - !ruby/object:Gem::Dependency
39
+ name: rake
40
+ requirement: &70257289122560 !ruby/object:Gem::Requirement
57
41
  none: false
58
- requirements:
42
+ requirements:
59
43
  - - ~>
60
- - !ruby/object:Gem::Version
61
- hash: 3
62
- segments:
63
- - 2
64
- - 0
65
- version: "2.0"
44
+ - !ruby/object:Gem::Version
45
+ version: 0.9.2
66
46
  type: :development
67
- version_requirements: *id003
68
- - !ruby/object:Gem::Dependency
69
- name: dm-validations
70
47
  prerelease: false
71
- requirement: &id004 !ruby/object:Gem::Requirement
48
+ version_requirements: *70257289122560
49
+ - !ruby/object:Gem::Dependency
50
+ name: rspec
51
+ requirement: &70257289120980 !ruby/object:Gem::Requirement
72
52
  none: false
73
- requirements:
53
+ requirements:
74
54
  - - ~>
75
- - !ruby/object:Gem::Version
76
- hash: 15
77
- segments:
78
- - 1
79
- - 0
80
- version: "1.0"
55
+ - !ruby/object:Gem::Version
56
+ version: '2.8'
57
+ type: :development
58
+ prerelease: false
59
+ version_requirements: *70257289120980
60
+ - !ruby/object:Gem::Dependency
61
+ name: dm-validations
62
+ requirement: &70257289119660 !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ~>
66
+ - !ruby/object:Gem::Version
67
+ version: '1.1'
81
68
  type: :development
82
- version_requirements: *id004
83
- - !ruby/object:Gem::Dependency
84
- name: dm-migrations
85
69
  prerelease: false
86
- requirement: &id005 !ruby/object:Gem::Requirement
70
+ version_requirements: *70257289119660
71
+ - !ruby/object:Gem::Dependency
72
+ name: dm-migrations
73
+ requirement: &70257289118460 !ruby/object:Gem::Requirement
87
74
  none: false
88
- requirements:
75
+ requirements:
89
76
  - - ~>
90
- - !ruby/object:Gem::Version
91
- hash: 15
92
- segments:
93
- - 1
94
- - 0
95
- version: "1.0"
77
+ - !ruby/object:Gem::Version
78
+ version: '1.1'
96
79
  type: :development
97
- version_requirements: *id005
98
- - !ruby/object:Gem::Dependency
99
- name: dm-sqlite-adapter
100
80
  prerelease: false
101
- requirement: &id006 !ruby/object:Gem::Requirement
81
+ version_requirements: *70257289118460
82
+ - !ruby/object:Gem::Dependency
83
+ name: dm-sqlite-adapter
84
+ requirement: &70257289117680 !ruby/object:Gem::Requirement
102
85
  none: false
103
- requirements:
86
+ requirements:
104
87
  - - ~>
105
- - !ruby/object:Gem::Version
106
- hash: 15
107
- segments:
108
- - 1
109
- - 0
110
- version: "1.0"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.1'
111
90
  type: :development
112
- version_requirements: *id006
91
+ prerelease: false
92
+ version_requirements: *70257289117680
113
93
  description: Datamapper support for CarrierWave
114
- email:
94
+ email:
115
95
  - jonas.nicklas@gmail.com
116
96
  executables: []
117
-
118
97
  extensions: []
119
-
120
98
  extra_rdoc_files: []
121
-
122
- files:
99
+ files:
123
100
  - .gitignore
124
101
  - Gemfile
125
102
  - README.rdoc
@@ -128,44 +105,36 @@ files:
128
105
  - lib/carrierwave/datamapper.rb
129
106
  - lib/carrierwave/datamapper/property/uploader.rb
130
107
  - lib/carrierwave/datamapper/version.rb
131
- - spec/datamapper_spec.rb
132
108
  - spec/fixtures/test.jpeg
109
+ - spec/integration/datamapper_spec.rb
133
110
  - spec/spec_helper.rb
134
- has_rdoc: true
111
+ - spec/unit/carrier_wave/data_mapper/mount_uploader_spec.rb
135
112
  homepage: https://github.com/jnicklas/carrierwave-datamapper
136
113
  licenses: []
137
-
138
114
  post_install_message:
139
115
  rdoc_options: []
140
-
141
- require_paths:
116
+ require_paths:
142
117
  - lib
143
- required_ruby_version: !ruby/object:Gem::Requirement
118
+ required_ruby_version: !ruby/object:Gem::Requirement
144
119
  none: false
145
- requirements:
146
- - - ">="
147
- - !ruby/object:Gem::Version
148
- hash: 3
149
- segments:
150
- - 0
151
- version: "0"
152
- required_rubygems_version: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ! '>='
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ required_rubygems_version: !ruby/object:Gem::Requirement
153
125
  none: false
154
- requirements:
155
- - - ">="
156
- - !ruby/object:Gem::Version
157
- hash: 3
158
- segments:
159
- - 0
160
- version: "0"
126
+ requirements:
127
+ - - ! '>='
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
161
130
  requirements: []
162
-
163
131
  rubyforge_project: carrierwave-datamapper
164
- rubygems_version: 1.4.2
132
+ rubygems_version: 1.8.15
165
133
  signing_key:
166
134
  specification_version: 3
167
135
  summary: Datamapper support for CarrierWave
168
- test_files:
169
- - spec/datamapper_spec.rb
136
+ test_files:
170
137
  - spec/fixtures/test.jpeg
138
+ - spec/integration/datamapper_spec.rb
171
139
  - spec/spec_helper.rb
140
+ - spec/unit/carrier_wave/data_mapper/mount_uploader_spec.rb
@@ -1,169 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- require 'dm-core'
6
- require 'dm-validations'
7
- require 'dm-migrations'
8
-
9
- DataMapper.setup(:default, 'sqlite3::memory:')
10
-
11
- describe CarrierWave::DataMapper do
12
-
13
- before do
14
- uploader = Class.new(CarrierWave::Uploader::Base)
15
-
16
- @class = Class.new
17
- @class.class_eval do
18
- include DataMapper::Resource
19
-
20
- storage_names[:default] = 'events'
21
-
22
- property :id, DataMapper::Property::Serial
23
- mount_uploader :image, uploader
24
- end
25
-
26
- @class.auto_migrate!
27
-
28
- @uploader = uploader
29
-
30
- @event = @class.new
31
- end
32
-
33
- describe '#image' do
34
-
35
- it "should return blank uploader when nothing has been assigned" do
36
- @event.image.should be_blank
37
- end
38
-
39
- it "should return blank uploader when an empty string has been assigned" do
40
- repository(:default).adapter.execute("INSERT INTO events (image) VALUES ('')")
41
- @event = @class.first
42
-
43
- @event.image.should be_blank
44
- end
45
-
46
- it "should retrieve a file from the storage if a value is stored in the database" do
47
- repository(:default).adapter.execute("INSERT INTO events (image) VALUES ('test.jpg')")
48
- @event = @class.first
49
-
50
- @event.save
51
- @event.reload
52
- @event.image.should be_an_instance_of(@uploader)
53
- end
54
-
55
- it "should set the path to the store dir" do
56
- @event.attribute_set(:image, 'test.jpeg')
57
- @event.save
58
- @event.reload
59
- @event.image.current_path.should == public_path('uploads/test.jpeg')
60
- end
61
-
62
- end
63
-
64
- describe '#image=' do
65
-
66
- it "should cache a file" do
67
- @event.image = stub_file('test.jpeg')
68
- @event.image.should be_an_instance_of(@uploader)
69
- end
70
-
71
- it "should write nothing to the database, to prevent overriden filenames to fail because of unassigned attributes" do
72
- @event.attribute_get(:image).should be_nil
73
- end
74
-
75
- it "should copy a file into into the cache directory" do
76
- @event.image = stub_file('test.jpeg')
77
- @event.image.current_path.should =~ /^#{public_path('uploads/tmp')}/
78
- end
79
-
80
- it "should do nothing when nil is assigned" do
81
- @event.image = nil
82
- @event.image.should be_blank
83
- end
84
-
85
- it "should do nothing when an empty string is assigned" do
86
- @event.image = ''
87
- @event.image.should be_blank
88
- end
89
-
90
- context "with a saved resource" do
91
- it "should mark the resource as dirty" do
92
- @event.image = stub_file('test.jpeg')
93
- @event.save
94
- @event.image = stub_file('test.jpeg')
95
- @event.dirty?.should be(true)
96
- end
97
- end
98
- end
99
-
100
- describe '#save' do
101
-
102
- it "should do nothing when no file has been assigned" do
103
- @event.save
104
- @event.image.should be_blank
105
- end
106
-
107
- it "should copy the file to the upload directory when a file has been assigned" do
108
- @event.image = stub_file('test.jpeg')
109
- @event.save
110
- @event.image.should be_an_instance_of(@uploader)
111
- @event.image.current_path.should == public_path('uploads/test.jpeg')
112
- end
113
-
114
- it "should assign the filename to the database" do
115
- @event.image = stub_file('test.jpeg')
116
- @event.save
117
- @event.reload
118
- @event.attribute_get(:image).should == 'test.jpeg'
119
- end
120
-
121
- it "should remove the image if remove_image? returns true" do
122
- @event.image = stub_file('test.jpeg')
123
- @event.save
124
- @event.remove_image = true
125
- @event.save
126
- @event.reload
127
- @event.image.should be_blank
128
- @event.attribute_get(:image).should == ''
129
- end
130
-
131
- describe "with validations" do
132
- it "should do nothing when a validation fails" do
133
- @class.validates_with_block(:textfile) { [false, "FAIL!"] }
134
- @event.image = stub_file('test.jpeg')
135
- @event.save
136
- @event.image.should be_an_instance_of(@uploader)
137
- @event.image.current_path.should =~ /^#{public_path('uploads/tmp')}/
138
- end
139
-
140
- it "should assign the filename before validation" do
141
- @class.validates_with_block(:image) { [false, "FAIL!"] if self.image.nil? }
142
- @event.image = stub_file('test.jpeg')
143
- @event.save
144
- @event.reload
145
- @event.attribute_get(:image).should == 'test.jpeg'
146
- end
147
- end
148
-
149
- end
150
-
151
- describe '#destroy' do
152
-
153
- it "should do nothing when no file has been assigned" do
154
- @event.destroy
155
- end
156
-
157
- it "should remove the file from the filesystem" do
158
- @event.image = stub_file('test.jpeg')
159
- @event.save.should be_true
160
- File.exist?(public_path('uploads/test.jpeg')).should be_true
161
- @event.image.should be_an_instance_of(@uploader)
162
- @event.image.current_path.should == public_path('uploads/test.jpeg')
163
- @event.destroy
164
- File.exist?(public_path('uploads/test.jpeg')).should be_false
165
- end
166
-
167
- end
168
-
169
- end