undo 0.0.1 → 0.0.2
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 +4 -4
- data/.travis.yml +2 -2
- data/Gemfile +0 -7
- data/README.md +40 -38
- data/lib/undo.rb +5 -4
- data/lib/undo/config.rb +10 -8
- data/lib/undo/{environment.rb → gemspec.rb} +1 -0
- data/lib/undo/model.rb +6 -1
- data/lib/undo/serializer/null.rb +13 -0
- data/lib/undo/storage/{memory_adapter.rb → memory.rb} +2 -2
- data/spec/undo/model_spec.rb +25 -0
- data/spec/undo/serializer/null_spec.rb +19 -0
- data/spec/undo/storage/memory_spec.rb +13 -0
- data/spec/undo_spec.rb +18 -18
- data/undo.gemspec +10 -4
- metadata +18 -54
- data/lib/undo/serializer/simple.rb +0 -23
- data/lib/undo/version.rb +0 -3
- data/spec/acceptance/it_works_spec.rb +0 -7
- data/spec/acceptance/undo_deletion_spec.rb +0 -14
- data/spec/factories.rb +0 -6
- data/spec/it_works_spec.rb +0 -8
- data/spec/rails_app/.gitignore +0 -4
- data/spec/rails_app/Rakefile +0 -7
- data/spec/rails_app/app/models/.gitkeep +0 -0
- data/spec/rails_app/app/models/user.rb +0 -2
- data/spec/rails_app/config.ru +0 -4
- data/spec/rails_app/config/application.rb +0 -13
- data/spec/rails_app/config/boot.rb +0 -6
- data/spec/rails_app/config/database.yml +0 -22
- data/spec/rails_app/config/environment.rb +0 -5
- data/spec/rails_app/config/environments/development.rb +0 -23
- data/spec/rails_app/config/environments/production.rb +0 -50
- data/spec/rails_app/config/environments/test.rb +0 -34
- data/spec/rails_app/config/routes.rb +0 -2
- data/spec/rails_app/db/migrate/20140214213610_create_users.rb +0 -10
- data/spec/rails_app/db/schema.rb +0 -23
- data/spec/rails_app/db/seeds.rb +0 -7
- data/spec/rails_app/script/rails +0 -6
- data/spec/spec_helper_rails.rb +0 -22
- data/spec/undo/serializer/simple_spec.rb +0 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c5b749d7de8d45dac8367342ed0d678c5e4a6286
|
4
|
+
data.tar.gz: bc8cab3fff78e6d6edfb98e071f2e811b9a54d97
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd5f16a578091ab7827d0876a2f8d7b01080c0f22dc35372c7d11e6d2153478ceb1d0f7f1c7a8734f73346342017406a7e7c48d3ac759787302da832284dd338
|
7
|
+
data.tar.gz: 09685a617567f1aaeeebd28073e869f6a82200217293fa7fff80690efccd09ac4a060aeeb214317e821bbbf25a4fdbd5fb90ec9742ea052826bae48bb61c47cd
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,12 +1,19 @@
|
|
1
1
|
Undo
|
2
2
|
==========
|
3
|
-
[](
|
3
|
+
[](https://travis-ci.org/AlexParamonov/undo)
|
4
4
|
[](http://gemnasium.com/AlexParamonov/undo)
|
5
5
|
[](https://coveralls.io/r/AlexParamonov/undo?branch=master)
|
6
|
+
[](http://badge.fury.io/rb/undo)
|
6
7
|
|
7
|
-
Undo
|
8
|
-
|
9
|
-
|
8
|
+
Undo reverts operation made upon object.
|
9
|
+
It stores the object state before the mutator operation and allows to
|
10
|
+
restore this state later.
|
11
|
+
|
12
|
+
Undo uses adapters for storage (Redis, ActiveRecord, etc) and custom
|
13
|
+
serializers (ActiveRecord, Virtus, etc). It is very lightweight
|
14
|
+
solution that can be used as well with heavy ActiveRecord as with
|
15
|
+
simple Hash or Virtus objects. No database required: store data as it
|
16
|
+
suites you.
|
10
17
|
|
11
18
|
Contents
|
12
19
|
---------
|
@@ -85,42 +92,26 @@ end
|
|
85
92
|
|
86
93
|
### Configuration options
|
87
94
|
`storage` option responsible for putting and fetching object state to or from some storage.
|
88
|
-
Implement `put(uuid, object)` and `fetch(uuid)` methods.
|
95
|
+
Implement `put(uuid, object)` and `fetch(uuid)` methods.
|
96
|
+
Currently available storages:
|
97
|
+
* `Undo::Storage::Memory` simple runtime storage (Hash)
|
98
|
+
* `gem "undo-storage-redis"` designed to be used with `gem "redis"` from v0.1 to current
|
99
|
+
|
89
100
|
See also [documentation](http://github.com/AlexParamonov/undo)
|
90
|
-
on project repository for currently available storage adapters.
|
91
|
-
|
92
|
-
pass `serializer` to it:
|
101
|
+
on project repository for full list of currently available storage adapters.
|
102
|
+
To convert objects to data that can be processed by storage adapters and backward, use `serializers`:
|
93
103
|
|
94
104
|
``` ruby
|
95
105
|
Undo.configure do |config|
|
96
|
-
config.
|
106
|
+
config.serializer = CustomSerializer.new
|
97
107
|
end
|
98
108
|
```
|
99
109
|
|
100
|
-
|
101
|
-
|
102
|
-
[documentation](http://github.com/AlexParamonov/undo) on project
|
103
|
-
repository for currently available serializers.
|
104
|
-
|
105
|
-
Serializer is not used by `Undo` gem directly. It mean to be used in
|
106
|
-
storage adopters to serialize and deserialize data to required format.
|
107
|
-
Storage adapter may use serializer this way:
|
108
|
-
|
109
|
-
``` ruby
|
110
|
-
json = serializer.to_json object # in put method
|
111
|
-
return serializer.load_from_json json # in fetch method
|
112
|
-
|
113
|
-
xml = serializer.to_xml object
|
114
|
-
object = serializer.load_from_xml xml
|
115
|
-
```
|
110
|
+
Currently available serializers:
|
111
|
+
* `Undo::Serializer::Null` pass though serializer. It do nothing and returns whatever passed to it.
|
116
112
|
|
117
|
-
|
118
|
-
|
119
|
-
(load_from\_\* methods) This seems a good candinate to extraction to own
|
120
|
-
class (Deserializer or Loader) but due to to\_\* and load_from\_\*
|
121
|
-
method are tightly coupled with data format it is in one class now.
|
122
|
-
Let me know using the Github feedback (create an issue) if you have
|
123
|
-
any idea on this topic.
|
113
|
+
Check [documentation](http://github.com/AlexParamonov/undo) on project
|
114
|
+
repository for currently available serializers.
|
124
115
|
|
125
116
|
`uuid_generator` option allows to setup custom uuid generator.
|
126
117
|
|
@@ -144,20 +135,29 @@ end
|
|
144
135
|
```
|
145
136
|
|
146
137
|
### In place configuration
|
147
|
-
Any configuration option from previous chapter can be applied in
|
148
|
-
|
149
|
-
|
138
|
+
Any configuration option from previous chapter can be applied in
|
139
|
+
place for given operation. To restore object from another storage use
|
140
|
+
`storage` option:
|
150
141
|
|
151
142
|
``` ruby
|
152
143
|
Undo.restore uuid, storage: AnotherStorage.new
|
153
144
|
```
|
154
145
|
|
155
|
-
To wrap an object using custom
|
146
|
+
To wrap an object using custom mutator_methods use `mutator_methods` option:
|
156
147
|
|
157
148
|
``` ruby
|
158
|
-
Undo.wrap object,
|
149
|
+
Undo.wrap object, mutator_methods: [:save]
|
159
150
|
```
|
160
151
|
|
152
|
+
To use custom serializer or deserializer use `serializer` option:
|
153
|
+
|
154
|
+
``` ruby
|
155
|
+
Undo.wrap post, serializer: PostSerializer.new(post)
|
156
|
+
post.destroy
|
157
|
+
Undo.restore uuid, serializer: PostDeserializer.new(options)
|
158
|
+
```
|
159
|
+
|
160
|
+
|
161
161
|
Contacts
|
162
162
|
-------------
|
163
163
|
Have questions or recommendations? Contact me via `alexander.n.paramonov@gmail.com`
|
@@ -171,8 +171,10 @@ tested with Ruby
|
|
171
171
|
* 2.1
|
172
172
|
* 2.0
|
173
173
|
* 1.9.3
|
174
|
-
* rbx-19mode
|
175
174
|
* ruby-head
|
175
|
+
* rbx
|
176
|
+
* jruby-19mode
|
177
|
+
* jruby-head
|
176
178
|
|
177
179
|
See [build history](http://travis-ci.org/#!/AlexParamonov/undo/builds)
|
178
180
|
|
data/lib/undo.rb
CHANGED
@@ -1,12 +1,11 @@
|
|
1
|
-
require "undo/
|
1
|
+
require "undo/gemspec"
|
2
2
|
require "undo/config"
|
3
3
|
|
4
4
|
module Undo
|
5
5
|
require "undo/model"
|
6
6
|
|
7
7
|
def self.configure(&block)
|
8
|
-
|
9
|
-
config
|
8
|
+
block_given? ? block.call(config) : config
|
10
9
|
end
|
11
10
|
|
12
11
|
def self.config
|
@@ -18,6 +17,8 @@ module Undo
|
|
18
17
|
end
|
19
18
|
|
20
19
|
def self.restore(uuid, options = {})
|
21
|
-
config.with(options)
|
20
|
+
config.with(options) do |config|
|
21
|
+
config.serializer.deserialize config.storage.fetch uuid
|
22
|
+
end
|
22
23
|
end
|
23
24
|
end
|
data/lib/undo/config.rb
CHANGED
@@ -10,18 +10,20 @@ module Undo
|
|
10
10
|
require "securerandom"
|
11
11
|
->(object) { SecureRandom.uuid }
|
12
12
|
}
|
13
|
-
attribute :storage, Object, default: ->(config, _) {
|
14
|
-
require "undo/storage/memory_adapter"
|
15
|
-
Undo::Storage::MemoryAdapter.new
|
16
|
-
}
|
17
13
|
attribute :serializer, Object, default: ->(config, _) {
|
18
|
-
require "undo/serializer/
|
19
|
-
Undo::Serializer::
|
14
|
+
require "undo/serializer/null"
|
15
|
+
Undo::Serializer::Null.new
|
20
16
|
}
|
17
|
+
attribute :storage, Object, default: ->(config, _) {
|
18
|
+
require "undo/storage/memory"
|
19
|
+
Undo::Storage::Memory.new serializer: config.serializer
|
20
|
+
}, lazy: true
|
21
21
|
|
22
22
|
def with(attribute_updates = {}, &block)
|
23
|
-
|
24
|
-
|
23
|
+
config = attribute_updates.empty? ? self
|
24
|
+
: self.class.new(attribute_set.get(self).merge attribute_updates)
|
25
|
+
|
26
|
+
block_given? ? block.call(config) : config
|
25
27
|
end
|
26
28
|
end
|
27
29
|
end
|
data/lib/undo/model.rb
CHANGED
@@ -1,5 +1,10 @@
|
|
1
|
+
require "forwardable"
|
2
|
+
|
1
3
|
module Undo
|
2
4
|
class Model < SimpleDelegator
|
5
|
+
extend Forwardable
|
6
|
+
def_delegators :object, :class, :kind_of?
|
7
|
+
|
3
8
|
def initialize(object, options = {})
|
4
9
|
@object = object
|
5
10
|
@config = config.with options
|
@@ -23,7 +28,7 @@ module Undo
|
|
23
28
|
end
|
24
29
|
|
25
30
|
def store
|
26
|
-
config.storage.put uuid, object
|
31
|
+
config.storage.put uuid, config.serializer.serialize(object)
|
27
32
|
end
|
28
33
|
|
29
34
|
def config
|
data/spec/undo/model_spec.rb
CHANGED
@@ -32,5 +32,30 @@ describe Undo::Model do
|
|
32
32
|
|
33
33
|
end
|
34
34
|
|
35
|
+
describe "stores object data" do
|
36
|
+
let(:object) { double :object, change: true }
|
37
|
+
let(:storage) { double :storage }
|
38
|
+
let(:serializer) { double :serializer }
|
39
|
+
|
40
|
+
specify "when called mutator method" do
|
41
|
+
expect(storage).to receive(:put)
|
42
|
+
|
43
|
+
model = subject.new object,
|
44
|
+
storage: storage,
|
45
|
+
mutator_methods: [:change]
|
46
|
+
model.change
|
47
|
+
end
|
48
|
+
|
49
|
+
it "serializes data before storing" do
|
50
|
+
expect(serializer).to receive(:serialize).with(object).ordered
|
51
|
+
expect(storage).to receive(:put).ordered
|
52
|
+
|
53
|
+
model = subject.new object,
|
54
|
+
storage: storage,
|
55
|
+
serializer: serializer,
|
56
|
+
mutator_methods: [:change]
|
57
|
+
model.change
|
58
|
+
end
|
59
|
+
end
|
35
60
|
end
|
36
61
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "spec_helper_lite"
|
2
|
+
require "undo/serializer/null"
|
3
|
+
|
4
|
+
describe Undo::Serializer::Null do
|
5
|
+
subject { described_class }
|
6
|
+
let(:serializer) { described_class.new }
|
7
|
+
|
8
|
+
describe "returns passed argument" do
|
9
|
+
let(:object) { double :object }
|
10
|
+
|
11
|
+
specify "#serialize" do
|
12
|
+
expect(serializer.serialize object).to eq object
|
13
|
+
end
|
14
|
+
|
15
|
+
specify "#deserialize" do
|
16
|
+
expect(serializer.deserialize object).to eq object
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require "spec_helper_lite"
|
2
|
+
require 'undo/storage/memory'
|
3
|
+
|
4
|
+
describe Undo::Storage::Memory do
|
5
|
+
subject { described_class }
|
6
|
+
let(:adapter) { subject.new }
|
7
|
+
let(:object) { double :object }
|
8
|
+
|
9
|
+
it "stores any object" do
|
10
|
+
adapter.put 123, object
|
11
|
+
expect(adapter.fetch 123).to eq object
|
12
|
+
end
|
13
|
+
end
|
data/spec/undo_spec.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
require "spec_helper_lite"
|
2
2
|
|
3
3
|
describe Undo do
|
4
|
+
let(:object) { double :object, change: true }
|
4
5
|
subject { described_class }
|
5
6
|
|
6
7
|
describe "#wrap" do
|
7
|
-
let(:object) { double :object, change: true }
|
8
|
-
|
9
8
|
before do
|
10
9
|
subject.configure do |config|
|
11
10
|
config.mutator_methods = [:change]
|
@@ -13,34 +12,35 @@ describe Undo do
|
|
13
12
|
end
|
14
13
|
|
15
14
|
it "is a decorator" do
|
16
|
-
object = [
|
15
|
+
object = %w[hello world]
|
16
|
+
|
17
17
|
decorator = subject.wrap object
|
18
18
|
expect(object).to receive(:some_method)
|
19
|
-
|
20
19
|
decorator.some_method
|
21
|
-
|
20
|
+
|
21
|
+
expect(decorator.class).to eq Array
|
22
|
+
expect(decorator).to be_a Array
|
22
23
|
end
|
24
|
+
end
|
23
25
|
|
26
|
+
describe "restores object by uuid" do
|
24
27
|
it "restores object" do
|
25
|
-
|
26
|
-
|
27
|
-
restored_object = subject.restore
|
28
|
+
model = subject.wrap object
|
29
|
+
model.change
|
30
|
+
restored_object = subject.restore model.uuid
|
28
31
|
|
29
32
|
expect(restored_object).to eq object
|
30
33
|
end
|
31
34
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
expect(storage).to receive(:put)
|
36
|
-
expect(storage).to receive(:fetch) { object }
|
35
|
+
it "restores using provided options" do
|
36
|
+
serializer = double :serializer
|
37
|
+
expect(serializer).to receive(:deserialize) { object }
|
37
38
|
|
38
|
-
|
39
|
-
|
40
|
-
|
39
|
+
model = subject.wrap object
|
40
|
+
model.change
|
41
|
+
restored_object = subject.restore model.uuid, serializer: serializer
|
41
42
|
|
42
|
-
|
43
|
-
end
|
43
|
+
expect(restored_object).to eq object
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
data/undo.gemspec
CHANGED
@@ -1,16 +1,22 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
lib = File.expand_path('../lib', __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'undo/
|
5
|
-
require 'undo/environment'
|
4
|
+
require 'undo/gemspec'
|
6
5
|
|
7
6
|
Gem::Specification.new do |spec|
|
8
7
|
spec.name = "undo"
|
9
8
|
spec.version = Undo::VERSION
|
10
9
|
spec.authors = ["Alexander Paramonov"]
|
11
10
|
spec.email = ["alexander.n.paramonov@gmail.com"]
|
12
|
-
spec.summary = %q{
|
13
|
-
spec.description = %q{
|
11
|
+
spec.summary = %q{Reverts operation made upon object}
|
12
|
+
spec.description = %q{
|
13
|
+
Undo reverts operation made upon object.
|
14
|
+
It stores the object state before the mutator operation and allows to restore this state later.
|
15
|
+
|
16
|
+
Undo uses adapters for storage (Redis, ActiveRecord, etc) and custom serializers (ActiveRecord, Virtus, etc).
|
17
|
+
It is very lightweight solution that can be used as well with heavy ActiveRecord as with simple Hash or Virtus objects.
|
18
|
+
No database required: store data as it suites you.
|
19
|
+
}
|
14
20
|
spec.homepage = "http://github.com/AlexParamonov/undo"
|
15
21
|
spec.license = "MIT"
|
16
22
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: undo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Paramonov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-02-
|
11
|
+
date: 2014-02-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: virtus
|
@@ -94,7 +94,14 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
-
description:
|
97
|
+
description: |2
|
98
|
+
|
99
|
+
Undo reverts operation made upon object.
|
100
|
+
It stores the object state before the mutator operation and allows to restore this state later.
|
101
|
+
|
102
|
+
Undo uses adapters for storage (Redis, ActiveRecord, etc) and custom serializers (ActiveRecord, Virtus, etc).
|
103
|
+
It is very lightweight solution that can be used as well with heavy ActiveRecord as with simple Hash or Virtus objects.
|
104
|
+
No database required: store data as it suites you.
|
98
105
|
email:
|
99
106
|
- alexander.n.paramonov@gmail.com
|
100
107
|
executables: []
|
@@ -113,36 +120,14 @@ files:
|
|
113
120
|
- Rakefile
|
114
121
|
- lib/undo.rb
|
115
122
|
- lib/undo/config.rb
|
116
|
-
- lib/undo/
|
123
|
+
- lib/undo/gemspec.rb
|
117
124
|
- lib/undo/model.rb
|
118
|
-
- lib/undo/serializer/
|
119
|
-
- lib/undo/storage/
|
120
|
-
- lib/undo/version.rb
|
121
|
-
- spec/acceptance/it_works_spec.rb
|
122
|
-
- spec/acceptance/undo_deletion_spec.rb
|
123
|
-
- spec/factories.rb
|
124
|
-
- spec/it_works_spec.rb
|
125
|
-
- spec/rails_app/.gitignore
|
126
|
-
- spec/rails_app/Rakefile
|
127
|
-
- spec/rails_app/app/models/.gitkeep
|
128
|
-
- spec/rails_app/app/models/user.rb
|
129
|
-
- spec/rails_app/config.ru
|
130
|
-
- spec/rails_app/config/application.rb
|
131
|
-
- spec/rails_app/config/boot.rb
|
132
|
-
- spec/rails_app/config/database.yml
|
133
|
-
- spec/rails_app/config/environment.rb
|
134
|
-
- spec/rails_app/config/environments/development.rb
|
135
|
-
- spec/rails_app/config/environments/production.rb
|
136
|
-
- spec/rails_app/config/environments/test.rb
|
137
|
-
- spec/rails_app/config/routes.rb
|
138
|
-
- spec/rails_app/db/migrate/20140214213610_create_users.rb
|
139
|
-
- spec/rails_app/db/schema.rb
|
140
|
-
- spec/rails_app/db/seeds.rb
|
141
|
-
- spec/rails_app/script/rails
|
125
|
+
- lib/undo/serializer/null.rb
|
126
|
+
- lib/undo/storage/memory.rb
|
142
127
|
- spec/spec_helper_lite.rb
|
143
|
-
- spec/spec_helper_rails.rb
|
144
128
|
- spec/undo/model_spec.rb
|
145
|
-
- spec/undo/serializer/
|
129
|
+
- spec/undo/serializer/null_spec.rb
|
130
|
+
- spec/undo/storage/memory_spec.rb
|
146
131
|
- spec/undo_spec.rb
|
147
132
|
- undo.gemspec
|
148
133
|
homepage: http://github.com/AlexParamonov/undo
|
@@ -168,32 +153,11 @@ rubyforge_project:
|
|
168
153
|
rubygems_version: 2.2.2
|
169
154
|
signing_key:
|
170
155
|
specification_version: 4
|
171
|
-
summary:
|
156
|
+
summary: Reverts operation made upon object
|
172
157
|
test_files:
|
173
|
-
- spec/acceptance/it_works_spec.rb
|
174
|
-
- spec/acceptance/undo_deletion_spec.rb
|
175
|
-
- spec/factories.rb
|
176
|
-
- spec/it_works_spec.rb
|
177
|
-
- spec/rails_app/.gitignore
|
178
|
-
- spec/rails_app/Rakefile
|
179
|
-
- spec/rails_app/app/models/.gitkeep
|
180
|
-
- spec/rails_app/app/models/user.rb
|
181
|
-
- spec/rails_app/config.ru
|
182
|
-
- spec/rails_app/config/application.rb
|
183
|
-
- spec/rails_app/config/boot.rb
|
184
|
-
- spec/rails_app/config/database.yml
|
185
|
-
- spec/rails_app/config/environment.rb
|
186
|
-
- spec/rails_app/config/environments/development.rb
|
187
|
-
- spec/rails_app/config/environments/production.rb
|
188
|
-
- spec/rails_app/config/environments/test.rb
|
189
|
-
- spec/rails_app/config/routes.rb
|
190
|
-
- spec/rails_app/db/migrate/20140214213610_create_users.rb
|
191
|
-
- spec/rails_app/db/schema.rb
|
192
|
-
- spec/rails_app/db/seeds.rb
|
193
|
-
- spec/rails_app/script/rails
|
194
158
|
- spec/spec_helper_lite.rb
|
195
|
-
- spec/spec_helper_rails.rb
|
196
159
|
- spec/undo/model_spec.rb
|
197
|
-
- spec/undo/serializer/
|
160
|
+
- spec/undo/serializer/null_spec.rb
|
161
|
+
- spec/undo/storage/memory_spec.rb
|
198
162
|
- spec/undo_spec.rb
|
199
163
|
has_rdoc:
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require "json"
|
2
|
-
|
3
|
-
module Undo
|
4
|
-
module Serializer
|
5
|
-
class Simple
|
6
|
-
def to_json(object)
|
7
|
-
object.to_json
|
8
|
-
end
|
9
|
-
|
10
|
-
def load_from_json(json)
|
11
|
-
JSON.parse json
|
12
|
-
end
|
13
|
-
|
14
|
-
def to_xml(object)
|
15
|
-
raise NotImplementedError
|
16
|
-
end
|
17
|
-
|
18
|
-
def load_from_xml(xml)
|
19
|
-
raise NotImplementedError
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
data/lib/undo/version.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
require "spec_helper_rails"
|
2
|
-
|
3
|
-
describe "Undo deletion" do
|
4
|
-
subject { Undo }
|
5
|
-
|
6
|
-
it "reverts user deletion" do
|
7
|
-
user = create :user
|
8
|
-
undoable_model = subject.wrap user
|
9
|
-
undoable_model.destroy
|
10
|
-
restored_user = subject.restore undoable_model.uuid
|
11
|
-
|
12
|
-
expect(restored_user).to eq user
|
13
|
-
end
|
14
|
-
end
|
data/spec/factories.rb
DELETED
data/spec/it_works_spec.rb
DELETED
data/spec/rails_app/.gitignore
DELETED
data/spec/rails_app/Rakefile
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
# Add your own tasks in files placed in lib/tasks ending in .rake,
|
2
|
-
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
|
3
|
-
|
4
|
-
require File.expand_path('../config/application', __FILE__)
|
5
|
-
require 'rake'
|
6
|
-
|
7
|
-
RailsApp::Application.load_tasks
|
File without changes
|
data/spec/rails_app/config.ru
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
require File.expand_path('../boot', __FILE__)
|
2
|
-
|
3
|
-
require "rails/all"
|
4
|
-
|
5
|
-
# If you have a Gemfile, require the gems listed there, including any gems
|
6
|
-
# you've limited to :test, :development, or :production.
|
7
|
-
Bundler.require(:default, Rails.env) if defined?(Bundler)
|
8
|
-
|
9
|
-
module RailsApp
|
10
|
-
class Application < Rails::Application
|
11
|
-
I18n.enforce_available_locales = false
|
12
|
-
end
|
13
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
# SQLite version 3.x
|
2
|
-
# gem install sqlite3
|
3
|
-
development:
|
4
|
-
adapter: sqlite3
|
5
|
-
database: db/development.sqlite3
|
6
|
-
pool: 5
|
7
|
-
timeout: 5000
|
8
|
-
|
9
|
-
# Warning: The database defined as "test" will be erased and
|
10
|
-
# re-generated from your development database when you run "rake".
|
11
|
-
# Do not set this db to the same as development or production.
|
12
|
-
test:
|
13
|
-
adapter: sqlite3
|
14
|
-
database: db/test.sqlite3
|
15
|
-
pool: 5
|
16
|
-
timeout: 5000
|
17
|
-
|
18
|
-
production:
|
19
|
-
adapter: sqlite3
|
20
|
-
database: db/production.sqlite3
|
21
|
-
pool: 5
|
22
|
-
timeout: 5000
|
@@ -1,23 +0,0 @@
|
|
1
|
-
RailsApp::Application.configure do
|
2
|
-
# Settings specified here will take precedence over those in config/application.rb
|
3
|
-
|
4
|
-
# In the development environment your application's code is reloaded on
|
5
|
-
# every request. This slows down response time but is perfect for development
|
6
|
-
# since you don't have to restart the webserver when you make code changes.
|
7
|
-
config.cache_classes = false
|
8
|
-
config.eager_load = false
|
9
|
-
|
10
|
-
# Show full error reports and disable caching
|
11
|
-
config.consider_all_requests_local = true
|
12
|
-
config.action_controller.perform_caching = false
|
13
|
-
|
14
|
-
# Don't care if the mailer can't send
|
15
|
-
config.action_mailer.raise_delivery_errors = false
|
16
|
-
|
17
|
-
# Print deprecation notices to the Rails logger
|
18
|
-
config.active_support.deprecation = :log
|
19
|
-
|
20
|
-
# Only use best-standards-support built into browsers
|
21
|
-
config.action_dispatch.best_standards_support = :builtin
|
22
|
-
end
|
23
|
-
|
@@ -1,50 +0,0 @@
|
|
1
|
-
RailsApp::Application.configure do
|
2
|
-
# Settings specified here will take precedence over those in config/application.rb
|
3
|
-
|
4
|
-
# The production environment is meant for finished, "live" apps.
|
5
|
-
# Code is not reloaded between requests
|
6
|
-
config.cache_classes = true
|
7
|
-
config.eager_load = true
|
8
|
-
|
9
|
-
# Full error reports are disabled and caching is turned on
|
10
|
-
config.consider_all_requests_local = false
|
11
|
-
config.action_controller.perform_caching = true
|
12
|
-
|
13
|
-
# Specifies the header that your server uses for sending files
|
14
|
-
config.action_dispatch.x_sendfile_header = "X-Sendfile"
|
15
|
-
|
16
|
-
# For nginx:
|
17
|
-
# config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'
|
18
|
-
|
19
|
-
# If you have no front-end server that supports something like X-Sendfile,
|
20
|
-
# just comment this out and Rails will serve the files
|
21
|
-
|
22
|
-
# See everything in the log (default is :info)
|
23
|
-
# config.log_level = :debug
|
24
|
-
|
25
|
-
# Use a different logger for distributed setups
|
26
|
-
# config.logger = SyslogLogger.new
|
27
|
-
|
28
|
-
# Use a different cache store in production
|
29
|
-
# config.cache_store = :mem_cache_store
|
30
|
-
|
31
|
-
# Disable Rails's static asset server
|
32
|
-
# In production, Apache or nginx will already do this
|
33
|
-
config.serve_static_assets = false
|
34
|
-
|
35
|
-
# Enable serving of images, stylesheets, and javascripts from an asset server
|
36
|
-
# config.action_controller.asset_host = "http://assets.example.com"
|
37
|
-
|
38
|
-
# Disable delivery errors, bad email addresses will be ignored
|
39
|
-
# config.action_mailer.raise_delivery_errors = false
|
40
|
-
|
41
|
-
# Enable threaded mode
|
42
|
-
# config.threadsafe!
|
43
|
-
|
44
|
-
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
|
45
|
-
# the I18n.default_locale when a translation can not be found)
|
46
|
-
config.i18n.fallbacks = true
|
47
|
-
|
48
|
-
# Send deprecation notices to registered listeners
|
49
|
-
config.active_support.deprecation = :notify
|
50
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
RailsApp::Application.configure do
|
2
|
-
# Settings specified here will take precedence over those in config/application.rb
|
3
|
-
|
4
|
-
# The test environment is used exclusively to run your application's
|
5
|
-
# test suite. You never need to work with it otherwise. Remember that
|
6
|
-
# your test database is "scratch space" for the test suite and is wiped
|
7
|
-
# and recreated between test runs. Don't rely on the data there!
|
8
|
-
config.cache_classes = true
|
9
|
-
config.eager_load = false
|
10
|
-
|
11
|
-
# Show full error reports and disable caching
|
12
|
-
config.consider_all_requests_local = true
|
13
|
-
config.action_controller.perform_caching = false
|
14
|
-
|
15
|
-
# Raise exceptions instead of rendering exception templates
|
16
|
-
config.action_dispatch.show_exceptions = false
|
17
|
-
|
18
|
-
# Disable request forgery protection in test environment
|
19
|
-
config.action_controller.allow_forgery_protection = false
|
20
|
-
|
21
|
-
# Tell Action Mailer not to deliver emails to the real world.
|
22
|
-
# The :test delivery method accumulates sent emails in the
|
23
|
-
# ActionMailer::Base.deliveries array.
|
24
|
-
config.action_mailer.delivery_method = :test
|
25
|
-
config.action_mailer.default_url_options = { :host => 'www.example.com' }
|
26
|
-
|
27
|
-
# Use SQL instead of Active Record's schema dumper when creating the test database.
|
28
|
-
# This is necessary if your schema can't be completely dumped by the schema dumper,
|
29
|
-
# like if you have constraints or database-specific column types
|
30
|
-
# config.active_record.schema_format = :sql
|
31
|
-
|
32
|
-
# Print deprecation notices to the stderr
|
33
|
-
config.active_support.deprecation = :stderr
|
34
|
-
end
|
data/spec/rails_app/db/schema.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
# This file is auto-generated from the current state of the database. Instead
|
3
|
-
# of editing this file, please use the migrations feature of Active Record to
|
4
|
-
# incrementally modify your database, and then regenerate this schema definition.
|
5
|
-
#
|
6
|
-
# Note that this schema.rb definition is the authoritative source for your
|
7
|
-
# database schema. If you need to create the application database on another
|
8
|
-
# system, you should be using db:schema:load, not running all the migrations
|
9
|
-
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
10
|
-
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
11
|
-
#
|
12
|
-
# It's strongly recommended that you check this file into your version control system.
|
13
|
-
|
14
|
-
ActiveRecord::Schema.define(version: 20140214213610) do
|
15
|
-
|
16
|
-
create_table "users", force: true do |t|
|
17
|
-
t.string "name"
|
18
|
-
t.string "email"
|
19
|
-
t.datetime "created_at"
|
20
|
-
t.datetime "updated_at"
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
data/spec/rails_app/db/seeds.rb
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
# This file should contain all the record creation needed to seed the database with its default values.
|
2
|
-
# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
|
3
|
-
#
|
4
|
-
# Examples:
|
5
|
-
#
|
6
|
-
# cities = City.create([{ :name => 'Chicago' }, { :name => 'Copenhagen' }])
|
7
|
-
# Mayor.create(:name => 'Daley', :city => cities.first)
|
data/spec/rails_app/script/rails
DELETED
@@ -1,6 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
3
|
-
|
4
|
-
APP_PATH = File.expand_path('../../config/application', __FILE__)
|
5
|
-
require File.expand_path('../../config/boot', __FILE__)
|
6
|
-
require 'rails/commands'
|
data/spec/spec_helper_rails.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
if Undo::RUNNING_ON_CI
|
2
|
-
require 'coveralls'
|
3
|
-
Coveralls.wear!
|
4
|
-
else
|
5
|
-
require 'pry'
|
6
|
-
end
|
7
|
-
|
8
|
-
ENV['RAILS_ENV'] ||= 'test'
|
9
|
-
|
10
|
-
require File.expand_path('../rails_app/config/environment', __FILE__)
|
11
|
-
require 'rspec'
|
12
|
-
require_relative 'factories'
|
13
|
-
|
14
|
-
ActiveRecord::Migration.verbose = false
|
15
|
-
ActiveRecord::Migrator.migrate(Rails.root.join('db', 'migrate').to_s)
|
16
|
-
|
17
|
-
RSpec.configure do |config|
|
18
|
-
config.mock_with :rspec do |config|
|
19
|
-
config.syntax = [:expect, :should]
|
20
|
-
end
|
21
|
-
config.include FactoryGirl::Syntax::Methods
|
22
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require "spec_helper_lite"
|
2
|
-
require "undo/serializer/simple"
|
3
|
-
|
4
|
-
describe Undo::Serializer::Simple do
|
5
|
-
subject { described_class }
|
6
|
-
let(:serializer) { described_class.new }
|
7
|
-
|
8
|
-
it "serializes to json" do
|
9
|
-
object = { "hello" => "world" }
|
10
|
-
result = serializer.to_json object
|
11
|
-
expect(result).to eq '{"hello":"world"}'
|
12
|
-
end
|
13
|
-
|
14
|
-
it "deserializes from json" do
|
15
|
-
serialized_object = '{"hello":"world"}'
|
16
|
-
result = serializer.load_from_json serialized_object
|
17
|
-
expect(result).to eq "hello" => "world"
|
18
|
-
end
|
19
|
-
end
|