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 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