masamune 0.18.11 → 0.19.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.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +1 -1
  3. data/lib/masamune/cached_filesystem.rb +1 -1
  4. data/lib/masamune/configuration.rb +1 -1
  5. data/lib/masamune/data_plan/rule.rb +1 -1
  6. data/lib/masamune/filesystem.rb +36 -36
  7. data/lib/masamune/schema/column.rb +7 -5
  8. data/lib/masamune/schema/dimension.rb +6 -6
  9. data/lib/masamune/schema/fact.rb +2 -2
  10. data/lib/masamune/schema/store.rb +1 -1
  11. data/lib/masamune/tasks/dump_thor.rb +2 -2
  12. data/lib/masamune/thor.rb +1 -1
  13. data/lib/masamune/transform/postgres/define_table.psql.erb +1 -1
  14. data/lib/masamune/version.rb +1 -1
  15. data/spec/masamune/actions/execute_spec.rb +2 -2
  16. data/spec/masamune/actions/transform_spec.rb +1 -1
  17. data/spec/masamune/commands/aws_emr_spec.rb +1 -1
  18. data/spec/masamune/commands/shell_spec.rb +4 -4
  19. data/spec/masamune/data_plan/builder_spec.rb +6 -6
  20. data/spec/masamune/filesystem_spec.rb +2 -2
  21. data/spec/masamune/schema/catalog_spec.rb +3 -3
  22. data/spec/masamune/schema/column_spec.rb +9 -9
  23. data/spec/masamune/schema/table_spec.rb +14 -14
  24. data/spec/masamune/thor_spec.rb +4 -4
  25. data/spec/masamune/transform/define_table.dimension_spec.rb +4 -4
  26. data/spec/masamune/transform/define_table.fact_spec.rb +3 -3
  27. data/spec/masamune/transform/define_table.table_spec.rb +6 -6
  28. data/spec/masamune/transform/denormalize_table_spec.rb +6 -6
  29. data/spec/masamune/transform/rollup_fact_spec.rb +1 -1
  30. data/spec/masamune/transform/stage_fact_spec.rb +2 -2
  31. data/spec/support/masamune/mock_filesystem.rb +1 -1
  32. data/spec/support/masamune/shared_example_group.rb +1 -1
  33. data/spec/support/masamune/task_example_group.rb +6 -6
  34. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3dd3fb8ccd6de6212ecdf97971916b26c2761ebc
4
- data.tar.gz: 7b9c608f895b6b5abc8b32c097754fa720d04cde
3
+ metadata.gz: 3449c74f195c657f9c934ca252ee55979fcf373c
4
+ data.tar.gz: e16324d9a0e4582bb4060acf6fcd920409909309
5
5
  SHA512:
6
- metadata.gz: 2567cc86397502ebf47886c61262bbe4d2e08188ec3c049e477efd91c36008df8fecb333c47a9c6743d7b3dd0633e9ced8a5a34832a706a46ba1714c8ebb0483
7
- data.tar.gz: 045e5e14031ef288f7a85758d6cf317f5814d0d0a9ec5d1ef0dddf8a7a894d3ab1d11af7283fe8948f53e695e2915ab73d15e5360c946d1e7aa2ac735c7ed798
6
+ metadata.gz: 84f7dc5b7d970c6e46a17ddc6612244b193b88cebb01ebe40125197388a933fa3810b9f4bd0e5147b54e46a98e72f195f5b46f1cfbb3328725ea238fce52c96a
7
+ data.tar.gz: f9113e58e109151ac16372b94495837f97c6881a7a3a893bff990e767d3d4f40b65f3dbc3fa337b085d8efa7c8ba2510ed286a6752ac3128c589c1024672edf7
data/Rakefile CHANGED
@@ -46,7 +46,7 @@ namespace :spec do
46
46
  end
47
47
 
48
48
  desc 'Run All Rspec code examples'
49
- task all: [:unit, :acceptance]
49
+ task all: %i[unit acceptance]
50
50
  end
51
51
 
52
52
  task default: :spec
@@ -83,7 +83,7 @@ module Masamune
83
83
  end
84
84
 
85
85
  # FIXME: cache eviction policy can be more precise
86
- [: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
+ %i[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|
87
87
  define_method(method) do |*args|
88
88
  clear!
89
89
  @filesystem.send(method, *args)
@@ -44,7 +44,7 @@ class Masamune::Configuration < Hashie::Dash
44
44
  end
45
45
 
46
46
  def default_commands
47
- @default_commands ||= %i(aws_emr hive hadoop_streaming hadoop_filesystem s3cmd postgres postgres_admin)
47
+ @default_commands ||= %i[aws_emr hive hadoop_streaming hadoop_filesystem s3cmd postgres postgres_admin]
48
48
  end
49
49
  end
50
50
 
@@ -326,6 +326,6 @@ class Masamune::DataPlan::Rule
326
326
  end
327
327
 
328
328
  def options_for_elem
329
- @options.reject { |k, _| [:path, :table].include?(k) }
329
+ @options.reject { |k, _| %i[path table].include?(k) }
330
330
  end
331
331
  end
@@ -283,26 +283,26 @@ module Masamune
283
283
  def copy_dir(src, dst)
284
284
  check_immutable_path!(dst)
285
285
  case [type(src), type(dst)]
286
- when [:hdfs, :hdfs]
286
+ when %i[hdfs hdfs]
287
287
  copy_file_to_dir(src, dst)
288
- when [:hdfs, :local]
288
+ when %i[hdfs local]
289
289
  copy_file_to_dir(src, dst)
290
- when [:hdfs, :s3]
290
+ when %i[hdfs s3]
291
291
  copy_file_to_dir(src, dst)
292
- when [:s3, :s3]
292
+ when %i[s3 s3]
293
293
  s3cmd('cp', '--recursive', s3b(src, dir: true), s3b(dst, dir: true))
294
- when [:s3, :local]
294
+ when %i[s3 local]
295
295
  fixed_dst = File.join(dst, src.split('/')[-1])
296
296
  FileUtils.mkdir_p(fixed_dst, file_util_args)
297
297
  s3cmd('get', '--recursive', '--skip-existing', s3b(src, dir: true), fixed_dst)
298
- when [:s3, :hdfs]
298
+ when %i[s3 hdfs]
299
299
  copy_file_to_dir(src, dst)
300
- when [:local, :local]
300
+ when %i[local local]
301
301
  FileUtils.mkdir_p(dst, file_util_args)
302
302
  FileUtils.cp_r(src, dst, file_util_args)
303
- when [:local, :hdfs]
303
+ when %i[local hdfs]
304
304
  copy_file_to_dir(src, dst)
305
- when [:local, :s3]
305
+ when %i[local s3]
306
306
  s3cmd('put', '--recursive', src, s3b(dst, dir: true))
307
307
  end
308
308
  end
@@ -348,27 +348,27 @@ module Masamune
348
348
  def move_dir(src, dst)
349
349
  check_immutable_path!(src)
350
350
  case [type(src), type(dst)]
351
- when [:hdfs, :hdfs]
351
+ when %i[hdfs hdfs]
352
352
  move_file_to_file(src, dst)
353
- when [:hdfs, :local]
353
+ when %i[hdfs local]
354
354
  copy_file_to_dir(src, dst)
355
355
  remove_dir(src)
356
- when [:s3, :s3]
356
+ when %i[s3 s3]
357
357
  s3cmd('mv', '--recursive', d(src), f(dst))
358
- when [:s3, :local]
358
+ when %i[s3 local]
359
359
  s3cmd('get', '--recursive', d(src), f(dst))
360
360
  remove_dir(src)
361
- when [:s3, :hdfs]
361
+ when %i[s3 hdfs]
362
362
  copy_file_to_dir(src, dst)
363
363
  remove_dir(src)
364
- when [:hdfs, :s3]
364
+ when %i[hdfs s3]
365
365
  copy_file_to_dir(src, d(dst))
366
366
  remove_dir(src)
367
- when [:local, :local]
367
+ when %i[local local]
368
368
  move_file_to_file(src, dst)
369
- when [:local, :hdfs]
369
+ when %i[local hdfs]
370
370
  move_file_to_file(src, dst)
371
- when [:local, :s3]
371
+ when %i[local s3]
372
372
  s3cmd('put', '--recursive', d(src), d(dst))
373
373
  remove_dir(src)
374
374
  end
@@ -531,51 +531,51 @@ module Masamune
531
531
 
532
532
  def copy_file_helper(src, dst, dir)
533
533
  case [type(src), type(dst)]
534
- when [:hdfs, :hdfs]
534
+ when %i[hdfs hdfs]
535
535
  hadoop_fs('-cp', src, dst)
536
- when [:hdfs, :local]
536
+ when %i[hdfs local]
537
537
  hadoop_fs('-copyToLocal', src, local_file_prefix(dst))
538
- when [:hdfs, :s3]
538
+ when %i[hdfs s3]
539
539
  hadoop_fs('-cp', src, s3n(dst))
540
- when [:s3, :s3]
540
+ when %i[s3 s3]
541
541
  s3cmd('cp', src, s3b(dst, dir: dir))
542
- when [:s3, :local]
542
+ when %i[s3 local]
543
543
  s3cmd('get', src, dst)
544
- when [:s3, :hdfs]
544
+ when %i[s3 hdfs]
545
545
  hadoop_fs('-cp', s3n(src), dst)
546
- when [:local, :local]
546
+ when %i[local local]
547
547
  FileUtils.cp(src, dst, file_util_args)
548
- when [:local, :hdfs]
548
+ when %i[local hdfs]
549
549
  hadoop_fs('-copyFromLocal', local_file_prefix(src), dst)
550
- when [:local, :s3]
550
+ when %i[local s3]
551
551
  s3cmd('put', src, s3b(dst, dir: dir))
552
552
  end
553
553
  end
554
554
 
555
555
  def move_file_helper(src, dst, dir)
556
556
  case [type(src), type(dst)]
557
- when [:hdfs, :hdfs]
557
+ when %i[hdfs hdfs]
558
558
  hadoop_fs('-mv', src, dst)
559
- when [:hdfs, :local]
559
+ when %i[hdfs local]
560
560
  # NOTE: moveToLocal: Option '-moveToLocal' is not implemented yet
561
561
  hadoop_fs('-copyToLocal', src, local_file_prefix(dst))
562
562
  hadoop_fs('-rm', src)
563
- when [:hdfs, :s3]
563
+ when %i[hdfs s3]
564
564
  copy_file_to_file(src, s3n(dst, dir: dir))
565
565
  hadoop_fs('-rm', src)
566
- when [:s3, :s3]
566
+ when %i[s3 s3]
567
567
  s3cmd('mv', src, s3b(dst, dir: dir))
568
- when [:s3, :local]
568
+ when %i[s3 local]
569
569
  s3cmd('get', src, dst)
570
570
  s3cmd('del', src)
571
- when [:s3, :hdfs]
571
+ when %i[s3 hdfs]
572
572
  hadoop_fs('-mv', s3n(src), dst)
573
- when [:local, :local]
573
+ when %i[local local]
574
574
  FileUtils.mv(src, dst, file_util_args)
575
575
  FileUtils.chmod(FILE_MODE, dst, file_util_args)
576
- when [:local, :hdfs]
576
+ when %i[local hdfs]
577
577
  hadoop_fs('-moveFromLocal', local_file_prefix(src), dst)
578
- when [:local, :s3]
578
+ when %i[local s3]
579
579
  s3cmd('put', src, s3b(dst, dir: dir))
580
580
  FileUtils.rm(src, file_util_args)
581
581
  end
@@ -287,7 +287,9 @@ module Masamune::Schema
287
287
  when Hash
288
288
  value
289
289
  when String
290
- JSON.parse(value)
290
+ JSON.parse(value).tap do |new_value|
291
+ raise unless new_value.is_a?(Hash) || new_value.is_a?(Array)
292
+ end
291
293
  when nil
292
294
  {}
293
295
  end
@@ -354,7 +356,7 @@ module Masamune::Schema
354
356
  end
355
357
 
356
358
  def hash_value?
357
- [:key_value, :yaml, :json].include?(type)
359
+ %i[key_value yaml json].include?(type)
358
360
  end
359
361
 
360
362
  def as_psql
@@ -404,11 +406,11 @@ module Masamune::Schema
404
406
  def typecast?(other_type)
405
407
  return true if type == other_type
406
408
  case [type, other_type]
407
- when [:key_value, :yaml]
409
+ when %i[key_value yaml]
408
410
  true
409
- when [:key_value, :json]
411
+ when %i[key_value json]
410
412
  true
411
- when [:yaml, :json]
413
+ when %i[yaml json]
412
414
  true
413
415
  else
414
416
  false
@@ -22,7 +22,7 @@
22
22
 
23
23
  module Masamune::Schema
24
24
  class Dimension < Table
25
- SUPPORTED_GRAINS = [:hourly, :daily, :monthly].freeze
25
+ SUPPORTED_GRAINS = %i[hourly daily monthly].freeze
26
26
 
27
27
  def initialize(opts = {})
28
28
  opts.symbolize_keys!
@@ -81,11 +81,11 @@ module Masamune::Schema
81
81
  when :one, :date
82
82
  [:last_modified_at]
83
83
  when :two
84
- [:start_at, :end_at, :version, :last_modified_at]
84
+ %i[start_at end_at version last_modified_at]
85
85
  when :four
86
- [:start_at, :end_at, :version, :last_modified_at]
86
+ %i[start_at end_at version last_modified_at]
87
87
  when :ledger
88
- [:source_kind, :source_uuid, :start_at, :last_modified_at, :delta]
88
+ %i[source_kind source_uuid start_at last_modified_at delta]
89
89
  else
90
90
  super
91
91
  end
@@ -117,14 +117,14 @@ module Masamune::Schema
117
117
  when :one, :date
118
118
  initialize_column! id: 'last_modified_at', type: :timestamp, default: 'NOW()'
119
119
  when :two
120
- initialize_column! id: 'start_at', type: :timestamp, default: 'TO_TIMESTAMP(0)', index: [:start_at, :natural], unique: :natural
120
+ initialize_column! id: 'start_at', type: :timestamp, default: 'TO_TIMESTAMP(0)', index: %i[start_at natural], unique: :natural
121
121
  initialize_column! id: 'end_at', type: :timestamp, null: true, index: :end_at
122
122
  initialize_column! id: 'version', type: :integer, default: 1, null: true
123
123
  initialize_column! id: 'last_modified_at', type: :timestamp, default: 'NOW()'
124
124
  when :four
125
125
  children << ledger_table
126
126
  # FIXME: derive type from from parent
127
- initialize_column! id: 'start_at', type: :timestamp, default: 'TO_TIMESTAMP(0)', index: [:start_at, :natural], unique: :natural
127
+ initialize_column! id: 'start_at', type: :timestamp, default: 'TO_TIMESTAMP(0)', index: %i[start_at natural], unique: :natural
128
128
  initialize_column! id: 'end_at', type: :timestamp, null: true, index: :end_at
129
129
  initialize_column! id: 'version', type: :integer, default: 1, null: true
130
130
  initialize_column! id: 'last_modified_at', type: :timestamp, default: 'NOW()'
@@ -22,7 +22,7 @@
22
22
 
23
23
  module Masamune::Schema
24
24
  class Fact < Table
25
- SUPPORTED_GRAINS = [:transaction, :hourly, :daily, :monthly].freeze
25
+ SUPPORTED_GRAINS = %i[transaction hourly daily monthly].freeze
26
26
 
27
27
  attr_accessor :grain
28
28
  attr_accessor :partition
@@ -114,7 +114,7 @@ module Masamune::Schema
114
114
  def reserved_column_ids
115
115
  case type
116
116
  when :fact
117
- [:time_key, :last_modified_at]
117
+ %i[time_key last_modified_at]
118
118
  else
119
119
  super
120
120
  end
@@ -51,7 +51,7 @@ module Masamune::Schema
51
51
 
52
52
  class << self
53
53
  def types
54
- [:postgres, :hive, :files]
54
+ %i[postgres hive files]
55
55
  end
56
56
  end
57
57
 
@@ -35,8 +35,8 @@ module Masamune::Tasks
35
35
  skip_lock!
36
36
 
37
37
  desc 'dump', 'Dump schema'
38
- method_option :type, enum: %w(psql hql), desc: 'Schema type', default: 'psql'
39
- method_option :section, enum: %w(pre post all), desc: 'Schema section', default: 'all'
38
+ method_option :type, enum: %w[psql hql], desc: 'Schema type', default: 'psql'
39
+ method_option :section, enum: %w[pre post all], desc: 'Schema section', default: 'all'
40
40
  method_option :exclude, type: :array, desc: 'Exclude tables matching globs', default: []
41
41
  method_option :skip_indexes, type: :boolean, desc: 'Disable indexes', default: false
42
42
  def dump_exec
data/lib/masamune/thor.rb CHANGED
@@ -70,7 +70,7 @@ module Masamune
70
70
  def start(*a)
71
71
  super
72
72
  rescue SignalException => e
73
- raise e unless %w(SIGHUP SIGTERM).include?(e.to_s)
73
+ raise e unless %w[SIGHUP SIGTERM].include?(e.to_s)
74
74
  instance.logger.debug("Exiting at user request on #{e}")
75
75
  exit 0
76
76
  rescue ::Thor::MalformattedArgumentError, ::Thor::RequiredArgumentMissingError => e
@@ -84,7 +84,7 @@ END IF; END $$;
84
84
  copy_options << "DELIMITER '\t'" if target.store.format == :tsv
85
85
  copy_options << "HEADER true" if target.store.headers
86
86
  -%>
87
- COPY <%= target.name %> FROM '<%= file %>' WITH (<%= copy_options.join(", ") %>);
87
+ \COPY <%= target.name %> FROM '<%= file %>' WITH (<%= copy_options.join(", ") %>);
88
88
  <%- end -%>
89
89
  <%- end -%>
90
90
 
@@ -21,5 +21,5 @@
21
21
  # THE SOFTWARE.
22
22
 
23
23
  module Masamune
24
- VERSION = '0.18.11'.freeze
24
+ VERSION = '0.19.0'.freeze
25
25
  end
@@ -44,14 +44,14 @@ describe Masamune::Actions::Execute do
44
44
  end
45
45
 
46
46
  context 'with a simple command' do
47
- let(:command) { %w(echo ping) }
47
+ let(:command) { %w[echo ping] }
48
48
  let(:options) { { fail_fast: true } }
49
49
 
50
50
  it { expect { |b| instance.execute(*command, options, &b) }.to yield_with_args('ping', 0) }
51
51
  end
52
52
 
53
53
  context 'with a simple command with input' do
54
- let(:command) { %w(cat) }
54
+ let(:command) { %w[cat] }
55
55
  let(:options) { { input: 'pong', fail_fast: true } }
56
56
 
57
57
  it { expect { |b| instance.execute(*command, options, &b) }.to yield_with_args('pong', 0) }
@@ -44,7 +44,7 @@ describe Masamune::Actions::Transform do
44
44
  column 'updated_at', type: :timestamp
45
45
  end
46
46
 
47
- fact 'visits', partition: 'y%Ym%m', grain: %w(hourly daily monthly) do
47
+ fact 'visits', partition: 'y%Ym%m', grain: %w[hourly daily monthly] do
48
48
  references :date
49
49
  references :user
50
50
 
@@ -45,7 +45,7 @@ describe Masamune::Commands::AwsEmr do
45
45
  describe '#command_args' do
46
46
  subject { instance.command_args }
47
47
 
48
- it { is_expected.to eq(%w(aws emr ssh)) }
48
+ it { is_expected.to eq(%w[aws emr ssh]) }
49
49
 
50
50
  context 'with --cluster-id j-XYZ' do
51
51
  let(:delegate) { double(command_args: ['hive', '-e', "'show tables;'"]) }
@@ -116,7 +116,7 @@ describe Masamune::Commands::Shell do
116
116
  end
117
117
 
118
118
  it { expect(delegate.status).to eq(0) }
119
- it { expect(delegate.stdout).to eq(%w(ping pong)) }
119
+ it { expect(delegate.stdout).to eq(%w[ping pong]) }
120
120
  it { expect(delegate.stderr).to eq([]) }
121
121
  end
122
122
 
@@ -172,17 +172,17 @@ describe Masamune::Commands::Shell do
172
172
 
173
173
  context 'with command_args containing nil' do
174
174
  let(:command_args) { ['echo', nil, 'foo'] }
175
- it { is_expected.to eq(%w(echo foo)) }
175
+ it { is_expected.to eq(%w[echo foo]) }
176
176
  end
177
177
 
178
178
  context 'with command_args containing an integer' do
179
179
  let(:command_args) { ['echo', nil, 5] }
180
- it { is_expected.to eq(%w(echo 5)) }
180
+ it { is_expected.to eq(%w[echo 5]) }
181
181
  end
182
182
 
183
183
  context 'with nested command_args' do
184
184
  let(:command_args) { [['echo'], ['foo']] }
185
- it { is_expected.to eq(%w(echo foo)) }
185
+ it { is_expected.to eq(%w[echo foo]) }
186
186
  end
187
187
  end
188
188
  end
@@ -27,8 +27,8 @@ describe Masamune::DataPlan::Builder do
27
27
  end
28
28
 
29
29
  context 'with multiple namespaces' do
30
- let(:namespaces) { %w(a b) }
31
- let(:commands) { %w(load store) }
30
+ let(:namespaces) { %w[a b] }
31
+ let(:commands) { %w[load store] }
32
32
  let(:sources) { [{ path: 'log/%Y%m%d.*.log' }, { path: 'table/y=%Y/m=%m/d=%d' }] }
33
33
  let(:targets) { [{ path: 'table/y=%Y/m=%m/d=%d' }, { path: 'daily/%Y-%m-%d' }] }
34
34
 
@@ -47,8 +47,8 @@ describe Masamune::DataPlan::Builder do
47
47
  end
48
48
 
49
49
  context 'with :for option' do
50
- let(:namespaces) { %w(a a a) }
51
- let(:commands) { %w(missing_before override missing_after) }
50
+ let(:namespaces) { %w[a a a] }
51
+ let(:commands) { %w[missing_before override missing_after] }
52
52
  let(:sources) { [{ path: 'log/%Y%m%d.*.log', for: 'override' }] }
53
53
  let(:targets) { [{ path: 'table/y=%Y/m=%m/d=%d', for: 'override' }] }
54
54
 
@@ -70,8 +70,8 @@ describe Masamune::DataPlan::Builder do
70
70
  end
71
71
 
72
72
  context 'with :skip option' do
73
- let(:namespaces) { %w(a a a) }
74
- let(:commands) { %w(missing_before override) }
73
+ let(:namespaces) { %w[a a a] }
74
+ let(:commands) { %w[missing_before override] }
75
75
  let(:sources) { [{ skip: true }, { path: 'log/%Y%m%d.*.log' }] }
76
76
  let(:targets) { [{ skip: true }, { path: 'table/y=%Y/m=%m/d=%d' }] }
77
77
 
@@ -739,14 +739,14 @@ shared_examples_for 'Filesystem' do
739
739
 
740
740
  describe '#glob_sort' do
741
741
  before do
742
- allow_any_instance_of(Masamune::Filesystem).to receive(:glob).and_return(%w(/tmp/a/02.txt /tmp/b/01.txt /tmp/c/00.txt))
742
+ allow_any_instance_of(Masamune::Filesystem).to receive(:glob).and_return(%w[/tmp/a/02.txt /tmp/b/01.txt /tmp/c/00.txt])
743
743
  end
744
744
 
745
745
  subject do
746
746
  instance.glob_sort('/tmp/*', order: :basename)
747
747
  end
748
748
 
749
- it { is_expected.to eq(%w(/tmp/c/00.txt /tmp/b/01.txt /tmp/a/02.txt)) }
749
+ it { is_expected.to eq(%w[/tmp/c/00.txt /tmp/b/01.txt /tmp/a/02.txt]) }
750
750
  it { expect { |b| instance.glob_sort('/tmp/*', order: :basename, &b) }.to yield_successive_args('/tmp/c/00.txt', '/tmp/b/01.txt', '/tmp/a/02.txt') }
751
751
  end
752
752
 
@@ -55,8 +55,8 @@ describe Masamune::Schema::Catalog do
55
55
  end
56
56
 
57
57
  context '#load' do
58
- let(:postgres_extra) { %w(/tmp/schema.psql /tmp/00_schema.psql /tmp/20_schema.psql /tmp/40_schema.psql.erb) }
59
- let(:hive_extra) { %w(/tmp/schema.hql /tmp/00_schema.hql /tmp/20_schema.hql /tmp/40_schema.hql.erb) }
58
+ let(:postgres_extra) { %w[/tmp/schema.psql /tmp/00_schema.psql /tmp/20_schema.psql /tmp/40_schema.psql.erb] }
59
+ let(:hive_extra) { %w[/tmp/schema.hql /tmp/00_schema.hql /tmp/20_schema.hql /tmp/40_schema.hql.erb] }
60
60
  let(:extra) { postgres_extra + hive_extra }
61
61
 
62
62
  before do
@@ -322,7 +322,7 @@ describe Masamune::Schema::Catalog do
322
322
  column 'user_id'
323
323
  end
324
324
 
325
- fact 'visits', grain: %w(hourly daily monthly) do
325
+ fact 'visits', grain: %w[hourly daily monthly] do
326
326
  references :user
327
327
  measure 'count'
328
328
  end
@@ -59,7 +59,7 @@ describe Masamune::Schema::Column do
59
59
  end
60
60
 
61
61
  context 'with type :enum' do
62
- subject(:column) { described_class.new(id: 'mode', type: :enum, values: %w(public private)) }
62
+ subject(:column) { described_class.new(id: 'mode', type: :enum, values: %w[public private]) }
63
63
 
64
64
  context '#default' do
65
65
  subject { column.default }
@@ -81,7 +81,7 @@ describe Masamune::Schema::Column do
81
81
  end
82
82
 
83
83
  context 'with :default' do
84
- subject(:column) { described_class.new(id: 'mode', type: :enum, values: %w(public private), default: 'private') }
84
+ subject(:column) { described_class.new(id: 'mode', type: :enum, values: %w[public private], default: 'private') }
85
85
 
86
86
  context '#default' do
87
87
  subject { column.default }
@@ -123,7 +123,7 @@ describe Masamune::Schema::Column do
123
123
  end
124
124
 
125
125
  context 'with index: ["id", "shared"]' do
126
- subject(:column) { described_class.new(id: 'id', index: %w(id shared)) }
126
+ subject(:column) { described_class.new(id: 'id', index: %w[id shared]) }
127
127
  context '#index' do
128
128
  subject { column.index }
129
129
  it { is_expected.to include(:id) }
@@ -210,7 +210,7 @@ describe Masamune::Schema::Column do
210
210
  end
211
211
 
212
212
  context 'with type :enum' do
213
- let(:column) { described_class.new(id: 'enum', type: :enum, values: %w(public private)) }
213
+ let(:column) { described_class.new(id: 'enum', type: :enum, values: %w[public private]) }
214
214
  context 'with enum value' do
215
215
  let(:value) { 'public' }
216
216
  it { is_expected.to eq("'public'::ENUM_TYPE") }
@@ -476,7 +476,7 @@ describe Masamune::Schema::Column do
476
476
 
477
477
  context 'when array' do
478
478
  let(:value) { '["1","2","3"]' }
479
- it { is_expected.to eq(%w(1 2 3)) }
479
+ it { is_expected.to eq(%w[1 2 3]) }
480
480
  end
481
481
 
482
482
  context 'when hash' do
@@ -494,7 +494,7 @@ describe Masamune::Schema::Column do
494
494
  describe '#default_ruby_value' do
495
495
  subject(:result) { column.default_ruby_value }
496
496
 
497
- [:boolean, :integer, :string].each do |type|
497
+ %i[boolean integer string].each do |type|
498
498
  context "with type :#{type}" do
499
499
  let(:column) { described_class.new(id: 'column', type: type) }
500
500
  it { is_expected.to be_nil }
@@ -511,7 +511,7 @@ describe Masamune::Schema::Column do
511
511
  it { is_expected.to eq(Time.new(0)) }
512
512
  end
513
513
 
514
- [:json, :yaml, :key_value].each do |type|
514
+ %i[json yaml key_value].each do |type|
515
515
  context "with type :#{type}" do
516
516
  let(:column) { described_class.new(id: 'column', type: type) }
517
517
  it { is_expected.to eq({}) }
@@ -602,7 +602,7 @@ describe Masamune::Schema::Column do
602
602
  end
603
603
 
604
604
  context 'when array of string' do
605
- let(:value) { %w(1 2) }
605
+ let(:value) { %w[1 2] }
606
606
  it { is_expected.to eq('[1,2]') }
607
607
  end
608
608
  end
@@ -626,7 +626,7 @@ describe Masamune::Schema::Column do
626
626
  end
627
627
 
628
628
  context 'when array of string' do
629
- let(:value) { %w(1 2) }
629
+ let(:value) { %w[1 2] }
630
630
  it { is_expected.to eq('["1","2"]') }
631
631
  end
632
632
 
@@ -70,8 +70,8 @@ describe Masamune::Schema::Table do
70
70
  let(:table) do
71
71
  described_class.new id: 'user',
72
72
  columns: [
73
- Masamune::Schema::Column.new(id: 'tenant_id', index: %w(tenant_id shared)),
74
- Masamune::Schema::Column.new(id: 'user_id', index: %w(user_id shared))
73
+ Masamune::Schema::Column.new(id: 'tenant_id', index: %w[tenant_id shared]),
74
+ Masamune::Schema::Column.new(id: 'user_id', index: %w[user_id shared])
75
75
  ]
76
76
  end
77
77
 
@@ -83,7 +83,7 @@ describe Masamune::Schema::Table do
83
83
  described_class.new id: 'user',
84
84
  columns: [
85
85
  Masamune::Schema::Column.new(id: 'tenant_id', unique: ['shared']),
86
- Masamune::Schema::Column.new(id: 'user_id', unique: %w(user_id shared))
86
+ Masamune::Schema::Column.new(id: 'user_id', unique: %w[user_id shared])
87
87
  ]
88
88
  end
89
89
 
@@ -99,7 +99,7 @@ describe Masamune::Schema::Table do
99
99
  columns: [
100
100
  Masamune::Schema::Column.new(id: 'tenant_id'),
101
101
  Masamune::Schema::Column.new(id: 'user_id'),
102
- Masamune::Schema::Column.new(id: 'state', type: :enum, sub_type: :user_state, values: %w(active inactive terminated), default: 'active')
102
+ Masamune::Schema::Column.new(id: 'state', type: :enum, sub_type: :user_state, values: %w[active inactive terminated], default: 'active')
103
103
  ]
104
104
  end
105
105
 
@@ -324,22 +324,22 @@ describe Masamune::Schema::Table do
324
324
  end
325
325
 
326
326
  context 'with specified columns' do
327
- subject(:stage_table) { table.stage_table(columns: %w(id name user_account_state.id hr_user_account_state.id)) }
327
+ subject(:stage_table) { table.stage_table(columns: %w[id name user_account_state.id hr_user_account_state.id]) }
328
328
 
329
329
  it 'should stage table' do
330
330
  expect(stage_table.name).to eq('user_table_stage')
331
- expect(stage_table.columns.keys).to eq([:name, :user_account_state_table_id, :hr_user_account_state_table_id])
332
- expect(stage_table.references.keys).to eq([:user_account_state, :hr_user_account_state])
331
+ expect(stage_table.columns.keys).to eq(%i[name user_account_state_table_id hr_user_account_state_table_id])
332
+ expect(stage_table.references.keys).to eq(%i[user_account_state hr_user_account_state])
333
333
  end
334
334
  end
335
335
 
336
336
  context 'with specified columns (denormalized)' do
337
- subject(:stage_table) { table.stage_table(columns: %w(id name user_account_state.name hr_user_account_state.name)) }
337
+ subject(:stage_table) { table.stage_table(columns: %w[id name user_account_state.name hr_user_account_state.name]) }
338
338
 
339
339
  it 'should stage table' do
340
340
  expect(stage_table.name).to eq('user_table_stage')
341
- expect(stage_table.columns.keys).to eq([:name, :user_account_state_table_name, :hr_user_account_state_table_name])
342
- expect(stage_table.references.keys).to eq([:user_account_state, :hr_user_account_state])
341
+ expect(stage_table.columns.keys).to eq(%i[name user_account_state_table_name hr_user_account_state_table_name])
342
+ expect(stage_table.references.keys).to eq(%i[user_account_state hr_user_account_state])
343
343
  end
344
344
  end
345
345
 
@@ -357,8 +357,8 @@ describe Masamune::Schema::Table do
357
357
 
358
358
  it 'should stage table' do
359
359
  expect(stage_table.name).to eq('user_table_stage')
360
- expect(stage_table.columns.keys).to eq([:name, :user_account_state_table_name, :hr_user_account_state_table_name])
361
- expect(stage_table.references.keys).to eq([:user_account_state, :hr_user_account_state])
360
+ expect(stage_table.columns.keys).to eq(%i[name user_account_state_table_name hr_user_account_state_table_name])
361
+ expect(stage_table.references.keys).to eq(%i[user_account_state hr_user_account_state])
362
362
  end
363
363
  end
364
364
 
@@ -376,7 +376,7 @@ describe Masamune::Schema::Table do
376
376
 
377
377
  it 'should stage table' do
378
378
  expect(stage_table.name).to eq('user_table_stage')
379
- expect(stage_table.columns.keys).to eq([:user_id, :name, :hr_user_account_state_table_name])
379
+ expect(stage_table.columns.keys).to eq(%i[user_id name hr_user_account_state_table_name])
380
380
  expect(stage_table.references.keys).to eq([:hr_user_account_state])
381
381
  end
382
382
  end
@@ -396,7 +396,7 @@ describe Masamune::Schema::Table do
396
396
 
397
397
  it 'should stage table' do
398
398
  expect(stage_table.name).to eq('user_table_stage')
399
- expect(stage_table.columns.keys).to eq([:hr_user_account_state_table_id, :user_id, :name])
399
+ expect(stage_table.columns.keys).to eq(%i[hr_user_account_state_table_id user_id name])
400
400
  expect(stage_table.references.keys).to eq([:hr_user_account_state])
401
401
  end
402
402
  end
@@ -93,11 +93,11 @@ describe Masamune::Thor do
93
93
  let(:command) { 'command' }
94
94
  let(:options) { ['--version'] }
95
95
  it 'exits with status code 0 and prints version' do
96
- expect { execute_command }.to raise_error { |e|
96
+ expect { execute_command }.to raise_error do |e|
97
97
  expect(e).to be_a(SystemExit)
98
98
  expect(e.message).to eq('exit')
99
99
  expect(e.status).to eq(0)
100
- }
100
+ end
101
101
  expect(stdout.string).to match(/\Amasamune/)
102
102
  expect(stderr.string).to be_blank
103
103
  end
@@ -199,11 +199,11 @@ describe Masamune::Thor do
199
199
  let(:command) { 'unknown' }
200
200
  let(:options) { ['--start', '2013-01-01'] }
201
201
  it 'exits with status code 1 and prints error to stderr' do
202
- expect { execute_command }.to raise_error { |e|
202
+ expect { execute_command }.to raise_error do |e|
203
203
  expect(e).to be_a(SystemExit)
204
204
  expect(e.message).to eq('Path :unknown_dir not defined')
205
205
  expect(e.status).to eq(1)
206
- }
206
+ end
207
207
  expect(stdout.string).to be_blank
208
208
  expect(stderr.string).to match(/Path :unknown_dir not defined/)
209
209
  end
@@ -45,8 +45,8 @@ describe Masamune::Transform::DefineTable do
45
45
  catalog.schema :hive do
46
46
  dimension 'tenant', type: :ledger do
47
47
  column 'tenant_id', type: :integer, natural_key: true
48
- column 'tenant_account_state', type: :enum, values: %w(missing unknown active inactive)
49
- column 'tenant_premium_state', type: :enum, values: %w(missing unkown goodwill pilot sandbox premium internal free vmware)
48
+ column 'tenant_account_state', type: :enum, values: %w[missing unknown active inactive]
49
+ column 'tenant_premium_state', type: :enum, values: %w[missing unkown goodwill pilot sandbox premium internal free vmware]
50
50
  column 'preferences', type: :key_value, null: true
51
51
  end
52
52
  end
@@ -81,8 +81,8 @@ describe Masamune::Transform::DefineTable do
81
81
  partition :y
82
82
  partition :m
83
83
  column 'tenant_id', type: :integer, natural_key: true
84
- column 'tenant_account_state', type: :enum, values: %w(missing unknown active inactive)
85
- column 'tenant_premium_state', type: :enum, values: %w(missing unkown goodwill pilot sandbox premium internal free vmware)
84
+ column 'tenant_account_state', type: :enum, values: %w[missing unknown active inactive]
85
+ column 'tenant_premium_state', type: :enum, values: %w[missing unkown goodwill pilot sandbox premium internal free vmware]
86
86
  column 'preferences', type: :key_value, null: true
87
87
  end
88
88
  end
@@ -179,9 +179,9 @@ describe Masamune::Transform::DefineTable do
179
179
  total INTEGER
180
180
  );
181
181
 
182
- COPY visits_file_fact_stage FROM 'output_1.csv' WITH (FORMAT 'csv', HEADER true);
183
- COPY visits_file_fact_stage FROM 'output_2.csv' WITH (FORMAT 'csv', HEADER true);
184
- COPY visits_file_fact_stage FROM 'output_3.csv' WITH (FORMAT 'csv', HEADER true);
182
+ \\COPY visits_file_fact_stage FROM 'output_1.csv' WITH (FORMAT 'csv', HEADER true);
183
+ \\COPY visits_file_fact_stage FROM 'output_2.csv' WITH (FORMAT 'csv', HEADER true);
184
+ \\COPY visits_file_fact_stage FROM 'output_3.csv' WITH (FORMAT 'csv', HEADER true);
185
185
 
186
186
  CREATE INDEX visits_file_fact_stage_964dac1_index ON visits_file_fact_stage (date_dimension_date_id);
187
187
  CREATE INDEX visits_file_fact_stage_5a187ed_index ON visits_file_fact_stage (feature_type_name);
@@ -101,8 +101,8 @@ describe Masamune::Transform::DefineTable do
101
101
  before do
102
102
  catalog.schema :postgres do
103
103
  table 'user' do
104
- column 'tenant_id', index: %w(tenant_id shared)
105
- column 'user_id', index: %w(user_id shared)
104
+ column 'tenant_id', index: %w[tenant_id shared]
105
+ column 'user_id', index: %w[user_id shared]
106
106
  end
107
107
  end
108
108
  end
@@ -146,7 +146,7 @@ describe Masamune::Transform::DefineTable do
146
146
  catalog.schema :postgres do
147
147
  table 'user' do
148
148
  column 'tenant_id', unique: ['shared']
149
- column 'user_id', unique: %w(user_id shared)
149
+ column 'user_id', unique: %w[user_id shared]
150
150
  end
151
151
  end
152
152
  end
@@ -381,7 +381,7 @@ describe Masamune::Transform::DefineTable do
381
381
  table 'user' do
382
382
  column 'tenant_id'
383
383
  column 'user_id'
384
- column 'state', type: :enum, sub_type: :user_state, values: %w(active inactive terminated), default: 'active'
384
+ column 'state', type: :enum, sub_type: :user_state, values: %w[active inactive terminated], default: 'active'
385
385
  end
386
386
  end
387
387
  end
@@ -724,7 +724,7 @@ describe Masamune::Transform::DefineTable do
724
724
  end
725
725
 
726
726
  context 'for postgres table with all specified columns' do
727
- let(:columns) { %w(hr_user_account_state_table_id user_account_state_table_id name) }
727
+ let(:columns) { %w[hr_user_account_state_table_id user_account_state_table_id name] }
728
728
 
729
729
  it 'should render table template' do
730
730
  is_expected.to eq <<-EOS.strip_heredoc
@@ -739,7 +739,7 @@ describe Masamune::Transform::DefineTable do
739
739
  end
740
740
 
741
741
  context 'for postgres table with all specified columns in denormalized form' do
742
- let(:columns) { %w(hr_user_account_state.name user_account_state.name name) }
742
+ let(:columns) { %w[hr_user_account_state.name user_account_state.name name] }
743
743
 
744
744
  it 'should render table template' do
745
745
  is_expected.to eq <<-EOS.strip_heredoc
@@ -311,8 +311,8 @@ describe Masamune::Transform::DenormalizeTable do
311
311
  partition :y
312
312
  partition :m
313
313
  column 'tenant_id', type: :integer, natural_key: true
314
- column 'tenant_account_state', type: :enum, values: %w(missing unknown active inactive)
315
- column 'tenant_premium_state', type: :enum, values: %w(missing unkown goodwill pilot sandbox premium internal free vmware)
314
+ column 'tenant_account_state', type: :enum, values: %w[missing unknown active inactive]
315
+ column 'tenant_premium_state', type: :enum, values: %w[missing unkown goodwill pilot sandbox premium internal free vmware]
316
316
  column 'preferences', type: :key_value, null: true
317
317
  end
318
318
  end
@@ -322,18 +322,18 @@ describe Masamune::Transform::DenormalizeTable do
322
322
 
323
323
  let(:options) do
324
324
  {
325
- columns: %w(
325
+ columns: %w[
326
326
  tenant_id
327
327
  tenant_account_state
328
328
  tenant_premium_state
329
329
  preferences
330
330
  y
331
331
  m
332
- ),
333
- order: %w(
332
+ ],
333
+ order: %w[
334
334
  tenant_id
335
335
  start_at
336
- )
336
+ ]
337
337
  }
338
338
  end
339
339
 
@@ -69,7 +69,7 @@ describe Masamune::Transform::RollupFact do
69
69
  measure 'total', type: :integer, aggregate: :sum
70
70
  end
71
71
 
72
- fact 'visits', partition: 'y%Ym%m', grain: %w(hourly daily monthly) do
72
+ fact 'visits', partition: 'y%Ym%m', grain: %w[hourly daily monthly] do
73
73
  references :cluster
74
74
  references :date
75
75
  references :tenant
@@ -72,10 +72,10 @@ describe Masamune::Transform::StageFact do
72
72
  row group_id: -2, group_mode: 'unknown', attributes: { id: :unknown }
73
73
  end
74
74
 
75
- fact 'visits', partition: 'y%Ym%m', grain: %w(hourly daily monthly) do
75
+ fact 'visits', partition: 'y%Ym%m', grain: %w[hourly daily monthly] do
76
76
  references :cluster
77
77
  references :date
78
- references :tenant, through: [:user, :from_group, :group]
78
+ references :tenant, through: %i[user from_group group]
79
79
  references :user
80
80
  references :group, label: 'from', default: :missing, unknown: :unknown
81
81
  references :group, default: :missing, unknown: :unknown
@@ -88,7 +88,7 @@ class Masamune::MockFilesystem < Delegator
88
88
  true
89
89
  end
90
90
 
91
- [: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|
91
+ %i[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|
92
92
  define_method(method) do |*_args|
93
93
  # Empty
94
94
  end
@@ -119,7 +119,7 @@ module Masamune::SharedExampleGroup
119
119
  if output['hive'] && output['hive'].is_a?(String)
120
120
  hive(exec: output['hive'], output: output_file)
121
121
  elsif output['table']
122
- table = eval "catalog.#{output['table']}" # rubocop:disable Lint/Eval
122
+ table = eval "catalog.#{output['table']}" # rubocop:disable Security/Eval
123
123
  query = denormalize_table(table, output.slice('columns', 'order', 'except', 'include')).to_s
124
124
  # FIXME: define format based on table.store.format
125
125
  case table.store.type
@@ -34,10 +34,10 @@ module Masamune::TaskExampleGroup
34
34
 
35
35
  shared_examples 'general usage' do
36
36
  it 'exits with status code 0 and prints general usage' do
37
- expect { execute_command }.to raise_error { |e|
37
+ expect { execute_command }.to raise_error do |e|
38
38
  expect(e).to be_a(SystemExit)
39
39
  expect(e.status).to eq(0)
40
- }
40
+ end
41
41
  expect(stdout.string).to match(/^Commands:/)
42
42
  expect(stderr.string).to be_blank
43
43
  end
@@ -45,10 +45,10 @@ module Masamune::TaskExampleGroup
45
45
 
46
46
  shared_examples 'command usage' do
47
47
  it 'exits with status code 0 and prints command usage' do
48
- expect { execute_command }.to raise_error { |e|
48
+ expect { execute_command }.to raise_error do |e|
49
49
  expect(e).to be_a(SystemExit)
50
50
  expect(e.status).to eq(0)
51
- }
51
+ end
52
52
  expect(stdout.string).to match(/^Usage:/)
53
53
  expect(stdout.string).to match(/^Options:/)
54
54
  expect(stderr.string).to be_blank
@@ -57,10 +57,10 @@ module Masamune::TaskExampleGroup
57
57
 
58
58
  shared_examples 'executes with success' do
59
59
  it 'exits with status code 0' do
60
- expect { execute_command }.to raise_error { |e|
60
+ expect { execute_command }.to raise_error do |e|
61
61
  expect(e).to be_a(SystemExit)
62
62
  expect(e.status).to eq(0)
63
- }
63
+ end
64
64
  end
65
65
  end
66
66
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: masamune
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.11
4
+ version: 0.19.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Andrews
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-10 00:00:00.000000000 Z
11
+ date: 2017-05-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -464,7 +464,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
464
464
  version: '0'
465
465
  requirements: []
466
466
  rubyforge_project:
467
- rubygems_version: 2.5.1
467
+ rubygems_version: 2.4.8
468
468
  signing_key:
469
469
  specification_version: 4
470
470
  summary: Hybrid Data & Work Flow