act_with_flags 0.0.7 → 0.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/Gemfile +2 -3
- data/act_with_flags.gemspec +2 -2
- data/lib/act_with_flags/admin.rb +7 -5
- data/lib/act_with_flags/define.rb +12 -1
- data/lib/act_with_flags/utils.rb +0 -3
- data/lib/act_with_flags/version.rb +2 -1
- data/test/any_all_none_test.rb +1 -1
- data/test/clear_test.rb +1 -1
- data/test/inheritance_any_test.rb +54 -0
- data/test/inheritance_test.rb +71 -0
- data/test/internal_benchmark_test.rb +5 -8
- data/test/internal_check_add_test.rb +4 -0
- data/test/internal_null_test.rb +3 -3
- data/test/legacy_test.rb +1 -1
- data/test/one_test.rb +1 -1
- data/test/remove_from_test.rb +1 -1
- data/test/test_helper.rb +7 -5
- metadata +15 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 201441930c834655273f61a9d668719ec8c593860e809046fd0a87e2e0176ad6
|
4
|
+
data.tar.gz: 6ceedc612ac77520f452fdff9fa677cefca05823d20df69a8c041429cbb1c086
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 549172ca342128d6b23d880beb1aadd662db77d7f8df6f98c10ac4b6c97a7b57d38ca72b27cde97c5952fecbb63a6cce0f3a3743c1e1e67456c466ffcf621ba6
|
7
|
+
data.tar.gz: 9f0a8a843e4c76f308205d4b3d9c38a96e21ba5f5d7af6b6a48fead025237440beace8f951108f930d09def6ddd1b554f2a82a5b2d2ed66efd22244d983c6132
|
data/Gemfile
CHANGED
data/act_with_flags.gemspec
CHANGED
@@ -18,6 +18,6 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
19
19
|
s.require_paths = ['lib']
|
20
20
|
|
21
|
-
s.add_development_dependency 'bundler'
|
22
|
-
s.add_development_dependency 'rake'
|
21
|
+
s.add_development_dependency 'bundler'
|
22
|
+
s.add_development_dependency 'rake'
|
23
23
|
end
|
data/lib/act_with_flags/admin.rb
CHANGED
@@ -39,14 +39,16 @@ class ActWithFlags::Admin
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def position(name)
|
42
|
-
@map[name]
|
43
|
-
|
42
|
+
pos = @map[name]
|
43
|
+
return pos if pos
|
44
44
|
|
45
|
-
|
46
|
-
|
45
|
+
parent = self.model.superclass.act_with_flags
|
46
|
+
return parent.position(name) if parent
|
47
|
+
|
48
|
+
raise "unknown flag '#{model}##{name}'"
|
47
49
|
end
|
48
50
|
|
49
|
-
def
|
51
|
+
def mask(*names)
|
50
52
|
names.inject(0) { |msk, name| msk | ( 1 << position(name) ) }
|
51
53
|
end
|
52
54
|
|
@@ -4,12 +4,22 @@
|
|
4
4
|
class ActWithFlags::Admin
|
5
5
|
|
6
6
|
def add_accessors(origin, accessor, mask)
|
7
|
+
#p ["act_with_flags#add_accessors:", model, origin, accessor, mask]
|
8
|
+
unless model.method_defined?(:act_with_flags)
|
9
|
+
model.class_eval %(
|
10
|
+
def act_with_flags
|
11
|
+
#{model}.act_with_flags
|
12
|
+
end
|
13
|
+
)
|
14
|
+
end
|
15
|
+
|
7
16
|
model.class_eval %(
|
8
17
|
def #{accessor}
|
9
18
|
#{accessor}?
|
10
19
|
end
|
11
20
|
|
12
21
|
def #{accessor}?
|
22
|
+
raise "Uninitialized '#{model}.#{origin}'" if #{origin}.nil?
|
13
23
|
if #{origin}.is_a?(String)
|
14
24
|
flags = self.#{origin}.to_i
|
15
25
|
!( flags & #{mask} ).zero?
|
@@ -19,11 +29,12 @@ class ActWithFlags::Admin
|
|
19
29
|
end
|
20
30
|
|
21
31
|
def #{accessor}=(value)
|
32
|
+
raise "Uninitialized '#{model}.#{origin}'" if #{origin}.nil?
|
22
33
|
is_a_string = #{origin}.is_a?(String)
|
23
34
|
flags = is_a_string ? self.#{origin}.to_i : self.#{origin}
|
24
35
|
flags ||= 0
|
25
36
|
|
26
|
-
result = self.
|
37
|
+
result = self.act_with_flags.to_boolean(value)
|
27
38
|
if result
|
28
39
|
flags |= #{mask}
|
29
40
|
else
|
data/lib/act_with_flags/utils.rb
CHANGED
data/test/any_all_none_test.rb
CHANGED
data/test/clear_test.rb
CHANGED
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class A < Order
|
4
|
+
add_to_flags y: 2
|
5
|
+
end
|
6
|
+
|
7
|
+
describe 'inheritance' do
|
8
|
+
let(:a) { A.create }
|
9
|
+
|
10
|
+
def setup
|
11
|
+
reset_order
|
12
|
+
Order.add_to_flags x: 1
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'consistency' do
|
16
|
+
assert a.respond_to?(:x)
|
17
|
+
assert a.respond_to?(:y)
|
18
|
+
assert_equal false, a.x
|
19
|
+
assert_equal false, a.y
|
20
|
+
a.y = true
|
21
|
+
assert_equal true, a.y
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'checks any?' do
|
25
|
+
a.x = true
|
26
|
+
assert a.flags_any?(:x, :y)
|
27
|
+
a.x = false
|
28
|
+
refute a.flags_any?(:x, :y)
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'checks any? #2' do
|
32
|
+
a.y = true
|
33
|
+
assert a.flags_any?(:x, :y)
|
34
|
+
a.y = false
|
35
|
+
refute a.flags_any?(:x, :y)
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'checks all?' do
|
39
|
+
a.x = a.y = true
|
40
|
+
assert a.flags_all?(:x, :y)
|
41
|
+
a.x = false
|
42
|
+
refute a.flags_all?(:x, :y)
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'checks none? #2' do
|
46
|
+
a.x = a.y = true
|
47
|
+
refute a.flags_none?(:x, :y)
|
48
|
+
a.x = false
|
49
|
+
refute a.flags_none?(:x, :y)
|
50
|
+
a.y = false
|
51
|
+
assert a.flags_none?(:x, :y)
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class A < Order
|
4
|
+
end
|
5
|
+
|
6
|
+
class B < Order
|
7
|
+
add_to_flags y: 2
|
8
|
+
end
|
9
|
+
|
10
|
+
class C < Order
|
11
|
+
before_create { |row| row.flags2 = 0 }
|
12
|
+
|
13
|
+
attr_accessor :flags2
|
14
|
+
add_to_flags z: 3, origin: :flags2
|
15
|
+
end
|
16
|
+
|
17
|
+
describe 'inheritance' do
|
18
|
+
let(:admina) { A.act_with_flags }
|
19
|
+
let(:adminb) { B.act_with_flags }
|
20
|
+
|
21
|
+
let(:a) { A.create }
|
22
|
+
let(:b) { B.create }
|
23
|
+
let(:c) { C.create }
|
24
|
+
|
25
|
+
def setup
|
26
|
+
reset_order
|
27
|
+
Order.add_to_flags x: 1
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'inheritance #1' do
|
31
|
+
assert a.respond_to?(:flags)
|
32
|
+
assert a.respond_to?(:x)
|
33
|
+
assert_equal 0, a.flags
|
34
|
+
assert_equal false, a.x
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'inheritance #2' do
|
38
|
+
a.x = false
|
39
|
+
assert_equal false, a.x
|
40
|
+
a.x = true
|
41
|
+
assert_equal true, a.x
|
42
|
+
assert_equal 0x02, a.flags
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'inheritance #3' do
|
46
|
+
assert b.respond_to?(:flags)
|
47
|
+
assert b.respond_to?(:x)
|
48
|
+
assert b.respond_to?(:y)
|
49
|
+
assert_equal 0, b.flags
|
50
|
+
assert_equal false, b.x
|
51
|
+
assert_equal false, b.y
|
52
|
+
b.x = true
|
53
|
+
assert_equal true, b.x
|
54
|
+
b.y = true
|
55
|
+
assert_equal true, b.y
|
56
|
+
assert_equal 0x06, b.flags
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'inheritance #4' do
|
60
|
+
assert c.respond_to?(:x)
|
61
|
+
assert c.respond_to?(:z)
|
62
|
+
assert_equal false, c.z
|
63
|
+
c.x = true
|
64
|
+
assert_equal true, c.x
|
65
|
+
c.z = true
|
66
|
+
assert_equal true, c.z
|
67
|
+
assert_equal 0x02, c.flags
|
68
|
+
assert_equal 0x08, c.flags2
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
@@ -8,7 +8,7 @@ require 'benchmark/ips'
|
|
8
8
|
# ENV['MORE'] = 'true'
|
9
9
|
|
10
10
|
describe 'Internal timings' do
|
11
|
-
let(:order) { Order.
|
11
|
+
let(:order) { Order.create }
|
12
12
|
|
13
13
|
def setup
|
14
14
|
reset_order
|
@@ -18,9 +18,6 @@ describe 'Internal timings' do
|
|
18
18
|
it 'times ips' do
|
19
19
|
return unless ENV['MORE']
|
20
20
|
|
21
|
-
Order.add_to_flags :blocked, reset: :hard
|
22
|
-
order = Order.new
|
23
|
-
|
24
21
|
Benchmark.ips do |x|
|
25
22
|
x.report('assign true : ') { order.blocked = true }
|
26
23
|
x.report('assign false: ') { order.blocked = false }
|
@@ -42,12 +39,12 @@ class BenchFoo < Minitest::Benchmark
|
|
42
39
|
n = 1_000_000
|
43
40
|
n = 100_000
|
44
41
|
n = 10_000
|
45
|
-
Order.add_to_flags :
|
46
|
-
order = Order.
|
42
|
+
Order.add_to_flags :blocked2
|
43
|
+
order = Order.create
|
47
44
|
assert_performance_constant do |input|
|
48
45
|
n.times do
|
49
|
-
order.
|
50
|
-
order.
|
46
|
+
order.blocked2 = true
|
47
|
+
order.blocked2 = !order.blocked2
|
51
48
|
end
|
52
49
|
end
|
53
50
|
end
|
data/test/internal_null_test.rb
CHANGED
@@ -16,9 +16,9 @@ describe 'Internal Null' do
|
|
16
16
|
it 'tests to_boolean' do
|
17
17
|
assert admin.to_boolean(true)
|
18
18
|
refute admin.to_boolean(false)
|
19
|
-
assert_raises {
|
20
|
-
assert_raises {
|
21
|
-
assert_raises {
|
19
|
+
assert_raises { admin.to_boolean(nil) }
|
20
|
+
assert_raises { admin.to_boolean(2) }
|
21
|
+
assert_raises { admin.to_boolean('unknown') }
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'tests a simple administration: names' do
|
data/test/legacy_test.rb
CHANGED
data/test/one_test.rb
CHANGED
data/test/remove_from_test.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -1,10 +1,8 @@
|
|
1
1
|
# rubocop:disable all
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
add_filter 'test'
|
7
|
-
end
|
3
|
+
require 'simplecov'
|
4
|
+
SimpleCov.start do
|
5
|
+
add_filter 'test'
|
8
6
|
end
|
9
7
|
|
10
8
|
require 'rubygems'
|
@@ -29,6 +27,10 @@ ActiveRecord::Schema.define do
|
|
29
27
|
end
|
30
28
|
|
31
29
|
class Order < ActiveRecord::Base
|
30
|
+
before_create { |row|
|
31
|
+
row.flags ||= 0
|
32
|
+
row.bigflags ||= ''
|
33
|
+
}
|
32
34
|
end
|
33
35
|
|
34
36
|
def reset_order
|
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: act_with_flags
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dittmar Krall
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-04-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0'
|
41
41
|
description: Handles flags in a Rails model instance
|
42
42
|
email:
|
43
43
|
- dittmar.krall@matique.de
|
@@ -65,6 +65,8 @@ files:
|
|
65
65
|
- lib/act_with_flags/version.rb
|
66
66
|
- test/any_all_none_test.rb
|
67
67
|
- test/clear_test.rb
|
68
|
+
- test/inheritance_any_test.rb
|
69
|
+
- test/inheritance_test.rb
|
68
70
|
- test/internal_benchmark_test.rb
|
69
71
|
- test/internal_check_add_test.rb
|
70
72
|
- test/internal_null_test.rb
|
@@ -97,13 +99,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
97
99
|
- !ruby/object:Gem::Version
|
98
100
|
version: '0'
|
99
101
|
requirements: []
|
100
|
-
rubygems_version: 3.0.
|
102
|
+
rubygems_version: 3.0.3
|
101
103
|
signing_key:
|
102
104
|
specification_version: 4
|
103
105
|
summary: act_with_flags gem
|
104
106
|
test_files:
|
105
107
|
- test/any_all_none_test.rb
|
106
108
|
- test/clear_test.rb
|
109
|
+
- test/inheritance_any_test.rb
|
110
|
+
- test/inheritance_test.rb
|
107
111
|
- test/internal_benchmark_test.rb
|
108
112
|
- test/internal_check_add_test.rb
|
109
113
|
- test/internal_null_test.rb
|