prick 0.41.0 → 0.42.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: 285b5f300185bd9b00e975ab4a4bdffc46a5db68606325b77dfa025ba2ce23d7
4
- data.tar.gz: 0b569c4d26020f1d29be322ff94a2f80ae2461dc4422a989850415a04166d614
3
+ metadata.gz: b81d387c058ac6fc795be670066afa602c818d70668ad6fcb34e5fccab9860dd
4
+ data.tar.gz: 2d49b6f26b4b3a38a5d5969f97b545014257a16c3844100561ca3d96404eaa3f
5
5
  SHA512:
6
- metadata.gz: '02196f54ea306130af2dc43337e4cb2408a7ce2872df6e0aa355cfb141a5067e5d0fb71f4e9650882be086c856c28ed1438704343f8177225cea676f6705d072'
7
- data.tar.gz: 4f6288490ad69c85e5638c0b22dd973673b27ec204b6366efbdd00bb4228f7d1e2a3c8d741bedb2f07df6b723b57901c2a5e24168d9195490ad04f3ba2527c8c
6
+ metadata.gz: 1edeeee6725fb7f8c2826a5e8cdb5a574c64689200ae7b19f7b6e466b201823eb6a76d119787484eff9d5080eeafe0b64015502fe19d88c26bd5a867cb40f209
7
+ data.tar.gz: 4bc01bb60d5a034457a40a766534c11755bb4471c315113125d119c2819184e762be82eb63b14a92a423fa8078a7bbbac552c7d4873cc49d09a59ed1ccb63bae
data/exe/prick CHANGED
@@ -273,47 +273,59 @@ def parse_database_args(state, args)
273
273
  [username, database, environment]
274
274
  end
275
275
 
276
+ require_relative '../lib/prick-command.rb'
277
+ include Prick
278
+
276
279
  begin
277
280
  # Parse command line
278
281
  opts, args = ShellOpts.process(SPEC, ARGV, exception: true)
279
282
 
283
+ # Expect a sub-command. TODO: Make this a built-in in ShellOpts#subcommand!
284
+ cmd = opts.subcommand! or Prick.error "Subcomand expected"
285
+
286
+ # Setup verbose and quiet
287
+ $verbose = opts.verbose?
288
+ $quiet = opts.quiet?
289
+
280
290
  # Honor -C option
281
291
  begin
282
- Dir.chdir(opts.directory) if opts.directory?
292
+ if opts.directory?
293
+ Dir.chdir(opts.directory)
294
+ end
283
295
  rescue Errno::ENOENT
284
296
  raise ShellOpts::Error, "Can't cd to '#{opts.directory}'"
285
297
  end
286
- rescue ShellOpts::Error => ex
287
- ShellOpts.error(ex.message)
288
- end
289
-
290
- # Require prick only after -C directory option because some constants depends
291
- # on the current directory
292
- require_relative '../lib/prick-command.rb'
293
- include Prick
294
-
295
- begin
296
- # Handle verbose and quiet
297
- $verbose = opts.verbose?
298
- $quiet = opts.quiet?
299
-
300
- # Expect a sub-command. TODO: Make this a built-in in ShellOpts#subcommand!
301
- cmd = opts.subcommand! or Prick.error "Subcomand expected"
302
-
303
- # Handle -p, -e, and -c. TODO: Take -C into account for relative paths. Low-hanging fruit
304
- project_file = opts.project_file || PRICK_PROJECT_PATH
305
- environment_file = opts.environment_file || PRICK_ENVIRONMENT_PATH
306
- reflections_file = opts.reflections_file || REFLECTIONS_PATH
307
- state_file = opts.state_file || PRICK_STATE_PATH
308
- fox_state_file = opts.fox_state_file || FOX_STATE_PATH
309
298
 
310
299
  # Process init command and exit
311
300
  if opts.subcommand == :init!
312
- dir, name = Prick::SubCommand.init(project_file, args.expect(0..1), cmd.name, cmd.title)
301
+ # Set project directory before loading constants.rb to prevent it from
302
+ # searching in vain for the yet-to-be-created project directory
303
+ Prick.const_set("PRICK_DIR", args.expect(0..1) || ".")
304
+
305
+ # Load remaining constants that may depend on PRICK_DIR
306
+ require_relative '../lib/prick/constants.rb'
307
+
308
+ # Initialize project
309
+ dir, name = Prick::SubCommand.init(PRICK_PROJECT_FILE, PRICK_DIR, cmd.name, cmd.title)
313
310
  Prick.mesg "Initialized Prick project '#{name}' in #{File.absolute_path(dir)}/"
311
+
312
+ # Exit
314
313
  exit
315
314
  end
316
315
 
316
+ # Find project directory and initialize constants
317
+ require_relative '../lib/prick/constants.rb'
318
+
319
+ # Switch to project directory
320
+ Dir.chdir PRICK_DIR
321
+
322
+ # Handle -p, -e, and -c. TODO: Take -C into account for relative paths. Low-hanging fruit
323
+ project_path = opts.project_file || PRICK_PROJECT_PATH
324
+ environment_path = opts.environment_file || PRICK_ENVIRONMENT_PATH
325
+ reflections_path = opts.reflections_file || REFLECTIONS_PATH
326
+ state_path = opts.state_file || PRICK_STATE_PATH
327
+ fox_state_path = opts.fox_state_file || FOX_STATE_PATH
328
+
317
329
  # Check for prick project
318
330
  if ![:teardown!, :clean!].include?(opts.subcommand) || args.size == 0
319
331
  # We test for the presense of the schema directory to verify we're in a
@@ -321,11 +333,11 @@ begin
321
333
  # they can be placed elsewhere. TODO: This require us to check for project file manually
322
334
  # File.directory? "schema" or Prick.error "Not in a prick project directory"
323
335
  File.directory?(SCHEMA_DIR) or Prick.error "Not in a prick project directory"
324
- File.exist?(project_file) or Prick.error "Can't find project file '#{project_file}'"
336
+ File.exist?(project_path) or Prick.error "Can't find project file '#{project_path}'"
325
337
  end
326
338
 
327
339
  # Load state
328
- state = Prick.state = State.new(project_file, environment_file, reflections_file, state_file, fox_state_file)
340
+ state = Prick.state = State.new(project_path, environment_path, reflections_file, state_path, fox_state_path)
329
341
 
330
342
  # Lazyness
331
343
  database = state.database
@@ -338,7 +350,7 @@ begin
338
350
 
339
351
  when :setup!
340
352
  clean_pg_meta_cache
341
- state.project_loaded? or Prick.error "No #{project_file} found"
353
+ state.project_loaded? or Prick.error "No #{project_path} found"
342
354
  username, database, environment = parse_database_args(state, args)
343
355
  require_db(database, exist: false)
344
356
  Prick::SubCommand.setup(database, username, environment)
@@ -10,7 +10,7 @@ module Prick
10
10
  SHARE_PATH = "#{File.dirname(File.dirname(__dir__))}/lib/prick/share"
11
11
  LIBEXEC_PATH = "#{File.dirname(File.dirname(__dir__))}/lib/prick/libexec"
12
12
 
13
- # Project directories
13
+ # Project directories (relative to PRICK_DIR)
14
14
  DIRS = [
15
15
  MIGRATION_DIR = "migration",
16
16
  SCHEMA_DIR = "schema",
@@ -26,33 +26,48 @@ module Prick
26
26
  SPEC_DIR = "spec"
27
27
  ]
28
28
 
29
- # Prick project root directory
30
- PRICK_DIR = Dir.getwd
31
-
32
29
  # Search path for executables
33
30
  # PRICK_PATH = "#{ENV['PATH']}:#{PRICK_DIR}/#{BIN_DIR}:#{PRICK_DIR}/#{LIBEXEC_DIR}"
34
31
 
35
- # Project file
32
+ # Project filename
36
33
  PRICK_PROJECT_FILE = "prick.yml"
37
- PRICK_PROJECT_PATH = PRICK_PROJECT_FILE
34
+
35
+ # Project root directory. nil when running rspec
36
+ if !defined?(PRICK_DIR)
37
+ PRICK_DIR = begin
38
+ dir = Dir.getwd
39
+ while dir != "/" && !File.exist?("#{dir}/prick.yml")
40
+ dir = File.dirname(dir)
41
+ end
42
+ if dir == "/"
43
+ defined?(RSpec) or raise ArgumentError, "Can't find prick project directory"
44
+ dir = ""
45
+ end
46
+ dir
47
+ end
48
+ end
49
+
50
+ # Project file path
51
+ PRICK_PROJECT_PATH = File.join(PRICK_DIR, PRICK_PROJECT_FILE)
38
52
 
39
53
  # Environment file
40
54
  PRICK_ENVIRONMENT_FILE = "prick.environment.yml"
41
- PRICK_ENVIRONMENT_PATH = PRICK_ENVIRONMENT_FILE
55
+ PRICK_ENVIRONMENT_PATH = File.join(PRICK_DIR, PRICK_ENVIRONMENT_FILE)
56
+
42
57
 
43
58
  # TODO: Move to var/cache
44
59
 
45
60
  # State file
46
61
  PRICK_STATE_FILE = ".prick.state.yml"
47
- PRICK_STATE_PATH = PRICK_STATE_FILE
62
+ PRICK_STATE_PATH = File.join(PRICK_DIR, PRICK_STATE_FILE)
48
63
 
49
64
  # Fox state file (contains anchors and table sizes)
50
65
  FOX_STATE_FILE = ".fox-state.yml"
51
- FOX_STATE_PATH = FOX_STATE_FILE
66
+ FOX_STATE_PATH = File.join(PRICK_DIR, FOX_STATE_FILE)
52
67
 
53
68
  # PgMeta snapshot. Is deleted at the start of each build
54
69
  PG_META_STATE_FILE = ".pg_meta-state.yml"
55
- PG_META_STATE_PATH = PG_META_STATE_FILE
70
+ PG_META_STATE_PATH = File.join(PRICK_DIR, PG_META_STATE_FILE)
56
71
 
57
72
  # Reflections file
58
73
  REFLECTIONS_FILE = "reflections.yml"
@@ -66,7 +81,6 @@ module Prick
66
81
  SPEC_TMP_DIR = "spec"
67
82
  SPEC_TMP_PATH = File.join(TMP_DIR, SPEC_TMP_DIR)
68
83
 
69
-
70
84
  # Migration diff files
71
85
  DIFF_FILE = "diff.sql"
72
86
  DIFF_FILES = [
@@ -82,7 +96,7 @@ module Prick
82
96
 
83
97
  # The project state file
84
98
  PROJECT_STATE_FILE = ".prick-project"
85
- PROJECT_STATE_PATH = PROJECT_STATE_FILE
99
+ PROJECT_STATE_PATH = File.join(PRICK_DIR, PROJECT_STATE_FILE)
86
100
 
87
101
  # The the .prick-migration file
88
102
  PRICK_MIGRATION_FILE = ".prick-migration"
data/lib/prick/state.rb CHANGED
@@ -1,5 +1,6 @@
1
1
 
2
2
  require 'yaml'
3
+ require_relative './prick_version.rb'
3
4
 
4
5
  module Prick
5
6
  # There is only one State object: Prick.state
@@ -317,10 +318,8 @@ module Prick
317
318
  }
318
319
  end
319
320
 
320
- private
321
- # YAML helper methods
322
-
323
- def read_yaml(file)
321
+ # To give lib/prick.rb access
322
+ def self.read_yaml(file)
324
323
  begin
325
324
  YAML.load File.read(file).sub(/^__END__\n.*/m, "")
326
325
  rescue Errno::ENOENT
@@ -328,7 +327,8 @@ module Prick
328
327
  end
329
328
  end
330
329
 
331
- def load_yaml(file, mandatory_keys, optional_keys = [])
330
+ # To give lib/prick.rb access
331
+ def self.load_yaml(file, mandatory_keys, optional_keys = [])
332
332
  mandatory_keys = mandatory_keys.map(&:to_s)
333
333
  optional_keys = optional_keys.map(&:to_s)
334
334
  hash = read_yaml(file) or Prick.error "Not a valid YAML file - #{file}"
@@ -340,6 +340,15 @@ module Prick
340
340
  hash
341
341
  end
342
342
 
343
+ private
344
+ # YAML helper methods
345
+
346
+ def read_yaml(file) self.class.read_yaml(file) end
347
+
348
+ def load_yaml(file, mandatory_keys, optional_keys = [])
349
+ self.class.load_yaml(file, mandatory_keys, optional_keys)
350
+ end
351
+
343
352
  def save_yaml(file, hash)
344
353
  self.class.save_yaml(file, hash)
345
354
  end
@@ -1,6 +1,7 @@
1
1
  require 'fileutils'
2
2
 
3
3
  module Prick::SubCommand
4
+ # FIXME: Ignores -p, -e, -s, -f options
4
5
  def self.init(project_file, dir, name, title) # dir, name, and title can be nil
5
6
  cwd = Dir.getwd
6
7
  if dir
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.41.0"
4
+ VERSION = "0.42.0"
5
5
  end
data/lib/prick-command.rb CHANGED
@@ -18,7 +18,6 @@ module Prick
18
18
  class Failure < RuntimeError; end
19
19
  end
20
20
 
21
- require_relative 'prick/constants.rb'
22
21
  require_relative 'prick/ext/expand_variables.rb'
23
22
 
24
23
  require_relative 'prick/local/command.rb'
data/lib/prick.rb CHANGED
@@ -1,17 +1,11 @@
1
1
 
2
2
  require 'pg_conn'
3
+ require 'yaml'
3
4
 
4
- # Find project root dir and set load path to include ./lib
5
- dir = Dir.getwd
6
- while dir != "/" && !File.exist?("#{dir}/prick.yml")
7
- dir = File.dirname(dir)
8
- end
5
+ require_relative 'prick/constants.rb'
6
+ require_relative 'prick/state.rb'
9
7
 
10
- if dir == "/"
11
- defined?(RSpec) or raise ArgumentError, "Can't find prick project directory"
12
- else
13
- $LOAD_PATH.unshift("#{dir}/lib")
14
- end
8
+ $LOAD_PATH.unshift(File.join Prick::PRICK_DIR, "lib")
15
9
 
16
10
  # Create a new database connection or an existing connection. The connection
17
11
  # exists when the script is run by prick as a subprocess using fork
@@ -19,9 +13,14 @@ module Prick
19
13
  def self.conn(database, username = nil)
20
14
  if self.respond_to?(:owner_conn)
21
15
  self.owner_conn
22
- else
23
- !database.nil? or raise ArgumentError, "No database given"
16
+ elsif database
24
17
  PgConn.new(database, username || database)
18
+ elsif File.exist?(Prick::PRICK_STATE_PATH)
19
+ hash = State.load_yaml(Prick::PRICK_STATE_PATH, %w(database username), %w(environment))
20
+ PgConn.new(hash["database"], hash["username"])
21
+ else
22
+ raise ArgumentError, "No database given"
25
23
  end
26
24
  end
27
25
  end
26
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prick
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.41.0
4
+ version: 0.42.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Claus Rasmussen