flagon 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []