bitmask_attributes 0.4.0 → 1.0.0
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.
- checksums.yaml +7 -0
- data/.gitignore +3 -1
- data/.rvmrc +1 -1
- data/.travis.yml +14 -0
- data/Appraisals +12 -0
- data/CHANGELOG.rdoc +7 -22
- data/Rakefile +6 -2
- data/bitmask_attributes.gemspec +5 -4
- data/gemfiles/3.1.gemfile +12 -0
- data/gemfiles/3.2.gemfile +12 -0
- data/gemfiles/4.0.gemfile +13 -0
- data/lib/bitmask_attributes.rb +13 -2
- data/lib/bitmask_attributes/definition.rb +4 -1
- data/lib/bitmask_attributes/version.rb +1 -1
- data/test/bitmask_attributes_test.rb +43 -6
- data/test/support/models.rb +4 -0
- data/test/test_helper.rb +1 -1
- metadata +28 -15
- data/Gemfile.lock +0 -59
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 56a66728b3d7243fdee612e23879a0a3f402c3bc
|
4
|
+
data.tar.gz: dd949e03d9c0e71b321f2e2cf5b8fdf5d472a1fb
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 44fd33dc8d30c3ae97f3d214fb3aa54262fbda5e1b614b6a80507c89ad43a1aa01797f89b4d5cb9511651be416f95c7085666868f7e0ad5daf1e16fdec1aa4d9
|
7
|
+
data.tar.gz: 32a51091ce2349650e90f9b24c888319b19928bb08880d245f3fdac74daa33181a6058a86cab9a58d55ad9050a1e7a9dce4d2387980ecf0d28990f48e7326211
|
data/.gitignore
CHANGED
data/.rvmrc
CHANGED
@@ -1 +1 @@
|
|
1
|
-
rvm
|
1
|
+
rvm 2.0.0
|
data/.travis.yml
CHANGED
@@ -2,3 +2,17 @@ script: 'bundle exec rake test'
|
|
2
2
|
language: ruby
|
3
3
|
rvm:
|
4
4
|
- 1.9.3
|
5
|
+
- 2.0.0
|
6
|
+
|
7
|
+
gemfile:
|
8
|
+
- gemfiles/3.0.gemfile
|
9
|
+
- gemfiles/3.1.gemfile
|
10
|
+
- gemfiles/3.2.gemfile
|
11
|
+
- gemfiles/4.0.gemfile
|
12
|
+
|
13
|
+
matrix:
|
14
|
+
exclude:
|
15
|
+
- rvm: 2.0.0
|
16
|
+
gemfile: gemfiles/3.0.gemfile
|
17
|
+
- rvm: 2.0.0
|
18
|
+
gemfile: gemfiles/3.1.gemfile
|
data/Appraisals
ADDED
data/CHANGELOG.rdoc
CHANGED
@@ -1,4 +1,9 @@
|
|
1
|
-
=== Version 0.
|
1
|
+
=== Version 1.0.0 - 2013-11-04
|
2
|
+
|
3
|
+
Fixes and Ruby2/Rails4 compatibility
|
4
|
+
|
5
|
+
|
6
|
+
=== Version 0.4.0 - 2012-12-14
|
2
7
|
|
3
8
|
Adrian Gomez (1):
|
4
9
|
* Fixing issue #22
|
@@ -15,33 +20,13 @@ Dominik Bamberger (5):
|
|
15
20
|
|
16
21
|
François DELFORT (2):
|
17
22
|
* Handle single table inheritance
|
18
|
-
* Fix for handling STI table
|
19
|
-
|
20
|
-
Joel Moss (7):
|
21
|
-
* Merge pull request #17 from teeparham/patch-1
|
22
|
-
* Merge pull request #18 from tight/master
|
23
|
-
* Merge pull request #29 from adimitrov/include-table-name
|
24
|
-
* Merge pull request #33 from teeparham/or_is_null
|
25
|
-
* Merge pull request #30 from pathable/default
|
26
|
-
* Bundle update
|
27
|
-
* Merge branch 'master' of github.com:joelmoss/bitmask_attributes
|
28
|
-
|
29
|
-
Steve Hoeksema (2):
|
30
|
-
* Strip trailing whitespace
|
31
|
-
* Add table name to one scope that missed out
|
32
23
|
|
33
24
|
Tee Parham (2):
|
34
|
-
* update sample controller code
|
35
25
|
* add table name scope to or_is_null_condition
|
36
26
|
|
37
27
|
alexanderd (1):
|
38
28
|
* Include table name in scope definitions
|
39
29
|
|
40
|
-
steve emmons (3):
|
41
|
-
* Merge pull request #26 from b4mboo/inverse_convenience
|
42
|
-
* Merge pull request #25 from b4mboo/raw_bitmask_setter
|
43
|
-
* Merge pull request #23 from Moove-it/master
|
44
|
-
|
45
30
|
|
46
31
|
=== Version 0.3.0 - 2012-04-30 21:36:18 +0100
|
47
32
|
|
@@ -73,7 +58,7 @@ steve emmons (3):
|
|
73
58
|
* Merge pull request #15 from spemmons/master
|
74
59
|
|
75
60
|
|
76
|
-
=== Version 0.2.4 - 2011-11-23
|
61
|
+
=== Version 0.2.4 - 2011-11-23
|
77
62
|
|
78
63
|
Ivan Buiko (3):
|
79
64
|
* No longer validates attribute during migrations
|
data/Rakefile
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
# encoding: UTF-8
|
2
|
-
|
3
|
-
require
|
2
|
+
begin
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'appraisal'
|
5
|
+
rescue LoadError
|
6
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
7
|
+
end
|
4
8
|
Bundler::GemHelper.install_tasks
|
5
9
|
|
6
10
|
require 'rake/testtask'
|
data/bitmask_attributes.gemspec
CHANGED
@@ -8,11 +8,12 @@ Gem::Specification.new do |gem|
|
|
8
8
|
gem.email = "joel@developwithstyle.com"
|
9
9
|
gem.homepage = "http://github.com/joelmoss/bitmask_attributes"
|
10
10
|
gem.authors = ['Joel Moss']
|
11
|
-
|
11
|
+
|
12
12
|
gem.files = `git ls-files`.split("\n")
|
13
13
|
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
14
14
|
gem.require_paths = ['lib']
|
15
15
|
gem.version = BitmaskAttributes::VERSION.dup
|
16
|
-
|
17
|
-
gem.add_dependency 'activerecord', '
|
18
|
-
|
16
|
+
|
17
|
+
gem.add_dependency 'activerecord', '>= 3.1'
|
18
|
+
gem.add_development_dependency "appraisal", "~> 0.5.1"
|
19
|
+
end
|
data/lib/bitmask_attributes.rb
CHANGED
@@ -12,11 +12,16 @@ module BitmaskAttributes
|
|
12
12
|
|
13
13
|
if default = options[:default]
|
14
14
|
after_initialize do
|
15
|
-
send("#{attribute}=", default) unless send("#{attribute}?")
|
15
|
+
send("#{attribute}=", default) unless send("#{attribute}?") || persisted?
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
bitmask_definitions[attribute] = Definition.new(attribute,
|
19
|
+
bitmask_definitions[attribute] = Definition.new(attribute,
|
20
|
+
options[:as].to_a,
|
21
|
+
options[:null].nil? || options[:null],
|
22
|
+
options[:zero_value],
|
23
|
+
&extension)
|
24
|
+
|
20
25
|
bitmask_definitions[attribute].install_on(self)
|
21
26
|
end
|
22
27
|
|
@@ -38,6 +43,12 @@ module BitmaskAttributes
|
|
38
43
|
@bitmasks ||= {}
|
39
44
|
end
|
40
45
|
end
|
46
|
+
|
47
|
+
def reload(*)
|
48
|
+
super
|
49
|
+
self.class.bitmasks.keys.each{|attribute| self.send("reload_#{attribute}")}
|
50
|
+
self
|
51
|
+
end
|
41
52
|
end
|
42
53
|
|
43
54
|
ActiveRecord::Base.send :include, BitmaskAttributes
|
@@ -2,7 +2,7 @@ module BitmaskAttributes
|
|
2
2
|
class Definition
|
3
3
|
attr_reader :attribute, :values, :allow_null, :zero_value, :extension
|
4
4
|
|
5
|
-
def initialize(attribute, values=[],allow_null = true,zero_value = nil, &extension)
|
5
|
+
def initialize(attribute, values=[], allow_null = true, zero_value = nil, &extension)
|
6
6
|
@attribute = attribute
|
7
7
|
@values = values
|
8
8
|
@extension = extension
|
@@ -60,6 +60,9 @@ module BitmaskAttributes
|
|
60
60
|
def #{attribute}
|
61
61
|
@#{attribute} ||= BitmaskAttributes::ValueProxy.new(self, :#{attribute}, &self.class.bitmask_definitions[:#{attribute}].extension)
|
62
62
|
end
|
63
|
+
def reload_#{attribute}
|
64
|
+
@#{attribute} = nil
|
65
|
+
end
|
63
66
|
)
|
64
67
|
end
|
65
68
|
|
@@ -2,7 +2,7 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
class BitmaskAttributesTest < ActiveSupport::TestCase
|
4
4
|
|
5
|
-
def self.context_with_classes(label,campaign_class,company_class)
|
5
|
+
def self.context_with_classes(label, campaign_class, company_class)
|
6
6
|
context label do
|
7
7
|
setup do
|
8
8
|
@campaign_class = campaign_class
|
@@ -139,6 +139,19 @@ class BitmaskAttributesTest < ActiveSupport::TestCase
|
|
139
139
|
assert_stored campaign, :web, :print
|
140
140
|
end
|
141
141
|
|
142
|
+
should "update bitmask values currently in the database with reload" do
|
143
|
+
instance1 = @campaign_class.create(:medium => [:web, :print])
|
144
|
+
instance2 = @campaign_class.find(instance1.id)
|
145
|
+
assert instance1.id == instance2.id
|
146
|
+
assert instance1.object_id != instance2.object_id
|
147
|
+
assert instance1.update_attributes(:medium => [:email])
|
148
|
+
|
149
|
+
assert_equal [:web, :print],instance2.medium
|
150
|
+
|
151
|
+
assert_equal @campaign_class,instance2.reload.class
|
152
|
+
assert_equal [:email],instance2.medium
|
153
|
+
end
|
154
|
+
|
142
155
|
context "checking" do
|
143
156
|
setup { @campaign = @campaign_class.new(:medium => [:web, :print]) }
|
144
157
|
|
@@ -240,7 +253,7 @@ class BitmaskAttributesTest < ActiveSupport::TestCase
|
|
240
253
|
assert campaign.save
|
241
254
|
|
242
255
|
assert_equal(
|
243
|
-
@campaign_class.
|
256
|
+
@campaign_class.where('medium & ? <> 0', @campaign_class.bitmask_for_medium(:print)).to_a,
|
244
257
|
@campaign_class.medium_for_print
|
245
258
|
)
|
246
259
|
|
@@ -305,9 +318,33 @@ class BitmaskAttributesTest < ActiveSupport::TestCase
|
|
305
318
|
assert_equal DefaultValue.new(:default_sym => :x).default_sym, [:x]
|
306
319
|
assert_equal DefaultValue.new(:default_array => [:x]).default_array, [:x]
|
307
320
|
end
|
321
|
+
|
322
|
+
should "save empty bitmask when default defined" do
|
323
|
+
default = DefaultValue.create
|
324
|
+
assert_equal [:y], default.default_sym
|
325
|
+
default.default_sym = []
|
326
|
+
default.save
|
327
|
+
assert_empty default.default_sym
|
328
|
+
default2 = DefaultValue.find(default.id)
|
329
|
+
assert_empty default2.default_sym
|
330
|
+
end
|
308
331
|
|
309
|
-
context_with_classes 'Campaign with null attributes',CampaignWithNull,CompanyWithNull
|
310
|
-
context_with_classes 'Campaign without null attributes',CampaignWithoutNull,CompanyWithoutNull
|
311
|
-
context_with_classes 'SubCampaign with null attributes',SubCampaignWithNull,CompanyWithNull
|
312
|
-
context_with_classes 'SubCampaign without null attributes',SubCampaignWithoutNull,CompanyWithoutNull
|
332
|
+
context_with_classes 'Campaign with null attributes', CampaignWithNull, CompanyWithNull
|
333
|
+
context_with_classes 'Campaign without null attributes', CampaignWithoutNull, CompanyWithoutNull
|
334
|
+
context_with_classes 'SubCampaign with null attributes', SubCampaignWithNull, CompanyWithNull
|
335
|
+
context_with_classes 'SubCampaign without null attributes', SubCampaignWithoutNull, CompanyWithoutNull
|
336
|
+
|
337
|
+
should "allow subclasses to have different values for bitmask than parent" do
|
338
|
+
a = CampaignWithNull.new
|
339
|
+
b = SubCampaignWithNull.new
|
340
|
+
a.different_per_class = [:set_for_parent]
|
341
|
+
b.different_per_class = [:set_for_sub]
|
342
|
+
a.save!
|
343
|
+
b.save!
|
344
|
+
a.reload
|
345
|
+
b.reload
|
346
|
+
assert_equal a.different_per_class, [:set_for_parent]
|
347
|
+
assert_equal b.different_per_class, [:set_for_sub]
|
348
|
+
end
|
349
|
+
|
313
350
|
end
|
data/test/support/models.rb
CHANGED
@@ -2,6 +2,7 @@ ActiveRecord::Schema.define do
|
|
2
2
|
create_table :campaign_with_nulls do |t|
|
3
3
|
t.integer :company_id
|
4
4
|
t.integer :medium, :allow_zero, :misc, :Legacy
|
5
|
+
t.integer :different_per_class
|
5
6
|
t.string :type # STI
|
6
7
|
end
|
7
8
|
create_table :company_with_nulls do |t|
|
@@ -10,6 +11,7 @@ ActiveRecord::Schema.define do
|
|
10
11
|
create_table :campaign_without_nulls do |t|
|
11
12
|
t.integer :company_id
|
12
13
|
t.integer :medium, :allow_zero, :misc, :Legacy, :null => false, :default => 0
|
14
|
+
t.integer :different_per_class
|
13
15
|
t.string :type # STI
|
14
16
|
end
|
15
17
|
create_table :company_without_nulls do |t|
|
@@ -30,6 +32,7 @@ class CampaignWithNull < ActiveRecord::Base
|
|
30
32
|
belongs_to :company,:class_name => 'CompanyWithNull'
|
31
33
|
bitmask :medium, :as => [:web, :print, :email, :phone]
|
32
34
|
bitmask :allow_zero, :as => [:one, :two, :three], :zero_value => :none
|
35
|
+
bitmask :different_per_class, :as => [:set_for_parent]
|
33
36
|
bitmask :misc, :as => %w(some useless values) do
|
34
37
|
def worked?
|
35
38
|
true
|
@@ -39,6 +42,7 @@ class CampaignWithNull < ActiveRecord::Base
|
|
39
42
|
end
|
40
43
|
|
41
44
|
class SubCampaignWithNull < CampaignWithNull
|
45
|
+
bitmask :different_per_class, :as => [:set_for_sub]
|
42
46
|
end
|
43
47
|
|
44
48
|
class CompanyWithoutNull < ActiveRecord::Base
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,32 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bitmask_attributes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Joel Moss
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2013-11-03 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: activerecord
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version: '3.
|
19
|
+
version: '3.1'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.1'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: appraisal
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.5.1
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
37
|
requirements:
|
27
38
|
- - ~>
|
28
39
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
40
|
+
version: 0.5.1
|
30
41
|
description:
|
31
42
|
email: joel@developwithstyle.com
|
32
43
|
executables: []
|
@@ -37,9 +48,9 @@ files:
|
|
37
48
|
- .gitignore
|
38
49
|
- .rvmrc
|
39
50
|
- .travis.yml
|
51
|
+
- Appraisals
|
40
52
|
- CHANGELOG.rdoc
|
41
53
|
- Gemfile
|
42
|
-
- Gemfile.lock
|
43
54
|
- LICENSE
|
44
55
|
- README.rdoc
|
45
56
|
- Rakefile
|
@@ -76,6 +87,9 @@ files:
|
|
76
87
|
- doc/panel/index.html
|
77
88
|
- doc/panel/links.html
|
78
89
|
- doc/panel/tree.js
|
90
|
+
- gemfiles/3.1.gemfile
|
91
|
+
- gemfiles/3.2.gemfile
|
92
|
+
- gemfiles/4.0.gemfile
|
79
93
|
- lib/bitmask_attributes.rb
|
80
94
|
- lib/bitmask_attributes/definition.rb
|
81
95
|
- lib/bitmask_attributes/value_proxy.rb
|
@@ -86,27 +100,26 @@ files:
|
|
86
100
|
- test/test_helper.rb
|
87
101
|
homepage: http://github.com/joelmoss/bitmask_attributes
|
88
102
|
licenses: []
|
103
|
+
metadata: {}
|
89
104
|
post_install_message:
|
90
105
|
rdoc_options: []
|
91
106
|
require_paths:
|
92
107
|
- lib
|
93
108
|
required_ruby_version: !ruby/object:Gem::Requirement
|
94
|
-
none: false
|
95
109
|
requirements:
|
96
|
-
- -
|
110
|
+
- - '>='
|
97
111
|
- !ruby/object:Gem::Version
|
98
112
|
version: '0'
|
99
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
|
-
none: false
|
101
114
|
requirements:
|
102
|
-
- -
|
115
|
+
- - '>='
|
103
116
|
- !ruby/object:Gem::Version
|
104
117
|
version: '0'
|
105
118
|
requirements: []
|
106
119
|
rubyforge_project:
|
107
|
-
rubygems_version: 1.
|
120
|
+
rubygems_version: 2.1.2
|
108
121
|
signing_key:
|
109
|
-
specification_version:
|
122
|
+
specification_version: 4
|
110
123
|
summary: Simple bitmask attribute support for ActiveRecord
|
111
124
|
test_files:
|
112
125
|
- test/bitmask_attributes/definition_test.rb
|
data/Gemfile.lock
DELETED
@@ -1,59 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
bitmask_attributes (0.3.0)
|
5
|
-
activerecord (~> 3.0)
|
6
|
-
|
7
|
-
GEM
|
8
|
-
remote: http://rubygems.org/
|
9
|
-
specs:
|
10
|
-
activemodel (3.2.9)
|
11
|
-
activesupport (= 3.2.9)
|
12
|
-
builder (~> 3.0.0)
|
13
|
-
activerecord (3.2.9)
|
14
|
-
activemodel (= 3.2.9)
|
15
|
-
activesupport (= 3.2.9)
|
16
|
-
arel (~> 3.0.2)
|
17
|
-
tzinfo (~> 0.3.29)
|
18
|
-
activesupport (3.2.9)
|
19
|
-
i18n (~> 0.6)
|
20
|
-
multi_json (~> 1.0)
|
21
|
-
ansi (1.4.3)
|
22
|
-
arel (3.0.2)
|
23
|
-
bourne (1.1.2)
|
24
|
-
mocha (= 0.10.5)
|
25
|
-
builder (3.0.4)
|
26
|
-
i18n (0.6.1)
|
27
|
-
json (1.7.5)
|
28
|
-
metaclass (0.0.1)
|
29
|
-
mocha (0.10.5)
|
30
|
-
metaclass (~> 0.0.1)
|
31
|
-
multi_json (1.5.0)
|
32
|
-
rake (10.0.3)
|
33
|
-
rdoc (3.12)
|
34
|
-
json (~> 1.4)
|
35
|
-
sdoc (0.3.20)
|
36
|
-
json (>= 1.1.3)
|
37
|
-
rdoc (~> 3.10)
|
38
|
-
shoulda (3.3.2)
|
39
|
-
shoulda-context (~> 1.0.1)
|
40
|
-
shoulda-matchers (~> 1.4.1)
|
41
|
-
shoulda-context (1.0.1)
|
42
|
-
shoulda-matchers (1.4.2)
|
43
|
-
activesupport (>= 3.0.0)
|
44
|
-
bourne (~> 1.1.2)
|
45
|
-
sqlite3 (1.3.6)
|
46
|
-
turn (0.9.6)
|
47
|
-
ansi
|
48
|
-
tzinfo (0.3.35)
|
49
|
-
|
50
|
-
PLATFORMS
|
51
|
-
ruby
|
52
|
-
|
53
|
-
DEPENDENCIES
|
54
|
-
bitmask_attributes!
|
55
|
-
rake
|
56
|
-
sdoc
|
57
|
-
shoulda
|
58
|
-
sqlite3 (>= 1.3.5)
|
59
|
-
turn
|