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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f77ce95c22273bab1bf96d5c3955ec8c0866ea72
4
- data.tar.gz: cc5c1b24cda6552940a9b86a7fa466f7a56519ee
3
+ metadata.gz: 3b07d6ebf3ed0d4992e9ee6918d5abbea15ce1a2
4
+ data.tar.gz: 20bac695f688e80e68e0a286d687a51b97411ff3
5
5
  SHA512:
6
- metadata.gz: c65da5f7063befa647fbd49a7ee8d6e13d582d79dbb74d3d760f264e0ec96c8f4022988f0bfc5709a7ec985443454fcacdddfea1675cd739e2f1d9e10ddfc6dd
7
- data.tar.gz: 0bc2f938d78f5a4cd364c07082ed77da4a1504f15d361161c4c104ced43e5d1a508949ca2c64b0876f46d68d5b1c61bfdb40ba3bdcc865b9d20e3c2f0894b98e
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::ChangeRequest::Changer
23
- include ProtectedRecord::ChangeLog::Changer
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
- include ProtectedRecord::ChangeRequest::Changeling
30
- include ProtectedRecord::ChangeLog::Changeling
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::UseCase::Update.new({
67
+ ready = ProtectedRecord::Update.new({
67
68
  user: current_user,
68
69
  params: record_params,
69
70
  protected_record: @record,
@@ -0,0 +1,8 @@
1
+ module ProtectedRecord
2
+ module Record
3
+ def self.included(base)
4
+ base.send :include, ProtectedRecord::ChangeLog::Changer
5
+ base.send :include, ProtectedRecord::ChangeRequest::Changer
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ module ProtectedRecord
2
+ class Update < ProtectedRecord::UseCase::Update; end
3
+ end
@@ -1,7 +1,8 @@
1
1
  module ProtectedRecord
2
2
  module UseCase
3
3
  module ChangeFilter
4
- class Create < PayDirt::Base
4
+ class Create
5
+ include PayDirt::UseCase
5
6
  def initialize(options)
6
7
  load_options(:protected_record, options)
7
8
  validate_state
@@ -3,7 +3,8 @@ require "json"
3
3
  module ProtectedRecord
4
4
  module UseCase
5
5
  module ChangeLog
6
- class Create < PayDirt::Base
6
+ class Create
7
+ include PayDirt::UseCase
7
8
  def initialize(options)
8
9
  options = {
9
10
  record_class: ::ProtectedRecord::ChangeLog::Record
@@ -1,7 +1,8 @@
1
1
  module ProtectedRecord
2
2
  module UseCase
3
3
  module ChangeRequest
4
- class Create < PayDirt::Base
4
+ class Create
5
+ include PayDirt::UseCase
5
6
  def initialize(options)
6
7
  options = {
7
8
  record_class: ::ProtectedRecord::ChangeRequest::Record
@@ -1,6 +1,7 @@
1
1
  module ProtectedRecord
2
2
  module UseCase
3
- class Update < PayDirt::Base
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(data: { updated: @protected_record }, success: true)
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: { remaining_changes: @protected_record.changes },
25
- success: false
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
- # We allow any changes on creation
35
- unless @protected_record.id_was.nil?
36
- request_result = @change_request.new({
37
- protected_keys: @protected_keys,
38
- protected_record: @protected_record,
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
- if request_result.successful?
43
- revert_protected_attributes ||
44
- save_protected_record
45
- end
44
+ if request_result.successful?
45
+ revert_protected_attributes ||
46
+ save_protected_record
46
47
  end
47
48
  end
48
49
 
@@ -0,0 +1,8 @@
1
+ module ProtectedRecord
2
+ module User
3
+ def self.included(base)
4
+ base.send :include, ProtectedRecord::ChangeLog::Changer
5
+ base.send :include, ProtectedRecord::ChangeRequest::Changer
6
+ end
7
+ end
8
+ end
@@ -1,3 +1,3 @@
1
1
  module ProtectedRecord
2
- VERSION = "0.0.5"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -1,3 +1,12 @@
1
- Dir.glob(File.join(File.dirname(__FILE__), '/**/*.rb')) do |c|
2
- require(c)
3
- end
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'
@@ -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
- Filters changes & logs changes to protected records.
13
- Creates change requests when changes are attempted on protected attrs
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
- s.add_runtime_dependency "activerecord"
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"
@@ -1,8 +1,8 @@
1
1
  require "minitest_helper"
2
2
 
3
- describe ProtectedRecord::UseCase::Update do
3
+ describe ProtectedRecord::Update do
4
4
  before do
5
- @subject = ProtectedRecord::UseCase::Update
5
+ @subject = ProtectedRecord::Update
6
6
 
7
7
  @params = { params: {
8
8
  knowledge: "bad",
@@ -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.5
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: '0'
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: '0'
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 Filters changes & logs changes to protected
84
- records.\n Creates change requests when changes are attempted
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/use_case.rb
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: []
@@ -1,5 +0,0 @@
1
- module ProtectedRecord
2
- module UseCase
3
- require "pay_dirt"
4
- end
5
- end