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 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