can_has_state 0.3.2 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
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: