flipper-active_record 0.16.2 → 0.17.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.
- checksums.yaml +5 -5
- data/docs/active_record/README.md +1 -1
- data/flipper-active_record.gemspec +2 -2
- data/lib/flipper-active_record.rb +2 -0
- data/lib/flipper/adapters/active_record.rb +22 -26
- data/lib/flipper/version.rb +1 -1
- data/lib/generators/flipper/active_record_generator.rb +3 -3
- data/test_rails/generators/flipper/active_record_generator_test.rb +43 -0
- metadata +10 -12
- data/test/generators/flipper/active_record_generator_test.rb +0 -43
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 580a17c75e03a7c98a7361a34f24ae82124491bf02e1351972bd1f6d5b627f79
|
4
|
+
data.tar.gz: f9a57fae9ea74c31101e3e461e0afbd622977351fae841428b35f746badfc803
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 71e7004c6d628e0fe95f3e2d1adaa85d572a557d139634562bb79ccb76a2fd986778773c0aa7895d87db398a16483e6ecf3b3dc26cd067ff7919e810232ab78a
|
7
|
+
data.tar.gz: 05b9b9d298593eddcacb447ac3270a9685bdc25881b67ca37a89c944626e631178ece3910b2931a0b6cb5a7ca553579830f486cd5f2093dfd618e8d978d4eec9
|
@@ -19,12 +19,12 @@ Gem::Specification.new do |gem|
|
|
19
19
|
'lib/flipper/version.rb',
|
20
20
|
]
|
21
21
|
gem.files = `git ls-files`.split("\n").select(&flipper_active_record_files) + extra_files
|
22
|
-
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n").select(&flipper_active_record_files)
|
22
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n").select(&flipper_active_record_files) # rubocop:disable Metrics/LineLength
|
23
23
|
gem.name = 'flipper-active_record'
|
24
24
|
gem.require_paths = ['lib']
|
25
25
|
gem.version = Flipper::VERSION
|
26
26
|
gem.metadata = Flipper::METADATA
|
27
27
|
|
28
28
|
gem.add_dependency 'flipper', "~> #{Flipper::VERSION}"
|
29
|
-
gem.add_dependency 'activerecord', '>=
|
29
|
+
gem.add_dependency 'activerecord', '>= 4.2', '< 7'
|
30
30
|
end
|
@@ -54,12 +54,16 @@ module Flipper
|
|
54
54
|
# Public: Adds a feature to the set of known features.
|
55
55
|
def add(feature)
|
56
56
|
# race condition, but add is only used by enable/disable which happen
|
57
|
-
# super rarely, so it shouldn't matter in practice
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
57
|
+
# super rarely, so it shouldn't matter in practice
|
58
|
+
@feature_class.transaction do
|
59
|
+
unless @feature_class.where(key: feature.key).first
|
60
|
+
begin
|
61
|
+
@feature_class.create! { |f| f.key = feature.key }
|
62
|
+
rescue ActiveRecord::RecordNotUnique
|
63
|
+
end
|
64
|
+
end
|
62
65
|
end
|
66
|
+
|
63
67
|
true
|
64
68
|
end
|
65
69
|
|
@@ -97,7 +101,7 @@ module Flipper
|
|
97
101
|
end
|
98
102
|
|
99
103
|
def get_all
|
100
|
-
rows = ::ActiveRecord::Base.connection.select_all <<-SQL
|
104
|
+
rows = ::ActiveRecord::Base.connection.select_all <<-SQL.tr("\n", ' ')
|
101
105
|
SELECT ff.key AS feature_key, fg.key, fg.value
|
102
106
|
FROM #{@feature_class.table_name} ff
|
103
107
|
LEFT JOIN #{@gate_class.table_name} fg ON ff.key = fg.feature_key
|
@@ -122,7 +126,7 @@ module Flipper
|
|
122
126
|
def enable(feature, gate, thing)
|
123
127
|
case gate.data_type
|
124
128
|
when :boolean, :integer
|
125
|
-
|
129
|
+
set(feature, gate, thing)
|
126
130
|
when :set
|
127
131
|
enable_multi(feature, gate, thing)
|
128
132
|
else
|
@@ -144,18 +148,7 @@ module Flipper
|
|
144
148
|
when :boolean
|
145
149
|
clear(feature)
|
146
150
|
when :integer
|
147
|
-
|
148
|
-
@gate_class.where(
|
149
|
-
feature_key: feature.key,
|
150
|
-
key: gate.key
|
151
|
-
).destroy_all
|
152
|
-
|
153
|
-
@gate_class.create! do |g|
|
154
|
-
g.feature_key = feature.key
|
155
|
-
g.key = gate.key
|
156
|
-
g.value = thing.value.to_s
|
157
|
-
end
|
158
|
-
end
|
151
|
+
set(feature, gate, thing)
|
159
152
|
when :set
|
160
153
|
@gate_class.where(feature_key: feature.key, key: gate.key, value: thing.value).destroy_all
|
161
154
|
else
|
@@ -172,7 +165,7 @@ module Flipper
|
|
172
165
|
|
173
166
|
private
|
174
167
|
|
175
|
-
def
|
168
|
+
def set(feature, gate, thing)
|
176
169
|
@gate_class.transaction do
|
177
170
|
@gate_class.where(feature_key: feature.key, key: gate.key).destroy_all
|
178
171
|
@gate_class.create! do |g|
|
@@ -181,6 +174,8 @@ module Flipper
|
|
181
174
|
g.value = thing.value.to_s
|
182
175
|
end
|
183
176
|
end
|
177
|
+
|
178
|
+
nil
|
184
179
|
end
|
185
180
|
|
186
181
|
def enable_multi(feature, gate, thing)
|
@@ -189,9 +184,10 @@ module Flipper
|
|
189
184
|
g.key = gate.key
|
190
185
|
g.value = thing.value.to_s
|
191
186
|
end
|
187
|
+
|
188
|
+
nil
|
192
189
|
rescue ::ActiveRecord::RecordNotUnique
|
193
|
-
|
194
|
-
raise unless error.message =~ /unique/i
|
190
|
+
# already added so no need move on with life
|
195
191
|
end
|
196
192
|
|
197
193
|
def result_for_feature(feature, db_gates)
|
@@ -201,12 +197,12 @@ module Flipper
|
|
201
197
|
result[gate.key] =
|
202
198
|
case gate.data_type
|
203
199
|
when :boolean
|
204
|
-
if
|
205
|
-
|
200
|
+
if detected_db_gate = db_gates.detect { |db_gate| db_gate.key == gate.key.to_s }
|
201
|
+
detected_db_gate.value
|
206
202
|
end
|
207
203
|
when :integer
|
208
|
-
if
|
209
|
-
|
204
|
+
if detected_db_gate = db_gates.detect { |db_gate| db_gate.key == gate.key.to_s }
|
205
|
+
detected_db_gate.value
|
210
206
|
end
|
211
207
|
when :set
|
212
208
|
db_gates.select { |db_gate| db_gate.key == gate.key.to_s }.map(&:value).to_set
|
data/lib/flipper/version.rb
CHANGED
@@ -13,11 +13,11 @@ module Flipper
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.migration_version
|
16
|
-
"[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]" if
|
16
|
+
"[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]" if requires_migration_number?
|
17
17
|
end
|
18
18
|
|
19
|
-
def self.
|
20
|
-
Rails.
|
19
|
+
def self.requires_migration_number?
|
20
|
+
Rails::VERSION::MAJOR.to_i >= 5
|
21
21
|
end
|
22
22
|
|
23
23
|
def create_migration_file
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'active_record'
|
3
|
+
require 'rails/generators/test_case'
|
4
|
+
require 'generators/flipper/active_record_generator'
|
5
|
+
|
6
|
+
class FlipperActiveRecordGeneratorTest < Rails::Generators::TestCase
|
7
|
+
tests Flipper::Generators::ActiveRecordGenerator
|
8
|
+
destination File.expand_path('../../../../tmp', __FILE__)
|
9
|
+
setup :prepare_destination
|
10
|
+
|
11
|
+
def test_generates_migration
|
12
|
+
run_generator
|
13
|
+
migration_version = if Rails::VERSION::MAJOR.to_i < 5
|
14
|
+
""
|
15
|
+
else
|
16
|
+
"[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
|
17
|
+
end
|
18
|
+
assert_migration 'db/migrate/create_flipper_tables.rb', <<~MIGRATION
|
19
|
+
class CreateFlipperTables < ActiveRecord::Migration#{migration_version}
|
20
|
+
def self.up
|
21
|
+
create_table :flipper_features do |t|
|
22
|
+
t.string :key, null: false
|
23
|
+
t.timestamps null: false
|
24
|
+
end
|
25
|
+
add_index :flipper_features, :key, unique: true
|
26
|
+
|
27
|
+
create_table :flipper_gates do |t|
|
28
|
+
t.string :feature_key, null: false
|
29
|
+
t.string :key, null: false
|
30
|
+
t.string :value
|
31
|
+
t.timestamps null: false
|
32
|
+
end
|
33
|
+
add_index :flipper_gates, [:feature_key, :key, :value], unique: true
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.down
|
37
|
+
drop_table :flipper_gates
|
38
|
+
drop_table :flipper_features
|
39
|
+
end
|
40
|
+
end
|
41
|
+
MIGRATION
|
42
|
+
end
|
43
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flipper-active_record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.17.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Nunemaker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-09-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: flipper
|
@@ -16,34 +16,34 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.17.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.17.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activerecord
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '4.2'
|
34
34
|
- - "<"
|
35
35
|
- !ruby/object:Gem::Version
|
36
|
-
version: '
|
36
|
+
version: '7'
|
37
37
|
type: :runtime
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
40
40
|
requirements:
|
41
41
|
- - ">="
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: '
|
43
|
+
version: '4.2'
|
44
44
|
- - "<"
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: '
|
46
|
+
version: '7'
|
47
47
|
description: ActiveRecord adapter for Flipper
|
48
48
|
email:
|
49
49
|
- nunemaker@gmail.com
|
@@ -63,7 +63,7 @@ files:
|
|
63
63
|
- lib/generators/flipper/templates/migration.erb
|
64
64
|
- spec/flipper/adapters/active_record_spec.rb
|
65
65
|
- test/adapters/active_record_test.rb
|
66
|
-
-
|
66
|
+
- test_rails/generators/flipper/active_record_generator_test.rb
|
67
67
|
homepage: https://github.com/jnunemaker/flipper
|
68
68
|
licenses:
|
69
69
|
- MIT
|
@@ -84,12 +84,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
84
84
|
- !ruby/object:Gem::Version
|
85
85
|
version: '0'
|
86
86
|
requirements: []
|
87
|
-
|
88
|
-
rubygems_version: 2.4.5.4
|
87
|
+
rubygems_version: 3.0.3
|
89
88
|
signing_key:
|
90
89
|
specification_version: 4
|
91
90
|
summary: ActiveRecord adapter for Flipper
|
92
91
|
test_files:
|
93
92
|
- spec/flipper/adapters/active_record_spec.rb
|
94
93
|
- test/adapters/active_record_test.rb
|
95
|
-
- test/generators/flipper/active_record_generator_test.rb
|
@@ -1,43 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
require 'active_record'
|
3
|
-
require 'rails/generators/test_case'
|
4
|
-
require 'generators/flipper/active_record_generator'
|
5
|
-
|
6
|
-
class FlipperActiveRecordGeneratorTest < Rails::Generators::TestCase
|
7
|
-
tests Flipper::Generators::ActiveRecordGenerator
|
8
|
-
destination File.expand_path('../../../../tmp', __FILE__)
|
9
|
-
setup :prepare_destination
|
10
|
-
|
11
|
-
def test_generates_migration
|
12
|
-
run_generator
|
13
|
-
migration_version = if Rails::VERSION::MAJOR.to_i < 5
|
14
|
-
""
|
15
|
-
else
|
16
|
-
"[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
|
17
|
-
end
|
18
|
-
assert_migration 'db/migrate/create_flipper_tables.rb', <<-EOM
|
19
|
-
class CreateFlipperTables < ActiveRecord::Migration#{migration_version}
|
20
|
-
def self.up
|
21
|
-
create_table :flipper_features do |t|
|
22
|
-
t.string :key, null: false
|
23
|
-
t.timestamps null: false
|
24
|
-
end
|
25
|
-
add_index :flipper_features, :key, unique: true
|
26
|
-
|
27
|
-
create_table :flipper_gates do |t|
|
28
|
-
t.string :feature_key, null: false
|
29
|
-
t.string :key, null: false
|
30
|
-
t.string :value
|
31
|
-
t.timestamps null: false
|
32
|
-
end
|
33
|
-
add_index :flipper_gates, [:feature_key, :key, :value], unique: true
|
34
|
-
end
|
35
|
-
|
36
|
-
def self.down
|
37
|
-
drop_table :flipper_gates
|
38
|
-
drop_table :flipper_features
|
39
|
-
end
|
40
|
-
end
|
41
|
-
EOM
|
42
|
-
end
|
43
|
-
end
|