reallycare_utils 0.0.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/.gitignore +4 -0
- data/Gemfile +7 -0
- data/README.textile +1 -0
- data/Rakefile +9 -0
- data/lib/reallycare_utils/activerecord_extensions.rb +2 -0
- data/lib/reallycare_utils/bitmask.rb +56 -0
- data/lib/reallycare_utils/version.rb +3 -0
- data/lib/reallycare_utils.rb +7 -0
- data/reallycare_utils.gemspec +21 -0
- data/spec/bitmask_spec.rb +72 -0
- data/spec/spec_helper.rb +6 -0
- metadata +70 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.textile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Hello
|
data/Rakefile
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
module ReallycareUtils
|
2
|
+
module Bitmask
|
3
|
+
module ClassMethods
|
4
|
+
def has_bitmask(field, statuses)
|
5
|
+
@@has_bitmask_field = field
|
6
|
+
@@has_bitmask_values = statuses
|
7
|
+
|
8
|
+
define_bitmask_methods
|
9
|
+
end
|
10
|
+
|
11
|
+
def bitmask_value(status_const)
|
12
|
+
return 2**@@has_bitmask_values.index(status_const.to_sym)
|
13
|
+
end
|
14
|
+
|
15
|
+
def define_bitmask_methods
|
16
|
+
define_method "has_#{@@has_bitmask_field}?" do |bitmask_const|
|
17
|
+
if self[@@has_bitmask_field]
|
18
|
+
if bitmask_const.instance_of? Fixnum
|
19
|
+
this_bit = bitmask_const
|
20
|
+
else
|
21
|
+
this_bit = self.class.bitmask_value(bitmask_const)
|
22
|
+
end
|
23
|
+
has_it = (self[@@has_bitmask_field] & this_bit > 0)
|
24
|
+
else
|
25
|
+
has_it = false
|
26
|
+
end
|
27
|
+
has_it
|
28
|
+
end
|
29
|
+
|
30
|
+
define_method "add_#{@@has_bitmask_field}" do |bitmask_const, save_it=false|
|
31
|
+
this_bit = self.class.bitmask_value(bitmask_const)
|
32
|
+
if self[@@has_bitmask_field]
|
33
|
+
self[@@has_bitmask_field] = self[@@has_bitmask_field] + this_bit
|
34
|
+
else
|
35
|
+
self[@@has_bitmask_field] = this_bit
|
36
|
+
end
|
37
|
+
self.save! if save_it
|
38
|
+
end
|
39
|
+
|
40
|
+
define_method "remove_#{@@has_bitmask_field}" do |bitmask_const, save_it=false|
|
41
|
+
this_bit = self.class.bitmask_value(bitmask_const)
|
42
|
+
if self[@@has_bitmask_field]
|
43
|
+
self[@@has_bitmask_field] = self[@@has_bitmask_field] - this_bit
|
44
|
+
self.save! if save_it
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.included(receiver)
|
52
|
+
receiver.extend ClassMethods
|
53
|
+
# receiver.send :include, InstanceMethods
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "reallycare_utils/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "reallycare_utils"
|
7
|
+
s.version = ReallycareUtils::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Mark Chapman", "Andy Jeffries"]
|
10
|
+
s.email = ["mark.chapman@gmail.com", "andy@andyjeffries.co.uk"]
|
11
|
+
s.homepage = ""
|
12
|
+
s.summary = %q{Shared utilities for ReallyCare sites}
|
13
|
+
s.description = %q{A collection of shared utilities for ReallyCare sites}
|
14
|
+
|
15
|
+
s.rubyforge_project = "reallycare_utils"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'spec_helper')
|
2
|
+
|
3
|
+
class TestBitmaskBase
|
4
|
+
def [](name)
|
5
|
+
@attributes ||= {}
|
6
|
+
@attributes[name]
|
7
|
+
end
|
8
|
+
|
9
|
+
def []=(name, value)
|
10
|
+
@attributes ||= {}
|
11
|
+
@attributes[name] = value
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class TestBitmask < TestBitmaskBase
|
16
|
+
include ReallycareUtils::Bitmask
|
17
|
+
has_bitmask :status, [:pending, :new, :finished]
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "Bitmask" do
|
21
|
+
it "should be able to set bitmask constants" do
|
22
|
+
o = TestBitmask.new
|
23
|
+
o.add_status :pending
|
24
|
+
o[:status].should == 1
|
25
|
+
o.add_status :new
|
26
|
+
o[:status].should == 3
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should be able to check if bitmask constants are set" do
|
30
|
+
o = TestBitmask.new
|
31
|
+
o.add_status :pending
|
32
|
+
o.has_status?(:pending).should be_true
|
33
|
+
o.has_status?(:new).should be_false
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should be able to unset bitmask constants" do
|
37
|
+
o = TestBitmask.new
|
38
|
+
o.add_status :pending
|
39
|
+
o.has_status?(:pending).should be_true
|
40
|
+
o.remove_status :pending
|
41
|
+
o.has_status?(:pending).should be_false
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should save when setting if the second parameter is true" do
|
45
|
+
o = TestBitmask.new
|
46
|
+
o.should_receive("save!".to_sym).once
|
47
|
+
o.add_status(:pending, true)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should not save when setting if the second parameter is false or missing" do
|
51
|
+
o = TestBitmask.new
|
52
|
+
o.should_not_receive("save!".to_sym)
|
53
|
+
o.add_status(:pending, false)
|
54
|
+
o.add_status(:pending)
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should save when unsetting if the second parameter is true" do
|
58
|
+
o = TestBitmask.new
|
59
|
+
o.should_receive("save!".to_sym).once
|
60
|
+
o.add_status(:pending, true)
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should not save when unsetting if the second parameter is false or missing" do
|
64
|
+
o = TestBitmask.new
|
65
|
+
o.should_not_receive("save!".to_sym)
|
66
|
+
o.add_status(:pending)
|
67
|
+
o.remove_status(:pending, false)
|
68
|
+
o.add_status(:pending)
|
69
|
+
o.remove_status(:pending)
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: reallycare_utils
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.1
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Mark Chapman
|
9
|
+
- Andy Jeffries
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
|
14
|
+
date: 2011-03-26 23:00:00 +00:00
|
15
|
+
default_executable:
|
16
|
+
dependencies: []
|
17
|
+
|
18
|
+
description: A collection of shared utilities for ReallyCare sites
|
19
|
+
email:
|
20
|
+
- mark.chapman@gmail.com
|
21
|
+
- andy@andyjeffries.co.uk
|
22
|
+
executables: []
|
23
|
+
|
24
|
+
extensions: []
|
25
|
+
|
26
|
+
extra_rdoc_files: []
|
27
|
+
|
28
|
+
files:
|
29
|
+
- .gitignore
|
30
|
+
- Gemfile
|
31
|
+
- README.textile
|
32
|
+
- Rakefile
|
33
|
+
- lib/reallycare_utils.rb
|
34
|
+
- lib/reallycare_utils/activerecord_extensions.rb
|
35
|
+
- lib/reallycare_utils/bitmask.rb
|
36
|
+
- lib/reallycare_utils/version.rb
|
37
|
+
- reallycare_utils.gemspec
|
38
|
+
- spec/bitmask_spec.rb
|
39
|
+
- spec/spec_helper.rb
|
40
|
+
has_rdoc: true
|
41
|
+
homepage: ""
|
42
|
+
licenses: []
|
43
|
+
|
44
|
+
post_install_message:
|
45
|
+
rdoc_options: []
|
46
|
+
|
47
|
+
require_paths:
|
48
|
+
- lib
|
49
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: "0"
|
55
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: "0"
|
61
|
+
requirements: []
|
62
|
+
|
63
|
+
rubyforge_project: reallycare_utils
|
64
|
+
rubygems_version: 1.6.1
|
65
|
+
signing_key:
|
66
|
+
specification_version: 3
|
67
|
+
summary: Shared utilities for ReallyCare sites
|
68
|
+
test_files:
|
69
|
+
- spec/bitmask_spec.rb
|
70
|
+
- spec/spec_helper.rb
|