Class: ActiveDataFrame::InstallGenerator

Inherits:
ActiveRecord::Generators::Base
  • Object
show all
Defined in:
lib/generators/active_data_frame/install_generator.rb

Constant Summary collapse

STREAM_TYPES =
%w(bit byte integer long float double)

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.model_exists?(model, destination_root) ⇒ Boolean

Returns:

  • (Boolean)


75
76
77
# File 'lib/generators/active_data_frame/install_generator.rb', line 75

def self.model_exists?(model, destination_root)
  File.exist?(File.join(destination_root, self.path_for_model(model)))
end

.path_for_model(model) ⇒ Object



71
72
73
# File 'lib/generators/active_data_frame/install_generator.rb', line 71

def self.path_for_model(model)
  File.join("app", "models", "blocks", "#{model.underscore}.rb")
end

.source_rootObject



11
12
13
# File 'lib/generators/active_data_frame/install_generator.rb', line 11

def self.source_root
  @source_root ||= File.join(File.dirname(__FILE__), 'templates')
end

Instance Method Details

#block_table_nameObject



23
24
25
# File 'lib/generators/active_data_frame/install_generator.rb', line 23

def block_table_name
  "#{singular_table_name}_blocks"
end

#block_typeObject



19
20
21
# File 'lib/generators/active_data_frame/install_generator.rb', line 19

def block_type
  "#{singular_table_name}_block".camelize
end

#concern_file_nameObject



35
36
37
# File 'lib/generators/active_data_frame/install_generator.rb', line 35

def concern_file_name
  "has_#{singular_table_name}"
end

#concern_nameObject



31
32
33
# File 'lib/generators/active_data_frame/install_generator.rb', line 31

def concern_name
  "Has#{singular_table_name.camelize}"
end

#copy_concernObject



67
68
69
# File 'lib/generators/active_data_frame/install_generator.rb', line 67

def copy_concern
  template "has_concern.rb", "app/models/concerns/#{concern_file_name}.rb"
end

#copy_migrationObject



79
80
81
# File 'lib/generators/active_data_frame/install_generator.rb', line 79

def copy_migration
  migration_template "migration.rb", "db/migrate/active_data_frame_create_#{table_name}.rb", migration_version: migration_version
end

#generate_modelObject



15
16
17
# File 'lib/generators/active_data_frame/install_generator.rb', line 15

def generate_model
  invoke "active_record:model", ["blocks/#{singular_block_table_name}"], migration: false
end

#get_typecodeObject



47
48
49
50
51
52
53
# File 'lib/generators/active_data_frame/install_generator.rb', line 47

def get_typecode
  case type
  when "float", "double" then M::Typecode::FLOAT
  when "integer", "long" then M::Typecode::INT
  when "bit", "byte"     then M::Typecode::BYTE
  end
end

#inject_concern_contentObject



39
40
41
42
43
44
45
# File 'lib/generators/active_data_frame/install_generator.rb', line 39

def inject_concern_content
  inject.each do |inject_into|
    content = "  include #{concern_name}\n"
    class_name = inject_into.camelize
    inject_into_class(self.class.path_for_model(inject_into), class_name, content) if self.class.model_exists?(inject_into, destination_root)
  end
end

#inject_data_frame_helpersObject



55
56
57
58
59
60
61
62
63
64
65
# File 'lib/generators/active_data_frame/install_generator.rb', line 55

def inject_data_frame_helpers
  content = \
<<RUBY
  BLOCK_SIZE = #{columns}
  COLUMNS = %w(#{columns.times.map{|i| "t#{i+1}" }.join(" ")})
  TYPECODE = #{get_typecode}
  self.table_name = '#{block_table_name}'
RUBY
  class_name = "Blocks::#{singular_block_table_name.camelize}"
  inject_into_class(self.class.path_for_model(singular_block_table_name), class_name, content) if self.class.model_exists?(singular_block_table_name, destination_root)
end

#migration_dataObject



83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/generators/active_data_frame/install_generator.rb', line 83

def migration_data
<<RUBY
  t.integer :data_frame_id
  t.string  :data_frame_type
  t.integer :period_index
#{
columns.times.map do |i|
"      t.#{type} :t#{i+1}, default: 0, allow_nil: false"
end.join("\n")
}
RUBY
end

#migration_versionObject



96
97
98
99
100
# File 'lib/generators/active_data_frame/install_generator.rb', line 96

def migration_version
  if rails5?
   "[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
  end
end

#rails5?Boolean

Returns:

  • (Boolean)


102
103
104
# File 'lib/generators/active_data_frame/install_generator.rb', line 102

def rails5?
  Rails.version.start_with? '5'
end

#singular_block_table_nameObject



27
28
29
# File 'lib/generators/active_data_frame/install_generator.rb', line 27

def singular_block_table_name
  "#{singular_table_name}_block"
end