drafts 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -0,0 +1,11 @@
1
+ require "lib/drafts_manager"
2
+
3
+ module DraftsManager
4
+
5
+ class Railtie < Rails::Railtie
6
+ initializer "drafts init" do
7
+ ActionView::Base.send :include, DraftsManagerMethods
8
+ end
9
+ end
10
+
11
+ end
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.3
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: