act_with_flags 0.0.7 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 221715b794f43b86fcb22bf60ed2210fdbbe2f1b9ea3a2c1c8a3098491c60be9
4
- data.tar.gz: ad7bfb08b82488721f8f315ff26fd87d186f519e82286752c63a0442a4d3673e
3
+ metadata.gz: 201441930c834655273f61a9d668719ec8c593860e809046fd0a87e2e0176ad6
4
+ data.tar.gz: 6ceedc612ac77520f452fdff9fa677cefca05823d20df69a8c041429cbb1c086
5
5
  SHA512:
6
- metadata.gz: 453786e6810c3c9e4c2f60088c09d8fc131cea925273ccb7ab71aafb7023fb7c77befde949858a595885727ec0c1cecd39291fbde8b3ae40bca4e46a4a9a6eff
7
- data.tar.gz: 372d91ba5bc93731aac241a0d8a1c483488e5c63182ff47f0c0b1b2a4afe0cc6eaa8c62398fdbc7bd68ee1a362d008deb9af3b9b1bc85a2f8b1f095662424226
6
+ metadata.gz: 549172ca342128d6b23d880beb1aadd662db77d7f8df6f98c10ac4b6c97a7b57d38ca72b27cde97c5952fecbb63a6cce0f3a3743c1e1e67456c466ffcf621ba6
7
+ data.tar.gz: 9f0a8a843e4c76f308205d4b3d9c38a96e21ba5f5d7af6b6a48fead025237440beace8f951108f930d09def6ddd1b554f2a82a5b2d2ed66efd22244d983c6132
data/Gemfile CHANGED
@@ -5,10 +5,9 @@ gemspec
5
5
  gem 'rails'
6
6
 
7
7
  group :test do
8
+ gem 'minitest'
8
9
  gem 'observr'
9
10
  gem 'simplecov', require: false
10
- gem 'minitest'
11
- gem 'sqlite3', '!= 1.4.0'
11
+ gem 'sqlite3'
12
12
  gem 'benchmark-ips'
13
- # gem 'sqlite3'
14
13
  end
@@ -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', '~> 1'
22
- s.add_development_dependency 'rake', '~> 12'
21
+ s.add_development_dependency 'bundler'
22
+ s.add_development_dependency 'rake'
23
23
  end
@@ -39,14 +39,16 @@ class ActWithFlags::Admin
39
39
  end
40
40
 
41
41
  def position(name)
42
- @map[name]
43
- end
42
+ pos = @map[name]
43
+ return pos if pos
44
44
 
45
- def mask(*names)
46
- names.inject(0) { |msk, name| msk | ( 1 << position(name) ) }
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 all?(*names)
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.class.act_with_flags.to_boolean(value)
37
+ result = self.act_with_flags.to_boolean(value)
27
38
  if result
28
39
  flags |= #{mask}
29
40
  else
@@ -1,6 +1,3 @@
1
- # xrubocop:disable all
2
- # xfrozen_string_literal: true
3
-
4
1
  class ActWithFlags::Admin
5
2
 
6
3
  def add_accessor(name, pos)
@@ -1,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActWithFlags
4
- VERSION = '0.0.7' # 2019-03-23
4
+ VERSION = '0.1.0' # 2019-04-07
5
+ # VERSION = '0.0.7' # 2019-03-23
5
6
  # VERSION = '0.0.6' # 2019-03-08
6
7
  # VERSION = '0.0.5' # 2019-03-05
7
8
  # VERSION = '0.0.4' # 2019-03-03
@@ -1,7 +1,7 @@
1
1
  require 'test_helper'
2
2
 
3
3
  describe 'any? all? and none?' do
4
- let(:order) { Order.new }
4
+ let(:order) { Order.create }
5
5
 
6
6
  def setup
7
7
  reset_order
data/test/clear_test.rb CHANGED
@@ -2,7 +2,7 @@ require 'test_helper'
2
2
 
3
3
  describe 'Clear Flags at Save' do
4
4
  let(:admin) { Order.act_with_flags }
5
- let(:order) { Order.new }
5
+ let(:order) { Order.create }
6
6
 
7
7
  def setup
8
8
  reset_order
@@ -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.new }
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 :blocked, reset: :hard
46
- order = Order.new
42
+ Order.add_to_flags :blocked2
43
+ order = Order.create
47
44
  assert_performance_constant do |input|
48
45
  n.times do
49
- order.blocked = true
50
- order.blocked = !order.blocked
46
+ order.blocked2 = true
47
+ order.blocked2 = !order.blocked2
51
48
  end
52
49
  end
53
50
  end
@@ -29,4 +29,8 @@ describe 'Internal check add flag' do
29
29
  puts res if ENV['MORE']
30
30
  end
31
31
 
32
+ it 'coverage position raise' do
33
+ assert_raises { admin.position(:aaaa) }
34
+ end
35
+
32
36
  end
@@ -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 { flags.to_boolean(nil) }
20
- assert_raises { flags.to_boolean(2) }
21
- assert_raises { flags.to_boolean('unknown') }
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
@@ -2,7 +2,7 @@
2
2
  require 'test_helper'
3
3
 
4
4
  describe 'Legacy Flag' do
5
- let(:order) { Order.new }
5
+ let(:order) { Order.create }
6
6
 
7
7
  def setup
8
8
  reset_order
data/test/one_test.rb CHANGED
@@ -3,7 +3,7 @@ require 'test_helper'
3
3
 
4
4
  describe 'One Flag' do
5
5
  let(:flag) { :blocked }
6
- let(:order) { Order.new }
6
+ let(:order) { Order.create }
7
7
 
8
8
  def setup
9
9
  reset_order
@@ -1,7 +1,7 @@
1
1
  require 'test_helper'
2
2
 
3
3
  describe 'Delete from Flags' do
4
- let(:order) { Order.new }
4
+ let(:order) { Order.create }
5
5
 
6
6
  def setup
7
7
  reset_order
data/test/test_helper.rb CHANGED
@@ -1,10 +1,8 @@
1
1
  # rubocop:disable all
2
2
 
3
- if ENV['MORE']
4
- require 'simplecov'
5
- SimpleCov.start do
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.7
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-03-23 00:00:00.000000000 Z
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: '1'
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: '1'
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: '12'
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: '12'
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.1
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