anyway_config 2.0.5 → 2.2.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/CHANGELOG.md +241 -181
 - data/README.md +238 -13
 - data/lib/.rbnext/1995.next/anyway/config.rb +438 -0
 - data/lib/.rbnext/1995.next/anyway/dynamic_config.rb +31 -0
 - data/lib/.rbnext/1995.next/anyway/env.rb +56 -0
 - data/lib/.rbnext/1995.next/anyway/loaders/base.rb +21 -0
 - data/lib/.rbnext/1995.next/anyway/tracing.rb +181 -0
 - data/lib/.rbnext/2.7/anyway/auto_cast.rb +39 -19
 - data/lib/.rbnext/2.7/anyway/config.rb +61 -16
 - data/lib/.rbnext/2.7/anyway/rails/loaders/yaml.rb +30 -0
 - data/lib/.rbnext/2.7/anyway/rbs.rb +92 -0
 - data/lib/.rbnext/2.7/anyway/settings.rb +79 -0
 - data/lib/.rbnext/2.7/anyway/tracing.rb +6 -6
 - data/lib/.rbnext/2.7/anyway/type_casting.rb +143 -0
 - data/lib/.rbnext/3.0/anyway/auto_cast.rb +53 -0
 - data/lib/.rbnext/{2.8 → 3.0}/anyway/config.rb +61 -16
 - data/lib/.rbnext/{2.8 → 3.0}/anyway/loaders/base.rb +0 -0
 - data/lib/.rbnext/{2.8 → 3.0}/anyway/loaders.rb +0 -0
 - data/lib/.rbnext/{2.8 → 3.0}/anyway/tracing.rb +6 -6
 - data/lib/anyway/auto_cast.rb +39 -19
 - data/lib/anyway/config.rb +75 -30
 - data/lib/anyway/dynamic_config.rb +6 -2
 - data/lib/anyway/env.rb +1 -1
 - data/lib/anyway/ext/deep_dup.rb +12 -0
 - data/lib/anyway/ext/hash.rb +10 -12
 - data/lib/anyway/loaders/base.rb +1 -1
 - data/lib/anyway/loaders/env.rb +3 -1
 - data/lib/anyway/loaders/yaml.rb +9 -5
 - data/lib/anyway/option_parser_builder.rb +1 -3
 - data/lib/anyway/optparse_config.rb +5 -7
 - data/lib/anyway/rails/loaders/credentials.rb +4 -4
 - data/lib/anyway/rails/loaders/secrets.rb +6 -8
 - data/lib/anyway/rails/loaders/yaml.rb +11 -0
 - data/lib/anyway/rails/settings.rb +9 -2
 - data/lib/anyway/rbs.rb +92 -0
 - data/lib/anyway/settings.rb +52 -2
 - data/lib/anyway/tracing.rb +9 -9
 - data/lib/anyway/type_casting.rb +134 -0
 - data/lib/anyway/utils/deep_merge.rb +21 -0
 - data/lib/anyway/version.rb +1 -1
 - data/lib/anyway_config.rb +4 -0
 - data/sig/anyway_config.rbs +129 -0
 - metadata +42 -15
 - data/lib/.rbnext/2.7/anyway/option_parser_builder.rb +0 -31
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: a0f3278ebf47801b6fdd2836c3f9f63d9a8fc1fe324f04e30f74d2dca179f471
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 8be597f8b2c6065f0ea96e5c58ec54d6ef3532f00d7a8639a963e99b2bba65c9
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 8174b86b24e86de09a55e473bcec74fc37aeca1c38bb2a75e83e71dbeebf512b68fdb93ae23d247cb6a8ae6c5d1e2fbb86d659bf611f83ad219fccabad1ba7b6
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: dcf73ae92079a78b8c518cc3059a85848dd4934633269d016b402114279a0303108ab7962477ea2172ff15a1abc9c6401cea9106a83ba9b4c46a02220264eb23
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -1,5 +1,79 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # Change log
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            ## master
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            ## 2.2.1 (2020-09-28)
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            - Minor fixes to the prev release.
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            ## 2.2.0 ⛓ (2020-09-28)
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            - Add RBS signatures and generator. ([@palkan][])
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            Anyway Config now ships with the basic RBS support. To use config types with Steep, add `library "anyway_config"` to your Steepfile.
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            We also provide an API to generate a signature for you config class: `MyConfig.to_rbs`. You can use this method to generate a scaffold for your config class.
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            - Add type coercion support. ([@palkan][])
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            Example:
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 22 
     | 
    
         
            +
            class CoolConfig < Anyway::Config
         
     | 
| 
      
 23 
     | 
    
         
            +
              attr_config :port, :user
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              coerce_types port: :string, user: {dob: :date}
         
     | 
| 
      
 26 
     | 
    
         
            +
            end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            ENV["COOL_USER__DOB"] = "1989-07-01"
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            config = CoolConfig.new({port: 8080})
         
     | 
| 
      
 31 
     | 
    
         
            +
            config.port == "8080" #=> true
         
     | 
| 
      
 32 
     | 
    
         
            +
            config.user["dob"] == Date.new(1989, 7, 1) #=> true
         
     | 
| 
      
 33 
     | 
    
         
            +
            ```
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            You can also add `.disable_auto_cast!` to your config class to disable automatic conversion.
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
            **Warning** Now values from all sources are coerced (e.g., YAML files). That could lead to a different behaviour.
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
            - Do not dup modules/classes passed as configuration values. ([@palkan][])
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
            - Handle loading empty YAML config files. ([@micahlee][])
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            ## 2.1.0 (2020-12-29)
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
            - Drop deprecated `attr_config` instance variables support.
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
            Config setters no longer write instance variables.
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
            - Add `config.anyway_config.future` to allow enabling upcoming features. ([@palkan][])
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
            For smoother upgrades, we provide a mechanism to opt-out to the new defaults beforehand.
         
     | 
| 
      
 52 
     | 
    
         
            +
            Currently, only `:unwrap_known_environments` feature could be enabled (see below):
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 55 
     | 
    
         
            +
            config.anyway_config.future.use :unwrap_known_environments
         
     | 
| 
      
 56 
     | 
    
         
            +
            ```
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            - Allow to skip environment keys completely (e.g., `development:`, `test:`) in a config YML when used with Rails. In that case same config is loaded in all known environments (same mechanism as for non-Rails applications)
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
            - Add the `known_environments` property to Anyway::Settings under Rails. Use `config.anyway_config.known_environments << "staging"` to make the gem aware of custom environments. ([@progapandist][])
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
            - Make it possible to specify default YML configs directory. ([@palkan][])
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
            For example:
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 67 
     | 
    
         
            +
            Anyway::Settings.default_config_path = "path/to/configs"
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
            # or in Rails
         
     | 
| 
      
 70 
     | 
    
         
            +
            config.anyway_config.default_config_path = Rails.root.join("my/configs")
         
     | 
| 
      
 71 
     | 
    
         
            +
            ```
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
            ## 2.0.6 (2020-07-7)
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
            - Fix Ruby 2.7 warnings. ([@palkan][])
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
       3 
77 
     | 
    
         
             
            ## 2.0.5 (2020-05-15)
         
     | 
| 
       4 
78 
     | 
    
         | 
| 
       5 
79 
     | 
    
         
             
            - Use `YAML.load` instead of `YAML.safe_laad`. ([@palkan][])
         
     | 
| 
         @@ -16,13 +90,13 @@ 
     | 
|
| 
       16 
90 
     | 
    
         | 
| 
       17 
91 
     | 
    
         
             
            - Make sure configs are eager loaded in Rails when `config.eager_load = true`. ([@palkan][])
         
     | 
| 
       18 
92 
     | 
    
         | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
      
 93 
     | 
    
         
            +
            Fixes [#58](https://github.com/palkan/anyway_config/issues/58).
         
     | 
| 
       20 
94 
     | 
    
         | 
| 
       21 
95 
     | 
    
         
             
            ## 2.0.1 (2020-04-15)
         
     | 
| 
       22 
96 
     | 
    
         | 
| 
       23 
97 
     | 
    
         
             
            - Fix loading Railtie when application has been already initialized. ([@palkan][])
         
     | 
| 
       24 
98 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
      
 99 
     | 
    
         
            +
            Fixes [#56](https://github.com/palkan/anyway_config/issues/56).
         
     | 
| 
       26 
100 
     | 
    
         | 
| 
       27 
101 
     | 
    
         
             
            ## 2.0.0 (2020-04-14)
         
     | 
| 
       28 
102 
     | 
    
         | 
| 
         @@ -32,166 +106,166 @@ 
     | 
|
| 
       32 
106 
     | 
    
         | 
| 
       33 
107 
     | 
    
         
             
            - Add predicate methods for attributes with boolean defaults. ([@palkan][])
         
     | 
| 
       34 
108 
     | 
    
         | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
      
 109 
     | 
    
         
            +
            For example:
         
     | 
| 
       36 
110 
     | 
    
         | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
      
 111 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 112 
     | 
    
         
            +
            class MyConfig < Anyway::Config
         
     | 
| 
      
 113 
     | 
    
         
            +
              attr_config :key, :secret, debug: false
         
     | 
| 
      
 114 
     | 
    
         
            +
            end
         
     | 
| 
       41 
115 
     | 
    
         | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
      
 116 
     | 
    
         
            +
            MyConfig.new.debug? #=> false
         
     | 
| 
      
 117 
     | 
    
         
            +
            MyConfig.new(debug: true).debug? #=> true
         
     | 
| 
      
 118 
     | 
    
         
            +
            ```
         
     | 
| 
       45 
119 
     | 
    
         | 
| 
       46 
120 
     | 
    
         
             
            - Add `Config#deconstruct_keys`. ([@palkan][])
         
     | 
| 
       47 
121 
     | 
    
         | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
      
 122 
     | 
    
         
            +
            Now you can use configs in pattern matching:
         
     | 
| 
       49 
123 
     | 
    
         | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
      
 124 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 125 
     | 
    
         
            +
            case AWSConfig.new
         
     | 
| 
      
 126 
     | 
    
         
            +
            in bucket:, region: "eu-west-1"
         
     | 
| 
      
 127 
     | 
    
         
            +
              setup_eu_storage(bucket)
         
     | 
| 
      
 128 
     | 
    
         
            +
            in bucket:, region: "us-east-1"
         
     | 
| 
      
 129 
     | 
    
         
            +
              setup_us_storage(bucket)
         
     | 
| 
      
 130 
     | 
    
         
            +
            end
         
     | 
| 
      
 131 
     | 
    
         
            +
            ```
         
     | 
| 
       58 
132 
     | 
    
         | 
| 
       59 
133 
     | 
    
         
             
            - Add pretty_print support. ([@palkan][])
         
     | 
| 
       60 
134 
     | 
    
         | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
      
 135 
     | 
    
         
            +
            Whenever you use `pp`, the output would contain pretty formatted config information
         
     | 
| 
      
 136 
     | 
    
         
            +
            including the sources.
         
     | 
| 
       63 
137 
     | 
    
         | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
      
 138 
     | 
    
         
            +
            Example:
         
     | 
| 
       65 
139 
     | 
    
         | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
      
 140 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 141 
     | 
    
         
            +
            pp CoolConfig.new
         
     | 
| 
       68 
142 
     | 
    
         | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       72 
     | 
    
         
            -
             
     | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
      
 143 
     | 
    
         
            +
            # #<CoolConfig
         
     | 
| 
      
 144 
     | 
    
         
            +
            #   config_name="cool"
         
     | 
| 
      
 145 
     | 
    
         
            +
            #   env_prefix="COOL"
         
     | 
| 
      
 146 
     | 
    
         
            +
            #   values:
         
     | 
| 
      
 147 
     | 
    
         
            +
            #     port => 3334 (type=load),
         
     | 
| 
      
 148 
     | 
    
         
            +
            #     host => "test.host" (type=yml path=./config/cool.yml),
         
     | 
| 
      
 149 
     | 
    
         
            +
            #     user =>
         
     | 
| 
      
 150 
     | 
    
         
            +
            #       name => "john" (type=env key=COOL_USER__NAME),
         
     | 
| 
      
 151 
     | 
    
         
            +
            #       password => "root" (type=yml path=./config/cool.yml)>
         
     | 
| 
      
 152 
     | 
    
         
            +
            ```
         
     | 
| 
       79 
153 
     | 
    
         | 
| 
       80 
154 
     | 
    
         
             
            - Add source tracing support. ([@palkan][])
         
     | 
| 
       81 
155 
     | 
    
         | 
| 
       82 
     | 
    
         
            -
             
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
       84 
     | 
    
         
            -
             
     | 
| 
       85 
     | 
    
         
            -
             
     | 
| 
       86 
     | 
    
         
            -
             
     | 
| 
       87 
     | 
    
         
            -
             
     | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
       90 
     | 
    
         
            -
             
     | 
| 
       91 
     | 
    
         
            -
             
     | 
| 
       92 
     | 
    
         
            -
             
     | 
| 
       93 
     | 
    
         
            -
             
     | 
| 
       94 
     | 
    
         
            -
             
     | 
| 
       95 
     | 
    
         
            -
             
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
      
 156 
     | 
    
         
            +
            You can get the information on where a particular parameter value came from
         
     | 
| 
      
 157 
     | 
    
         
            +
            (which loader) through via `#to_source_trace` method:
         
     | 
| 
      
 158 
     | 
    
         
            +
             
     | 
| 
      
 159 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 160 
     | 
    
         
            +
            conf = MyConfig.new
         
     | 
| 
      
 161 
     | 
    
         
            +
            conf.to_source_trace
         
     | 
| 
      
 162 
     | 
    
         
            +
            # {
         
     | 
| 
      
 163 
     | 
    
         
            +
            #  "host" => {value: "test.host", source: {type: :user, called_from: "/rails/root/config/application.rb:21"}},
         
     | 
| 
      
 164 
     | 
    
         
            +
            #  "user" => {
         
     | 
| 
      
 165 
     | 
    
         
            +
            #    "name" => {value: "john", source: {type: :env, key: "COOL_USER__NAME"}},
         
     | 
| 
      
 166 
     | 
    
         
            +
            #    "password" => {value: "root", source: {type: :yml, path: "config/cool.yml"}}
         
     | 
| 
      
 167 
     | 
    
         
            +
            #  },
         
     | 
| 
      
 168 
     | 
    
         
            +
            #  "port" => {value: 9292, source: {type: :defaults}}
         
     | 
| 
      
 169 
     | 
    
         
            +
            # }
         
     | 
| 
      
 170 
     | 
    
         
            +
            ```
         
     | 
| 
       97 
171 
     | 
    
         | 
| 
       98 
172 
     | 
    
         
             
            - Change the way Rails configs autoloading works. ([@palkan][])
         
     | 
| 
       99 
173 
     | 
    
         | 
| 
       100 
     | 
    
         
            -
             
     | 
| 
       101 
     | 
    
         
            -
             
     | 
| 
      
 174 
     | 
    
         
            +
            In Rails 6, autoloading before initialization is [deprecated](https://github.com/rails/rails/commit/3e66ba91d511158e22f90ff96b594d61f40eda01). We can still
         
     | 
| 
      
 175 
     | 
    
         
            +
            make it work by using our own autoloading mechanism (custom Zeitwerk loader).
         
     | 
| 
       102 
176 
     | 
    
         | 
| 
       103 
     | 
    
         
            -
             
     | 
| 
       104 
     | 
    
         
            -
             
     | 
| 
       105 
     | 
    
         
            -
             
     | 
| 
      
 177 
     | 
    
         
            +
            This forces us to use a custom directory (not `app/`) for configs required at the boot time.
         
     | 
| 
      
 178 
     | 
    
         
            +
            By default, we put _static_ configs into `config/configs` but you can still use `app/configs` for
         
     | 
| 
      
 179 
     | 
    
         
            +
            _dynamic_ (runtime) configs.
         
     | 
| 
       106 
180 
     | 
    
         | 
| 
       107 
     | 
    
         
            -
             
     | 
| 
       108 
     | 
    
         
            -
             
     | 
| 
      
 181 
     | 
    
         
            +
            **NOTE:** if you used `app/configs` with 2.0.0.preX and relied on configs during initialization,
         
     | 
| 
      
 182 
     | 
    
         
            +
            you can set static configs path to `app/configs`:
         
     | 
| 
       109 
183 
     | 
    
         | 
| 
       110 
     | 
    
         
            -
             
     | 
| 
       111 
     | 
    
         
            -
             
     | 
| 
       112 
     | 
    
         
            -
             
     | 
| 
      
 184 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 185 
     | 
    
         
            +
            config.anyway_config.autoload_static_config_path = "app/configs"
         
     | 
| 
      
 186 
     | 
    
         
            +
            ```
         
     | 
| 
       113 
187 
     | 
    
         | 
| 
       114 
     | 
    
         
            -
             
     | 
| 
      
 188 
     | 
    
         
            +
            You can do this by running the generator:
         
     | 
| 
       115 
189 
     | 
    
         | 
| 
       116 
     | 
    
         
            -
             
     | 
| 
       117 
     | 
    
         
            -
             
     | 
| 
       118 
     | 
    
         
            -
             
     | 
| 
      
 190 
     | 
    
         
            +
            ```sh
         
     | 
| 
      
 191 
     | 
    
         
            +
            rails g anyway:install --configs-path=app/configs
         
     | 
| 
      
 192 
     | 
    
         
            +
            ```
         
     | 
| 
       119 
193 
     | 
    
         | 
| 
       120 
194 
     | 
    
         
             
            - Add Rails generators. ([@palkan][])
         
     | 
| 
       121 
195 
     | 
    
         | 
| 
       122 
     | 
    
         
            -
             
     | 
| 
      
 196 
     | 
    
         
            +
            You can create config classes with the predefined attributes like this:
         
     | 
| 
       123 
197 
     | 
    
         | 
| 
       124 
     | 
    
         
            -
             
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
      
 198 
     | 
    
         
            +
            ```sh
         
     | 
| 
      
 199 
     | 
    
         
            +
            rails generate config aws access_key_id secret_access_key region
         
     | 
| 
      
 200 
     | 
    
         
            +
            ```
         
     | 
| 
       127 
201 
     | 
    
         | 
| 
       128 
202 
     | 
    
         
             
            - **BREAKING** The accessors generated by `attr_config` are not longer `attr_accessor`-s. ([@palkan][])
         
     | 
| 
       129 
203 
     | 
    
         | 
| 
       130 
     | 
    
         
            -
             
     | 
| 
       131 
     | 
    
         
            -
             
     | 
| 
      
 204 
     | 
    
         
            +
            You cannot rely on instance variables anymore. Instead, you can use `super` when overriding accessors or
         
     | 
| 
      
 205 
     | 
    
         
            +
            `values[name]`:
         
     | 
| 
       132 
206 
     | 
    
         | 
| 
       133 
     | 
    
         
            -
             
     | 
| 
       134 
     | 
    
         
            -
             
     | 
| 
      
 207 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 208 
     | 
    
         
            +
            attr_config :host, :port, :url, :meta
         
     | 
| 
       135 
209 
     | 
    
         | 
| 
       136 
     | 
    
         
            -
             
     | 
| 
       137 
     | 
    
         
            -
             
     | 
| 
       138 
     | 
    
         
            -
             
     | 
| 
       139 
     | 
    
         
            -
             
     | 
| 
      
 210 
     | 
    
         
            +
            # override writer to handle type coercion
         
     | 
| 
      
 211 
     | 
    
         
            +
            def meta=(val)
         
     | 
| 
      
 212 
     | 
    
         
            +
              super JSON.parse(val)
         
     | 
| 
      
 213 
     | 
    
         
            +
            end
         
     | 
| 
       140 
214 
     | 
    
         | 
| 
       141 
     | 
    
         
            -
             
     | 
| 
       142 
     | 
    
         
            -
             
     | 
| 
       143 
     | 
    
         
            -
             
     | 
| 
       144 
     | 
    
         
            -
             
     | 
| 
      
 215 
     | 
    
         
            +
            # or override reader to handle missing values
         
     | 
| 
      
 216 
     | 
    
         
            +
            def url
         
     | 
| 
      
 217 
     | 
    
         
            +
              values[:url] ||= "#{host}:#{port}"
         
     | 
| 
      
 218 
     | 
    
         
            +
            end
         
     | 
| 
       145 
219 
     | 
    
         | 
| 
       146 
     | 
    
         
            -
             
     | 
| 
       147 
     | 
    
         
            -
             
     | 
| 
       148 
     | 
    
         
            -
             
     | 
| 
       149 
     | 
    
         
            -
             
     | 
| 
       150 
     | 
    
         
            -
             
     | 
| 
       151 
     | 
    
         
            -
             
     | 
| 
      
 220 
     | 
    
         
            +
            # in <2.1 it's still possible to read instance variables,
         
     | 
| 
      
 221 
     | 
    
         
            +
            # i.e. the following would also work
         
     | 
| 
      
 222 
     | 
    
         
            +
            def url
         
     | 
| 
      
 223 
     | 
    
         
            +
              @url ||= "#{host}:#{port}"
         
     | 
| 
      
 224 
     | 
    
         
            +
            end
         
     | 
| 
      
 225 
     | 
    
         
            +
            ```
         
     | 
| 
       152 
226 
     | 
    
         | 
| 
       153 
     | 
    
         
            -
             
     | 
| 
       154 
     | 
    
         
            -
             
     | 
| 
      
 227 
     | 
    
         
            +
            **NOTE**: we still set instance variables in writers (for backward compatibility), but that would
         
     | 
| 
      
 228 
     | 
    
         
            +
            be removed in 2.1.
         
     | 
| 
       155 
229 
     | 
    
         | 
| 
       156 
230 
     | 
    
         
             
            - Add `Config#dig` method. ([@palkan][])
         
     | 
| 
       157 
231 
     | 
    
         | 
| 
       158 
232 
     | 
    
         
             
            - Add ability to specify types for OptionParser options. ([@palkan][])
         
     | 
| 
       159 
233 
     | 
    
         | 
| 
       160 
     | 
    
         
            -
             
     | 
| 
       161 
     | 
    
         
            -
             
     | 
| 
       162 
     | 
    
         
            -
             
     | 
| 
       163 
     | 
    
         
            -
             
     | 
| 
       164 
     | 
    
         
            -
             
     | 
| 
       165 
     | 
    
         
            -
             
     | 
| 
       166 
     | 
    
         
            -
             
     | 
| 
       167 
     | 
    
         
            -
             
     | 
| 
      
 234 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 235 
     | 
    
         
            +
            describe_options(
         
     | 
| 
      
 236 
     | 
    
         
            +
              concurrency: {
         
     | 
| 
      
 237 
     | 
    
         
            +
                desc: "number of threads to use",
         
     | 
| 
      
 238 
     | 
    
         
            +
                type: String
         
     | 
| 
      
 239 
     | 
    
         
            +
              }
         
     | 
| 
      
 240 
     | 
    
         
            +
            )
         
     | 
| 
      
 241 
     | 
    
         
            +
            ```
         
     | 
| 
       168 
242 
     | 
    
         | 
| 
       169 
243 
     | 
    
         
             
            - Add param presence validation. ([@palkan][])
         
     | 
| 
       170 
244 
     | 
    
         | 
| 
       171 
     | 
    
         
            -
             
     | 
| 
       172 
     | 
    
         
            -
             
     | 
| 
      
 245 
     | 
    
         
            +
            You can specify some params as required, and the validation
         
     | 
| 
      
 246 
     | 
    
         
            +
            error would be raised if they're missing or empty (only for strings):
         
     | 
| 
       173 
247 
     | 
    
         | 
| 
       174 
     | 
    
         
            -
             
     | 
| 
       175 
     | 
    
         
            -
             
     | 
| 
       176 
     | 
    
         
            -
             
     | 
| 
      
 248 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 249 
     | 
    
         
            +
            class MyConfig < Anyway::Config
         
     | 
| 
      
 250 
     | 
    
         
            +
              attr_config :api_key, :api_secret, :debug
         
     | 
| 
       177 
251 
     | 
    
         | 
| 
       178 
     | 
    
         
            -
             
     | 
| 
       179 
     | 
    
         
            -
             
     | 
| 
      
 252 
     | 
    
         
            +
              required :api_key, :api_secret
         
     | 
| 
      
 253 
     | 
    
         
            +
            end
         
     | 
| 
       180 
254 
     | 
    
         | 
| 
       181 
     | 
    
         
            -
             
     | 
| 
       182 
     | 
    
         
            -
             
     | 
| 
      
 255 
     | 
    
         
            +
            MyConfig.new(api_secret: "") #=> raises Anyway::Config::ValidationError
         
     | 
| 
      
 256 
     | 
    
         
            +
            ```
         
     | 
| 
       183 
257 
     | 
    
         | 
| 
       184 
     | 
    
         
            -
             
     | 
| 
      
 258 
     | 
    
         
            +
            You can change the validation behaviour by overriding the `#validate!` method in your config class.
         
     | 
| 
       185 
259 
     | 
    
         | 
| 
       186 
260 
     | 
    
         
             
            - Validate config attribute names. ([@palkan][])
         
     | 
| 
       187 
261 
     | 
    
         | 
| 
       188 
     | 
    
         
            -
             
     | 
| 
       189 
     | 
    
         
            -
             
     | 
| 
      
 262 
     | 
    
         
            +
            Do not allow using reserved names (`Anyway::Config` method names).
         
     | 
| 
      
 263 
     | 
    
         
            +
            Allow only alphanumeric names (matching `/^[a-z_]([\w]+)?$/`).
         
     | 
| 
       190 
264 
     | 
    
         | 
| 
       191 
265 
     | 
    
         
             
            - Add Loaders API. ([@palkan][])
         
     | 
| 
       192 
266 
     | 
    
         | 
| 
       193 
     | 
    
         
            -
             
     | 
| 
       194 
     | 
    
         
            -
             
     | 
| 
      
 267 
     | 
    
         
            +
            All config sources have standardized via _loaders_ API. It's possible to define
         
     | 
| 
      
 268 
     | 
    
         
            +
            custom loaders or change the sources order.
         
     | 
| 
       195 
269 
     | 
    
         | 
| 
       196 
270 
     | 
    
         
             
            ## 2.0.0.pre2 (2019-04-26)
         
     | 
| 
       197 
271 
     | 
    
         | 
| 
         @@ -201,73 +275,58 @@ 
     | 
|
| 
       201 
275 
     | 
    
         | 
| 
       202 
276 
     | 
    
         
             
            - **BREAKING** Changed the way of providing explicit values. ([@palkan][])
         
     | 
| 
       203 
277 
     | 
    
         | 
| 
       204 
     | 
    
         
            -
             
     | 
| 
       205 
     | 
    
         
            -
             
     | 
| 
       206 
     | 
    
         
            -
             
     | 
| 
      
 278 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 279 
     | 
    
         
            +
            # BEFORE
         
     | 
| 
      
 280 
     | 
    
         
            +
            Config.new(overrides: data)
         
     | 
| 
       207 
281 
     | 
    
         | 
| 
       208 
     | 
    
         
            -
             
     | 
| 
       209 
     | 
    
         
            -
             
     | 
| 
       210 
     | 
    
         
            -
             
     | 
| 
      
 282 
     | 
    
         
            +
            # AFTER
         
     | 
| 
      
 283 
     | 
    
         
            +
            Config.new(data)
         
     | 
| 
      
 284 
     | 
    
         
            +
            ```
         
     | 
| 
       211 
285 
     | 
    
         | 
| 
       212 
286 
     | 
    
         
             
            - Add Railtie. ([@palkan][])
         
     | 
| 
       213 
287 
     | 
    
         | 
| 
       214 
     | 
    
         
            -
             
     | 
| 
      
 288 
     | 
    
         
            +
            `Anyway::Railtie` provides `Anyway::Settings` access via `Rails.applicaiton.configuration.anyway_config`.
         
     | 
| 
       215 
289 
     | 
    
         | 
| 
       216 
     | 
    
         
            -
             
     | 
| 
       217 
     | 
    
         
            -
             
     | 
| 
      
 290 
     | 
    
         
            +
            It also adds `app/configs` path to autoload paths (low-level, `ActiveSupport::Dependencies`) to
         
     | 
| 
      
 291 
     | 
    
         
            +
            make it possible to use configs in the app configuration files.
         
     | 
| 
       218 
292 
     | 
    
         | 
| 
       219 
293 
     | 
    
         
             
            - Add test helpers. ([@palkan][])
         
     | 
| 
       220 
294 
     | 
    
         | 
| 
       221 
     | 
    
         
            -
             
     | 
| 
       222 
     | 
    
         
            -
             
     | 
| 
      
 295 
     | 
    
         
            +
            Added `with_env` helper to test code in the context of the specified
         
     | 
| 
      
 296 
     | 
    
         
            +
            environment variables.
         
     | 
| 
       223 
297 
     | 
    
         | 
| 
       224 
     | 
    
         
            -
             
     | 
| 
       225 
     | 
    
         
            -
             
     | 
| 
      
 298 
     | 
    
         
            +
            Included automatically in RSpec for examples with the `type: :config` meta
         
     | 
| 
      
 299 
     | 
    
         
            +
            or with the `spec/configs` path.
         
     | 
| 
       226 
300 
     | 
    
         | 
| 
       227 
301 
     | 
    
         
             
            - Add support for _local_ files. ([@palkan][])
         
     | 
| 
       228 
302 
     | 
    
         | 
| 
       229 
     | 
    
         
            -
             
     | 
| 
       230 
     | 
    
         
            -
             
     | 
| 
       231 
     | 
    
         
            -
             
     | 
| 
      
 303 
     | 
    
         
            +
            Now users can store their personal configurations in _local_ files:
         
     | 
| 
      
 304 
     | 
    
         
            +
             
     | 
| 
      
 305 
     | 
    
         
            +
            - `<config_name>.local.yml`
         
     | 
| 
      
 306 
     | 
    
         
            +
            - `config/credentials/local.yml.enc` (for Rails 6).
         
     | 
| 
       232 
307 
     | 
    
         | 
| 
       233 
     | 
    
         
            -
             
     | 
| 
       234 
     | 
    
         
            -
             
     | 
| 
       235 
     | 
    
         
            -
             
     | 
| 
      
 308 
     | 
    
         
            +
            Local configs are meant for using in development and only loaded if
         
     | 
| 
      
 309 
     | 
    
         
            +
            `Anyway::Settings.use_local_files` is `true` (which is true by default if
         
     | 
| 
      
 310 
     | 
    
         
            +
            `RACK_ENV` or `RAILS_ENV` env variable is equal to `"development"`).
         
     | 
| 
       236 
311 
     | 
    
         | 
| 
       237 
312 
     | 
    
         
             
            - Add Rails credentials support. ([@palkan][])
         
     | 
| 
       238 
313 
     | 
    
         | 
| 
       239 
     | 
    
         
            -
             
     | 
| 
       240 
     | 
    
         
            -
             
     | 
| 
      
 314 
     | 
    
         
            +
            The data from credentials is loaded after the data from YAML config and secrets,
         
     | 
| 
      
 315 
     | 
    
         
            +
            but before environmental variables (i.e. env variables are _stronger_)
         
     | 
| 
       241 
316 
     | 
    
         | 
| 
       242 
317 
     | 
    
         
             
            - Update config name inference logic. ([@palkan][])
         
     | 
| 
       243 
318 
     | 
    
         | 
| 
       244 
     | 
    
         
            -
             
     | 
| 
       245 
     | 
    
         
            -
              - the class name has a form of `<Module>::Config` (`SomeModule::Config => "some_module"`)
         
     | 
| 
       246 
     | 
    
         
            -
              - the class name has a form of `<Something>Config` (`SomeConfig => "some"`)
         
     | 
| 
       247 
     | 
    
         
            -
             
     | 
| 
       248 
     | 
    
         
            -
            - Fix config classes inheritance. ([@palkan][])
         
     | 
| 
      
 319 
     | 
    
         
            +
            Config name is automatically inferred only if:
         
     | 
| 
       249 
320 
     | 
    
         | 
| 
       250 
     | 
    
         
            -
             
     | 
| 
       251 
     | 
    
         
            -
             
     | 
| 
      
 321 
     | 
    
         
            +
            - the class name has a form of `<Module>::Config` (`SomeModule::Config => "some_module"`)
         
     | 
| 
      
 322 
     | 
    
         
            +
            - the class name has a form of `<Something>Config` (`SomeConfig => "some"`)
         
     | 
| 
       252 
323 
     | 
    
         | 
| 
       253 
     | 
    
         
            -
             
     | 
| 
       254 
     | 
    
         
            -
             
     | 
| 
       255 
     | 
    
         
            -
              Noticeable features:
         
     | 
| 
       256 
     | 
    
         
            -
              - if `config_name` is explicitly defined on class, it's inherited by subclasses:
         
     | 
| 
       257 
     | 
    
         
            -
             
     | 
| 
       258 
     | 
    
         
            -
              ```ruby
         
     | 
| 
       259 
     | 
    
         
            -
              class MyAppBaseConfig < Anyway::Config
         
     | 
| 
       260 
     | 
    
         
            -
                config_name :my_app
         
     | 
| 
       261 
     | 
    
         
            -
              end
         
     | 
| 
       262 
     | 
    
         
            -
             
     | 
| 
       263 
     | 
    
         
            -
              class MyServiceConfig < MyAppBaseConfig
         
     | 
| 
       264 
     | 
    
         
            -
              end
         
     | 
| 
      
 324 
     | 
    
         
            +
            - Fix config classes inheritance. ([@palkan][])
         
     | 
| 
       265 
325 
     | 
    
         | 
| 
       266 
     | 
    
         
            -
             
     | 
| 
       267 
     | 
    
         
            -
             
     | 
| 
      
 326 
     | 
    
         
            +
            Previously, inheritance didn't work due to the lack of proper handling of class-level
         
     | 
| 
      
 327 
     | 
    
         
            +
            configuration (naming, option parses settings, defaults).
         
     | 
| 
       268 
328 
     | 
    
         | 
| 
       269 
     | 
    
         
            -
             
     | 
| 
       270 
     | 
    
         
            -
              - option parse extension are not overriden, but added to the parent class extensions
         
     | 
| 
      
 329 
     | 
    
         
            +
            Now it's possible to extend config classes without breaking the original classes functionality.
         
     | 
| 
       271 
330 
     | 
    
         | 
| 
       272 
331 
     | 
    
         
             
            - **Require Ruby >= 2.5.0.**
         
     | 
| 
       273 
332 
     | 
    
         | 
| 
         @@ -287,26 +346,26 @@ 
     | 
|
| 
       287 
346 
     | 
    
         | 
| 
       288 
347 
     | 
    
         
             
            - Add OptionParse integration ([@jastkand][])
         
     | 
| 
       289 
348 
     | 
    
         | 
| 
       290 
     | 
    
         
            -
             
     | 
| 
      
 349 
     | 
    
         
            +
            See more [PR#18](https://github.com/palkan/anyway_config/pull/18).
         
     | 
| 
       291 
350 
     | 
    
         | 
| 
       292 
351 
     | 
    
         
             
            - Use underscored config name as an env prefix. ([@palkan][])
         
     | 
| 
       293 
352 
     | 
    
         | 
| 
       294 
     | 
    
         
            -
             
     | 
| 
      
 353 
     | 
    
         
            +
            For a config class:
         
     | 
| 
       295 
354 
     | 
    
         | 
| 
       296 
     | 
    
         
            -
             
     | 
| 
       297 
     | 
    
         
            -
             
     | 
| 
       298 
     | 
    
         
            -
             
     | 
| 
       299 
     | 
    
         
            -
             
     | 
| 
      
 355 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 356 
     | 
    
         
            +
            class MyApp < Anyway::Config
         
     | 
| 
      
 357 
     | 
    
         
            +
            end
         
     | 
| 
      
 358 
     | 
    
         
            +
            ```
         
     | 
| 
       300 
359 
     | 
    
         | 
| 
       301 
     | 
    
         
            -
             
     | 
| 
      
 360 
     | 
    
         
            +
            Before this change we use `MYAPP_` prefix, now it's `MY_APP_`.
         
     | 
| 
       302 
361 
     | 
    
         | 
| 
       303 
     | 
    
         
            -
             
     | 
| 
      
 362 
     | 
    
         
            +
            You can specify the prefix explicitly:
         
     | 
| 
       304 
363 
     | 
    
         | 
| 
       305 
     | 
    
         
            -
             
     | 
| 
       306 
     | 
    
         
            -
             
     | 
| 
       307 
     | 
    
         
            -
             
     | 
| 
       308 
     | 
    
         
            -
             
     | 
| 
       309 
     | 
    
         
            -
             
     | 
| 
      
 364 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 365 
     | 
    
         
            +
            class MyApp < Anyway::Config
         
     | 
| 
      
 366 
     | 
    
         
            +
              env_prefix "MYAPP_"
         
     | 
| 
      
 367 
     | 
    
         
            +
            end
         
     | 
| 
      
 368 
     | 
    
         
            +
            ```
         
     | 
| 
       310 
369 
     | 
    
         | 
| 
       311 
370 
     | 
    
         
             
            ## 1.3.0 (2018-06-15)
         
     | 
| 
       312 
371 
     | 
    
         | 
| 
         @@ -322,18 +381,18 @@ Now works on JRuby 9.1+. 
     | 
|
| 
       322 
381 
     | 
    
         | 
| 
       323 
382 
     | 
    
         
             
            - Allow to pass raw hash with explicit values to `Config.new`. ([@dsalahutdinov][])
         
     | 
| 
       324 
383 
     | 
    
         | 
| 
       325 
     | 
    
         
            -
             
     | 
| 
      
 384 
     | 
    
         
            +
            Example:
         
     | 
| 
       326 
385 
     | 
    
         | 
| 
       327 
     | 
    
         
            -
             
     | 
| 
       328 
     | 
    
         
            -
             
     | 
| 
       329 
     | 
    
         
            -
             
     | 
| 
       330 
     | 
    
         
            -
             
     | 
| 
       331 
     | 
    
         
            -
             
     | 
| 
       332 
     | 
    
         
            -
             
     | 
| 
       333 
     | 
    
         
            -
             
     | 
| 
       334 
     | 
    
         
            -
             
     | 
| 
      
 386 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 387 
     | 
    
         
            +
            Sniffer::Config.new(
         
     | 
| 
      
 388 
     | 
    
         
            +
              overrides: {
         
     | 
| 
      
 389 
     | 
    
         
            +
                enabled: true,
         
     | 
| 
      
 390 
     | 
    
         
            +
                storage: {capacity: 500}
         
     | 
| 
      
 391 
     | 
    
         
            +
              }
         
     | 
| 
      
 392 
     | 
    
         
            +
            )
         
     | 
| 
      
 393 
     | 
    
         
            +
            ```
         
     | 
| 
       335 
394 
     | 
    
         | 
| 
       336 
     | 
    
         
            -
             
     | 
| 
      
 395 
     | 
    
         
            +
            See more [PR#10](https://github.com/palkan/anyway_config/pull/10).
         
     | 
| 
       337 
396 
     | 
    
         | 
| 
       338 
397 
     | 
    
         
             
            ## 1.1.2 (2017-11-19)
         
     | 
| 
       339 
398 
     | 
    
         | 
| 
         @@ -347,7 +406,7 @@ Now works on JRuby 9.1+. 
     | 
|
| 
       347 
406 
     | 
    
         | 
| 
       348 
407 
     | 
    
         
             
            - Add `#to_h` method. ([@palkan][])
         
     | 
| 
       349 
408 
     | 
    
         | 
| 
       350 
     | 
    
         
            -
             
     | 
| 
      
 409 
     | 
    
         
            +
            See [#4](https://github.com/palkan/anyway_config/issues/4).
         
     | 
| 
       351 
410 
     | 
    
         | 
| 
       352 
411 
     | 
    
         
             
            - Make it possible to extend configuration parameters. ([@palkan][])
         
     | 
| 
       353 
412 
     | 
    
         | 
| 
         @@ -361,17 +420,18 @@ Now works on JRuby 9.1+. 
     | 
|
| 
       361 
420 
     | 
    
         | 
| 
       362 
421 
     | 
    
         
             
            - Drop `active_support` dependency. ([@palkan][])
         
     | 
| 
       363 
422 
     | 
    
         | 
| 
       364 
     | 
    
         
            -
             
     | 
| 
      
 423 
     | 
    
         
            +
            Use custom refinements instead of requiring `active_support`.
         
     | 
| 
       365 
424 
     | 
    
         | 
| 
       366 
     | 
    
         
            -
             
     | 
| 
      
 425 
     | 
    
         
            +
            No we're dependency-free!
         
     | 
| 
       367 
426 
     | 
    
         | 
| 
       368 
427 
     | 
    
         
             
            ## 0.1.0 (2015-01-20)
         
     | 
| 
       369 
428 
     | 
    
         | 
| 
       370 
     | 
    
         
            -
             
     | 
| 
      
 429 
     | 
    
         
            +
            - Initial version.
         
     | 
| 
       371 
430 
     | 
    
         | 
| 
       372 
431 
     | 
    
         
             
            [@palkan]: https://github.com/palkan
         
     | 
| 
       373 
432 
     | 
    
         
             
            [@onemanstartup]: https://github.com/onemanstartup
         
     | 
| 
       374 
433 
     | 
    
         
             
            [@dsalahutdinov]: https://github.com/dsalahutdinov
         
     | 
| 
       375 
434 
     | 
    
         
             
            [@charlie-wasp]: https://github.com/charlie-wasp
         
     | 
| 
       376 
435 
     | 
    
         
             
            [@jastkand]: https://github.com/jastkand
         
     | 
| 
       377 
     | 
    
         
            -
            [@ 
     | 
| 
      
 436 
     | 
    
         
            +
            [@envek]: https://github.com/Envek
         
     | 
| 
      
 437 
     | 
    
         
            +
            [@progapandist]: https://github.com/progapandist
         
     |