rflags 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rflags.rb +44 -23
- data/test/test_file_flag.rb +1 -0
- data/test/test_rflags.rb +12 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 777559cce034a5c0198966e148f18bd3e363f878
|
4
|
+
data.tar.gz: a5dcddfda202f53578037ef52687332c68c77a51
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bc795e572b4aa88327b9af539da8f55351414e4891bc655de72b4528390dfee5580647a4d10f01753e79fe2bbd910c0d6b4676e88a03257baf2bf85e2859c85f
|
7
|
+
data.tar.gz: 8d660af52d41c2f4045cf2c837b1a190b54c7538a112af145f15e94c84ceb086bffceb23ff657e7491af88e48dc1e99682acf666354162bb7736dbc59321f4e5
|
data/lib/rflags.rb
CHANGED
@@ -5,39 +5,60 @@ require 'rflags/redis_flag'
|
|
5
5
|
|
6
6
|
module RFlags
|
7
7
|
def flag(definition)
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
define_flag(name, resolve_flag_backend(backend))
|
8
|
+
name, backend = resolve_flag_params(definition)
|
9
|
+
instance_variable_set("@#{name}".to_sym, backend)
|
10
|
+
instance_eval <<-MTD, __FILE__, __LINE__
|
11
|
+
def #{name}
|
12
|
+
@#{name}
|
14
13
|
end
|
15
|
-
|
16
|
-
raise TypeError,
|
17
|
-
"RFlags#flag expects Symbol, String or Hash, but have #{definition.class}"
|
18
|
-
end
|
14
|
+
MTD
|
19
15
|
end
|
20
16
|
|
21
|
-
|
17
|
+
def lazy_flag(name, &block)
|
18
|
+
if !block
|
19
|
+
raise "RFlags##{__method__} needs a block"
|
20
|
+
end
|
22
21
|
|
23
|
-
|
24
|
-
|
22
|
+
resolve = -> do
|
23
|
+
opts = block.call
|
24
|
+
resolve_flag_backend_class(opts).new(*opts)
|
25
|
+
end
|
26
|
+
|
27
|
+
instance_variable_set(:"@#{name}_block", resolve)
|
25
28
|
instance_eval(<<-MTD, __FILE__, __LINE__)
|
26
|
-
def #{name}
|
29
|
+
def #{name}
|
30
|
+
@#{name} ||= @#{name}_block.call
|
31
|
+
end
|
27
32
|
MTD
|
28
33
|
end
|
29
34
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
35
|
+
private
|
36
|
+
|
37
|
+
def resolve_flag_params(definition)
|
38
|
+
case definition
|
39
|
+
when String, Symbol
|
40
|
+
[definition, RFlags::Flag.new]
|
41
|
+
when Hash
|
42
|
+
name = definition.keys[0]
|
43
|
+
|
44
|
+
backend_opts = definition[name]
|
45
|
+
backend_class = resolve_flag_backend_class(backend_opts)
|
46
|
+
|
47
|
+
[name, backend_class.new(*backend_opts)]
|
48
|
+
else
|
49
|
+
raise TypeError, "Can't handle #{definition.class}"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def resolve_flag_backend_class(opts)
|
54
|
+
case opts
|
55
|
+
when String, Pathname
|
56
|
+
RFlags::FileFlag
|
34
57
|
when Array
|
35
|
-
|
36
|
-
|
58
|
+
class_name = opts[0].class
|
59
|
+
::Object.const_get("::RFlags::#{class_name}Flag")
|
37
60
|
else
|
38
|
-
raise TypeError,
|
39
|
-
"Wrong backend definition for RFlags#flag.\n" <<
|
40
|
-
"Backend should be instance of String or Array, but have #{backend.class}"
|
61
|
+
raise TypeError, "Can't handle #{opts.class}"
|
41
62
|
end
|
42
63
|
end
|
43
64
|
end
|
data/test/test_file_flag.rb
CHANGED
data/test/test_rflags.rb
CHANGED
@@ -8,6 +8,8 @@ class TestRFlags < Minitest::Test
|
|
8
8
|
flag :flag_a
|
9
9
|
flag :flag_b => 'tmp/flag_b'
|
10
10
|
flag :flag_c => [Redis, 'key']
|
11
|
+
flag :flag_d => Pathname.new('tmp/flag_d')
|
12
|
+
lazy_flag(:flag_e) { Pathname.new('tmp/flag_e') }
|
11
13
|
end
|
12
14
|
|
13
15
|
def test_it_defines_flag_method
|
@@ -26,10 +28,18 @@ class TestRFlags < Minitest::Test
|
|
26
28
|
assert_instance_of RFlags::RedisFlag, Flags.flag_c
|
27
29
|
end
|
28
30
|
|
31
|
+
def test_it_defines_file_flag_from_pathname
|
32
|
+
assert_instance_of RFlags::FileFlag, Flags.flag_d
|
33
|
+
end
|
34
|
+
|
29
35
|
def test_resolve_exception
|
30
36
|
error = assert_raises(TypeError) do
|
31
|
-
Flags.flag wrong:
|
37
|
+
Flags.flag wrong: Struct.new(:a)
|
32
38
|
end
|
33
|
-
assert_match(/
|
39
|
+
assert_match(/Can't handle Class/, error.message)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_it_defines_lazy_evaluated_flag
|
43
|
+
assert_instance_of RFlags::FileFlag, Flags.flag_e
|
34
44
|
end
|
35
45
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rflags
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Lutsiuk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-06-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -81,3 +81,4 @@ signing_key:
|
|
81
81
|
specification_version: 4
|
82
82
|
summary: Boolean flags with different backends
|
83
83
|
test_files: []
|
84
|
+
has_rdoc:
|