masamune 0.17.12 → 0.17.13
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 +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
|