masamune 0.17.12 → 0.17.13
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +3 -3
- data/bin/masamune-aws-emr +1 -1
- data/bin/masamune-dump +1 -1
- data/bin/masamune-hive +1 -1
- data/bin/masamune-psql +1 -1
- data/bin/masamune-shell +1 -1
- data/lib/masamune.rb +1 -1
- data/lib/masamune/actions/aws_emr.rb +2 -2
- data/lib/masamune/actions/data_flow.rb +10 -10
- data/lib/masamune/actions/date_parse.rb +4 -6
- data/lib/masamune/actions/execute.rb +3 -3
- data/lib/masamune/actions/filesystem.rb +1 -1
- data/lib/masamune/actions/hadoop_filesystem.rb +2 -2
- data/lib/masamune/actions/hive.rb +5 -5
- data/lib/masamune/actions/invoke_parallel.rb +5 -5
- data/lib/masamune/actions/postgres.rb +6 -6
- data/lib/masamune/actions/postgres_admin.rb +1 -1
- data/lib/masamune/actions/s3cmd.rb +3 -3
- data/lib/masamune/actions/transform.rb +4 -4
- data/lib/masamune/after_initialize_callbacks.rb +4 -4
- data/lib/masamune/cached_filesystem.rb +7 -11
- data/lib/masamune/commands/aws_emr.rb +12 -12
- data/lib/masamune/commands/hadoop_filesystem.rb +8 -8
- data/lib/masamune/commands/hadoop_streaming.rb +16 -16
- data/lib/masamune/commands/hive.rb +31 -35
- data/lib/masamune/commands/postgres.rb +30 -32
- data/lib/masamune/commands/postgres_admin.rb +17 -16
- data/lib/masamune/commands/postgres_common.rb +1 -1
- data/lib/masamune/commands/retry_with_backoff.rb +19 -19
- data/lib/masamune/commands/s3cmd.rb +7 -7
- data/lib/masamune/commands/shell.rb +25 -38
- data/lib/masamune/configuration.rb +8 -9
- data/lib/masamune/data_plan/builder.rb +5 -5
- data/lib/masamune/data_plan/elem.rb +7 -7
- data/lib/masamune/data_plan/engine.rb +12 -15
- data/lib/masamune/data_plan/rule.rb +14 -12
- data/lib/masamune/data_plan/set.rb +13 -13
- data/lib/masamune/environment.rb +3 -3
- data/lib/masamune/filesystem.rb +29 -28
- data/lib/masamune/helpers/postgres.rb +8 -5
- data/lib/masamune/io.rb +2 -2
- data/lib/masamune/last_element.rb +3 -3
- data/lib/masamune/method_logger.rb +1 -1
- data/lib/masamune/schema/catalog.rb +9 -12
- data/lib/masamune/schema/column.rb +12 -10
- data/lib/masamune/schema/dimension.rb +5 -4
- data/lib/masamune/schema/fact.rb +2 -2
- data/lib/masamune/schema/map.rb +9 -13
- data/lib/masamune/schema/row.rb +3 -2
- data/lib/masamune/schema/store.rb +13 -14
- data/lib/masamune/schema/table.rb +24 -28
- data/lib/masamune/schema/table_reference.rb +7 -7
- data/lib/masamune/spec_helper.rb +1 -1
- data/lib/masamune/string_format.rb +1 -1
- data/lib/masamune/tasks/aws_emr_thor.rb +9 -9
- data/lib/masamune/tasks/dump_thor.rb +5 -5
- data/lib/masamune/tasks/hive_thor.rb +13 -13
- data/lib/masamune/tasks/postgres_thor.rb +8 -8
- data/lib/masamune/tasks/shell_thor.rb +3 -3
- data/lib/masamune/template.rb +4 -4
- data/lib/masamune/thor.rb +26 -25
- data/lib/masamune/transform/common/denormalize_table.rb +6 -6
- data/lib/masamune/transform/define_table.rb +1 -1
- data/lib/masamune/transform/hive/define_table.rb +0 -2
- data/lib/masamune/transform/insert_reference_values.rb +1 -1
- data/lib/masamune/transform/operator.rb +3 -2
- data/lib/masamune/transform/postgres/bulk_upsert.rb +0 -3
- data/lib/masamune/transform/postgres/deduplicate_dimension.rb +4 -6
- data/lib/masamune/transform/postgres/define_table.rb +2 -2
- data/lib/masamune/transform/postgres/insert_reference_values.rb +1 -4
- data/lib/masamune/transform/postgres/relabel_dimension.rb +1 -3
- data/lib/masamune/transform/postgres/rollup_fact.rb +3 -5
- data/lib/masamune/transform/postgres/snapshot_dimension.rb +1 -4
- data/lib/masamune/transform/postgres/stage_dimension.rb +8 -10
- data/lib/masamune/transform/postgres/stage_fact.rb +15 -14
- data/lib/masamune/version.rb +1 -1
- data/spec/masamune/actions/aws_emr_spec.rb +8 -8
- data/spec/masamune/actions/execute_spec.rb +6 -6
- data/spec/masamune/actions/hive_spec.rb +20 -15
- data/spec/masamune/actions/postgres_spec.rb +17 -10
- data/spec/masamune/after_initialization_callbacks_spec.rb +13 -7
- data/spec/masamune/commands/aws_emr_spec.rb +10 -10
- data/spec/masamune/commands/hadoop_filesystem_spec.rb +3 -3
- data/spec/masamune/commands/hadoop_streaming_spec.rb +4 -4
- data/spec/masamune/commands/hive_spec.rb +11 -11
- data/spec/masamune/commands/postgres_admin_spec.rb +9 -9
- data/spec/masamune/commands/postgres_spec.rb +15 -15
- data/spec/masamune/commands/retry_with_backoff_spec.rb +10 -7
- data/spec/masamune/commands/s3cmd_spec.rb +3 -3
- data/spec/masamune/commands/shell_spec.rb +16 -16
- data/spec/masamune/data_plan/builder_spec.rb +22 -19
- data/spec/masamune/data_plan/elem_spec.rb +20 -20
- data/spec/masamune/data_plan/engine_spec.rb +41 -33
- data/spec/masamune/data_plan/rule_spec.rb +19 -19
- data/spec/masamune/data_plan/set_spec.rb +8 -6
- data/spec/masamune/environment_spec.rb +5 -5
- data/spec/masamune/filesystem_spec.rb +87 -87
- data/spec/masamune/helpers/postgres_spec.rb +1 -1
- data/spec/masamune/rspec/job_fixture_spec.rb +0 -1
- data/spec/masamune/schema/catalog_spec.rb +16 -16
- data/spec/masamune/schema/column_spec.rb +19 -19
- data/spec/masamune/schema/dimension_spec.rb +2 -2
- data/spec/masamune/schema/fact_spec.rb +3 -3
- data/spec/masamune/schema/map_spec.rb +41 -41
- data/spec/masamune/schema/table_spec.rb +16 -16
- data/spec/masamune/string_format_spec.rb +7 -7
- data/spec/masamune/tasks/dump_thor_spec.rb +6 -6
- data/spec/masamune/tasks/hive_thor_spec.rb +2 -2
- data/spec/masamune/template_spec.rb +3 -2
- data/spec/masamune/thor_spec.rb +8 -8
- data/spec/masamune/transform/bulk_upsert.dimension_spec.rb +3 -3
- data/spec/masamune/transform/define_table.dimension_spec.rb +3 -3
- data/spec/masamune/transform/define_table.fact_spec.rb +5 -5
- data/spec/masamune/transform/define_table.table_spec.rb +6 -6
- data/spec/masamune/transform/denormalize_table_spec.rb +15 -15
- data/spec/masamune/transform/insert_reference_values.dimension_spec.rb +1 -1
- data/spec/masamune/transform/load_dimension_spec.rb +1 -1
- data/spec/masamune/transform/load_fact_spec.rb +1 -1
- data/spec/masamune/transform/rollup_fact_spec.rb +4 -4
- data/spec/masamune/transform/stage_dimension_spec.rb +3 -3
- data/spec/masamune/transform/stage_fact_spec.rb +4 -4
- data/spec/spec_helper.rb +1 -1
- data/spec/support/masamune/example_group.rb +2 -2
- data/spec/support/masamune/job_example_group.rb +3 -3
- data/spec/support/masamune/job_fixture.rb +4 -4
- data/spec/support/masamune/mock_command.rb +10 -10
- data/spec/support/masamune/mock_delegate.rb +2 -2
- data/spec/support/masamune/mock_filesystem.rb +3 -3
- data/spec/support/masamune/shared_example_group.rb +14 -16
- data/spec/support/masamune/step_example_group.rb +4 -4
- data/spec/support/masamune/step_fixture.rb +1 -1
- data/spec/support/masamune/task_example_group.rb +1 -1
- data/spec/support/masamune/thor_mute.rb +3 -2
- data/spec/support/rspec/example/action_example_group.rb +1 -1
- data/spec/support/rspec/example/task_example_group.rb +7 -4
- data/spec/support/rspec/example/transform_example_group.rb +1 -1
- data/spec/support/shared_examples/postgres_common_examples.rb +2 -2
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 211a98d1efc9791eeceb07e89df0c2ad70c27a4a
|
4
|
+
data.tar.gz: 2a7240f993c7a1252f75f009be836b5b6b5bdd32
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 91022241697047ed01744ef834602314e35b90144c50d84699d4c21ab3403f4333188c7a340fac00a90433f92fe382654a852d7817cc43fd0942f5e7ef24f1a7
|
7
|
+
data.tar.gz: 13b3a769d6edf9efa8b50e6a982b59c3d0241c9a38558700e6938a30748aea1953c8b83e6a1ea834141446b5557e8886bb2681b5ae7bfdfeb98d3d3c59465449
|
data/Rakefile
CHANGED
@@ -37,16 +37,16 @@ RSpec::Core::RakeTask.new(:spec)
|
|
37
37
|
namespace :spec do
|
38
38
|
desc 'Run Rspec unit code examples'
|
39
39
|
RSpec::Core::RakeTask.new(:unit) do |spec|
|
40
|
-
spec.pattern =
|
40
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
41
41
|
end
|
42
42
|
|
43
43
|
desc 'Run Rspec acceptance code examples'
|
44
44
|
RSpec::Core::RakeTask.new(:acceptance) do |spec|
|
45
|
-
spec.pattern =
|
45
|
+
spec.pattern = 'examples/**/*_spec.rb'
|
46
46
|
end
|
47
47
|
|
48
48
|
desc 'Run All Rspec code examples'
|
49
49
|
task all: [:unit, :acceptance]
|
50
50
|
end
|
51
51
|
|
52
|
-
task :
|
52
|
+
task default: :spec
|
data/bin/masamune-aws-emr
CHANGED
@@ -21,6 +21,6 @@
|
|
21
21
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
22
|
# THE SOFTWARE.
|
23
23
|
|
24
|
-
|
24
|
+
$LOAD_PATH << File.expand_path('../../lib/', __FILE__)
|
25
25
|
require 'masamune/tasks/aws_emr_thor'
|
26
26
|
Masamune::Tasks::AwsEmrThor.start(ARGV)
|
data/bin/masamune-dump
CHANGED
@@ -21,6 +21,6 @@
|
|
21
21
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
22
|
# THE SOFTWARE.
|
23
23
|
|
24
|
-
|
24
|
+
$LOAD_PATH << File.expand_path('../../lib/', __FILE__)
|
25
25
|
require 'masamune/tasks/dump_thor'
|
26
26
|
Masamune::Tasks::DumpThor.start(ARGV)
|
data/bin/masamune-hive
CHANGED
@@ -21,6 +21,6 @@
|
|
21
21
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
22
|
# THE SOFTWARE.
|
23
23
|
|
24
|
-
|
24
|
+
$LOAD_PATH << File.expand_path('../../lib/', __FILE__)
|
25
25
|
require 'masamune/tasks/hive_thor'
|
26
26
|
Masamune::Tasks::HiveThor.start(ARGV)
|
data/bin/masamune-psql
CHANGED
@@ -21,6 +21,6 @@
|
|
21
21
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
22
|
# THE SOFTWARE.
|
23
23
|
|
24
|
-
|
24
|
+
$LOAD_PATH << File.expand_path('../../lib/', __FILE__)
|
25
25
|
require 'masamune/tasks/postgres_thor'
|
26
26
|
Masamune::Tasks::PostgresThor.start(ARGV)
|
data/bin/masamune-shell
CHANGED
@@ -21,6 +21,6 @@
|
|
21
21
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
22
|
# THE SOFTWARE.
|
23
23
|
|
24
|
-
|
24
|
+
$LOAD_PATH << File.expand_path('../../lib/', __FILE__)
|
25
25
|
require 'masamune/tasks/shell_thor'
|
26
26
|
Masamune::Tasks::ShellThor.start(ARGV)
|
data/lib/masamune.rb
CHANGED
@@ -37,11 +37,11 @@ module Masamune::Actions
|
|
37
37
|
def validate_cluster_id!
|
38
38
|
cluster_id = configuration.aws_emr[:cluster_id]
|
39
39
|
raise ::Thor::RequiredArgumentMissingError, "No value provided for required options '--cluster-id'" unless cluster_id
|
40
|
-
raise ::Thor::RequiredArgumentMissingError, %
|
40
|
+
raise ::Thor::RequiredArgumentMissingError, %(AWS EMR cluster '#{cluster_id}' does not exist) unless aws_emr(action: 'describe-cluster', cluster_id: cluster_id, fail_fast: false).success?
|
41
41
|
end
|
42
42
|
|
43
43
|
included do |base|
|
44
|
-
base.class_option :cluster_id, :
|
44
|
+
base.class_option :cluster_id, desc: 'AWS EMR cluster_id ID (Hint: `masamune-emr-aws list-clusters`)' if defined?(base.class_option)
|
45
45
|
base.after_initialize(:early) do |thor, options|
|
46
46
|
next unless thor.configuration.aws_emr.any?
|
47
47
|
next unless thor.configuration.aws_emr.fetch(:enabled, true)
|
@@ -50,11 +50,11 @@ module Masamune::Actions
|
|
50
50
|
sources.first
|
51
51
|
end
|
52
52
|
|
53
|
-
# TODO sources from file or input array
|
53
|
+
# TODO: sources from file or input array
|
54
54
|
def parse_file_type(key)
|
55
55
|
return Set.new unless key
|
56
|
-
value = options[key]
|
57
|
-
File.
|
56
|
+
(value = options[key]) || (return Set.new)
|
57
|
+
File.exist?(value) || raise(Thor::MalformattedArgumentError, "Expected file value for '--#{key}'; got #{value}")
|
58
58
|
Set.new File.read(value).split(/\s+/)
|
59
59
|
end
|
60
60
|
|
@@ -78,14 +78,12 @@ module Masamune::Actions
|
|
78
78
|
end
|
79
79
|
module_function :reset_module!
|
80
80
|
|
81
|
-
private
|
82
|
-
|
83
81
|
included do |base|
|
84
82
|
base.extend ClassMethods
|
85
83
|
base.class_eval do
|
86
|
-
class_option :sources, :
|
87
|
-
class_option :targets, :
|
88
|
-
class_option :resolve, :
|
84
|
+
class_option :sources, desc: 'File of data sources to process'
|
85
|
+
class_option :targets, desc: 'File of data targets to process'
|
86
|
+
class_option :resolve, type: :boolean, desc: 'Recursively resolve data dependencies', default: true
|
89
87
|
end
|
90
88
|
|
91
89
|
base.after_initialize(:final) do |thor, options|
|
@@ -98,12 +96,13 @@ module Masamune::Actions
|
|
98
96
|
end if defined?(base.after_initialize)
|
99
97
|
end
|
100
98
|
|
99
|
+
# rubocop:disable Style/ClassVars
|
101
100
|
module ClassMethods
|
102
101
|
def skip
|
103
102
|
initialize_module!
|
104
103
|
@@namespaces << namespace
|
105
|
-
@@sources << {skip: true}
|
106
|
-
@@targets << {skip: true}
|
104
|
+
@@sources << { skip: true }
|
105
|
+
@@targets << { skip: true }
|
107
106
|
end
|
108
107
|
|
109
108
|
def source(source_options = {})
|
@@ -151,5 +150,6 @@ module Masamune::Actions
|
|
151
150
|
true
|
152
151
|
end
|
153
152
|
end
|
153
|
+
# rubocop:enable Style/ClassVars
|
154
154
|
end
|
155
155
|
end
|
@@ -30,20 +30,18 @@ module Masamune::Actions
|
|
30
30
|
value = options[key]
|
31
31
|
Chronic.parse(value).tap do |datetime_value|
|
32
32
|
logger.debug("Using '#{datetime_value}' for --#{key}") if value != datetime_value
|
33
|
-
end
|
33
|
+
end || raise(Thor::MalformattedArgumentError, "Expected date time value for '--#{key}'; got #{value}")
|
34
34
|
end
|
35
35
|
|
36
|
-
private
|
37
|
-
|
38
36
|
included do |base|
|
39
37
|
base.class_eval do
|
40
38
|
attr_accessor :start_value
|
41
39
|
attr_accessor :stop_value
|
42
40
|
attr_accessor :exact_value
|
43
41
|
|
44
|
-
class_option :start, :
|
45
|
-
class_option :stop, :
|
46
|
-
class_option :at, :
|
42
|
+
class_option :start, aliases: '-a', desc: 'Start time'
|
43
|
+
class_option :stop, aliases: '-b', desc: 'Stop time'
|
44
|
+
class_option :at, desc: 'Exact time'
|
47
45
|
|
48
46
|
no_tasks do
|
49
47
|
def start_date
|
@@ -22,7 +22,7 @@
|
|
22
22
|
|
23
23
|
module Masamune::Actions
|
24
24
|
module Execute
|
25
|
-
def execute(*args
|
25
|
+
def execute(*args)
|
26
26
|
opts = args.last.is_a?(Hash) ? args.pop : {}
|
27
27
|
opts = opts.to_hash.symbolize_keys
|
28
28
|
|
@@ -52,13 +52,13 @@ module Masamune::Actions
|
|
52
52
|
|
53
53
|
klass.class_eval do
|
54
54
|
define_method(:handle_stdout) do |line, line_no|
|
55
|
-
|
55
|
+
yield(line, line_no)
|
56
56
|
end
|
57
57
|
end if block_given?
|
58
58
|
|
59
59
|
command = klass.new(self)
|
60
60
|
command = Masamune::Commands::RetryWithBackoff.new(command, opts)
|
61
|
-
command = Masamune::Commands::Shell.new(command, {fail_fast: false}.merge(opts))
|
61
|
+
command = Masamune::Commands::Shell.new(command, { fail_fast: false }.merge(opts))
|
62
62
|
opts.fetch(:interactive, false) ? command.replace(opts) : command.execute
|
63
63
|
end
|
64
64
|
end
|
@@ -26,8 +26,8 @@ module Masamune::Actions
|
|
26
26
|
opts = args.last.is_a?(Hash) ? args.pop : {}
|
27
27
|
opts = opts.to_hash.symbolize_keys
|
28
28
|
opts.reverse_merge!(fail_fast: false)
|
29
|
-
opts
|
30
|
-
opts
|
29
|
+
opts[:extra] = Array.wrap(args)
|
30
|
+
opts[:block] = block.to_proc if block_given?
|
31
31
|
|
32
32
|
command = Masamune::Commands::HadoopFilesystem.new(environment, opts)
|
33
33
|
command = Masamune::Commands::RetryWithBackoff.new(command, configuration.hadoop_filesystem.slice(:retries, :backoff).merge(opts))
|
@@ -30,7 +30,7 @@ module Masamune::Actions
|
|
30
30
|
|
31
31
|
def hive(opts = {}, &block)
|
32
32
|
opts = opts.to_hash.symbolize_keys
|
33
|
-
opts
|
33
|
+
opts[:block] = block.to_proc if block_given?
|
34
34
|
|
35
35
|
command = Masamune::Commands::Hive.new(environment, opts)
|
36
36
|
command = Masamune::Commands::AwsEmr.new(command, opts.except(:extra)) if configuration.aws_emr[:cluster_id]
|
@@ -40,12 +40,12 @@ module Masamune::Actions
|
|
40
40
|
command.interactive? ? command.replace : command.execute
|
41
41
|
end
|
42
42
|
|
43
|
-
# TODO warn or error if database is not defined
|
43
|
+
# TODO: warn or error if database is not defined
|
44
44
|
def create_hive_database_if_not_exists
|
45
45
|
return if configuration.hive[:database] == 'default'
|
46
46
|
sql = []
|
47
|
-
sql << %
|
48
|
-
sql << %
|
47
|
+
sql << %(CREATE DATABASE IF NOT EXISTS #{configuration.hive[:database]})
|
48
|
+
sql << %(LOCATION "#{configuration.hive[:location]}") if configuration.hive[:location]
|
49
49
|
hive(exec: sql.join(' ') + ';', database: nil)
|
50
50
|
end
|
51
51
|
|
@@ -54,7 +54,7 @@ module Masamune::Actions
|
|
54
54
|
hive(file: transform.to_file)
|
55
55
|
rescue => e
|
56
56
|
logger.error(e)
|
57
|
-
logger.error(
|
57
|
+
logger.error('Could not load schema')
|
58
58
|
logger.error("\n" + transform.to_s)
|
59
59
|
exit
|
60
60
|
end
|
@@ -31,7 +31,7 @@ module Masamune::Actions
|
|
31
31
|
include Masamune::Actions::Execute
|
32
32
|
|
33
33
|
included do |base|
|
34
|
-
base.class_option :max_tasks, aliases: '-p', :
|
34
|
+
base.class_option :max_tasks, aliases: '-p', type: :numeric, desc: 'Maximum number of tasks to execute in parallel', default: 4
|
35
35
|
end
|
36
36
|
|
37
37
|
def invoke_parallel(*task_group)
|
@@ -42,7 +42,7 @@ module Masamune::Actions
|
|
42
42
|
Parallel.each(task_group, in_processes: max_tasks) do |task_name|
|
43
43
|
begin
|
44
44
|
execute(thor_wrapper, task_name, *task_args(opts), interactive: true, detach: false)
|
45
|
-
rescue SystemExit
|
45
|
+
rescue SystemExit # rubocop:disable Lint/HandleExceptions
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
@@ -60,13 +60,13 @@ module Masamune::Actions
|
|
60
60
|
end
|
61
61
|
|
62
62
|
def task_args(opts = {})
|
63
|
-
opts.map do |k,v|
|
63
|
+
opts.map do |k, v|
|
64
64
|
case v
|
65
65
|
when true
|
66
|
-
"--#{k.to_s.
|
66
|
+
"--#{k.to_s.tr('_', '-')}"
|
67
67
|
when false
|
68
68
|
else
|
69
|
-
["--#{k.to_s.
|
69
|
+
["--#{k.to_s.tr('_', '-')}", v]
|
70
70
|
end
|
71
71
|
end.flatten.compact
|
72
72
|
end
|
@@ -32,7 +32,7 @@ module Masamune::Actions
|
|
32
32
|
|
33
33
|
def postgres(opts = {}, &block)
|
34
34
|
opts = opts.to_hash.symbolize_keys
|
35
|
-
opts
|
35
|
+
opts[:block] = block.to_proc if block_given?
|
36
36
|
|
37
37
|
command = Masamune::Commands::Postgres.new(environment, opts)
|
38
38
|
command = Masamune::Commands::RetryWithBackoff.new(command, configuration.postgres.slice(:retries, :backoff).merge(opts))
|
@@ -42,9 +42,9 @@ module Masamune::Actions
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def create_postgres_database_if_not_exists
|
45
|
-
|
46
|
-
postgres_admin(action: :create, database: configuration.postgres[:database], safe: true)
|
47
|
-
end
|
45
|
+
if configuration.postgres.key?(:database)
|
46
|
+
postgres_admin(action: :create, database: configuration.postgres[:database], safe: true) unless postgres_helper.database_exists?
|
47
|
+
end
|
48
48
|
end
|
49
49
|
|
50
50
|
def load_postgres_setup_files
|
@@ -52,7 +52,7 @@ module Masamune::Actions
|
|
52
52
|
configuration.with_quiet do
|
53
53
|
postgres(file: file, retries: 0)
|
54
54
|
end
|
55
|
-
end if configuration.postgres.
|
55
|
+
end if configuration.postgres.key?(:setup_files)
|
56
56
|
end
|
57
57
|
|
58
58
|
def load_postgres_schema
|
@@ -60,7 +60,7 @@ module Masamune::Actions
|
|
60
60
|
postgres(file: transform.to_file, retries: 0)
|
61
61
|
rescue => e
|
62
62
|
logger.error(e)
|
63
|
-
logger.error(
|
63
|
+
logger.error('Could not load schema')
|
64
64
|
logger.error("\n" + transform.to_s)
|
65
65
|
exit
|
66
66
|
end
|
@@ -29,8 +29,8 @@ module Masamune::Actions
|
|
29
29
|
def s3cmd(*args, &block)
|
30
30
|
opts = args.last.is_a?(Hash) ? args.pop : {}
|
31
31
|
opts = opts.to_hash.symbolize_keys
|
32
|
-
opts
|
33
|
-
opts
|
32
|
+
opts[:extra] = Array.wrap(args)
|
33
|
+
opts[:block] = block.to_proc if block_given?
|
34
34
|
|
35
35
|
command = Masamune::Commands::S3Cmd.new(environment, opts)
|
36
36
|
command = Masamune::Commands::RetryWithBackoff.new(command, configuration.s3cmd.slice(:retries, :backoff).merge(opts))
|
@@ -40,7 +40,7 @@ module Masamune::Actions
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def s3_sync(src, dst)
|
43
|
-
s3cmd('sync', s3b(src), s3b(dst, :
|
43
|
+
s3cmd('sync', s3b(src), s3b(dst, dir: true))
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
@@ -35,7 +35,7 @@ module Masamune::Actions
|
|
35
35
|
|
36
36
|
include Masamune::Actions::Postgres
|
37
37
|
|
38
|
-
# FIXME should eventually be able to include Transform directly instead of through wrapper
|
38
|
+
# FIXME: should eventually be able to include Transform directly instead of through wrapper
|
39
39
|
class Wrapper
|
40
40
|
extend Masamune::Transform::LoadDimension
|
41
41
|
extend Masamune::Transform::ConsolidateDimension
|
@@ -78,20 +78,20 @@ module Masamune::Actions
|
|
78
78
|
private
|
79
79
|
|
80
80
|
def optional_apply_map(source_files, source, target, &block)
|
81
|
-
if source.respond_to?(:map)
|
81
|
+
if source.respond_to?(:map) && (map = source.map(to: target))
|
82
82
|
apply_map(map, source_files, source, target, &block)
|
83
83
|
else
|
84
84
|
yield source_files, source
|
85
85
|
end
|
86
86
|
end
|
87
87
|
|
88
|
-
def apply_map(map, source_files, source,
|
88
|
+
def apply_map(map, source_files, source, _target)
|
89
89
|
Tempfile.open('masamune_transform') do |output|
|
90
90
|
begin
|
91
91
|
FileUtils.chmod(FILE_MODE, output.path)
|
92
92
|
result = map.apply(source_files, output)
|
93
93
|
result.debug = map.debug
|
94
|
-
logger.debug(File.read(output)) if
|
94
|
+
logger.debug(File.read(output)) if source.debug || result.debug
|
95
95
|
yield output, result
|
96
96
|
ensure
|
97
97
|
output.unlink
|
@@ -31,18 +31,18 @@ module Masamune
|
|
31
31
|
default: 0,
|
32
32
|
later: -10,
|
33
33
|
final: -20
|
34
|
-
}
|
34
|
+
}.freeze
|
35
35
|
|
36
36
|
module ClassMethods
|
37
37
|
# Callbacks registered with the highest priority are executed first, ties are broken by callback registration order
|
38
38
|
def after_initialize(priority = :default, &block)
|
39
|
-
@after_initialize ||= Hash.new { |h,k| h[k] = [] }
|
39
|
+
@after_initialize ||= Hash.new { |h, k| h[k] = [] }
|
40
40
|
@after_initialize[PRIORITY.fetch(priority, 0)] << block
|
41
41
|
end
|
42
42
|
|
43
43
|
def after_initialize_invoke(*a)
|
44
|
-
@after_initialize ||= Hash.new { |h,k| h[k] = [] }
|
45
|
-
@after_initialize.sort.reverse.each { |
|
44
|
+
@after_initialize ||= Hash.new { |h, k| h[k] = [] }
|
45
|
+
@after_initialize.sort.reverse.each { |_p, x| x.each { |y| y.call(*a) } }
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
@@ -81,7 +81,7 @@ module Masamune
|
|
81
81
|
end if depth == 0
|
82
82
|
end
|
83
83
|
|
84
|
-
# FIXME cache eviction policy can be more precise
|
84
|
+
# FIXME: cache eviction policy can be more precise
|
85
85
|
[:touch!, :mkdir!, :copy_file_to_file, :copy_file_to_dir, :copy_dir, :remove_file, :remove_dir, :move_file_to_file, :move_file_to_dir, :move_dir, :write].each do |method|
|
86
86
|
define_method(method) do |*args|
|
87
87
|
clear!
|
@@ -89,8 +89,6 @@ module Masamune
|
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
92
|
-
private
|
93
|
-
|
94
92
|
class PathCache
|
95
93
|
def initialize(filesystem)
|
96
94
|
@filesystem = filesystem
|
@@ -102,25 +100,23 @@ module Masamune
|
|
102
100
|
return if @filesystem.root_path?(path)
|
103
101
|
put(File.join(@filesystem.dirname(path), '.'), OpenStruct.new(name: @filesystem.dirname(path)))
|
104
102
|
paths = path_split(path)
|
105
|
-
elems = paths.reverse.inject(entry) { |a,
|
103
|
+
elems = paths.reverse.inject(entry) { |a, e| { e => a } }
|
106
104
|
@cache.deep_merge!(elems)
|
107
105
|
end
|
108
106
|
|
109
107
|
def get(path)
|
110
108
|
return unless path
|
111
109
|
paths = path_split(path)
|
112
|
-
elem = paths.inject(@cache) { |
|
110
|
+
elem = paths.inject(@cache) { |a, e| a.is_a?(Hash) ? a.fetch(e, {}) : a }
|
113
111
|
emit(elem)
|
114
112
|
rescue KeyError
|
115
113
|
EMPTY_SET
|
116
114
|
end
|
117
115
|
|
118
116
|
def any?(path)
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
false
|
123
|
-
end
|
117
|
+
elem = get(path)
|
118
|
+
return false unless elem
|
119
|
+
elem.any? { |entry| entry.name.start_with?(path) }
|
124
120
|
end
|
125
121
|
|
126
122
|
private
|
@@ -142,7 +138,7 @@ module Masamune
|
|
142
138
|
end
|
143
139
|
|
144
140
|
def path_split(path)
|
145
|
-
path.split('/').reject
|
141
|
+
path.split('/').reject(&:blank?)
|
146
142
|
end
|
147
143
|
end
|
148
144
|
end
|