rflags 0.1.0 → 0.1.1
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.
- 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:
|