changey 0.0.0 → 1.0.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: 8760b67cbf8d8eec056fd80ead4b86c2133f31b4
4
- data.tar.gz: 1d2fc324b094b89e5d9863056a9434347f864922
3
+ metadata.gz: 1c069619a0b94fd4ff58b8a911a21a801e733ae8
4
+ data.tar.gz: 1be948578e766f84a8281c4941a8e03f2f36c95c
5
5
  SHA512:
6
- metadata.gz: 929f25e36a6ac959fc940a4f7d25d1141086aafbfd016e77939f1254e8d84cba9ec3f3e83241ceef860a9bd2c7253e1a6cbac9d44315f2ce695a347e6022a89b
7
- data.tar.gz: 16e86288fd1a978e8675f22aca134b14e47d67743909f14bac1a4bba9772a4e5d584a8b3c831a75c4a9c0faf5f6dc5b0eaa7da73ba64d5340b257d3710bcfb33
6
+ metadata.gz: 2694c30516924e1b32a4afcb724b245f5d49dfe33afb66b532e989b098d56c97f76e74059522779c0ebd0f494bd0b0f089177ec9d571ae1ae336ad128971abd8
7
+ data.tar.gz: 88cf3f20ed7fcbc4e7e8d6b5623e0cd0f5d86eee01ab2d4283e11700d322755855b88eae6cbc897357e282a5aaee6954c999a80c342fe3bcc16442296f4d33df
@@ -0,0 +1 @@
1
+ require 'changey/railtie' if defined?(Rails)
@@ -10,7 +10,6 @@ module Changey
10
10
 
11
11
  def self.load(load_into)
12
12
  load_into.extend ClassMethods
13
- load_into.send :include, InstanceMethods
14
13
  end
15
14
 
16
15
  module ClassMethods
@@ -18,7 +17,15 @@ module Changey
18
17
  @changey_tracks ||= []
19
18
  end
20
19
 
20
+ def reset_changey!
21
+ @changey_tracks = nil
22
+ end
23
+
21
24
  def when_attribute(attribute_name, options = {}, &block)
25
+ if self.changey_tracks.empty?
26
+ include InstanceMethods
27
+ end
28
+
22
29
  unless options.has_key?(:changes_from) || options.has_key?(:changes_to)
23
30
  raise MissingChangeValue, "Attribute #{attribute_name} must specify a 'changes_to' or a 'changes_from' value"
24
31
  end
@@ -57,14 +64,20 @@ module Changey
57
64
  end
58
65
  end
59
66
 
67
+ private def clear_changey_tracks
68
+ @changey_tracks_to_run = nil
69
+ end
70
+
60
71
  private def run_changey_callbacks(event)
61
- @changey_tracks_to_run.each do |track, (was, now)|
62
- callbacks = track.send(event.to_s.pluralize)
63
- callbacks.each do |callback|
64
- if callback.is_a?(Proc)
65
- instance_exec(was, now, &callback)
66
- elsif callback.is_a?(Symbol)
67
- send(callback)
72
+ if @changey_tracks_to_run
73
+ @changey_tracks_to_run.each do |track, (was, now)|
74
+ callbacks = track.send(event.to_s.pluralize)
75
+ callbacks.each do |callback|
76
+ if callback.is_a?(Proc)
77
+ instance_exec(was, now, &callback)
78
+ elsif callback.is_a?(Symbol)
79
+ send(callback)
80
+ end
68
81
  end
69
82
  end
70
83
  end
@@ -14,9 +14,11 @@ module Changey
14
14
  attr_accessor :after_saves
15
15
  attr_accessor :after_commits
16
16
 
17
- def initialize(attribute)
17
+ def initialize(attribute, direction = nil, expected_value = nil, expected_other_value = Nothing)
18
18
  @attribute = attribute
19
- @expected_other_value = Nothing
19
+ @direction = direction
20
+ @expected_value = expected_value
21
+ @expected_other_value = expected_other_value
20
22
  @validates = []
21
23
  @before_saves = []
22
24
  @after_saves = []
@@ -30,19 +32,19 @@ module Changey
30
32
  current_value = record.send(attribute)
31
33
 
32
34
  if expected_other_value != Nothing
33
- if direction == :from && previous_value == expected_value && current_value == expected_other_value
35
+ if direction == :from && matches?(previous_value, expected_value) && matches?(current_value, expected_other_value)
34
36
  return true
35
37
  end
36
38
 
37
- if direction == :to && current_value == expected_value && previous_value == expected_other_value
39
+ if direction == :to && matches?(current_value, expected_value) && matches?(previous_value, expected_other_value)
38
40
  return true
39
41
  end
40
42
  else
41
- if direction == :from && previous_value == expected_value
43
+ if direction == :from && matches?(previous_value, expected_value)
42
44
  return true
43
45
  end
44
46
 
45
- if direction == :to && current_value == expected_value
47
+ if direction == :to && matches?(current_value, expected_value)
46
48
  return true
47
49
  end
48
50
  end
@@ -50,5 +52,22 @@ module Changey
50
52
  return false
51
53
  end
52
54
 
55
+ private
56
+
57
+ def matches?(value, expectation)
58
+ case expectation
59
+ when Array
60
+ expectation.include?(value)
61
+ when Regexp
62
+ !!(expectation =~ value)
63
+ when Proc
64
+ expectation.call(value) == true
65
+ when :anything
66
+ true
67
+ else
68
+ value == expectation
69
+ end
70
+ end
71
+
53
72
  end
54
73
  end
@@ -1,3 +1,3 @@
1
1
  module Changey
2
- VERSION = '0.0.0'
2
+ VERSION = '1.0.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: changey
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Cooke
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-26 00:00:00.000000000 Z
11
+ date: 2016-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord