prick 0.27.1 → 0.28.0

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: fe266587f9311853dc79a6eee9ff2732ba265fd50ce1fb69fb0ba1d8f2018f5a
4
- data.tar.gz: f364180b63248c6b1cbc963cad889770538aabfbc5b0ec9d12aabe97e91fd1dc
3
+ metadata.gz: '022876c913aadf3a2b42646f514f51c2db481c32db42a5903f2dbce88303d423'
4
+ data.tar.gz: 1772f43a5a99fe93b97e748488f3c5bfa93fddce768176744ebb27e983cbb475
5
5
  SHA512:
6
- metadata.gz: 0ab04d20f8169352ac7c6e181b053c3e5271e60c5109af444fd8abb37ad3ce5d101e37f2c2ee06c801b0b7a18662fad65384b6434e592abefd18a1c48b7ee442
7
- data.tar.gz: f8108b5acec772b9ee63b7f8acc46aa9a1b54fea79766cd1c7ed449a8d069484d6ffd74296a6f90d2eac9dc368656d680bdf03e0ab9f140d336cac46ea104219
6
+ metadata.gz: d8c647cc168aee7f0aab47d39d6ce1050331a06b6aa7a04fc8173152618432c377eb7ce42784eb95d2a70134be10bddd0ff3a43298c2e20af8a3649dc8227451
7
+ data.tar.gz: 84068d08a68d2b1177054faa4d31218bf7bc66cf437bf255a6ff2404c0126e10288e58519e11fe7c80029c7169ff9e3a59be5327c39f8fd112bc0a846519d833
@@ -62,11 +62,11 @@ module Prick
62
62
  when "seed"; unit.seed_nodes
63
63
  else
64
64
  raise Error, "Illegal key in #{unit.path}: #{key}"
65
- end.concat(Array(value).map { |value| parse_entry(unit, key.to_sym, dir, value) })
65
+ end.concat(Array(value).map { |value| parse_entry(unit, key.to_sym, dir, value) }.compact)
66
66
  end
67
67
  }
68
68
  else
69
- node = parse_entry(unit, :decl, dir, entry)
69
+ node = parse_entry(unit, :decl, dir, entry) or next
70
70
  if node.kind == :fox
71
71
  unit.seed_nodes << node
72
72
  else
@@ -77,11 +77,11 @@ module Prick
77
77
  unit
78
78
  end
79
79
 
80
- # Expand $ENVIRONMENT variable. The function implements a hierarchy of
81
- # environments:
80
+ # Expand $ENVIRONMENT variable in file names. The function implements a
81
+ # hierarchy of environments:
82
82
  #
83
83
  # production
84
- # online
84
+ # (online)
85
85
  # development
86
86
  # online
87
87
  # offline
@@ -92,19 +92,26 @@ module Prick
92
92
  # If an environment doesn't exist in #dir, then the higher level
93
93
  # environments are tried in turn. Eg. if the current environment is
94
94
  # 'test', the algorithm expands '$ENVIRONMENT' to 'test', 'offline', and
95
- # 'development' until an existing file is found. If no file is found, the
96
- # algorithm returns the unexpanded value
95
+ # 'development' until an existing file is found. If no file is found the
96
+ # the unexpanded value is returned
97
+ #
98
+ # NOTE: This is a hardcoded feature for an internal project. It is
99
+ # configurable in the next major version
97
100
  #
98
- def expand_environment(dir, name)
99
- env = Prick.state.environment.to_s
100
- file = name
101
- if !File.exist?("#{dir}/#{file}") && name =~ /^(.*?)\$ENVIRONMENT/
101
+ def expand_filename(dir, filename)
102
+ if File.exist?("#{dir}/#{filename}")
103
+ return filename
104
+ elsif filename =~ /\$ENVIRONMENT|\$\{ENVIRONMENT\}/
105
+ env = Prick.state.environment.to_s
102
106
  while true
103
- file = expand_variables(name, ENVIRONMENT: env)
104
- break if File.exist? "#{dir}/#{file}"
107
+ file = expand_variables(filename, ENVIRONMENT: env, PWD: Dir.getwd)
108
+ return file if File.exist? "#{dir}/#{file}"
105
109
  case env
106
- when "production"; break
107
- when "development"; break
110
+ when "production"
111
+ file = expand_variables(filename, ENVIRONMENT: "online", PWD: Dir.getwd) or return nil
112
+ return file if File.exist? "#{dir}/#{file}"
113
+ return nil
114
+ when "development"; return nil
108
115
  when "online"; env = "development"
109
116
  when "offline"; env = "development"
110
117
  when "backend"; env = "offline"
@@ -114,43 +121,64 @@ module Prick
114
121
  raise Error, "Illegal env: '#{env}'"
115
122
  end
116
123
  end
124
+ else
125
+ return nil
117
126
  end
118
- return file
119
127
  end
120
128
 
121
- def parse_file_entry(dir, entry)
122
- name = expand_environment(dir, entry)
123
- name.sub!(/\/$/, "")
124
- if name =~ /^(\S+)\s+(.+)$/ # has arguments -> exe
125
- file = $1
126
- args = $2.split
129
+ # Expand $ENVIRONMENT variable
130
+ def expand_string(string)
131
+ expand_variables(string, ENVIRONMENT: Prick.state.environment.to_s, PWD: Dir.getwd)
132
+ end
133
+
134
+ def parse_file_entry(unit, dir, entry)
135
+ entry = entry.sub(/\/$/, "")
136
+ if entry =~ /^(\S+?)(\?)?(?:\s+(.+))?\s*$/
137
+ filename = $1
138
+ optional = !$2.nil?
139
+ args = expand_string($3 || '').split
140
+ file = expand_filename(dir, filename)
141
+ file || optional or raise Error, "Can't find #{filename} in #{dir} from #{unit}"
142
+ !file.nil? or return nil
127
143
  else
128
- file = name
144
+ raise Error, "Not a file name: '#{entry}'"
129
145
  end
130
146
  path = "#{dir}/#{file}"
131
- [path, name, file, args]
147
+ [path, entry, file, args].flatten
132
148
  end
133
149
 
150
+ # def parse_file_entry(dir, entry)
151
+ # name = expand_environment(dir, entry)
152
+ # name.sub!(/\/$/, "")
153
+ # if name =~ /^(\S+)\s+(.+)$/ # has arguments -> exe
154
+ # file = $1
155
+ # args = $2.split
156
+ # else
157
+ # file = name
158
+ # end
159
+ # path = "#{dir}/#{file}"
160
+ # [path, name, file, args]
161
+ # end
162
+
134
163
  def parse_entry(unit, phase, dir, entry)
135
164
  if entry.is_a?(Hash)
136
165
  entry.size == 1 or raise Error, "sql and module are single-line values"
137
166
  key, value = entry.first
138
167
  case key
139
168
  when "sql"
140
- InlineNode.new(unit, phase, unit.path, value)
141
- when "call"
142
- args = value.split(/\s+/)
143
- args.size >= 3 or raise "Illegal number of arguments: #{value}"
144
- file, klass, command, args = *args
169
+ InlineNode.new(unit, phase, unit.path, expand_string(value))
170
+ when "call"
171
+ (path, name, file, klass, command, args = parse_file_entry(unit, dir, value)) or return nil
172
+ klass && command or raise "Illegal number of arguments: #{value}"
145
173
  ModuleNode.new(unit, phase, "#{dir}/#{file}", klass, command, args)
146
174
  when "exec"
147
- path, name, file, args = parse_file_entry(dir, value)
175
+ (path, name, file, args = parse_file_entry(unit, dir, value)) or return nil
148
176
  ExeNode.new(unit, phase, path, args)
149
177
  else
150
178
  raise Error, "Illegal key: #{key}"
151
179
  end
152
180
  else
153
- path, name, file, args = parse_file_entry(dir, entry)
181
+ (path, name, file, args = parse_file_entry(unit, dir, entry)) or return nil
154
182
  if File.directory? path
155
183
  parse_directory(unit, path)
156
184
  elsif File.file? path
data/lib/prick/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Prick
4
- VERSION = "0.27.1"
4
+ VERSION = "0.28.0"
5
5
  end
@@ -6,13 +6,14 @@ module Prick::SubCommand
6
6
  def self.teardown(database, username)
7
7
  conn = PgConn.new "postgres" # Superuser connection
8
8
  if conn.rdbms.exist? database
9
- conn.rdbms.drop database
9
+ conn.rdbms.drop database, force: true
10
10
  end
11
11
  if conn.role.exist? username
12
12
  conn.role.drop username, cascade: true
13
13
  end
14
- builder = Prick::Build::Builder.new(conn, "schema")
14
+
15
15
  # TODO Run builder teardown scrips
16
+ # builder = Prick::Build::Builder.new(conn, "schema")
16
17
  end
17
18
  end
18
19
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prick
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.27.1
4
+ version: 0.28.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Claus Rasmussen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-12-21 00:00:00.000000000 Z
11
+ date: 2024-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: semantic
@@ -231,7 +231,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
231
231
  - !ruby/object:Gem::Version
232
232
  version: '0'
233
233
  requirements: []
234
- rubygems_version: 3.3.18
234
+ rubygems_version: 3.3.7
235
235
  signing_key:
236
236
  specification_version: 4
237
237
  summary: A release control and management system for postgresql