marty 0.5.26 → 0.5.27
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/db/migrate/099_create_marty_configs.rb +3 -2
- data/lib/marty/migrations.rb +58 -0
- data/lib/marty/version.rb +1 -1
- data/marty.gemspec +8 -6
- data/spec/lib/migrations/vw_marty_postings.sql.expected +23 -0
- data/spec/lib/migrations_spec.rb +16 -0
- data/spec/models/config_spec.rb +1 -1
- metadata +8 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7a3336670f870920df522354766443beb74444a6
|
4
|
+
data.tar.gz: 024d51ba48f744d2f79cf94c944aba5738bfb162
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1943c8292da687d88f7d005fef66476b384a2172022c35dcef00b5ad0bbea0da2f215d7d7ff72464f2f114cd7441fbec51792c2d84454e52f6129a596ed604fe
|
7
|
+
data.tar.gz: 75eb4fef14e9c12212ff5aed7a70d7d9d3c042f3d335a53494a8b9e07554a3ac38bbee77124170b2cfb281e2daa7da18c9f1221eeccd2e32a1103c2fc758585e
|
@@ -3,9 +3,10 @@ class CreateMartyConfigs < ActiveRecord::Migration
|
|
3
3
|
create_table :marty_configs do |t|
|
4
4
|
t.timestamps null: false
|
5
5
|
|
6
|
-
t.string :key
|
7
|
-
t.jsonb :value
|
6
|
+
t.string :key, null: false
|
7
|
+
t.jsonb :value, null: false
|
8
8
|
t.text :description
|
9
9
|
end
|
10
|
+
add_index :marty_configs, :key, unique: true
|
10
11
|
end
|
11
12
|
end
|
data/lib/marty/migrations.rb
CHANGED
@@ -73,6 +73,64 @@ module Marty::Migrations
|
|
73
73
|
unique: true)
|
74
74
|
end
|
75
75
|
|
76
|
+
def self.write_view(target_dir, klass, jsons, excludes)
|
77
|
+
colnames = klass.columns_hash.keys
|
78
|
+
user_id_cols = ["user_id", "o_user_id"]
|
79
|
+
excludes += user_id_cols
|
80
|
+
joins = ["join marty_users u on main.user_id = u.id",
|
81
|
+
"left join marty_users ou on main.o_user_id = ou.id"]
|
82
|
+
columns = ["concat(u.firstname, ' ', u.lastname) AS user_name",
|
83
|
+
"concat(ou.firstname, ' ', ou.lastname) AS obsoleted_user"]
|
84
|
+
jointabs = {}
|
85
|
+
colnames.each do |c|
|
86
|
+
if jsons[c]
|
87
|
+
jsons[c].each do |subc|
|
88
|
+
if subc.class == Array
|
89
|
+
subcol, type = subc
|
90
|
+
columns.push "f_fixfalse(main.#{c} ->> '#{subcol}')::#{type} " +
|
91
|
+
"as \"#{c}_#{subcol}\""
|
92
|
+
else
|
93
|
+
columns.push "main.#{c} ->> '#{subc}' as \"#{c}_#{subc}\""
|
94
|
+
end
|
95
|
+
end
|
96
|
+
elsif !excludes.include?(c)
|
97
|
+
assoc = klass.reflections.find { |(n, h)| h.foreign_key == c }
|
98
|
+
if assoc && assoc[1].klass.columns_hash["name"]
|
99
|
+
table_name = assoc[1].table_name
|
100
|
+
jointabs[table_name] ||= 0
|
101
|
+
jointabs[table_name] += 1
|
102
|
+
tn_alias = "#{table_name}#{jointabs[table_name]}"
|
103
|
+
joins.push "left join #{table_name} #{tn_alias} on main.#{c} " +
|
104
|
+
"= #{tn_alias}.id"
|
105
|
+
target_name = c.gsub(/_id$/,'_name')
|
106
|
+
columns.push "#{tn_alias}.name as #{target_name}"
|
107
|
+
else
|
108
|
+
columns.push "main.#{c}"
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
table_name = klass.table_name
|
113
|
+
file_name = "vw_#{table_name}.sql"
|
114
|
+
File.open(File.join(target_dir,file_name), "w") do |f|
|
115
|
+
f.puts <<EOSQL
|
116
|
+
create or replace function f_fixfalse(s text) returns text as $$
|
117
|
+
begin
|
118
|
+
return case when s = 'false' then null else s end;
|
119
|
+
end
|
120
|
+
$$ language plpgsql;
|
121
|
+
|
122
|
+
drop view if exists vw_#{klass.table_name};
|
123
|
+
create or replace view vw_#{klass.table_name} as
|
124
|
+
select
|
125
|
+
#{columns.join(",\n ")}
|
126
|
+
from #{klass.table_name} main
|
127
|
+
#{joins.join("\n ")};
|
128
|
+
|
129
|
+
grant select on vw_#{klass.table_name} to public;
|
130
|
+
EOSQL
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
76
134
|
private
|
77
135
|
def fk_opts(from, to, column)
|
78
136
|
name = "fk_#{from}_#{to}_#{column}"
|
data/lib/marty/version.rb
CHANGED
data/marty.gemspec
CHANGED
@@ -6,12 +6,14 @@ Gem::Specification.new do |s|
|
|
6
6
|
s.name = "marty"
|
7
7
|
s.version = Marty::VERSION
|
8
8
|
s.authors = [
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
9
|
+
"Arman Bostani",
|
10
|
+
"Brian VanLoo",
|
11
|
+
"Chad Edie",
|
12
|
+
"Eric Litwin",
|
13
|
+
"Iliana Toneva",
|
14
|
+
"Jock Cooper",
|
15
|
+
"Masaki Matsuo",
|
16
|
+
]
|
15
17
|
s.email = ["arman.bostani@pnmac.com"]
|
16
18
|
s.homepage = "https://github.com/arman000/marty"
|
17
19
|
s.summary = "A framework for working with versioned data"
|
@@ -0,0 +1,23 @@
|
|
1
|
+
create or replace function f_fixfalse(s text) returns text as $$
|
2
|
+
begin
|
3
|
+
return case when s = 'false' then null else s end;
|
4
|
+
end
|
5
|
+
$$ language plpgsql;
|
6
|
+
|
7
|
+
drop view if exists vw_marty_postings;
|
8
|
+
create or replace view vw_marty_postings as
|
9
|
+
select
|
10
|
+
concat(u.firstname, ' ', u.lastname) AS user_name,
|
11
|
+
concat(ou.firstname, ' ', ou.lastname) AS obsoleted_user,
|
12
|
+
main.id,
|
13
|
+
main.group_id,
|
14
|
+
main.created_dt,
|
15
|
+
main.obsoleted_dt,
|
16
|
+
main.name,
|
17
|
+
marty_posting_types1.name as posting_type_name
|
18
|
+
from marty_postings main
|
19
|
+
join marty_users u on main.user_id = u.id
|
20
|
+
left join marty_users ou on main.o_user_id = ou.id
|
21
|
+
left join marty_posting_types marty_posting_types1 on main.posting_type_id = marty_posting_types1.id;
|
22
|
+
|
23
|
+
grant select on vw_marty_postings to public;
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module Marty
|
4
|
+
describe "Migrations" do
|
5
|
+
it "writes db views correctly" do
|
6
|
+
tdir = File.dirname(__FILE__) + "/migrations/"
|
7
|
+
Marty::Migrations.write_view(tdir, Marty::Posting, {}, ["comment"])
|
8
|
+
filename = "vw_marty_postings.sql"
|
9
|
+
genfile = File.join(tdir,filename)
|
10
|
+
generated = File.read(genfile)
|
11
|
+
expected = File.read(File.join(tdir,"#{filename}.expected"))
|
12
|
+
expect(generated).to eq(expected)
|
13
|
+
File.delete(genfile)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/spec/models/config_spec.rb
CHANGED
metadata
CHANGED
@@ -1,18 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: marty
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.27
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arman Bostani
|
8
|
-
- Eric Litwin
|
9
8
|
- Brian VanLoo
|
10
|
-
- Iliana Toneva
|
11
9
|
- Chad Edie
|
10
|
+
- Eric Litwin
|
11
|
+
- Iliana Toneva
|
12
|
+
- Jock Cooper
|
13
|
+
- Masaki Matsuo
|
12
14
|
autorequire:
|
13
15
|
bindir: bin
|
14
16
|
cert_chain: []
|
15
|
-
date: 2016-01
|
17
|
+
date: 2016-02-01 00:00:00.000000000 Z
|
16
18
|
dependencies:
|
17
19
|
- !ruby/object:Gem::Dependency
|
18
20
|
name: pg
|
@@ -533,6 +535,8 @@ files:
|
|
533
535
|
- spec/job_helper.rb
|
534
536
|
- spec/lib/data_exporter_spec.rb
|
535
537
|
- spec/lib/data_importer_spec.rb
|
538
|
+
- spec/lib/migrations/vw_marty_postings.sql.expected
|
539
|
+
- spec/lib/migrations_spec.rb
|
536
540
|
- spec/lib/xl_spec.rb
|
537
541
|
- spec/lib/xl_styles_spec.rb
|
538
542
|
- spec/models/api_auth_spec.rb
|