drafter 0.1.1 → 0.2.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/README.rdoc CHANGED
@@ -1,6 +1,9 @@
1
- = drafter
1
+ = Drafter
2
2
 
3
- Description goes here.
3
+ This is an experimental gem designed to version ActiveRecord objects with
4
+ attached CarrierWave uploads.
5
+
6
+ Don't use it yet, it's not ready for prime time.
4
7
 
5
8
  == Contributing to drafter
6
9
 
@@ -14,6 +17,6 @@ Description goes here.
14
17
 
15
18
  == Copyright
16
19
 
17
- Copyright (c) 2012 futurechimp. See LICENSE.txt for
20
+ Copyright (c) 2012 Dave Hrycyszyn. See LICENSE.txt for
18
21
  further details.
19
22
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.2.0
data/drafter.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "drafter"
8
- s.version = "0.1.1"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["futurechimp"]
12
- s.date = "2012-08-17"
12
+ s.date = "2012-08-19"
13
13
  s.description = "A"
14
14
  s.email = "dave.hrycyszyn@headlondon.com"
15
15
  s.extra_rdoc_files = [
@@ -26,11 +26,13 @@ Gem::Specification.new do |s|
26
26
  "VERSION",
27
27
  "drafter.gemspec",
28
28
  "lib/drafter.rb",
29
+ "lib/drafter/apply.rb",
29
30
  "lib/drafter/creation.rb",
30
31
  "lib/drafter/draft.rb",
31
32
  "lib/drafter/draft_upload.rb",
32
33
  "lib/drafter/draft_uploader.rb",
33
34
  "lib/drafter/draftable.rb",
35
+ "test/drafter/test_apply.rb",
34
36
  "test/drafter/test_creation.rb",
35
37
  "test/drafter/test_draft.rb",
36
38
  "test/drafter/test_draft_upload.rb",
@@ -48,7 +50,7 @@ Gem::Specification.new do |s|
48
50
  s.homepage = "http://github.com/futurechimp/drafter"
49
51
  s.licenses = ["MIT"]
50
52
  s.require_paths = ["lib"]
51
- s.rubygems_version = "1.8.17"
53
+ s.rubygems_version = "1.8.24"
52
54
  s.summary = "Simple"
53
55
 
54
56
  if s.respond_to? :specification_version then
@@ -0,0 +1,46 @@
1
+ module Drafter
2
+
3
+ # Takes care of associating and creating Draft objects for the draftable
4
+ # class.
5
+ module Apply
6
+ extend ActiveSupport::Concern
7
+
8
+ # Apply the draft data to the draftable, without saving it..
9
+ def apply_draft
10
+ restore_attrs
11
+ restore_files
12
+ self
13
+ end
14
+
15
+ private
16
+
17
+ # Whack the draft data onto the real object.
18
+ #
19
+ # @return [Draftable] the draftable object populated with the draft attrs.
20
+ def restore_attrs
21
+ draftable_columns.each do |key|
22
+ self.raw_write_attribute key, self.draft.data[key]
23
+ end
24
+ self
25
+ end
26
+
27
+ # Attach draft files to the real object.
28
+ #
29
+ # @return [Draftable] the draftable object where CarrierWave uploads
30
+ # on the object have been replaced with their draft equivalents.
31
+ def restore_files
32
+ draft.draft_uploads.each do |draft_upload|
33
+ self.send(draft_upload.draftable_mount_column + "=", draft_upload.file_data)
34
+ end
35
+ end
36
+
37
+ # We don't want to copy all the draft's columns into the draftable
38
+ # objects attributes.
39
+ #
40
+ # @return [Array] the draft's columns minus :id, :created_at, :updated_at
41
+ def draftable_columns
42
+ self.draft.data.keys - ['id', 'created_at', 'updated_at']
43
+ end
44
+
45
+ end
46
+ end
data/lib/drafter/draft.rb CHANGED
@@ -45,48 +45,14 @@ class Draft < ActiveRecord::Base
45
45
  end
46
46
  end
47
47
 
48
-
49
- private
50
-
51
- # Find the existing draftable, or build a new one, and set it up.
52
- #
53
- # @return the existing draftable object, or a new one of the proper
54
- # type, with attributes and files hanging off it.
55
- def build_draftable
56
- dr = draftable.nil? ? self.draftable_type.constantize.new : draftable
57
- restore_attrs_on(dr)
58
- restore_files_on(dr)
59
- dr
60
- end
61
-
62
- # Whack the draft data onto the real object.
63
- #
64
- # @param [Draftable] dr a new or existing draftable to restore from the
65
- # draft attributes.
66
- # @return [Draftable] the draftable object populated with the draft attrs.
67
- def restore_attrs_on(dr)
68
- draftable_columns.each do |key|
69
- dr.raw_write_attribute key, self.data[key]
70
- end
71
- dr
72
- end
73
-
74
- # Attach draft files to the real object.
75
- #
76
- # @param [Draftable] dr a new or existing draftable.
77
- # @return [Draftable] the draftable object where CarrierWave uploads
78
- # on the object have been replaced with their draft equivalents.
79
- def restore_files_on(dr)
80
- draft_uploads.each do |draft_upload|
81
- dr.send(draft_upload.draftable_mount_column + "=", draft_upload.file_data)
82
- end
83
- end
84
-
85
- # We don't want to copy all the draft's columns into the draftable
86
- # objects attributes.
87
- #
88
- # @return [Array] the draft's columns minus :id, :created_at, :updated_at
89
- def draftable_columns
90
- self.data.keys - ['id', 'created_at', 'updated_at']
91
- end
92
- end
48
+ # Find the existing draftable, or build a new one, and set it up.
49
+ #
50
+ # @return the existing draftable object, or a new one of the proper
51
+ # type, with attributes and files hanging off it.
52
+ def build_draftable
53
+ draftabl = draftable.nil? ? self.draftable_type.constantize.new(:draft => self) : draftable
54
+ draftabl.apply_draft
55
+ draftabl
56
+ end
57
+
58
+ end
data/lib/drafter.rb CHANGED
@@ -3,12 +3,13 @@ require 'active_support/dependencies/autoload'
3
3
  require 'active_support/core_ext/module/delegation'
4
4
  require 'active_record'
5
5
 
6
- require 'lib/drafter/draft_uploader'
6
+ require File.dirname(__FILE__) + '/drafter/draft_uploader'
7
7
 
8
8
  module Drafter
9
9
  extend ActiveSupport::Concern
10
10
  extend ActiveSupport::Autoload
11
11
 
12
+ autoload :Apply
12
13
  autoload :Creation
13
14
  autoload :Draft
14
15
  autoload :Draftable
@@ -20,6 +21,7 @@ module Drafter
20
21
  end
21
22
 
22
23
  included do
24
+ include Apply
23
25
  include Creation
24
26
  include Draftable
25
27
  end
@@ -0,0 +1,36 @@
1
+ require 'helper'
2
+
3
+ class TestCreation < Minitest::Unit::TestCase
4
+
5
+ describe "Applying a draft" do
6
+ before do
7
+ @article = Article.new(
8
+ :text => "initial text",
9
+ :upload => file_upload)
10
+ end
11
+
12
+ describe "to an existing article" do
13
+ before do
14
+ @article.save!
15
+ @article.text = "changed"
16
+ @article.upload = file_upload("bar.txt")
17
+ @article.save_draft
18
+ @article.reload
19
+ @article.apply_draft
20
+ end
21
+
22
+ it "should change the article without saving it" do
23
+ assert @article.changed?
24
+ end
25
+
26
+ it "should apply the text change" do
27
+ assert_equal("changed", @article.text)
28
+ end
29
+
30
+ it "should restore the draft upload" do
31
+ assert_equal("bar.txt", @article.upload.filename)
32
+ end
33
+ end
34
+ end
35
+
36
+ end
@@ -66,7 +66,7 @@ class TestDraft < Minitest::Unit::TestCase
66
66
 
67
67
  it "should delete the article's draft" do
68
68
  assert_equal(@draft_count - 1, Draft.count)
69
- refute @article.draft
69
+ refute @article.reload.draft
70
70
  end
71
71
  end
72
72
 
@@ -101,4 +101,4 @@ class TestDraft < Minitest::Unit::TestCase
101
101
  end
102
102
  end
103
103
 
104
- end
104
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: drafter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-17 00:00:00.000000000Z
12
+ date: 2012-08-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
16
- requirement: &2168641100 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2168641100
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: sqlite3
27
- requirement: &2168640280 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: '0'
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *2168640280
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: debugger
38
- requirement: &2168639000 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ! '>='
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: '0'
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *2168639000
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: minitest
49
- requirement: &2168630560 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ! '>='
@@ -54,10 +69,15 @@ dependencies:
54
69
  version: '0'
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *2168630560
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: bundler
60
- requirement: &2168630040 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
61
81
  none: false
62
82
  requirements:
63
83
  - - ~>
@@ -65,10 +85,15 @@ dependencies:
65
85
  version: 1.0.0
66
86
  type: :development
67
87
  prerelease: false
68
- version_requirements: *2168630040
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 1.0.0
69
94
  - !ruby/object:Gem::Dependency
70
95
  name: jeweler
71
- requirement: &2168629240 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
72
97
  none: false
73
98
  requirements:
74
99
  - - ~>
@@ -76,10 +101,15 @@ dependencies:
76
101
  version: 1.6.4
77
102
  type: :development
78
103
  prerelease: false
79
- version_requirements: *2168629240
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 1.6.4
80
110
  - !ruby/object:Gem::Dependency
81
111
  name: rcov
82
- requirement: &2168628620 !ruby/object:Gem::Requirement
112
+ requirement: !ruby/object:Gem::Requirement
83
113
  none: false
84
114
  requirements:
85
115
  - - ! '>='
@@ -87,10 +117,15 @@ dependencies:
87
117
  version: '0'
88
118
  type: :development
89
119
  prerelease: false
90
- version_requirements: *2168628620
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
91
126
  - !ruby/object:Gem::Dependency
92
127
  name: turn
93
- requirement: &2168627880 !ruby/object:Gem::Requirement
128
+ requirement: !ruby/object:Gem::Requirement
94
129
  none: false
95
130
  requirements:
96
131
  - - ! '>='
@@ -98,10 +133,15 @@ dependencies:
98
133
  version: '0'
99
134
  type: :development
100
135
  prerelease: false
101
- version_requirements: *2168627880
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
102
142
  - !ruby/object:Gem::Dependency
103
143
  name: carrierwave
104
- requirement: &2168626900 !ruby/object:Gem::Requirement
144
+ requirement: !ruby/object:Gem::Requirement
105
145
  none: false
106
146
  requirements:
107
147
  - - ! '>='
@@ -109,10 +149,15 @@ dependencies:
109
149
  version: '0'
110
150
  type: :development
111
151
  prerelease: false
112
- version_requirements: *2168626900
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
113
158
  - !ruby/object:Gem::Dependency
114
159
  name: minitest-rails-shoulda
115
- requirement: &2168626400 !ruby/object:Gem::Requirement
160
+ requirement: !ruby/object:Gem::Requirement
116
161
  none: false
117
162
  requirements:
118
163
  - - ! '>='
@@ -120,7 +165,12 @@ dependencies:
120
165
  version: '0'
121
166
  type: :development
122
167
  prerelease: false
123
- version_requirements: *2168626400
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
124
174
  description: A
125
175
  email: dave.hrycyszyn@headlondon.com
126
176
  executables: []
@@ -138,11 +188,13 @@ files:
138
188
  - VERSION
139
189
  - drafter.gemspec
140
190
  - lib/drafter.rb
191
+ - lib/drafter/apply.rb
141
192
  - lib/drafter/creation.rb
142
193
  - lib/drafter/draft.rb
143
194
  - lib/drafter/draft_upload.rb
144
195
  - lib/drafter/draft_uploader.rb
145
196
  - lib/drafter/draftable.rb
197
+ - test/drafter/test_apply.rb
146
198
  - test/drafter/test_creation.rb
147
199
  - test/drafter/test_draft.rb
148
200
  - test/drafter/test_draft_upload.rb
@@ -171,7 +223,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
171
223
  version: '0'
172
224
  segments:
173
225
  - 0
174
- hash: -2222563565782164432
226
+ hash: 3926558565189411274
175
227
  required_rubygems_version: !ruby/object:Gem::Requirement
176
228
  none: false
177
229
  requirements:
@@ -180,7 +232,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
180
232
  version: '0'
181
233
  requirements: []
182
234
  rubyforge_project:
183
- rubygems_version: 1.8.17
235
+ rubygems_version: 1.8.24
184
236
  signing_key:
185
237
  specification_version: 3
186
238
  summary: Simple