Module: Bukovina::Tasks

Defined in:
lib/bukovina/tasks.rb

Class Method Summary collapse

Class Method Details

.add_errors(f, errors) ⇒ Object



33
34
35
# File 'lib/bukovina/tasks.rb', line 33

def add_errors f, errors
@errors ||= {}
@errors[ f ] ||= [ errors ].flatten ;end

.errorsObject



37
38
# File 'lib/bukovina/tasks.rb', line 37

def errors
@errors ||= {} ;end

.fix_base_yearObject



18
19
20
21
22
23
24
# File 'lib/bukovina/tasks.rb', line 18

def fix_base_year
memories = Memory.all
# memories = Memory.where(base_year: nil)
memories.each do |memory|
   memory.update!(base_year: memory.set_base_year) ;end

Kernel.puts "Fixed #{memories.size} of #{Memory.count}" ;end

.fix_memo_dateObject



26
27
28
29
30
31
# File 'lib/bukovina/tasks.rb', line 26

def fix_memo_date
            memoes = Memo.where("date !~ ?", "^(\\d+\\.\\d+|[-+]\\d+|0)")
            memoes.each do |m|
# binding.pry
# Kernel.puts "#{m.date} => #{newdate}" if ! newdate
m.update(date: m.fix_date) ;end;end

.import_calendariesObject



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/bukovina/tasks.rb', line 75

def import_calendaries
Dir.glob( Bukovina.root.join('календари/**/память.*.yml') ).each do |f|
   puts "Календарь: #{f}"

   m = begin
      YAML.load( File.open( f ) )
   rescue Psych::SyntaxError => e
      add_errors(f, StandardError.new("#{e} for file #{f}"))
      nil ; end

   if m
      wd = Dir.pwd
      Dir.chdir( File.dirname( f ) )
      import_calendary(f, m)
      Dir.chdir( wd ) ;end;end

puts '-'*80
errors.keys.each do |f|
   puts "#{f.gsub(/([ ,])/,'@\1').gsub('@','\\')}" ;end
puts '='*80

errors.each do |f, list|
   list.each do |e|
      puts "@@@ #{f} -> #{e.class}:#{e.message}" ; end;end

true; end

.import_calendary(f, record) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/bukovina/tasks.rb', line 40

def import_calendary f, record
            short_name = record.keys.first
            file_short_name = f.split('/')[-2]
            if short_name != file_short_name
add_errors(f, StandardError.new("File calendary name " +
   "#{file_short_name} doesn't match to calendary name #{short_name}")) ;end
            data = record[ short_name ]

            parser = Bukovina::Parsers::Calendary.new
            attrs = parser.parse(data)
            if parser.errors.any?
add_errors(f, parser.errors)
            else
i = Bukovina::Importers::Calendary.new( attrs )
i.import
add_errors(f, i.errors) if i.errors.any? ;end;end

.import_event_kindsObject



6
7
8
9
10
# File 'lib/bukovina/tasks.rb', line 6

def import_event_kinds
            event_kinds = YAML.load( File.open( Bukovina.root.join( 'db/seeds/event_kinds.yaml' )))
            event_kinds.each do |event_kind|
Kernel.puts "#{event_kind['kind']} => #{event_kind['text']}"
EventKind.where(event_kind).find_or_create_by!(event_kind) ;end;end

.import_memoriesObject



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/bukovina/tasks.rb', line 102

def import_memories
Dir.glob( Bukovina.root.join('памяти/**/память.*.yml') ).each.with_index do |f, i|
   begin
      puts "Память: #{i}:#{f}"

      m = begin
         YAML.load( File.open( f ) )
      rescue Psych::SyntaxError => e
         add_errors(f, StandardError.new("#{e} for file #{f}"))
         nil ; end

      if m
         wd = Dir.pwd
         Dir.chdir( File.dirname( f ) )
         import_record(f, m)
         Dir.chdir( wd ) ;end
   rescue SecurityError
      Memory.by_short_name(m.keys.first).first.destroy
      Kernel.puts "Destroed memory: #{f}"
      retry
   end;end

puts '-'*80
errors.keys.each do |f|
   puts "#{f.gsub(/([ ,])/,'@\1').gsub('@','\\')}" ;end
puts '='*80

errors.each do |f, list|
   list.each do |e|
      puts "@@@ #{f} -> #{e.class}:#{e.message}" ; end;end

true; end

.import_ordersObject



12
13
14
15
16
# File 'lib/bukovina/tasks.rb', line 12

def import_orders
            orders = YAML.load( File.open( Bukovina.root.join( 'db/seeds/orders.yaml' )))
            orders.each do |order|
Kernel.puts "#{order['order']} => #{order['text']}"
Order.where(order).find_or_create_by!(order) ;end;end

.import_record(f, record) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/bukovina/tasks.rb', line 57

def import_record f, record
            short_name = record.keys.first
         #         return  if short_name != 'Василий Волыньский' ####
            file_short_name = f.split('/')[-2]
            if short_name != file_short_name
add_errors(f, StandardError.new("File short name " +
   "#{file_short_name} doesn't match to short name #{short_name}")) ;end
            # TODO Validate memory, it will validate subfiieds itself

            data = record[ short_name ]

            parser = Bukovina::Parsers::Memory.new
            attrs = parser.parse(data, target: short_name)
            if parser.errors.any?
add_errors(f, parser.errors)
            else
Bukovina::Importers::Memory.new( attrs, short_name ).import( short_name ) ;end;end