abstract_feature_branch 1.3.0 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/README.md +10 -7
  4. data/VERSION +1 -1
  5. data/abstract_feature_branch.gemspec +6 -40
  6. data/lib/abstract_feature_branch/configuration.rb +8 -2
  7. data/lib/abstract_feature_branch/redis/connection_pool_to_redis_adapter.rb +34 -0
  8. data/lib/abstract_feature_branch.rb +3 -1
  9. data/lib/generators/templates/config/initializers/abstract_feature_branch.rb +4 -1
  10. metadata +5 -39
  11. data/.coveralls.yml +0 -1
  12. data/.travis.yml +0 -30
  13. data/RELEASE_NOTES.md +0 -55
  14. data/TODO.md +0 -3
  15. data/config/features/admin.local.yml +0 -15
  16. data/config/features/admin.yml +0 -17
  17. data/config/features/internal/wiki.local.yml +0 -15
  18. data/config/features/internal/wiki.yml +0 -17
  19. data/config/features/public.local.yml +0 -15
  20. data/config/features/public.yml +0 -17
  21. data/img/BigAstronaut-Logo.png +0 -0
  22. data/img/EarlyShares-Logo.svg +0 -22
  23. data/img/Factor75-Logo.svg +0 -54
  24. data/ruby187.Gemfile +0 -13
  25. data/spec/abstract_feature_branch/file_beautifier_spec.rb +0 -384
  26. data/spec/ext/feature_branch__feature_branch_per_user_spec.rb +0 -122
  27. data/spec/ext/feature_branch__feature_branch_spec.rb +0 -148
  28. data/spec/ext/feature_branch__feature_enabled_spec.rb +0 -274
  29. data/spec/fixtures/application_development_config/config/features.reference.yml +0 -21
  30. data/spec/fixtures/application_no_config/no_config +0 -1
  31. data/spec/fixtures/application_rails_config/config/features.local.yml +0 -16
  32. data/spec/fixtures/application_rails_config/config/features.yml +0 -20
  33. data/spec/fixtures/application_ugly_config_reference/config/another_application_configuration.yml +0 -31
  34. data/spec/fixtures/application_ugly_config_reference/config/database.yml +0 -17
  35. data/spec/fixtures/application_ugly_config_reference/config/features/admin.local.yml +0 -44
  36. data/spec/fixtures/application_ugly_config_reference/config/features/admin.yml +0 -44
  37. data/spec/fixtures/application_ugly_config_reference/config/features/empty.local.yml +0 -0
  38. data/spec/fixtures/application_ugly_config_reference/config/features/feature_empty_config.local.yml +0 -13
  39. data/spec/fixtures/application_ugly_config_reference/config/features/including_comments.local.yml +0 -52
  40. data/spec/fixtures/application_ugly_config_reference/config/features/internal/wiki.local.yml +0 -44
  41. data/spec/fixtures/application_ugly_config_reference/config/features/internal/wiki.yml +0 -44
  42. data/spec/fixtures/application_ugly_config_reference/config/features/public.local.yml +0 -44
  43. data/spec/fixtures/application_ugly_config_reference/config/features/public.yml +0 -44
  44. data/spec/fixtures/application_ugly_config_reference/config/features.local.yml +0 -44
  45. data/spec/fixtures/application_ugly_config_reference/config/features.yml +0 -49
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8f0025726fa5c4de15b39b5b51ba6e180cf156ccccf86d661e3f9e4982d899a4
4
- data.tar.gz: 78dae9664bcce67b70f2768ff9e866d9b47155ec1c8ef7c9d0f7d341f4866249
3
+ metadata.gz: 52ff8ed098aa83bdd70eda839fa74b291c95993fb9859e2cc5ed8c0752bfa213
4
+ data.tar.gz: 9b5e6915905904be0b87690a73b1dfe14ec8893b2659383545bac23b0fe76978
5
5
  SHA512:
6
- metadata.gz: 96649ca6005883f9765ac18d115e08eb1ac8c9aa165cba039b07aa3d843b29bc8f70cf8ec768bdb6e491e2982eb04f9f0959210418feeccd5da242df6c57bdd9
7
- data.tar.gz: 0d305129dc28c997d740e1a6f0dbe2dfefddd1a379dfc64c4fc42287c3fbaf965dde0358287a91346af7aef201a6b1480be5d02f66dcff91464d64cf7f9e850e
6
+ metadata.gz: 2f948fd18d057bed300d4cb9eb89e36b784ec2e8a445edaeaf2d742866884828795e8873de02ea9d1794604757dee8d6af2b63934a4f7fcd5b7c0d65aa1171ec
7
+ data.tar.gz: c4a1ddc94547f390e2960ddc97a20034cf7bd3dbaa378e17060ae38509b019897d0364913573856254269217c22731de15e7e1e8c8825b1d30c0615521ee6610
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Change Log
2
2
 
3
+ ## 1.3.1
4
+
5
+ - Support Redis `ConnectionPool` `AbstractFeatureBranch::Configuration#feature_store`
6
+
3
7
  ## 1.3.0
4
8
 
5
9
  - Officially support newer `redis` client gem version 5
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Abstract Feature Branch 1.3.0
1
+ # Abstract Feature Branch 1.3.1
2
2
  [![Gem Version](https://badge.fury.io/rb/abstract_feature_branch.png)](http://badge.fury.io/rb/abstract_feature_branch)
3
3
  [![Build Status](https://api.travis-ci.org/AndyObtiva/abstract_feature_branch.png?branch=master)](https://travis-ci.org/AndyObtiva/abstract_feature_branch)
4
4
  [![Coverage Status](https://coveralls.io/repos/AndyObtiva/abstract_feature_branch/badge.png?branch=master)](https://coveralls.io/r/AndyObtiva/abstract_feature_branch?branch=master)
@@ -37,17 +37,17 @@ Setup
37
37
  ### Rails Application Use
38
38
 
39
39
  1. Configure Rubygem
40
- - With `rails` between `~> 7.0` and `~> 2.0`: Add the following to Gemfile <pre>gem 'abstract_feature_branch', '~> 1.3.0'</pre>
41
- - With `rails` `~> 2.0` only: Add the following to config/environment.rb <pre>config.gem 'abstract_feature_branch', :version => '1.3.0'</pre>
40
+ - With `rails` between `~> 7.0` and `~> 2.0`: Add the following to Gemfile <pre>gem 'abstract_feature_branch', '~> 1.3.1'</pre>
41
+ - With `rails` `~> 2.0` only: Add the following to config/environment.rb <pre>config.gem 'abstract_feature_branch', :version => '1.3.1'</pre>
42
42
  2. Generate <code>config/initializers/abstract_feature_branch.rb</code>, <code>lib/tasks/abstract_feature_branch.rake</code>, <code>config/features.yml</code> and <code>config/features.local.yml</code> in your Rails app directory by running <pre>rails g abstract_feature_branch:install</pre>
43
43
  3. [Optional] Generate <code>config/features/[context_path].yml</code> in your Rails app directory by running <pre>rails g abstract_feature_branch:context context_path</pre> (more details under [**instructions**](#instructions))
44
- 4. [Optional] Customize configuration in <code>config/initializers/abstract_feature_branch.rb</code> (can be useful for changing location of feature files in Rails application, configuring Redis for per-user feature enablement, or troubleshooting a specific Rails environment feature configuration)
44
+ 4. [Optional] Customize configuration in <code>config/initializers/abstract_feature_branch.rb</code> (can be useful for changing location of feature files in Rails application, configuring Redis with a Redis or ConnectionPool instance to use for overrides, and per-user feature enablement, or troubleshooting a specific Rails environment feature configuration)
45
45
  5. [Optional] Redis Server (between `~> 7.0` and `~> 3.0`): Install view [Homebrew](https://brew.sh/) with `brew install redis`
46
46
  6. [Optional] `redis` client gem (between `~> 5.0` and `~> 3.0`): Add the following to Gemfile above `abstract_feature_branch` <pre>gem 'redis', '~> 5.0.5'</pre>
47
47
 
48
48
  ### Ruby Application General Use
49
49
 
50
- 1. <pre>gem install abstract_feature_branch -v 1.3.0</pre>
50
+ 1. <pre>gem install abstract_feature_branch -v 1.3.1</pre>
51
51
  2. Add code <code>require 'abstract_feature_branch'</code>
52
52
  3. Create <code>config/features.yml</code> under <code>AbstractFeatureBranch.application_root</code> and fill it with content similar to that of the sample <code>config/features.yml</code> mentioned under [**instructions**](#instructions).
53
53
  4. [Optional] Create <code>config/features.local.yml</code> under <code>AbstractFeatureBranch.application_root</code> (more details under [**instructions**](#instructions))
@@ -262,7 +262,7 @@ application more easily.
262
262
  Redis Overrides
263
263
  ---------------
264
264
 
265
- Prerequisites: Redis server and client (`redis` gem) and optional Redis configuration of `AbstractFeatureBranch.feature_store` in `config/initializers/abstract_feature_branch.rb`
265
+ Prerequisites: Redis server and client (`redis` gem) and optional Redis configuration of `AbstractFeatureBranch.feature_store` in `config/initializers/abstract_feature_branch.rb` (`Redis` `ConnectionPool` instance is recommended for Production environments)
266
266
 
267
267
  To be able to override feature configuration in a production environment, you can utilize Redis Overrides.
268
268
 
@@ -349,9 +349,12 @@ Rails Initializer
349
349
 
350
350
  Here is the content of the generated initializer [with `redis` client gem added] (<code>config/initializers/abstract_feature_branch.rb</code>), which contains instructions on how to customize via [dependency injection](http://en.wikipedia.org/wiki/Dependency_injection):
351
351
 
352
- > # Storage system for features (other than YAML/Env-Vars). Right now, only Redis is supported.
352
+ > # Storage system for features (other than YAML/Env-Vars). Right now, only Redis and ConnectionPool are supported.
353
353
  > # AbstractFeatureBranch.feature_store = Redis.new
354
354
  >
355
+ > # Storage can be a Redis ConnectionPool instance
356
+ > # AbstractFeatureBranch.feature_store = ConnectionPool.new { Redis.new }
357
+ >
355
358
  > # The following example line works with Heroku Redis To Go while still operating on local Redis for local development
356
359
  > # AbstractFeatureBranch.feature_store = Redis.new(:url => ENV['REDISTOGO_URL'])
357
360
  >
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.3.0
1
+ 1.3.1
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: abstract_feature_branch 1.3.0 ruby lib
5
+ # stub: abstract_feature_branch 1.3.1 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "abstract_feature_branch".freeze
9
- s.version = "1.3.0"
9
+ s.version = "1.3.1"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["Annas \"Andy\" Maleh".freeze]
14
- s.date = "2022-12-11"
14
+ s.date = "2022-12-12"
15
15
  s.description = "abstract_feature_branch is a Rails gem that enables developers to easily branch by abstraction as per this pattern:\nhttp://paulhammant.com/blog/branch_by_abstraction.html\n\nIt is a productivity and fault tolerance enhancing team practice.\n\nIt provides the ability to wrap blocks of code with an abstract feature branch name, and then\nspecify in a configuration file which features to be switched on or off.\n\nThe goal is to build out upcoming features in the same source code repository branch, regardless of whether all are\ncompleted by the next release date or not, thus increasing team productivity by preventing integration delays.\nDevelopers then disable in-progress features until they are ready to be switched on in production, yet enable them\nlocally and in staging environments for in-progress testing.\n\nThis gives developers the added benefit of being able to switch a feature off after release should big problems arise\nfor a high risk feature.\n\nabstract_feature_branch additionally supports DDD's pattern of\nBounded Contexts by allowing developers to configure\ncontext-specific feature files if needed.\n".freeze
16
16
  s.extra_rdoc_files = [
17
17
  "CHANGELOG.md",
@@ -19,27 +19,15 @@ Gem::Specification.new do |s|
19
19
  "README.md"
20
20
  ]
21
21
  s.files = [
22
- ".coveralls.yml",
23
- ".travis.yml",
24
22
  "CHANGELOG.md",
25
23
  "LICENSE.txt",
26
24
  "README.md",
27
- "RELEASE_NOTES.md",
28
- "TODO.md",
29
25
  "VERSION",
30
26
  "abstract_feature_branch.gemspec",
31
- "config/features/admin.local.yml",
32
- "config/features/admin.yml",
33
- "config/features/internal/wiki.local.yml",
34
- "config/features/internal/wiki.yml",
35
- "config/features/public.local.yml",
36
- "config/features/public.yml",
37
- "img/BigAstronaut-Logo.png",
38
- "img/EarlyShares-Logo.svg",
39
- "img/Factor75-Logo.svg",
40
27
  "lib/abstract_feature_branch.rb",
41
28
  "lib/abstract_feature_branch/configuration.rb",
42
29
  "lib/abstract_feature_branch/file_beautifier.rb",
30
+ "lib/abstract_feature_branch/redis/connection_pool_to_redis_adapter.rb",
43
31
  "lib/ext/feature_branch.rb",
44
32
  "lib/generators/abstract_feature_branch/context_generator.rb",
45
33
  "lib/generators/abstract_feature_branch/install_generator.rb",
@@ -47,33 +35,11 @@ Gem::Specification.new do |s|
47
35
  "lib/generators/templates/config/features.local.yml",
48
36
  "lib/generators/templates/config/features.yml",
49
37
  "lib/generators/templates/config/initializers/abstract_feature_branch.rb",
50
- "lib/generators/templates/lib/tasks/abstract_feature_branch.rake",
51
- "ruby187.Gemfile",
52
- "spec/abstract_feature_branch/file_beautifier_spec.rb",
53
- "spec/ext/feature_branch__feature_branch_per_user_spec.rb",
54
- "spec/ext/feature_branch__feature_branch_spec.rb",
55
- "spec/ext/feature_branch__feature_enabled_spec.rb",
56
- "spec/fixtures/application_development_config/config/features.reference.yml",
57
- "spec/fixtures/application_no_config/no_config",
58
- "spec/fixtures/application_rails_config/config/features.local.yml",
59
- "spec/fixtures/application_rails_config/config/features.yml",
60
- "spec/fixtures/application_ugly_config_reference/config/another_application_configuration.yml",
61
- "spec/fixtures/application_ugly_config_reference/config/database.yml",
62
- "spec/fixtures/application_ugly_config_reference/config/features.local.yml",
63
- "spec/fixtures/application_ugly_config_reference/config/features.yml",
64
- "spec/fixtures/application_ugly_config_reference/config/features/admin.local.yml",
65
- "spec/fixtures/application_ugly_config_reference/config/features/admin.yml",
66
- "spec/fixtures/application_ugly_config_reference/config/features/empty.local.yml",
67
- "spec/fixtures/application_ugly_config_reference/config/features/feature_empty_config.local.yml",
68
- "spec/fixtures/application_ugly_config_reference/config/features/including_comments.local.yml",
69
- "spec/fixtures/application_ugly_config_reference/config/features/internal/wiki.local.yml",
70
- "spec/fixtures/application_ugly_config_reference/config/features/internal/wiki.yml",
71
- "spec/fixtures/application_ugly_config_reference/config/features/public.local.yml",
72
- "spec/fixtures/application_ugly_config_reference/config/features/public.yml"
38
+ "lib/generators/templates/lib/tasks/abstract_feature_branch.rake"
73
39
  ]
74
40
  s.homepage = "http://github.com/AndyObtiva/abstract_feature_branch".freeze
75
41
  s.licenses = ["MIT".freeze]
76
- s.post_install_message = "\nRails-only post-install instructions:\n\n1) Run the following command to generate the Rails initializer and basic feature files:\n\nrails g abstract_feature_branch:install\n\n2) Optionally, you may run this command to generate feature files per context:\n\nrails g abstract_feature_branch:context context_path\n \n3) Optionally, install Redis server with [Homebrew](https://brew.sh/) by running:\n\nbrew install redis\n\n4) Optionally, install redis client gem (required with Redis server) by adding the following line to Gemfile above abstract_feature_branch:\n\ngem 'redis', '~> 5.0.5'\n\nAfterwards, run:\n\nbundle\n\n5) Optionally, customize configuration in config/initializers/abstract_feature_branch.rb\n\n(can be useful for changing location of feature files in Rails application,\nconfiguring Redis to use for overrides and per-user feature enablement,\nand/or troubleshooting specific Rails environment feature configurations)\n\n".freeze
42
+ s.post_install_message = "\nRails-only post-install instructions:\n\n1) Run the following command to generate the Rails initializer and basic feature files:\n\nrails g abstract_feature_branch:install\n\n2) Optionally, you may run this command to generate feature files per context:\n\nrails g abstract_feature_branch:context context_path\n \n3) Optionally, install Redis server with [Homebrew](https://brew.sh/) by running:\n\nbrew install redis\n\n4) Optionally, install redis client gem (required with Redis server) by adding the following line to Gemfile above abstract_feature_branch:\n\ngem 'redis', '~> 5.0.5'\n\nAfterwards, run:\n\nbundle\n\n5) Optionally, customize configuration in config/initializers/abstract_feature_branch.rb\n\n(can be useful for changing location of feature files in Rails application,\nconfiguring Redis with a Redis or ConnectionPool instance to use for overrides and per-user feature enablement,\nand/or troubleshooting specific Rails environment feature configurations)\n\n".freeze
77
43
  s.rubygems_version = "3.3.6".freeze
78
44
  s.summary = "abstract_feature_branch is a Rails gem that enables developers to easily branch by abstraction as per this pattern: http://paulhammant.com/blog/branch_by_abstraction.html".freeze
79
45
 
@@ -1,3 +1,5 @@
1
+ require 'abstract_feature_branch/redis/connection_pool_to_redis_adapter'
2
+
1
3
  module AbstractFeatureBranch
2
4
  class Configuration
3
5
  def application_root
@@ -48,12 +50,16 @@ module AbstractFeatureBranch
48
50
  alias user_features_storage feature_store
49
51
 
50
52
  def feature_store=(feature_store)
51
- @feature_store = feature_store
53
+ if feature_store.nil?
54
+ @feature_store = nil
55
+ else
56
+ @feature_store = feature_store.is_a?(::ConnectionPool) ? AbstractFeatureBranch::Redis::ConnectionPoolToRedisAdapter.new(feature_store) : feature_store
57
+ end
52
58
  end
53
59
  alias user_features_storage= feature_store=
54
60
 
55
61
  def initialize_feature_store
56
- self.feature_store = Redis.new
62
+ self.feature_store = ::Redis.new
57
63
  rescue => e
58
64
  logger.debug { "Redis is not enabled!" }
59
65
  logger.debug { e.full_message }
@@ -0,0 +1,34 @@
1
+ module AbstractFeatureBranch
2
+ module Redis
3
+ # Adapts a ConnectionPool instance to the Redis object interface
4
+ class ConnectionPoolToRedisAdapter
5
+ attr_reader :connection_pool
6
+
7
+ def initialize(connection_pool)
8
+ @connection_pool = connection_pool
9
+ end
10
+
11
+ def respond_to?(method_name, include_private = false, &block)
12
+ result = false
13
+ @connection_pool.with do |connection|
14
+ result ||= connection.respond_to?(method_name, include_private, &block)
15
+ end
16
+ result || super
17
+ end
18
+
19
+ def method_missing(method_name, *args, &block)
20
+ connection_can_respond_to = nil
21
+ result = nil
22
+ @connection_pool.with do |connection|
23
+ connection_can_respond_to = connection.respond_to?(method_name, true)
24
+ result = connection.send(method_name, *args, &block) if connection_can_respond_to
25
+ end
26
+ if connection_can_respond_to
27
+ result
28
+ else
29
+ super
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -13,7 +13,9 @@ require 'logger' unless defined?(Rails) && Rails.logger
13
13
  require 'deep_merge' unless {}.respond_to?(:deep_merge!)
14
14
  require 'forwardable'
15
15
 
16
- require File.join(File.dirname(__FILE__), 'abstract_feature_branch', 'configuration')
16
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
17
+
18
+ require 'abstract_feature_branch/configuration'
17
19
 
18
20
  module AbstractFeatureBranch
19
21
  ENV_FEATURE_PREFIX = "abstract_feature_branch_"
@@ -1,6 +1,9 @@
1
- # Storage system for features (other than YAML/Env-Vars). Right now, only Redis is supported.
1
+ # Storage system for features (other than YAML/Env-Vars). Right now, only Redis and ConnectionPool are supported.
2
2
  # AbstractFeatureBranch.feature_store = Redis.new
3
3
 
4
+ # Storage can be a Redis ConnectionPool instance
5
+ # AbstractFeatureBranch.feature_store = ConnectionPool.new { Redis.new }
6
+
4
7
  # The following example line works with Heroku Redis To Go while still operating on local Redis for local development
5
8
  # AbstractFeatureBranch.feature_store = Redis.new(:url => ENV['REDISTOGO_URL'])
6
9
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: abstract_feature_branch
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Annas "Andy" Maleh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-11 00:00:00.000000000 Z
11
+ date: 2022-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: deep_merge
@@ -122,27 +122,15 @@ extra_rdoc_files:
122
122
  - LICENSE.txt
123
123
  - README.md
124
124
  files:
125
- - ".coveralls.yml"
126
- - ".travis.yml"
127
125
  - CHANGELOG.md
128
126
  - LICENSE.txt
129
127
  - README.md
130
- - RELEASE_NOTES.md
131
- - TODO.md
132
128
  - VERSION
133
129
  - abstract_feature_branch.gemspec
134
- - config/features/admin.local.yml
135
- - config/features/admin.yml
136
- - config/features/internal/wiki.local.yml
137
- - config/features/internal/wiki.yml
138
- - config/features/public.local.yml
139
- - config/features/public.yml
140
- - img/BigAstronaut-Logo.png
141
- - img/EarlyShares-Logo.svg
142
- - img/Factor75-Logo.svg
143
130
  - lib/abstract_feature_branch.rb
144
131
  - lib/abstract_feature_branch/configuration.rb
145
132
  - lib/abstract_feature_branch/file_beautifier.rb
133
+ - lib/abstract_feature_branch/redis/connection_pool_to_redis_adapter.rb
146
134
  - lib/ext/feature_branch.rb
147
135
  - lib/generators/abstract_feature_branch/context_generator.rb
148
136
  - lib/generators/abstract_feature_branch/install_generator.rb
@@ -151,28 +139,6 @@ files:
151
139
  - lib/generators/templates/config/features.yml
152
140
  - lib/generators/templates/config/initializers/abstract_feature_branch.rb
153
141
  - lib/generators/templates/lib/tasks/abstract_feature_branch.rake
154
- - ruby187.Gemfile
155
- - spec/abstract_feature_branch/file_beautifier_spec.rb
156
- - spec/ext/feature_branch__feature_branch_per_user_spec.rb
157
- - spec/ext/feature_branch__feature_branch_spec.rb
158
- - spec/ext/feature_branch__feature_enabled_spec.rb
159
- - spec/fixtures/application_development_config/config/features.reference.yml
160
- - spec/fixtures/application_no_config/no_config
161
- - spec/fixtures/application_rails_config/config/features.local.yml
162
- - spec/fixtures/application_rails_config/config/features.yml
163
- - spec/fixtures/application_ugly_config_reference/config/another_application_configuration.yml
164
- - spec/fixtures/application_ugly_config_reference/config/database.yml
165
- - spec/fixtures/application_ugly_config_reference/config/features.local.yml
166
- - spec/fixtures/application_ugly_config_reference/config/features.yml
167
- - spec/fixtures/application_ugly_config_reference/config/features/admin.local.yml
168
- - spec/fixtures/application_ugly_config_reference/config/features/admin.yml
169
- - spec/fixtures/application_ugly_config_reference/config/features/empty.local.yml
170
- - spec/fixtures/application_ugly_config_reference/config/features/feature_empty_config.local.yml
171
- - spec/fixtures/application_ugly_config_reference/config/features/including_comments.local.yml
172
- - spec/fixtures/application_ugly_config_reference/config/features/internal/wiki.local.yml
173
- - spec/fixtures/application_ugly_config_reference/config/features/internal/wiki.yml
174
- - spec/fixtures/application_ugly_config_reference/config/features/public.local.yml
175
- - spec/fixtures/application_ugly_config_reference/config/features/public.yml
176
142
  homepage: http://github.com/AndyObtiva/abstract_feature_branch
177
143
  licenses:
178
144
  - MIT
@@ -186,8 +152,8 @@ post_install_message: "\nRails-only post-install instructions:\n\n1) Run the fol
186
152
  following line to Gemfile above abstract_feature_branch:\n\ngem 'redis', '~> 5.0.5'\n\nAfterwards,
187
153
  run:\n\nbundle\n\n5) Optionally, customize configuration in config/initializers/abstract_feature_branch.rb\n\n(can
188
154
  be useful for changing location of feature files in Rails application,\nconfiguring
189
- Redis to use for overrides and per-user feature enablement,\nand/or troubleshooting
190
- specific Rails environment feature configurations)\n\n"
155
+ Redis with a Redis or ConnectionPool instance to use for overrides and per-user
156
+ feature enablement,\nand/or troubleshooting specific Rails environment feature configurations)\n\n"
191
157
  rdoc_options: []
192
158
  require_paths:
193
159
  - lib
data/.coveralls.yml DELETED
@@ -1 +0,0 @@
1
- repo_token: ylr6gphUkEVGf9nvY5Hfz48RHZnOf0Jjv
data/.travis.yml DELETED
@@ -1,30 +0,0 @@
1
- language: ruby
2
- services:
3
- - redis-server
4
- addons:
5
- code_climate:
6
- repo_token: 535ff40cf55554362b2f48b85e913a7362f0cf3e51638455dab456006258c5a0
7
- rvm:
8
- - 2.2.1
9
- - 2.1.5
10
- - 2.0.0
11
- - 1.9.3
12
- - 1.8.7
13
- - ree
14
- gemfile:
15
- - Gemfile
16
- - ruby187.Gemfile
17
- matrix:
18
- exclude:
19
- - rvm: 2.2.1
20
- gemfile: ruby187.Gemfile
21
- - rvm: 2.1.5
22
- gemfile: ruby187.Gemfile
23
- - rvm: 2.0.0
24
- gemfile: ruby187.Gemfile
25
- - rvm: 1.9.3
26
- gemfile: ruby187.Gemfile
27
- - rvm: 1.8.7
28
- gemfile: Gemfile
29
- - rvm: ree
30
- gemfile: Gemfile
data/RELEASE_NOTES.md DELETED
@@ -1,55 +0,0 @@
1
- Release Notes
2
- -------------
3
-
4
- Version 1.0.0:
5
- - Added configuration support for feature cacheability. Completed documentation, adding more details.
6
-
7
- Version 0.9.0:
8
- - Added support for runtime read of feature files in development to ease local testing (trading off performance)
9
-
10
- Version 0.8.0:
11
- - Added rake task for beautifying feature files, sorting feature names within environment sections and eliminating extra empty lines. Added support for externalized logger.
12
-
13
- Version 0.7.1:
14
- - Fixed undefined method issue with using <code>AbstractFeatureBranch.load_application_features</code> to improve first use performance
15
-
16
- Version 0.7.0:
17
- - Added support for general Ruby use (without Rails) by externalizing AbstractFeatureBranch.application_root and AbstractFeatureBranch.application_environment. Added initializer to optionally configure them. Supported case-insensitive feature names.
18
-
19
- Version 0.6.1 - 0.6.4:
20
- - Fixed issues including making feature configuration files optional (in case one wants to get rid of <code>features.local.yml</code> or even <code>features.yml</code>)
21
-
22
- Version 0.6.0:
23
- - Added a context generator and support for reading feature configuration from context files <code>config/features/**/*.yml</code> and <code>config/features/**/*.local.yml</code>
24
-
25
- Version 0.5.0:
26
- - Added support for local configuration feature ignored by git + some performance optimizations via configuration caching and better algorithms.
27
-
28
- Version 0.4.0:
29
- - Added support for overwriting feature configuration with environment variable overrides. Very useful on Heroku to quickly enable/disable features without a redeploy.
30
-
31
- Version 0.3.6:
32
- - Fixed feature_branch issue with invalid feature name, preventing block execution and returning nil instead
33
-
34
- Version 0.3.5:
35
- - Fixed issue with generator not allowing consuming client app to start Rails server successfully
36
-
37
- Version 0.3.4:
38
- - Added <code>abstract_feature_branch:install</code> generator to easily get started with a sample <code>config/features.yml</code>
39
-
40
- Version 0.3.3:
41
- - Removed version from README title
42
-
43
- Version 0.3.2:
44
- - Added <code>AbstractFeatureBranch.features</code> to delay YAML load until <code>Rails.root</code> has been established
45
-
46
- Version 0.3.1:
47
- - Removed dependency on the rails_config gem
48
-
49
- Version 0.3.0:
50
- - Simplified <code>features.yml</code> requirement to have a features header under each environment
51
- - Moved feature storage from Settings object to <code>AbstractFeatureBranch::FEATURES</code>
52
-
53
- Version 0.2.0:
54
- - Support an "else" block to execute when a feature is off (via <code>:true</code> and <code>:false</code> lambda arguments)
55
- - Support ability to check if a feature is enabled or not (via <code>feature_enabled?</code>)
data/TODO.md DELETED
@@ -1,3 +0,0 @@
1
- # TODO
2
-
3
- - Support `connection_pool` gem to enable working with a Redis `ConnectionPool`
@@ -1,15 +0,0 @@
1
- defaults: &defaults
2
- admin_feature3: true
3
-
4
- development:
5
- <<: *defaults
6
-
7
- test:
8
- <<: *defaults
9
-
10
- staging:
11
- <<: *defaults
12
-
13
- production:
14
- <<: *defaults
15
-
@@ -1,17 +0,0 @@
1
- defaults: &defaults
2
- admin_feature1: true
3
- admin_feature2: false
4
- admin_feature3: false
5
-
6
- development:
7
- <<: *defaults
8
-
9
- test:
10
- <<: *defaults
11
-
12
- staging:
13
- <<: *defaults
14
-
15
- production:
16
- <<: *defaults
17
-
@@ -1,15 +0,0 @@
1
- defaults: &defaults
2
- wiki_feature3: true
3
-
4
- development:
5
- <<: *defaults
6
-
7
- test:
8
- <<: *defaults
9
-
10
- staging:
11
- <<: *defaults
12
-
13
- production:
14
- <<: *defaults
15
-
@@ -1,17 +0,0 @@
1
- defaults: &defaults
2
- wiki_feature1: true
3
- wiki_feature2: false
4
- wiki_feature3: false
5
-
6
- development:
7
- <<: *defaults
8
-
9
- test:
10
- <<: *defaults
11
-
12
- staging:
13
- <<: *defaults
14
-
15
- production:
16
- <<: *defaults
17
-
@@ -1,15 +0,0 @@
1
- defaults: &defaults
2
- public_feature3: true
3
-
4
- development:
5
- <<: *defaults
6
-
7
- test:
8
- <<: *defaults
9
-
10
- staging:
11
- <<: *defaults
12
-
13
- production:
14
- <<: *defaults
15
-
@@ -1,17 +0,0 @@
1
- defaults: &defaults
2
- public_feature1: true
3
- public_feature2: false
4
- public_feature3: false
5
-
6
- development:
7
- <<: *defaults
8
-
9
- test:
10
- <<: *defaults
11
-
12
- staging:
13
- <<: *defaults
14
-
15
- production:
16
- <<: *defaults
17
-
Binary file
@@ -1,22 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
- <svg width="181px" height="26px" viewBox="0 0 181 26" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
3
- <!-- Generator: Sketch 3.1 (8751) - http://www.bohemiancoding.com/sketch -->
4
- <title>es_logo</title>
5
- <desc>Created with Sketch.</desc>
6
- <defs></defs>
7
- <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
8
- <g id="es_logo" sketch:type="MSLayerGroup" transform="translate(1.000000, 0.000000)">
9
- <path d="M-0.0666666667,0.342105263 L15.2666667,0.342105263 L15.2666667,2.12105263 L1.8,2.12105263 L1.8,9.1 L13.7333333,9.1 L13.7333333,10.8789474 L1.8,10.8789474 L1.8,18.6789474 L15.4,18.6789474 L15.4,20.4578947 L-0.0666666667,20.4578947" id="Shape" fill="#3c3f40" sketch:type="MSShapeGroup"></path>
10
- <path d="M31.4666667,20.4578947 L31.4666667,18.3368421 C30.1333333,19.9105263 28.2,20.7315789 25.8,20.7315789 C23.5333333,20.7315789 21.6666667,19.9789474 20.3333333,18.5421053 C19.0666667,17.1736842 18.4666667,15.3947368 18.4666667,13.2052632 C18.4666667,11.0157895 19.0666667,9.16842105 20.3333333,7.8 C21.6666667,6.29473684 23.5333333,5.54210526 25.8666667,5.54210526 C28.2666667,5.54210526 30.0666667,6.29473684 31.4,7.86842105 L31.4,5.61052632 L33.3333333,5.61052632 L33.3333333,20.3894737 L31.4666667,20.3894737 L31.4666667,20.4578947 Z M30,8.96315789 C29,7.93684211 27.6,7.38947368 25.7333333,7.38947368 C24,7.38947368 22.6666667,7.93684211 21.6666667,9.1 C20.7333333,10.1947368 20.3333333,11.5631579 20.3333333,13.2052632 C20.3333333,14.9157895 20.8,16.2842105 21.6666667,17.3105263 C22.6,18.4052632 24,18.9526316 25.7333333,18.9526316 C27.4666667,18.9526316 28.8,18.4052632 29.8666667,17.3105263 C30.9333333,16.2157895 31.4,14.8473684 31.4,13.2052632 C31.4666667,11.4263158 31,9.98947368 30,8.96315789 L30,8.96315789 Z" id="Shape" fill="#3C3F40" sketch:type="MSShapeGroup"></path>
11
- <path d="M42,9.64736842 C41.2,10.9473684 40.8,12.5894737 40.8,14.5736842 L40.8,20.4578947 L38.8666667,20.4578947 L38.8666667,5.95263158 L40.8,5.95263158 L40.8,7.93684211 C42.1333333,6.36315789 44.2,5.61052632 46.9333333,5.61052632 L46.9333333,7.38947368 C44.6,7.38947368 43,8.14210526 42,9.64736842" id="Shape" fill="#3C3F40" sketch:type="MSShapeGroup"></path>
12
- <rect id="Rectangle-path" fill="#3C3F40" sketch:type="MSShapeGroup" x="51.3333333" y="0.684210526" width="1.93333333" height="20.1157895"></rect>
13
- <path d="M64.4,25.7947368 C62.6666667,25.7947368 61.2,25.4526316 60.0666667,24.7684211 C58.6666667,23.8789474 57.9333333,22.3736842 57.8,20.2526316 L59.7333333,20.2526316 C59.8666667,21.5526316 60.2666667,22.5105263 61,23.1263158 C61.7333333,23.7421053 62.9333333,24.0157895 64.4666667,24.0157895 C67.9333333,24.0157895 69.6666667,22.5789474 69.6666667,19.7052632 L69.6666667,19.1578947 C68.4666667,20.4578947 66.8,21.0736842 64.6666667,21.0736842 C62.8,21.0736842 61.3333333,20.5947368 60.2,19.7052632 C59.0666667,18.6789474 58.4666667,17.3105263 58.4666667,15.5315789 L58.4666667,5.95263158 L60.4,5.95263158 L60.4,15.4631579 C60.4,17.9947368 61.8,19.2947368 64.6666667,19.2947368 C66.3333333,19.2947368 67.6,18.8157895 68.4,17.7894737 C69.2,16.9 69.6,15.6 69.6,13.9578947 L69.6,5.95263158 L71.5333333,5.95263158 L71.5333333,19.7052632 C71.5333333,23.7421053 69.1333333,25.7947368 64.4,25.7947368" id="Shape" fill="#3C3F40" sketch:type="MSShapeGroup"></path>
14
- <path d="M85.6666667,20.6631579 C83.0666667,20.6631579 81.0666667,20.1842105 79.4666667,19.2947368 C77.4666667,18.1315789 76.5333333,16.3526316 76.5333333,13.8894737 L76.5333333,13 L78.4666667,13 L78.4666667,13.8210526 C78.4666667,17.2421053 80.8666667,18.9526316 85.7333333,18.9526316 C87.4,18.9526316 88.8,18.6789474 89.9333333,18.2 C91.3333333,17.5157895 92.0666667,16.5578947 92.0666667,15.2578947 C92.0666667,14.3684211 91.8,13.6842105 91.3333333,13.2052632 C90.9333333,12.7947368 90.2,12.4526316 89.1333333,12.1105263 C88.5333333,11.9052632 87.2,11.6315789 85,11.1526316 C82.5333333,10.6052632 80.8,10.1263158 79.9333333,9.64736842 C78.1333333,8.68947368 77.2,7.32105263 77.2,5.47368421 C77.2,1.98421053 79.8666667,0.205263158 85.1333333,0.205263158 C90.6666667,0.205263158 93.4666667,2.46315789 93.5333333,6.97894737 L91.6666667,6.97894737 C91.5333333,4.92631579 90.8666667,3.55789474 89.6666667,2.87368421 C88.6666667,2.32631579 87.1333333,2.05263158 85.1333333,2.05263158 C81.1333333,2.05263158 79.0666667,3.21578947 79.0666667,5.47368421 C79.0666667,6.56842105 79.6,7.45789474 80.6666667,8.00526316 C81.4,8.41578947 82.7333333,8.75789474 84.6,9.1 C88.1333333,9.78421053 90.5333333,10.4684211 91.7333333,11.1526316 C93.2,12.0421053 93.9333333,13.4105263 93.9333333,15.3263158 C93.9333333,17.2421053 92.9333333,18.6789474 91,19.6368421 C89.5333333,20.3210526 87.7333333,20.6631579 85.6666667,20.6631579" id="Shape" fill="#6BA651" sketch:type="MSShapeGroup"></path>
15
- <path d="M110.266667,20.4578947 L110.266667,10.8105263 C110.266667,9.57894737 109.866667,8.62105263 109.133333,8.00526316 C108.4,7.38947368 107.333333,7.04736842 106,7.04736842 C104.466667,7.04736842 103.2,7.52631579 102.333333,8.41578947 C101.466667,9.37368421 101,10.6052632 101,12.1105263 L101,20.3894737 L99.0666667,20.3894737 L99.0666667,0.273684211 L101,0.273684211 L101,7.11578947 C102.2,5.88421053 103.866667,5.2 106,5.2 C107.733333,5.2 109.2,5.61052632 110.333333,6.5 C111.6,7.45789474 112.2,8.75789474 112.2,10.5368421 L112.2,20.3894737 L110.266667,20.3894737 L110.266667,20.4578947 Z" id="Shape" fill="#6BA651" sketch:type="MSShapeGroup"></path>
16
- <path d="M140.333333,9.64736842 C139.533333,10.9473684 139.133333,12.5894737 139.133333,14.5736842 L139.133333,20.4578947 L137.2,20.4578947 L137.2,5.95263158 L139.133333,5.95263158 L139.133333,7.93684211 C140.466667,6.36315789 142.533333,5.61052632 145.266667,5.61052632 L145.266667,7.38947368 C142.933333,7.38947368 141.333333,8.14210526 140.333333,9.64736842" id="Shape" fill="#6BA651" sketch:type="MSShapeGroup"></path>
17
- <path d="M150,13.9578947 C150.266667,17.3105263 152.133333,19.0210526 155.6,19.0210526 C158.266667,19.0210526 160.066667,17.8578947 160.933333,15.6 L162.933333,15.6 C162.266667,17.6526316 161.266667,19.0210526 159.866667,19.7736842 C158.6,20.4578947 157.2,20.8 155.533333,20.8 C153.066667,20.8 151.2,20.1157895 149.933333,18.6789474 C148.733333,17.3789474 148.133333,15.5315789 148.133333,13.2736842 C148.133333,11.0842105 148.8,9.23684211 150.133333,7.8 C151.466667,6.36315789 153.333333,5.61052632 155.666667,5.61052632 C157.933333,5.61052632 159.8,6.22631579 161.133333,7.52631579 C162.533333,8.82631579 163.2,10.5368421 163.2,12.7263158 L163.2,13.9578947 L150,13.9578947 L150,13.9578947 Z M159.733333,8.89473684 C158.733333,7.93684211 157.4,7.38947368 155.733333,7.38947368 C154.2,7.38947368 152.933333,7.8 151.933333,8.62105263 C150.933333,9.44210526 150.333333,10.6052632 150.133333,12.1789474 L161.2,12.1789474 C161,10.8105263 160.533333,9.71578947 159.733333,8.89473684 L159.733333,8.89473684 Z" id="Shape" fill="#6BA651" sketch:type="MSShapeGroup"></path>
18
- <path d="M177.666667,20.0473684 C176.666667,20.5947368 175.333333,20.8684211 173.733333,20.8684211 C169.266667,20.8684211 167.066667,18.8157895 167.066667,14.6421053 L169.066667,14.6421053 C169.066667,16.2157895 169.466667,17.3105263 170.2,17.9947368 C170.933333,18.6789474 172.133333,19.0210526 173.8,19.0210526 C174.933333,19.0210526 175.866667,18.8157895 176.6,18.4736842 C177.466667,18.0631579 177.866667,17.3789474 177.866667,16.5578947 C177.866667,15.5315789 176.933333,14.7789474 175.133333,14.3684211 C175,14.3684211 174,14.2315789 172.266667,13.8894737 C169.266667,13.4105263 167.733333,12.1105263 167.733333,9.92105263 C167.733333,8.48421053 168.333333,7.38947368 169.533333,6.56842105 C170.6,5.88421053 171.8,5.54210526 173.266667,5.54210526 C177.533333,5.54210526 179.666667,7.38947368 179.733333,11.0842105 L177.733333,11.0842105 C177.733333,9.78421053 177.4,8.82631579 176.733333,8.21052632 C176.066667,7.66315789 174.933333,7.32105263 173.466667,7.32105263 C172.466667,7.32105263 171.6,7.52631579 170.866667,7.93684211 C170.066667,8.41578947 169.733333,9.03157895 169.733333,9.85263158 C169.733333,10.8789474 170.6,11.5631579 172.333333,11.8368421 C172.866667,11.9052632 173.866667,12.1105263 175.4,12.3842105 C178.333333,12.9315789 179.8,14.2315789 179.8,16.4210526 C179.733333,18.0631579 179.066667,19.2263158 177.666667,20.0473684" id="Shape" fill="#6BA651" sketch:type="MSShapeGroup"></path>
19
- <path d="M128.8,20.3894737 L128.8,18.2684211 C127.466667,19.8421053 125.533333,20.6631579 123.133333,20.6631579 C120.866667,20.6631579 119,19.9105263 117.666667,18.4736842 C116.4,17.1052632 115.8,15.3263158 115.8,13.1368421 C115.8,10.9473684 116.4,9.1 117.666667,7.73157895 C119,6.22631579 120.866667,5.47368421 123.2,5.47368421 C125.6,5.47368421 127.4,6.22631579 128.733333,7.8 L128.733333,5.54210526 L130.666667,5.54210526 L130.666667,20.3210526 L128.8,20.3210526 L128.8,20.3894737 Z M127.333333,8.89473684 C126.333333,7.86842105 124.933333,7.32105263 123.066667,7.32105263 C121.333333,7.32105263 120,7.86842105 119,9.03157895 C118.066667,10.1263158 117.666667,11.4947368 117.666667,13.1368421 C117.666667,14.8473684 118.133333,16.2157895 119,17.2421053 C119.933333,18.3368421 121.333333,18.8842105 123.066667,18.8842105 C124.8,18.8842105 126.133333,18.3368421 127.2,17.2421053 C128.266667,16.1473684 128.733333,14.7789474 128.733333,13.1368421 C128.8,11.3578947 128.333333,9.92105263 127.333333,8.89473684 L127.333333,8.89473684 Z" id="Shape" fill="#6BA651" sketch:type="MSShapeGroup"></path>
20
- </g>
21
- </g>
22
- </svg>
@@ -1,54 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
- <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
- width="627.062px" height="612px" viewBox="0 0 627.062 612" enable-background="new 0 0 627.062 612" xml:space="preserve">
6
- <g>
7
- <path d="M563.713,302.966c0,139.834-113.353,253.183-253.19,253.183c-139.837,0-253.19-113.349-253.19-253.183
8
- c0-139.834,113.354-253.201,253.19-253.201C450.36,49.765,563.713,163.132,563.713,302.966"/>
9
- <path fill="#FFFFFF" d="M310.522,69.572c-128.674,0-233.384,104.703-233.384,233.38c0,128.688,104.71,233.376,233.384,233.376
10
- c128.691,0,233.376-104.688,233.376-233.376C543.898,174.275,439.214,69.572,310.522,69.572 M310.522,590.299
11
- c-158.457,0-287.336-128.903-287.336-287.347c0-158.436,128.879-287.333,287.336-287.333s287.336,128.897,287.336,287.333
12
- C597.858,461.396,468.979,590.299,310.522,590.299"/>
13
- <path fill="#C1D82F" d="M310.522,14.185c-159.217,0-288.771,129.543-288.771,288.768c0,159.231,129.554,288.778,288.771,288.778
14
- c159.228,0,288.789-129.547,288.789-288.778C599.312,143.728,469.75,14.185,310.522,14.185z M542.457,302.952
15
- c0,127.893-104.042,231.944-231.935,231.944c-127.886,0-231.938-104.052-231.938-231.944
16
- c0-127.889,104.052-231.934,231.938-231.934C438.415,71.018,542.457,175.063,542.457,302.952z M310.522,17.062v51.082
17
- c-129.476,0-234.818,105.332-234.818,234.808H24.622C24.622,145.308,152.893,17.062,310.522,17.062z"/>
18
- <path fill="#C1D82F" d="M187.809,232.519c-4.814,0-8.731,3.662-8.731,8.194l-0.06,36.076h24.112l0.039-12.285
19
- c0-5.239,3.503-8.251,7.798-8.251l70.894-0.074l-92.888,181.206h28.785l93.164-185.182v-19.684H187.809z"/>
20
- <path fill="#C1D82F" d="M413.941,232.625c0,0-59.977-0.042-65.402,0c-5.434,0.042-8.997-0.127-12.531,1.647
21
- c-5.989,3.005-7.198,9.94-7.863,15.986c-0.809,7.332-8.392,84.803-7.738,85.118l11.857,5.903c0,0,17.644-10.237,38.31-10.237
22
- c26.75,0,44.118,17.046,44.118,42.188c0,23.123-19.291,41.626-43.842,41.626c-28.126,0-42.693-22.405-42.693-22.405l-14.579,20.903
23
- c0,0,19.234,27.227,58.636,27.227c40.559,0,70.621-30.055,70.621-68.503c0-36.418-27.019-64.741-67.301-64.741
24
- c-18.318,0-27.578,6.37-27.578,6.37s5.112-50.206,5.112-50.237c0.368-3.761,3.515-6.685,7.184-6.685c0,0,36.563-0.007,39.618-0.007
25
- c3.98,0,6.733,3.574,6.833,6.674c0.096,3.09,0,13.285,0,13.285h22.695l0.057-31.504c0-6.622-5.246-10.605-8.746-11.765
26
- C418.499,232.721,416.204,232.59,413.941,232.625"/>
27
- <polygon fill="#FFFFFF" points="188.699,166.494 222.912,166.494 221.039,176.371 199.5,176.371 197.382,186.146 217.659,186.146
28
- 215.746,196.009 195.487,196.009 191.436,217.463 178.745,217.463 "/>
29
- <path fill="#FFFFFF" d="M232.121,198.999h12.921l-2.888-19.549L232.121,198.999z M246.644,208.212h-19.185l-4.762,9.251h-12.695
30
- l27.136-51.043h14.161l8.498,51.043h-11.789L246.644,208.212z"/>
31
- <polygon fill="#FFFFFF" points="302.773,166.469 343.007,166.455 340.988,176.615 326.926,176.615 320.24,217.318 308.999,217.318
32
- 315.617,176.615 301.172,176.619 "/>
33
- <path fill="#FFFFFF" d="M409.081,189.772c2.867,0,5.056-0.714,6.529-2.131c1.492-1.432,2.234-3.524,2.234-6.282
34
- c0-1.195-0.587-2.881-2.305-3.984c-1.599-1.021-4.179-1.015-8.159-1.015c-3.16,0-4.214,0.053-4.214,0.053l-1.901,13.359H409.081z
35
- M400.184,199.098l-2.588,18.397l-11.963-0.042l7.883-50.892h20.532c5.401,0,9.495,1.071,12.267,3.224
36
- c2.811,2.156,4.214,5.324,4.214,9.509c0,4.235-1.11,7.707-3.315,10.45c-2.185,2.733-5.176,4.292-8.923,4.702
37
- c1.722,0.367,3.164,1.304,4.288,2.786c1.142,1.481,2.146,3.747,2.994,6.819l3.659,13.444h-12.617l-3.153-11.588
38
- c-0.771-2.587-1.658-4.383-2.722-5.352c-1.071-0.969-2.612-1.457-4.646-1.457H400.184z"/>
39
- <path fill="#FFFFFF" d="M284.809,166.494c-8.947,0-17.1,3.797-18.758,13.239c-0.007,0.042-3.58,21.041-3.609,21.31
40
- c-0.205,2.139-0.145,4.179,0.039,6.441c0.178,1.796,1.086,3.669,2.153,5.115c1.075,1.372,2.364,2.454,3.906,3.228
41
- c3.182,1.623,7.232,1.669,11.817,1.715c0.732,0,10.994,0,10.994,0l1.057-10.206c-0.66,0-16.187,0.131-16.879-0.042
42
- c-1.055-0.261-1.69-1.025-2.051-1.919c-0.389-0.873-0.1-2.287,0.061-3.245c0.018-0.032,4.195-23.342,4.195-23.342
43
- c0.283-1.704,1.541-2.178,3.143-2.167c3.16,0.06,15.982,0.018,15.982,0.018l1.835-10.125
44
- C298.694,166.512,287.092,166.494,284.809,166.494"/>
45
- <path fill="#FFFFFF" d="M372.779,203.796c-0.438,2.17-1.63,3.581-3.609,3.574c-0.676,0-3.786,0.032-7.611,0.032
46
- c-4.15,0-7.819-0.032-8.509-0.032c-1.934,0.007-2.804-1.576-2.472-3.574c0.262-1.63,1.651-10.832,2.157-14.144
47
- c0.626-3.761,1.347-8.148,1.583-9.329c0.39-2.266,1.57-3.715,3.454-3.793c0.039,0,3.8-0.05,8.177-0.05
48
- c4.369-0.007,8.088,0.042,8.088,0.042c1.984,0,2.801,1.379,2.489,3.535c0,0-0.891,6.498-1.796,12.896
49
- C373.832,199.342,372.779,203.796,372.779,203.796 M360.018,217.644c4.879-0.05,11.613-0.474,15.992-3.153
50
- c4.091-2.521,6.354-6.356,7.251-12.394l3.221-20.345c0.799-6.059-0.039-9.859-3.358-12.373c-3.766-2.885-11.064-3.167-16.004-3.167
51
- l-0.01,0.018c-4.89,0.046-11.603,0.488-15.982,3.15c-4.107,2.535-6.335,6.359-7.25,12.39l-3.211,20.327
52
- c-1.008,6.038,0.008,9.874,3.303,12.394c3.538,2.679,10.152,3.104,15.01,3.153"/>
53
- </g>
54
- </svg>