flipper-active_record 0.16.2 → 0.17.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 4039f5b7764d3f487c80d06f91e0b272abbf4e25
4
- data.tar.gz: d40858b49ce9a4697a97b7f5b059dd2a20b30970
2
+ SHA256:
3
+ metadata.gz: 580a17c75e03a7c98a7361a34f24ae82124491bf02e1351972bd1f6d5b627f79
4
+ data.tar.gz: f9a57fae9ea74c31101e3e461e0afbd622977351fae841428b35f746badfc803
5
5
  SHA512:
6
- metadata.gz: cbeb82ee800ebe3709e0f23e28c83b43cbe172256487bfd1d36d4c7204361e6c57aaa4756faec7c64ef0678179d80d8e5bf7973b9a935386e809bc6d42d4e673
7
- data.tar.gz: 8df611d967c990cefbec545f5cd3b351de115f24f72e944d4a62573c886f035a2361cbc74ff1b76c176cd592360bdb25e56862d7f540a7f5de128b9e5bc5fce7
6
+ metadata.gz: 71e7004c6d628e0fe95f3e2d1adaa85d572a557d139634562bb79ccb76a2fd986778773c0aa7895d87db398a16483e6ecf3b3dc26cd067ff7919e810232ab78a
7
+ data.tar.gz: 05b9b9d298593eddcacb447ac3270a9685bdc25881b67ca37a89c944626e631178ece3910b2931a0b6cb5a7ca553579830f486cd5f2093dfd618e8d978d4eec9
@@ -4,9 +4,9 @@ An ActiveRecord adapter for [Flipper](https://github.com/jnunemaker/flipper).
4
4
 
5
5
  Supported Active Record versions:
6
6
 
7
- * 3.2.x
8
7
  * 4.2.x
9
8
  * 5.0.x
9
+ * 6.0.x
10
10
 
11
11
  ## Installation
12
12
 
@@ -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', '>= 3.2', '< 6'
29
+ gem.add_dependency 'activerecord', '>= 4.2', '< 7'
30
30
  end
@@ -1,3 +1,5 @@
1
+ require 'active_support/lazy_load_hooks'
2
+
1
3
  ActiveSupport.on_load(:active_record) do
2
4
  require 'flipper/adapters/active_record'
3
5
  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; additionally
58
- # to_a.first is used instead of first because of a Ruby 2.4/Rails 3.2.21
59
- # CI failure (https://travis-ci.org/jnunemaker/flipper/jobs/297274000).
60
- unless @feature_class.where(key: feature.key).to_a.first
61
- @feature_class.create! { |f| f.key = feature.key }
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
- enable_single(feature, gate, thing)
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
- @gate_class.transaction do
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 enable_single(feature, gate, thing)
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
- rescue ::ActiveRecord::StatementInvalid => error
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 db_gate = db_gates.detect { |db_gate| db_gate.key == gate.key.to_s }
205
- db_gate.value
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 db_gate = db_gates.detect { |db_gate| db_gate.key == gate.key.to_s }
209
- db_gate.value
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
@@ -1,3 +1,3 @@
1
1
  module Flipper
2
- VERSION = '0.16.2'.freeze
2
+ VERSION = '0.17.1'.freeze
3
3
  end
@@ -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 rails5?
16
+ "[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]" if requires_migration_number?
17
17
  end
18
18
 
19
- def self.rails5?
20
- Rails.version.start_with?('5')
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.16.2
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-04-20 00:00:00.000000000 Z
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.16.2
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.16.2
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: '3.2'
33
+ version: '4.2'
34
34
  - - "<"
35
35
  - !ruby/object:Gem::Version
36
- version: '6'
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: '3.2'
43
+ version: '4.2'
44
44
  - - "<"
45
45
  - !ruby/object:Gem::Version
46
- version: '6'
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
- - test/generators/flipper/active_record_generator_test.rb
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
- rubyforge_project:
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