bitfields 0.1.3 → 0.1.4
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/README.markdown +3 -2
- data/VERSION +1 -1
- data/bitfields.gemspec +2 -2
- data/lib/bitfields.rb +3 -1
- data/spec/bitfields_spec.rb +8 -0
- metadata +3 -3
data/README.markdown
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
Save migrations and columns by storing multiple booleans in a single integer.
|
2
|
-
e.g.
|
2
|
+
e.g. true-false-false = 1, false-true-false = 2, true-false-true = 5 (1,2,4,8,..)
|
3
3
|
|
4
4
|
class User < ActiveRecord::Base
|
5
5
|
include Bitfields
|
@@ -9,13 +9,14 @@ e.g. 3 = 1->true 2->true 4->false, 4 = 1->false 2->false 4->true, 5 = 1->true 2-
|
|
9
9
|
user = User.new(:seller => true, :insane => true)
|
10
10
|
user.seller == true
|
11
11
|
user.stupid? == false
|
12
|
-
user.my_bits ==
|
12
|
+
user.my_bits == 3
|
13
13
|
|
14
14
|
- records changes `user.chamges == {:seller => [false, true]}`
|
15
15
|
- adds scopes `User.seller.stupid.first` (deactivate with `bitfield ..., :scopes => false`)
|
16
16
|
- builds sql `User.bitfield_sql(:insane => true, :stupid => false) == 'users.my_bits IN (2, 3)'` (2 and 1+2)
|
17
17
|
- builds not-index-using sql with `bitfield ... ,:query_mode => :bit_operator` and `User.bitfield_sql(:insane => true, :stupid => false) == '(users.my_bits & 3) = 1'`, always slower than IN() sql, since it will not use an existing index (tested for up to 64 values)
|
18
18
|
- builds update sql `User.set_bitfield_sql(:insane => true, :stupid => false) == 'my_bits = (my_bits | 6) - 4'`
|
19
|
+
- **faster sql than any other bitfield lib** through combination of multiple bits into a single sql statement
|
19
20
|
- gives access to bits `User.bitfields[:my_bits][:stupid] == 4`
|
20
21
|
|
21
22
|
Install
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.4
|
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.1.
|
8
|
+
s.version = "0.1.4"
|
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{2010-
|
12
|
+
s.date = %q{2010-04-25}
|
13
13
|
s.email = %q{grosser.michael@gmail.com}
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"README.markdown"
|
data/lib/bitfields.rb
CHANGED
@@ -53,7 +53,9 @@ module Bitfields
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def bitfield_column(bit_name)
|
56
|
-
bitfields.detect{|c, bits| bits.keys.include?(bit_name.to_sym) }
|
56
|
+
found = bitfields.detect{|c, bits| bits.keys.include?(bit_name.to_sym) }
|
57
|
+
raise "Unknown bitfield #{bit_name}" unless found
|
58
|
+
found.first
|
57
59
|
end
|
58
60
|
|
59
61
|
def bitfield_sql(bit_values)
|
data/spec/bitfields_spec.rb
CHANGED
@@ -57,6 +57,14 @@ describe Bitfields do
|
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
|
+
describe :bitfield_column do
|
61
|
+
it "raises a nice error when i use a unknown bitfield" do
|
62
|
+
lambda{
|
63
|
+
User.bitfield_column(:xxx)
|
64
|
+
}.should raise_error(RuntimeError, 'Unknown bitfield xxx')
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
60
68
|
describe 'attribute accessors' do
|
61
69
|
it "has everything on false by default" do
|
62
70
|
User.new.seller.should == false
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 4
|
9
|
+
version: 0.1.4
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Michael Grosser
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-04-25 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|