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 CHANGED
@@ -1 +1 @@
1
- 0.2.0
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
- # puts sql[0..100]
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.count sql
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.0"
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-19}
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
@@ -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
@@ -5,6 +5,7 @@ if ENV['VERSION']
5
5
  end
6
6
  $LOAD_PATH << 'lib'
7
7
  require 'bitfields'
8
+ require 'timeout'
8
9
 
9
10
  require 'active_record'
10
11
  puts "Using ActiveRecord #{ActiveRecord::VERSION::STRING}"
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: 23
4
+ hash: 21
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 0
10
- version: 0.2.0
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-19 00:00:00 +01:00
18
+ date: 2011-01-22 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies: []
21
21