can_be 0.2.1 → 0.3.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.
@@ -0,0 +1,204 @@
1
+ shared_examples "it has details" do |can_be_class, image_class, video_class, details_name = :details|
2
+ context "details" do
3
+ context "persistence" do
4
+ it "persists the details information to the database (create method)" do
5
+ upload = can_be_class.create
6
+ upload.send(details_name).format = "jpeg"
7
+ upload.save
8
+ image_class.first.format.should == "jpeg"
9
+ end
10
+
11
+ it "persists the details information to the database (create_image_upload method)" do
12
+ upload = can_be_class.create_image_upload
13
+ upload.send(details_name).format = "jpeg"
14
+ upload.save
15
+ image_class.first.format.should == "jpeg"
16
+ end
17
+
18
+ it "persists the details information to the database (new method)" do
19
+ upload = can_be_class.new
20
+ upload.send(details_name).format = "jpeg"
21
+ upload.save
22
+ image_class.first.format.should == "jpeg"
23
+ end
24
+
25
+ it "persists the details information to the database (new_image_upload method)" do
26
+ upload = can_be_class.new_image_upload
27
+ upload.send(details_name).format = "jpeg"
28
+ upload.save
29
+ image_class.first.format.should == "jpeg"
30
+ end
31
+
32
+ it "persists only one details record" do
33
+ upload = can_be_class.new
34
+ upload.send(details_name).format = "jpeg"
35
+ upload.save
36
+ found_upload = can_be_class.find(upload.id)
37
+ found_upload.send(details_name).format.should == "jpeg"
38
+ found_upload.save
39
+ image_class.count.should == 1
40
+ end
41
+
42
+ it "deletes the details record" do
43
+ u = can_be_class.create_image_upload
44
+ image_class.count.should == 1
45
+ u.destroy
46
+ image_class.count.should == 0
47
+ end
48
+ end
49
+
50
+ context "create method" do
51
+ it "creates the correct details record" do
52
+ can_be_class.create_image_upload.send(details_name).should be_instance_of(image_class)
53
+ can_be_class.create_video_upload.send(details_name).should be_instance_of(video_class)
54
+ end
55
+
56
+ it "doesn't create details record if model doesn't call #can_be_detail" do
57
+ can_be_class.create_thumbnail_upload.send(details_name).should be_nil
58
+ end
59
+
60
+ it "doesn't create details record if model doesn't exist" do
61
+ can_be_class.create_pdf_upload.send(details_name).should be_nil
62
+ end
63
+
64
+ it "doesn't create details record unless an ActiveRecord model" do
65
+ can_be_class.create_document_upload.send(details_name).should be_nil
66
+ end
67
+
68
+ it "persists the details record to the database" do
69
+ can_be_class.create_image_upload
70
+ image_class.count.should == 1
71
+ end
72
+ end
73
+
74
+ context "new method" do
75
+ it "instantiates the correct details record" do
76
+ can_be_class.new_image_upload.send(details_name).should be_instance_of(image_class)
77
+ can_be_class.new_video_upload.send(details_name).should be_instance_of(video_class)
78
+ end
79
+
80
+ it "doesn't instantiate details record if model doesn't call #can_be_detail" do
81
+ can_be_class.new_thumbnail_upload.send(details_name).should be_nil
82
+ end
83
+
84
+ it "doesn't instantiate details record if model doesn't exist" do
85
+ can_be_class.new_pdf_upload.send(details_name).should be_nil
86
+ end
87
+
88
+ it "doesn't instantiate details record unless an ActiveRecord model" do
89
+ can_be_class.new_document_upload.send(details_name).should be_nil
90
+ end
91
+
92
+ it "doesn't persist the details record to the database" do
93
+ can_be_class.new_image_upload
94
+ image_class.count.should == 0
95
+ end
96
+ end
97
+
98
+ context "change type via #change_to" do
99
+ it "changes the details record type" do
100
+ u = can_be_class.new_image_upload
101
+ u.change_to_video_upload
102
+ u.send(details_name).should be_instance_of(video_class)
103
+ end
104
+
105
+ it "changes the details to nil" do
106
+ u = can_be_class.new_image_upload
107
+ u.change_to_thumbnail_upload
108
+ u.send(details_name).should be_nil
109
+ end
110
+
111
+ it "doesn't create a new record in the database" do
112
+ u = can_be_class.new_image_upload
113
+ u.change_to_video_upload
114
+ image_class.count.should == 0
115
+ video_class.count.should == 0
116
+ end
117
+
118
+ it "has access to the original details if not saved" do
119
+ u = can_be_class.create_image_upload
120
+ u.change_to_video_upload
121
+ can_be_class.find(u.id).send(details_name).should be_instance_of(image_class)
122
+ end
123
+
124
+ it "allows for items to be set on the new details records" do
125
+ new_encoding = "new encoding"
126
+ u = can_be_class.new_image_upload
127
+ u.change_to_video_upload do |details|
128
+ details.encoding = new_encoding
129
+ end
130
+ u.send(details_name).encoding.should == new_encoding
131
+ end
132
+
133
+ it "removes the old details record when saved" do
134
+ u = can_be_class.new_image_upload
135
+ u.save
136
+ u.change_to_video_upload
137
+ u.save
138
+ image_class.count.should == 0
139
+ end
140
+ end
141
+
142
+ context "change type via #change_to!" do
143
+ it "changes the details record type" do
144
+ u = can_be_class.create_video_upload
145
+ u.change_to_image_upload!
146
+ can_be_class.find(u.id).send(details_name).should be_instance_of(image_class)
147
+ end
148
+
149
+ it "changes the details to nil" do
150
+ u = can_be_class.create_image_upload
151
+ u.change_to_thumbnail_upload!
152
+ can_be_class.find(u.id).send(details_name).should be_nil
153
+ end
154
+
155
+ it "doesn't create a new record in the database" do
156
+ u = can_be_class.create_video_upload
157
+ u.change_to_image_upload!
158
+ image_class.count.should == 1
159
+ end
160
+
161
+ it "removes the old database record from the database" do
162
+ u = can_be_class.create_image_upload
163
+ u.change_to_video_upload!
164
+ image_class.count.should == 0
165
+ end
166
+
167
+ it "allows for items to be set on the new details records" do
168
+ new_format = "new format"
169
+ u = can_be_class.create_video_upload
170
+ u.change_to_image_upload! do |details|
171
+ details.format = new_format
172
+ end
173
+ can_be_class.find(u.id).send(details_name).format.should == new_format
174
+ end
175
+ end
176
+
177
+ context "change type setting the model attribute" do
178
+ it "changes the details record type" do
179
+ u = can_be_class.new_image_upload
180
+ u.can_be_type = "video_upload"
181
+ u.send(details_name).should be_instance_of(video_class)
182
+ end
183
+
184
+ it "changes the details to nil" do
185
+ u = can_be_class.new_image_upload
186
+ u.can_be_type = "thumbnail_upload"
187
+ u.send(details_name).should be_nil
188
+ end
189
+
190
+ it "doesn't create a new record in the database" do
191
+ u = can_be_class.new_image_upload
192
+ u.can_be_type = "video_upload"
193
+ image_class.count.should == 0
194
+ video_class.count.should == 0
195
+ end
196
+
197
+ it "has access to the original details if not saved" do
198
+ u = can_be_class.create_image_upload
199
+ u.can_be_type = "video_upload"
200
+ can_be_class.find(u.id).send(details_name).should be_instance_of(image_class)
201
+ end
202
+ end
203
+ end
204
+ end
@@ -11,6 +11,13 @@ class Person < ActiveRecord::Base
11
11
  can_be :male, :female, field_name: :gender, default_type: :female
12
12
  end
13
13
 
14
+ class BlockOption < ActiveRecord::Base
15
+ can_be :option_1, :option_2 do
16
+ field_name :option_type
17
+ default_type :option_2
18
+ end
19
+ end
20
+
14
21
  class Upload < ActiveRecord::Base
15
22
  can_be :image_upload, :video_upload, :thumbnail_upload, :document_upload, :pdf_upload do
16
23
  add_details_model :image_upload, :image_upload_detail
@@ -32,6 +39,53 @@ end
32
39
  class DocumentUploadDetail
33
40
  end
34
41
 
42
+ class CustomUpload < ActiveRecord::Base
43
+ can_be :image_upload, :video_upload, :thumbnail_upload, :document_upload, :pdf_upload do
44
+ add_details_model :image_upload, :custom_image_upload_detail
45
+ add_details_model :video_upload, :custom_video_upload_detail
46
+ details_name :custom_details
47
+ end
48
+ end
49
+
50
+ class CustomImageUploadDetail < ActiveRecord::Base
51
+ can_be_detail :custom_upload, :custom_details
52
+ end
53
+
54
+ class CustomVideoUploadDetail < ActiveRecord::Base
55
+ can_be_detail :custom_upload, details_name: :custom_details
56
+ end
57
+
58
+ class CustomThumbnailUploadDetail < ActiveRecord::Base
59
+ end
60
+
61
+ class CustomDocumentUploadDetail
62
+ end
63
+
64
+ class HistoryUpload < ActiveRecord::Base
65
+ can_be :image_upload, :video_upload, :thumbnail_upload, :document_upload, :pdf_upload do
66
+ add_details_model :image_upload, :history_image_upload_detail
67
+ add_details_model :video_upload, :history_video_upload_detail
68
+ keep_history_in :history_upload_history_record
69
+ end
70
+ end
71
+
72
+ class HistoryImageUploadDetail < ActiveRecord::Base
73
+ can_be_detail :history_upload, history_model: :history_upload_history_record
74
+ end
75
+
76
+ class HistoryVideoUploadDetail < ActiveRecord::Base
77
+ can_be_detail :history_upload, history_model: :history_upload_history_record
78
+ end
79
+
80
+ class HistoryThumbnailUploadDetail < ActiveRecord::Base
81
+ end
82
+
83
+ class HistoryDocumentUploadDetail
84
+ end
85
+
86
+ class HistoryUploadHistoryRecord < ActiveRecord::Base
87
+ end
88
+
35
89
  class ConfigSpecModel < ActiveRecord::Base
36
90
  can_be :type1, :type2
37
91
  end
@@ -12,6 +12,32 @@ ActiveRecord::Schema.define do
12
12
  t.timestamps
13
13
  end
14
14
 
15
+ create_table :block_options, :force => true do |t|
16
+ t.string :option_type
17
+ t.timestamps
18
+ end
19
+
20
+ create_table :custom_uploads, :force => true do |t|
21
+ t.string :can_be_type
22
+ t.integer :custom_details_id
23
+ t.string :custom_details_type
24
+ t.timestamps
25
+ end
26
+
27
+ create_table :custom_image_upload_details, :force => true do |t|
28
+ t.string :format
29
+ t.timestamps
30
+ end
31
+
32
+ create_table :custom_video_upload_details, :force => true do |t|
33
+ t.string :encoding
34
+ t.timestamps
35
+ end
36
+
37
+ create_table :custom_thumbnail_upload_details, :force => true do |t|
38
+ t.timestamps
39
+ end
40
+
15
41
  create_table :uploads, :force => true do |t|
16
42
  t.string :can_be_type
17
43
  t.integer :details_id
@@ -33,6 +59,35 @@ ActiveRecord::Schema.define do
33
59
  t.timestamps
34
60
  end
35
61
 
62
+ create_table :history_uploads, :force => true do |t|
63
+ t.string :can_be_type
64
+ t.integer :details_id
65
+ t.string :details_type
66
+ t.timestamps
67
+ end
68
+
69
+ create_table :history_image_upload_details, :force => true do |t|
70
+ t.string :format
71
+ t.timestamps
72
+ end
73
+
74
+ create_table :history_video_upload_details, :force => true do |t|
75
+ t.string :encoding
76
+ t.timestamps
77
+ end
78
+
79
+ create_table :history_thumbnail_upload_details, :force => true do |t|
80
+ t.timestamps
81
+ end
82
+
83
+ create_table :history_upload_history_records, :force => true do |t|
84
+ t.integer :can_be_model_id
85
+ t.string :can_be_type
86
+ t.integer :can_be_details_id
87
+ t.string :can_be_details_type
88
+ t.timestamps
89
+ end
90
+
36
91
  create_table :config_spec_models, :force => true do |t|
37
92
  t.string :can_be_type
38
93
  t.timestamps
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: can_be
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-15 00:00:00.000000000 Z
12
+ date: 2013-01-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -75,6 +75,22 @@ dependencies:
75
75
  - - ! '>='
76
76
  - !ruby/object:Gem::Version
77
77
  version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: pry
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
78
94
  - !ruby/object:Gem::Dependency
79
95
  name: activerecord
80
96
  requirement: !ruby/object:Gem::Requirement
@@ -122,10 +138,14 @@ files:
122
138
  - .yardopts
123
139
  - CHANGELOG.md
124
140
  - Gemfile
141
+ - Gemfile.lock
125
142
  - LICENSE.txt
126
143
  - README.md
127
144
  - Rakefile
128
145
  - can_be.gemspec
146
+ - docs/details.md
147
+ - docs/history.md
148
+ - docs/rspec_matcher.md
129
149
  - gemfiles/3.1.gemfile
130
150
  - gemfiles/3.2.gemfile
131
151
  - lib/can_be.rb
@@ -138,12 +158,21 @@ files:
138
158
  - lib/can_be/processor/instance.rb
139
159
  - lib/can_be/processor/klass.rb
140
160
  - lib/can_be/railtie.rb
161
+ - lib/can_be/rspec/matchers.rb
162
+ - lib/can_be/rspec/matchers/can_be_detail_matcher.rb
163
+ - lib/can_be/rspec/matchers/can_be_matcher.rb
141
164
  - lib/can_be/version.rb
142
165
  - log/.gitkeep
143
166
  - spec/can_be/config_spec.rb
144
167
  - spec/can_be/model_extensions_spec.rb
168
+ - spec/can_be/rspec/matchers/can_be_detail_matcher_spec.rb
169
+ - spec/can_be/rspec/matchers/can_be_matcher_spec.rb
145
170
  - spec/can_be_spec.rb
146
171
  - spec/spec_helper.rb
172
+ - spec/support/can_be_detail_history_shared_examples.rb
173
+ - spec/support/can_be_detail_shared_examples.rb
174
+ - spec/support/can_be_history_shared_examples.rb
175
+ - spec/support/can_be_shared_examples.rb
147
176
  - spec/support/model_macros.rb
148
177
  - spec/support/models.rb
149
178
  - spec/support/schema.rb
@@ -159,12 +188,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
159
188
  - - ! '>='
160
189
  - !ruby/object:Gem::Version
161
190
  version: '0'
191
+ segments:
192
+ - 0
193
+ hash: -227341645228978432
162
194
  required_rubygems_version: !ruby/object:Gem::Requirement
163
195
  none: false
164
196
  requirements:
165
197
  - - ! '>='
166
198
  - !ruby/object:Gem::Version
167
199
  version: '0'
200
+ segments:
201
+ - 0
202
+ hash: -227341645228978432
168
203
  requirements: []
169
204
  rubyforge_project:
170
205
  rubygems_version: 1.8.23
@@ -180,9 +215,14 @@ summary: CanBe allows you to track the type of your ActiveRecord model in a cons
180
215
  test_files:
181
216
  - spec/can_be/config_spec.rb
182
217
  - spec/can_be/model_extensions_spec.rb
218
+ - spec/can_be/rspec/matchers/can_be_detail_matcher_spec.rb
219
+ - spec/can_be/rspec/matchers/can_be_matcher_spec.rb
183
220
  - spec/can_be_spec.rb
184
221
  - spec/spec_helper.rb
222
+ - spec/support/can_be_detail_history_shared_examples.rb
223
+ - spec/support/can_be_detail_shared_examples.rb
224
+ - spec/support/can_be_history_shared_examples.rb
225
+ - spec/support/can_be_shared_examples.rb
185
226
  - spec/support/model_macros.rb
186
227
  - spec/support/models.rb
187
228
  - spec/support/schema.rb
188
- has_rdoc: