biran 0.1.13.1 → 0.1.14

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: 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: