can_has_state 0.3.2 → 0.5.2

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,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- NDJjMTQyY2ViZWJmYjJkYmI3NjYwYmQ5MDc2ZjhiNjhjMmM1M2NlZA==
5
- data.tar.gz: !binary |-
6
- ZTcwMDBiMDE1NWI0ZDM3MDAzNTE4ZTI1ZWU5MTlmNmE3ZDRlYjQwMg==
2
+ SHA256:
3
+ metadata.gz: 5d365502c2589118326d281c7cedd12cb327bace1baee85087359ece2e92c893
4
+ data.tar.gz: f6a28a286f71893b3fdfc005682c7111ac03c463877da310e807deb69eab110e
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- NzQxYzdjYTIxNjhhN2NlMmE2YzkxYzJhOWRjN2U3ODY4ODI5NDVmYTE5OGI0
10
- MGU0YTMwODNhOWQwMTdiNDAwNGU3N2FmZTZlNjI4NzRlODhmZTdlMWU1YTI5
11
- MWVhODc1NWEzZTJkYmIwMTQxZTYwZjllMTc5YjdmYTRjZjNmODI=
12
- data.tar.gz: !binary |-
13
- ODZmOWI2MzdlN2NiMGRmMmQwMjQyYTA1Y2RhN2Q4ZjNlYTQ2Y2NlMmUyNTdm
14
- NmViOGYyNDE2YjkyODI2Y2RiYTZjMDA5NTU1NzY3YTFlODE4Yzg2MjlhYTQ2
15
- MDViOTZiYjBmNDM5ZGQ3ZWNkZmNjOTdlNjkwNDU4ODYzNDUwMjQ=
6
+ metadata.gz: f6d0928cf94853df33a935e1635db3d1468dfda8394df71c7b518282eb4f80e67c86fcc9e3c79a844c953ce6d86eb274057f98dc70d566eb9b4c87a8bb5f6ffe
7
+ data.tar.gz: 29c8463d69deec0b205928e20c9a6c6a2b86e7e154f9b2b871d87139f637cf889806fb11e9f4cef6272013dc5b5672077b6e4385ceb9d4065605ffda2432faf8
@@ -1,4 +1,4 @@
1
- Copyright 2012 thomas morgan
1
+ Copyright 2012-2020 thomas morgan
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -253,4 +253,4 @@ because the initial state value changed from nil to the initial state.
253
253
 
254
254
  ## Compatibility ##
255
255
 
256
- Tested with Ruby 1.9 and ActiveSupport and ActiveModel 4.0.
256
+ Tested with Ruby 2.3-2.6+ and ActiveSupport and ActiveModel 5.2-6.1+.
@@ -5,4 +5,7 @@ require 'active_model'
5
5
  require "can_has_state/#{f}"
6
6
  end
7
7
 
8
+ # require 'active_support/i18n'
9
+ I18n.load_path << File.dirname(__FILE__) + '/can_has_state/locale/en.yml'
10
+
8
11
  require 'can_has_state/railtie' if defined?(Rails)
@@ -8,13 +8,13 @@ module CanHasState
8
8
  @column = column_name.to_sym
9
9
  @states = {}
10
10
  @triggers = []
11
- instance_eval &block
11
+ instance_eval(&block)
12
12
  @initial_state ||= @states.keys.first
13
13
  end
14
14
 
15
15
 
16
16
  def extend_machine(&block)
17
- instance_eval &block
17
+ instance_eval(&block)
18
18
  end
19
19
 
20
20
 
@@ -28,7 +28,7 @@ module CanHasState
28
28
 
29
29
  # TODO: turn even guards into types of triggers ... then support :guard as a trigger param
30
30
  guards = []
31
- message = "has invalid transition from %{from} to %{to}"
31
+ message = :invalid_transition
32
32
  # TODO: differentiate messages for :from errors vs. :guard errors
33
33
 
34
34
  options.each do |key, val|
@@ -15,7 +15,7 @@ module CanHasState
15
15
  attr_reader(attr) unless respond_to?(attr)
16
16
  has_writer = respond_to?("#{attr}=")
17
17
  define_method "#{attr}=" do |val|
18
- send("#{attr}_will_change!") unless val == instance_variable_get("@#{attr}")
18
+ send("#{attr}_will_change!") unless val == send(attr)
19
19
  has_writer ? super(val) : instance_variable_set("@#{attr}", val)
20
20
  changed_attributes.delete(attr) if attribute_was(attr) == send(attr)
21
21
  end
@@ -0,0 +1,5 @@
1
+ en:
2
+ errors:
3
+ messages:
4
+ invalid_state: "is not in a known state"
5
+ invalid_transition: "has an invalid transition from %{from} to %{to}"
@@ -15,9 +15,10 @@ module CanHasState
15
15
  end
16
16
 
17
17
  def extend_state_machine(column, &block)
18
- sm = state_machines.detect{|(col, stm)| col == column}
18
+ sm = state_machines.detect{|(col, _)| col == column}
19
+ # |(col, stm)|
19
20
  raise(ArgumentError, "Unknown state machine #{column}") unless sm
20
- sm[1].extend_machine &block
21
+ sm[1].extend_machine(&block)
21
22
  sm
22
23
  end
23
24
 
@@ -70,7 +71,11 @@ module CanHasState
70
71
  # clear record of called triggers
71
72
  @triggers_called[column] = nil
72
73
 
73
- from, to = send("#{column}_was"), send(column)
74
+ if respond_to?("#{column}_before_last_save") # rails 5.1+
75
+ from, to = send("#{column}_before_last_save"), send(column)
76
+ else
77
+ from, to = send("#{column}_was"), send(column)
78
+ end
74
79
  next if from == to
75
80
  sm.trigger(self, from, to, :deferred)
76
81
  end
@@ -82,22 +87,23 @@ module CanHasState
82
87
  from, to = send("#{column}_was"), send(column)
83
88
  next if from == to
84
89
  if !sm.known?(to)
85
- err << [column, "is not in a known state"]
90
+ err << [column, :invalid_state]
86
91
  elsif !sm.allow?(self, to) #state_machine_allow?(column, to)
87
- err << [column, sm.message(to) % {:from=>from, :to=>to}]
92
+ err << [column, sm.message(to), {from: from, to: to}]
88
93
  end
89
94
  end
90
95
  err
91
96
  end
92
97
 
93
98
  def can_has_valid_state_machines
94
- can_has_state_errors.each do |(column, msg)|
95
- errors.add column, msg
99
+ can_has_state_errors.each do |(column, msg, opts)|
100
+ errors.add column, msg, opts||{}
96
101
  end
97
102
  end
98
103
 
99
104
  def state_machine_allow?(column, to)
100
- sm = state_machines.detect{|(col, stm)| col == column}
105
+ sm = state_machines.detect{|(col, _)| col == column}
106
+ # |(col, stm)|
101
107
  raise("Unknown state machine #{column}") unless sm
102
108
  sm[1].allow?(self, to)
103
109
  end
@@ -1,3 +1,3 @@
1
1
  module CanHasState
2
- VERSION = '0.3.2'
2
+ VERSION = '0.5.2'
3
3
  end
@@ -24,8 +24,8 @@ class Account
24
24
 
25
25
  def fake_persist
26
26
  if valid?
27
- # just reset dirty tracking and pretend all is good
28
- changed_attributes.clear
27
+ # reset dirty tracking as if we had persisted
28
+ changes_applied
29
29
  true
30
30
  end
31
31
  end
@@ -70,7 +70,7 @@ class UserPreState2
70
70
  end
71
71
  end
72
72
 
73
- class CanHasStateTest < MiniTest::Unit::TestCase #Minitest::Test
73
+ class CanHasStateTest < Minitest::Test
74
74
 
75
75
  def test_builder_simple
76
76
  refute UserBare.respond_to?(:state_machine)
@@ -224,7 +224,7 @@ class CanHasStateTest < MiniTest::Unit::TestCase #Minitest::Test
224
224
 
225
225
  a.account_state = 'active'
226
226
  a.valid?
227
- assert_match /invalid transition/, a.errors.to_a.first
227
+ assert_match(/invalid transition/, a.errors.to_a.first)
228
228
 
229
229
  a.account_state = 'inactive'
230
230
  assert a.valid?, "Errors: #{a.errors.to_a}"
@@ -232,7 +232,7 @@ class CanHasStateTest < MiniTest::Unit::TestCase #Minitest::Test
232
232
 
233
233
  a.account_state = 'special'
234
234
  a.valid?
235
- assert_match /invalid transition/, a.errors.to_a.first
235
+ assert_match(/invalid transition/, a.errors.to_a.first)
236
236
 
237
237
  a.allow_special = true
238
238
  assert a.valid?, "Errors: #{a.errors.to_a}"
@@ -1,4 +1,6 @@
1
1
  require 'minitest/autorun'
2
- require 'turn'
2
+
3
+ require 'minitest/reporters'
4
+ Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
3
5
 
4
6
  require 'can_has_state'
metadata CHANGED
@@ -1,85 +1,66 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: can_has_state
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - thomas morgan
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-13 00:00:00.000000000 Z
11
+ date: 2020-12-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '4'
20
- - - <
19
+ version: '5.2'
20
+ - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '5.1'
22
+ version: '6.2'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - ! '>='
27
+ - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: '4'
30
- - - <
29
+ version: '5.2'
30
+ - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '5.1'
33
- - !ruby/object:Gem::Dependency
34
- name: activesupport
35
- requirement: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - ! '>='
38
- - !ruby/object:Gem::Version
39
- version: '4'
40
- - - <
41
- - !ruby/object:Gem::Version
42
- version: '5.1'
43
- type: :runtime
44
- prerelease: false
45
- version_requirements: !ruby/object:Gem::Requirement
46
- requirements:
47
- - - ! '>='
48
- - !ruby/object:Gem::Version
49
- version: '4'
50
- - - <
51
- - !ruby/object:Gem::Version
52
- version: '5.1'
32
+ version: '6.2'
53
33
  - !ruby/object:Gem::Dependency
54
34
  name: minitest
55
35
  requirement: !ruby/object:Gem::Requirement
56
36
  requirements:
57
- - - ~>
37
+ - - ">="
58
38
  - !ruby/object:Gem::Version
59
- version: '4.2'
39
+ version: '0'
60
40
  type: :development
61
41
  prerelease: false
62
42
  version_requirements: !ruby/object:Gem::Requirement
63
43
  requirements:
64
- - - ~>
44
+ - - ">="
65
45
  - !ruby/object:Gem::Version
66
- version: '4.2'
46
+ version: '0'
67
47
  - !ruby/object:Gem::Dependency
68
- name: turn
48
+ name: minitest-reporters
69
49
  requirement: !ruby/object:Gem::Requirement
70
50
  requirements:
71
- - - ! '>='
51
+ - - ">="
72
52
  - !ruby/object:Gem::Version
73
53
  version: '0'
74
54
  type: :development
75
55
  prerelease: false
76
56
  version_requirements: !ruby/object:Gem::Requirement
77
57
  requirements:
78
- - - ! '>='
58
+ - - ">="
79
59
  - !ruby/object:Gem::Version
80
60
  version: '0'
81
- description: ! "can_has_state is a simplified state machine gem. It relies on ActiveModel
82
- and\n should be compatible with any ActiveModel-compatible persistence layer."
61
+ description: |-
62
+ can_has_state is a simplified state machine gem. It relies on ActiveModel and
63
+ should be compatible with any ActiveModel-compatible persistence layer.
83
64
  email:
84
65
  - tm@iprog.com
85
66
  executables: []
@@ -92,6 +73,7 @@ files:
92
73
  - lib/can_has_state.rb
93
74
  - lib/can_has_state/definition.rb
94
75
  - lib/can_has_state/dirty_helper.rb
76
+ - lib/can_has_state/locale/en.yml
95
77
  - lib/can_has_state/machine.rb
96
78
  - lib/can_has_state/railtie.rb
97
79
  - lib/can_has_state/version.rb
@@ -101,24 +83,23 @@ files:
101
83
  homepage: https://github.com/zarqman/can_has_state
102
84
  licenses: []
103
85
  metadata: {}
104
- post_install_message:
86
+ post_install_message:
105
87
  rdoc_options: []
106
88
  require_paths:
107
89
  - lib
108
90
  required_ruby_version: !ruby/object:Gem::Requirement
109
91
  requirements:
110
- - - ! '>='
92
+ - - ">="
111
93
  - !ruby/object:Gem::Version
112
94
  version: '0'
113
95
  required_rubygems_version: !ruby/object:Gem::Requirement
114
96
  requirements:
115
- - - ! '>='
97
+ - - ">="
116
98
  - !ruby/object:Gem::Version
117
99
  version: '0'
118
100
  requirements: []
119
- rubyforge_project:
120
- rubygems_version: 2.4.6
121
- signing_key:
101
+ rubygems_version: 3.0.9
102
+ signing_key:
122
103
  specification_version: 4
123
104
  summary: Super simple state machine for ActiveModel
124
105
  test_files: