marty 0.5.26 → 0.5.27
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.
- 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
|