unveil-ruby 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Unveil::Ruby
1
+ # unveil-ruby
2
2
 
3
3
  A Rubygem for connecting to the Unveil service.
4
4
 
data/lib/unveil/app.rb CHANGED
@@ -5,6 +5,38 @@ module Unveil
5
5
  @attributes ||= JSON.parse(Unveil.get("").body)
6
6
  end
7
7
 
8
+ def feature_names(reload = false)
9
+ features(reload).collect(&:name)
10
+ end
11
+
12
+ def features(reload = false)
13
+ @features = nil if reload
14
+
15
+ unless @features
16
+ @features = attributes(reload)['features']
17
+
18
+ if Unveil.scan_for_features?
19
+ implemented_features.each do |name, paths|
20
+ if @features.collect { |f| f['name'] }.include?(name)
21
+ feature = @features.detect { |f| f['name'] == name }
22
+ feature['paths'] = paths
23
+ else
24
+ implemented_feature = {
25
+ 'name' => name,
26
+ 'groups' => [],
27
+ 'percentage' => nil,
28
+ 'user_count' => 0,
29
+ 'paths' => paths
30
+ }
31
+ @features << implemented_feature
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ @features.collect { |f| Unveil::Feature.new(f) }.sort_by(&:name)
38
+ end
39
+
8
40
  def method_missing(method, *args, &block)
9
41
  if attributes.has_key?(method.to_s)
10
42
  attributes(*args)[method.to_s]
@@ -12,5 +44,22 @@ module Unveil
12
44
  super
13
45
  end
14
46
  end
47
+
48
+ private
49
+
50
+ def implemented_features
51
+ @implemented_features ||= Dir[*Unveil.scan_dirs].inject({}) do |obj, path|
52
+ File.open(path) do |f|
53
+ f.grep(/rollout\?/) do |line|
54
+ line.scan(/rollout\?\s*\(*:(\w+)/).each do |line|
55
+ obj[line[0]] ||= []
56
+ obj[line[0]] << path
57
+ end
58
+ end
59
+ end
60
+
61
+ obj
62
+ end
63
+ end
15
64
  end
16
65
  end
@@ -1,41 +1,49 @@
1
1
  module Unveil
2
2
  class Feature
3
- def initialize(name)
4
- @name = name
3
+ def initialize(attrs)
4
+ @attributes = attrs
5
5
  end
6
6
 
7
7
  def enabled(user_id)
8
- Unveil.get "features/#{@name}/enabled/#{user_id}"
8
+ Unveil.get "features/#{name}/enabled/#{user_id}"
9
9
  end
10
10
 
11
11
  def deactivate_all
12
- Unveil.post 'features/deactivate_all', feature: @name
12
+ Unveil.post 'features/deactivate_all', feature: name
13
13
  end
14
14
 
15
15
  def activate_group(group)
16
16
  group = group.is_a?(Unveil::Group) ? group.name : group
17
- Unveil.post 'features/activate_group', feature: @name, group: group
17
+ Unveil.post 'features/activate_group', feature: name, group: group
18
18
  end
19
19
 
20
20
  def deactivate_group(group)
21
21
  group = group.is_a?(Unveil::Group) ? group.name : group
22
- Unveil.post 'features/deactivate_group', feature: @name, group: group
22
+ Unveil.post 'features/deactivate_group', feature: name, group: group
23
23
  end
24
24
 
25
25
  def activate_user(user_id)
26
- Unveil.post 'features/activate_user', feature: @name, user_id: user_id
26
+ Unveil.post 'features/activate_user', feature: name, user_id: user_id
27
27
  end
28
28
 
29
29
  def deactivate_user(user_id)
30
- Unveil.post 'features/deactivate_user', feature: @name, user_id: user_id
30
+ Unveil.post 'features/deactivate_user', feature: name, user_id: user_id
31
31
  end
32
32
 
33
33
  def activate_percentage(percentage)
34
- Unveil.post 'features/activate_percentage', feature: @name, percentage: percentage
34
+ Unveil.post 'features/activate_percentage', feature: name, percentage: percentage
35
35
  end
36
36
 
37
37
  def deactivate_percentage
38
- Unveil.post 'features/deactivate_percentage', feature: @name
38
+ Unveil.post 'features/deactivate_percentage', feature: name
39
+ end
40
+
41
+ def method_missing(method, *args, &block)
42
+ if @attributes.has_key?(method.to_s)
43
+ @attributes[method.to_s]
44
+ else
45
+ super
46
+ end
39
47
  end
40
48
  end
41
49
  end
@@ -1,3 +1,3 @@
1
1
  module Unveil
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/unveil.rb CHANGED
@@ -2,6 +2,11 @@ require 'unveil/version'
2
2
  require 'net/https'
3
3
 
4
4
  module Unveil
5
+ @@public_key = nil
6
+ @@private_key = nil
7
+ @@scan_for_features = false
8
+ @@scan_dirs = []
9
+
5
10
  class << self
6
11
  def configure
7
12
  yield self
@@ -15,6 +20,22 @@ module Unveil
15
20
  @@private_key = private_key
16
21
  end
17
22
 
23
+ def scan_for_features=(bool)
24
+ @@scan_for_features = bool
25
+ end
26
+
27
+ def scan_for_features?
28
+ @@scan_for_features
29
+ end
30
+
31
+ def scan_dirs=(dirs)
32
+ @@scan_dirs = dirs
33
+ end
34
+
35
+ def scan_dirs
36
+ @@scan_dirs
37
+ end
38
+
18
39
  def get(path)
19
40
  build_request :get, path
20
41
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unveil-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: