featureflow 0.3.7 → 0.4.0

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: 47b0db4c710ccf1fcff7d0042b2df43a14fb5ea1
4
- data.tar.gz: d7b00c1a246338da291a2bb65db33b57bbbaada9
3
+ metadata.gz: bb85e275ba7fc47744ef930e0a983e75a15323fd
4
+ data.tar.gz: 037f88e647b2ba2f72f3389f357bbb830e35ce23
5
5
  SHA512:
6
- metadata.gz: bf23b554a973e5ec9c4fb1169f6575750b40198f01e94c4018b5f0d820bb3a1f88733be3c5f76afecf90917224a5c35b72995f95e45aa3390e78c0c43451b64e
7
- data.tar.gz: 8e2171aa3d6ce88e209912b32e2ff63c093a3efbfcd37124f5f392d25b90057bfe1af56011da43a52315f282cfcb28de6e04a64bb8f80418a882f094363123b7
6
+ metadata.gz: ccaac50587ea54480ac8beef8d3346cb905f9ce98e5158da9085bc1aa92a8769d40923ee41cd947e5a9188802c05f1c2d12faa4ac9279baf3cdbc8fae7395760
7
+ data.tar.gz: 6716daafbc92e7c94a2f0f10b7c065d5908181c50dc6ae1d2990837ab4377b7a0b195b9051269ff3ff1495fefa2bd332e7bfa359d8d90f90ec2bf9b4249e8912
data/CHANGELOG.md CHANGED
@@ -1,4 +1,7 @@
1
1
  # Change log
2
+ ## [0.4.0] - 2017-06-26
3
+ ### Changed
4
+ - Added Rails support
2
5
  ## [0.3.3] - 2017-06-23
3
6
  ### Changed
4
7
  - Initial Release
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- featureflow (0.3.6)
4
+ featureflow (0.3.8)
5
5
  excon (~> 0.57.0)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -36,17 +36,48 @@ The usage of each class is documented below.
36
36
 
37
37
  ### Quick start
38
38
 
39
- Get your environment's Featureflow Server API key and initialise a new Featureflow client
39
+ Firstly you will need to get your environment's Featureflow Server API key and initialise a new Featureflow client
40
+
41
+ This will load the rules for each feature for the current environment, specified by the api key.
42
+ These rules can be changed at `https://<your-org-key>.featureflow.io`.
43
+ When the rules are updated, the changes made will be applied to your application.
44
+
45
+ ##### Ruby Quick Start
46
+
47
+ If you are using ruby you can create a featureflow client like this:
40
48
 
41
49
  ```ruby
42
- FEATUREFLOW_SERVER_KEY = '<Your server api key goes here>'
43
- featureflow = Featureflow::Client.new api_key: FEATUREFLOW_SERVER_KEY
50
+ featureflow = Featureflow::Client.new api_key: '<Your server api key goes here>'
51
+ ```
52
+
53
+ Or, you can set the environment variable `FEATUREFLOW_SERVER_KEY` and just write:
54
+
55
+ ```ruby
56
+ featureflow = Featureflow::Client.new
57
+ ```
58
+ **Note: `featureflow`, as instantiated above, should be treated as a singleton. You are responsible for sharing it with the rest of your application**
59
+
60
+ ##### Rails Quick Start
61
+
62
+ If you are using rails you can run the generator to setup Featureflow in your Rails application.
63
+
64
+ ```bash
65
+ $ rails generator featureflow <Your server api key goes here>
66
+ ```
67
+
68
+ Or, you can set the environment variable `FEATUREFLOW_SERVER_KEY` and the Rails Featureflow client will pick it up and use that.
69
+
70
+ You will then be able to access your Featureflow client in your controllers, for example:
71
+
72
+ ```ruby
73
+ class MainController < ApplicationController
74
+ def index
75
+ featureflow # this method will now reference the featureflow client
76
+ end
77
+ end
44
78
  ```
45
79
 
46
- This will load the rules for each feature for the current environment specified by the api key.
47
- These rules can be changed at `https://<your-org-key>.featureflow.io`, and the changes will be applied to your application.
48
80
 
49
- **Note: You are responsible for passing the featureflow instance around your application**
50
81
 
51
82
  #### Defining Context
52
83
 
@@ -128,7 +159,8 @@ Further documentation can be found [here](http://docs.featureflow.io/docs)
128
159
  ## Roadmap
129
160
  - [x] Write documentation
130
161
  - [x] Release to RubyGems
131
- - [ ] Write Ruby on Rails integration
162
+ - [x] Write Ruby on Rails integration
163
+ - [ ] Add Ruby on Rails helper to user featureflow in views
132
164
 
133
165
  ## License
134
166
 
@@ -1,4 +1,4 @@
1
- require_relative 'evaluate_helpers'
1
+ require 'featureflow/evaluate_helpers'
2
2
 
3
3
  module Featureflow
4
4
  class Evaluate
@@ -4,7 +4,7 @@ require 'json'
4
4
  module Featureflow
5
5
  class PollingClient
6
6
  DEFAULT_OPTIONS = {
7
- delay: 30,
7
+ poll_interval: 30,
8
8
  timeout: 30
9
9
  }.freeze
10
10
  def initialize(url, api_key, options = {}, &set_features)
@@ -17,7 +17,7 @@ module Featureflow
17
17
  load_features
18
18
  Thread.new do
19
19
  loop do
20
- sleep @options[:delay]
20
+ sleep @options[:poll_interval]
21
21
  load_features
22
22
  end
23
23
  end
@@ -0,0 +1,19 @@
1
+ require 'featureflow/client'
2
+
3
+ module Featureflow
4
+ class RailsClient
5
+ def initialize(request)
6
+ @request = request
7
+ end
8
+ def evaluate(key, context)
9
+ request_context_values = {
10
+ 'featureflow.ip' => @request.remote_ip,
11
+ 'featureflow.url' => @request.original_url
12
+ }
13
+ context = {key: context, values: {}} if context.is_a?(String)
14
+ Featureflow.featureflow.evaluate(key,
15
+ key: context[:key],
16
+ values: request_context_values.merge(context[:values]))
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,42 @@
1
+ require 'featureflow/rails/rails_client'
2
+ module Featureflow
3
+ LOCK = Mutex.new
4
+
5
+ class << self
6
+ def configure(config_hash=nil)
7
+ if config_hash
8
+ configuration.merge!(config_hash)
9
+ end
10
+
11
+ yield(configuration) if block_given?
12
+ yield(featureflow) if block_given?
13
+ end
14
+
15
+ # Configuration getters
16
+ def configuration
17
+ @configuration = nil unless defined?(@configuration)
18
+ @configuration || LOCK.synchronize { @configuration ||= {} }
19
+ end
20
+
21
+ # Configuration getters
22
+ def featureflow
23
+ @featureflow = nil unless defined?(@featureflow)
24
+ @featureflow || LOCK.synchronize { @featureflow ||= Featureflow::Client.new(configuration) }
25
+ end
26
+ end
27
+
28
+ class FeatureflowRailtie < Rails::Railtie
29
+
30
+ config.before_initialize do
31
+ ActiveSupport.on_load(:action_controller) do
32
+ # @client =
33
+ ActionController::Base.class_eval do
34
+ def featureflow
35
+ Featureflow::RailsClient.new(request)
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ end
42
+ end
@@ -1,3 +1,3 @@
1
1
  module Featureflow
2
- VERSION = "0.3.7"
2
+ VERSION = "0.4.0"
3
3
  end
data/lib/featureflow.rb CHANGED
@@ -13,4 +13,6 @@ module Featureflow
13
13
  end
14
14
  end
15
15
  end
16
- end
16
+ end
17
+
18
+ require 'featureflow/rails/railtie' if defined?(Rails)
@@ -0,0 +1,24 @@
1
+ require 'rails/generators'
2
+ class FeatureflowGenerator < Rails::Generators::Base
3
+ source_root File.expand_path('../templates', __FILE__)
4
+
5
+ argument :api_key, required: true, :desc => "required"
6
+
7
+ gem "featureflow"
8
+
9
+ desc "Configures the featureflow with your API key"
10
+
11
+ def create_initializer_file
12
+ unless /^srv-env-[a-f0-9]{32}$/ =~ api_key
13
+ raise Thor::Error, "Invalid featureflow environment api key #{api_key.inspect}\nYou can find your environment api key on your featureflow dashboard at https://[APP-NAME].featureflow.io/"
14
+ end
15
+
16
+ initializer "featureflow.rb" do
17
+ <<-EOF
18
+ Featureflow.configure(
19
+ api_key: #{api_key.inspect}
20
+ )
21
+ EOF
22
+ end
23
+ end
24
+ end
data/test.rb CHANGED
@@ -7,15 +7,15 @@ with_features = [
7
7
 
8
8
 
9
9
 
10
- api_key = 'srv-env-9b5fff890c724d119a334a64ed4d2eb2'
11
- featureflow_client = Featureflow::Client.new(api_key: api_key, with_features: with_features)
12
- # context = Featureflow::ContextBuilder.new('user1').build
13
- puts('test-integration is on? ' + featureflow_client.evaluate('test-integration', 'user1').on?.to_s)
14
- featureflow_client.evaluate('nooooo', 'user1').on?
15
- featureflow_client.evaluate('default', 'user1').on?
10
+ # api_key = 'srv-env-9b5fff890c724d119a334a64ed4d2eb2'
11
+ api_key = 'srv-env-f472cfa8c2774ea2b3678fc5a3dbfe13'
12
+ featureflow_client = Featureflow::Client.new(api_key: api_key, with_features: with_features, url: 'http://10.10.2.163:8081')
13
+ context = Featureflow::ContextBuilder.new('user1').build
14
+ puts('test-integration is on? ' + featureflow_client.evaluate('test-integration', context).on?.to_s)
15
+ featureflow_client.evaluate('nooooo', context).on?
16
+ featureflow_client.evaluate('default', context).on?
16
17
 
17
18
  #
18
- # loop do
19
- # puts('test-integration is on? ' + featureflow_client.evaluate('test-integration', context).on?.to_s)
20
- # sleep 5
21
- # end
19
+ loop do
20
+ sleep 1
21
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: featureflow
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.7
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henry Young
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-06-23 00:00:00.000000000 Z
11
+ date: 2017-06-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -105,7 +105,10 @@ files:
105
105
  - lib/featureflow/events_client.rb
106
106
  - lib/featureflow/feature.rb
107
107
  - lib/featureflow/polling_client.rb
108
+ - lib/featureflow/rails/rails_client.rb
109
+ - lib/featureflow/rails/railtie.rb
108
110
  - lib/featureflow/version.rb
111
+ - lib/generators/featureflow_generator.rb
109
112
  - test.rb
110
113
  homepage: https://github.com/featureflow/featureflow-ruby-sdk
111
114
  licenses: