pact_broker 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (131) hide show
  1. checksums.yaml +5 -13
  2. data/.gitignore +0 -1
  3. data/.rspec +1 -0
  4. data/CHANGELOG.md +47 -0
  5. data/README.md +4 -2
  6. data/config.ru +3 -5
  7. data/db/migrations/09_add_timestamps.rb +12 -0
  8. data/db/migrations/10_populate_timestamps.rb +15 -0
  9. data/db/migrations/11_made_timestamps_mandatory.rb +20 -0
  10. data/db/migrations/12_create_webhooks_table.rb +21 -0
  11. data/db/migrations/13_add_columns_to_webhooks.rb +8 -0
  12. data/lib/pact_broker/api.rb +14 -0
  13. data/lib/pact_broker/api/decorators.rb +2 -2
  14. data/lib/pact_broker/api/decorators/base_decorator.rb +2 -1
  15. data/lib/pact_broker/api/decorators/basic_pacticipant_decorator.rb +21 -0
  16. data/lib/pact_broker/api/decorators/decorator_context.rb +20 -0
  17. data/lib/pact_broker/api/decorators/latest_pact_decorator.rb +2 -2
  18. data/lib/pact_broker/api/decorators/pact_decorator.rb +12 -5
  19. data/lib/pact_broker/api/decorators/pact_details_decorator.rb +22 -0
  20. data/lib/pact_broker/api/decorators/pacticipant_decorator.rb +6 -4
  21. data/lib/pact_broker/api/decorators/relationships_csv_decorator.rb +25 -3
  22. data/lib/pact_broker/api/decorators/representable_pact.rb +3 -1
  23. data/lib/pact_broker/api/decorators/tag_decorator.rb +3 -0
  24. data/lib/pact_broker/api/decorators/webhook_decorator.rb +52 -0
  25. data/lib/pact_broker/api/decorators/webhook_execution_result_decorator.rb +58 -0
  26. data/lib/pact_broker/api/decorators/webhook_request_decorator.rb +18 -0
  27. data/lib/pact_broker/api/decorators/webhooks_decorator.rb +37 -0
  28. data/lib/pact_broker/api/pact_broker_urls.rb +16 -0
  29. data/lib/pact_broker/api/renderers/html_pact_renderer.rb +2 -1
  30. data/lib/pact_broker/api/resources/base_resource.rb +12 -1
  31. data/lib/pact_broker/api/resources/group.rb +38 -0
  32. data/lib/pact_broker/api/resources/index.rb +30 -21
  33. data/lib/pact_broker/api/resources/latest_pact.rb +1 -1
  34. data/lib/pact_broker/api/resources/latest_pacts.rb +1 -1
  35. data/lib/pact_broker/api/resources/pact.rb +18 -2
  36. data/lib/pact_broker/api/resources/pact_webhooks.rb +87 -0
  37. data/lib/pact_broker/api/resources/pacticipant.rb +15 -6
  38. data/lib/pact_broker/api/resources/pacticipants.rb +1 -1
  39. data/lib/pact_broker/api/resources/tag.rb +2 -2
  40. data/lib/pact_broker/api/resources/webhook.rb +44 -0
  41. data/lib/pact_broker/api/resources/webhook_execution.rb +43 -0
  42. data/lib/pact_broker/api/resources/webhooks.rb +29 -0
  43. data/lib/pact_broker/app.rb +46 -8
  44. data/lib/pact_broker/db.rb +10 -0
  45. data/lib/pact_broker/doc/controllers/app.rb +32 -0
  46. data/lib/pact_broker/doc/views/latest-pacts.markdown +3 -0
  47. data/lib/pact_broker/doc/views/layouts/main.haml +5 -0
  48. data/lib/pact_broker/doc/views/pacticipants.markdown +10 -0
  49. data/lib/pact_broker/doc/views/self.markdown +8 -0
  50. data/lib/pact_broker/doc/views/webhooks.markdown +48 -0
  51. data/lib/pact_broker/functions/groupify.rb +39 -0
  52. data/lib/pact_broker/jobs/after_pact_save.rb +13 -0
  53. data/lib/pact_broker/json.rb +4 -0
  54. data/lib/pact_broker/locale/en.yml +23 -0
  55. data/lib/pact_broker/messages.rb +18 -0
  56. data/lib/pact_broker/models/group.rb +21 -0
  57. data/lib/pact_broker/models/pact.rb +4 -2
  58. data/lib/pact_broker/models/pacticipant.rb +3 -1
  59. data/lib/pact_broker/models/relationship.rb +34 -0
  60. data/lib/pact_broker/models/tag.rb +3 -1
  61. data/lib/pact_broker/models/version.rb +3 -1
  62. data/lib/pact_broker/models/webhook.rb +53 -0
  63. data/lib/pact_broker/models/webhook_execution_result.rb +26 -0
  64. data/lib/pact_broker/models/webhook_request.rb +107 -0
  65. data/lib/pact_broker/models/webhook_request_header.rb +13 -0
  66. data/lib/pact_broker/repositories.rb +6 -0
  67. data/lib/pact_broker/repositories/pact_repository.rb +25 -7
  68. data/lib/pact_broker/repositories/pacticipant_repository.rb +4 -0
  69. data/lib/pact_broker/repositories/webhook_repository.rb +134 -0
  70. data/lib/pact_broker/services.rb +10 -0
  71. data/lib/pact_broker/services/group_service.rb +24 -0
  72. data/lib/pact_broker/services/pact_service.rb +37 -7
  73. data/lib/pact_broker/services/pacticipant_service.rb +12 -1
  74. data/lib/pact_broker/services/webhook_service.rb +63 -0
  75. data/lib/pact_broker/tasks.rb +0 -1
  76. data/lib/pact_broker/ui/controllers/base_controller.rb +1 -0
  77. data/lib/pact_broker/ui/controllers/groups.rb +25 -0
  78. data/lib/pact_broker/ui/controllers/relationships.rb +0 -2
  79. data/lib/pact_broker/ui/helpers/url_helper.rb +17 -0
  80. data/lib/pact_broker/ui/view_models/relationship.rb +13 -4
  81. data/lib/pact_broker/ui/view_models/relationships.rb +1 -1
  82. data/lib/pact_broker/ui/views/groups/show.html.erb +409 -0
  83. data/lib/pact_broker/ui/views/relationships/show.haml +4 -2
  84. data/lib/pact_broker/version.rb +1 -1
  85. data/pact_broker.gemspec +7 -6
  86. data/public/{d3.v3.js.pagespeed.ce.dFNRrGTALe.js → javascripts/d3.v3.js.pagespeed.ce.dFNRrGTALe.js} +0 -0
  87. data/public/stylesheets/relationships.css +4 -0
  88. data/spec/integration/endpoints/group.rb +22 -0
  89. data/spec/lib/pact_broker/api/decorators/pact_decorator_spec.rb +49 -0
  90. data/spec/lib/pact_broker/api/decorators/pacticipant_decorator_spec.rb +25 -0
  91. data/spec/lib/pact_broker/api/decorators/relationships_csv_decorator_spec.rb +7 -4
  92. data/spec/lib/pact_broker/api/decorators/webhook_decorator_spec.rb +121 -0
  93. data/spec/lib/pact_broker/api/decorators/webhook_execution_result_decorator_spec.rb +69 -0
  94. data/spec/lib/pact_broker/api/decorators/webhook_request_decorator_spec.rb +78 -0
  95. data/spec/lib/pact_broker/api/decorators/webhooks_decorator_spec.rb +46 -0
  96. data/spec/lib/pact_broker/api/resources/group_spec.rb +80 -0
  97. data/spec/lib/pact_broker/api/resources/pact_spec.rb +41 -0
  98. data/spec/lib/pact_broker/api/resources/pact_webhooks_spec.rb +184 -0
  99. data/spec/lib/pact_broker/api/resources/pacticipant_spec.rb +71 -0
  100. data/spec/lib/pact_broker/api/resources/webhook_execution_spec.rb +77 -0
  101. data/spec/lib/pact_broker/api/resources/webhook_spec.rb +60 -0
  102. data/spec/lib/pact_broker/api/resources/webhooks_spec.rb +44 -0
  103. data/spec/lib/pact_broker/doc/controllers/app_spec.rb +51 -0
  104. data/spec/lib/pact_broker/functions/groupify_spec.rb +50 -0
  105. data/spec/lib/pact_broker/models/group_spec.rb +26 -0
  106. data/spec/lib/pact_broker/models/webhook_request_spec.rb +175 -0
  107. data/spec/lib/pact_broker/models/webhook_spec.rb +59 -0
  108. data/spec/lib/pact_broker/repositories/pact_repository_spec.rb +40 -0
  109. data/spec/lib/pact_broker/repositories/webhook_repository_spec.rb +257 -0
  110. data/spec/lib/pact_broker/services/group_service_spec.rb +52 -0
  111. data/spec/lib/pact_broker/services/pact_service_spec.rb +49 -0
  112. data/spec/lib/pact_broker/services/pacticipant_service_spec.rb +50 -0
  113. data/spec/lib/pact_broker/services/webhook_service_spec.rb +51 -0
  114. data/spec/lib/pact_broker/ui/view_models/relationship_spec.rb +20 -6
  115. data/spec/lib/pact_broker/ui/view_models/relationships_spec.rb +33 -0
  116. data/spec/service_consumers/provider_states_for_pact_broker_client.rb +1 -1
  117. data/spec/spec_helper.rb +11 -4
  118. data/spec/support/provider_state_builder.rb +11 -0
  119. data/spec/support/shared_examples_for_responses.rb +25 -0
  120. data/vendor/hal-browser/js/hal/views/embedded_resource.js +3 -3
  121. data/vendor/hal-browser/js/hal/views/resource.js +3 -3
  122. metadata +174 -80
  123. data/assets/d3.v3.js +0 -9263
  124. data/assets/force.csv +0 -29
  125. data/assets/index.html +0 -186
  126. data/assets/index2.html +0 -224
  127. data/assets/relationships +0 -4
  128. data/assets/stylesheets/github.css +0 -387
  129. data/lib/pact_broker/tasks/delete.rake +0 -20
  130. data/public/Network Graph REA.html +0 -48
  131. data/public/rea.csv +0 -10
@@ -1,20 +0,0 @@
1
- namespace :pact_broker do
2
-
3
- namespace :pacticipant do
4
-
5
- desc 'Delete pacticipant and all pacts, tags and versions related to that pacticipant'
6
- task :delete, [:name] do | task, args |
7
- name = args.to_hash.fetch(:name)
8
- puts "Deleting pacticipant '#{name}' and all related pacts, tags and versions"
9
- require 'sequel'
10
- require 'pact_broker/models/pacticipant'
11
- connection = PactBroker::Models::Pacticipant.new.db
12
- connection.run("delete from tags where version_id IN (select id from versions where pacticipant_id IN (select id from pacticipants where name = '#{name}'))")
13
- connection.run("delete from pacts where version_id IN (select id from versions where pacticipant_id IN (select id from pacticipants where name = '#{name}'))")
14
- connection.run("delete from pacts where provider_id IN (select id from pacticipants where name = '#{name}')")
15
- connection.run("delete from versions where pacticipant_id IN (select id from pacticipants where name = '#{name}')")
16
- connection.run("delete from pacticipants where name = '#{name}'")
17
- end
18
- end
19
-
20
- end
@@ -1,48 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="utf-8">
5
- <title>Network Graph</title>
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
- <meta name="description" content="Graph of OHSU social networks. Data is fake to demonstrate chart functionality">
8
- <meta name="author" content="Duncan Alexander">
9
- <script type="text/javascript" src="d3.v3.js.pagespeed.ce.dFNRrGTALe.js"></script>
10
- <style>body{font-family:"Helvetica Neue",Arial,sans-serif;font-size:.75em;font-weight:bold;padding:2em}#legend{display:inline-block;width:600;height:200}</style>
11
- <!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
12
- <!--[if lt IE 9]>
13
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
14
- <![endif]-->
15
- <script type="text/javascript">var _gaq=_gaq||[];_gaq.push(['_setAccount','UA-12488381-2']);_gaq.push(['_trackPageview']);(function(){var ga=document.createElement('script');ga.type='text/javascript';ga.async=true;ga.src=('https:'==document.location.protocol?'https://ssl':'http://www')+'.google-analytics.com/ga.js';var s=document.getElementsByTagName('script')[0];s.parentNode.insertBefore(ga,s);})();</script>
16
- <!-- developed by Duncan Alexander - hypothete.com -->
17
- </head>
18
- <body>
19
- <h1>Network Graph</h1>
20
- <p>Developed for Oregon Health and Science University. This version of the graph uses example data to demonstrate chart functionality.</p>
21
- <div id="legend" </div>
22
- <script type="text/javascript">var w,h,svg;window.onload=function(){w=window.innerWidth;h=window.innerHeight;svg=d3.select("body").append("svg").attr("width",w).attr("height",h).attr("version",1.1).attr("xmlns","http://www.w3.org/2000/svg");var people=[];var maxgrant=0;var maxrad=0;var arraydepts=[];var maxorder=0;d3.text("rea.csv",function(unparsedData){var data=d3.csv.parseRows(unparsedData);data.forEach(function(d){var person={id:d[0],department:d[1],interviewed:parseInt(d[2]),grants:parseInt(d[3])||0,order:parseInt(d[5]),children:d.slice(6).filter(function(e){if(parseInt(e)!=NaN){return e;}})};if(person.grants>maxgrant){maxgrant=person.grants;}
23
- if(person.order>maxorder){maxorder=person.order;}
24
- if(arraydepts.indexOf(person.department)==-1){arraydepts.push(person.department);}
25
- people.push(person);});people.sort(function(a,b){return d3.ascending(a.order,b.order);});var lookup={};var radius=Math.max(100,people.length*2.5);if(3*radius>w){w=3*radius;svg.attr("width",w);}
26
- if(3.5*radius>h){h=3.5*radius;svg.attr("height",h);}
27
- maxrad=(radius*Math.PI/people.length)+2;lastdept='';var g=svg.selectAll("g").data(people).enter().append("g").attr("transform",function(d,i){var x=radius*Math.sin(2*Math.PI*(i/people.length))+w/2;var y=radius*Math.cos(2*Math.PI*(i/people.length))+h/2;lookup[d.id]={x:x,y:y,i:i};return"translate("+x+","+y+")";}).attr("id",function(d,i){return i;}).attr("class",function(d){if(d.department!=lastdept){lastdept=d.department;return lastdept;}
28
- else{return"";}});var pairs=[];people.forEach(function(d){d.children.forEach(function(e){if(lookup[e]){pairs.push([d.id,e]);}});});pairs.forEach(function(f){for(var i=0;i<pairs.length;i++){if(f[0]==pairs[i][1]&&f[1]==pairs[i][0]){pairs.splice(i,1);f[2]=2;}}});pairs.sort(function(a,b){return d3.ascending(a[0],b[0]);});var lineo=g.selectAll("path").data(function(d){var mypairs=[];pairs.forEach(function(g){var dummypair=[];if(g[0]==d.id){dummypair[0]=g[0];dummypair[1]=g[1];if(g[2]){dummypair[2]=g[2];}
29
- else{dummypair[2]=0;}
30
- mypairs.push(dummypair);}
31
- else if(g[1]==d.id){dummypair[0]=g[1];dummypair[1]=g[0];if(g[2]){dummypair[2]=g[2];}
32
- else{dummypair[2]=1;}
33
- mypairs.push(dummypair);}});return mypairs;}).enter().append("path").attr("d",function(d){var dx=lookup[d[1]].x-lookup[d[0]].x;var dy=lookup[d[1]].y-lookup[d[0]].y;var dr=Math.sqrt(dx*dx+dy*dy);var inout=0;var bigsmall=0;if((lookup[d[1]].i>lookup[d[0]].i&&Math.abs(lookup[d[1]].i-lookup[d[0]].i)<=people.length/2)||(lookup[d[1]].i<lookup[d[0]].i&&Math.abs(lookup[d[1]].i-lookup[d[0]].i)>=people.length/2)){inout=1;}
34
- return"M"+0+","+0+"A"+dr+", "+dr+" 0 0,"+inout+" "+dx+","+dy;}).attr("stroke",function(d){if(d[2]==0){return"red";}
35
- else if(d[2]==1){return"teal";}
36
- else{return"purple";}}).attr("stroke-width",".35").attr("opacity",".5").attr("fill","none").attr("class",function(d){return d[0]+" "+d[1]+" "+lookup[d[0]].i;});var ordcols=d3.scale.category10().domain([0,arraydepts.length]);var cirscale=d3.scale.quantile().domain([0,1000000,5000000,15000000,70000000]).range([3,maxrad/3,maxrad/2,3*maxrad/4,maxrad]);var circles=g.append("circle").attr("r",function(d){return cirscale(d.grants);}).attr("fill",function(d){if(d.interviewed){return ordcols(arraydepts.indexOf(d.department));}
37
- else{return"white";}}).attr("stroke",function(d){return ordcols(arraydepts.indexOf(d.department));}).attr("stroke-width",2).attr("cx",function(d,i){return cirscale(d.grants)*Math.sin(2*Math.PI*i/people.length);}).attr("cy",function(d,i){return cirscale(d.grants)*Math.cos(2*Math.PI*i/people.length);});var text=g.append("text").text(function(d){return this.parentNode.className.animVal;}).attr("x",function(d,i){if(i<=people.length/2){return 2*maxrad;}
38
- else{return-2*maxrad;}}).attr("text-anchor",function(d,i){if(i<=people.length/2){return"start";}
39
- else{return"end";}}).attr("transform",function(d,i){if(i<=people.length/2){return"rotate("+90*Math.cos(2*Math.PI*i/people.length)+")";}
40
- else{return"rotate("+-90*Math.cos(2*Math.PI*i/people.length)+")";}}).attr("fill",function(d){return ordcols(arraydepts.indexOf(d.department));});circles.on("mouseover",function(){svg.selectAll("path").transition().duration(500).attr("opacity","0.1");d3.select(this.parentNode).selectAll("path").transition().duration(500).attr("opacity","1").attr("stroke-width","1");d3.select(this.parentNode).selectAll("text").transition().duration(500).text(function(d){return this.parentNode.className.animVal+" ID: "+d.id;});}).on("mouseout",function(){svg.selectAll("path").transition().duration(500).attr("stroke-width",".35").attr("opacity",".5");d3.select(this.parentNode).selectAll("text").transition().duration(500).text(function(d){return this.parentNode.className.animVal;});});legend=d3.select("#legend").append("svg").attr("width",600).attr("height",200);var circlekey=[70000000,15000000,5000000,1000000,0];var circleamts=legend.selectAll("circle").data(circlekey).enter().append("circle").attr("r",function(d){return cirscale(d);}).attr("cx",function(d,i){return i*maxrad*10+maxrad*2;}).attr("cy",maxrad*3).attr("fill",function(d,i){return ordcols(i);});function commaRound(num){var count=0;var beforeperiod='';var numstr=Math.round(num).toString();for(var i=numstr.length-1;i>=0;i--){beforeperiod=numstr.charAt(i)+beforeperiod;count+=1;if(count>2&&i>0){beforeperiod=','+beforeperiod;count=0;}}
41
- return beforeperiod;}
42
- var circtxt=legend.selectAll("text").data(circlekey).enter().append("text").text(function(d,i){return"$"+commaRound(d);}).attr("x",function(d,i){return i*maxrad*10+maxrad;}).attr("y",function(){return maxrad*6;}).attr("fill","black");var connlines=legend.selectAll("line").data([0,1,2]).enter().append("line").attr("x1",maxrad).attr("y1",function(d,i){return 100+25*d;}).attr("x2",maxrad*4).attr("y2",function(d,i){return 100+25*d;}).attr("stroke",function(d){if(d==0){return"red";}
43
- else if(d==1){return"teal";}
44
- return"purple";}).attr("stroke-width",2);legend.append("text").text("is a consumer of").attr("x",maxrad*5).attr("y",100).attr("fill","black");legend.append("text").text("is a provider for").attr("x",maxrad*5).attr("y",125).attr("fill","black");legend.append("text").text("is a consumer and a provider of").attr("x",maxrad*5).attr("y",150).attr("fill","black");legend.append("circle").attr("r",function(){return cirscale(maxgrant/2);}).attr("cx",maxrad*21).attr("cy",100).attr("stroke","red").attr("stroke-width",2).attr("fill","none");legend.append("text").text("Not interviewed").attr("x",maxrad*23).attr("y",100).attr("fill","black");legend.append("circle").attr("r",function(){return cirscale(maxgrant/2);}).attr("cx",maxrad*21).attr("cy",125).attr("fill","teal");legend.append("text").text("Interviewed").attr("x",maxrad*23).attr("y",125).attr("fill","black");legend.append("text").text("Grant amounts:").attr("x",maxrad).attr("y",10).attr("fill","black");});}</script>
45
- <script>//<![CDATA[
46
- (function(){var d=encodeURIComponent,f=window,g=document,h="documentElement",k="length",l="prototype",m="body",p="&",s="&ci=",t=",",u="?",v="Content-Type",w="Microsoft.XMLHTTP",x="Msxml2.XMLHTTP",y="POST",z="application/x-www-form-urlencoded",A="img",B="input",C="load",D="oh=",E="on",F="pagespeed_url_hash",G="url=";f.pagespeed=f.pagespeed||{};var H=f.pagespeed,I=function(a,b,c){this.c=a;this.e=b;this.d=c;this.b=this.f();this.a={}};I[l].f=function(){return{height:f.innerHeight||g[h].clientHeight||g[m].clientHeight,width:f.innerWidth||g[h].clientWidth||g[m].clientWidth}};I[l].g=function(a){a=a.getBoundingClientRect();return{top:a.top+(void 0!==f.pageYOffset?f.pageYOffset:(g[h]||g[m].parentNode||g[m]).scrollTop),left:a.left+(void 0!==f.pageXOffset?f.pageXOffset:(g[h]||g[m].parentNode||g[m]).scrollLeft)}};I[l].h=function(a){if(0>=a.offsetWidth&&0>=a.offsetHeight)return!1;a=this.g(a);var b=a.top.toString()+t+a.left.toString();if(this.a.hasOwnProperty(b))return!1;this.a[b]=!0;return a.top<=this.b.height&&a.left<=this.b.width};I[l].i=function(a){var b;if(f.XMLHttpRequest)b=new XMLHttpRequest;else if(f.ActiveXObject)try{b=new ActiveXObject(x)}catch(c){try{b=new ActiveXObject(w)}catch(e){}}if(!b)return!1;b.open(y,this.c+(-1==this.c.indexOf(u)?u:p)+G+d(this.e));b.setRequestHeader(v,z);b.send(a);return!0};I[l].k=function(){for(var a=[A,B],b=[],c={},e=0;e<a[k];++e)for(var q=g.getElementsByTagName(a[e]),n=0;n<q[k];++n){var r=q[n].getAttribute(F);r&&(q[n].getBoundingClientRect&&this.h(q[n]))&&!(r in c)&&(b.push(r),c[r]=!0)}if(0!=b[k]){a=D+this.d;a+=s+d(b[0]);for(e=1;e<b[k];++e){c=t+d(b[e]);if(131072<a[k]+c[k])break;a+=c}H.criticalImagesBeaconData=a;this.i(a)}};H.j=function(a,b,c){if(a.addEventListener)a.addEventListener(b,c,!1);else if(a.attachEvent)a.attachEvent(E+b,c);else{var e=a[E+b];a[E+b]=function(){c.call(this);e&&e.call(this)}}};H.l=function(a,b,c){var e=new I(a,b,c);H.j(f,C,function(){f.setTimeout(function(){e.k()},0)})};H.criticalImagesBeaconInit=H.l;})();pagespeed.criticalImagesBeaconInit('/mod_pagespeed_beacon','http://hypothete.com/images/2013/networkgraph/','G9EePgfFsf');
47
- //]]></script></body>
48
- </html>
@@ -1,10 +0,0 @@
1
- 1,Media Projects,1,3158419,0,1,0,0,0,0,0,0,0,0,0
2
- 2,Billee,1,3158419,0,2,0,0,0,0,0,0,0,0,0
3
- 3,Media Billee Orchestrator,1,3158419,0,3,2,1,0,0,0,0,0,0,0
4
- 4,Media Bill to Contact Sync,1,3158419,0,4,5,2,1,0,0,0,0,0,0
5
- 5,Media Bill to Contact Changes,1,3158419,0,5,0,0,0,0,0,0,0,0,0
6
- 6,Media Billing Account Sync,1,3158419,0,6,7,2,1,0,0,0,0,0,0
7
- 7,Media Billing Account Changes,1,3158419,0,7,0,0,0,0,0,0,0,0,0
8
- 8,Billee notifications,1,3158419,0,8,2,0,0,0,0,0,0,0,0
9
- 9,Billee name notifications,1,3158419,0,9,10,0,0,0,0,0,0,0,0
10
- 10,Media Project Changes,1,3158419,0,10,0,0,0,0,0,0,0,0,0