affairs_of_state 0.7.1 → 0.8.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
  SHA256:
3
- metadata.gz: 393e826c50c889d987390c00c48332b5f25b36dacc8977a4b6ae872b031507c0
4
- data.tar.gz: 268729f4f4e5d03616028ae9ad663e9333ec77be659c1eb17ff4ba78f9ea44f1
3
+ metadata.gz: b6e957966743ad1594fb59e99fe593d5caa5cb485e127aa32b6e22a4a3f2ae65
4
+ data.tar.gz: df9d8acf31cbca9d763b15cecd9fe1d3d0ef6425cd6c8022473225d6b67bc9fc
5
5
  SHA512:
6
- metadata.gz: b28c839c99db9cf1a7560766f46bda687825c23e6d17c2f20b1246d239990f26a450e5a9350c10f1ea191678b929ecf88c0a389be7620d13f37e26d3d02525eb
7
- data.tar.gz: 88a2b5f1cefe5ac0017eeaa9b2c2d480895b51f31497adf049a8ce54dbd3966f3c9e8f472d1b300e9d650c644ca1cb3b67063ddcbf7067e914e21c42d96a05f6
6
+ metadata.gz: c7c813fce85044e3b2c5b1cd7317445753ba29f27ec81bc77563bccab82ad4296beb031860eaecc1f2b8d261a6a63312a804af7f60d103da7b551a6e542c9d08
7
+ data.tar.gz: 4669e4abd461e51f2af767f021beed0d18c17eeb484cc41284d54b4895c009d3f6328c8fc125803d2c29bbcef5c29fcc1aeeedbe25e3f5b90dc3c8a856e492fb
@@ -10,18 +10,16 @@ Gem::Specification.new do |gem|
10
10
  gem.license = 'MIT'
11
11
 
12
12
  gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
13
- gem.files = `git ls-files`.split("\n")
13
+ gem.files = `git ls-files`.split("\n").reject { |f| f.match?(/gemfiles\/|\.github|\.gitignore|Gemfile\.lock|\.ruby_version|\.gitkeep/) }
14
14
  gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
15
15
  gem.name = "affairs_of_state"
16
16
  gem.require_paths = ["lib"]
17
17
  gem.version = AffairsOfState::VERSION
18
18
 
19
- gem.add_dependency "activerecord", "~> 6.0"
20
- gem.add_dependency "activesupport", "~> 6.0"
21
-
22
- gem.add_development_dependency "rspec", "~> 3.0"
23
- gem.add_development_dependency "sqlite3", "~> 1.4.0"
24
- gem.add_development_dependency "pry", "~> 0.12.0"
25
- gem.add_development_dependency "rake", "~> 12"
19
+ gem.add_dependency "activerecord", ">= 8.0"
20
+ gem.add_dependency "activesupport", ">= 8.0"
26
21
 
22
+ gem.add_development_dependency "rspec", ">= 3.0"
23
+ gem.add_development_dependency "sqlite3", ">= 1.4.0"
24
+ gem.add_development_dependency "rake", ">= 12"
27
25
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module AffairsOfState
3
- VERSION = "0.7.1"
3
+ VERSION = "0.8.0"
4
4
  end
@@ -2,13 +2,19 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  describe AffairsOfState do
5
+ def create_class(&block)
6
+ klass = Class.new(ActiveRecord::Base, &block)
7
+ klass.table_name = "pies"
8
+ klass
9
+ end
10
+
5
11
  describe "with a simple configuration" do
6
- class Pie < ActiveRecord::Base
7
- affairs_of_state :active, :inactive, :cancelled
12
+ subject do
13
+ create_class do
14
+ affairs_of_state :active, :inactive, :cancelled
15
+ end
8
16
  end
9
17
 
10
- subject { Pie }
11
-
12
18
  it "should validate the column is set" do
13
19
  expect(subject.new(status: nil)).to_not be_valid
14
20
  end
@@ -68,14 +74,12 @@ describe AffairsOfState do
68
74
  end
69
75
 
70
76
  describe "with a non-standard column name" do
71
- class Pie2 < ActiveRecord::Base
72
- self.table_name = "pies"
73
-
74
- affairs_of_state :active, :inactive, column: :super_status
77
+ subject do
78
+ create_class do
79
+ affairs_of_state :active, :inactive, column: :super_status
80
+ end
75
81
  end
76
82
 
77
- subject { Pie2 }
78
-
79
83
  it "should validate the column is set" do
80
84
  expect(subject.new(status: nil, super_status: "active")).to be_valid
81
85
  end
@@ -92,58 +96,50 @@ describe AffairsOfState do
92
96
  end
93
97
 
94
98
  describe "without validations" do
95
- class Pie3 < ActiveRecord::Base
96
- self.table_name = "pies"
97
-
98
- affairs_of_state :active, :inactive, allow_blank: true
99
+ subject do
100
+ create_class do
101
+ affairs_of_state :active, :inactive, allow_blank: true
102
+ end
99
103
  end
100
104
 
101
- subject { Pie3 }
102
-
103
105
  it "should validate the column is set" do
104
106
  expect(subject.new(status: nil)).to be_valid
105
107
  end
106
108
  end
107
109
 
108
110
  describe "with an array rather than *args" do
109
- class Pie4 < ActiveRecord::Base
110
- self.table_name = "pies"
111
-
112
- affairs_of_state [:on, :off]
111
+ subject do
112
+ create_class do
113
+ affairs_of_state [:on, :off]
114
+ end
113
115
  end
114
116
 
115
- subject { Pie4 }
116
-
117
117
  it "should work too if that's what floats your boat" do
118
118
  expect(subject.statuses).to eq(["on", "off"])
119
119
  end
120
120
  end
121
121
 
122
122
  describe "without the scopes" do
123
- class Pie5 < ActiveRecord::Base
124
- self.table_name = "pies"
125
-
126
- affairs_of_state :active, :inactive, scopes: false
123
+ subject do
124
+ create_class do
125
+ affairs_of_state :active, :inactive, scopes: false
126
+ end
127
127
  end
128
128
 
129
- subject { Pie5 }
130
-
131
129
  it "should not respond if the scopes are not needed" do
132
130
  expect(subject).to_not respond_to(:active)
133
131
  end
134
132
  end
135
133
 
136
134
  describe "with a conditional proc" do
137
- class Pie6 < ActiveRecord::Base
138
- self.table_name = "pies"
139
-
140
- affairs_of_state :active, :inactive, if: lambda{|p| p.is_going_to_validate }
135
+ subject do
136
+ create_class do
137
+ affairs_of_state :active, :inactive, if: lambda{|p| p.is_going_to_validate }
141
138
 
142
- attr_accessor :is_going_to_validate
139
+ attr_accessor :is_going_to_validate
140
+ end
143
141
  end
144
142
 
145
- subject { Pie6 }
146
-
147
143
  it "should enforce the validation if the :if param is true" do
148
144
  p = subject.new
149
145
  p.is_going_to_validate = true
@@ -160,20 +156,18 @@ describe AffairsOfState do
160
156
  end
161
157
 
162
158
  describe "with a conditional method name" do
163
- class Pie7 < ActiveRecord::Base
164
- self.table_name = "pies"
159
+ subject do
160
+ create_class do
161
+ affairs_of_state :active, :inactive, if: :validation_method?
165
162
 
166
- affairs_of_state :active, :inactive, if: :validation_method?
163
+ attr_accessor :is_going_to_validate
167
164
 
168
- attr_accessor :is_going_to_validate
169
-
170
- def validation_method?
171
- self.is_going_to_validate
165
+ def validation_method?
166
+ self.is_going_to_validate
167
+ end
172
168
  end
173
169
  end
174
170
 
175
- subject { Pie7 }
176
-
177
171
  it "should enforce the validation if the :if param is true" do
178
172
  p = subject.new
179
173
  p.is_going_to_validate = true
@@ -191,20 +185,18 @@ describe AffairsOfState do
191
185
 
192
186
  describe "invalid status name" do
193
187
  it "should raise a good warning" do
194
- expect(->{ class Pie8 < ActiveRecord::Base ; affairs_of_state :new ; end }).to raise_error(ArgumentError, "Affairs of State: 'new' is not a valid status")
188
+ expect{ class Pie8 < ActiveRecord::Base ; affairs_of_state :new ; end }.to raise_error(ArgumentError, "Affairs of State: 'new' is not a valid status")
195
189
  end
196
190
  end
197
191
 
198
192
  describe "multiple invocations" do
199
- class Pie9 < ActiveRecord::Base
200
- self.table_name = "pies"
201
-
202
- affairs_of_state :active, :inactive
203
- affairs_of_state :moderated, :unmoderated, column: :super_status
193
+ subject do
194
+ create_class do
195
+ affairs_of_state :active, :inactive
196
+ affairs_of_state :moderated, :unmoderated, column: :super_status
197
+ end
204
198
  end
205
199
 
206
- subject { Pie9 }
207
-
208
200
  it "declares two status columns" do
209
201
  p = subject.new
210
202
  p.inactive!
@@ -215,9 +207,7 @@ describe AffairsOfState do
215
207
 
216
208
  it "raises if called twice on the same column" do
217
209
  expect {
218
- class Pie10 < ActiveRecord::Base
219
- self.table_name = "pies"
220
-
210
+ create_class do
221
211
  affairs_of_state :active, :inactive
222
212
  affairs_of_state :moderated, :unmoderated
223
213
  end
@@ -226,9 +216,7 @@ describe AffairsOfState do
226
216
 
227
217
  it "raises if called twice with the same status in both" do
228
218
  expect {
229
- class Pie11 < ActiveRecord::Base
230
- self.table_name = "pies"
231
-
219
+ create_class do
232
220
  affairs_of_state :active, :inactive
233
221
  affairs_of_state :dormant, :active, column: :super_status
234
222
  end
@@ -237,9 +225,7 @@ describe AffairsOfState do
237
225
 
238
226
  it "raises if collision between prefixes" do
239
227
  expect {
240
- class Pie12 < ActiveRecord::Base
241
- self.table_name = "pies"
242
-
228
+ create_class do
243
229
  affairs_of_state :admin_active, :admin_inactive
244
230
  affairs_of_state :dormant, :active, column: :super_status, prefix: :admin
245
231
  end
@@ -270,16 +256,14 @@ describe AffairsOfState do
270
256
  end
271
257
 
272
258
  describe "multiple invocations with prefix" do
273
- class Pie13 < ActiveRecord::Base
274
- self.table_name = "pies"
275
-
276
- affairs_of_state :active, :inactive
277
- affairs_of_state :moderated, :unmoderated, column: :super_status
278
- affairs_of_state :positive, :mixed, :negative, column: :sentiment, prefix: :sentiment
259
+ subject do
260
+ create_class do
261
+ affairs_of_state :active, :inactive
262
+ affairs_of_state :moderated, :unmoderated, column: :super_status
263
+ affairs_of_state :positive, :mixed, :negative, column: :sentiment, prefix: :sentiment
264
+ end
279
265
  end
280
266
 
281
- subject { Pie13 }
282
-
283
267
  it "returns the statuses" do
284
268
  expect(subject.statuses(:sentiment)).to eq([ "positive", "mixed", "negative" ])
285
269
  end
@@ -300,4 +284,25 @@ describe AffairsOfState do
300
284
  expect(subject.sentiment_positive).to eq([p])
301
285
  end
302
286
  end
287
+
288
+ describe "with mixed prefix and column" do
289
+ subject do
290
+ create_class do
291
+ affairs_of_state :uploaded, :pending, :blank, column: :avatar_status, prefix: :avatar
292
+ end
293
+ end
294
+
295
+ it "adds the expected methods" do
296
+ p = subject.create! avatar_status: "uploaded"
297
+ expect(p).to be_avatar_uploaded
298
+ expect(p).to_not be_avatar_pending
299
+ expect(p).to_not be_avatar_blank
300
+ p.avatar_pending!
301
+ expect(p).to be_avatar_pending
302
+ expect(p).to_not be_avatar_uploaded
303
+ expect(p).to_not be_avatar_blank
304
+ p.avatar_blank!
305
+ expect(p).to be_avatar_blank
306
+ end
307
+ end
303
308
  end
data/spec/spec_helper.rb CHANGED
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
  require "affairs_of_state"
3
3
 
4
- require "pry"
5
4
  require "sqlite3"
6
5
 
7
6
  RSpec.configure do |config|
8
7
  config.run_all_when_everything_filtered = true
9
8
  config.filter_run_when_matching :focus
9
+ # config.raise_errors_for_deprecations!
10
10
  end
11
11
 
12
12
  # Create an AR model to test with
@@ -22,4 +22,5 @@ ActiveRecord::Base.connection.create_table(:pies) do |t|
22
22
  t.string :status
23
23
  t.string :super_status
24
24
  t.string :sentiment
25
+ t.string :avatar_status
25
26
  end
metadata CHANGED
@@ -1,97 +1,82 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: affairs_of_state
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin McPhillips
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2021-12-13 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: activerecord
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
17
- - - "~>"
16
+ - - ">="
18
17
  - !ruby/object:Gem::Version
19
- version: '6.0'
18
+ version: '8.0'
20
19
  type: :runtime
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
- - - "~>"
23
+ - - ">="
25
24
  - !ruby/object:Gem::Version
26
- version: '6.0'
25
+ version: '8.0'
27
26
  - !ruby/object:Gem::Dependency
28
27
  name: activesupport
29
28
  requirement: !ruby/object:Gem::Requirement
30
29
  requirements:
31
- - - "~>"
30
+ - - ">="
32
31
  - !ruby/object:Gem::Version
33
- version: '6.0'
32
+ version: '8.0'
34
33
  type: :runtime
35
34
  prerelease: false
36
35
  version_requirements: !ruby/object:Gem::Requirement
37
36
  requirements:
38
- - - "~>"
37
+ - - ">="
39
38
  - !ruby/object:Gem::Version
40
- version: '6.0'
39
+ version: '8.0'
41
40
  - !ruby/object:Gem::Dependency
42
41
  name: rspec
43
42
  requirement: !ruby/object:Gem::Requirement
44
43
  requirements:
45
- - - "~>"
44
+ - - ">="
46
45
  - !ruby/object:Gem::Version
47
46
  version: '3.0'
48
47
  type: :development
49
48
  prerelease: false
50
49
  version_requirements: !ruby/object:Gem::Requirement
51
50
  requirements:
52
- - - "~>"
51
+ - - ">="
53
52
  - !ruby/object:Gem::Version
54
53
  version: '3.0'
55
54
  - !ruby/object:Gem::Dependency
56
55
  name: sqlite3
57
56
  requirement: !ruby/object:Gem::Requirement
58
57
  requirements:
59
- - - "~>"
58
+ - - ">="
60
59
  - !ruby/object:Gem::Version
61
60
  version: 1.4.0
62
61
  type: :development
63
62
  prerelease: false
64
63
  version_requirements: !ruby/object:Gem::Requirement
65
64
  requirements:
66
- - - "~>"
65
+ - - ">="
67
66
  - !ruby/object:Gem::Version
68
67
  version: 1.4.0
69
- - !ruby/object:Gem::Dependency
70
- name: pry
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: 0.12.0
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: 0.12.0
83
68
  - !ruby/object:Gem::Dependency
84
69
  name: rake
85
70
  requirement: !ruby/object:Gem::Requirement
86
71
  requirements:
87
- - - "~>"
72
+ - - ">="
88
73
  - !ruby/object:Gem::Version
89
74
  version: '12'
90
75
  type: :development
91
76
  prerelease: false
92
77
  version_requirements: !ruby/object:Gem::Requirement
93
78
  requirements:
94
- - - "~>"
79
+ - - ">="
95
80
  - !ruby/object:Gem::Version
96
81
  version: '12'
97
82
  description: Add a simple state to a gem, without all the hassle of a complex state
@@ -102,17 +87,12 @@ executables: []
102
87
  extensions: []
103
88
  extra_rdoc_files: []
104
89
  files:
105
- - ".github/workflows/ci.yml"
106
- - ".gitignore"
107
90
  - ".rspec"
108
91
  - Gemfile
109
92
  - LICENSE
110
93
  - README.md
111
94
  - Rakefile
112
95
  - affairs_of_state.gemspec
113
- - gemfiles/activerecord-6.0.gemfile
114
- - gemfiles/activerecord-6.1.gemfile
115
- - gemfiles/activerecord-latest.gemfile
116
96
  - lib/affairs_of_state.rb
117
97
  - lib/affairs_of_state/active_record_extension.rb
118
98
  - lib/affairs_of_state/config.rb
@@ -125,7 +105,6 @@ homepage: http://github.com/kmcphillips/affairs_of_state
125
105
  licenses:
126
106
  - MIT
127
107
  metadata: {}
128
- post_install_message:
129
108
  rdoc_options: []
130
109
  require_paths:
131
110
  - lib
@@ -140,10 +119,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
140
119
  - !ruby/object:Gem::Version
141
120
  version: '0'
142
121
  requirements: []
143
- rubygems_version: 3.2.22
144
- signing_key:
122
+ rubygems_version: 3.7.2
145
123
  specification_version: 4
146
124
  summary: You have an Active Record model. It nees to have multiple states, but not
147
125
  complex rules. This gem gives you validation, easy check and change methods, and
148
126
  a single configuration line.
149
- test_files: []
127
+ test_files:
128
+ - spec/affairs_of_state_spec.rb
129
+ - spec/config_spec.rb
130
+ - spec/db/.gitkeep
131
+ - spec/spec_helper.rb
@@ -1,25 +0,0 @@
1
- name: CI
2
-
3
- on: [ push, pull_request ]
4
-
5
- jobs:
6
- test:
7
- strategy:
8
- fail-fast: false
9
- matrix:
10
- gemfile:
11
- - "activerecord-6.0.gemfile"
12
- - "activerecord-6.1.gemfile"
13
- - "activerecord-latest.gemfile"
14
- runs-on: ubuntu-latest
15
- env:
16
- BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.gemfile }}
17
- steps:
18
- - uses: actions/checkout@v2
19
- - uses: ruby/setup-ruby@v1
20
- with:
21
- ruby-version: 3.0.2
22
- bundler-cache: true # runs 'bundle install' and caches installed gems automatically
23
- - name: Run tests
24
- run: |
25
- bundle exec rspec --format doc
data/.gitignore DELETED
@@ -1,19 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
18
- spec/db/test.sqlite3
19
-
@@ -1,5 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec path: '..'
4
-
5
- gem 'activerecord', '~> 6.0'
@@ -1,5 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec path: '..'
4
-
5
- gem 'activerecord', '~> 6.1'
@@ -1,5 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec path: '..'
4
-
5
- gem 'activerecord'