act_with_flags 0.2.4 → 3.0.1

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.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +9 -3
  3. data/.ruby-gemset +1 -1
  4. data/.ruby-version +1 -1
  5. data/.watchr +29 -16
  6. data/Appraisals +10 -6
  7. data/Gemfile +7 -6
  8. data/Gemfile.lock +124 -104
  9. data/MIT-LICENSE +1 -1
  10. data/README.md +30 -3
  11. data/Rakefile +5 -5
  12. data/TODO +21 -0
  13. data/act_with_flags.gemspec +20 -20
  14. data/gemfiles/rails_6.0.gemfile +2 -1
  15. data/gemfiles/rails_7.0.gemfile +15 -0
  16. data/lib/act_with_flags/admin.rb +5 -48
  17. data/lib/act_with_flags/clear.rb +30 -0
  18. data/lib/act_with_flags/define.rb +6 -35
  19. data/lib/act_with_flags/flags.rb +67 -0
  20. data/lib/act_with_flags/print.rb +21 -27
  21. data/lib/act_with_flags/utils.rb +25 -13
  22. data/lib/act_with_flags/version.rb +8 -7
  23. data/lib/act_with_flags.rb +14 -25
  24. data/test/any_all_none_test.rb +6 -9
  25. data/test/benchmark_test.rb +73 -0
  26. data/test/clear_test.rb +5 -7
  27. data/test/coding_check_add_test.rb +29 -0
  28. data/test/coding_coverage_test.rb +19 -0
  29. data/test/coding_mask2d_test.rb +25 -0
  30. data/test/coding_null_test.rb +29 -0
  31. data/test/coding_one_test.rb +26 -0
  32. data/test/coding_reset_test.rb +18 -0
  33. data/test/inheritance_any_test.rb +9 -33
  34. data/test/inheritance_test.rb +7 -10
  35. data/test/internal/app/controllers/orders_controller.rb +1 -3
  36. data/test/internal/app/models/order.rb +1 -5
  37. data/test/internal/config/routes.rb +1 -1
  38. data/test/internal/db/schema.rb +6 -7
  39. data/test/legacy_test.rb +8 -9
  40. data/test/mask_test.rb +6 -7
  41. data/test/null_test.rb +3 -5
  42. data/test/one_test.rb +7 -9
  43. data/test/origin_test.rb +7 -26
  44. data/test/origins_test.rb +57 -0
  45. data/test/remove_from_test.rb +3 -4
  46. data/test/test_helper.rb +8 -8
  47. metadata +21 -41
  48. data/.rubocop.yml +0 -9
  49. data/test/internal_benchmark_test.rb +0 -52
  50. data/test/internal_check_add_test.rb +0 -36
  51. data/test/internal_null_test.rb +0 -29
  52. data/test/internal_one_test.rb +0 -27
  53. data/test/reset_test.rb +0 -17
@@ -0,0 +1,25 @@
1
+ require "test_helper"
2
+
3
+ # There is an interference with Class B in another test: call it BB!
4
+ class BB < Order
5
+ add_to_flags x: 1
6
+ end
7
+
8
+ describe "mask2d" do
9
+ let(:admin) { BB.act_with_flags }
10
+
11
+ def setup
12
+ reset_order
13
+ Order.add_to_flags y: 2
14
+ end
15
+
16
+ it "is a non splitted mask" do
17
+ mask = admin.mask2d(:x)
18
+ assert_equal 1, mask.length
19
+ end
20
+
21
+ it "is a splitted mask" do
22
+ mask = admin.mask2d(:x, :y)
23
+ assert_equal 2, mask.length
24
+ end
25
+ end
@@ -0,0 +1,29 @@
1
+ require "test_helper"
2
+
3
+ describe "Internal Null" do
4
+ let(:admin) { Order.act_with_flags }
5
+
6
+ def setup
7
+ reset_order
8
+ Order.add_to_flags
9
+ end
10
+
11
+ it "respond to act_with_flags" do
12
+ assert Order.respond_to?(:act_with_flags)
13
+ refute_nil Order.act_with_flags
14
+ end
15
+
16
+ it "tests to_boolean" do
17
+ assert admin.to_boolean(true)
18
+ assert admin.to_boolean("true")
19
+ assert admin.to_boolean(1)
20
+ assert admin.to_boolean("1")
21
+ refute admin.to_boolean(false)
22
+ refute admin.to_boolean("false")
23
+ refute admin.to_boolean(0)
24
+ refute admin.to_boolean("0")
25
+ assert_raises { admin.to_boolean(nil) }
26
+ assert_raises { admin.to_boolean(2) }
27
+ assert_raises { admin.to_boolean("unknown") }
28
+ end
29
+ end
@@ -0,0 +1,26 @@
1
+ require "test_helper"
2
+
3
+ describe "Internal One Flag" do
4
+ let(:flag) { :blocked }
5
+ let(:admin) { Order.act_with_flags }
6
+ let(:order) { Order.new }
7
+
8
+ def setup
9
+ reset_order
10
+ Order.add_to_flags flag
11
+ end
12
+
13
+ it "test order.act_with_flags" do
14
+ refute_nil admin
15
+ assert_equal admin, order.class.act_with_flags
16
+ assert_equal admin, order.act_with_flags
17
+ assert_equal admin, Order.act_with_flags
18
+ end
19
+
20
+ it "checks definition of methods for flag" do
21
+ msg = "method '#{flag}' not defined"
22
+ assert order.respond_to?(flag.to_s), msg
23
+ assert order.respond_to?("#{flag}?"), msg
24
+ assert order.respond_to?("#{flag}="), msg
25
+ end
26
+ end
@@ -0,0 +1,18 @@
1
+ require "test_helper"
2
+
3
+ describe "Testing reset" do
4
+ let(:order) { Order.new }
5
+
6
+ def setup
7
+ reset_order
8
+ Order.add_to_flags :a
9
+ end
10
+
11
+ it "reset hard" do
12
+ empty = {}
13
+ refute_equal empty, Order.add_to_flags.locations
14
+
15
+ Order.act_with_flags&.reset
16
+ assert_equal empty, Order.add_to_flags.locations
17
+ end
18
+ end
@@ -1,20 +1,18 @@
1
- # rubocop: disable all
2
-
3
- require 'test_helper'
1
+ require "test_helper"
4
2
 
5
3
  class A < Order
6
- add_to_flags y: 2
4
+ add_to_flags x: 1, y: 2
7
5
  end
8
6
 
9
- describe 'inheritance' do
7
+ describe "inheritance" do
10
8
  let(:a) { A.create }
11
9
 
12
10
  def setup
13
11
  reset_order
14
- Order.add_to_flags x: 1
12
+ Order.add_to_flags z: 3
15
13
  end
16
14
 
17
- it 'consistency' do
15
+ it "consistency" do
18
16
  assert a.respond_to?(:x)
19
17
  assert a.respond_to?(:y)
20
18
  assert_equal false, a.x
@@ -23,34 +21,12 @@ describe 'inheritance' do
23
21
  assert_equal true, a.y
24
22
  end
25
23
 
26
- it 'checks any?' do
24
+ it "checks any?" do
27
25
  a.x = true
28
26
  assert a.flags_any?(:x, :y)
29
- a.x = false
30
- refute a.flags_any?(:x, :y)
31
- end
32
27
 
33
- it 'checks any? #2' do
34
- a.y = true
35
- assert a.flags_any?(:x, :y)
36
- a.y = false
37
- refute a.flags_any?(:x, :y)
28
+ assert_raises(RuntimeError) {
29
+ assert a.flags_any?(:x, :y, :z)
30
+ }
38
31
  end
39
-
40
- it 'checks all?' do
41
- a.x = a.y = true
42
- assert a.flags_all?(:x, :y)
43
- a.x = false
44
- refute a.flags_all?(:x, :y)
45
- end
46
-
47
- it 'checks none? #2' do
48
- a.x = a.y = true
49
- refute a.flags_none?(:x, :y)
50
- a.x = false
51
- refute a.flags_none?(:x, :y)
52
- a.y = false
53
- assert a.flags_none?(:x, :y)
54
- end
55
-
56
32
  end
@@ -1,6 +1,4 @@
1
- # rubocop: disable all
2
-
3
- require 'test_helper'
1
+ require "test_helper"
4
2
 
5
3
  class A < Order
6
4
  end
@@ -10,13 +8,13 @@ class B < Order
10
8
  end
11
9
 
12
10
  class C < Order
13
- before_create { |row| row.flags2 = 0 }
11
+ before_create { |row| row.flags2 = 0 }
14
12
 
15
13
  attr_accessor :flags2
16
14
  add_to_flags z: 3, origin: :flags2
17
15
  end
18
16
 
19
- describe 'inheritance' do
17
+ describe "inheritance" do
20
18
  let(:admina) { A.act_with_flags }
21
19
  let(:adminb) { B.act_with_flags }
22
20
 
@@ -29,14 +27,14 @@ describe 'inheritance' do
29
27
  Order.add_to_flags x: 1
30
28
  end
31
29
 
32
- it 'inheritance #1' do
30
+ it "inheritance #1" do
33
31
  assert a.respond_to?(:flags)
34
32
  assert a.respond_to?(:x)
35
33
  assert_equal 0, a.flags
36
34
  assert_equal false, a.x
37
35
  end
38
36
 
39
- it 'inheritance #2' do
37
+ it "inheritance #2" do
40
38
  a.x = false
41
39
  assert_equal false, a.x
42
40
  a.x = true
@@ -44,7 +42,7 @@ describe 'inheritance' do
44
42
  assert_equal 0x02, a.flags
45
43
  end
46
44
 
47
- it 'inheritance #3' do
45
+ it "inheritance #3" do
48
46
  assert b.respond_to?(:flags)
49
47
  assert b.respond_to?(:x)
50
48
  assert b.respond_to?(:y)
@@ -58,7 +56,7 @@ describe 'inheritance' do
58
56
  assert_equal 0x06, b.flags
59
57
  end
60
58
 
61
- it 'inheritance #4' do
59
+ it "inheritance #4" do
62
60
  assert c.respond_to?(:x)
63
61
  assert c.respond_to?(:z)
64
62
  assert_equal false, c.z
@@ -69,5 +67,4 @@ describe 'inheritance' do
69
67
  assert_equal 0x02, c.flags
70
68
  assert_equal 0x08, c.flags2
71
69
  end
72
-
73
70
  end
@@ -1,5 +1,4 @@
1
1
  class OrdersController < ApplicationController
2
-
3
2
  def index
4
3
  @orders = Order.all
5
4
  end
@@ -9,8 +8,7 @@ class OrdersController < ApplicationController
9
8
  end
10
9
 
11
10
  def show
12
- Order.create :name => 'hugo'
11
+ Order.create name: "hugo"
13
12
  @order = Order.find(params[:id])
14
13
  end
15
-
16
14
  end
@@ -1,9 +1,5 @@
1
1
  class Order < ApplicationRecord
2
-
3
2
  before_save do |row|
4
- row.flags ||= 0
5
- row.bigflags ||= ''
6
- row.errors.add :base, 'panic' if row.name == 'error'
3
+ row.errors.add :base, "panic" if row.name == "error"
7
4
  end
8
-
9
5
  end
@@ -1,4 +1,4 @@
1
1
  Rails.application.routes.draw do
2
2
  resources :orders
3
- root :to => 'orders#index'
3
+ root to: "orders#index"
4
4
  end
@@ -1,13 +1,12 @@
1
1
  ActiveRecord::Schema.define(version: 201910) do
2
-
3
2
  create_table "orders", force: true do |t|
4
- t.string "name"
5
- t.string "qty"
6
- t.integer "flags"
7
- t.text "bigflags"
8
- t.integer "category"
3
+ t.string "name"
4
+ t.string "qty"
5
+ t.integer "flags", default: 0
6
+ t.text "bigflags", default: "0"
7
+ t.integer "origin1", default: 0
8
+ t.integer "origin2", default: 0
9
9
  t.datetime "created_at", null: false
10
10
  t.datetime "updated_at", null: false
11
11
  end
12
-
13
12
  end
data/test/legacy_test.rb CHANGED
@@ -1,7 +1,6 @@
1
- # rubocop:disable all
2
- require 'test_helper'
1
+ require "test_helper"
3
2
 
4
- describe 'Legacy Flag' do
3
+ describe "Legacy Flag" do
5
4
  let(:order) { Order.create }
6
5
 
7
6
  def setup
@@ -9,23 +8,24 @@ describe 'Legacy Flag' do
9
8
  Order.add_to_flags a: 1, b: 7, c: 3
10
9
  end
11
10
 
12
- it 'set true' do
11
+ it "set true" do
13
12
  test3 true, true, true
14
13
  end
15
14
 
16
- it 'set false' do
15
+ it "set false" do
17
16
  test3 false, false, false
18
17
  end
19
18
 
20
- it 'set mixture' do
19
+ it "set mixture" do
21
20
  test3 false, true, false
22
21
  end
23
22
 
24
- it 'set mixture #2' do
23
+ it "set mixture #2" do
25
24
  test3 true, false, true
26
25
  end
27
26
 
28
- private
27
+ private
28
+
29
29
  def test3(a, b, c)
30
30
  order.a = a
31
31
  order.b = b
@@ -35,5 +35,4 @@ describe 'Legacy Flag' do
35
35
  assert_equal b, order.b
36
36
  assert_equal c, order.c
37
37
  end
38
-
39
38
  end
data/test/mask_test.rb CHANGED
@@ -1,6 +1,6 @@
1
- require 'test_helper'
1
+ require "test_helper"
2
2
 
3
- describe 'mask' do
3
+ describe "mask" do
4
4
  let(:admin) { Order.act_with_flags }
5
5
 
6
6
  def setup
@@ -8,21 +8,20 @@ describe 'mask' do
8
8
  Order.add_to_flags a: 1, b: 7, c: 3
9
9
  end
10
10
 
11
- it 'mask empty' do
11
+ it "mask empty" do
12
12
  assert_equal 0x00, admin.mask
13
13
  end
14
14
 
15
- it 'mask of one flag' do
15
+ it "mask of one flag" do
16
16
  assert_equal 0x80, admin.mask(:b)
17
17
  end
18
18
 
19
- it 'mask of several flags' do
19
+ it "mask of several flags" do
20
20
  assert_equal 0x8a, admin.mask(:a, :b, :c)
21
21
  end
22
22
 
23
- it 'order is not relevant' do
23
+ it "order is not relevant" do
24
24
  mask = admin.mask(:a, :b, :c)
25
25
  assert_equal mask, admin.mask(:c, :b, :a)
26
26
  end
27
-
28
27
  end
data/test/null_test.rb CHANGED
@@ -1,17 +1,15 @@
1
- require 'test_helper'
2
-
3
- describe 'No Flags' do
1
+ require "test_helper"
4
2
 
3
+ describe "No Flags" do
5
4
  def setup
6
5
  reset_order
7
6
  Order.add_to_flags
8
7
  end
9
8
 
10
- it 'respond to ActWithFlags API' do
9
+ it "respond to ActWithFlags API" do
11
10
  assert Order.respond_to?(:add_to_flags)
12
11
  assert Order.respond_to?(:remove_from_flags)
13
12
  assert Order.respond_to?(:clear_flags_at_save)
14
13
  assert Order.respond_to?(:act_with_flags)
15
14
  end
16
-
17
15
  end
data/test/one_test.rb CHANGED
@@ -1,8 +1,7 @@
1
- # rubocop:disable all
2
- require 'test_helper'
1
+ require "test_helper"
3
2
 
4
- describe 'One Flag' do
5
- let(:flag) { :blocked }
3
+ describe "One Flag" do
4
+ let(:flag) { :blocked }
6
5
  let(:order) { Order.create }
7
6
 
8
7
  def setup
@@ -10,24 +9,23 @@ describe 'One Flag' do
10
9
  Order.add_to_flags flag
11
10
  end
12
11
 
13
- it 'set flag (:blocked)' do
12
+ it "set flag (:blocked)" do
14
13
  order.blocked = true
15
14
  assert_equal true, order.blocked
16
15
  assert_equal true, order.blocked?
17
16
 
18
- order.blocked = 'false'
17
+ order.blocked = "false"
19
18
  assert_equal false, order.blocked
20
19
  assert_equal false, order.blocked?
21
20
  end
22
21
 
23
- it 'rejects redefining' do
22
+ it "rejects redefining" do
24
23
  assert_raises { Order.add_to_flags :id }
25
24
  assert_raises { Order.add_to_flags flag }
26
25
  end
27
26
 
28
- it 'rejects redefining #2' do
27
+ it "rejects redefining #2" do
29
28
  Order.add_to_flags :berta
30
29
  assert_raises { Order.add_to_flags :berta }
31
30
  end
32
-
33
31
  end
data/test/origin_test.rb CHANGED
@@ -1,8 +1,6 @@
1
- # rubocop: disable all
1
+ require "test_helper"
2
2
 
3
- require 'test_helper'
4
-
5
- describe 'Testing origin' do
3
+ describe "Testing origin" do
6
4
  let(:admin) { Order.act_with_flags }
7
5
  let(:order) { Order.new }
8
6
 
@@ -10,30 +8,13 @@ describe 'Testing origin' do
10
8
  reset_order
11
9
  end
12
10
 
13
- it 'origin category' do
14
- Order.add_to_flags :x, origin: :category
15
- assert_equal :category, admin.origin
16
- end
17
-
18
- it 'origin category #2' do
19
- Order.add_to_flags :x, origin: :category
20
- assert_raises { Order.add_to_flags origin: :category2 }
21
- end
22
-
23
- it 'origin category #3' do
24
- Order.add_to_flags :x, origin: :category
25
- Order.add_to_flags origin: :category
11
+ it "location origin1" do
12
+ Order.add_to_flags :x, origin: :origin1
13
+ assert_equal :origin1, admin.location(:x).origin
26
14
  end
27
15
 
28
- it 'origin default' do
16
+ it "origin default" do
29
17
  Order.add_to_flags :x
30
- assert_equal :flags, admin.origin
31
- end
32
-
33
- it 'origin 1' do
34
- Order.add_to_flags origin: 1
35
- assert_equal :flags, admin.origin
36
- assert order.respond_to?(:origin)
18
+ assert_equal :flags, admin.location(:x).origin
37
19
  end
38
-
39
20
  end
@@ -0,0 +1,57 @@
1
+ require "test_helper"
2
+
3
+ describe "Several origins" do
4
+ let(:order) { Order.create }
5
+
6
+ def setup
7
+ reset_order
8
+ Order.add_to_flags :a # origin is :flags
9
+ Order.add_to_flags :b, b2: 63 # origin is :flags
10
+ Order.add_to_flags :c, origin: :origin1
11
+ Order.add_to_flags d: 3, origin: :origin2
12
+ Order.add_to_flags :d2, origin: :origin2
13
+ end
14
+
15
+ it "checks flags" do
16
+ order.a = true
17
+ order.b = true
18
+ order.b2 = true
19
+ assert_equal 0x8000000000000003, order.flags
20
+ order.b2 = false
21
+ assert_equal 0x03, order.flags
22
+ assert_equal 0x01, Order.act_with_flags.mask(:a) # should work
23
+ assert_equal 0x8000000000000002, Order.act_with_flags.mask(:b, :b2) # should work
24
+ end
25
+
26
+ it "checks origin1" do
27
+ order.c = true
28
+ assert_equal 0x01, order.origin1
29
+ assert_equal 0x01, Order.act_with_flags.mask(:c)
30
+ end
31
+
32
+ it "checks origin2" do
33
+ order.d = true
34
+ assert_equal 0x08, order.origin2
35
+ assert_equal 0x18, Order.act_with_flags.mask(:d2, :d)
36
+ end
37
+
38
+ it "should reject mask for different origins" do
39
+ assert_raises(RuntimeError) {
40
+ Order.act_with_flags.mask :c, :d
41
+ }
42
+ end
43
+
44
+ it "allows any? et all for same origins" do
45
+ order.flags_any? :b, :b2
46
+ order.flags_all? :d2, :d
47
+ end
48
+
49
+ it "rejects any? et all for different origins" do
50
+ assert_raises(RuntimeError) {
51
+ order.flags_any? :a, :c
52
+ }
53
+ assert_raises(RuntimeError) {
54
+ order.flags_all? :d2, :c
55
+ }
56
+ end
57
+ end
@@ -1,6 +1,6 @@
1
- require 'test_helper'
1
+ require "test_helper"
2
2
 
3
- describe 'Delete from Flags' do
3
+ describe "Delete from Flags" do
4
4
  let(:order) { Order.create }
5
5
 
6
6
  def setup
@@ -9,10 +9,9 @@ describe 'Delete from Flags' do
9
9
  order.a = order.b = order.c = true
10
10
  end
11
11
 
12
- it 'remove accessors' do
12
+ it "remove accessors" do
13
13
  Order.remove_from_flags :b
14
14
  assert_raises { order.b }
15
15
  refute Order.respond_to?(:b)
16
16
  end
17
-
18
17
  end
data/test/test_helper.rb CHANGED
@@ -1,7 +1,7 @@
1
- if ENV['COVERAGE']
2
- require 'simplecov'
1
+ if ENV["COVERAGE"]
2
+ require "simplecov"
3
3
  SimpleCov.start do
4
- add_filter '/test/'
4
+ add_filter "/test/"
5
5
  end
6
6
  end
7
7
 
@@ -9,11 +9,11 @@ require "combustion"
9
9
  Combustion.path = "test/internal"
10
10
  Combustion.initialize! :active_record
11
11
 
12
- require 'rails/test_help'
13
- require 'minitest/autorun'
14
- require 'minitest/benchmark'
15
- #require 'capybara/rails'
12
+ require "rails/test_help"
13
+ require "minitest/autorun"
14
+ require "minitest/benchmark"
15
+ # require 'capybara/rails'
16
16
 
17
17
  def reset_order
18
- Order.act_with_flags.reset if Order.act_with_flags
18
+ Order.act_with_flags&.reset
19
19
  end