flagon 1.0.3
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.
- data/lib/flagon/inspector.rb +33 -0
- data/lib/flagon/loader/env_loader.rb +20 -0
- data/lib/flagon/loader/file_loader.rb +38 -0
- data/lib/flagon/loader/hash_loader.rb +27 -0
- data/lib/flagon.rb +48 -0
- metadata +51 -0
@@ -0,0 +1,33 @@
|
|
1
|
+
module Flagon
|
2
|
+
class Inspector
|
3
|
+
attr_reader :loader
|
4
|
+
|
5
|
+
def initialize(loader)
|
6
|
+
@loader = loader
|
7
|
+
end
|
8
|
+
|
9
|
+
def enabled?(flag_name)
|
10
|
+
raise FlagMissing, "The flag #{flag_name} is missing" unless exists?(flag_name)
|
11
|
+
get_flag(flag_name)
|
12
|
+
end
|
13
|
+
|
14
|
+
def when_enabled(flag_name)
|
15
|
+
if enabled?(flag_name)
|
16
|
+
yield
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class FlagMissing < Exception
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def get_flag(flag_name)
|
26
|
+
loader.get_flag(flag_name)
|
27
|
+
end
|
28
|
+
|
29
|
+
def exists?(flag_name)
|
30
|
+
loader.exists?(flag_name)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Flagon
|
2
|
+
module Loader
|
3
|
+
class EnvLoader
|
4
|
+
def exists?(flag_name)
|
5
|
+
key = to_key(flag_name)
|
6
|
+
!ENV[key].nil?
|
7
|
+
end
|
8
|
+
|
9
|
+
def get_flag(flag_name)
|
10
|
+
ENV[to_key(flag_name)] == 'on'
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def to_key(flag_name)
|
16
|
+
flag_name.upcase.to_s
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module Flagon
|
4
|
+
module Loader
|
5
|
+
class FileLoader
|
6
|
+
def initialize(file_name)
|
7
|
+
@file_name = file_name
|
8
|
+
end
|
9
|
+
|
10
|
+
def exists?(flag_name)
|
11
|
+
flags.has_key?(to_key(flag_name))
|
12
|
+
end
|
13
|
+
|
14
|
+
def get_flag(flag_name)
|
15
|
+
flags[to_key(flag_name)]
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def flags
|
21
|
+
@flags ||= load_flags
|
22
|
+
end
|
23
|
+
|
24
|
+
def load_flags
|
25
|
+
file = YAML.load(File.read(file_name))
|
26
|
+
file.each_with_object({}) do |kv,flags|
|
27
|
+
flags[to_key(kv[0])] = kv[1]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def to_key(flag_name)
|
32
|
+
flag_name.upcase.to_sym
|
33
|
+
end
|
34
|
+
|
35
|
+
attr_reader :file_name
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Flagon
|
2
|
+
module Loader
|
3
|
+
class HashLoader
|
4
|
+
def initialize(init_hash)
|
5
|
+
@flags = init_hash.each_with_object({}) do |kv,flags|
|
6
|
+
flags[to_key(kv[0])] = (kv[1] == 'on')
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def exists?(flag_name)
|
11
|
+
flags.has_key?(to_key(flag_name))
|
12
|
+
end
|
13
|
+
|
14
|
+
def get_flag(flag_name)
|
15
|
+
flags[to_key(flag_name)]
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def to_key(flag_name)
|
21
|
+
flag_name.upcase.to_sym
|
22
|
+
end
|
23
|
+
|
24
|
+
attr_reader :flags
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/flagon.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'flagon/inspector'
|
2
|
+
require 'flagon/loader/file_loader'
|
3
|
+
require 'flagon/loader/hash_loader'
|
4
|
+
require 'flagon/loader/env_loader'
|
5
|
+
|
6
|
+
module Flagon
|
7
|
+
class << self
|
8
|
+
|
9
|
+
# Init method takes one of the loaders listed below or a
|
10
|
+
# custom loader that responds to the same interface
|
11
|
+
def init(loader = env_loader)
|
12
|
+
@inspector = Inspector.new(loader)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Pre-defined loaders
|
16
|
+
def env_loader
|
17
|
+
Loader::EnvLoader.new
|
18
|
+
end
|
19
|
+
|
20
|
+
def file_loader(path)
|
21
|
+
Loader::FileLoader.new(path)
|
22
|
+
end
|
23
|
+
|
24
|
+
def hash_loader(init_hash)
|
25
|
+
Loader::HashLoader.new(init_hash)
|
26
|
+
end
|
27
|
+
|
28
|
+
# Convenience methods to allow calling Flagon.enabled? directly
|
29
|
+
def enabled?(flag_name)
|
30
|
+
check_initialized
|
31
|
+
@inspector.enabled?(flag_name)
|
32
|
+
end
|
33
|
+
|
34
|
+
def when_enabled(flag_name, &block)
|
35
|
+
check_initialized
|
36
|
+
@inspector.when_enabled(flag_name, &block)
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def check_initialized
|
42
|
+
raise NotInitialized unless @inspector
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
class NotInitialized < Exception
|
47
|
+
end
|
48
|
+
end
|
metadata
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: flagon
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.3
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Sittercity
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-01-16 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: A gem for managing feature flags either with environemnt variables or
|
15
|
+
config files
|
16
|
+
email:
|
17
|
+
- dev@sittercity.com
|
18
|
+
executables: []
|
19
|
+
extensions: []
|
20
|
+
extra_rdoc_files: []
|
21
|
+
files:
|
22
|
+
- lib/flagon/inspector.rb
|
23
|
+
- lib/flagon/loader/env_loader.rb
|
24
|
+
- lib/flagon/loader/file_loader.rb
|
25
|
+
- lib/flagon/loader/hash_loader.rb
|
26
|
+
- lib/flagon.rb
|
27
|
+
homepage: https://git.sittercity.com/sittercity/flagon
|
28
|
+
licenses: []
|
29
|
+
post_install_message:
|
30
|
+
rdoc_options: []
|
31
|
+
require_paths:
|
32
|
+
- lib
|
33
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
|
+
requirements: []
|
46
|
+
rubyforge_project:
|
47
|
+
rubygems_version: 1.8.23
|
48
|
+
signing_key:
|
49
|
+
specification_version: 3
|
50
|
+
summary: A feature flag gem
|
51
|
+
test_files: []
|