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.
@@ -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: []