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 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