drafts 0.0.3 → 0.0.4
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/lib/drafts/drafts_manager.rb +54 -0
- data/lib/railtie.rb +11 -0
- metadata +3 -1
@@ -0,0 +1,54 @@
|
|
1
|
+
module DraftsManagerMethods
|
2
|
+
def self.included base
|
3
|
+
base.class_exec do
|
4
|
+
extend BaseClassMethods
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
module BaseClassMethods
|
9
|
+
def has_drafts
|
10
|
+
include DraftsManagerMethods::InstanceMethods
|
11
|
+
extend DraftsManagerMethods::ClassMethods
|
12
|
+
attr_accessor :draft_id
|
13
|
+
attr_accessible :draft_id
|
14
|
+
after_create :clear_draft
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
module InstanceMethods
|
19
|
+
def save_draft user
|
20
|
+
return false unless self.new_record?
|
21
|
+
draft = Draft.find_by_id(self.draft_id) || Draft.new
|
22
|
+
attrs = self.attributes.clone.delete_if { |key, value| self.class.accessible_attributes.deny?(key) }
|
23
|
+
cache_attrs = {}
|
24
|
+
attrs.each { |attr, val| cache_attrs[attr + "_cache"] = self.send(attr + "_cache") if self.send(attr).is_a?(CarrierWave::Uploader::Base) }
|
25
|
+
draft.data = attrs.merge cache_attrs
|
26
|
+
draft.name = self.to_s
|
27
|
+
draft.target_type = self.class.name
|
28
|
+
draft.user_id = user.id
|
29
|
+
res = draft.save
|
30
|
+
self.draft_id = draft.id if res
|
31
|
+
res
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def clear_draft
|
37
|
+
draft = Draft.find_by_id self.draft_id
|
38
|
+
draft.destroy if draft
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
module ClassMethods
|
43
|
+
def from_draft data
|
44
|
+
draft = data.is_a?(Draft) ? data : Draft.find(data)
|
45
|
+
target = self.new draft.data
|
46
|
+
target.draft_id = draft.id
|
47
|
+
target
|
48
|
+
end
|
49
|
+
|
50
|
+
def drafts user
|
51
|
+
Draft.where(:user_id => user.id, :target_type => self.name)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/lib/railtie.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: drafts
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -19,7 +19,9 @@ extensions: []
|
|
19
19
|
extra_rdoc_files: []
|
20
20
|
files:
|
21
21
|
- README
|
22
|
+
- lib/drafts/drafts_manager.rb
|
22
23
|
- lib/drafts.rb
|
24
|
+
- lib/railtie.rb
|
23
25
|
homepage: http://github.com/lxkuz/draft
|
24
26
|
licenses: []
|
25
27
|
post_install_message:
|