flipper-activerecord 0.1.0 → 0.1.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
  SHA1:
3
- metadata.gz: 9a886563a18c40c7b980312b52cb6d5cb19fb69e
4
- data.tar.gz: 6bfd3bb2d5614ead072521d28cecd4c72e2a9805
3
+ metadata.gz: 6ec2097f8dbc9a98ef38c03221acee5ac110f2ba
4
+ data.tar.gz: da9f1e5cabe70e31c723d8e99f3bf86380ff1fb1
5
5
  SHA512:
6
- metadata.gz: 5a4469b453296c8085cb9fc271e81362132afa0508e98304c978288bf69695adf8314c0ed46139ce4572403216fb3814d6efbf8016f4d43f31eb5518a76d55aa
7
- data.tar.gz: df879aa060f5d9c2d34047709b24ac2f53604484f4209e4dbbf9eecbea8560c1b20949b5730df1e1f192eb85131feb83169b619e8e92a309503a233525b4b8e0
6
+ metadata.gz: e1d30fd53b36dde9f18a0ee96a0f77f1c8e4e253765f2a2fc14881c1225ba62a9731d6cbd413b9de0dda210ac89adf151a7b845ccfacd6631f6cc658582d9f96
7
+ data.tar.gz: d0160bd0df31d7ef1605186092bde0e207eec478bf019e93ea62cbbc1e74a4da3a08cc16d2069a66d492996bc6fca35084f3552bf479bb968ae8723734b3c14d
data/Gemfile.lock CHANGED
@@ -7,9 +7,9 @@ GIT
7
7
  PATH
8
8
  remote: .
9
9
  specs:
10
- flipper-activerecord (0.1.0)
10
+ flipper-activerecord (0.1.1)
11
11
  activerecord (>= 4.2.0.beta2)
12
- flipper (~> 0.6.0)
12
+ flipper (~> 0.6)
13
13
 
14
14
  GEM
15
15
  remote: https://rubygems.org/
@@ -4,7 +4,6 @@ module Flipper
4
4
  self.table_name = "flipper_features"
5
5
 
6
6
  has_many :gates, foreign_key: "flipper_feature_id", :dependent => :destroy
7
- default_scope { includes(:gates) }
8
7
  end
9
8
  end
10
9
  end
@@ -13,8 +13,7 @@ module Flipper
13
13
  # Public: The name of the adapter.
14
14
  attr_reader :name
15
15
 
16
- def initialize(collection)
17
- @collection = collection
16
+ def initialize
18
17
  @name = :activerecord
19
18
  end
20
19
 
@@ -25,7 +24,7 @@ module Flipper
25
24
 
26
25
  # Public: Adds a feature to the set of known features.
27
26
  def add(feature)
28
- Flipper::ActiveRecord::Feature.create!(name: feature.name.to_s)
27
+ Flipper::ActiveRecord::Feature.find_or_create_by!(name: feature.name.to_s)
29
28
  true
30
29
  end
31
30
 
@@ -45,7 +44,7 @@ module Flipper
45
44
  # Returns a Hash of Flipper::Gate#key => value.
46
45
  def get(feature)
47
46
  result = {}
48
- f = Flipper::ActiveRecord::Feature.find_by(name: feature.key)
47
+ f = Flipper::ActiveRecord::Feature.eager_load(:gates).find_by(name: feature.key)
49
48
 
50
49
  feature.gates.each do |gate|
51
50
  result[gate.key] = case gate.data_type
@@ -76,23 +75,34 @@ module Flipper
76
75
  #
77
76
  # Returns true.
78
77
  def enable(feature, gate, thing)
79
- f = Flipper::ActiveRecord::Feature.find_or_create_by(name: feature.key.to_s)
80
- f.gates.find_or_create_by!(name: gate.key.to_s, value: thing.value.to_s)
78
+ case gate.data_type
79
+ when :boolean, :integer
80
+ g = Flipper::ActiveRecord::Gate.joins(:feature).
81
+ where(flipper_features: {name: feature.key}).
82
+ find_or_initialize_by({
83
+ name: gate.key.to_s,
84
+ })
85
+ g.value = thing.value.to_s
86
+ unless g.persisted?
87
+ g.feature = Flipper::ActiveRecord::Feature.select(:id).find_or_create_by!(name: feature.key)
88
+ end
89
+ g.save!
90
+ when :set
91
+ g = Flipper::ActiveRecord::Gate.joins(:feature).
92
+ where(flipper_features: {name: feature.key}).
93
+ find_or_initialize_by({
94
+ name: gate.key.to_s,
95
+ value: thing.value.to_s,
96
+ })
97
+ unless g.persisted?
98
+ g.feature = Flipper::ActiveRecord::Feature.select(:id).find_or_create_by!(name: feature.key)
99
+ end
100
+ g.save!
101
+ else
102
+ unsupported_data_type gate.data_type
103
+ end
104
+
81
105
  true
82
- # case gate.data_type
83
- # when :boolean, :integer
84
- # update feature.key, '$set' => {
85
- # gate.key.to_s => thing.value.to_s,
86
- # }
87
- # when :set
88
- # update feature.key, '$addToSet' => {
89
- # gate.key.to_s => thing.value.to_s,
90
- # }
91
- # else
92
- # unsupported_data_type gate.data_type
93
- # end
94
- #
95
- # true
96
106
  end
97
107
 
98
108
  # Public: Disables a gate for a given thing.
@@ -103,18 +113,16 @@ module Flipper
103
113
  #
104
114
  # Returns true.
105
115
  def disable(feature, gate, thing)
106
- conditions = { flipper_features: {name: feature.key} }
116
+ scope = Flipper::ActiveRecord::Gate.joins(:feature).where(flipper_features: {name: feature.key})
107
117
 
108
118
  g = case gate.data_type
109
119
  when :boolean
110
- Flipper::ActiveRecord::Gate.joins(:feature).where(conditions).destroy_all
120
+ scope.destroy_all
111
121
  when :integer
112
- conditions.merge!(name: gate.key.to_s)
113
- Flipper::ActiveRecord::Gate.joins(:feature).where(conditions).
114
- limit(1).update_all(value: thing.value.to_s)
122
+ scope.where(name: gate.key.to_s).limit(1).
123
+ update_all(value: thing.value.to_s)
115
124
  when :set
116
- conditions.merge!(name: gate.key.to_s, value: thing.value.to_s)
117
- Flipper::ActiveRecord::Gate.joins(:feature).where(conditions).destroy_all
125
+ scope.where(name: gate.key.to_s, value: thing.value.to_s).destroy_all
118
126
  else
119
127
  unsupported_data_type gate.data_type
120
128
  end
@@ -127,26 +135,6 @@ module Flipper
127
135
  raise "#{data_type} is not supported by this adapter"
128
136
  end
129
137
 
130
- # Private
131
- def find(key)
132
- @collection.find_one(criteria(key)) || {}
133
- end
134
-
135
- # Private
136
- def update(key, updates)
137
- options = {:upsert => true}
138
- @collection.update criteria(key), updates, options
139
- end
140
-
141
- # Private
142
- def delete(key)
143
- @collection.remove criteria(key)
144
- end
145
-
146
- # Private
147
- def criteria(key)
148
- {:_id => key.to_s}
149
- end
150
138
  end
151
139
  end
152
140
  end
@@ -1,7 +1,7 @@
1
1
  module Flipper
2
2
  module Adapters
3
3
  class ActiveRecord
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  end
6
6
  end
7
7
  end
@@ -1,9 +1,10 @@
1
1
  class CreateFlipperTables < ActiveRecord::Migration
2
2
  def self.up
3
3
  create_table :flipper_features do |t|
4
- t.string :name, null: false, unique: true
4
+ t.string :name, null: false
5
5
  t.timestamps null: false
6
6
  end
7
+ add_index :flipper_features, :name, unique: true
7
8
 
8
9
  create_table :flipper_gates do |t|
9
10
  t.integer :flipper_feature_id, null: false
@@ -3,10 +3,7 @@ require 'flipper/adapters/activerecord'
3
3
  require 'flipper/spec/shared_adapter_specs'
4
4
 
5
5
  describe Flipper::Adapters::ActiveRecord do
6
- let(:pool) { ActiveRecord::Base.connection_pool }
7
- # Que.connection = ::ActiveRecord if defined? ::ActiveRecord
8
-
9
- subject { described_class.new(pool) }
6
+ subject { described_class.new }
10
7
 
11
8
  it_should_behave_like 'a flipper adapter'
12
9
  end
data/spec/helper.rb CHANGED
@@ -12,7 +12,7 @@ config = YAML.load(File.read("spec/database.yml"))
12
12
  ActiveRecord::Base.establish_connection config["postgresql"]
13
13
  ActiveRecord::Migration.verbose = true
14
14
 
15
- require 'generators/flipper-activerecord/templates/migration'
15
+ require 'generators/flipper/templates/migration'
16
16
  ActiveRecord::Schema.define do
17
17
  CreateFlipperTables.up
18
18
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flipper-activerecord
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Blake Gentry