ffeature 0.0.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 +7 -0
- data/README.md +59 -0
- data/lib/ffeature/feature.rb +15 -0
- data/lib/ffeature/helper.rb +15 -0
- data/lib/ffeature/version.rb +3 -0
- data/lib/ffeature.rb +44 -0
- data/lib/railtie.rb +11 -0
- metadata +148 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 646340342d1aa9998f7450ea4241cb14aec3a49c
|
4
|
+
data.tar.gz: 1396b0f16f21a306acb1186c589e2d3412beec36
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 91fbc87c852569ecb8f501e1e786165b31bb07b7abfd4d53f08ef990f1d66705035adad69e0b2a00375f9582f3cbcc4bf1e84d0641faa28758f5b80628681814
|
7
|
+
data.tar.gz: 81754305fae394915bb46a28fff54b8419543a7064217d821fb54edaf7514dd5ca282c47a8b58b545309a63ee98ce0be7410f636ba59cb932e6db1dd0b14ce68
|
data/README.md
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
# FFeature
|
2
|
+
|
3
|
+
[](https://travis-ci.org/fs/ffeature)
|
4
|
+
[](https://gemnasium.com/github.com/fs/ffeature)
|
5
|
+
|
6
|
+
This is simple wrapper around Flipper for Rails projects to remove ugly global variables like `$flipper`.
|
7
|
+
|
8
|
+
## Usage
|
9
|
+
|
10
|
+
* `ffeature?(feature, user = current_user)` helper in views and controllers
|
11
|
+
* `FFeature.enabled?(feature, user)` helper for PORO
|
12
|
+
|
13
|
+
Here `user` or `current_user` should respond to `tester?` method to determine feature status for specific user.
|
14
|
+
|
15
|
+
## Configuration
|
16
|
+
|
17
|
+
You can configure `FFeature` in `config/inititalizers/ffeature.rb`
|
18
|
+
|
19
|
+
```ruby
|
20
|
+
# config/inititalizers/ffeature.rb
|
21
|
+
|
22
|
+
require "flipper"
|
23
|
+
require "flipper/adapters/redis"
|
24
|
+
|
25
|
+
url = ENV.fetch("REDISTOGO_URL", ENV.fetch("REDIS_URL", nil))
|
26
|
+
url = URI.parse(url) if url.present?
|
27
|
+
|
28
|
+
redis = Redis.new(url: url)
|
29
|
+
adapter = Flipper::Adapters::Redis.new(redis)
|
30
|
+
|
31
|
+
FFeature.configure do |config|
|
32
|
+
config.features = %i(user_management)
|
33
|
+
config.ip_whitelist = ENV.fetch("FLIPPER_UI_IP_WHITELIST", "").split(",")
|
34
|
+
config.flipper = Flipper.new(adapter)
|
35
|
+
config.dev_mode = ENV["FEATURE_DEV_MODE"].present?
|
36
|
+
end
|
37
|
+
```
|
38
|
+
|
39
|
+
Following options are available:
|
40
|
+
* `features` – list of features registered for testers
|
41
|
+
* `ip_whitelist` – list of IP addresses, could be used to configure FlipperUI route constraints
|
42
|
+
* `dev_mode` – if enabled all features considered enabled for all users
|
43
|
+
|
44
|
+
## FlipperUI
|
45
|
+
|
46
|
+
You can use FlipperUI to have more robust control over features.
|
47
|
+
|
48
|
+
```ruby
|
49
|
+
# config/routes.rb
|
50
|
+
constraints(->(request) { FFeature.ip_allowed?(request.remote_ip) }) do
|
51
|
+
mount Flipper::UI.app(FFeature.flipper) => "/flipper"
|
52
|
+
end
|
53
|
+
```
|
54
|
+
## Credits
|
55
|
+
|
56
|
+
FFeature is maintained and was written by [Flatstack](http://www.flatstack.com) with the help of our
|
57
|
+
[contributors](http://github.com/fs/ffeature/contributors).
|
58
|
+
|
59
|
+
[<img src="http://www.flatstack.com/logo.svg" width="100"/>](http://www.flatstack.com)
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module FFeature
|
2
|
+
class Feature
|
3
|
+
attr_reader :feature
|
4
|
+
private :feature
|
5
|
+
|
6
|
+
def initialize(feature)
|
7
|
+
@feature = feature
|
8
|
+
end
|
9
|
+
|
10
|
+
def enabled?(user)
|
11
|
+
return true if FFeature.dev_mode
|
12
|
+
FFeature.flipper[feature].enabled?(user.to_model)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/ffeature.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
require "bundler/setup"
|
2
|
+
Bundler.setup
|
3
|
+
|
4
|
+
require "flipper"
|
5
|
+
require "active_support/core_ext/module/attribute_accessors"
|
6
|
+
|
7
|
+
require "ffeature/version"
|
8
|
+
require "ffeature/feature"
|
9
|
+
|
10
|
+
module FFeature
|
11
|
+
cattr_accessor :ip_whitelist
|
12
|
+
self.ip_whitelist = []
|
13
|
+
|
14
|
+
cattr_accessor :dev_mode
|
15
|
+
self.dev_mode = false
|
16
|
+
|
17
|
+
cattr_accessor :features
|
18
|
+
self.features = %i(user_management)
|
19
|
+
|
20
|
+
cattr_accessor :flipper
|
21
|
+
self.flipper = nil
|
22
|
+
|
23
|
+
def self.configure
|
24
|
+
yield(self)
|
25
|
+
|
26
|
+
Flipper.register(:testers, &:tester?)
|
27
|
+
|
28
|
+
features.each do |feature|
|
29
|
+
flipper[feature].enable(flipper.group(:testers))
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.reset!
|
34
|
+
Flipper.unregister_groups
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.ip_allowed?(ip)
|
38
|
+
ip_whitelist.include?(ip)
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.enabled?(feature, user)
|
42
|
+
Feature.new(feature).enabled?(user)
|
43
|
+
end
|
44
|
+
end
|
data/lib/railtie.rb
ADDED
metadata
ADDED
@@ -0,0 +1,148 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ffeature
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Timur Vafin
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-08-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: flipper
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: bundler-audit
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubocop
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubocop-rspec
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
description: Flipper Helper
|
112
|
+
email:
|
113
|
+
- timur.vafin@flatstack.com
|
114
|
+
executables: []
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- README.md
|
119
|
+
- lib/ffeature.rb
|
120
|
+
- lib/ffeature/feature.rb
|
121
|
+
- lib/ffeature/helper.rb
|
122
|
+
- lib/ffeature/version.rb
|
123
|
+
- lib/railtie.rb
|
124
|
+
homepage: https://github.com/fs/flipper-helper
|
125
|
+
licenses:
|
126
|
+
- MIT
|
127
|
+
metadata: {}
|
128
|
+
post_install_message:
|
129
|
+
rdoc_options: []
|
130
|
+
require_paths:
|
131
|
+
- lib
|
132
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
134
|
+
- - ">="
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: '0'
|
137
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - ">="
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
requirements: []
|
143
|
+
rubyforge_project:
|
144
|
+
rubygems_version: 2.5.1
|
145
|
+
signing_key:
|
146
|
+
specification_version: 4
|
147
|
+
summary: Flipper Helper
|
148
|
+
test_files: []
|