act_with_flags 0.2.3 → 3.1.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 +4 -4
- data/.github/workflows/rake.yml +30 -0
- data/.ruby-gemset +1 -1
- data/.ruby-version +1 -1
- data/.watchr +29 -16
- data/Appraisals +12 -4
- data/Gemfile +7 -6
- data/Gemfile.lock +156 -125
- data/MIT-LICENSE +1 -1
- data/README.md +77 -10
- data/Rakefile +5 -5
- data/act_with_flags.gemspec +20 -20
- data/gemfiles/rails_6.0.gemfile +4 -1
- data/gemfiles/{rails_5.2.gemfile → rails_6.1.gemfile} +3 -1
- data/gemfiles/rails_7.0.gemfile +15 -0
- data/lib/act_with_flags/admin.rb +5 -48
- data/lib/act_with_flags/clear.rb +30 -0
- data/lib/act_with_flags/define.rb +6 -35
- data/lib/act_with_flags/flags.rb +65 -0
- data/lib/act_with_flags/print.rb +21 -27
- data/lib/act_with_flags/utils.rb +33 -13
- data/lib/act_with_flags/version.rb +9 -13
- data/lib/act_with_flags.rb +28 -33
- data/test/any_all_none_test.rb +6 -9
- data/test/benchmark_test.rb +73 -0
- data/test/clear_test.rb +5 -7
- data/test/coding_check_add_test.rb +29 -0
- data/test/coding_coverage_test.rb +19 -0
- data/test/coding_mask2d_test.rb +25 -0
- data/test/coding_null_test.rb +29 -0
- data/test/coding_one_test.rb +26 -0
- data/test/coding_reset_test.rb +18 -0
- data/test/inheritance_any_test.rb +9 -33
- data/test/inheritance_test.rb +7 -10
- data/test/internal/app/controllers/orders_controller.rb +1 -3
- data/test/internal/app/models/order.rb +1 -5
- data/test/internal/config/routes.rb +1 -1
- data/test/internal/db/schema.rb +6 -7
- data/test/legacy_test.rb +8 -9
- data/test/mask_test.rb +6 -7
- data/test/null_test.rb +3 -5
- data/test/one_test.rb +7 -9
- data/test/origin_test.rb +7 -26
- data/test/origins_test.rb +57 -0
- data/test/range_test.rb +89 -0
- data/test/remove_from_test.rb +3 -4
- data/test/test_helper.rb +9 -9
- metadata +47 -67
- data/.rubocop.yml +0 -8
- data/.travis.yml +0 -23
- data/test/internal_benchmark_test.rb +0 -52
- data/test/internal_check_add_test.rb +0 -36
- data/test/internal_null_test.rb +0 -29
- data/test/internal_one_test.rb +0 -27
- data/test/reset_test.rb +0 -17
| @@ -0,0 +1,73 @@ | |
| 1 | 
            +
            # For development purposes; do not waste your tine reading it!
         | 
| 2 | 
            +
            # YAGNI
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            require "test_helper"
         | 
| 5 | 
            +
            require "benchmark"
         | 
| 6 | 
            +
            require "benchmark/ips"
         | 
| 7 | 
            +
            # ENV["MORE"] = "true"
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            describe "Internal timings flag" do
         | 
| 10 | 
            +
              let(:order) { Order.create }
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              def setup
         | 
| 13 | 
            +
                reset_order
         | 
| 14 | 
            +
                Order.add_to_flags :blocked
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              it "times ips" do
         | 
| 18 | 
            +
                return unless ENV["MORE"]
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                Benchmark.ips do |x|
         | 
| 21 | 
            +
                  x.report("assign true : ") { order.blocked = true }
         | 
| 22 | 
            +
                  x.report("assign false: ") { order.blocked = false }
         | 
| 23 | 
            +
                  x.report("assign \"false\": ") { order.blocked = "false" }
         | 
| 24 | 
            +
                  x.report("x = order.blocked? ") { x = order.blocked? }
         | 
| 25 | 
            +
                  x.report("x = order.blocked ") { x = order.blocked }
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  x.compare!
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
            end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            describe "Internal timings mask" do
         | 
| 33 | 
            +
              let(:order) { Order.create }
         | 
| 34 | 
            +
              let(:admin) { Order.act_with_flags }
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              def setup
         | 
| 37 | 
            +
                reset_order
         | 
| 38 | 
            +
                Order.add_to_flags a: 1, b: 7, c: 3
         | 
| 39 | 
            +
                # Order.add_to_flags a: 1, b: 60, c: 3
         | 
| 40 | 
            +
                # Order.add_to_flags a: 1, b: 1000, c: 3
         | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
              it "times ips" do
         | 
| 44 | 
            +
                return unless ENV["MORE"]
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                Benchmark.ips do |x|
         | 
| 47 | 
            +
                  x.report("mask(:a, :b):  ") { admin.mask(:a, :b) }
         | 
| 48 | 
            +
                  x.report("any?(:a, :b):  ") { order.flags_any?(:a, :b) }
         | 
| 49 | 
            +
                  x.report("all?(:a, :b):  ") { order.flags_all?(:a, :b) }
         | 
| 50 | 
            +
                  x.report("none?(:a, :b): ") { order.flags_none?(:a, :b) }
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                  x.compare!
         | 
| 53 | 
            +
                end
         | 
| 54 | 
            +
              end
         | 
| 55 | 
            +
            end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
            class BenchFoo < Minitest::Benchmark
         | 
| 58 | 
            +
              def bench_order_blocked
         | 
| 59 | 
            +
                return unless ENV["MORE"]
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                n = 1_000_000
         | 
| 62 | 
            +
                n = 100_000
         | 
| 63 | 
            +
                n = 10_000
         | 
| 64 | 
            +
                Order.add_to_flags :blocked2
         | 
| 65 | 
            +
                order = Order.create
         | 
| 66 | 
            +
                assert_performance_constant do |input|
         | 
| 67 | 
            +
                  n.times do
         | 
| 68 | 
            +
                    order.blocked2 = true
         | 
| 69 | 
            +
                    order.blocked2 = !order.blocked2
         | 
| 70 | 
            +
                  end
         | 
| 71 | 
            +
                end
         | 
| 72 | 
            +
              end
         | 
| 73 | 
            +
            end
         | 
    
        data/test/clear_test.rb
    CHANGED
    
    | @@ -1,7 +1,6 @@ | |
| 1 | 
            -
            require  | 
| 1 | 
            +
            require "test_helper"
         | 
| 2 2 |  | 
| 3 | 
            -
            describe  | 
| 4 | 
            -
              let(:admin) { Order.act_with_flags }
         | 
| 3 | 
            +
            describe "Clear flags at save" do
         | 
| 5 4 | 
             
              let(:order) { Order.create }
         | 
| 6 5 |  | 
| 7 6 | 
             
              def setup
         | 
| @@ -10,21 +9,20 @@ describe 'Clear Flags at Save' do | |
| 10 9 | 
             
                order.a = order.b = order.c = true
         | 
| 11 10 | 
             
              end
         | 
| 12 11 |  | 
| 13 | 
            -
              it  | 
| 12 | 
            +
              it "checks sanity" do
         | 
| 14 13 | 
             
                assert_equal 0x8a, order.flags
         | 
| 15 14 | 
             
                assert order.b
         | 
| 16 15 | 
             
              end
         | 
| 17 16 |  | 
| 18 | 
            -
              it  | 
| 17 | 
            +
              it "clear flags during save" do
         | 
| 19 18 | 
             
                Order.clear_flags_at_save :b
         | 
| 20 19 | 
             
                order.save
         | 
| 21 20 | 
             
                order.reload
         | 
| 22 21 | 
             
                assert_equal 0x0a, order.flags
         | 
| 23 22 | 
             
              end
         | 
| 24 23 |  | 
| 25 | 
            -
              it  | 
| 24 | 
            +
              it "does not remove accessor" do
         | 
| 26 25 | 
             
                Order.clear_flags_at_save :b
         | 
| 27 26 | 
             
                Order.respond_to? :b
         | 
| 28 27 | 
             
              end
         | 
| 29 | 
            -
             | 
| 30 28 | 
             
            end
         | 
| @@ -0,0 +1,29 @@ | |
| 1 | 
            +
            require "test_helper"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe "Internal check add flag" do
         | 
| 4 | 
            +
              let(:order) { Order.create }
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              def setup
         | 
| 7 | 
            +
                reset_order
         | 
| 8 | 
            +
                Order.add_to_flags a: 1, b: 7
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              it "skip reserved position" do
         | 
| 12 | 
            +
                Order.add_to_flags :xx
         | 
| 13 | 
            +
                order.xx = true
         | 
| 14 | 
            +
                assert_equal 0x100, order.flags
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                Order.add_to_flags :yy
         | 
| 17 | 
            +
                order.yy = true
         | 
| 18 | 
            +
                assert_equal 0x300, order.flags
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              it "rejects redefinition" do
         | 
| 22 | 
            +
                Order.add_to_flags :z
         | 
| 23 | 
            +
                assert_raises { Order.add_to_flags :z }
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              it "rejects reuse of position" do
         | 
| 27 | 
            +
                assert_raises { Order.add_to_flags qq: 1 }
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
            end
         | 
| @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            require "test_helper"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe "Coverage" do
         | 
| 4 | 
            +
              let(:order) { Order.create }
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              def setup
         | 
| 7 | 
            +
                reset_order
         | 
| 8 | 
            +
                Order.add_to_flags a: 1, b: 7
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              it "coverage to_s" do
         | 
| 12 | 
            +
                res = order.act_with_flags.to_s
         | 
| 13 | 
            +
                puts res if ENV["MORE"]
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              it "coverage location raise" do
         | 
| 17 | 
            +
                assert_raises { order.act_with_flags.location(:unknown) }
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
            end
         | 
| @@ -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 | 
            -
             | 
| 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  | 
| 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  | 
| 12 | 
            +
                Order.add_to_flags z: 3
         | 
| 15 13 | 
             
              end
         | 
| 16 14 |  | 
| 17 | 
            -
              it  | 
| 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  | 
| 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 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
                 | 
| 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
         | 
    
        data/test/inheritance_test.rb
    CHANGED
    
    | @@ -1,6 +1,4 @@ | |
| 1 | 
            -
             | 
| 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| | 
| 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  | 
| 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  | 
| 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  | 
| 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  | 
| 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  | 
| 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 : | 
| 11 | 
            +
                Order.create name: "hugo"
         | 
| 13 12 | 
             
                @order = Order.find(params[:id])
         | 
| 14 13 | 
             
              end
         | 
| 15 | 
            -
             | 
| 16 14 | 
             
            end
         | 
    
        data/test/internal/db/schema.rb
    CHANGED
    
    | @@ -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 | 
| 5 | 
            -
                t.string | 
| 6 | 
            -
                t.integer | 
| 7 | 
            -
                t.text | 
| 8 | 
            -
                t.integer | 
| 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 | 
            -
             | 
| 2 | 
            -
            require 'test_helper'
         | 
| 1 | 
            +
            require "test_helper"
         | 
| 3 2 |  | 
| 4 | 
            -
            describe  | 
| 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  | 
| 11 | 
            +
              it "set true" do
         | 
| 13 12 | 
             
                test3 true, true, true
         | 
| 14 13 | 
             
              end
         | 
| 15 14 |  | 
| 16 | 
            -
              it  | 
| 15 | 
            +
              it "set false" do
         | 
| 17 16 | 
             
                test3 false, false, false
         | 
| 18 17 | 
             
              end
         | 
| 19 18 |  | 
| 20 | 
            -
              it  | 
| 19 | 
            +
              it "set mixture" do
         | 
| 21 20 | 
             
                test3 false, true, false
         | 
| 22 21 | 
             
              end
         | 
| 23 22 |  | 
| 24 | 
            -
              it  | 
| 23 | 
            +
              it "set mixture #2" do
         | 
| 25 24 | 
             
                test3 true, false, true
         | 
| 26 25 | 
             
              end
         | 
| 27 26 |  | 
| 28 | 
            -
             | 
| 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  | 
| 1 | 
            +
            require "test_helper"
         | 
| 2 2 |  | 
| 3 | 
            -
            describe  | 
| 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  | 
| 11 | 
            +
              it "mask empty" do
         | 
| 12 12 | 
             
                assert_equal 0x00, admin.mask
         | 
| 13 13 | 
             
              end
         | 
| 14 14 |  | 
| 15 | 
            -
              it  | 
| 15 | 
            +
              it "mask of one flag" do
         | 
| 16 16 | 
             
                assert_equal 0x80, admin.mask(:b)
         | 
| 17 17 | 
             
              end
         | 
| 18 18 |  | 
| 19 | 
            -
              it  | 
| 19 | 
            +
              it "mask of several flags" do
         | 
| 20 20 | 
             
                assert_equal 0x8a, admin.mask(:a, :b, :c)
         | 
| 21 21 | 
             
              end
         | 
| 22 22 |  | 
| 23 | 
            -
              it  | 
| 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  | 
| 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  | 
| 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 | 
            -
             | 
| 2 | 
            -
            require 'test_helper'
         | 
| 1 | 
            +
            require "test_helper"
         | 
| 3 2 |  | 
| 4 | 
            -
            describe  | 
| 5 | 
            -
              let(:flag) | 
| 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  | 
| 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 =  | 
| 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  | 
| 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  | 
| 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 | 
            -
             | 
| 1 | 
            +
            require "test_helper"
         | 
| 2 2 |  | 
| 3 | 
            -
             | 
| 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  | 
| 14 | 
            -
                Order.add_to_flags :x, origin: : | 
| 15 | 
            -
                assert_equal : | 
| 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  | 
| 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
         |