flag_shih_tzu 0.3.16 → 0.3.17
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 +4 -4
- data/.travis.yml +50 -24
- data/README.md +14 -11
- data/gemfiles/Gemfile.activerecord-5.0.x +14 -0
- data/lib/flag_shih_tzu.rb +29 -8
- data/lib/flag_shih_tzu/version.rb +1 -1
- data/test/flag_shih_tzu_test.rb +60 -58
- data/test/schema.rb +0 -1
- metadata +4 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: cd4bfc174291e12f105c3c1c94feef99ac5310cf
|
|
4
|
+
data.tar.gz: 1e92b592f783e0b6add71e02a6ece2e6a4a50046
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2c92950fa9f20f53e38364cca772ba9ea3f0d9715fcb6899ad25eec25f1057ed4cce044158af77b17d020c2f36b05df54a34e0546b508115931566eb0a586610
|
|
7
|
+
data.tar.gz: e45040c582157973233deb06a36ec0ddea4006c1985226acb5f7fa6f966f2a7875e4a767a479a76a3aa7e6330cf147c90c91eed3fbb6f0e1e7e5f8a2d6662855
|
data/.travis.yml
CHANGED
|
@@ -2,12 +2,13 @@ language: ruby
|
|
|
2
2
|
cache: bundler
|
|
3
3
|
sudo: false
|
|
4
4
|
rvm:
|
|
5
|
-
- 1.9.3
|
|
6
|
-
- 2.0.0
|
|
7
|
-
- 2.1.
|
|
8
|
-
- 2.2.
|
|
5
|
+
- 1.9.3-p551
|
|
6
|
+
- 2.0.0-p648
|
|
7
|
+
- 2.1.10
|
|
8
|
+
- 2.2.7
|
|
9
|
+
- 2.3.4
|
|
10
|
+
- 2.4.1
|
|
9
11
|
- ruby-head
|
|
10
|
-
- jruby-1.7.22
|
|
11
12
|
- jruby-9.0.1.0
|
|
12
13
|
gemfile:
|
|
13
14
|
- gemfiles/Gemfile.activerecord-2.3.x
|
|
@@ -17,10 +18,11 @@ gemfile:
|
|
|
17
18
|
- gemfiles/Gemfile.activerecord-4.0.x
|
|
18
19
|
- gemfiles/Gemfile.activerecord-4.1.x
|
|
19
20
|
- gemfiles/Gemfile.activerecord-4.2.x
|
|
21
|
+
- gemfiles/Gemfile.activerecord-5.0.x
|
|
20
22
|
matrix:
|
|
21
23
|
allow_failures:
|
|
22
24
|
- rvm: ruby-head
|
|
23
|
-
- rvm: 1.9.3
|
|
25
|
+
- rvm: 1.9.3-p551
|
|
24
26
|
exclude:
|
|
25
27
|
- rvm: jruby-9.0.1.0
|
|
26
28
|
gemfile: gemfiles/Gemfile.activerecord-2.3.x
|
|
@@ -32,39 +34,63 @@ matrix:
|
|
|
32
34
|
gemfile: gemfiles/Gemfile.activerecord-3.2.x
|
|
33
35
|
- rvm: jruby-9.0.1.0
|
|
34
36
|
gemfile: gemfiles/Gemfile.activerecord-4.0.x
|
|
35
|
-
- rvm: jruby-1.
|
|
37
|
+
- rvm: jruby-9.0.1.0
|
|
38
|
+
gemfile: gemfiles/Gemfile.activerecord-5.0.x
|
|
39
|
+
|
|
40
|
+
- rvm: 2.4.1
|
|
41
|
+
gemfile: gemfiles/Gemfile.activerecord-2.3.x
|
|
42
|
+
- rvm: 2.4.1
|
|
43
|
+
gemfile: gemfiles/Gemfile.activerecord-3.0.x
|
|
44
|
+
- rvm: 2.4.1
|
|
45
|
+
gemfile: gemfiles/Gemfile.activerecord-3.1.x
|
|
46
|
+
- rvm: 2.4.1
|
|
47
|
+
gemfile: gemfiles/Gemfile.activerecord-3.2.x
|
|
48
|
+
- rvm: 2.4.1
|
|
49
|
+
gemfile: gemfiles/Gemfile.activerecord-4.0.x
|
|
50
|
+
|
|
51
|
+
- rvm: 2.3.4
|
|
36
52
|
gemfile: gemfiles/Gemfile.activerecord-2.3.x
|
|
37
|
-
- rvm:
|
|
53
|
+
- rvm: 2.3.4
|
|
38
54
|
gemfile: gemfiles/Gemfile.activerecord-3.0.x
|
|
39
|
-
- rvm:
|
|
55
|
+
- rvm: 2.3.4
|
|
40
56
|
gemfile: gemfiles/Gemfile.activerecord-3.1.x
|
|
41
|
-
- rvm:
|
|
57
|
+
- rvm: 2.3.4
|
|
42
58
|
gemfile: gemfiles/Gemfile.activerecord-3.2.x
|
|
43
|
-
- rvm:
|
|
59
|
+
- rvm: 2.3.4
|
|
44
60
|
gemfile: gemfiles/Gemfile.activerecord-4.0.x
|
|
45
|
-
|
|
61
|
+
|
|
62
|
+
- rvm: 2.2.7
|
|
46
63
|
gemfile: gemfiles/Gemfile.activerecord-2.3.x
|
|
47
|
-
- rvm: 2.2.
|
|
64
|
+
- rvm: 2.2.7
|
|
48
65
|
gemfile: gemfiles/Gemfile.activerecord-3.0.x
|
|
49
|
-
- rvm: 2.2.
|
|
66
|
+
- rvm: 2.2.7
|
|
50
67
|
gemfile: gemfiles/Gemfile.activerecord-3.1.x
|
|
51
|
-
- rvm: 2.2.
|
|
68
|
+
- rvm: 2.2.7
|
|
52
69
|
gemfile: gemfiles/Gemfile.activerecord-3.2.x
|
|
53
|
-
- rvm: 2.2.
|
|
70
|
+
- rvm: 2.2.7
|
|
54
71
|
gemfile: gemfiles/Gemfile.activerecord-4.0.x
|
|
55
|
-
|
|
72
|
+
|
|
73
|
+
- rvm: 2.1.10
|
|
56
74
|
gemfile: gemfiles/Gemfile.activerecord-2.3.x
|
|
57
|
-
- rvm: 2.1.
|
|
75
|
+
- rvm: 2.1.10
|
|
58
76
|
gemfile: gemfiles/Gemfile.activerecord-3.0.x
|
|
59
|
-
- rvm: 2.1.
|
|
77
|
+
- rvm: 2.1.10
|
|
60
78
|
gemfile: gemfiles/Gemfile.activerecord-3.1.x
|
|
61
|
-
- rvm: 2.
|
|
79
|
+
- rvm: 2.1.10
|
|
80
|
+
gemfile: gemfiles/Gemfile.activerecord-5.0.x
|
|
81
|
+
|
|
82
|
+
- rvm: 2.0.0-p648
|
|
62
83
|
gemfile: gemfiles/Gemfile.activerecord-2.3.x
|
|
63
|
-
- rvm: 2.0.0
|
|
84
|
+
- rvm: 2.0.0-p648
|
|
64
85
|
gemfile: gemfiles/Gemfile.activerecord-4.2.x
|
|
65
|
-
- rvm:
|
|
86
|
+
- rvm: 2.0.0-p648
|
|
87
|
+
gemfile: gemfiles/Gemfile.activerecord-5.0.x
|
|
88
|
+
|
|
89
|
+
- rvm: 1.9.3-p551
|
|
90
|
+
gemfile: gemfiles/Gemfile.activerecord-5.0.x
|
|
91
|
+
- rvm: 1.9.3-p551
|
|
66
92
|
gemfile: gemfiles/Gemfile.activerecord-4.2.x
|
|
67
|
-
- rvm: 1.9.3
|
|
93
|
+
- rvm: 1.9.3-p551
|
|
68
94
|
gemfile: gemfiles/Gemfile.activerecord-4.1.x
|
|
69
|
-
- rvm: 1.9.3
|
|
95
|
+
- rvm: 1.9.3-p551
|
|
70
96
|
gemfile: gemfiles/Gemfile.activerecord-4.0.x
|
data/README.md
CHANGED
|
@@ -17,7 +17,7 @@ Bit fields for ActiveRecord
|
|
|
17
17
|
| homepage | [https://github.com/pboling/flag_shih_tzu][homepage] |
|
|
18
18
|
| documentation | [http://rdoc.info/github/pboling/flag_shih_tzu/frames][documentation] |
|
|
19
19
|
| live chat | [](https://gitter.im/pboling/flag_shih_tzu?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) |
|
|
20
|
-
| Spread ~♡ⓛⓞⓥⓔ♡~
|
|
20
|
+
| Spread ~♡ⓛⓞⓥⓔ♡~ | [on AngelList](https://angel.co/peter-boling), [on Coderwall](http://coderwall.com/pboling) |
|
|
21
21
|
|
|
22
22
|
## Summary
|
|
23
23
|
|
|
@@ -49,21 +49,24 @@ What is a ["Shih Tzu"](http://en.wikipedia.org/wiki/Shih_Tzu)?
|
|
|
49
49
|
The gem is actively being tested with:
|
|
50
50
|
|
|
51
51
|
* MySQL, PostgreSQL and SQLite3 databases (Both Ruby and JRuby adapters)
|
|
52
|
-
* ActiveRecord versions 2.3.x, 3.0.x, 3.1.x, 3.2.x, 4.0.x, 4.1.x, 4.2.x
|
|
53
|
-
* Ruby 1.9.3, 2.0.0, 2.1.
|
|
52
|
+
* ActiveRecord versions 2.3.x, 3.0.x, 3.1.x, 3.2.x, 4.0.x, 4.1.x, 4.2.x, 5.0.x
|
|
53
|
+
* Ruby 1.9.3, 2.0.0, 2.1.10, 2.2.7, 2.3.4, 2.4.1, jruby-1.7.22, jruby-9.0.1.0, and ruby-head
|
|
54
54
|
* Travis tests the supportedt builds. See [.travis.yml](https://github.com/pboling/flag_shih_tzu/blob/master/.travis.yml) for the matrix.
|
|
55
55
|
* All of the supported builds can also be run locally. See [bin/test.bash](https://github.com/pboling/flag_shih_tzu/blob/master/bin/test.bash)
|
|
56
56
|
|
|
57
57
|
### Compatibility Matrix
|
|
58
58
|
|
|
59
|
-
| Ruby / Active Record | 2.3.x | 3.0.x | 3.1.x | 3.2.x | 4.0.x | 4.1.x | 4.2.x |
|
|
60
|
-
|
|
61
|
-
| 1.9.3 | ✓ | ✓ | ✓ | ✓ | | | |
|
|
62
|
-
| 2.0.0 | | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
63
|
-
| 2.1.x | | | | ✓ | ✓ | ✓ | ✓ |
|
|
64
|
-
| 2.2.
|
|
65
|
-
|
|
|
66
|
-
|
|
|
59
|
+
| Ruby / Active Record | 2.3.x | 3.0.x | 3.1.x | 3.2.x | 4.0.x | 4.1.x | 4.2.x | 5.0.x |
|
|
60
|
+
|:---------------------:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|
|
|
61
|
+
| 1.9.3 | ✓ | ✓ | ✓ | ✓ | | | | |
|
|
62
|
+
| 2.0.0 | | ✓ | ✓ | ✓ | ✓ | ✓ | | |
|
|
63
|
+
| 2.1.x | | | | ✓ | ✓ | ✓ | ✓ | |
|
|
64
|
+
| 2.2.0-2.2.1 | | | | ✓ | ✓ | ✓ | ✓ | |
|
|
65
|
+
| 2.2.2+ | | | | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
66
|
+
| 2.3.x | | | | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
67
|
+
| 2.4.x | | | | | | | ✓ | ✓ |
|
|
68
|
+
| jruby-1.7.x | | | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
69
|
+
| jruby-9.0.x | | | | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
67
70
|
|
|
68
71
|
**Legacy**
|
|
69
72
|
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
source "http://rubygems.org"
|
|
2
|
+
|
|
3
|
+
gemspec :path => ".."
|
|
4
|
+
|
|
5
|
+
gem "activerecord", "~> 5.0.0"
|
|
6
|
+
gem "sqlite3", "~> 1.3", :platforms => [:ruby]
|
|
7
|
+
gem "activerecord-jdbcsqlite3-adapter", :platforms => [:jruby]
|
|
8
|
+
gem "activerecord-mysql2-adapter", :platforms => [:ruby]
|
|
9
|
+
gem "activerecord-jdbcmysql-adapter", :platforms => [:jruby]
|
|
10
|
+
gem "pg", :platforms => [:ruby_18]
|
|
11
|
+
gem "activerecord-jdbcpostgresql-adapter", :platforms => [:jruby]
|
|
12
|
+
|
|
13
|
+
gem "reek", "~> 3.5.0", :platforms => [:ruby]
|
|
14
|
+
gem "roodi", "~> 5.0.0", :platforms => [:ruby]
|
data/lib/flag_shih_tzu.rb
CHANGED
|
@@ -278,7 +278,7 @@ To turn off this warning set check_for_column: false in has_flags definition her
|
|
|
278
278
|
end
|
|
279
279
|
|
|
280
280
|
def chained_flags_condition(colmn = DEFAULT_COLUMN_NAME, *args)
|
|
281
|
-
%[(#{table_name
|
|
281
|
+
%[(#{flag_full_column_name(table_name, colmn)} in (#{chained_flags_values(colmn, *args).join(",")}))]
|
|
282
282
|
end
|
|
283
283
|
|
|
284
284
|
def flag_keys(colmn = DEFAULT_COLUMN_NAME)
|
|
@@ -287,6 +287,19 @@ To turn off this warning set check_for_column: false in has_flags definition her
|
|
|
287
287
|
|
|
288
288
|
private
|
|
289
289
|
|
|
290
|
+
def flag_full_column_name(table, column)
|
|
291
|
+
"#{connection.quote_table_name(table)}.#{connection.quote_column_name(column)}"
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
def flag_full_column_name_for_assignment(table, column)
|
|
295
|
+
if (ActiveRecord::VERSION::MAJOR <= 3)
|
|
296
|
+
# If you're trying to do multi-table updates with Rails < 4, sorry - you're out of luck.
|
|
297
|
+
connection.quote_column_name(column)
|
|
298
|
+
else
|
|
299
|
+
connection.quote_table_name_for_assignment(table, column)
|
|
300
|
+
end
|
|
301
|
+
end
|
|
302
|
+
|
|
290
303
|
def flag_value_range_for_column(colmn)
|
|
291
304
|
max = flag_mapping[colmn].values.max
|
|
292
305
|
Range.new(0, (2 * max) - 1)
|
|
@@ -296,7 +309,7 @@ To turn off this warning set check_for_column: false in has_flags definition her
|
|
|
296
309
|
val = flag_value_range_for_column(colmn).to_a
|
|
297
310
|
args.each do |flag|
|
|
298
311
|
neg = false
|
|
299
|
-
if flag.to_s.match
|
|
312
|
+
if flag.to_s.match(/^not_/)
|
|
300
313
|
neg = true
|
|
301
314
|
flag = flag.to_s.sub(/^not_/, "").to_sym
|
|
302
315
|
end
|
|
@@ -335,7 +348,15 @@ To turn off this warning set check_for_column: false in has_flags definition her
|
|
|
335
348
|
has_ar = (!!defined?(ActiveRecord) && respond_to?(:descends_from_active_record?))
|
|
336
349
|
# Supposedly Rails 2.3 takes care of this, but this precaution
|
|
337
350
|
# is needed for backwards compatibility
|
|
338
|
-
has_table = has_ar
|
|
351
|
+
has_table = if has_ar
|
|
352
|
+
if ::ActiveRecord::VERSION::MAJOR >= 5
|
|
353
|
+
connection.data_sources
|
|
354
|
+
else
|
|
355
|
+
connection.tables.include?(custom_table_name)
|
|
356
|
+
end
|
|
357
|
+
else
|
|
358
|
+
true
|
|
359
|
+
end
|
|
339
360
|
if has_table
|
|
340
361
|
found_column = columns.detect { |column| column.name == colmn }
|
|
341
362
|
# If you have not yet run the migration that adds the 'flags' column
|
|
@@ -370,13 +391,13 @@ To turn off this warning set check_for_column: false in has_flags definition her
|
|
|
370
391
|
if flag_options[colmn][:flag_query_mode] == :bit_operator
|
|
371
392
|
# use & bit operator directly in the SQL query.
|
|
372
393
|
# This has the drawback of not using an index on the flags colum.
|
|
373
|
-
%[(#{custom_table_name
|
|
394
|
+
%[(#{flag_full_column_name(custom_table_name, colmn)} & #{flag_mapping[colmn][flag]} = #{enabled ? flag_mapping[colmn][flag] : 0})]
|
|
374
395
|
elsif flag_options[colmn][:flag_query_mode] == :in_list
|
|
375
396
|
# use IN() operator in the SQL query.
|
|
376
397
|
# This has the drawback of becoming a big query
|
|
377
398
|
# when you have lots of flags.
|
|
378
399
|
neg = enabled ? "" : "not "
|
|
379
|
-
%[(#{custom_table_name
|
|
400
|
+
%[(#{flag_full_column_name(custom_table_name, colmn)} #{neg}in (#{sql_in_for_flag(flag, colmn).join(",")}))]
|
|
380
401
|
else
|
|
381
402
|
raise NoSuchFlagQueryModeException
|
|
382
403
|
end
|
|
@@ -390,8 +411,9 @@ To turn off this warning set check_for_column: false in has_flags definition her
|
|
|
390
411
|
|
|
391
412
|
def sql_set_for_flag(flag, colmn, enabled = true, custom_table_name = table_name)
|
|
392
413
|
check_flag(flag, colmn)
|
|
393
|
-
|
|
394
|
-
|
|
414
|
+
lhs_name = flag_full_column_name_for_assignment(custom_table_name, colmn)
|
|
415
|
+
rhs_name = flag_full_column_name(custom_table_name, colmn)
|
|
416
|
+
"#{lhs_name} = #{rhs_name} #{enabled ? "| " : "& ~" }#{flag_mapping[colmn][flag]}"
|
|
395
417
|
end
|
|
396
418
|
|
|
397
419
|
def valid_flag_key?(flag_key)
|
|
@@ -578,5 +600,4 @@ To turn off this warning set check_for_column: false in has_flags definition her
|
|
|
578
600
|
def determine_flag_colmn_for(flag)
|
|
579
601
|
self.class.determine_flag_colmn_for(flag)
|
|
580
602
|
end
|
|
581
|
-
|
|
582
603
|
end
|
data/test/flag_shih_tzu_test.rb
CHANGED
|
@@ -269,55 +269,55 @@ class FlagShihTzuClassMethodsTest < Test::Unit::TestCase
|
|
|
269
269
|
end
|
|
270
270
|
|
|
271
271
|
def test_should_define_a_sql_condition_method_for_flag_enabled
|
|
272
|
-
assert_equal "
|
|
272
|
+
assert_equal '("spaceships"."flags" in (1,3,5,7))',
|
|
273
273
|
Spaceship.warpdrive_condition
|
|
274
|
-
assert_equal "
|
|
274
|
+
assert_equal '("spaceships"."flags" in (2,3,6,7))',
|
|
275
275
|
Spaceship.shields_condition
|
|
276
|
-
assert_equal "
|
|
276
|
+
assert_equal '("spaceships"."flags" in (4,5,6,7))',
|
|
277
277
|
Spaceship.electrolytes_condition
|
|
278
278
|
end
|
|
279
279
|
|
|
280
280
|
def test_should_define_a_sql_condition_method_for_flag_enabled_with_missing_flags
|
|
281
|
-
assert_equal "
|
|
281
|
+
assert_equal '("spaceships"."flags" in (1,3,5,7))',
|
|
282
282
|
SpaceshipWithMissingFlags.warpdrive_condition
|
|
283
|
-
assert_equal "
|
|
283
|
+
assert_equal '("spaceships"."flags" in (4,5,6,7))',
|
|
284
284
|
SpaceshipWithMissingFlags.electrolytes_condition
|
|
285
285
|
end
|
|
286
286
|
|
|
287
287
|
def test_should_accept_a_table_alias_option_for_sql_condition_method
|
|
288
|
-
assert_equal "
|
|
288
|
+
assert_equal '("old_spaceships"."flags" in (1,3,5,7))',
|
|
289
289
|
Spaceship.warpdrive_condition(table_alias: "old_spaceships")
|
|
290
290
|
end
|
|
291
291
|
|
|
292
292
|
def test_should_define_a_sql_condition_method_for_flag_enabled_with_2_colmns
|
|
293
|
-
assert_equal "
|
|
293
|
+
assert_equal '("spaceships_with_2_custom_flags_column"."bits" in (1,3))',
|
|
294
294
|
SpaceshipWith2CustomFlagsColumn.warpdrive_condition
|
|
295
|
-
assert_equal "
|
|
295
|
+
assert_equal '("spaceships_with_2_custom_flags_column"."bits" in (2,3))',
|
|
296
296
|
SpaceshipWith2CustomFlagsColumn.hyperspace_condition
|
|
297
|
-
assert_equal "
|
|
297
|
+
assert_equal '("spaceships_with_2_custom_flags_column"."commanders" in (1,3))',
|
|
298
298
|
SpaceshipWith2CustomFlagsColumn.jeanlucpicard_condition
|
|
299
|
-
assert_equal "
|
|
299
|
+
assert_equal '("spaceships_with_2_custom_flags_column"."commanders" in (2,3))',
|
|
300
300
|
SpaceshipWith2CustomFlagsColumn.dajanatroj_condition
|
|
301
301
|
end
|
|
302
302
|
|
|
303
303
|
def test_should_define_a_sql_condition_method_for_flag_not_enabled
|
|
304
|
-
assert_equal "
|
|
304
|
+
assert_equal '("spaceships"."flags" not in (1,3,5,7))',
|
|
305
305
|
Spaceship.not_warpdrive_condition
|
|
306
|
-
assert_equal "
|
|
306
|
+
assert_equal '("spaceships"."flags" not in (2,3,6,7))',
|
|
307
307
|
Spaceship.not_shields_condition
|
|
308
|
-
assert_equal "
|
|
308
|
+
assert_equal '("spaceships"."flags" not in (4,5,6,7))',
|
|
309
309
|
Spaceship.not_electrolytes_condition
|
|
310
310
|
end
|
|
311
311
|
|
|
312
312
|
def test_should_define_a_sql_condition_method_for_flag_not_enabled_with_missing_flags
|
|
313
|
-
assert_equal "
|
|
313
|
+
assert_equal '("spaceships"."flags" not in (1,3,5,7))',
|
|
314
314
|
SpaceshipWithMissingFlags.not_warpdrive_condition
|
|
315
|
-
assert_equal "
|
|
315
|
+
assert_equal '("spaceships"."flags" not in (4,5,6,7))',
|
|
316
316
|
SpaceshipWithMissingFlags.not_electrolytes_condition
|
|
317
317
|
end
|
|
318
318
|
|
|
319
319
|
def test_sql_condition_for_flag_with_custom_table_name_and_default_query_mode
|
|
320
|
-
assert_equal "
|
|
320
|
+
assert_equal '("custom_spaceships"."flags" in (1,3,5,7))',
|
|
321
321
|
Spaceship.send(:sql_condition_for_flag,
|
|
322
322
|
:warpdrive,
|
|
323
323
|
"flags",
|
|
@@ -325,7 +325,7 @@ class FlagShihTzuClassMethodsTest < Test::Unit::TestCase
|
|
|
325
325
|
"custom_spaceships")
|
|
326
326
|
end
|
|
327
327
|
def test_sql_condition_for_flag_with_in_list_query_mode
|
|
328
|
-
assert_equal "
|
|
328
|
+
assert_equal '("spaceships"."flags" in (1,3))',
|
|
329
329
|
SpaceshipWithInListQueryMode.send(:sql_condition_for_flag,
|
|
330
330
|
:warpdrive,
|
|
331
331
|
"flags",
|
|
@@ -333,7 +333,7 @@ class FlagShihTzuClassMethodsTest < Test::Unit::TestCase
|
|
|
333
333
|
"spaceships")
|
|
334
334
|
end
|
|
335
335
|
def test_sql_condition_for_flag_with_bit_operator_query_mode
|
|
336
|
-
assert_equal "
|
|
336
|
+
assert_equal '("spaceships"."flags" & 1 = 1)',
|
|
337
337
|
SpaceshipWithBitOperatorQueryMode.send(:sql_condition_for_flag,
|
|
338
338
|
:warpdrive,
|
|
339
339
|
"flags",
|
|
@@ -345,50 +345,50 @@ class FlagShihTzuClassMethodsTest < Test::Unit::TestCase
|
|
|
345
345
|
Spaceship.send(:sql_in_for_flag, :warpdrive, "flags")
|
|
346
346
|
end
|
|
347
347
|
def test_sql_set_for_flag
|
|
348
|
-
assert_equal "
|
|
348
|
+
assert_equal '"flags" = "spaceships"."flags" | 1',
|
|
349
349
|
Spaceship.send(:sql_set_for_flag, :warpdrive, "flags")
|
|
350
350
|
end
|
|
351
351
|
|
|
352
352
|
def test_should_define_a_sql_condition_method_for_flag_enabled_with_2_colmns_not_enabled
|
|
353
|
-
assert_equal "
|
|
353
|
+
assert_equal '("spaceships_with_2_custom_flags_column"."bits" not in (1,3))',
|
|
354
354
|
SpaceshipWith2CustomFlagsColumn.not_warpdrive_condition
|
|
355
|
-
assert_equal "
|
|
355
|
+
assert_equal '("spaceships_with_2_custom_flags_column"."bits" not in (2,3))',
|
|
356
356
|
SpaceshipWith2CustomFlagsColumn.not_hyperspace_condition
|
|
357
|
-
assert_equal "
|
|
357
|
+
assert_equal '("spaceships_with_2_custom_flags_column"."commanders" not in (1,3))',
|
|
358
358
|
SpaceshipWith2CustomFlagsColumn.not_jeanlucpicard_condition
|
|
359
|
-
assert_equal "
|
|
359
|
+
assert_equal '("spaceships_with_2_custom_flags_column"."commanders" not in (2,3))',
|
|
360
360
|
SpaceshipWith2CustomFlagsColumn.not_dajanatroj_condition
|
|
361
361
|
end
|
|
362
362
|
|
|
363
363
|
def test_should_define_a_sql_condition_method_for_flag_enabled_using_bit_operators
|
|
364
|
-
assert_equal "
|
|
364
|
+
assert_equal '("spaceships"."flags" & 1 = 1)',
|
|
365
365
|
SpaceshipWithBitOperatorQueryMode.warpdrive_condition
|
|
366
|
-
assert_equal "
|
|
366
|
+
assert_equal '("spaceships"."flags" & 2 = 2)',
|
|
367
367
|
SpaceshipWithBitOperatorQueryMode.shields_condition
|
|
368
368
|
end
|
|
369
369
|
|
|
370
370
|
def test_should_define_a_sql_condition_method_for_flag_not_enabled_using_bit_operators
|
|
371
|
-
assert_equal "
|
|
371
|
+
assert_equal '("spaceships"."flags" & 1 = 0)',
|
|
372
372
|
SpaceshipWithBitOperatorQueryMode.not_warpdrive_condition
|
|
373
|
-
assert_equal "
|
|
373
|
+
assert_equal '("spaceships"."flags" & 2 = 0)',
|
|
374
374
|
SpaceshipWithBitOperatorQueryMode.not_shields_condition
|
|
375
375
|
end
|
|
376
376
|
|
|
377
377
|
def test_should_define_a_named_scope_for_flag_enabled
|
|
378
|
-
assert_where_value "
|
|
378
|
+
assert_where_value '("spaceships"."flags" in (1,3,5,7))',
|
|
379
379
|
Spaceship.warpdrive
|
|
380
|
-
assert_where_value "
|
|
380
|
+
assert_where_value '("spaceships"."flags" in (2,3,6,7))',
|
|
381
381
|
Spaceship.shields
|
|
382
|
-
assert_where_value "
|
|
382
|
+
assert_where_value '("spaceships"."flags" in (4,5,6,7))',
|
|
383
383
|
Spaceship.electrolytes
|
|
384
384
|
end
|
|
385
385
|
|
|
386
386
|
def test_should_define_a_named_scope_for_flag_not_enabled
|
|
387
|
-
assert_where_value "
|
|
387
|
+
assert_where_value '("spaceships"."flags" not in (1,3,5,7))',
|
|
388
388
|
Spaceship.not_warpdrive
|
|
389
|
-
assert_where_value "
|
|
389
|
+
assert_where_value '("spaceships"."flags" not in (2,3,6,7))',
|
|
390
390
|
Spaceship.not_shields
|
|
391
|
-
assert_where_value "
|
|
391
|
+
assert_where_value '("spaceships"."flags" not in (4,5,6,7))',
|
|
392
392
|
Spaceship.not_electrolytes
|
|
393
393
|
end
|
|
394
394
|
|
|
@@ -398,38 +398,38 @@ class FlagShihTzuClassMethodsTest < Test::Unit::TestCase
|
|
|
398
398
|
end
|
|
399
399
|
|
|
400
400
|
def test_should_define_a_named_scope_for_flag_enabled_with_2_columns
|
|
401
|
-
assert_where_value "
|
|
401
|
+
assert_where_value '("spaceships_with_2_custom_flags_column"."bits" in (1,3))',
|
|
402
402
|
SpaceshipWith2CustomFlagsColumn.warpdrive
|
|
403
|
-
assert_where_value "
|
|
403
|
+
assert_where_value '("spaceships_with_2_custom_flags_column"."bits" in (2,3))',
|
|
404
404
|
SpaceshipWith2CustomFlagsColumn.hyperspace
|
|
405
|
-
assert_where_value "
|
|
405
|
+
assert_where_value '("spaceships_with_2_custom_flags_column"."commanders" in (1,3))',
|
|
406
406
|
SpaceshipWith2CustomFlagsColumn.jeanlucpicard
|
|
407
|
-
assert_where_value "
|
|
407
|
+
assert_where_value '("spaceships_with_2_custom_flags_column"."commanders" in (2,3))',
|
|
408
408
|
SpaceshipWith2CustomFlagsColumn.dajanatroj
|
|
409
409
|
end
|
|
410
410
|
|
|
411
411
|
def test_should_define_a_named_scope_for_flag_not_enabled_with_2_columns
|
|
412
|
-
assert_where_value "
|
|
412
|
+
assert_where_value '("spaceships_with_2_custom_flags_column"."bits" not in (1,3))',
|
|
413
413
|
SpaceshipWith2CustomFlagsColumn.not_warpdrive
|
|
414
|
-
assert_where_value "
|
|
414
|
+
assert_where_value '("spaceships_with_2_custom_flags_column"."bits" not in (2,3))',
|
|
415
415
|
SpaceshipWith2CustomFlagsColumn.not_hyperspace
|
|
416
|
-
assert_where_value "
|
|
416
|
+
assert_where_value '("spaceships_with_2_custom_flags_column"."commanders" not in (1,3))',
|
|
417
417
|
SpaceshipWith2CustomFlagsColumn.not_jeanlucpicard
|
|
418
|
-
assert_where_value "
|
|
418
|
+
assert_where_value '("spaceships_with_2_custom_flags_column"."commanders" not in (2,3))',
|
|
419
419
|
SpaceshipWith2CustomFlagsColumn.not_dajanatroj
|
|
420
420
|
end
|
|
421
421
|
|
|
422
422
|
def test_should_define_a_named_scope_for_flag_enabled_using_bit_operators
|
|
423
|
-
assert_where_value "
|
|
423
|
+
assert_where_value '("spaceships"."flags" & 1 = 1)',
|
|
424
424
|
SpaceshipWithBitOperatorQueryMode.warpdrive
|
|
425
|
-
assert_where_value "
|
|
425
|
+
assert_where_value '("spaceships"."flags" & 2 = 2)',
|
|
426
426
|
SpaceshipWithBitOperatorQueryMode.shields
|
|
427
427
|
end
|
|
428
428
|
|
|
429
429
|
def test_should_define_a_named_scope_for_flag_not_enabled_using_bit_operators
|
|
430
|
-
assert_where_value "
|
|
430
|
+
assert_where_value '("spaceships"."flags" & 1 = 0)',
|
|
431
431
|
SpaceshipWithBitOperatorQueryMode.not_warpdrive
|
|
432
|
-
assert_where_value "
|
|
432
|
+
assert_where_value '("spaceships"."flags" & 2 = 0)',
|
|
433
433
|
SpaceshipWithBitOperatorQueryMode.not_shields
|
|
434
434
|
end
|
|
435
435
|
|
|
@@ -511,16 +511,16 @@ class FlagShihTzuClassMethodsTest < Test::Unit::TestCase
|
|
|
511
511
|
end
|
|
512
512
|
|
|
513
513
|
def test_should_return_the_correct_condition_with_chained_flags
|
|
514
|
-
assert_equal "
|
|
514
|
+
assert_equal '("spaceships"."flags" in (3,7))',
|
|
515
515
|
Spaceship.chained_flags_condition("flags",
|
|
516
516
|
:warpdrive,
|
|
517
517
|
:shields)
|
|
518
|
-
assert_equal "
|
|
518
|
+
assert_equal '("spaceships"."flags" in (7))',
|
|
519
519
|
Spaceship.chained_flags_condition("flags",
|
|
520
520
|
:warpdrive,
|
|
521
521
|
:shields,
|
|
522
522
|
:electrolytes)
|
|
523
|
-
assert_equal "
|
|
523
|
+
assert_equal '("spaceships"."flags" in (2,6))',
|
|
524
524
|
Spaceship.chained_flags_condition("flags",
|
|
525
525
|
:not_warpdrive,
|
|
526
526
|
:shields)
|
|
@@ -577,21 +577,21 @@ class FlagShihTzuClassMethodsTest < Test::Unit::TestCase
|
|
|
577
577
|
spaceship.save!
|
|
578
578
|
spaceship.reload
|
|
579
579
|
assert_equal 3, spaceship.flags("bits")
|
|
580
|
-
assert_equal "
|
|
580
|
+
assert_equal '("spaceships_with_custom_flags_column"."bits" in (1,3))',
|
|
581
581
|
SpaceshipWithCustomFlagsColumn.warpdrive_condition
|
|
582
|
-
assert_equal "
|
|
582
|
+
assert_equal '("spaceships_with_custom_flags_column"."bits" not in (1,3))',
|
|
583
583
|
SpaceshipWithCustomFlagsColumn.not_warpdrive_condition
|
|
584
|
-
assert_equal "
|
|
584
|
+
assert_equal '("spaceships_with_custom_flags_column"."bits" in (2,3))',
|
|
585
585
|
SpaceshipWithCustomFlagsColumn.hyperspace_condition
|
|
586
|
-
assert_equal "
|
|
586
|
+
assert_equal '("spaceships_with_custom_flags_column"."bits" not in (2,3))',
|
|
587
587
|
SpaceshipWithCustomFlagsColumn.not_hyperspace_condition
|
|
588
|
-
assert_where_value
|
|
588
|
+
assert_where_value '("spaceships_with_custom_flags_column"."bits" in (1,3))',
|
|
589
589
|
SpaceshipWithCustomFlagsColumn.warpdrive
|
|
590
|
-
assert_where_value
|
|
590
|
+
assert_where_value '("spaceships_with_custom_flags_column"."bits" not in (1,3))',
|
|
591
591
|
SpaceshipWithCustomFlagsColumn.not_warpdrive
|
|
592
|
-
assert_where_value
|
|
592
|
+
assert_where_value '("spaceships_with_custom_flags_column"."bits" in (2,3))',
|
|
593
593
|
SpaceshipWithCustomFlagsColumn.hyperspace
|
|
594
|
-
assert_where_value
|
|
594
|
+
assert_where_value '("spaceships_with_custom_flags_column"."bits" not in (2,3))',
|
|
595
595
|
SpaceshipWithCustomFlagsColumn.not_hyperspace
|
|
596
596
|
end
|
|
597
597
|
|
|
@@ -631,6 +631,8 @@ class FlagShihTzuClassMethodsTest < Test::Unit::TestCase
|
|
|
631
631
|
def assert_where_value(expected, scope)
|
|
632
632
|
actual = if ActiveRecord::VERSION::MAJOR == 2
|
|
633
633
|
scope.proxy_options[:conditions]
|
|
634
|
+
elsif ActiveRecord::VERSION::MAJOR >= 5
|
|
635
|
+
scope.where_clause.ast.children.first.expr
|
|
634
636
|
else
|
|
635
637
|
scope.where_values.first
|
|
636
638
|
end
|
|
@@ -1419,9 +1421,9 @@ class FlagShihTzuDerivedClassTest < Test::Unit::TestCase
|
|
|
1419
1421
|
end
|
|
1420
1422
|
|
|
1421
1423
|
def test_should_return_a_sql_set_method_for_flag
|
|
1422
|
-
assert_equal "
|
|
1424
|
+
assert_equal '"flags" = "spaceships"."flags" | 1',
|
|
1423
1425
|
Spaceship.send(:sql_set_for_flag, :warpdrive, "flags", true)
|
|
1424
|
-
assert_equal "
|
|
1426
|
+
assert_equal '"flags" = "spaceships"."flags" & ~1',
|
|
1425
1427
|
Spaceship.send(:sql_set_for_flag, :warpdrive, "flags", false)
|
|
1426
1428
|
end
|
|
1427
1429
|
|
data/test/schema.rb
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
ActiveRecord::Schema.define(:version => 0) do
|
|
2
2
|
create_table :spaceships, :force => true do |t|
|
|
3
|
-
t.string :type, :null => false, :default => 'Spaceship'
|
|
4
3
|
t.integer :flags, :null => false, :default => 0
|
|
5
4
|
t.string :incorrect_flags_column, :null => false, :default => ''
|
|
6
5
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: flag_shih_tzu
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.17
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter Boling
|
|
@@ -12,7 +12,7 @@ authors:
|
|
|
12
12
|
autorequire:
|
|
13
13
|
bindir: bin
|
|
14
14
|
cert_chain: []
|
|
15
|
-
date: 2017-
|
|
15
|
+
date: 2017-04-29 00:00:00.000000000 Z
|
|
16
16
|
dependencies:
|
|
17
17
|
- !ruby/object:Gem::Dependency
|
|
18
18
|
name: activerecord
|
|
@@ -129,6 +129,7 @@ files:
|
|
|
129
129
|
- gemfiles/Gemfile.activerecord-4.0.x
|
|
130
130
|
- gemfiles/Gemfile.activerecord-4.1.x
|
|
131
131
|
- gemfiles/Gemfile.activerecord-4.2.x
|
|
132
|
+
- gemfiles/Gemfile.activerecord-5.0.x
|
|
132
133
|
- lib/flag_shih_tzu.rb
|
|
133
134
|
- lib/flag_shih_tzu/validators.rb
|
|
134
135
|
- lib/flag_shih_tzu/version.rb
|
|
@@ -156,7 +157,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
156
157
|
version: '0'
|
|
157
158
|
requirements: []
|
|
158
159
|
rubyforge_project:
|
|
159
|
-
rubygems_version: 2.
|
|
160
|
+
rubygems_version: 2.4.8
|
|
160
161
|
signing_key:
|
|
161
162
|
specification_version: 4
|
|
162
163
|
summary: Bit fields for ActiveRecord
|