arxutils 0.1.31 → 0.1.35

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fb417c5c9b978efc194c67ba2fe77dc9c7d513fd
4
- data.tar.gz: b6222fe0eb3cbaacbb3c2fb36d772854c993b3de
3
+ metadata.gz: 0db660cdf41eaaaab3cc142711afb8186b10c06e
4
+ data.tar.gz: 20a8b02d69969d52a37cfddda3c721d0d628762d
5
5
  SHA512:
6
- metadata.gz: d114e775a16a5a73b328a802c221004dad54e8a2b7a5d4881fec1d4836fb69361c526a5e45a0dd4106dddb2f1b947274c1280b61509c051311ef0035da2abfb8
7
- data.tar.gz: 25d2c83d30862cf07bc1fea7d17b1c2d22e481440cb476c8b094fc9561d6d329f8e1d2669454555226e744504370c5d453adbf4a762c36bc6d81b4a5f23f31f9
6
+ metadata.gz: 7e38ecbe696e36c4e4975fcf304beb86d49056edb6df241448232d7e8b987041f45514ece568c1449f4155fde058521c55a71e221e3de4f3d8a76bf5bd0e9f35
7
+ data.tar.gz: bc11ab615060d8d3eaff76d5e582258adf766d78cde23852403ba4c3f05ae54440c2853f047675a59c8389a802cb9b3d648ca730aea8d49200a8c117dbf16ee7
data/Rakefile CHANGED
@@ -1,6 +1,3 @@
1
1
  require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
3
-
4
- RSpec::Core::RakeTask.new(:spec)
5
2
 
6
3
  task :default => :spec
data/arxutils.gemspec CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
27
27
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
28
  spec.require_paths = ["lib"]
29
29
 
30
+ spec.add_runtime_dependency "activesupport"
30
31
  # spec.add_runtime_dependency "erb"
31
32
  spec.add_runtime_dependency "activerecord"
32
33
  spec.add_runtime_dependency "sqlite3"
data/lib/arxutils/arx.rb CHANGED
@@ -12,18 +12,24 @@ module Arxutils
12
12
  # :items
13
13
  # フィールド名, 型, null許容 の配列
14
14
  # :plural
15
+ # :relation
15
16
  @data = data
16
17
 
17
18
  @@field ||= Struct.new("Field" , :name, :type, :null )
18
19
 
19
- @data[:ary] = @data[:items].map{ |x| @@field.new( *x ) }
20
+ if @data[:items]
21
+ @data[:ary] = @data[:items].map{ |x| @@field.new( *x ) }
22
+ else
23
+ @data[:ary] = []
24
+ end
20
25
  end
21
26
 
22
27
  def create
23
28
  contents = File.open( @fname ).read
24
-
25
29
  erb = ERB.new(contents)
26
- erb.result(binding)
30
+ content = erb.result(binding)
31
+ content
27
32
  end
33
+
28
34
  end
29
35
  end
@@ -10,10 +10,6 @@ module Arxutils
10
10
  File.join( Arxutils.dirname , ".." , "template" )
11
11
  end
12
12
 
13
- def Arxutils.rakefile
14
- File.join( Arxutils.dirname , ".." , 'Rakefile')
15
- end
16
-
17
13
  def Arxutils.configdir
18
14
  File.join( Arxutils.dirname , ".." , 'config' )
19
15
  end
@@ -7,37 +7,42 @@ require 'sqlite3'
7
7
  module Arxutils
8
8
  module Dbutil
9
9
  DB_DIR = 'db'
10
- MIGRATE_DIR = 'db/migrate'
10
+ MIGRATE_DIR = 'migrate'
11
11
  DBCONFIG_SQLITE3 = 'sqlite3'
12
12
  DBCONFIG_MYSQL = 'mysql'
13
13
  CONFIG_DIR = 'config'
14
14
  DATABASELOG = 'database.log'
15
15
 
16
16
  class Dbinit
17
- attr_accessor :dbconfig_dest_path , :dbconfig_src_path , :dbconfig_src_fname , :dbconfig_dest_fname
17
+ attr_accessor :dbconfig_dest_path , :dbconfig_src_path , :dbconfig_src_fname , :dbconfig_dest_fname , :migrate_dir
18
18
 
19
- def initialize( db_dir , migrate_dir , src_config_dir , dbconfig , log_fname, forced = false )
20
- @db_dir = db_dir
21
- @migrate_dir = migrate_dir
19
+ def initialize( migrate_base_dir , src_config_dir , dbconfig , log_fname, forced = false )
20
+ @db_dir = dbconfig[:db_dir]
22
21
  @src_config_dir = src_config_dir
23
22
  @dest_config_dir = "config"
24
- @dbconfig_dest_fname = "#{dbconfig}.yaml"
25
- @dbconfig_src_fname = "#{dbconfig}.tmpl"
23
+ @dbconfig_dest_fname = "#{dbconfig[:kind]}.yaml"
24
+ @dbconfig_src_fname = "#{dbconfig[:kind]}.tmpl"
26
25
  @dbconfig_dest_path = File.join( @dest_config_dir , @dbconfig_dest_fname)
27
26
  @dbconfig_src_path = File.join(@src_config_dir , @dbconfig_src_fname)
28
27
  @log_fname = log_fname
29
- @log_path = File.join( @db_dir , @log_fname )
30
- FileUtils.mkdir_p( @db_dir )
31
- FileUtils.mkdir_p( @migrate_dir )
28
+
29
+ if @db_dir and @log_fname
30
+ @log_path = File.join( @db_dir , @log_fname )
31
+ @migrate_dir = File.join( @db_dir , migrate_base_dir )
32
+ end
33
+ FileUtils.mkdir_p( @db_dir ) if @db_dir
34
+ FileUtils.mkdir_p( @migrate_dir ) if @migrate_dir
32
35
  FileUtils.mkdir_p( @dest_config_dir )
33
36
  if forced
34
- FileUtils.rm( Dir.glob( File.join( @migrate_dir , "*")))
37
+ FileUtils.rm( Dir.glob( File.join( @migrate_dir , "*"))) if @migrate_dir
35
38
  FileUtils.rm( Dir.glob( File.join( @dest_config_dir , "*")))
36
39
  end
37
40
  end
38
41
 
39
42
  def setup
43
+ puts ENV['ENV']
40
44
  dbconfig = YAML.load( File.read( @dbconfig_dest_path ) )
45
+ puts dbconfig[ ENV['ENV'] ]
41
46
  ActiveRecord::Base.establish_connection(dbconfig[ENV['ENV']])
42
47
  ActiveRecord::Base.logger = Logger.new( @log_path )
43
48
  end
@@ -1,4 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
+
2
3
  require 'arxutils/dbutil/dbinit'
3
4
 
4
5
  require 'date'
@@ -7,8 +8,8 @@ require 'pp'
7
8
  module Arxutils
8
9
  module Dbutil
9
10
  class DbMgr
10
- def DbMgr.init( db_dir , migrate_dir , config_dir , dbconfig, log_fname, forced = false )
11
- dbinit = Dbinit.new( db_dir , migrate_dir , config_dir , dbconfig, log_fname, forced )
11
+ def DbMgr.init( migrate_dir , config_dir , dbconfig, log_fname, forced = false )
12
+ dbinit = Dbinit.new( migrate_dir , config_dir , dbconfig, log_fname, forced )
12
13
  DbMgr.setup( dbinit )
13
14
  end
14
15
 
@@ -27,7 +28,6 @@ module Arxutils
27
28
 
28
29
  @@ret
29
30
  end
30
-
31
31
  def DbMgr.conv_string(value , encoding)
32
32
  if value.class == String
33
33
  if value.encodingy != encoding
@@ -67,3 +67,4 @@ module Arxutils
67
67
  end
68
68
  end
69
69
  end
70
+
@@ -0,0 +1,180 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module Arxutils
4
+ class HierOp
5
+ def initialize( hier_symbol , base_klass , hier_klass , current_klass )
6
+ @hier_symbol = hier_symbol
7
+ @base_klass = base_klass
8
+ @hier_klass = hier_klass
9
+ @current_klass = current_klass
10
+ end
11
+
12
+ def delete( hier )
13
+ # 子として探す
14
+ id = nil
15
+ row_item = @base_klass.find_by( { @hier_symbol => hier } )
16
+ if row_item
17
+ id = row_item.id
18
+ delete_at( id )
19
+ end
20
+ id
21
+ end
22
+
23
+ def move( src_hier , dest_parent_hier )
24
+ # dest_parent_hierがsrc_hierの子であれば(=src_hierがdest_parent_hierの先頭からの部分文字列である)何もせずエラーを返す
25
+ escaped = Regexp.escape( src_hier )
26
+ src_re = Regexp.new( %Q!^#{escaped}! )
27
+ ret = ( src_re =~ dest_parent_hier )
28
+ # 自身の子への移動はエラーとする
29
+ if ret
30
+ return false
31
+ end
32
+
33
+ src_row_item = @base_klass.where( name: src_hier )
34
+ src_num = src_row_item.id
35
+ # srcが子である(tblでは項目を一意に指定できる)のtblでの項目を得る
36
+ src_row = @hire_klass.find_by( child_id: src_num )
37
+
38
+ dest_parent_row_item = @base_klass.find_by( name: dest_parent_hier )
39
+ unless dest_parent_row_item
40
+ dest_parent_num = register( dest_parent_hier )
41
+ else
42
+ dest_parent_num = dest_parent_row_item.id
43
+ end
44
+ dest_parent_level = get_level_by_child( dest_parent_num )
45
+
46
+ # srcの親をdest_parentにする
47
+ src_row.parent_id = dest_parent_num
48
+
49
+ # destに移動後のsrcの子のレベルを調整する
50
+ level_adjust( src_row , dest_parent_level )
51
+ # destに移動後のsrcのhierを再設定
52
+ set_hier( src_row_item , make_hier( dest_parent_row_item.name , get_name( src_row_item ) ) )
53
+ # destに移動後のsrcの子のhierを調整する
54
+ hier_adjust( src_row_item )
55
+
56
+ true
57
+ end
58
+
59
+ def register_parent( hier_ary , child_num , level )
60
+ hier_ary.pop
61
+ parent_hier_ary = hier_ary
62
+ parent_hier = parent_hier_ary.join('/')
63
+ parent_num = register( parent_hier )
64
+ hs = { parent_id: parent_num , child_id: child_num , level: level }
65
+ @hier_klass.create( hs )
66
+ end
67
+
68
+ def register( hier )
69
+ hier_ary = hier.split('/')
70
+ level = get_level_by_array( hier_ary )
71
+
72
+ # もしhier_aryがnilだけを1個持つ配列、または空文字列だけを1個もつ配列であれば、hier_nameは空文字列になる
73
+
74
+ item_row = @current_klass.find_by( {@hier_symbol => hier} )
75
+ unless item_row
76
+ # @base_klassがhierだけでcreateできる場合は(他にフィールドがnot_nullでないか)、ここに来てもよい。
77
+ # そうでなければ、SQLの制約違反が発生するため、ここに来ることを避けなければならない。
78
+ # (あらかじめここが呼ばれないようにdatabaseに登録済みにしておかなければならない。)
79
+ new_category = @base_klass.create( {@hier_symbol => hier} )
80
+ new_num = new_category.id
81
+ if level == 0
82
+ unless @hier_klass.find_by( child_id: new_num )
83
+ hs = { parent_id: new_num , child_id: new_num , level: level }
84
+ @hier_klass.create( hs )
85
+ end
86
+ else
87
+ register_parent( hier_ary , new_num, level )
88
+ end
89
+ else
90
+ new_num = item_row.org_id
91
+ if level == 0
92
+ unless @hier_klass.find_by( child_id: new_num )
93
+ hs = {parent_id: new_num , child_id: new_num , level: level}
94
+ @hier_klass.create( hs )
95
+ end
96
+ else
97
+ unless @hier_klass.find_by( child_id: new_num )
98
+ register_parent( hier_ary , new_num, level )
99
+ end
100
+ end
101
+ end
102
+ new_num
103
+ end
104
+
105
+ private
106
+
107
+ def delete_at( num )
108
+ # 子として探す
109
+ row = @hier_klass.find_by( child_id: num )
110
+ level = row.level
111
+ parent_id = row.parent_id
112
+ row_item = @base_klass.find( num )
113
+
114
+ parent_item_row = @base_klass.find( parent_id )
115
+ parent_hier = parent_item_row.name
116
+
117
+ # 属する子を探す
118
+ child_rows = @hier_klass.where( parent_id: num )
119
+ # 属する子の階層レベルを調整する(削除するのでlevel - 1になる)
120
+ child_rows.map{ |x| level_adjust( x , level - 1 ) }
121
+ # 属する子の親を、親の親にする
122
+ child_rows.map{ |x|
123
+ x.parent_id = parent_id
124
+ }
125
+ # 属する子のhierを調整する
126
+ child_rows.map{ |x|
127
+ child_item_row = @base_klass.find( x.child_id )
128
+ name = get_name( child_item_row )
129
+ child_item_row.name = make_hier( parent_hier , name )
130
+ hier_adjust( child_item_row )
131
+ }
132
+ end
133
+
134
+ def get_level_by_array( hier_ary )
135
+ level = hier_ary.size - 1
136
+ level = 0 if level < 0
137
+ level
138
+ end
139
+
140
+ def get_name( items_row )
141
+ name = ""
142
+ if items_row
143
+ name = items_row.name.split('/').pop
144
+ end
145
+ name
146
+ end
147
+
148
+ def hier_adjust( item_row )
149
+ parent_hier = item_row.name
150
+ parent_num = item_row.id
151
+
152
+ tbl_rows = @hier_klass.where( parent_id: parent_num )
153
+ if tbl_rows.size > 0
154
+ tbl_rows.map{|x|
155
+ child_num = x.child_id
156
+ item_row = @base_klass.find( child_num )
157
+ item_row.name = make_hier( parent_hier , get_name( item_row ) )
158
+ hier_adjust( item_row )
159
+ }
160
+ end
161
+ end
162
+
163
+ # 指定項目と、その子のlevelを調整
164
+ def level_adjust( row , parent_level )
165
+ row.level = parent_level + 1
166
+ child_rows = @hier_klass.where( parent_id: row.id )
167
+ if child_rows.size > 0
168
+ child_rows.map{ |x| level_adjust( x , row.level ) }
169
+ end
170
+ end
171
+
172
+ def get_level_by_child( num )
173
+ @hier_klass.find_by( child_id: num ).level
174
+ end
175
+
176
+ def make_hier( parent_hier , name )
177
+ [ parent_hier , name ].join('/')
178
+ end
179
+ end
180
+ end
@@ -2,37 +2,70 @@
2
2
  require 'arxutils'
3
3
 
4
4
  require 'fileutils'
5
+ require 'active_support'
5
6
  require 'active_record'
7
+ require 'pp'
6
8
 
7
9
  module Arxutils
8
10
  class Migrate
9
11
  attr_accessor :dbinit , :dbconfig_dest_path , :dbconfig_dest_fname , :dbconfig_src_path , :dbconfig_src_fname
10
12
 
11
- def Migrate.migrate( data_ary , idx , dbconfig , forced )
13
+ def Migrate.migrate( data_ary , relation_def_fpath , module_name, count_classname_downcase , count_field , dbconfig , forced )
12
14
  src_config_dir = Arxutils.configdir
13
- mig = Migrate.new(Dbutil::DB_DIR, Dbutil::MIGRATE_DIR , src_config_dir , dbconfig, Dbutil::DATABASELOG, forced )
14
- mig.make_dbconfig( data_ary[idx] )
15
+ mig = Migrate.new( Dbutil::MIGRATE_DIR , src_config_dir , dbconfig, Dbutil::DATABASELOG, forced )
16
+ # dbconfigのテンプレートは内容が固定である。convertを呼び出し、Arxのインスタンスを作成するときに、適切なdata_aryの要素を与える必要がある(ただしテンプレートへの埋め込みには用いられない
17
+ mig.make_dbconfig( dbconfig )
15
18
 
16
- data_ary.reduce(0) do |next_num , x|
19
+ data_ary.reduce(0) { |next_num , x|
17
20
  mig.make( next_num , x )
18
- end
21
+ }
19
22
 
23
+ content_array = data_ary.map { |x|
24
+ mig.make_relation( x , "count", "end_count_id" )
25
+ }.select{ |x| x.size > 0 }
26
+ need_count_class_plural = content_array.reduce([]){ |s,x|
27
+ s << x[:need_count_class_plural] if x[:need_count_class_plural] != nil
28
+ s
29
+ }
30
+ if content_array.size > 0
31
+ data_count = {count_classname: "Count" ,
32
+ count_field: count_field,
33
+ need_count_class_plural: need_count_class_plural,
34
+ }
35
+ ary = content_array.collect{|x| x[:content] }.flatten
36
+ count_content = mig.convert_count_class_relation( data_count , "relation_count.tmpl" )
37
+ ary.unshift( count_content )
38
+ content_array = ary
39
+ end
40
+ File.open( relation_def_fpath , 'w' , {:encoding => Encoding::UTF_8}){ |f|
41
+ f.puts("module #{module_name}")
42
+ content_array.map{ |content|
43
+ f.puts( content )
44
+ f.puts( "\n" )
45
+ }
46
+ f.puts("end")
47
+ }
48
+
20
49
  Dbutil::DbMgr.setup( mig.dbinit )
21
50
 
22
51
  mig.migrate
23
52
  end
24
53
 
25
- def initialize( db_dir , migrate_dir , config_dir , dbconfig, log_fname, forced = false )
26
- @dbinit = Dbutil::Dbinit.new( db_dir , migrate_dir , config_dir , dbconfig, log_fname, forced )
54
+ def initialize( migrate_base_dir , config_dir , dbconfig, log_fname, forced = false )
55
+ @dbinit = Dbutil::Dbinit.new( migrate_base_dir , config_dir , dbconfig, log_fname, forced )
27
56
  @dbconfig_dest_path = @dbinit.dbconfig_dest_path
28
57
  @dbconfig_src_path = @dbinit.dbconfig_src_path
29
58
  @dbconfig_src_fname = @dbinit.dbconfig_src_fname
30
59
 
31
- @migrate_dir = migrate_dir
60
+ @migrate_dir = @dbinit.migrate_dir
32
61
  @src_path = Arxutils.templatedir
33
62
  @src_config_path = Arxutils.configdir
34
63
  end
35
64
 
65
+ def convert_count_class_relation( data , src_fname )
66
+ convert( data , @src_path , src_fname )
67
+ end
68
+
36
69
  def convert( data , src_dir , src_fname )
37
70
  arx = Arx.new( data , File.join( src_dir, src_fname ) )
38
71
  arx.create
@@ -44,6 +77,28 @@ module Arxutils
44
77
  f.puts( content )
45
78
  }
46
79
  end
80
+
81
+ def make_relation( data , count_classname_downcase , count_field )
82
+ if data[:classname_downcase] != count_classname_downcase
83
+ data[:flist].reduce( { content: [], need_count_class: nil } ){ |s, x|
84
+ case x
85
+ when "base" , "noitem"
86
+ name_base = "relation"
87
+ data[:relation] = [] unless data[:relation]
88
+ else
89
+ data[:count_classname_downcase] = count_classname_downcase
90
+ data[:count_field] = count_field
91
+ name_base = "relation_#{x}"
92
+ s[:need_count_class_plural] ||= data[:plural]
93
+ end
94
+ content = convert( data , @src_path , "#{name_base}.tmpl" )
95
+ s[:content] << content
96
+ s
97
+ }
98
+ else
99
+ {}
100
+ end
101
+ end
47
102
 
48
103
  def make( next_num , data )
49
104
  data[:flist].reduce(next_num) do |idy , x|
@@ -56,7 +111,6 @@ module Arxutils
56
111
  additional = x
57
112
  end
58
113
  fname = File.join( @migrate_dir , sprintf("%03d_create_%s%s.rb" , idy , additional , data[:classname_downcase]) )
59
- p fname
60
114
  File.open( fname , 'w' , {:encoding => Encoding::UTF_8}){ |f|
61
115
  f.puts( content )
62
116
  }
@@ -0,0 +1,44 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module Arxutils
4
+ def load_file( in_file )
5
+ File.open( in_file , "r" , { :encoding => 'UTF-8' } )
6
+ end
7
+
8
+ def normalize_to_integer( *args )
9
+ args.map{ |x|
10
+ if x != nil and x !~ /^\s*$/
11
+ x.to_i
12
+ else
13
+ nil
14
+ end
15
+ }
16
+ end
17
+
18
+ def update_integer( model , hs )
19
+ value_hs = hs.reduce({}){ |hsx,item|
20
+ val = model.send(item[0])
21
+ if val == nil or val < item[1]
22
+ hsx[ item[0] ] = item[1]
23
+ end
24
+ hsx
25
+ }
26
+ if value_hs.size > 0
27
+ begin
28
+ model.update(value_hs)
29
+ rescue => ex
30
+ puts ex.message
31
+ end
32
+ end
33
+ end
34
+
35
+ def capture_queries(&block)
36
+ queries = []
37
+ ActiveSupport::Notifications.subscribe('sql.active_record') do |_name, _start, _finish, _id, payload|
38
+ queries << payload
39
+ end
40
+ yield block
41
+ ActiveSupport::Notifications.unsubscribe('sql.active_record')
42
+ queries
43
+ end
44
+ end
@@ -6,7 +6,7 @@ module Arxutils
6
6
  class StoreDb
7
7
  def StoreDb.init( hs , block = nil )
8
8
  ret = nil
9
- register_time = Dbutil::DbMgr.init( hs["db_dir"] , hs["migrate_dir"] , hs["config_dir"], hs["dbconfig"] , hs["log_fname"] )
9
+ register_time = Dbutil::DbMgr.init( hs["migrate_dir"] , hs["config_dir"], hs["dbconfig"] , hs["log_fname"] )
10
10
 
11
11
  if block
12
12
  ret = block.call( register_time )
@@ -0,0 +1,53 @@
1
+ module Arxutils
2
+ class TransactState
3
+ attr_accessor :ids , :state
4
+
5
+ def initialize
6
+ @ids = []
7
+ @state = :NONE
8
+ end
9
+
10
+ def add( xid )
11
+ @ids << xid if @state == :TRACE
12
+ end
13
+
14
+ def clear
15
+ @ids = []
16
+ end
17
+
18
+ def need?
19
+ @ids.size > 0
20
+ end
21
+
22
+ end
23
+
24
+ class TransactStateGroup
25
+ def initialize( *names )
26
+ @state = :NONE
27
+ @inst = {}
28
+ names.map{|x| @inst[x] = TransactState.new }
29
+ end
30
+
31
+ def need?
32
+ @state != :NONE
33
+ end
34
+
35
+ def set_all_inst_state
36
+ @inst.map{|x| x[1].state = @state }
37
+ end
38
+
39
+ def trace
40
+ @state = :TRACE
41
+ set_all_inst_state
42
+ end
43
+
44
+ def reset
45
+ @state = :NONE
46
+ set_all_inst_state
47
+ end
48
+
49
+ def method_missing(name , lang = nil)
50
+ @inst[name]
51
+ end
52
+ end
53
+ end
@@ -1,3 +1,3 @@
1
1
  module Arxutils
2
- VERSION = "0.1.31"
2
+ VERSION = "0.1.35"
3
3
  end
data/lib/arxutils.rb CHANGED
@@ -1,6 +1,12 @@
1
+ require 'active_support'
2
+ require 'active_support/core_ext'
3
+ require 'active_record'
1
4
  require 'arxutils/version'
2
5
  require 'arxutils/arxutils'
3
6
  require 'arxutils/arx'
7
+ require 'arxutils/transactstate'
8
+ require 'arxutils/hier'
9
+ require 'arxutils/misc'
4
10
  require 'arxutils/dbutil/dbinit'
5
11
  require 'arxutils/dbutil/dbmgr'
6
12
  require 'arxutils/store'
@@ -9,21 +9,21 @@ default_env: &default
9
9
  host: localhost
10
10
  username: root
11
11
  password:
12
- database: <%= x.name %>
12
+ database: <%= @data[:dbname] %>
13
13
  pool: 5
14
14
  timeout: 5000
15
15
 
16
16
  development:
17
17
  <<: *default
18
- database: <%= x.name %>_developement
18
+ database: <%= @data[:dbname] %>_developement
19
19
 
20
20
  # Warning: The database defined as "test" will be erased and
21
21
  # re-generated from your development database when you run "rake".
22
22
  # Do not set this db to the same as development or production.
23
23
  test:
24
24
  <<: *default
25
- database: <%= x.name %>_test
25
+ database: <%= @data[:dbname] %>_test
26
26
 
27
27
  production:
28
28
  <<: *default
29
- database: <%= x.name %>_production
29
+ database: <%= @data[:dbname] %>_production
@@ -8,19 +8,19 @@ default_env: &default
8
8
  adapter: sqlite3
9
9
  pool: 5
10
10
  timeout: 5000
11
- database: db/sqlite3.db
11
+ database: <%= @data[:db_dir] %>/sqlite3.db
12
12
 
13
13
  development:
14
14
  <<: *default
15
- database: db/development.sqlite3
15
+ database: <%= @data[:db_dir] %>/development.sqlite3
16
16
 
17
17
  # Warning: The database defined as "test" will be erased and
18
18
  # re-generated from your development database when you run "rake".
19
19
  # Do not set this db to the same as development or production.
20
20
  test:
21
21
  <<: *default
22
- database: db/test.sqlite3
22
+ database: <%= @data[:db_dir] %>/test.sqlite3
23
23
 
24
24
  production:
25
25
  <<: *default
26
- database: db/production.sqlite3
26
+ database: <%= @data[:db_dir] %>/production.sqlite3
@@ -3,8 +3,8 @@ class Create<%= @data[:classname] %> < ActiveRecord::Migration
3
3
  create_table :<%= @data[:plural] %> do |t|
4
4
  <% @data[:ary].each do |x| %>
5
5
  t.column :<%= x.name %>, :<%= x.type %>, :null => <%= x.null %>
6
- <% end %>
7
- t.column :start_datetime, :datetime, :null => false
6
+ <% end %>
7
+ t.timestamps null: false
8
8
  end
9
9
  end
10
10
 
@@ -2,10 +2,8 @@ class CreateCurrent<%= @data[:classname_downcase] %> < ActiveRecord::Migration
2
2
  def self.up
3
3
  execute <<-SQL
4
4
  CREATE VIEW current<%= @data[:plural] %> AS SELECT id as org_id,
5
- <% @data[:ary].each do |x| %>
6
- <%= x.name %>,
7
- <% end %>
8
- start_datetime FROM <%= @data[:plural] %> where not exists (select * from invalid<%= @data[:plural] %> where invalid<%= @data[:plural] %>.org_id = <%= @data[:plural] %>.id )
5
+ <%= @data[:ary].map{|x| x.name }.join(" , ") %>
6
+ FROM <%= @data[:plural] %> where not exists (select * from invalid<%= @data[:plural] %> where invalid<%= @data[:plural] %>.org_id = <%= @data[:plural] %>.id )
9
7
  SQL
10
8
  end
11
9
 
@@ -2,7 +2,7 @@ class CreateInvalid<%= @data[:classname_downcase] %> < ActiveRecord::Migration
2
2
  def self.up
3
3
  create_table :invalid<%= @data[:plural] %> do |t|
4
4
  t.column :org_id, :int, :null => false
5
- t.column :end_datetime, :datetime, :null => true
5
+ t.column :count_id, :int, :null => true
6
6
  end
7
7
  end
8
8
 
@@ -0,0 +1,3 @@
1
+ class <%= @data[:classname] %> < ActiveRecord::Base
2
+ <% @data[:relation].each do |x| %> <%= x %>
3
+ <% end %> end
@@ -0,0 +1,4 @@
1
+ class <%= @data[:count_classname] %> < ActiveRecord::Base
2
+ <% @data[:need_count_class_plural].each do |x| %> has_many :invalid<%= x %>
3
+ <% end %> end
4
+
@@ -0,0 +1,3 @@
1
+ class Current<%= @data[:classname_downcase] %> < ActiveRecord::Base
2
+ belongs_to :<%= @data[:classname_downcase] %> , foreign_key: 'org_id'
3
+ end
@@ -0,0 +1,4 @@
1
+ class Invalid<%= @data[:classname_downcase] %> < ActiveRecord::Base
2
+ belongs_to :<%= @data[:classname_downcase] %> , foreign_key: 'org_id'
3
+ belongs_to :<%= @data[:count_classname_downcase] %> , foreign_key: '<%= @data[:count_field] %>'
4
+ end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arxutils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.31
4
+ version: 0.1.35
5
5
  platform: ruby
6
6
  authors:
7
7
  - yasuo kominami
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-09-06 00:00:00.000000000 Z
11
+ date: 2016-07-12 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: activerecord
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -117,10 +131,13 @@ files:
117
131
  - lib/arxutils/arxutils.rb
118
132
  - lib/arxutils/dbutil/dbinit.rb
119
133
  - lib/arxutils/dbutil/dbmgr.rb
134
+ - lib/arxutils/hier.rb
120
135
  - lib/arxutils/migrate.rb
136
+ - lib/arxutils/misc.rb
121
137
  - lib/arxutils/store.rb
122
138
  - lib/arxutils/store/storecsv.rb
123
139
  - lib/arxutils/store/storedb.rb
140
+ - lib/arxutils/transactstate.rb
124
141
  - lib/arxutils/version.rb
125
142
  - lib/config/mysql.tmpl
126
143
  - lib/config/sqlite3.tmpl
@@ -128,6 +145,10 @@ files:
128
145
  - lib/template/current.tmpl
129
146
  - lib/template/invalid.tmpl
130
147
  - lib/template/noitem.tmpl
148
+ - lib/template/relation.tmpl
149
+ - lib/template/relation_count.tmpl
150
+ - lib/template/relation_current.tmpl
151
+ - lib/template/relation_invalid.tmpl
131
152
  homepage: ''
132
153
  licenses: []
133
154
  metadata: {}
@@ -147,9 +168,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
147
168
  version: '0'
148
169
  requirements: []
149
170
  rubyforge_project:
150
- rubygems_version: 2.4.8
171
+ rubygems_version: 2.6.4
151
172
  signing_key:
152
173
  specification_version: 4
153
174
  summary: utility functions for ActiveRecord.
154
175
  test_files: []
155
- has_rdoc: