fflags 0.4.0 → 0.4.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 +4 -4
- data/.circleci/config.yml +8 -1
- data/Gemfile.lock +1 -1
- data/README.md +1 -0
- data/lib/fflags.rb +48 -1
- data/lib/fflags/api.rb +12 -6
- data/lib/fflags/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dcb8c6e2437f6545882deca349f45e3c5dec4869
|
4
|
+
data.tar.gz: f1b3341891da9c719adb9252c7cce0ca1d940d82
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 334336c321d12e3c21b7043e3a4843982c0aa7ea8ebc4e86744c71fdfdfc389fadadf0c14515f8a7acf578cca60424dcb0d6f0a4784cd094d80116c960bfaee2
|
7
|
+
data.tar.gz: 99f4018c40ea65fdb3fcd26f33099327bae8dbfa09a0f532b8f21e98ae31e73229559a8bd0b963849345156f20ad5845643658fea0ff73bb5fabdd6b79c78951
|
data/.circleci/config.yml
CHANGED
@@ -26,6 +26,12 @@ jobs:
|
|
26
26
|
# fallback to using the latest cache if no exact match is found
|
27
27
|
- v1-dependencies-
|
28
28
|
|
29
|
+
# Code Climate test reporter
|
30
|
+
- run:
|
31
|
+
name: install codeclimate test reporter
|
32
|
+
command: |
|
33
|
+
curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
34
|
+
chmod +x ./cc-test-reporter
|
29
35
|
|
30
36
|
- run:
|
31
37
|
name: install redis
|
@@ -61,11 +67,12 @@ jobs:
|
|
61
67
|
command: |
|
62
68
|
mkdir /tmp/test-results
|
63
69
|
TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)"
|
64
|
-
|
70
|
+
./cc-test-reporter before-build
|
65
71
|
bundle exec rspec --format progress \
|
66
72
|
--out /tmp/test-results/rspec.xml \
|
67
73
|
--format progress \
|
68
74
|
"${TEST_FILES}"
|
75
|
+
./cc-test-reporter after-build --exit-code $?
|
69
76
|
|
70
77
|
# collect reports
|
71
78
|
- store_test_results:
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
[](https://circleci.com/gh/faizalzakaria/fflags/tree/master)
|
2
2
|
[](https://codeclimate.com/github/faizalzakaria/fflags/maintainability)
|
3
|
+
[](https://codeclimate.com/github/faizalzakaria/fflags/test_coverage)
|
3
4
|
|
4
5
|
# FFlags
|
5
6
|
|
data/lib/fflags.rb
CHANGED
@@ -8,31 +8,78 @@ require 'fflags/api'
|
|
8
8
|
module FFlags
|
9
9
|
module_function
|
10
10
|
|
11
|
+
# Sets FFlags configuration using a block that
|
12
|
+
# will be invoked on initialization.
|
13
|
+
#
|
14
|
+
# Ex.
|
15
|
+
# FFlags.config do |config|
|
16
|
+
# config.flags = { flag_1: true, flag_2: false }
|
17
|
+
# end
|
11
18
|
def config
|
12
19
|
yield configuration
|
13
20
|
api.load_flags
|
14
21
|
end
|
15
22
|
|
23
|
+
# Returns all supported flags.
|
24
|
+
#
|
25
|
+
# Ex.
|
26
|
+
# FFlags.all
|
16
27
|
def all
|
17
28
|
api.flags
|
18
29
|
end
|
19
30
|
|
31
|
+
# Check if the flag is enabled,
|
32
|
+
# it returns true | false.
|
33
|
+
#
|
34
|
+
# Ex.
|
35
|
+
# FFlags.enabled?(:new_flag)
|
20
36
|
def enabled?(flag_name)
|
21
37
|
api.enabled?(flag_name)
|
22
38
|
end
|
23
39
|
|
40
|
+
# Sets flag.
|
41
|
+
#
|
42
|
+
# Ex.
|
43
|
+
# FFlags.set(:new_flag, true)
|
44
|
+
#
|
45
|
+
# (Not thread safe)
|
46
|
+
# FFlags.set(:new_flag, true) do
|
47
|
+
# puts 'hello'
|
48
|
+
# end
|
24
49
|
def set(flag_name, bool)
|
25
|
-
|
50
|
+
if block_given?
|
51
|
+
prev_flag = get(flag_name)
|
52
|
+
api.set_flag(flag_name, bool)
|
53
|
+
yield
|
54
|
+
api.set_flag(flag_name, prev_flag)
|
55
|
+
else
|
56
|
+
api.set_flag(flag_name, bool)
|
57
|
+
end
|
26
58
|
end
|
27
59
|
|
60
|
+
# Gets value (as String) of a given flag.
|
61
|
+
#
|
62
|
+
# Ex.
|
63
|
+
# FFlags.get(:new_flag)
|
28
64
|
def get(flag_name)
|
29
65
|
api.get_flag(flag_name)
|
30
66
|
end
|
31
67
|
|
68
|
+
# Toggle the given flag.
|
69
|
+
# If its true, then the flag would be set to false.
|
70
|
+
# If its false, then the flag would be set to true.
|
71
|
+
#
|
72
|
+
# Ex.
|
73
|
+
# FFlags.toggle(:new_flag)
|
32
74
|
def toggle(flag_name)
|
33
75
|
api.toggle_flag(flag_name)
|
34
76
|
end
|
35
77
|
|
78
|
+
# Reset all the flags to the default value.
|
79
|
+
# The default values are as defined in the config under flags attribute.
|
80
|
+
#
|
81
|
+
# Ex.
|
82
|
+
# FFlags.reset
|
36
83
|
def reset
|
37
84
|
api.reset
|
38
85
|
end
|
data/lib/fflags/api.rb
CHANGED
@@ -14,7 +14,8 @@ module FFlags
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def set_flag(flag_name, bool)
|
17
|
-
|
17
|
+
supported_flag?(flag_name) &&
|
18
|
+
client.set(key, flag_name, bool)
|
18
19
|
end
|
19
20
|
|
20
21
|
def get_flag(flag_name)
|
@@ -30,19 +31,24 @@ module FFlags
|
|
30
31
|
load_flags
|
31
32
|
end
|
32
33
|
|
33
|
-
def flag_exist?(flag_name)
|
34
|
-
!get_flag(flag_name).nil?
|
35
|
-
end
|
36
|
-
|
37
34
|
def load_flags
|
38
35
|
default_flags.each do |flag, bool|
|
39
|
-
next if
|
36
|
+
next if flag_is_not_nil?(flag)
|
40
37
|
set_flag(flag, bool)
|
41
38
|
end
|
42
39
|
end
|
43
40
|
|
44
41
|
private
|
45
42
|
|
43
|
+
def supported_flag?(flag_name)
|
44
|
+
default_flags.include?(flag_name.to_sym) ||
|
45
|
+
default_flags.include?(flag_name.to_s)
|
46
|
+
end
|
47
|
+
|
48
|
+
def flag_is_not_nil?(flag_name)
|
49
|
+
!get_flag(flag_name).nil?
|
50
|
+
end
|
51
|
+
|
46
52
|
def truthy?(value)
|
47
53
|
value == true || value == 'true'
|
48
54
|
end
|
data/lib/fflags/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fflags
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Faizal Zakaria
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-12-
|
11
|
+
date: 2017-12-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redis
|