flipper-activerecord 0.1.0 → 0.1.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
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