protected_record 0.0.5 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +7 -6
- data/lib/protected_record/record.rb +8 -0
- data/lib/protected_record/update.rb +3 -0
- data/lib/protected_record/use_case/change_filter/create.rb +2 -1
- data/lib/protected_record/use_case/change_log/create.rb +2 -1
- data/lib/protected_record/use_case/change_request/create.rb +2 -1
- data/lib/protected_record/use_case/update.rb +16 -15
- data/lib/protected_record/user.rb +8 -0
- data/lib/protected_record/version.rb +1 -1
- data/lib/protected_record.rb +12 -3
- data/protected_record.gemspec +11 -5
- data/test/protected_record/update_test.rb +2 -2
- data/test/protected_record/use_case/update_test.rb +44 -0
- metadata +14 -24
- data/lib/protected_record/use_case.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b07d6ebf3ed0d4992e9ee6918d5abbea15ce1a2
|
4
|
+
data.tar.gz: 20bac695f688e80e68e0a286d687a51b97411ff3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d42e0214fbf3dab9fc948bb4f6b2e742f2d6aaa98a9862ed33fba9b91e370038b4891779b57d84e2a68c4732e894a1a57c2dbaa7843caf5b320761452f4c00ab
|
7
|
+
data.tar.gz: 0d8fdbc2ad2c3b613c809a99956844ec7c460bd4e2086a64f99ab7ab581e1fa4e549882c91b4cc707ab5f22aea4884c6f242758a486263e9a86df89123e9ccdc
|
data/README.md
CHANGED
@@ -19,15 +19,16 @@ So, in your models add `require "protected_record"`
|
|
19
19
|
|
20
20
|
```ruby
|
21
21
|
# app/models/user.rb
|
22
|
-
include ProtectedRecord::
|
23
|
-
|
22
|
+
include ProtectedRecord::User
|
23
|
+
# includes ProtectedRecord::ChangeRequest::Changer
|
24
|
+
# & ProtectedRecord::ChangeLog::Changer
|
24
25
|
```
|
25
26
|
|
26
27
|
```ruby
|
27
28
|
# app/models/any.rb
|
28
|
-
|
29
|
-
|
30
|
-
|
29
|
+
include ProtectedRecord::Record
|
30
|
+
# includes ProtectedRecord::ChangeRequest::Changeling
|
31
|
+
# & ProtectedRecord::ChangeLog::Changeling
|
31
32
|
```
|
32
33
|
|
33
34
|
#### Protected Keys
|
@@ -63,7 +64,7 @@ Rejected changes will create `ProtectedRecord::ChangeRequest::Record` objects.
|
|
63
64
|
Permitted changes will create `ProtectedRecord::ChangeLog::Record` objects.
|
64
65
|
|
65
66
|
```ruby
|
66
|
-
ready = ProtectedRecord::
|
67
|
+
ready = ProtectedRecord::Update.new({
|
67
68
|
user: current_user,
|
68
69
|
params: record_params,
|
69
70
|
protected_record: @record,
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module ProtectedRecord
|
2
2
|
module UseCase
|
3
|
-
class Update
|
3
|
+
class Update
|
4
|
+
include PayDirt::UseCase
|
4
5
|
def initialize(options)
|
5
6
|
# Defaults
|
6
7
|
options = {
|
@@ -18,11 +19,14 @@ module ProtectedRecord
|
|
18
19
|
|
19
20
|
# We are successful if all changes have been applied
|
20
21
|
if !@protected_record.changes.present?
|
21
|
-
return PayDirt::Result.new(
|
22
|
+
return PayDirt::Result.new({
|
23
|
+
data: { updated: @protected_record },
|
24
|
+
success: true
|
25
|
+
})
|
22
26
|
else
|
23
27
|
return PayDirt::Result.new({
|
24
|
-
data:
|
25
|
-
success:
|
28
|
+
data: { failed: @protected_record.changes },
|
29
|
+
success: false
|
26
30
|
})
|
27
31
|
end
|
28
32
|
end
|
@@ -31,18 +35,15 @@ module ProtectedRecord
|
|
31
35
|
def form_change_request
|
32
36
|
@protected_record.attributes = @params
|
33
37
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
user: @user
|
40
|
-
}).execute!
|
38
|
+
request_result = @change_request.new({
|
39
|
+
protected_keys: @protected_keys,
|
40
|
+
protected_record: @protected_record,
|
41
|
+
user: @user
|
42
|
+
}).execute!
|
41
43
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
end
|
44
|
+
if request_result.successful?
|
45
|
+
revert_protected_attributes ||
|
46
|
+
save_protected_record
|
46
47
|
end
|
47
48
|
end
|
48
49
|
|
data/lib/protected_record.rb
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
require "pay_dirt"
|
2
|
+
|
3
|
+
require_relative 'protected_record/use_case/update'
|
4
|
+
require_relative 'protected_record/use_case/change_filter/create'
|
5
|
+
require_relative 'protected_record/use_case/change_log/create/'
|
6
|
+
require_relative 'protected_record/use_case/change_request/create'
|
7
|
+
require_relative 'protected_record/update'
|
8
|
+
require_relative 'protected_record/change_log'
|
9
|
+
require_relative 'protected_record/change_request'
|
10
|
+
require_relative 'protected_record/user'
|
11
|
+
require_relative 'protected_record/record'
|
12
|
+
require_relative 'protected_record/dirty_model'
|
data/protected_record.gemspec
CHANGED
@@ -9,18 +9,24 @@ Gem::Specification.new do |s|
|
|
9
9
|
s.email = ["tad.hosford@gmail.com"]
|
10
10
|
s.homepage = "http://github.com/rthbound/protected_record"
|
11
11
|
s.description = %q{
|
12
|
-
|
13
|
-
|
12
|
+
Change filter, change log, and change request system. No callbacks.
|
13
|
+
}
|
14
|
+
s.summary = %q{
|
15
|
+
Opt in to use #attributes= and ActiveModel::Dirty
|
16
|
+
to filter changes to certain keys, to log change requests,
|
17
|
+
ant to log changes to any protected record.
|
18
|
+
|
19
|
+
Built modularly so you can use the pieces independently
|
20
|
+
if you like.
|
14
21
|
}
|
15
|
-
s.summary = %q{ }
|
16
22
|
|
17
23
|
s.files = `git ls-files`.split("\n")
|
18
24
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
25
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
26
|
s.require_paths = ["lib"]
|
21
27
|
|
22
|
-
s.add_runtime_dependency "pay_dirt"
|
23
|
-
|
28
|
+
s.add_runtime_dependency "pay_dirt", "~> 0.0.5"
|
29
|
+
|
24
30
|
s.add_development_dependency "minitest"
|
25
31
|
s.add_development_dependency "rake"
|
26
32
|
s.add_development_dependency "pry"
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require "minitest_helper"
|
2
|
+
|
3
|
+
describe ProtectedRecord::UseCase::Update do
|
4
|
+
before do
|
5
|
+
@subject = ProtectedRecord::UseCase::Update
|
6
|
+
|
7
|
+
@params = { params: {
|
8
|
+
knowledge: "bad",
|
9
|
+
power: "money"
|
10
|
+
}}
|
11
|
+
|
12
|
+
@test_case = TestCase.new( knowledge: :power )
|
13
|
+
|
14
|
+
@dependencies = {
|
15
|
+
user: MiniTest::Mock.new,
|
16
|
+
protected_record: @test_case,
|
17
|
+
protected_keys: [:knowledge],
|
18
|
+
}
|
19
|
+
@dependencies.merge! @params
|
20
|
+
end
|
21
|
+
|
22
|
+
it "can be initialized" do
|
23
|
+
@subject.must_respond_to :new
|
24
|
+
end
|
25
|
+
|
26
|
+
it "fails without required dependencies" do
|
27
|
+
%w{ user params protected_record }.each do |dep|
|
28
|
+
begin
|
29
|
+
@subject.new @dependencies.reject { |k| k.to_s == dep }
|
30
|
+
rescue => e
|
31
|
+
e.must_be_kind_of RuntimeError
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
it "initializes without :protected_keys" do
|
37
|
+
so = @subject.new @dependencies.reject { |k| k.to_s == "protected_keys" }
|
38
|
+
so.must_respond_to :execute!
|
39
|
+
end
|
40
|
+
|
41
|
+
it "can be executed" do
|
42
|
+
@subject.new(@dependencies).must_respond_to :execute!
|
43
|
+
end
|
44
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: protected_record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tad Hosford
|
@@ -14,30 +14,16 @@ dependencies:
|
|
14
14
|
name: pay_dirt
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 0.0.5
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: activerecord
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - '>='
|
24
|
+
- - ~>
|
32
25
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - '>='
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
26
|
+
version: 0.0.5
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: minitest
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,9 +66,8 @@ dependencies:
|
|
80
66
|
- - '>='
|
81
67
|
- !ruby/object:Gem::Version
|
82
68
|
version: '0'
|
83
|
-
description: "\n
|
84
|
-
|
85
|
-
on protected attrs\n "
|
69
|
+
description: "\n Change filter, change log, and change request
|
70
|
+
system. No callbacks.\n "
|
86
71
|
email:
|
87
72
|
- tad.hosford@gmail.com
|
88
73
|
executables: []
|
@@ -99,11 +84,13 @@ files:
|
|
99
84
|
- lib/protected_record/change_log.rb
|
100
85
|
- lib/protected_record/change_request.rb
|
101
86
|
- lib/protected_record/dirty_model.rb
|
102
|
-
- lib/protected_record/
|
87
|
+
- lib/protected_record/record.rb
|
88
|
+
- lib/protected_record/update.rb
|
103
89
|
- lib/protected_record/use_case/change_filter/create.rb
|
104
90
|
- lib/protected_record/use_case/change_log/create.rb
|
105
91
|
- lib/protected_record/use_case/change_request/create.rb
|
106
92
|
- lib/protected_record/use_case/update.rb
|
93
|
+
- lib/protected_record/user.rb
|
107
94
|
- lib/protected_record/version.rb
|
108
95
|
- protected_record.gemspec
|
109
96
|
- test/minitest_helper.rb
|
@@ -111,6 +98,7 @@ files:
|
|
111
98
|
- test/protected_record/change_log/create_test.rb
|
112
99
|
- test/protected_record/change_request/create_test.rb
|
113
100
|
- test/protected_record/update_test.rb
|
101
|
+
- test/protected_record/use_case/update_test.rb
|
114
102
|
homepage: http://github.com/rthbound/protected_record
|
115
103
|
licenses: []
|
116
104
|
metadata: {}
|
@@ -133,5 +121,7 @@ rubyforge_project:
|
|
133
121
|
rubygems_version: 2.0.0.rc.2
|
134
122
|
signing_key:
|
135
123
|
specification_version: 4
|
136
|
-
summary: '
|
124
|
+
summary: 'Opt in to use #attributes= and ActiveModel::Dirty to filter changes to certain
|
125
|
+
keys, to log change requests, ant to log changes to any protected record. Built
|
126
|
+
modularly so you can use the pieces independently if you like.'
|
137
127
|
test_files: []
|