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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e88e75d270f7cc03ce9ddbc77fcff6b1e1629b63
4
- data.tar.gz: 6f905a9038c414ec5722804b60ef273aebc2d2db
3
+ metadata.gz: 7a3336670f870920df522354766443beb74444a6
4
+ data.tar.gz: 024d51ba48f744d2f79cf94c944aba5738bfb162
5
5
  SHA512:
6
- metadata.gz: 097760432e2d1378f55b67c1346717c187aeae219337f44ba2198baba28b68d35ae1270598e2026a51e7212700eaa93968c6dfce579156172af3d69d453d1818
7
- data.tar.gz: 512672c23ba38b00572a2e16b7fa6b0ff50086276fa0e44cd5474b3b58d04b054d7d86051818f4e5d2740e05b422642e2ca7458c30a8d16d8c620a614b0c042c
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
@@ -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}"
@@ -1,3 +1,3 @@
1
1
  module Marty
2
- VERSION = "0.5.26"
2
+ VERSION = "0.5.27"
3
3
  end
@@ -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
- "Arman Bostani",
10
- "Eric Litwin",
11
- "Brian VanLoo",
12
- "Iliana Toneva",
13
- "Chad Edie",
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
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Marty
4
- describe Config do
4
+ describe Marty::Config do
5
5
  describe "validations" do
6
6
  it "should return valid config value based on key" do
7
7
  Marty::Config["TEST 1"] = 2
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.26
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-25 00:00:00.000000000 Z
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