protected_record 0.0.5 → 0.1.0
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/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: []
|