flagship 0.5.0 → 0.6.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8fb44a30b820db71bbf1edc824a3543a0e0f107e
4
- data.tar.gz: 13d3196cd2ee42b7d1b7b6a4d9a09c966cf66e26
3
+ metadata.gz: 556082102efa5bcacc1d965b6255d0023e16078e
4
+ data.tar.gz: c7f253ce7312a0cdbbc70a80516eaabd3ee9ecaa
5
5
  SHA512:
6
- metadata.gz: 3a564740caca6345d3190830913d9d4e3b2e1ea060312bd36471d65e68335506043c1568aa2f653241c028318bd03655aad4cecd3e2aade9552cf8f14f90f5a9
7
- data.tar.gz: ba3b294b5bc9cf320b5210b7c54084107bee59c08e6107ac48ff958e9009dce6611dd7501ff6fe234ba60af82acbfbe956fb669c82f96e8e3471ab9b1b18b636
6
+ metadata.gz: d9819f0aeee1e3ee35841cfd0a4e6451c67ce96534e6a31960f32440d56499a42e7a128b81a24864672343c2632d9bc7992924ca2be56bd755047383f3dc1da1
7
+ data.tar.gz: 0d0b6451bd8a3daf4335f761aa879fd1e62eda735e9ddd93963707ee3e58a851e540167300513c32ca4aa023847be1d56fa44e5a7549493008fcc83d59fa18a9
data/.travis.yml CHANGED
@@ -1,7 +1,8 @@
1
1
  language: ruby
2
2
 
3
3
  rvm:
4
- - 2.2.5
5
- - 2.3.3
4
+ - 2.2.7
5
+ - 2.3.4
6
+ - 2.4.1
6
7
 
7
8
  before_install: gem install bundler --no-document
data/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Change Log
2
2
 
3
+ ## [0.6.0] - 2017-05-15
4
+
5
+ ### Added
6
+
7
+ - Add `Flagship.with_context` method to apply temporal changes to context variables [#26](https://github.com/yuya-takeyama/flagship/pull/26)
8
+ - Now `Flagship.clear_state` clears context variables as well [#27](https://github.com/yuya-takeyama/flagship/pull/27)
9
+
10
+ ### Changed
11
+
12
+ - Allow `Flagship.set_context` to set multiple variables at once using `Hash` [#25](https://github.com/yuya-takeyama/flagship/pull/25)
13
+
3
14
  ## [0.5.0] - 2017-01-07
4
15
 
5
16
  - Documented about helper methods [#21](https://github.com/yuya-takeyama/flagship/pull/21)
data/README.md CHANGED
@@ -62,6 +62,24 @@ Or you can set a method too.
62
62
  Flagship.set_context :current_user, method(:current_user)
63
63
  ```
64
64
 
65
+ ### Apply temporal changes to context variables
66
+
67
+ Using `Flagship.with_context` method, you can override context variables temporarily.
68
+
69
+ ```rb
70
+ class User
71
+ def enabled_features
72
+ Flagship.with_context current_user: self do
73
+ Flagship.features.enabled.map(&:key)
74
+ end
75
+ end
76
+ end
77
+ ```
78
+
79
+ It's useful when you implement a method using `Flagship` into some domain objects.
80
+
81
+ By using this, values specified in the argument is overridden and other values are inherited.
82
+
65
83
  ### Extend flagset
66
84
 
67
85
  ```rb
@@ -200,6 +218,26 @@ Flagship.define :production do
200
218
  end
201
219
  ```
202
220
 
221
+ ### Testing
222
+
223
+ #### RSpec
224
+
225
+ It's recommended to clear state of `Flagship` before the suite and after the each tests.
226
+
227
+ You can do it by configuring like below:
228
+
229
+ ```rb
230
+ RSpec.configure do |config|
231
+ config.before(:suite) do
232
+ Flagship.clear_state
233
+ end
234
+
235
+ config.after(:each) do
236
+ Flagship.clear_state
237
+ end
238
+ end
239
+ ```
240
+
203
241
  ## Development
204
242
 
205
243
  After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -1,4 +1,7 @@
1
1
  class Flagship::Context
2
+ extend Forwardable
3
+ def_delegators :@values, :clear
4
+
2
5
  def initialize
3
6
  @values = {}
4
7
  end
@@ -24,4 +27,12 @@ class Flagship::Context
24
27
  def respond_to_missing?(name, include_private = false)
25
28
  @values.key?(name) or super
26
29
  end
30
+
31
+ def with_values(values, &block)
32
+ original_values = @values
33
+ @values = @values.dup.merge(values)
34
+ block.call
35
+ ensure
36
+ @values = original_values
37
+ end
27
38
  end
@@ -1,3 +1,3 @@
1
1
  module Flagship
2
- VERSION = "0.5.0"
2
+ VERSION = "0.6.0"
3
3
  end
data/lib/flagship.rb CHANGED
@@ -20,8 +20,18 @@ module Flagship
20
20
  current_flagset.enabled?(key)
21
21
  end
22
22
 
23
- def set_context(key, value)
24
- default_context.__set(key, value)
23
+ def set_context(key_or_hash, value=nil)
24
+ if key_or_hash.is_a?(Hash)
25
+ key_or_hash.each { |k, v| default_context.__set(k, v) }
26
+ else
27
+ default_context.__set(key_or_hash, value)
28
+ end
29
+ end
30
+
31
+ def with_context(values, &block)
32
+ default_context.with_values values do
33
+ block.call
34
+ end
25
35
  end
26
36
 
27
37
  def select_flagset(key)
@@ -51,6 +61,7 @@ module Flagship
51
61
  def clear_state
52
62
  @default_flagsts_container = nil
53
63
  @current_flagset = nil
64
+ @default_context && @default_context.clear
54
65
  end
55
66
  end
56
67
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flagship
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuya Takeyama
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-01-07 00:00:00.000000000 Z
11
+ date: 2017-05-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler