drafting 0.1.0 → 0.1.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 94ccad0d128a76e1c1aa944da416b5cee2ceb0be
4
- data.tar.gz: 4611668c5f7f0fb09625d805fd2ad3bff2bb5abd
3
+ metadata.gz: 88b15d49a289bae4e3b54fd33020792a23c8383e
4
+ data.tar.gz: 3a23d7a0924d227f79df9dcdc2c486ab14763160
5
5
  SHA512:
6
- metadata.gz: 145c85f1ffcc5f7a9a1d24e219e88145c74a9a848337ad0d5a6349c8d12b7ded881538d21b44fbc7f1cacf2c62ae1c34984e6c7b35645b69bdc4b73d5efe7b9c
7
- data.tar.gz: ad9209a1d0a2b713136854ae48bf809ce1df43b4d14a780d5862eb96f8b3ffd04598ede59d790235a53061463f6f9292dd75cf5ec29aa5ea648b18dc3ed04243
6
+ metadata.gz: cc5a190a3a9d2219f8fd410bb7bfedce0128e21611812d63a1c3c5e07a532be390cf3d583e6e674e7321641ace0daf0e090d68f7d35647dad7918d863b8975e3
7
+ data.tar.gz: c0e3576d2e7b78b7042a9e7e0af119290ab3131e10585661de9bf35bbfdf3a512b35cef8380c22063bd851d8bc2abbccb6274925be619c1c4196f5fa939e7c83
data/README.md CHANGED
@@ -2,14 +2,19 @@
2
2
 
3
3
  This Ruby gem enhances `ActiveRecord::Base` to save a draft version of the current instance.
4
4
 
5
- Remarkable:
5
+ [![Build Status](https://travis-ci.org/ledermann/drafting.svg?branch=master)](https://travis-ci.org/ledermann/drafting)
6
+ [![Code Climate](https://codeclimate.com/github/ledermann/drafting/badges/gpa.svg)](https://codeclimate.com/github/ledermann/drafting)
7
+ [![Coverage Status](https://coveralls.io/repos/ledermann/drafting/badge.svg?branch=master)](https://coveralls.io/r/ledermann/drafting?branch=master)
8
+
9
+ ## Features
6
10
 
7
11
  * The gem stores all the data in **one** separate table and does not need to modify the existing tables
8
12
  * It handles drafts for different models
9
- * It allows saving draft for an object which does not pass the validations
10
- * It uses marshaling, so associations and virtual attributes are saved, too
13
+ * It allows saving draft for an instance which does not pass the validations
14
+ * A draft stores associations and virtual attributes, too
11
15
  * A draft is optionally linked to a given user, so every user can manage his own drafts (invisible for the other users)
12
- * A draft is optionally linked to a parent object. This helps showing existing drafts in a context (e.g. message drafts for a given topic)
16
+ * A draft is optionally linked to a parent instance. This helps showing existing drafts in a context (e.g. message drafts for a given topic)
17
+ * Only 80 lines of code
13
18
 
14
19
 
15
20
  ## Installation
@@ -28,9 +33,62 @@ Or install it yourself as:
28
33
 
29
34
  $ gem install drafting
30
35
 
36
+ Finally, generate and run the migration:
37
+
38
+ $ rails g drafting:migration
39
+ $ rake db:migrate
40
+
41
+
31
42
  ## Usage
32
43
 
33
- TODO: Write usage instructions here
44
+ ### Simple example
45
+
46
+ ```ruby
47
+ class Message < ActiveRecord::Base
48
+ has_drafts
49
+ end
50
+
51
+ message = Message.new content: "Let's start with a simple example."
52
+ message.save_draft(current_user)
53
+
54
+ # Time passes ...
55
+
56
+ draft = Message.drafts(current_user).first
57
+ message = draft.restore
58
+ message.save!
59
+ ```
60
+
61
+ ### Linking to parent instance
62
+
63
+ ```ruby
64
+ class Topic < ActiveRecord::Base
65
+ has_many :messages
66
+ end
67
+
68
+ class Message < ActiveRecord::Base
69
+ belongs_to :topic
70
+ has_drafts parent: :topic
71
+ end
72
+
73
+ topic = Topic.create! title: 'World domination'
74
+ message = topic.messages.build content: 'First step: Get some coffee.'
75
+ message.save_draft(current_user)
76
+
77
+ # Time passes ...
78
+
79
+ draft = topic.drafts(current_user).first
80
+ message = draft.restore
81
+ message.save!
82
+ ```
83
+
84
+ ### Hints
85
+
86
+ * `save_draft` is allowed only if the instance is not persisted yet
87
+ * Doing `save_draft` overwrites a previous draft (if there is one)
88
+ * After doing a `save`, the draft (if there is one) will be deleted
89
+ * The `user` argument can be nil if you don't want to distinguish between multiple users
90
+ * Saving draft stores the data via `Marshal.dump` and `Marshal.load`. If you don't like this or need some customization, you can override the instance methods `dump_to_draft` and `load_from_draft` (see source)
91
+
34
92
 
35
93
  ## Development
36
94
 
@@ -38,6 +96,7 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
38
96
 
39
97
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
40
98
 
99
+
41
100
  ## Contributing
42
101
 
43
102
  Bug reports and pull requests are welcome on GitHub at https://github.com/ledermann/drafting. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](https://contributor-covenant.org) code of conduct.
@@ -47,4 +106,4 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/lederm
47
106
 
48
107
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
49
108
 
50
- Based on some code from the (probably) outdated gem [drafts](https://rubygems.org/gems/drafts) by Alexey Kuznetsov (@lxkuz)
109
+ Based on some code from the outdated gem [drafts](https://rubygems.org/gems/drafts). Used with kind permission of Alexey Kuznetsov (@lxkuz).
@@ -12,8 +12,10 @@ module Drafting
12
12
  parent_class = self.reflect_on_all_associations(:belongs_to).find { |a| a.name == options[:parent] }.try(:klass)
13
13
  raise ArgumentError unless parent_class
14
14
 
15
- parent_class.class_eval do
16
- has_many :drafts, :as => :parent, :dependent => :nullify
15
+ unless parent_class.method_defined? :drafts
16
+ parent_class.send :define_method, :drafts do |user|
17
+ Draft.where(:user => user, :parent => self)
18
+ end
17
19
  end
18
20
 
19
21
  self.draft_parent = options[:parent]
@@ -1,3 +1,3 @@
1
1
  module Drafting
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: drafting
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Georg Ledermann
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-08-03 00:00:00.000000000 Z
11
+ date: 2015-08-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord