mongoid_bitfield 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/.rvmrc ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env bash
2
+ environment_id="ruby-1.9.3-p0@mongoid_bitfield"
3
+
4
+ if [[ -d "${rvm_path:-$HOME/.rvm}/environments" \
5
+ && -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
6
+ then
7
+ \. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
8
+
9
+ if [[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]]
10
+ then
11
+ . "${rvm_path:-$HOME/.rvm}/hooks/after_use"
12
+ fi
13
+ else
14
+ # If the environment file has not yet been created, use the RVM CLI to select.
15
+ if ! rvm --create use "$environment_id"
16
+ then
17
+ echo "Failed to create RVM environment '${environment_id}'."
18
+ return 1
19
+ fi
20
+ fi
21
+
22
+ if [[ $- == *i* ]] # check for interactive shells
23
+ then
24
+ echo "Using: $(tput setaf 2)$GEM_HOME$(tput sgr0)" # show the user the ruby and gemset they are using in green
25
+ else
26
+ echo "Using: $GEM_HOME" # don't use colors in interactive shells
27
+ fi
data/.travis.yml ADDED
@@ -0,0 +1,17 @@
1
+ rvm:
2
+ - 1.9.3
3
+ - 1.9.2
4
+ - 1.8.7
5
+ - ree
6
+ - ruby-head
7
+ - rbx-18mode
8
+ - rbx-19mode
9
+
10
+ branches:
11
+ only:
12
+ - develop
13
+ - master
14
+
15
+ notifications:
16
+ email:
17
+ - chris@dinarrr.com
data/Gemfile ADDED
@@ -0,0 +1,16 @@
1
+ # encoding: utf-8
2
+ source "https://rubygems.org"
3
+
4
+ gem "bson_ext"
5
+ gem "mongoid"
6
+ gem "activesupport"
7
+
8
+ group :development, :test do
9
+ gem "rake"
10
+ gem "rspec"
11
+ gem "database_cleaner"
12
+ gem "jeweler"
13
+
14
+ gem "pry"
15
+ gem "pry-doc"
16
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,67 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ activemodel (3.2.1)
5
+ activesupport (= 3.2.1)
6
+ builder (~> 3.0.0)
7
+ activesupport (3.2.1)
8
+ i18n (~> 0.6)
9
+ multi_json (~> 1.0)
10
+ bson (1.5.2)
11
+ bson_ext (1.5.2)
12
+ bson (= 1.5.2)
13
+ builder (3.0.0)
14
+ coderay (1.0.5)
15
+ database_cleaner (0.7.1)
16
+ diff-lcs (1.1.3)
17
+ git (1.2.5)
18
+ i18n (0.6.0)
19
+ jeweler (1.8.3)
20
+ bundler (~> 1.0)
21
+ git (>= 1.2.5)
22
+ rake
23
+ rdoc
24
+ json (1.6.5)
25
+ method_source (0.7.0)
26
+ mongo (1.5.2)
27
+ bson (= 1.5.2)
28
+ mongoid (2.4.4)
29
+ activemodel (~> 3.1)
30
+ mongo (~> 1.3)
31
+ tzinfo (~> 0.3.22)
32
+ multi_json (1.1.0)
33
+ pry (0.9.8.2)
34
+ coderay (~> 1.0.5)
35
+ method_source (~> 0.7)
36
+ slop (>= 2.4.4, < 3)
37
+ pry-doc (0.4.0)
38
+ pry (>= 0.9.0)
39
+ yard (~> 0.7.4)
40
+ rake (0.9.2.2)
41
+ rdoc (3.12)
42
+ json (~> 1.4)
43
+ rspec (2.8.0)
44
+ rspec-core (~> 2.8.0)
45
+ rspec-expectations (~> 2.8.0)
46
+ rspec-mocks (~> 2.8.0)
47
+ rspec-core (2.8.0)
48
+ rspec-expectations (2.8.0)
49
+ diff-lcs (~> 1.1.2)
50
+ rspec-mocks (2.8.0)
51
+ slop (2.4.4)
52
+ tzinfo (0.3.31)
53
+ yard (0.7.5)
54
+
55
+ PLATFORMS
56
+ ruby
57
+
58
+ DEPENDENCIES
59
+ activesupport
60
+ bson_ext
61
+ database_cleaner
62
+ jeweler
63
+ mongoid
64
+ pry
65
+ pry-doc
66
+ rake
67
+ rspec
data/LICENSE ADDED
@@ -0,0 +1,7 @@
1
+ Copyright (c) 2012 Christoph 'asaaki' Grabo
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
+
5
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6
+
7
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,66 @@
1
+ # Mongoid::Bitfield
2
+
3
+ ## About
4
+
5
+ This tiny gem provides a bitfield or a collection of boolean bits/flags.
6
+
7
+ This bitfield will be stored as an integer value in the mongodb database.
8
+
9
+ ## Install
10
+
11
+ ```shell
12
+ gem install mongoid_bitfield
13
+ ```
14
+
15
+ or
16
+
17
+ Gemfile:
18
+
19
+ ```ruby
20
+ gem "mongoid_bitfield"
21
+ ```
22
+
23
+ ## Usage
24
+
25
+ ### Model setup
26
+
27
+ ```ruby
28
+ class User
29
+ include Mongoid::Document
30
+ include Mongoid::Bitfield
31
+
32
+ bitfield :flags, :is_admin, :adult, :drinker
33
+ end
34
+ ```
35
+
36
+ ### Instance
37
+
38
+ **without automatic saving**
39
+
40
+ ```ruby
41
+ user = User.new
42
+
43
+ user.is_admin #=> false
44
+
45
+ user.is_admin = true
46
+
47
+ user.is_admin #=> true
48
+ ```
49
+
50
+ **atomic saving of changes**
51
+
52
+ ```ruby
53
+ user = User.create!
54
+
55
+ user.drinker_enable!
56
+
57
+ user.reload
58
+
59
+ user.drinker #=> true
60
+ ```
61
+
62
+ ## License
63
+
64
+ MIT/X11
65
+
66
+ Copyright (c) 2012 Christoph 'asaaki' Grabo
data/Rakefile ADDED
@@ -0,0 +1,35 @@
1
+ # encoding: utf-8
2
+ $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
3
+
4
+ require "rubygems"
5
+ require "bundler"
6
+ begin
7
+ Bundler.setup(:default, :development)
8
+ rescue Bundler::BundlerError => e
9
+ $stderr.puts e.message
10
+ $stderr.puts "Run `bundle install` to install missing gems"
11
+ exit e.status_code
12
+ end
13
+ require "rake"
14
+ require "jeweler"
15
+ require "rspec/core"
16
+ require "rspec/core/rake_task"
17
+ require "mongoid/bitfield/version"
18
+
19
+ Jeweler::Tasks.new do |gem|
20
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
21
+ gem.name = "mongoid_bitfield"
22
+ gem.version = Mongoid::Bitfield::VERSION
23
+ gem.homepage = "http://github.com/asaaki/mongoid_bitfield"
24
+ gem.license = "MIT"
25
+ gem.summary = %Q{Mongoid::Bitfield stores boolean flags as single property in DB.}
26
+ gem.description = %Q{Mongoid::Bitfield stores boolean flags as single property in MongoDB.}
27
+ gem.email = "chris@dinarrr.com"
28
+ gem.authors = ["Christoph Grabo"]
29
+ # dependencies defined in Gemfile
30
+ end
31
+ Jeweler::RubygemsDotOrgTasks.new
32
+
33
+ RSpec::Core::RakeTask.new(:spec)
34
+
35
+ task :default => :spec
@@ -0,0 +1,42 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Bitfield
4
+ extend ActiveSupport::Concern
5
+
6
+ module ClassMethods
7
+
8
+ def bitfield fieldname, *bits
9
+ field fieldname.to_sym, :type => Integer
10
+
11
+ bits.each do |bitname|
12
+ define_method bitname do
13
+ current = send(fieldname.to_sym) || 0
14
+ current[bits.index(bitname.to_sym)] == 1 ? true : false
15
+ end
16
+
17
+ define_method :"#{bitname}=" do |boolean|
18
+ unless boolean == send(bitname.to_sym)
19
+ cur_value = send(fieldname.to_sym) || 0
20
+ bit_value = (1 << bits.index(bitname.to_sym))
21
+ new_value = (cur_value ^ bit_value)
22
+ send(:"#{fieldname}=", new_value)
23
+ end
24
+ end
25
+
26
+ define_method :"#{bitname}_enable!" do
27
+ send(:"#{bitname}=", true)
28
+ set(fieldname.to_sym, (send(fieldname.to_sym) || 0))
29
+ end
30
+
31
+ define_method :"#{bitname}_disable!" do
32
+ send(:"#{bitname}=", false)
33
+ set(fieldname.to_sym, (send(fieldname.to_sym) || 0))
34
+ end
35
+ end
36
+
37
+ end
38
+
39
+ end
40
+
41
+ end
42
+ end
@@ -0,0 +1,6 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Bitfield
4
+ VERSION = "0.0.1"
5
+ end
6
+ end
@@ -0,0 +1,2 @@
1
+ # encoding: utf-8
2
+ require "mongoid/bitfield"
@@ -0,0 +1,77 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "mongoid_bitfield"
8
+ s.version = "0.0.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Christoph Grabo"]
12
+ s.date = "2012-02-19"
13
+ s.description = "Mongoid::Bitfield stores boolean flags as single property in MongoDB."
14
+ s.email = "chris@dinarrr.com"
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.md"
18
+ ]
19
+ s.files = [
20
+ ".rspec",
21
+ ".rvmrc",
22
+ ".travis.yml",
23
+ "Gemfile",
24
+ "Gemfile.lock",
25
+ "LICENSE",
26
+ "README.md",
27
+ "Rakefile",
28
+ "lib/mongoid/bitfield.rb",
29
+ "lib/mongoid/bitfield/version.rb",
30
+ "lib/mongoid_bitfield.rb",
31
+ "mongoid_bitfield.gemspec",
32
+ "spec/mongoid_bitfield_spec.rb",
33
+ "spec/spec_helper.rb"
34
+ ]
35
+ s.homepage = "http://github.com/asaaki/mongoid_bitfield"
36
+ s.licenses = ["MIT"]
37
+ s.require_paths = ["lib"]
38
+ s.rubygems_version = "1.8.15"
39
+ s.summary = "Mongoid::Bitfield stores boolean flags as single property in DB."
40
+
41
+ if s.respond_to? :specification_version then
42
+ s.specification_version = 3
43
+
44
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
45
+ s.add_runtime_dependency(%q<bson_ext>, [">= 0"])
46
+ s.add_runtime_dependency(%q<mongoid>, [">= 0"])
47
+ s.add_runtime_dependency(%q<activesupport>, [">= 0"])
48
+ s.add_development_dependency(%q<rake>, [">= 0"])
49
+ s.add_development_dependency(%q<rspec>, [">= 0"])
50
+ s.add_development_dependency(%q<database_cleaner>, [">= 0"])
51
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
52
+ s.add_development_dependency(%q<pry>, [">= 0"])
53
+ s.add_development_dependency(%q<pry-doc>, [">= 0"])
54
+ else
55
+ s.add_dependency(%q<bson_ext>, [">= 0"])
56
+ s.add_dependency(%q<mongoid>, [">= 0"])
57
+ s.add_dependency(%q<activesupport>, [">= 0"])
58
+ s.add_dependency(%q<rake>, [">= 0"])
59
+ s.add_dependency(%q<rspec>, [">= 0"])
60
+ s.add_dependency(%q<database_cleaner>, [">= 0"])
61
+ s.add_dependency(%q<jeweler>, [">= 0"])
62
+ s.add_dependency(%q<pry>, [">= 0"])
63
+ s.add_dependency(%q<pry-doc>, [">= 0"])
64
+ end
65
+ else
66
+ s.add_dependency(%q<bson_ext>, [">= 0"])
67
+ s.add_dependency(%q<mongoid>, [">= 0"])
68
+ s.add_dependency(%q<activesupport>, [">= 0"])
69
+ s.add_dependency(%q<rake>, [">= 0"])
70
+ s.add_dependency(%q<rspec>, [">= 0"])
71
+ s.add_dependency(%q<database_cleaner>, [">= 0"])
72
+ s.add_dependency(%q<jeweler>, [">= 0"])
73
+ s.add_dependency(%q<pry>, [">= 0"])
74
+ s.add_dependency(%q<pry-doc>, [">= 0"])
75
+ end
76
+ end
77
+
@@ -0,0 +1,67 @@
1
+ # encoding: utf-8
2
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
3
+
4
+ class TestDoc
5
+ include Mongoid::Document
6
+ include Mongoid::Bitfield
7
+
8
+ bitfield :flags, :is_admin, :adult, :drinker
9
+ end
10
+
11
+ describe Mongoid::Bitfield do
12
+
13
+ let(:doc) { TestDoc.new }
14
+
15
+ it ".bitfield sets a mongoid_field with provided name" do
16
+ doc.should respond_to(:flags)
17
+ doc.should respond_to(:flags=)
18
+ end
19
+
20
+ it ".bitfield sets getters and setters for each provided bit" do
21
+ [:is_admin, :adult, :drinker].each do |bit|
22
+ doc.should respond_to(bit)
23
+ doc.should respond_to(:"#{bit}=")
24
+ end
25
+ end
26
+
27
+ context "setting and getting bits" do
28
+ it "sets a single bit correctly" do
29
+ doc.is_admin = true
30
+ doc.flags.should == 1 # is_admin is first bit => 1
31
+ end
32
+
33
+ it "sets multiple bits correctly" do
34
+ doc.is_admin = true
35
+ doc.drinker = true
36
+ doc.flags.should == (1 + 4) # is_admin = 1, drinker = 4
37
+ end
38
+
39
+ it "gets a single bit" do
40
+ doc.adult = true
41
+ doc.is_admin.should be_false
42
+ doc.drinker.should be_false
43
+ doc.adult.should be_true
44
+ end
45
+ end
46
+
47
+ context "enabler and disabler" do
48
+ before do
49
+ TestDoc.destroy_all
50
+ end
51
+
52
+ it "enables a flag and save this state (atomically!)" do
53
+ td = TestDoc.create!(:flags => 0)
54
+ td.is_admin_enable!
55
+
56
+ TestDoc.first.is_admin.should be_true
57
+ end
58
+
59
+ it "disables a flag and save this state (atomically!)" do
60
+ td = TestDoc.create!(:flags => (1+2+4)) # all flags enabled
61
+ td.drinker_disable!
62
+
63
+ TestDoc.first.drinker.should be_false
64
+ end
65
+ end
66
+
67
+ end
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+
3
+ $LOAD_PATH.unshift(File.expand_path("../../lib",__FILE__))
4
+
5
+ require "database_cleaner"
6
+ require "mongoid"
7
+ require "mongoid_bitfield"
8
+
9
+ RSpec.configure do |config|
10
+ config.before(:suite) do
11
+ DatabaseCleaner.strategy = :truncation
12
+ end
13
+
14
+ config.after(:each) do
15
+ DatabaseCleaner.clean
16
+ end
17
+ end
18
+
19
+ Mongoid.configure do |config|
20
+ config.master = Mongo::Connection.new.db("mongoid_bitfield_test")
21
+ end
metadata ADDED
@@ -0,0 +1,163 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mongoid_bitfield
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Christoph Grabo
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-02-19 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bson_ext
16
+ requirement: &23155860 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *23155860
25
+ - !ruby/object:Gem::Dependency
26
+ name: mongoid
27
+ requirement: &23155240 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *23155240
36
+ - !ruby/object:Gem::Dependency
37
+ name: activesupport
38
+ requirement: &23154700 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *23154700
47
+ - !ruby/object:Gem::Dependency
48
+ name: rake
49
+ requirement: &23170040 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *23170040
58
+ - !ruby/object:Gem::Dependency
59
+ name: rspec
60
+ requirement: &23168780 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *23168780
69
+ - !ruby/object:Gem::Dependency
70
+ name: database_cleaner
71
+ requirement: &23167480 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *23167480
80
+ - !ruby/object:Gem::Dependency
81
+ name: jeweler
82
+ requirement: &23166720 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *23166720
91
+ - !ruby/object:Gem::Dependency
92
+ name: pry
93
+ requirement: &23166180 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *23166180
102
+ - !ruby/object:Gem::Dependency
103
+ name: pry-doc
104
+ requirement: &23165580 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: *23165580
113
+ description: Mongoid::Bitfield stores boolean flags as single property in MongoDB.
114
+ email: chris@dinarrr.com
115
+ executables: []
116
+ extensions: []
117
+ extra_rdoc_files:
118
+ - LICENSE
119
+ - README.md
120
+ files:
121
+ - .rspec
122
+ - .rvmrc
123
+ - .travis.yml
124
+ - Gemfile
125
+ - Gemfile.lock
126
+ - LICENSE
127
+ - README.md
128
+ - Rakefile
129
+ - lib/mongoid/bitfield.rb
130
+ - lib/mongoid/bitfield/version.rb
131
+ - lib/mongoid_bitfield.rb
132
+ - mongoid_bitfield.gemspec
133
+ - spec/mongoid_bitfield_spec.rb
134
+ - spec/spec_helper.rb
135
+ homepage: http://github.com/asaaki/mongoid_bitfield
136
+ licenses:
137
+ - MIT
138
+ post_install_message:
139
+ rdoc_options: []
140
+ require_paths:
141
+ - lib
142
+ required_ruby_version: !ruby/object:Gem::Requirement
143
+ none: false
144
+ requirements:
145
+ - - ! '>='
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ segments:
149
+ - 0
150
+ hash: 1866884813548414577
151
+ required_rubygems_version: !ruby/object:Gem::Requirement
152
+ none: false
153
+ requirements:
154
+ - - ! '>='
155
+ - !ruby/object:Gem::Version
156
+ version: '0'
157
+ requirements: []
158
+ rubyforge_project:
159
+ rubygems_version: 1.8.15
160
+ signing_key:
161
+ specification_version: 3
162
+ summary: Mongoid::Bitfield stores boolean flags as single property in DB.
163
+ test_files: []