abbish_sequel_plugins 0.0.2 → 0.0.3

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: a1790d71345a55e92e5849b0d435d7417003c933
4
- data.tar.gz: b0f64c2ab21ea30154a6479a75b2648d663d25d4
3
+ metadata.gz: 12695cf6acd408a1b30f5f36c847a2c1b1437fa7
4
+ data.tar.gz: a4ea39d1dbc60656040140eb3f0d6eb31086c419
5
5
  SHA512:
6
- metadata.gz: 2da78bf6a3cd0682ec509d7aeca335568cf138872d162e1e0664665d8af4f3f5cc42e502a5c50804948a0309cfc566c81b436a4eb73d40440938826a8c9214e3
7
- data.tar.gz: 8d41ac68fc43f2d33d443987b610098ffff8b2b118a967d067ecc2a53c7e64d065d8d6d0cb5ca2e1f00068aa74a52a8d60ca5bb8df1a0a2cf10583f2935e2601
6
+ metadata.gz: 0d097148453c3ab92a8072e47899204b8eb8980f019fd49d10fde137b8f56746cbda40464ee7ebfcdd11c3d49a6461ccceb3a4cf2eb20251e9c91eced09e5895
7
+ data.tar.gz: 44e448b1d7483b1d62736cd4fbac2f3a9827cf68fa9c241e5b48de58812ba1c170116ce49e52c6c31b331eebe1f10f0b21058c04722e5d7deb2522673e660b48
@@ -0,0 +1,12 @@
1
+ # coding: utf-8
2
+ require File.dirname(__FILE__) + '/model/record_version'
3
+ require File.dirname(__FILE__) + '/model/record_protection'
4
+ require File.dirname(__FILE__) + '/model/record_timestamp'
5
+
6
+ module Abbish
7
+ module Sequel
8
+ module Plugins
9
+ Version = '0.0.3'
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,58 @@
1
+ module Abbish
2
+ module Sequel
3
+ module Plugins
4
+ module Model
5
+
6
+ RecordProtectedError = Class.new(::StandardError)
7
+
8
+ module RecordProtection
9
+ def self.configure(model, options = {})
10
+ options = {
11
+ :enabled => true,
12
+ :column_protected => :record_protected,
13
+ :raise_protected_message => 'Cannot destroy protected record',
14
+ }.merge(options)
15
+
16
+ model.instance_eval do
17
+ self.record_protection_options = options
18
+ end
19
+ end
20
+
21
+ module ClassMethods
22
+ def record_protection_options=(options)
23
+ @record_protection_options = options
24
+ end
25
+
26
+ def record_protection_options
27
+ @record_protection_options
28
+ end
29
+ end
30
+
31
+ module InstanceMethods
32
+
33
+ def record_protected?
34
+ self.class.record_protection_options[:enabled] ? send("#{self.class.record_protection_options[:column_protected]}") == 1 : false
35
+ end
36
+
37
+ def set_record_protected
38
+ send("#{self.class.record_protection_options[:column_protected]}=", 1) if self.class.record_protection_options[:enabled]
39
+ end
40
+
41
+ def set_record_protected!
42
+ if self.class.record_protection_options[:enabled]
43
+ set_record_protected
44
+ self.save
45
+ end
46
+ end
47
+
48
+ def before_destroy
49
+ super
50
+ raise RecordProtectedError, self.class.record_protection_options[:raise_protected_message] if record_protected?
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+
@@ -0,0 +1,56 @@
1
+ module Abbish
2
+ module Sequel
3
+ module Plugins
4
+ module Model
5
+ module RecordTimestamp
6
+ def self.configure(model, options = {})
7
+ options = {
8
+ :enabled => true,
9
+ :column_created_time => :record_created_time,
10
+ :column_updated_time => :record_updated_time,
11
+ }.merge(options)
12
+
13
+ model.instance_eval do
14
+ self.record_timestamp_options = options
15
+ end
16
+ end
17
+
18
+ module ClassMethods
19
+ def record_timestamp_options=(options)
20
+ @record_timestamp_options = options
21
+ end
22
+
23
+ def record_timestamp_options
24
+ @record_timestamp_options
25
+ end
26
+ end
27
+
28
+ module InstanceMethods
29
+
30
+ def before_create
31
+ super
32
+ self.record_created_time = _get_time if self.class.record_timestamp_options[:enabled]
33
+ end
34
+
35
+ def before_update
36
+ super
37
+ if self.modified?
38
+ self.record_updated_time = _get_time if self.class.record_timestamp_options[:enabled]
39
+ end
40
+
41
+
42
+ end
43
+
44
+ private
45
+
46
+ def _get_time
47
+ return Time.now
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+
56
+
@@ -0,0 +1,53 @@
1
+ module Abbish
2
+ module Sequel
3
+ module Plugins
4
+ module Model
5
+ module RecordVersion
6
+ def self.configure(model, options = {})
7
+ options = {
8
+ :enabled => true,
9
+ :column_version => :record_version,
10
+ }.merge(options)
11
+
12
+ model.instance_eval do
13
+ self.record_version_options = options
14
+ end
15
+ end
16
+
17
+ module ClassMethods
18
+ def record_version_options=(options)
19
+ @record_version_options = options
20
+ end
21
+
22
+ def record_version_options
23
+ @record_version_options
24
+ end
25
+ end
26
+
27
+ module InstanceMethods
28
+
29
+ def before_create
30
+ super
31
+ self.record_version = _get_version if self.class.record_version_options[:enabled]
32
+
33
+ end
34
+
35
+ def before_update
36
+ super
37
+ if self.modified?
38
+ self.record_version = _get_version if self.class.record_version_options[:enabled]
39
+ end
40
+ end
41
+
42
+ private
43
+
44
+ def _get_version
45
+ return Digest::MD5.hexdigest Time.now.to_f.to_s
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: abbish_sequel_plugins
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - abbish
@@ -10,13 +10,17 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2015-06-21 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: Frequently used plugins for Sequel
13
+ description: For more detail please visit https://github.com/abbish/abbish_sequel_plugins
14
14
  email:
15
15
  - me@abbish.com
16
16
  executables: []
17
17
  extensions: []
18
18
  extra_rdoc_files: []
19
- files: []
19
+ files:
20
+ - lib/abbish_sequel_plugins.rb
21
+ - lib/model/record_protection.rb
22
+ - lib/model/record_timestamp.rb
23
+ - lib/model/record_version.rb
20
24
  homepage: https://github.com/abbish/abbish-sequel-plugins
21
25
  licenses:
22
26
  - MIT