bitfields 0.2.0 → 0.2.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.
- data/VERSION +1 -1
- data/benchmark/bit_operator_vs_in.rb +4 -2
- data/bitfields.gemspec +2 -2
- data/lib/bitfields.rb +5 -0
- data/spec/bitfields_spec.rb +22 -0
- data/spec/spec_helper.rb +1 -0
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.1
|
@@ -80,9 +80,11 @@ end
|
|
80
80
|
def test_speed(bit_counts, query_mode)
|
81
81
|
result = bit_counts.map do |bit_count|
|
82
82
|
sql = User.bitfield_sql({"bit_#{bit_count}_1" => true}, :query_mode => query_mode)
|
83
|
-
|
83
|
+
sql = "select SQL_NO_CACHE count(*) from users where #{sql}"
|
84
|
+
# puts User.connection.select_all("EXPLAIN #{sql}").inspect
|
85
|
+
# puts sql[0..100]
|
84
86
|
time = benchmark do
|
85
|
-
User.
|
87
|
+
User.connection.execute sql
|
86
88
|
end
|
87
89
|
puts "#{bit_count} -> #{time}"
|
88
90
|
[bit_count, time]
|
data/bitfields.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{bitfields}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Michael Grosser"]
|
12
|
-
s.date = %q{2011-01-
|
12
|
+
s.date = %q{2011-01-22}
|
13
13
|
s.email = %q{grosser.michael@gmail.com}
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"README.markdown"
|
data/lib/bitfields.rb
CHANGED
@@ -115,7 +115,12 @@ module Bitfields
|
|
115
115
|
end
|
116
116
|
|
117
117
|
module InstanceMethods
|
118
|
+
def bitfield_values(column)
|
119
|
+
Hash[bitfields[column.to_sym].map{|bit_name, bit| [bit_name, bitfield_value(bit_name)]}]
|
120
|
+
end
|
121
|
+
|
118
122
|
private
|
123
|
+
|
119
124
|
def bitfield_value(bit_name)
|
120
125
|
column, bit, current_value = bitfield_info(bit_name)
|
121
126
|
current_value & bit != 0
|
data/spec/bitfields_spec.rb
CHANGED
@@ -36,6 +36,10 @@ class BitOperatorMode < ActiveRecord::Base
|
|
36
36
|
bitfield :bits, 1 => :seller, 2 => :insane, :query_mode => :bit_operator
|
37
37
|
end
|
38
38
|
|
39
|
+
class ManyBitsUser < User
|
40
|
+
set_table_name 'users'
|
41
|
+
end
|
42
|
+
|
39
43
|
describe Bitfields do
|
40
44
|
before do
|
41
45
|
User.delete_all
|
@@ -45,6 +49,17 @@ describe Bitfields do
|
|
45
49
|
it "parses them correctly" do
|
46
50
|
User.bitfields.should == {:bits => {:seller => 1, :insane => 2, :stupid => 4}}
|
47
51
|
end
|
52
|
+
|
53
|
+
it "is fast for huge number of bits" do
|
54
|
+
bits = {}
|
55
|
+
0.upto(20) do |bit|
|
56
|
+
bits[2**bit] = "my_bit_#{bit}"
|
57
|
+
end
|
58
|
+
|
59
|
+
Timeout.timeout(0.2) do
|
60
|
+
ManyBitsUser.class_eval{ bitfield :bits, bits }
|
61
|
+
end
|
62
|
+
end
|
48
63
|
end
|
49
64
|
|
50
65
|
describe :bitfield_options do
|
@@ -65,6 +80,13 @@ describe Bitfields do
|
|
65
80
|
end
|
66
81
|
end
|
67
82
|
|
83
|
+
describe :bitfield_values do
|
84
|
+
it "contains all bits with values" do
|
85
|
+
User.new.bitfield_values(:bits).should == {:insane=>false, :stupid=>false, :seller=>false}
|
86
|
+
User.new(:bits => 15).bitfield_values(:bits).should == {:insane=>true, :stupid=>true, :seller=>true}
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
68
90
|
describe 'attribute accessors' do
|
69
91
|
it "has everything on false by default" do
|
70
92
|
User.new.seller.should == false
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bitfields
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 1
|
10
|
+
version: 0.2.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Michael Grosser
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-01-
|
18
|
+
date: 2011-01-22 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|