bitmask_attributes 0.3.0 → 0.4.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.
@@ -1,3 +1,48 @@
1
+ === Version 0.4.0 - 2012-12-14 19:37:49 +0000
2
+
3
+ Adrian Gomez (1):
4
+ * Fixing issue #22
5
+
6
+ Brad Dunbar (1):
7
+ * Add default option.
8
+
9
+ Dominik Bamberger (5):
10
+ * Introduce raw bitmask setter.
11
+ * Ensure unsupported values for raw bitmasks raise an exception
12
+ * First reset instance variable then write attribute.
13
+ * Introduce inverse convenience class method
14
+ * Allow only valid entries when setting raw bitmask values directly
15
+
16
+ François DELFORT (2):
17
+ * 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
+
33
+ Tee Parham (2):
34
+ * update sample controller code
35
+ * add table name scope to or_is_null_condition
36
+
37
+ alexanderd (1):
38
+ * Include table name in scope definitions
39
+
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
+
1
46
  === Version 0.3.0 - 2012-04-30 21:36:18 +0100
2
47
 
3
48
  Aaron Hamid (1):
@@ -9,42 +54,17 @@ Andre Duffeck (1):
9
54
  Ivan Buiko (1):
10
55
  * Adding retrieval by exact value
11
56
 
12
- Joel Moss (9):
13
- * Merge pull request #6 from incandescent/fix-scope-proc
14
- * Merge pull request #4 from SUSE/fix_values_for
15
- * Bundle update
16
- * Adding retrieval by exact value
17
- * Merge branch 'retrieval-by-exact-value'
18
- * Resolved merge conflict
19
- * Merge pull request #9 from numerex/master
20
- * Merge pull request #13 from spemmons/master
21
- * Merge pull request #16 from spemmons/master
22
-
23
57
  Sebastian Borrazas (1):
24
58
  * Not raising exception when the bitmask column is not found, since its adding it on a migration
25
59
 
26
60
  spemmons (22):
27
61
  * detect whether or not nulls are possible with an attribute and remove OR conditions checking if it is null or not
28
- * ignore RubyMine info
29
- * merge changes with joel moss for scopes
30
62
  * check for model not being ready when creating scopes
31
63
  * support nulls with an explicit attribute, not by inspecting the model due to preloading issues
32
- * add documentation for the :null option
33
64
  * support multiple values in the "without_..." scope that excludes match for of any of the bits; previously 2nd and following values were ignored
34
- * update documentation to reflect support for multiple arguments to "without_..."
35
- * update documentation to reflect support for multiple arguments to "without_..."
36
- * update documentation to reflect support for multiple arguments to "without_..."
37
- * added tests to verify the validity of zykadelic's complaint that "with_" scopes were improperly including "OR IS NOT NULL" and fixed the code by removing the condition in this case
38
65
  * DRY-up scope expressions, standardizing on "no_" and "bitmask_for_...(*values)" instead of repeating more complex calculations; also found another example of zykadelic's complaint with "with_any_" that is fixed and has tests
39
66
  * add travis configuration file
40
- * follow buffpojken in forcing string-interpolated model to work in global scope
41
- * Merge branch 'master' of github.com:spemmons/bitmask_attributes
42
- * remove out-dated helpers that, although no longer used, were being loaded by Travis-CI and failing
43
- * clarify travis config to fix failing CI build that works locally
44
- * apparently 1.9.2 doesn't work... will figure out why later
45
- * add :zero option and tests
46
- * check for a string match instead of a symbol to allow values arriving from web forms and services to match properly
47
- * added documentation for the :zero attribute
67
+ * add :zero_value option and tests
48
68
  * rename :zero to :zero_value for clarity
49
69
 
50
70
  steve emmons (3):
@@ -65,3 +85,4 @@ Joel Moss (3):
65
85
 
66
86
 
67
87
 
88
+
@@ -1,40 +1,51 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bitmask_attributes (0.2.4)
4
+ bitmask_attributes (0.3.0)
5
5
  activerecord (~> 3.0)
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
9
9
  specs:
10
- activemodel (3.2.2)
11
- activesupport (= 3.2.2)
10
+ activemodel (3.2.9)
11
+ activesupport (= 3.2.9)
12
12
  builder (~> 3.0.0)
13
- activerecord (3.2.2)
14
- activemodel (= 3.2.2)
15
- activesupport (= 3.2.2)
13
+ activerecord (3.2.9)
14
+ activemodel (= 3.2.9)
15
+ activesupport (= 3.2.9)
16
16
  arel (~> 3.0.2)
17
17
  tzinfo (~> 0.3.29)
18
- activesupport (3.2.2)
18
+ activesupport (3.2.9)
19
19
  i18n (~> 0.6)
20
20
  multi_json (~> 1.0)
21
- ansi (1.4.2)
21
+ ansi (1.4.3)
22
22
  arel (3.0.2)
23
- builder (3.0.0)
24
- i18n (0.6.0)
25
- json (1.6.5)
26
- multi_json (1.1.0)
27
- rake (0.9.2.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)
28
33
  rdoc (3.12)
29
34
  json (~> 1.4)
30
- sdoc (0.3.16)
35
+ sdoc (0.3.20)
31
36
  json (>= 1.1.3)
32
37
  rdoc (~> 3.10)
33
- shoulda (2.11.3)
34
- sqlite3 (1.3.5)
35
- turn (0.8.3)
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)
36
47
  ansi
37
- tzinfo (0.3.32)
48
+ tzinfo (0.3.35)
38
49
 
39
50
  PLATFORMS
40
51
  ruby
@@ -137,7 +137,7 @@ will not change the attribute. For example:
137
137
  In controller...
138
138
  def update
139
139
  @some_model = SomeModel.find(params[:id])
140
- params[:some_attribute] ||= []
140
+ params[:some_model][:some_attribute] ||= []
141
141
  @some_model.update_attributes(params)
142
142
  end
143
143
 
@@ -9,18 +9,35 @@ module BitmaskAttributes
9
9
  unless options[:as] && options[:as].kind_of?(Array)
10
10
  raise ArgumentError, "Must provide an Array :as option"
11
11
  end
12
- bitmask_definitions[attribute] = Definition.new(attribute, options[:as].to_a,options[:null].nil? || options[:null],options[:zero_value],&extension)
12
+
13
+ if default = options[:default]
14
+ after_initialize do
15
+ send("#{attribute}=", default) unless send("#{attribute}?")
16
+ end
17
+ end
18
+
19
+ bitmask_definitions[attribute] = Definition.new(attribute, options[:as].to_a,options[:null].nil? || options[:null], options[:zero_value], &extension)
13
20
  bitmask_definitions[attribute].install_on(self)
14
21
  end
15
-
22
+
16
23
  def bitmask_definitions
17
- @bitmask_definitions ||= {}
24
+ base_class.base_class_bitmask_definitions
18
25
  end
19
-
26
+
20
27
  def bitmasks
28
+ base_class.base_class_bitmasks
29
+ end
30
+
31
+ protected
32
+
33
+ def base_class_bitmask_definitions
34
+ @bitmask_definitions ||= {}
35
+ end
36
+
37
+ def base_class_bitmasks
21
38
  @bitmasks ||= {}
22
39
  end
23
- end
40
+ end
24
41
  end
25
42
 
26
- ActiveRecord::Base.send :include, BitmaskAttributes
43
+ ActiveRecord::Base.send :include, BitmaskAttributes
@@ -1,7 +1,7 @@
1
1
  module BitmaskAttributes
2
2
  class Definition
3
3
  attr_reader :attribute, :values, :allow_null, :zero_value, :extension
4
-
4
+
5
5
  def initialize(attribute, values=[],allow_null = true,zero_value = nil, &extension)
6
6
  @attribute = attribute
7
7
  @values = values
@@ -9,7 +9,7 @@ module BitmaskAttributes
9
9
  @allow_null = allow_null
10
10
  @zero_value = zero_value
11
11
  end
12
-
12
+
13
13
  def install_on(model)
14
14
  validate_for model
15
15
  generate_bitmasks_on model
@@ -29,10 +29,19 @@ module BitmaskAttributes
29
29
  return if defined?(Rails) && Rails.configuration.cache_classes || !model.table_exists?
30
30
 
31
31
  unless model.columns.detect { |col| col.name == attribute.to_s }
32
- Rails.logger.warn "WARNING: `#{attribute}' is not an attribute of `#{model}'. But, it's ok if it happens during migrations and your \"bitmasked\" attribute is still not created."
32
+ missing_attribute(attribute, model)
33
+ end
34
+ end
35
+
36
+ def missing_attribute(attribute, model)
37
+ message = "WARNING: `#{attribute}' is not an attribute of `#{model.class.name}'. But, it's ok if it happens during migrations and your \"bitmasked\" attribute is still not created."
38
+ if defined?(Rails)
39
+ Rails.logger.warn message
40
+ else
41
+ STDERR.puts message
33
42
  end
34
43
  end
35
-
44
+
36
45
  def generate_bitmasks_on(model)
37
46
  model.bitmasks[attribute] = HashWithIndifferentAccess.new.tap do |mapping|
38
47
  values.each_with_index do |value, index|
@@ -40,12 +49,12 @@ module BitmaskAttributes
40
49
  end
41
50
  end
42
51
  end
43
-
52
+
44
53
  def override(model)
45
54
  override_getter_on(model)
46
55
  override_setter_on(model)
47
56
  end
48
-
57
+
49
58
  def override_getter_on(model)
50
59
  model.class_eval %(
51
60
  def #{attribute}
@@ -53,16 +62,26 @@ module BitmaskAttributes
53
62
  end
54
63
  )
55
64
  end
56
-
65
+
57
66
  def override_setter_on(model)
58
67
  model.class_eval %(
59
68
  def #{attribute}=(raw_value)
60
69
  values = raw_value.kind_of?(Array) ? raw_value : [raw_value]
61
70
  self.#{attribute}.replace(values.reject{|value| #{eval_string_for_zero('value')}})
62
71
  end
72
+ def #{attribute}_bitmask=(entry)
73
+ unless entry.is_a? Fixnum
74
+ raise ArgumentError, "Expected a Fixnum, but got: \#{entry.inspect}"
75
+ end
76
+ unless entry.between?(0, 2 ** (self.class.bitmasks[:#{attribute}].size - 1))
77
+ raise ArgumentError, "Unsupported value for #{attribute}: \#{entry.inspect}"
78
+ end
79
+ @#{attribute} = nil
80
+ self.send(:write_attribute, :#{attribute}, entry)
81
+ end
63
82
  )
64
83
  end
65
-
84
+
66
85
  # Returns the defined values as an Array.
67
86
  def create_attribute_methods_on(model)
68
87
  model.class_eval %(
@@ -71,7 +90,7 @@ module BitmaskAttributes
71
90
  end # end
72
91
  )
73
92
  end
74
-
93
+
75
94
  def create_convenience_class_method_on(model)
76
95
  model.class_eval %(
77
96
  def self.bitmask_for_#{attribute}(*values)
@@ -84,13 +103,24 @@ module BitmaskAttributes
84
103
  bitmask | bit
85
104
  end
86
105
  end
106
+
107
+ def self.#{attribute}_for_bitmask(entry)
108
+ unless entry.is_a? Fixnum
109
+ raise ArgumentError, "Expected a Fixnum, but got: \#{entry.inspect}"
110
+ end
111
+ self.bitmasks[:#{attribute}].inject([]) do |values, (value, bitmask)|
112
+ values.tap do
113
+ values << value.to_sym if (entry & bitmask > 0)
114
+ end
115
+ end
116
+ end
87
117
  )
88
118
  end
89
119
 
90
120
  def create_convenience_instance_methods_on(model)
91
121
  values.each do |value|
92
122
  model.class_eval %(
93
- def #{attribute}_for_#{value}?
123
+ def #{attribute}_for_#{value}?
94
124
  self.#{attribute}?(:#{value})
95
125
  end
96
126
  )
@@ -107,29 +137,29 @@ module BitmaskAttributes
107
137
  end
108
138
  )
109
139
  end
110
-
140
+
111
141
  def create_scopes_on(model)
112
- or_is_null_condition = " OR #{attribute} IS NULL" if allow_null
142
+ or_is_null_condition = " OR #{model.table_name}.#{attribute} IS NULL" if allow_null
113
143
 
114
144
  model.class_eval %(
115
145
  scope :with_#{attribute},
116
146
  proc { |*values|
117
147
  if values.blank?
118
- where('#{attribute} > 0')
148
+ where('#{model.table_name}.#{attribute} > 0')
119
149
  else
120
150
  sets = values.map do |value|
121
151
  mask = ::#{model}.bitmask_for_#{attribute}(value)
122
- "#{attribute} & \#{mask} <> 0"
152
+ "#{model.table_name}.#{attribute} & \#{mask} <> 0"
123
153
  end
124
154
  where(sets.join(' AND '))
125
155
  end
126
156
  }
127
- scope :without_#{attribute},
157
+ scope :without_#{attribute},
128
158
  proc { |*values|
129
159
  if values.blank?
130
160
  no_#{attribute}
131
161
  else
132
- where("#{attribute} & ? = 0#{or_is_null_condition}", ::#{model}.bitmask_for_#{attribute}(*values))
162
+ where("#{model.table_name}.#{attribute} & ? = 0#{or_is_null_condition}", ::#{model}.bitmask_for_#{attribute}(*values))
133
163
  end
134
164
  }
135
165
 
@@ -138,27 +168,27 @@ module BitmaskAttributes
138
168
  if values.blank?
139
169
  no_#{attribute}
140
170
  else
141
- where("#{attribute} = ?", ::#{model}.bitmask_for_#{attribute}(*values))
171
+ where("#{model.table_name}.#{attribute} = ?", ::#{model}.bitmask_for_#{attribute}(*values))
142
172
  end
143
173
  }
144
-
145
- scope :no_#{attribute}, proc { where("#{attribute} = 0#{or_is_null_condition}") }
174
+
175
+ scope :no_#{attribute}, proc { where("#{model.table_name}.#{attribute} = 0#{or_is_null_condition}") }
146
176
 
147
177
  scope :with_any_#{attribute},
148
178
  proc { |*values|
149
179
  if values.blank?
150
- where('#{attribute} > 0')
180
+ where('#{model.table_name}.#{attribute} > 0')
151
181
  else
152
- where("#{attribute} & ? <> 0", ::#{model}.bitmask_for_#{attribute}(*values))
182
+ where("#{model.table_name}.#{attribute} & ? <> 0", ::#{model}.bitmask_for_#{attribute}(*values))
153
183
  end
154
184
  }
155
185
  )
156
186
  values.each do |value|
157
187
  model.class_eval %(
158
188
  scope :#{attribute}_for_#{value},
159
- proc { where('#{attribute} & ? <> 0', ::#{model}.bitmask_for_#{attribute}(:#{value})) }
189
+ proc { where('#{model.table_name}.#{attribute} & ? <> 0', ::#{model}.bitmask_for_#{attribute}(:#{value})) }
160
190
  )
161
- end
191
+ end
162
192
  end
163
193
 
164
194
  def eval_string_for_zero(value_string)
@@ -1,3 +1,3 @@
1
1
  module BitmaskAttributes
2
- VERSION = "0.3.0".freeze
2
+ VERSION = "0.4.0".freeze
3
3
  end
@@ -0,0 +1,34 @@
1
+ require 'test_helper'
2
+
3
+ class BitmaskAttributesTest < ActiveSupport::TestCase
4
+
5
+ context 'validate_for' do
6
+ context 'when missing column' do
7
+ setup do
8
+ @column = Class.new do
9
+ attr_reader :name
10
+
11
+ def initialize(name); @name = name end
12
+ end
13
+
14
+ @model = Class.new do
15
+ attr_reader :columns
16
+
17
+ def initialize(columns); @columns = columns end
18
+
19
+ def table_exists?; true end
20
+
21
+ def self.name; 'Model' end
22
+ end
23
+ end
24
+
25
+ should 'not fail' do
26
+ definition = BitmaskAttributes::Definition.new(:missing_column)
27
+
28
+ some_model = @model.new([@column.new(:name)])
29
+ definition.send(:validate_for, some_model)
30
+ end
31
+ end
32
+ end
33
+
34
+ end
@@ -53,6 +53,14 @@ class BitmaskAttributesTest < ActiveSupport::TestCase
53
53
  assert_stored campaign, :phone, :email
54
54
  end
55
55
 
56
+ should "can assign raw bitmask values" do
57
+ campaign = @campaign_class.new
58
+ campaign.medium_bitmask = 3
59
+ assert_stored campaign, :web, :print
60
+ campaign.medium_bitmask = 0
61
+ assert_empty campaign.medium
62
+ end
63
+
56
64
  should "can save bitmask to db and retrieve values transparently" do
57
65
  campaign = @campaign_class.new(:medium => [:web, :print])
58
66
  assert_stored campaign, :web, :print
@@ -78,6 +86,18 @@ class BitmaskAttributesTest < ActiveSupport::TestCase
78
86
  assert_unsupported { campaign.medium = [:so_will_this] }
79
87
  end
80
88
 
89
+ should "can only use Fixnum values for raw bitmask values" do
90
+ campaign = @campaign_class.new(:medium => :web)
91
+ assert_unsupported { campaign.medium_bitmask = :this_will_fail }
92
+ end
93
+
94
+ should "cannot use unsupported values for raw bitmask values" do
95
+ campaign = @campaign_class.new(:medium => :web)
96
+ number_of_attributes = @campaign_class.bitmasks[:medium].size
97
+ assert_unsupported { campaign.medium_bitmask = (2 ** number_of_attributes) }
98
+ assert_unsupported { campaign.medium_bitmask = -1 }
99
+ end
100
+
81
101
  should "can determine bitmasks using convenience method" do
82
102
  assert @campaign_class.bitmask_for_medium(:web, :print)
83
103
  assert_equal(
@@ -90,6 +110,15 @@ class BitmaskAttributesTest < ActiveSupport::TestCase
90
110
  assert_unsupported { @campaign_class.bitmask_for_medium(:web, :and_this_isnt_valid) }
91
111
  end
92
112
 
113
+ should "can determine bitmask entries using inverse convenience method" do
114
+ assert @campaign_class.medium_for_bitmask(3)
115
+ assert_equal([:web, :print], @campaign_class.medium_for_bitmask(3))
116
+ end
117
+
118
+ should "assert use of non Fixnum value in inverse convenience method will result in exception" do
119
+ assert_unsupported { @campaign_class.medium_for_bitmask(:this_isnt_valid) }
120
+ end
121
+
93
122
  should "hash of values is with indifferent access" do
94
123
  string_bit = nil
95
124
  assert_nothing_raised do
@@ -174,7 +203,7 @@ class BitmaskAttributesTest < ActiveSupport::TestCase
174
203
  assert_equal [@campaign2, @campaign7], @company.campaigns.without_medium(:web, :print)
175
204
  assert_equal [@campaign2, @campaign3, @campaign4], @company.campaigns.without_medium(:print, :phone)
176
205
  end
177
-
206
+
178
207
  should "support retrieval by exact value" do
179
208
  assert_equal [@campaign4], @company.campaigns.with_exact_medium(:web)
180
209
  assert_equal [@campaign1], @company.campaigns.with_exact_medium(:web, :print)
@@ -270,6 +299,15 @@ class BitmaskAttributesTest < ActiveSupport::TestCase
270
299
  end
271
300
  end
272
301
 
302
+ should "accept a default value option" do
303
+ assert_equal DefaultValue.new.default_sym, [:y]
304
+ assert_equal DefaultValue.new.default_array, [:y, :z]
305
+ assert_equal DefaultValue.new(:default_sym => :x).default_sym, [:x]
306
+ assert_equal DefaultValue.new(:default_array => [:x]).default_array, [:x]
307
+ end
308
+
273
309
  context_with_classes 'Campaign with null attributes',CampaignWithNull,CompanyWithNull
274
310
  context_with_classes 'Campaign without null attributes',CampaignWithoutNull,CompanyWithoutNull
275
- end
311
+ context_with_classes 'SubCampaign with null attributes',SubCampaignWithNull,CompanyWithNull
312
+ context_with_classes 'SubCampaign without null attributes',SubCampaignWithoutNull,CompanyWithoutNull
313
+ end
@@ -1,7 +1,8 @@
1
- ActiveRecord::Schema.define do
1
+ 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.string :type # STI
5
6
  end
6
7
  create_table :company_with_nulls do |t|
7
8
  t.string :name
@@ -9,10 +10,14 @@ ActiveRecord::Schema.define do
9
10
  create_table :campaign_without_nulls do |t|
10
11
  t.integer :company_id
11
12
  t.integer :medium, :allow_zero, :misc, :Legacy, :null => false, :default => 0
13
+ t.string :type # STI
12
14
  end
13
15
  create_table :company_without_nulls do |t|
14
16
  t.string :name
15
17
  end
18
+ create_table :default_values do |t|
19
+ t.integer :default_sym, :default_array
20
+ end
16
21
  end
17
22
 
18
23
  # Pseudo models for testing purposes
@@ -33,6 +38,9 @@ class CampaignWithNull < ActiveRecord::Base
33
38
  bitmask :Legacy, :as => [:upper, :case]
34
39
  end
35
40
 
41
+ class SubCampaignWithNull < CampaignWithNull
42
+ end
43
+
36
44
  class CompanyWithoutNull < ActiveRecord::Base
37
45
  has_many :campaigns,:class_name => 'CampaignWithoutNull',:foreign_key => 'company_id'
38
46
  end
@@ -47,4 +55,12 @@ class CampaignWithoutNull < ActiveRecord::Base
47
55
  end
48
56
  end
49
57
  bitmask :Legacy, :as => [:upper, :case], :null => false
50
- end
58
+ end
59
+
60
+ class SubCampaignWithoutNull < CampaignWithNull
61
+ end
62
+
63
+ class DefaultValue < ActiveRecord::Base
64
+ bitmask :default_sym, :as => [:x, :y, :z], :default => :y
65
+ bitmask :default_array, :as => [:x, :y, :z], :default => [:y, :z]
66
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bitmask_attributes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-30 00:00:00.000000000 Z
12
+ date: 2012-12-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -80,6 +80,7 @@ files:
80
80
  - lib/bitmask_attributes/definition.rb
81
81
  - lib/bitmask_attributes/value_proxy.rb
82
82
  - lib/bitmask_attributes/version.rb
83
+ - test/bitmask_attributes/definition_test.rb
83
84
  - test/bitmask_attributes_test.rb
84
85
  - test/support/models.rb
85
86
  - test/test_helper.rb
@@ -108,6 +109,7 @@ signing_key:
108
109
  specification_version: 3
109
110
  summary: Simple bitmask attribute support for ActiveRecord
110
111
  test_files:
112
+ - test/bitmask_attributes/definition_test.rb
111
113
  - test/bitmask_attributes_test.rb
112
114
  - test/support/models.rb
113
115
  - test/test_helper.rb