flipper-active_record 0.21.0.rc1 → 0.22.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
2
  SHA256:
3
- metadata.gz: 10540b212a4437f26f70a34fb2c172208194cdc610aaf9d7a5cf7f4b8e0f7c49
4
- data.tar.gz: 5b7f5cb7baa50a1729f230d4ec8962e162e697f5023b73fd6aecd2eb91485fd6
3
+ metadata.gz: 18500d2bb4a616c89ca974e8c6328d12d6079ef87cd6bdb679711cac461c8ebc
4
+ data.tar.gz: c170462a9bbb135de87bcef3e50a840bc5330d9858400288e20d420fd108917f
5
5
  SHA512:
6
- metadata.gz: 38b1110e99668682f51f606f7e08ebde6c03336e7912eef0ecf829ccc784584361b6d1298234739e654b68b18ef6c6ecd1c8cc3102e2d4930b8f60deba0a3e2f
7
- data.tar.gz: f6ca4e9da379fe7aeb3d3aa58a027f883c30f480ab019a13806f4f378427b742b8ecccf9451f586a46e57b73b3584a4bf7f4d16709af119e17d95c544975c274
6
+ metadata.gz: 6e0365f6a63821655f3d9411e0f4417b262116546feda368e3fe1f98198be8df9db7e27c2b38f7dee77fa2db71c224943bf1ebd2cd7e7919dc24197658a08f37
7
+ data.tar.gz: 39c4170606321f2befbe7b6da2316e77f2e1363476099aacbf9acaa2113c292825aff566a8fbdbe23beac9e2f25f99c7df54c7d58f1e8d1dabb2ba7d0229582e
@@ -34,9 +34,7 @@ Flipper will be configured to use the ActiveRecord adapter when `flipper-active_
34
34
  ```ruby
35
35
  require 'flipper/adapters/active_record'
36
36
  Flipper.configure do |config|
37
- config.default do
38
- Flipper.new(Flipper::Adapters::ActiveRecord.new)
39
- end
37
+ config.adapter { Flipper::Adapters::ActiveRecord.new }
40
38
  end
41
39
  ```
42
40
 
@@ -3,20 +3,17 @@ require_relative "./ar_setup"
3
3
  # Requires the flipper-active_record gem to be installed.
4
4
  require 'flipper/adapters/active_record'
5
5
 
6
- adapter = Flipper::Adapters::ActiveRecord.new
7
- flipper = Flipper.new(adapter)
6
+ Flipper[:stats].enable
8
7
 
9
- flipper[:stats].enable
10
-
11
- if flipper[:stats].enabled?
8
+ if Flipper[:stats].enabled?
12
9
  puts "Enabled!"
13
10
  else
14
11
  puts "Disabled!"
15
12
  end
16
13
 
17
- flipper[:stats].disable
14
+ Flipper[:stats].disable
18
15
 
19
- if flipper[:stats].enabled?
16
+ if Flipper[:stats].enabled?
20
17
  puts "Enabled!"
21
18
  else
22
19
  puts "Disabled!"
@@ -2,8 +2,6 @@ require_relative "./ar_setup"
2
2
 
3
3
  # Requires the flipper-active_record gem to be installed.
4
4
  require 'flipper/adapters/active_record'
5
- adapter = Flipper::Adapters::ActiveRecord.new
6
- flipper = Flipper.new(adapter)
7
5
 
8
6
  # Register a few groups.
9
7
  Flipper.register(:admins) { |thing| thing.admin? }
@@ -12,16 +10,16 @@ Flipper.register(:early_access) { |thing| thing.early_access? }
12
10
  # Create a user class that has flipper_id instance method.
13
11
  User = Struct.new(:flipper_id)
14
12
 
15
- flipper[:stats].enable
16
- flipper[:stats].enable_group :admins
17
- flipper[:stats].enable_group :early_access
18
- flipper[:stats].enable_actor User.new('25')
19
- flipper[:stats].enable_actor User.new('90')
20
- flipper[:stats].enable_actor User.new('180')
21
- flipper[:stats].enable_percentage_of_time 15
22
- flipper[:stats].enable_percentage_of_actors 45
13
+ Flipper[:stats].enable
14
+ Flipper[:stats].enable_group :admins
15
+ Flipper[:stats].enable_group :early_access
16
+ Flipper[:stats].enable_actor User.new('25')
17
+ Flipper[:stats].enable_actor User.new('90')
18
+ Flipper[:stats].enable_actor User.new('180')
19
+ Flipper[:stats].enable_percentage_of_time 15
20
+ Flipper[:stats].enable_percentage_of_actors 45
23
21
 
24
- flipper[:search].enable
22
+ Flipper[:search].enable
25
23
 
26
24
  puts 'all rows in features table'
27
25
  pp Flipper::Adapters::ActiveRecord::Feature.all
@@ -105,5 +103,5 @@ pp Flipper::Adapters::ActiveRecord::Gate.all
105
103
  puts
106
104
 
107
105
  puts 'flipper get of feature'
108
- pp adapter.get(flipper[:stats])
106
+ pp Flipper.adapter.get(Flipper[:stats])
109
107
  # flipper get of feature
@@ -25,5 +25,5 @@ Gem::Specification.new do |gem|
25
25
  gem.metadata = Flipper::METADATA
26
26
 
27
27
  gem.add_dependency 'flipper', "~> #{Flipper::VERSION}"
28
- gem.add_dependency 'activerecord', '>= 5.0', '< 7'
28
+ gem.add_dependency 'activerecord', '>= 4.2', '< 7'
29
29
  end
@@ -101,11 +101,12 @@ module Flipper
101
101
  end
102
102
 
103
103
  def get_all
104
- rows = ::ActiveRecord::Base.connection.select_all <<-SQL.tr("\n", ' ')
105
- SELECT ff.key AS feature_key, fg.key, fg.value
106
- FROM #{@feature_class.table_name} ff
107
- LEFT JOIN #{@gate_class.table_name} fg ON ff.key = fg.feature_key
108
- SQL
104
+ features = ::Arel::Table.new(@feature_class.table_name.to_sym)
105
+ gates = ::Arel::Table.new(@gate_class.table_name.to_sym)
106
+ rows_query = features.join(gates, Arel::Nodes::OuterJoin)
107
+ .on(features[:key].eq(gates[:feature_key]))
108
+ .project(features[:key].as('feature_key'), gates[:key], gates[:value])
109
+ rows = ::ActiveRecord::Base.connection.select_all rows_query
109
110
  db_gates = rows.map { |row| Gate.new(row) }
110
111
  grouped_db_gates = db_gates.group_by(&:feature_key)
111
112
  result = Hash.new { |hash, key| hash[key] = default_config }
@@ -172,10 +173,15 @@ module Flipper
172
173
  @gate_class.transaction do
173
174
  clear(feature) if clear_feature
174
175
  @gate_class.where(feature_key: feature.key, key: gate.key).destroy_all
175
- @gate_class.create! do |g|
176
- g.feature_key = feature.key
177
- g.key = gate.key
178
- g.value = thing.value.to_s
176
+ begin
177
+ @gate_class.create! do |g|
178
+ g.feature_key = feature.key
179
+ g.key = gate.key
180
+ g.value = thing.value.to_s
181
+ end
182
+ rescue ::ActiveRecord::RecordNotUnique
183
+ # assume this happened concurrently with the same thing and its fine
184
+ # see https://github.com/jnunemaker/flipper/issues/544
179
185
  end
180
186
  end
181
187
 
@@ -219,3 +225,7 @@ module Flipper
219
225
  end
220
226
  end
221
227
  end
228
+
229
+ Flipper.configure do |config|
230
+ config.adapter { Flipper::Adapters::ActiveRecord.new }
231
+ end
@@ -1,3 +1,3 @@
1
1
  module Flipper
2
- VERSION = '0.21.0.rc1'.freeze
2
+ VERSION = '0.22.1'.freeze
3
3
  end
@@ -2,12 +2,4 @@ require 'active_support/lazy_load_hooks'
2
2
 
3
3
  ActiveSupport.on_load(:active_record) do
4
4
  require 'flipper/adapters/active_record'
5
-
6
- Flipper.configure do |config|
7
- config.default do
8
- Flipper.new(Flipper::Adapters::ActiveRecord.new)
9
- end
10
- end
11
-
12
- ActiveRecord::Base.include Flipper::Identifier
13
5
  end
@@ -51,16 +51,12 @@ RSpec.describe Flipper::Adapters::ActiveRecord do
51
51
  Flipper.configuration = nil
52
52
  Flipper.instance = nil
53
53
 
54
- load 'flipper-active_record.rb'
54
+ load 'flipper/adapters/active_record.rb'
55
55
  ActiveSupport.run_load_hooks(:active_record, ActiveRecord::Base)
56
56
  end
57
57
 
58
58
  it 'configures itself' do
59
59
  expect(Flipper.adapter.adapter).to be_a(Flipper::Adapters::ActiveRecord)
60
60
  end
61
-
62
- it "defines #flipper_id on AR::Base" do
63
- expect(ActiveRecord::Base.ancestors).to include(Flipper::Identifier)
64
- end
65
61
  end
66
62
  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.21.0.rc1
4
+ version: 0.22.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: 2021-05-01 00:00:00.000000000 Z
11
+ date: 2021-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: flipper
@@ -16,21 +16,21 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.21.0.rc1
19
+ version: 0.22.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.21.0.rc1
26
+ version: 0.22.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: '5.0'
33
+ version: '4.2'
34
34
  - - "<"
35
35
  - !ruby/object:Gem::Version
36
36
  version: '7'
@@ -40,7 +40,7 @@ dependencies:
40
40
  requirements:
41
41
  - - ">="
42
42
  - !ruby/object:Gem::Version
43
- version: '5.0'
43
+ version: '4.2'
44
44
  - - "<"
45
45
  - !ruby/object:Gem::Version
46
46
  version: '7'
@@ -80,9 +80,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
80
80
  version: '0'
81
81
  required_rubygems_version: !ruby/object:Gem::Requirement
82
82
  requirements:
83
- - - ">"
83
+ - - ">="
84
84
  - !ruby/object:Gem::Version
85
- version: 1.3.1
85
+ version: '0'
86
86
  requirements: []
87
87
  rubygems_version: 3.0.3
88
88
  signing_key: