biran 0.1.13.1 → 0.1.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ec150cd74d08598ecb7d3bfb1324bf57c15e20806c0143b042b257569f430bf6
4
- data.tar.gz: 7863cf3face519ede43bb1ca24f569112ad83fe8e686c467141c81a13a0b981d
3
+ metadata.gz: 724bb696cb3fefd277f0d8c892eab6a3bb247fe2cf8015fc721c9d79f5c3fc78
4
+ data.tar.gz: 00af99015b69fa0d49f5ebd4f67fa237729416a1ae9aacbf81bb0bd1aab54482
5
5
  SHA512:
6
- metadata.gz: 5464720ba0f9989e9941b77ca1fd54a17388eedd3d044e180689ce58fb7a1da87252e0ccfa09fab514410077ffe18b0a7fbbb52a56a35fce0ebc8ed6b5fb4964
7
- data.tar.gz: 1edb42ac1ebc49f45d6c60e312a4bd089495fdc11c2c96be0f1f2328f4a8d6bbdb5d14b11dbfe16fae34b8c1ab086b6ee48c82bfe4d0c3d0e8a0400e73a4b907
6
+ metadata.gz: 4613fff5623383163a13cb4592c4b869efbdd0ac08b81494f0e6db4e80ef8356d44ff538dcd03b09df873bff1484010fbd093f045f436d4c19d9e6ec6e4806eb
7
+ data.tar.gz: 45744b7d551dbd3f3df0d841fc9fcf8de8cda94fdafae3c20a05545e3b708acde2cb9378fbf69dc39ad149dcc2369c174e53834947c7c55088cec4d9f6a75f17
@@ -5,9 +5,22 @@ defaults: &defaults
5
5
  files_to_generate:
6
6
  my_config:
7
7
  extension: '.yml'
8
+ my_first_value: 1
9
+ my_second_value: 2
10
+ nested_values: &nested_defaults
11
+ my_third_value: 3
12
+ my_fourth_value: 4
8
13
 
9
14
  test:
10
15
  <<: *defaults
16
+ my_first_value: 11
17
+ nested_values:
18
+ <<: *nested_defaults
19
+ my_third_value: 13
11
20
 
12
21
  development:
13
22
  <<: *defaults
23
+ my_first_value: 11
24
+ nested_values:
25
+ <<: *nested_defaults
26
+ my_third_value: 13
@@ -87,7 +87,7 @@ module Biran
87
87
  def process_config_file(config_file)
88
88
  config_file_contents = File.read(config_file)
89
89
  config_file_contents = ERB.new(config_file_contents).result
90
- config_file_contents = YAML.safe_load(config_file_contents, [], [], true)
90
+ config_file_contents = yaml_load(config_file_contents)
91
91
  config_file_contents[env].deep_symbolize_keys!
92
92
  rescue Errno::ENOENT
93
93
  raise "Missing config file: #{config_file}"
@@ -122,6 +122,12 @@ module Biran
122
122
  end
123
123
  end
124
124
 
125
+ def yaml_load data_content
126
+ # Ruby 3.1 with Psych 4 allows yaml-aliases only in direct manner
127
+ return YAML.safe_load(data_content, [], [], true) if defined?(Psych::VERSION) && Gem::Version.new(Psych::VERSION) < Gem::Version.new('4.0')
128
+ YAML.safe_load(data_content, aliases: true)
129
+ end
130
+
125
131
  def filtered_config
126
132
  @filtered_config ||= config.except(*configuration.app_setup_blocks)
127
133
  end
@@ -0,0 +1,155 @@
1
+ require 'biran/hash_refinement'
2
+
3
+ module Biran
4
+ class Configurinator
5
+ include ConfigDefaults
6
+ using HashRefinement
7
+
8
+ DEFAULT_ENV = 'development'
9
+
10
+ attr_reader :config, :db_config, :env
11
+
12
+ class << self
13
+ attr_accessor :config
14
+
15
+ def configure
16
+ self.config ||= Config.instance
17
+ yield config
18
+ end
19
+ end
20
+
21
+ def initialize(env: nil)
22
+ @env = env || app_env
23
+ @config = build_app_config
24
+ end
25
+
26
+ def file_tasks
27
+ files_to_generate.keys
28
+ end
29
+
30
+ def files_to_generate
31
+ @files_to_generate ||= config.fetch(:app, {})
32
+ .fetch(:files_to_generate, configuration.files_to_generate)
33
+ .tap { |files_list| files_list.each(&sanitize_config_files(files_list)) }
34
+ end
35
+
36
+ def create(name:, extension:, output_dir: nil, output_name: nil)
37
+ output_dir ||= config_dir
38
+ output_name ||= name
39
+ generated_file = ERBConfig.new(filtered_config, name, extension, config_dir, output_dir, output_name)
40
+ generated_file.bindings = bindings
41
+ generated_file.save!
42
+ end
43
+
44
+ private
45
+
46
+ def build_app_config
47
+ raise 'Environment not set to build the application config' unless @env
48
+ app_config = {
49
+ app_root_dir: app_root,
50
+ app_shared_dir: app_shared_dir,
51
+ app_base_dir: app_base,
52
+ env: env,
53
+ local_config_file: local_config_file,
54
+ secrets_file_path: secrets_file,
55
+ vhost: config_vhost_dirs
56
+ }
57
+
58
+ app_config.deep_merge! app_config_defaults
59
+ app_config[:secrets].deep_merge! get_secret_contents(app_config)
60
+ app_config[:db_config] = build_db_config
61
+
62
+ app_config.deep_merge! local_config_file_contents
63
+
64
+ puts "app config final is #{app_config.inspect}"
65
+ app_config
66
+ end
67
+
68
+ def build_db_config
69
+ default_db_config = base_db_config
70
+ return default_db_config unless File.exist? db_config_override_file
71
+ default_db_config.deep_merge! process_config_file(db_config_override_file)
72
+ end
73
+
74
+ def base_db_config
75
+ return @base_db_config if @base_db_config
76
+ return @base_db_config = {} unless File.exists? default_db_config_file
77
+ @base_db_config ||= process_config_file(default_db_config_file)
78
+ end
79
+
80
+ def app_config_defaults
81
+ return @app_config_defaults if @app_config_defaults
82
+ app_config_file = File.join(configuration.config_dirname, configuration.config_filename)
83
+ app_defaults = app_defaults_init.dup
84
+ config_properties = process_config_file(app_config_file)
85
+ @app_config_defaults = app_defaults.deep_merge! config_properties
86
+ end
87
+
88
+ def process_config_file(config_file)
89
+ config_file_contents = File.read(config_file)
90
+ config_file_contents = ERB.new(config_file_contents).result
91
+ config_file_contents = YAML.safe_load(config_file_contents, [], [], true)
92
+ #puts "Config file contents after yaml load before env grab #{config_file_contents.inspect}"
93
+ config_file_contents_for_test = config_file_contents['test']
94
+ config_file_contents_for_env = config_file_contents[env]
95
+ puts "Config file contents for test:"
96
+ puts config_file_contents_for_test.to_yaml
97
+ puts
98
+ puts "Config file contents for #{env}:"
99
+ puts config_file_contents_for_env.to_yaml
100
+ puts
101
+ config_file_diff = config_file_contents_for_test.deep_diff(config_file_contents_for_env)
102
+ puts "diff hash is:"
103
+ puts config_file_diff.to_yaml
104
+ puts
105
+ config_file_diff_r = config_file_contents_for_env.deep_diff(config_file_contents_for_test)
106
+ puts "diff hash reversed is:"
107
+ puts config_file_diff_r.to_yaml
108
+ puts
109
+
110
+ config_file_contents_for_env.deep_symbolize_keys!
111
+ rescue Errno::ENOENT
112
+ raise "Missing config file: #{config_file}"
113
+ end
114
+
115
+ def config_vhost_dirs
116
+ {
117
+ public_dir: File.join(app_root, vhost_public_dirname),
118
+ shared_dir: app_shared_dir.to_s,
119
+ log_dir: File.join(app_root, 'log'),
120
+ pids_dir: File.join(app_root, 'tmp', 'pids')
121
+ }
122
+ end
123
+
124
+ def local_config_file_contents
125
+ return @local_config_contents if @local_config_contents
126
+ return @local_config_conents = {} unless File.exists? local_config_file
127
+ @local_config_contents = process_config_file(local_config_file)
128
+ end
129
+
130
+ def get_secret_contents(app_config)
131
+ secrets_file_contents = {}
132
+ if File.exist? app_config[:secrets_file_path]
133
+ secrets_file_contents = process_config_file app_config[:secrets_file_path]
134
+ end
135
+ secrets_file_contents
136
+ end
137
+
138
+ def sanitize_config_files files_list
139
+ lambda do |file, _|
140
+ files_list[file] ||= {extension: ''}
141
+ ext = files_list[file].fetch(:extension, '').strip
142
+ ext.prepend('.') unless ext.start_with?('.') || ext.empty?
143
+ files_list[file][:extension] = ext
144
+ end
145
+ end
146
+
147
+ def filtered_config
148
+ @filtered_config ||= config.except(*configuration.app_setup_blocks)
149
+ end
150
+
151
+ def use_capistrano?
152
+ app_config_defaults[:app][:use_capistrano]
153
+ end
154
+ end
155
+ end
@@ -0,0 +1,19 @@
1
+ module HashRefinement
2
+
3
+ refine Hash do
4
+ def deep_diff(b)
5
+ a = self
6
+ (a.keys | b.keys).inject({}) do |diff, k|
7
+ if a[k] != b[k]
8
+ if a[k].respond_to?(:deep_diff) && b[k].respond_to?(:deep_diff)
9
+ diff[k] = a[k].deep_diff(b[k])
10
+ else
11
+ #diff[k] = b[k] || a[k]
12
+ diff[k] = b.keys.exclude?(k) ? a[k] : b[k]
13
+ end
14
+ end
15
+ diff
16
+ end
17
+ end
18
+ end
19
+ end
data/lib/biran/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Biran
2
- VERSION = '0.1.13.1'
2
+ VERSION = '0.1.14'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: biran
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.13.1
4
+ version: 0.1.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - javierg
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2021-03-18 00:00:00.000000000 Z
13
+ date: 2022-09-01 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: railties
@@ -133,15 +133,18 @@ files:
133
133
  - lib/biran/config.rb
134
134
  - lib/biran/config_defaults.rb
135
135
  - lib/biran/configurinator.rb
136
+ - lib/biran/configurinator.rb.test_changes
136
137
  - lib/biran/erb_config.rb
137
138
  - lib/biran/exceptions.rb
139
+ - lib/biran/hash_refinement.rb
138
140
  - lib/biran/railtie.rb
139
141
  - lib/biran/version.rb
140
142
  - lib/tasks/biran_tasks.rake
141
143
  homepage: https://github.com/amco/biran
142
144
  licenses:
143
145
  - MIT
144
- metadata: {}
146
+ metadata:
147
+ rubygems_mfa_required: 'true'
145
148
  post_install_message:
146
149
  rdoc_options: []
147
150
  require_paths: