pifano_config 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 53b166a47b78898a520e8e9b6a146c3b1b748b650099dd4c4412308cdb87a8a5
4
- data.tar.gz: f3b9aa3ee6a13a52fdbaa3f3944b005e5a663bbb57f953d3ff49b5f361bbfb3a
3
+ metadata.gz: 8389a6716f4d2a09bf392dd77755023ae24b08785a132686d03dfd90c2ac339a
4
+ data.tar.gz: 6d165e8f16da592041d33877f8ea1dcd573f2a1cc427b64ed36bc80b6926d2c0
5
5
  SHA512:
6
- metadata.gz: d32163c5e1339d4892e2b8e449e68ba87040b5cafe165931696cf658cb5f38823fb7b85e13a09040a9ad333e393487913ed9d69a57afbe6eb7da48e434531125
7
- data.tar.gz: f7d5bc1bbdf572745c2a8a074a67e529e3aa2661b38b6ccac43dfb3016a9a243ba6b7adb53757b44516ff36bfc9a49f228db6bcb0ad395a79ece32ac7ee6cd8c
6
+ metadata.gz: d5fc333691f0ae8f8f5314f5255c0a9edc7539c6db8b7f56ed0f1d5b772d646af9e682b122a1091466121f5efa854532c9a3a8be4ea47d831dcc02e78dc269b0
7
+ data.tar.gz: b07a4508e21ac677c6f9cb102dd51993da118ead8199b66c509497cb2575acfdd803aca3f52466b31bfa58fe41d9e9cdea0bab65873a755b32d55a7ac08ecd93
data/changelog.md ADDED
@@ -0,0 +1,47 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.2.0] - 2024-01-22
11
+
12
+ ### Added
13
+
14
+ - Added simple getters for configuration values. Now you can get the value of a configuration key by calling `[]`. Ex.
15
+
16
+ ```rb
17
+ @config.evironment(:dev)[:option]
18
+
19
+ # => "value"
20
+ ```
21
+
22
+ - Added return values for `#environment` method. Now you can get the current values of the environment by calling `#environment` without any arguments. Ex.
23
+
24
+ ```rb
25
+ @config.environment(:dev)
26
+
27
+ # => { option1: "value1", option2: "value2" }
28
+ ```
29
+
30
+ ## Removed
31
+
32
+ - Remove `OptionBuilder` class. It was not needed.
33
+ - Remove `OptionFactory` class. It was not needed.
34
+
35
+ ## [0.1.0] - 2023-12-05
36
+
37
+ ### Added
38
+
39
+ - Initial release. Versioning will start at 0.1.0.
40
+
41
+ ### Changed
42
+
43
+ ### Removed
44
+
45
+ ### Fixed
46
+
47
+ ### Security
data/lib/pifano/config.rb CHANGED
@@ -1,31 +1,99 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'pifano/option_builder'
3
+ # Released under the MIT License.
4
+ # Copyright, 2023, by Aristóteles Coutinho.
4
5
 
5
6
  module Pifano
6
- class Config
7
- def initialize(builder: OptionBuilder.new)
8
- @builder = builder
9
- @options = {}
10
- end
11
-
12
- def on(env)
13
- yield @builder if block_given?
14
- @options[env] = @builder.build
15
- end
16
-
17
- def environment(env) = @options[env]
18
- end
19
-
20
- module Mixin
21
- def self.included(klass)
22
- klass.extend(ClassMethods)
23
- end
24
-
25
- module ClassMethods
26
- def config
27
- @config ||= Config.new
28
- end
29
- end
30
- end
7
+ # This class is used to set the options for a specific environment.
8
+ #
9
+ # @public Since `stable-v1`.
10
+ #
11
+ class Config
12
+ # @!attribute [r] options
13
+ # @returns [Hash] The options.
14
+ attr_reader :options
15
+
16
+ # @!attribute [r] env
17
+ # @returns [Symbol] The environment.
18
+ attr_reader :env
19
+
20
+ # Initialize the configuration.
21
+ #
22
+ def initialize
23
+ @options = {}
24
+ @env = nil
25
+ end
26
+
27
+ # Set the options for a specific environment.
28
+ #
29
+ # @parameter env [Symbol] The environment to set the options.
30
+ # @yields {...} When a block is given, the block is yielded with the option.
31
+ #
32
+ def on(env)
33
+ raise ArgumentError, 'Block is required.' unless block_given?
34
+
35
+ @env = env
36
+ yield self
37
+ @env = nil
38
+ end
39
+
40
+ # Get the options for a specific environment.
41
+ #
42
+ # @parameter env_name [Symbol] The environment to get the options.
43
+ # @yields {...} When a block is given, the block is yielded with the option.
44
+ #
45
+ # @returns [Hash] The options.
46
+ #
47
+ def environment(env_name)
48
+ return {} unless @options.key?(env_name)
49
+
50
+ @env = env_name
51
+ yield self if block_given?
52
+ @env = nil
53
+ @options[env_name]
54
+ end
55
+
56
+ # Set the option for a specific environment.
57
+ #
58
+ # @parameter key [Symbol] The option name.
59
+ # @parameter value [String] The option value.
60
+ #
61
+ # @returns [Nil] The option value.
62
+ #
63
+ def []=(key, value)
64
+ @options[@env] ||= {}
65
+ @options[@env][key] = value
66
+ end
67
+
68
+ # Get the option for a specific environment.
69
+
70
+ # @parameter env [Symbol] The environment to get the option.
71
+ # @parameter key [Symbol] The option name.
72
+ #
73
+ # @returns [String] The option value.
74
+ #
75
+ def [](env, key) = @options[env][key]
76
+ end
77
+
78
+ # This module is used to include the `config` method in the class.
79
+ #
80
+ # @public Since `stable-v1`.
81
+ #
82
+ module Mixin
83
+ def self.included(klass)
84
+ klass.extend(ClassMethods)
85
+ end
86
+
87
+ # Extend the class methods.
88
+ #
89
+ module ClassMethods
90
+ # Get the configuration.
91
+ #
92
+ # @returns [Config] The configuration.
93
+ #
94
+ def config
95
+ @config ||= Config.new
96
+ end
97
+ end
98
+ end
31
99
  end
@@ -1,5 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # Released under the MIT License.
4
+ # Copyright, 2023, by Aristóteles Coutinho.
5
+
3
6
  module PifanoConfig
4
- VERSION = '0.1.0'
7
+ VERSION = '0.2.0'
5
8
  end
data/lib/pifano_config.rb CHANGED
@@ -1,5 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # Released under the MIT License.
4
+ # Copyright, 2023, by Aristóteles Coutinho.
5
+
3
6
  require_relative 'pifano_config/version'
4
7
 
5
8
  require 'pifano/config'
data/license.md ADDED
@@ -0,0 +1,21 @@
1
+ # MIT License
2
+
3
+ Copyright, 2023, by Aristóteles Coutinho.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/readme.md ADDED
@@ -0,0 +1,31 @@
1
+ # Pifano::Config
2
+
3
+ This is a simple configurable gem that allows you to easily create a configuration file for your gem or application.
4
+
5
+ <p align="center">
6
+ <img src="pifano_config.jpeg" width="400" height="400" />
7
+ </p>
8
+
9
+ # Usage
10
+
11
+ Please see the [project documentation](https://aristotelesbr.github.io/pifano_config/index.html) for more details.
12
+
13
+ - [Getting Started](https://aristotelesbr.github.io/pifano_config/guides/getting-started/index.html) - This guide show you how to use the `pífano config`.
14
+
15
+ ## Contributing
16
+
17
+ We welcome contributions to this project.
18
+
19
+ 1. Fork it.
20
+ 2. Create your feature branch (`git checkout -b my-new-feature`).
21
+ 3. Commit your changes (`git commit -am 'Add some feature'`).
22
+ 4. Push to the branch (`git push origin my-new-feature`).
23
+ 5. Create new Pull Request.
24
+
25
+ ### Developer Certificate of Origin
26
+
27
+ This project uses the [Developer Certificate of Origin](https://developercertificate.org/). All contributors to this project must agree to this document to have their contributions accepted.
28
+
29
+ ### Contributor Covenant
30
+
31
+ This project is governed by the [Contributor Covenant](https://www.contributor-covenant.org/). All contributors and participants agree to abide by its terms.
metadata CHANGED
@@ -1,40 +1,36 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pifano_config
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aristóteles Coutinho
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2023-12-10 00:00:00.000000000 Z
11
+ date: 2024-01-22 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: |2
14
- Create simple configurations for your project by environment like playing a Pífano.
15
- The Pífano is a traditional musical instrument of the Brazilian Northeast, made of wood and leather. It is a kind of flute, with a sharp and piercing sound. It is used in the forró, a typical dance of the region.
13
+ description:
16
14
  email:
17
- - aristotelesbr@gmail.com
18
15
  executables: []
19
16
  extensions: []
20
17
  extra_rdoc_files: []
21
18
  files:
22
- - CHANGELOG.md
23
- - README.md
19
+ - changelog.md
24
20
  - lib/pifano/config.rb
25
- - lib/pifano/option_builder.rb
26
- - lib/pifano/option_factory.rb
27
21
  - lib/pifano_config.rb
28
22
  - lib/pifano_config/version.rb
23
+ - license.md
24
+ - readme.md
29
25
  homepage: https://rubygems.org/gems/pifano_config
30
26
  licenses:
31
27
  - MIT
32
28
  metadata:
33
29
  allowed_push_host: https://rubygems.org/gems/pifano_config
34
- homepage_uri: https://rubygems.org/gems/pifano_config
35
- source_code_uri: https://github.com/aristotelesbr/pifano_config
36
30
  changelog_uri: https://github.com/aristotelesbr/pifano_config/blob/master/CHANGELOG.md
31
+ homepage_uri: https://rubygems.org/gems/pifano_config
37
32
  rubygems_mfa_required: 'true'
33
+ source_code_uri: https://github.com/aristotelesbr/pifano_config
38
34
  post_install_message:
39
35
  rdoc_options: []
40
36
  require_paths:
@@ -43,14 +39,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
43
39
  requirements:
44
40
  - - ">="
45
41
  - !ruby/object:Gem::Version
46
- version: 2.6.0
42
+ version: '3.0'
47
43
  required_rubygems_version: !ruby/object:Gem::Requirement
48
44
  requirements:
49
45
  - - ">="
50
46
  - !ruby/object:Gem::Version
51
47
  version: '0'
52
48
  requirements: []
53
- rubygems_version: 3.4.22
49
+ rubygems_version: 3.5.3
54
50
  signing_key:
55
51
  specification_version: 4
56
52
  summary: Simple configuration for your project by enviroment.
data/CHANGELOG.md DELETED
@@ -1,22 +0,0 @@
1
- # Changelog
2
-
3
- All notable changes to this project will be documented in this file.
4
-
5
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
-
8
- ## [Unreleased]
9
-
10
- ## [0.1.0] - 2023-12-05
11
-
12
- ### Added
13
-
14
- - Initial release. Versioning will start at 0.1.0.
15
-
16
- ### Changed
17
-
18
- ### Removed
19
-
20
- ### Fixed
21
-
22
- ### Security
data/README.md DELETED
@@ -1,92 +0,0 @@
1
- # PifanoConfig
2
-
3
- This is a simple configurable gem that allows you to easily create a configuration file for your gem or application.
4
-
5
- ## Installation
6
-
7
- Add this line to your application's `Gemfile`:
8
-
9
- gem 'pifano_config'
10
-
11
- And then execute:
12
-
13
- $ bundle
14
-
15
- Or install it yourself as:
16
-
17
- $ gem install pifano_config
18
-
19
- ## Usage
20
-
21
- ### Creating a configuration file
22
-
23
- To create a configuration file, you need to create a class and include the `PifanoConfig::Mixin` module.
24
-
25
- ~~~ruby
26
-
27
- class MyAppConfig
28
- include Pifano::Mixin
29
-
30
- # Define your configuration options here
31
- config.on(:development) do |config|
32
- # Define your configuration options for the development environment here
33
- config[:my_option] = 'pifano dev'
34
-
35
- # You can also define nested configurations
36
- config[:database] = {
37
- adapter: 'sqlite3',
38
- database: 'db/development.sqlite3'
39
- }
40
- end
41
-
42
- config.on(:production) do |config|
43
- # Define your configuration options for the production environment here
44
- config[:my_option] = 'pifano prod'
45
-
46
- # You can also define nested configurations
47
- config[:database] = {
48
- adapter: 'postgresql',
49
- host: 'localhost',
50
- database: 'my_app_production',
51
- username: 'my_app',
52
- }
53
- end
54
- end
55
- ~~~
56
-
57
- ### Using a configuration file
58
-
59
- After creating your configuration class, you can use it to access your configuration options.
60
-
61
- ~~~ruby
62
- # app/models/my_model.rb
63
-
64
- class MyModel
65
- def self.adapter
66
- MyAppConfig.config.environment(APP_ENV).database[:adapter]
67
- end
68
- end
69
-
70
- MyModel.adapter
71
- # => 'sqlite3' or 'postgresql' depends on the APP_ENV value
72
- ~~~
73
-
74
- ### Setting the environment
75
-
76
- You can set the environment using the `APP_ENV` environment variable.
77
-
78
- ~~~bash
79
-
80
- $ APP_ENV=development irb
81
-
82
- irb(main):001:0> MyApp.config.environment(APP_ENV).my_option
83
- => 'pifano dev'
84
-
85
- irb(main):002:0> MyApp.config.environment(APP_ENV).database[:adapter]
86
-
87
- => 'sqlite3'
88
- ~~~
89
-
90
- ## Contributing
91
-
92
- Bug reports and pull requests are welcome on GitHub at https://github.com/aristotelesbr/pifano_config.
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'pifano/option_factory'
4
-
5
- module Pifano
6
- class OptionBuilder
7
- attr_reader :config_hash
8
-
9
- def initialize = @config_hash = {}
10
-
11
- def []=(key, value)
12
- @config_hash[key] = value
13
- end
14
-
15
- def build = OptionFactory.build(@config_hash)
16
- end
17
- end
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'thread'
4
-
5
- module Pifano
6
- module OptionFactory
7
- @struct_cache = {}
8
- @mutex = ::Mutex.new
9
-
10
- def self.build(hash)
11
- return unless hash.is_a?(::Hash)
12
-
13
- struct_key = hash.keys.sort.join('_').to_sym
14
- struct = get_or_create_struct(struct_key, hash.keys)
15
-
16
- struct.new(hash)
17
- end
18
-
19
- def self.get_or_create_struct(struct_key, keys)
20
- @mutex.synchronize do
21
- @struct_cache[struct_key] ||= create_struct(keys)
22
- end
23
- end
24
- private_class_method :get_or_create_struct
25
-
26
- def self.create_struct(keys)
27
- Struct.new(*keys, keyword_init: true) do
28
- def initialize(hash)
29
- hash.each do |k, v|
30
- self[k] = v.is_a?(::Hash) ? OptionFactory.build(v) : v
31
- end
32
- freeze
33
- end
34
- end
35
- end
36
- private_class_method :create_struct
37
- end
38
- end