incline 0.2.21 → 0.2.22
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.lock +1 -1
- data/lib/incline/bit_enum.rb +93 -0
- data/lib/incline/constant_enum.rb +40 -0
- data/lib/incline/engine.rb +2 -0
- data/lib/incline/extensions/numeric.rb +7 -1
- data/lib/incline/version.rb +1 -1
- data/test/lib/bit_enum_test.rb +54 -0
- data/test/lib/constant_enum_test.rb +43 -0
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9a1e49384b7901f87a814ee60d71b0851ddc7f7b
|
4
|
+
data.tar.gz: 111391691fad01b40f655ee7cef3a998c1863068
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6fa77414d22418a5866ee05c1a3a6b4361ff2a4a48dfa889a63599999afb355503e492911e338f895490492ad132f02cc948c53eed0ac8917ef54a10fe37521b
|
7
|
+
data.tar.gz: c64ce83ca35c5132ba98e5e46f615327bddf7f00dbf4f523b510b7a0fe53118cbd97fafb66825124d08881a8fefbaeb5ced2dfb93a109891132a5287ed73f736
|
data/Gemfile.lock
CHANGED
@@ -0,0 +1,93 @@
|
|
1
|
+
module Incline
|
2
|
+
class BitEnum < ConstantEnum
|
3
|
+
|
4
|
+
def self.name_for(value, set_nil = false)
|
5
|
+
ret = values.select{|(v,k)| v == value}.map{|(v,k)| k}
|
6
|
+
return ret unless ret.blank?
|
7
|
+
|
8
|
+
ret = []
|
9
|
+
|
10
|
+
values.each do |(v,k)|
|
11
|
+
if v.power_of_2? && value >= v
|
12
|
+
if set_nil
|
13
|
+
ret << k || v.to_s
|
14
|
+
else
|
15
|
+
ret << k
|
16
|
+
end
|
17
|
+
value -= v
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
if value > 0
|
22
|
+
ret << set_nil ? value.to_s : nil
|
23
|
+
end
|
24
|
+
|
25
|
+
ret.sort
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.named?(value)
|
29
|
+
nm = name_for(value, false)
|
30
|
+
return false if nm.blank?
|
31
|
+
nm.select{|v| v.nil?}.blank?
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_s
|
35
|
+
self.class.name_for(value, true).join(' | ')
|
36
|
+
end
|
37
|
+
|
38
|
+
##
|
39
|
+
# Enable bit checking and bit setting/clearing.
|
40
|
+
#
|
41
|
+
# For instance, with a constant FLAG_1, this enables :flag_1? and :flag_1=(true|false).
|
42
|
+
def method_missing(m,*a,&b)
|
43
|
+
name = m.to_s
|
44
|
+
if name[-1] == '?'
|
45
|
+
name = name[0...-1].upcase.to_sym
|
46
|
+
if constants(false).include?(name)
|
47
|
+
v = const_get(name)
|
48
|
+
return (value & v) == v
|
49
|
+
end
|
50
|
+
elsif name[-1] == '='
|
51
|
+
name = name[0...-1].upcase.to_sym
|
52
|
+
if constants(false).include?(name)
|
53
|
+
v = const_get(name)
|
54
|
+
if a[0]
|
55
|
+
value |= v
|
56
|
+
else
|
57
|
+
value &= ~v
|
58
|
+
end
|
59
|
+
@name = self.class.name_for(@value)
|
60
|
+
return a[0]
|
61
|
+
end
|
62
|
+
end
|
63
|
+
super m, *a, &b
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
def self.values
|
69
|
+
@values ||=
|
70
|
+
begin
|
71
|
+
tmp = names.map{|k,v| [ v, k ]}.sort{|a,b| b[0] <=> a[0]}
|
72
|
+
max_bit = tmp.first[0]
|
73
|
+
unless max_bit.power_of_2?
|
74
|
+
pow = 1
|
75
|
+
while pow < max_bit
|
76
|
+
pow <<= 1
|
77
|
+
end
|
78
|
+
max_bit = pow >> 1
|
79
|
+
end
|
80
|
+
|
81
|
+
while max_bit > 0
|
82
|
+
unless tmp.index{|(v,k)| v == max_bit}
|
83
|
+
tmp << [ max_bit, nil ]
|
84
|
+
end
|
85
|
+
max_bit >>= 1
|
86
|
+
end
|
87
|
+
|
88
|
+
tmp.sort{|a,b| b[0] <=> a[0]}
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Incline
|
2
|
+
class ConstantEnum
|
3
|
+
|
4
|
+
attr_reader :value, :name
|
5
|
+
|
6
|
+
def initialize(value)
|
7
|
+
raise ArgumentError, 'Invalid value' unless self.class.named?(value)
|
8
|
+
@value = value
|
9
|
+
@name = self.class.name_for(value)
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_s
|
13
|
+
name
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
|
18
|
+
def self.named?(value)
|
19
|
+
!name_for(value).blank?
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.name_for(value)
|
23
|
+
names.key(value) || ''
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def self.names
|
29
|
+
@names ||=
|
30
|
+
begin
|
31
|
+
ret = {}
|
32
|
+
constants(false).each do |nm|
|
33
|
+
ret[nm.to_s] = const_get(nm)
|
34
|
+
end
|
35
|
+
ret
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
data/lib/incline/engine.rb
CHANGED
data/lib/incline/version.rb
CHANGED
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class BitEnumTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
class MyEnum < ::Incline::BitEnum
|
6
|
+
|
7
|
+
# raw bits.
|
8
|
+
ALPHA = 1
|
9
|
+
BRAVO = 2
|
10
|
+
CHARLIE = 4
|
11
|
+
DELTA = 8
|
12
|
+
ECHO = 16
|
13
|
+
|
14
|
+
# combined bits.
|
15
|
+
FOXTROT = 5
|
16
|
+
GOLF = 17
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
test 'should allow initialization' do
|
21
|
+
item = MyEnum.new(6)
|
22
|
+
assert item
|
23
|
+
assert_equal 6, item.value
|
24
|
+
assert_equal %w(BRAVO CHARLIE), item.name
|
25
|
+
assert_equal 'BRAVO | CHARLIE', item.to_s
|
26
|
+
end
|
27
|
+
|
28
|
+
test 'should not allow invalid values' do
|
29
|
+
assert_raises(ArgumentError){ MyEnum.new(0) }
|
30
|
+
assert_raises(ArgumentError){ MyEnum.new(32) }
|
31
|
+
end
|
32
|
+
|
33
|
+
test 'should allow valid values' do
|
34
|
+
assert MyEnum.new(1)
|
35
|
+
assert MyEnum.new(7)
|
36
|
+
assert MyEnum.new(15)
|
37
|
+
assert MyEnum.new(31)
|
38
|
+
end
|
39
|
+
|
40
|
+
test 'should recognize names' do
|
41
|
+
assert MyEnum.named?(1)
|
42
|
+
assert MyEnum.named?(2)
|
43
|
+
assert MyEnum.named?(3)
|
44
|
+
assert MyEnum.named?(4)
|
45
|
+
assert MyEnum.named?(5)
|
46
|
+
assert_equal %w(ALPHA), MyEnum.name_for(1)
|
47
|
+
assert_equal %w(BRAVO), MyEnum.name_for(2)
|
48
|
+
assert_equal %w(ALPHA BRAVO), MyEnum.name_for(3)
|
49
|
+
assert_equal %w(CHARLIE), MyEnum.name_for(4)
|
50
|
+
assert_equal %w(FOXTROT), MyEnum.name_for(5)
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ConstantEnumTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
class MyEnum < ::Incline::ConstantEnum
|
6
|
+
|
7
|
+
ALPHA = 1
|
8
|
+
BRAVO = 2
|
9
|
+
CHARLIE = 3
|
10
|
+
DELTA = 4
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
test 'should allow initialization' do
|
15
|
+
item = MyEnum.new(2)
|
16
|
+
assert item
|
17
|
+
assert_equal 2, item.value
|
18
|
+
assert_equal 'BRAVO', item.name
|
19
|
+
assert_equal item.name, item.to_s
|
20
|
+
end
|
21
|
+
|
22
|
+
test 'should not allow invalid values' do
|
23
|
+
assert_raises ArgumentError do
|
24
|
+
MyEnum.new(0)
|
25
|
+
end
|
26
|
+
assert_raises ArgumentError do
|
27
|
+
MyEnum.new(5)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
test 'should be able to identify named values' do
|
32
|
+
assert MyEnum.named?(3)
|
33
|
+
assert_not MyEnum.named?(42)
|
34
|
+
end
|
35
|
+
|
36
|
+
test 'should always return a non-nil name' do
|
37
|
+
assert_equal 'DELTA', MyEnum.name_for(4)
|
38
|
+
assert_equal '', MyEnum.name_for(100)
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: incline
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.22
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Beau Barker
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-10-
|
11
|
+
date: 2017-10-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -395,6 +395,7 @@ files:
|
|
395
395
|
- lib/generators/incline/templates/incline_version.rb
|
396
396
|
- lib/incline.rb
|
397
397
|
- lib/incline/auth_engine_base.rb
|
398
|
+
- lib/incline/bit_enum.rb
|
398
399
|
- lib/incline/cli.rb
|
399
400
|
- lib/incline/cli/errors.rb
|
400
401
|
- lib/incline/cli/helpers/yaml.rb
|
@@ -416,6 +417,7 @@ files:
|
|
416
417
|
- lib/incline/cli/prepare/update_system.rb
|
417
418
|
- lib/incline/cli/usage.rb
|
418
419
|
- lib/incline/cli/version.rb
|
420
|
+
- lib/incline/constant_enum.rb
|
419
421
|
- lib/incline/data_tables_request.rb
|
420
422
|
- lib/incline/date_time_formats.rb
|
421
423
|
- lib/incline/engine.rb
|
@@ -562,6 +564,8 @@ files:
|
|
562
564
|
- test/integration/incline/users_login_test.rb
|
563
565
|
- test/integration/incline/users_signup_test.rb
|
564
566
|
- test/integration/navigation_test.rb
|
567
|
+
- test/lib/bit_enum_test.rb
|
568
|
+
- test/lib/constant_enum_test.rb
|
565
569
|
- test/lib/data_tables_request_test.rb
|
566
570
|
- test/lib/date_time_formats_test.rb
|
567
571
|
- test/lib/global_status_test.rb
|
@@ -606,7 +610,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
606
610
|
version: '0'
|
607
611
|
requirements: []
|
608
612
|
rubyforge_project:
|
609
|
-
rubygems_version: 2.
|
613
|
+
rubygems_version: 2.5.2
|
610
614
|
signing_key:
|
611
615
|
specification_version: 4
|
612
616
|
summary: A gem designed to get off to an even quicker start with Rails.
|