schaltroom 0.0.0 → 0.0.1.pre

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '04480030b0da6dd692245d7db4e8b85fd327e8568975c3a7506788692191122d'
4
- data.tar.gz: 97e687189a3b50b004a3ef9f9e76a7583698da4cadff285b748ec88bcc33ed51
3
+ metadata.gz: e3dbc493a156c86f50ff27783b8ff06a34eff1d50cd8a001ba36c6c0397681d5
4
+ data.tar.gz: 48d784dfd50b4cd16c43238b0a0d28f17a4c9d45c995e4f325fe23e9efd20ec4
5
5
  SHA512:
6
- metadata.gz: 93eef83c6c815c08f6789923b38482a5a052b8a55e37cab99a5c993b4c22e1da7a9191afda15a6075c348414d1658d336d92866f422851bc5340b1b425f4a4ec
7
- data.tar.gz: 8c3bd0d77c6f46a9bb8553f55bed1f7e9a8c4cc33e131139effec05c13ead3acfb9861fd519d45443b8f94fbc1c509ab59effc5e9b05b9d7ff76dbbd96265f80
6
+ metadata.gz: e7a0c7af49277ad12f4a478f0ac74fb798f49007c49c9e9d1214a4acb5827385b58cc595af7cd6000d25d5361593784617a91acd635b889928e5bcd0dffe4cf3
7
+ data.tar.gz: c6d8ebba5f4e137671aeb4b187d7f0ea2bdc8bde89bdad4d2cbba2442937fdfda2eca37f6cb6e9b5ad6ed04d52f181f292d2cd5ab1a0ff7ad5677639ca92bade
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Schaltroom
4
+ # configuration class for Schaltroom
5
+ class Config
6
+ attr_accessor :monitoring, :monitoring_file
7
+
8
+ # default values
9
+ def initialize
10
+ @monitoring = :disabled
11
+ @monitoring_file = nil
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Schaltroom
4
+ # features class for Schaltroom
5
+ class Repository < Hash
6
+ def add_feature(name, type, value)
7
+ sym = name.is_a?(Symbol) ? name : name.to_s.to_sym
8
+ if type == :boolean
9
+ self[sym] = { type: :boolean, value: value }
10
+ elsif type == :version
11
+ self[sym] = { type: :version, value: value }
12
+ else
13
+ raise Exception, "unknown type: #{type.to_sym}"
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Schaltroom
4
+ def self.gem_version
5
+ Gem::Version.new VERSION::STRING
6
+ end
7
+
8
+ module VERSION
9
+ MAJOR = 0
10
+ MINOR = 0
11
+ TINY = 1
12
+
13
+ STRING = [MAJOR, MINOR, TINY].compact.join('.')
14
+ end
15
+ end
data/lib/schaltroom.rb CHANGED
@@ -1,5 +1,107 @@
1
- class Schaltroom
2
- def self.hi
3
- puts "Hello world!"
1
+ # frozen_string_literal: true
2
+
3
+ require 'zeitwerk'
4
+ loader = Zeitwerk::Loader.for_gem
5
+ loader.setup
6
+
7
+ require 'ostruct'
8
+
9
+ # Feature Toggle library
10
+ module Schaltroom
11
+ attr_accessor :calls
12
+
13
+ @config ||= Config.new
14
+ @repository ||= Repository.new
15
+ @calls ||= []
16
+
17
+ def self.add_feature(name, type, value)
18
+ @repository.add_feature(name, type, value)
19
+ end
20
+
21
+ def self.config
22
+ if block_given?
23
+ yield @config
24
+ else
25
+ @config
4
26
  end
5
- end
27
+ end
28
+
29
+ def self.repository
30
+ if block_given?
31
+ yield @repository
32
+ else
33
+ @repository
34
+ end
35
+ end
36
+
37
+ def self.reset
38
+ @config = Config.new
39
+ @repository = Repository.new
40
+ @calls = []
41
+ end
42
+
43
+ def self.add_gem(gem)
44
+ @repository.add_feature(gem.to_s.to_sym, :version, gem::VERSION::STRING)
45
+ end
46
+
47
+ def self.find_feature(name)
48
+ return self.repository[name] if name.is_a?(Symbol)
49
+
50
+ self.repository[name.to_s.to_sym]
51
+ end
52
+
53
+ def self.delete_feature(name)
54
+ sym = name.is_a?(Symbol) ? name : name.to_s.to_sym
55
+ self.repository.delete(sym)
56
+ end
57
+
58
+ def self.features
59
+ self.repository if block_given?
60
+ end
61
+
62
+ def self.active?(name)
63
+ handle_caller(caller, __method__)
64
+ feature = find_feature(name)
65
+ return false unless feature
66
+ feature[:value]
67
+ end
68
+
69
+ def self.inactive?(name)
70
+ handle_caller(caller, __method__)
71
+ !active?(name)
72
+ end
73
+
74
+ def self.active_since?(name, version)
75
+ handle_caller(caller, __method__)
76
+ Gem::Version.new(version) <= Gem::Version.new(find_feature(name)[:value])
77
+ end
78
+
79
+ def self.inactive_since?(name, version)
80
+ handle_caller(caller, __method__)
81
+ Gem::Version.new(version) > Gem::Version.new(find_feature(name)[:value])
82
+ end
83
+
84
+ def self.active_before?(name, version)
85
+ handle_caller(caller, __method__)
86
+ Gem::Version.new(version) > Gem::Version.new(find_feature(name)[:value])
87
+ end
88
+
89
+ def self.inactive_before?(name, version)
90
+ handle_caller(caller, __method__)
91
+ Gem::Version.new(version) <= Gem::Version.new(find_feature(name)[:value])
92
+ end
93
+
94
+ def self.active_between?(name, first_version, last_version)
95
+ handle_caller(caller, __method__)
96
+ Gem::Version.new(first_version) <= Gem::Version.new(find_feature(name)[:value]) && Gem::Version.new(last_version) >= Gem::Version.new(find_feature(name)[:value])
97
+ end
98
+
99
+ def self.handle_caller(caller_stack, method)
100
+ return unless @config.monitoring == :enabled
101
+
102
+ @calls << { method: method.to_sym, caller: caller_stack[0] }
103
+ @calls = @calls.uniq
104
+ end
105
+ end
106
+
107
+ loader.eager_load
metadata CHANGED
@@ -1,25 +1,132 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schaltroom
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Erler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-31 00:00:00.000000000 Z
12
- dependencies: []
13
- description: Schaltroom is the Client Gem for the Schaltroom configuration server
14
- email: daviderler1959@gmail.com
11
+ date: 2019-10-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.17.3
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.17.3
27
+ - !ruby/object:Gem::Dependency
28
+ name: minitest
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '5.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '5.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest-reporters
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.4'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.4'
55
+ - !ruby/object:Gem::Dependency
56
+ name: mocha
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.9'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.9'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '13.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '13.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: simplecov
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.17.1
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.17.1
97
+ - !ruby/object:Gem::Dependency
98
+ name: zeitwerk
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '2.1'
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: 2.1.10
107
+ type: :runtime
108
+ prerelease: false
109
+ version_requirements: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - "~>"
112
+ - !ruby/object:Gem::Version
113
+ version: '2.1'
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: 2.1.10
117
+ description: schaltroom is the Client Gem for the Schaltroomconfiguration server
118
+ email: daviderler1995@gmail.com
15
119
  executables: []
16
120
  extensions: []
17
121
  extra_rdoc_files: []
18
122
  files:
19
123
  - lib/schaltroom.rb
124
+ - lib/schaltroom/config.rb
125
+ - lib/schaltroom/repository.rb
126
+ - lib/schaltroom/version.rb
20
127
  homepage: https://rubygems.org/gems/schaltroom
21
128
  licenses:
22
- - ''
129
+ - MIT
23
130
  metadata: {}
24
131
  post_install_message:
25
132
  rdoc_options: []
@@ -32,12 +139,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
32
139
  version: '0'
33
140
  required_rubygems_version: !ruby/object:Gem::Requirement
34
141
  requirements:
35
- - - ">="
142
+ - - ">"
36
143
  - !ruby/object:Gem::Version
37
- version: '0'
144
+ version: 1.3.1
38
145
  requirements: []
39
146
  rubygems_version: 3.0.3
40
147
  signing_key:
41
148
  specification_version: 4
42
- summary: Schaltroom
149
+ summary: schaltroom
43
150
  test_files: []