chirrin-chirrion 0.1.0 → 0.2.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: 51615f2cbc75d3a5f704e5eb80aac5c825316c52
4
- data.tar.gz: e5d4a90d70fd0e6c187cf893d755a679461c97b0
3
+ metadata.gz: 8d34f28e02a066217d57127952a738c16a063633
4
+ data.tar.gz: 2e994e2b1944278d18d92d14d2b58b9eeec512ca
5
5
  SHA512:
6
- metadata.gz: bab0c8e38c586f48566afa67cd4b59341f3096f92c859fbbf648587d115d6eba14582c92f29369137c40252c27037d0168d61221397119431e8408bebf473d0c
7
- data.tar.gz: 1af39714ae15971d3c576d038365b427010f4baf6fac77b0f24c6aed7851a2ba74c57759519a386cad806a2d57fb6731e1ccf74846f1ae9a1ecd4ec3c8dbb8b0
6
+ metadata.gz: 4b24a43447ce15121881e6aaecaf294a4d984ebb07af6abb594825e50cbe4dc8ef2e8bc456d0a54417ffbfb2ceddc50ecde6a494695388099d6e357d61c79722
7
+ data.tar.gz: abc8efa436aa6f7e91a32fec113b2652a7e5aeb4ef6f974d53be90115ffe92bd2aa5b28eacc9bccb6af0038ab340744354b3e13324c3c694eb48f60bdd2c2d0b
@@ -0,0 +1,15 @@
1
+ # Change Log
2
+ All notable changes of the project you will find here.
3
+
4
+ ## [0.2.0] - 2015-03-30
5
+ ### Changed
6
+ - Redis adaper inside of the module ChirrinChirrion::DatabaseAdapters
7
+ - Redis adaper changed to manage togles inside a Hash.
8
+ - Now is possible to define a description for the toggle, which can let other people know what this toggle does
9
+ - Way to register toggles, but keep them inactives.
10
+
11
+ ## [0.1.0] - 2015-03-23
12
+ ### Changed
13
+ - First release of the gem.
14
+ - Simple way to add and remove toggles. Toggles in the Redis database are active, and are inactive if there is no toggle in the database.
15
+ methods to check if toggle is active, inactive or give procs to gem defines which proc will be executed when the toggle is active and inactive.
data/README.md CHANGED
@@ -7,7 +7,7 @@ Where there is a magic object which the the key word 'chirrin' gives a new thing
7
7
 
8
8
  ## Intall
9
9
 
10
- gem install chirrin-Chirrion
10
+ gem install chirrin-chirrion
11
11
 
12
12
  ## How to use
13
13
 
@@ -15,13 +15,14 @@ Where there is a magic object which the the key word 'chirrin' gives a new thing
15
15
 
16
16
  ```ruby
17
17
  require 'chirrin-chirrion'
18
- redis_adapter = RedisAdapter.new
18
+ redis_connection = Redis.new
19
+ redis_adapter = RedisAdapter.new(redis_connection)
19
20
  ChirrinChirrion.config(database_adapter: redis_adapter)
20
21
  ```
21
22
 
22
23
  ### Adding a toggle
23
24
  ```ruby
24
- ChirrinChirrion.add_toggle('new_user_register_validation')
25
+ ChirrinChirrion.add_toggle('new_user_register_validation', {active: true, description: 'When this is active, gender, age and phone number are not required'})
25
26
  ```
26
27
 
27
28
  ### Removing a toggle
@@ -29,6 +30,16 @@ ChirrinChirrion.add_toggle('new_user_register_validation')
29
30
  ChirrinChirrion.remove_toggle('new_user_register_validation')
30
31
  ```
31
32
 
33
+ ### Making a toggle active
34
+ ```ruby
35
+ ChirrinChirrion.chirrin('new_user_register_validation')
36
+ ```
37
+
38
+ ### Making a toggle inactive
39
+ ```ruby
40
+ ChirrinChirrion.chirrion('new_user_register_validation')
41
+ ```
42
+
32
43
  ### Using a toggle with if else
33
44
  ```ruby
34
45
  if ChirrinChirrion.chirrin?('new_user_register_validation')
@@ -22,8 +22,12 @@ Gem::Specification.new do |spec|
22
22
  spec.metadata['allowed_push_host'] = 'https://rubygems.org'
23
23
  end
24
24
 
25
+ #Development dependencies
25
26
  spec.add_development_dependency 'bundler', '~> 1.8'
26
27
  spec.add_development_dependency 'rake', '~> 10.0'
27
28
  spec.add_development_dependency 'rspec', '~> 3.2.0'
28
29
  spec.add_development_dependency 'redis', '~> 3.2.1'
30
+
31
+ #Runtime dependencies
32
+ spec.add_runtime_dependency 'json', '~> 1.8.2'
29
33
  end
@@ -1,31 +1,94 @@
1
- require "chirrin-chirrion/version"
2
- require "chirrin-chirrion/database_adapters/redis_adapter"
1
+ require 'chirrin-chirrion/version'
2
+ require 'chirrin-chirrion/errors'
3
+ require 'chirrin-chirrion/database_adapters/redis_adapter'
4
+ require 'json'
3
5
 
4
6
  module ChirrinChirrion
7
+
8
+ # Defines the configuration for Chirrin Chirrion.
9
+ # The config are:
10
+ # - database_adapter, an adapter which wrap the database management to provide the correct service
11
+ #
12
+ # redis_connection = Redis.new
13
+ # redis_adapter = RedisAdapter.new(redis_connection)
14
+ # ChirrinChirrion.config(database_adapter: redis_adapter)
15
+ #
5
16
  def self.config(options)
6
17
  @database_adapter = options[:database_adapter]
7
18
  end
8
19
 
20
+ # Private mehtod which returns the Chirrin Chirrion config
21
+ #
9
22
  def self.database_adapter
10
23
  @database_adapter
11
24
  end
12
25
 
13
- def self.add_toggle(toggle_name)
14
- database_adapter.add_toggle(toggle_name)
26
+ # Adds a toggle to the database
27
+ #
28
+ # ChirrinChirrion.add_toggle('my_active_feature')
29
+ # ChirrinChirrion.add_toggle('my_inactive_feature')
30
+ #
31
+ def self.add_toggle(toggle_name, toggle_info = {})
32
+ database_adapter.add_toggle(toggle_name, toggle_info)
15
33
  end
16
34
 
35
+ # Removes a toggle from the database
36
+ #
37
+ # ChirrinChirrion.remove_toggle('my_active_feature')
38
+ # ChirrinChirrion.remove_toggle('my_inactive_feature')
39
+ #
17
40
  def self.remove_toggle(toggle_name)
18
41
  database_adapter.remove_toggle(toggle_name)
19
42
  end
20
43
 
44
+ # Makes a toggle active (the toggle must already be registered)
45
+ #
46
+ # ChirrinChirrion.chirrin('my_inactive_feature')
47
+ # ChirrinChirrion.chirrin?('my_inactive_feature') #=> true
48
+ #
49
+ def self.chirrin(toggle_name)
50
+ database_adapter.activate(toggle_name)
51
+ end
52
+
53
+ # Makes a toggle inactive
54
+ #
55
+ # ChirrinChirrion.chirrion('my_active_feature')
56
+ # ChirrinChirrion.chirrion?('my_active_feature') #=> false
57
+ #
58
+ def self.chirrion(toggle_name)
59
+ database_adapter.inactivate(toggle_name)
60
+ end
61
+
62
+ # Checks if a toggle active (the toggle must already be registered)
63
+ #
64
+ # ChirrinChirrion.chirrin?('my_active_feature') #=> true
65
+ # ChirrinChirrion.chirrin?('my_inactive_feature') #=> false
66
+ # ChirrinChirrion.chirrin?('my_unregistered_toggle') #=> false
67
+ #
21
68
  def self.chirrin?(toggle_name)
22
- database_adapter.exists?(toggle_name)
69
+ database_adapter.active?(toggle_name)
23
70
  end
24
71
 
72
+ # Checks if a toggle inactive
73
+ #
74
+ # ChirrinChirrion.chirrion?('my_active_feature') #=> false
75
+ # ChirrinChirrion.chirrion?('my_inactive_feature') #=> true
76
+ # ChirrinChirrion.chirrin?('my_unregistered_toggle') #=> true
77
+ #
25
78
  def self.chirrion?(toggle_name)
26
- !chirrin?(toggle_name)
79
+ database_adapter.inactive?(toggle_name)
27
80
  end
28
81
 
82
+ # Executes determinated action if the toggle chirrin, if not executes another achtion
83
+ #
84
+ # ChirrinChirrion.chirrin('mult_for_2')
85
+ # ten_numbers = (1..10).to_a
86
+ # actiction_for_chirrin = lambda { ten_numbers.map{|number| number * 2 } }
87
+ # actiction_for_chirrion = lambda { ten_numbers.map{|number| number * 4 } }
88
+ # ChirrinChirrion.chirrin_chirrion('mult_for_2', action_for_chirrin, action_for_chirrion) #=> [4, 8, 12, 16, 20, 24, 28, 32, 36, 40]
89
+ # ChirrinChirrion.chirrin('mult_for_2')
90
+ # ChirrinChirrion.chirrin_chirrion('mult_for_2', action_for_chirrin, action_for_chirrion) #=> [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
91
+ #
29
92
  def self.chirrin_chirrion(toggle_name, for_chirrin, for_chirrion)
30
93
  if chirrin?(toggle_name)
31
94
  for_chirrin.respond_to?(:call) ? for_chirrin.call : for_chirrin
@@ -1,20 +1,86 @@
1
- class RedisAdapter
2
- attr_reader :redis_database
3
- private :redis_database
1
+ module ChirrinChirrion
2
+ module DatabaseAdapters
3
+ class RedisAdapter
4
+ TOGGLES_HASH_KEY = 'chirrin-chirrion-toggles'
5
+ attr_reader :redis_database
6
+ private :redis_database
4
7
 
5
- def initialize(redis_database)
6
- @redis_database = redis_database
7
- end
8
+ def initialize(redis_database)
9
+ @redis_database = redis_database
10
+ end
8
11
 
9
- def add_toggle(toggle_name)
10
- redis_database.set(toggle_name, 't').eql?('OK')
11
- end
12
+ # Adds a toggle to the database:
13
+ #
14
+ # redis_adapter.add_toggle('my_active_feature', {active: true, description: 'What other people must know to understand what this toggle activates'})
15
+ # redis_adapter.add_toggle('my_inactive_feature', {description: 'What other people must know to understand what this toggle activates'})
16
+ # redis_adapter.add_toggle('my_inactive_feature')
17
+ #
18
+ def add_toggle(toggle_name, toggle_info = {})
19
+ toggle_info[:active] ||= false
20
+ redis_database.hset(TOGGLES_HASH_KEY, toggle_name, toggle_info.to_json)
12
21
 
13
- def remove_toggle(toggle_name)
14
- redis_database.del(toggle_name).eql?(1)
15
- end
22
+ true
23
+ end
24
+
25
+ # Removes a toggle from the database:
26
+ #
27
+ # redis_adapter.remove_toggle('my_active_feature')
28
+ # redis_adapter.remove_toggle('my_inactive_feature')
29
+ #
30
+ def remove_toggle(toggle_name)
31
+ redis_database.hdel(TOGGLES_HASH_KEY, toggle_name)
32
+
33
+ true
34
+ end
35
+
36
+ # Makes a toggle, existent or not, active:
37
+ #
38
+ # redis_adapter.activate('my_feature')
39
+ #
40
+ def activate(toggle_name)
41
+ toggle_info = get_toggle_info(toggle_name)
42
+ raise ChirrinChirrion::Errors::ToggleNotFound, "The toggle #{toggle_name} was not found" unless toggle_info
43
+ toggle_info['active'] = true
44
+
45
+ redis_database.hset(TOGGLES_HASH_KEY, toggle_name, toggle_info.to_json)
46
+
47
+ true
48
+ end
49
+
50
+ # Makes a toggle, existent or not, iactive:
51
+ #
52
+ # redis_adapter.inactivate('my_feature')
53
+ #
54
+ def inactivate(toggle_name)
55
+ toggle_info = get_toggle_info(toggle_name)
56
+ raise ChirrinChirrion::Errors::ToggleNotFound, "The toggle #{toggle_name} was not found" unless toggle_info
57
+ toggle_info['active'] = false
58
+
59
+ redis_database.hset(TOGGLES_HASH_KEY, toggle_name, toggle_info.to_json)
60
+
61
+ true
62
+ end
63
+
64
+ def active?(toggle_name)
65
+ toggle_info = redis_database.hget(TOGGLES_HASH_KEY, toggle_name)
66
+ return false unless toggle_info
67
+ toggle_info = JSON.parse(toggle_info)
68
+
69
+ toggle_info['active'].eql?(true)
70
+ end
71
+
72
+ def inactive?(toggle_name)
73
+ !active?(toggle_name)
74
+ end
75
+
76
+ private
77
+
78
+ def get_toggle_info(toggle_name)
79
+ toggle_info = redis_database.hget(TOGGLES_HASH_KEY, toggle_name)
80
+ return nil unless toggle_info
16
81
 
17
- def exists?(toggle_name)
18
- redis_database.get(toggle_name).eql?('t')
82
+ JSON.parse(toggle_info)
83
+ end
84
+ end
19
85
  end
20
86
  end
@@ -0,0 +1,5 @@
1
+ module ChirrinChirrion
2
+ module Errors
3
+ ToggleNotFound = Class.new(RuntimeError)
4
+ end
5
+ end
@@ -1,3 +1,3 @@
1
1
  module ChirrinChirrion
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chirrin-chirrion
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bruno Vicenzo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-03-23 00:00:00.000000000 Z
11
+ date: 2015-03-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: 3.2.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: json
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 1.8.2
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 1.8.2
69
83
  description: Chirrin for the new code apears, Chirrion for the new code desapears
70
84
  (by Chapolim)
71
85
  email:
@@ -77,6 +91,7 @@ files:
77
91
  - ".gitignore"
78
92
  - ".rspec"
79
93
  - ".travis.yml"
94
+ - CHANGELOG.md
80
95
  - Gemfile
81
96
  - LICENSE
82
97
  - README.md
@@ -86,6 +101,7 @@ files:
86
101
  - chirrin-chirrion.gemspec
87
102
  - lib/chirrin-chirrion.rb
88
103
  - lib/chirrin-chirrion/database_adapters/redis_adapter.rb
104
+ - lib/chirrin-chirrion/errors.rb
89
105
  - lib/chirrin-chirrion/version.rb
90
106
  homepage: https://github.com/bvicenzo/chirrin-chirrion
91
107
  licenses: []