system_settings 0.1.0.pre → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +108 -9
  3. data/app/controllers/system_settings/root_controller.rb +1 -1
  4. data/app/models/system_settings/configurator.rb +18 -12
  5. data/app/models/system_settings/errors/settings_read_error.rb +6 -0
  6. data/app/models/system_settings/integer_list_setting.rb +1 -1
  7. data/app/models/system_settings/list_of_integers_validator.rb +6 -13
  8. data/app/models/system_settings/list_of_strings_validator.rb +36 -0
  9. data/app/models/system_settings/setting.rb +1 -1
  10. data/app/models/system_settings/string_list_setting.rb +2 -1
  11. data/app/models/system_settings/string_setting.rb +1 -0
  12. data/app/models/system_settings/type/integer_list.rb +10 -4
  13. data/app/models/system_settings/type/string_list.rb +2 -1
  14. data/config/locales/system_settings.en.yml +2 -1
  15. data/db/migrate/20181007125347_create_system_settings_settings.rb +1 -1
  16. data/frontend/build/asset-manifest.json +4 -4
  17. data/frontend/build/index.html +1 -1
  18. data/frontend/build/precache-manifest.2450e38293bed26dfe321bf03ff5acbb.js +22 -0
  19. data/frontend/build/service-worker.js +1 -1
  20. data/frontend/build/static/css/main.493112c7.chunk.css +1 -0
  21. data/frontend/build/static/js/2.17170219.chunk.js +1 -0
  22. data/frontend/build/static/js/main.dbe11b19.chunk.js +1 -0
  23. data/lib/system_settings/engine.rb +5 -0
  24. data/lib/system_settings/version.rb +1 -1
  25. data/lib/system_settings.rb +16 -0
  26. data/lib/tasks/system_settings_tasks.rake +18 -4
  27. metadata +17 -55
  28. data/frontend/build/precache-manifest.130ca067521371497dba783c23aa7e16.js +0 -22
  29. data/frontend/build/static/css/main.e262560e.chunk.css +0 -1
  30. data/frontend/build/static/js/2.83a5f4da.chunk.js +0 -1
  31. data/frontend/build/static/js/main.afaa2372.chunk.js +0 -1
@@ -0,0 +1 @@
1
+ (window.webpackJsonp=window.webpackJsonp||[]).push([[0],{116:function(e,t,a){e.exports={container:"NotFoundPage_container__35vs4"}},118:function(e,t,a){},119:function(e,t,a){e.exports={container:"ButtonBar_container__21aEr"}},120:function(e,t,a){e.exports={wrap:"ClassicSpinner_wrap__1LF2_"}},122:function(e,t,a){e.exports=a(241)},19:function(e,t,a){e.exports={table:"ListPage_table__2qY_8","empty-tr":"ListPage_empty-tr__2VxYl",name:"ListPage_name__1-Gs-",description:"ListPage_description__1Sci0",value:"ListPage_value__3X3Vq",actions:"ListPage_actions__2iqTu"}},197:function(e,t,a){},240:function(e,t,a){},241:function(e,t,a){"use strict";a.r(t);var n=a(0),r=a.n(n),s=a(59),c=a(11),i=a(16),o=a(245),u=a(12),l=a(14),m=a.n(l),p=a(27),f=a(45),h=a(113),d=a.n(h),g=a(114);function E(e){var t=new d.a(window.__SYSTEM_SETTINGS_BASENAME__),a=Object(g.join)(t.pathname,"api",e);return t.set("pathname",a),t.href}function b(e,t){var a=new Promise(function(t){return window.setTimeout(function(){return t(e)},e)});return new Promise(function(e,n){t.then(function(t){return a.then(function(){return e(t)})},function(e){return a.then(function(){return n(e)})})})}var y="LIST_FETCH_IN_PROGRESS",_="LIST_FETCH_SUCCESSFUL",v="LIST_FETCH_FAILED",S=5;var j={fetching:!0,fetchErrorMessage:null,fetchSuccessful:null,page:0,items:[]},w=a(121),O="SETTING_FETCH_IN_PROGRESS",N="SETTING_FETCH_SUCCESSFUL",k="SETTING_FETCH_FAILED",T="SETTING_SAVE_IN_PROGRESS",C="SETTING_SAVE_SUCCESSFUL",x="SETTING_SAVE_FAILED";function L(e){return function(){var t=Object(p.a)(m.a.mark(function t(a){var n,r,s,c,i;return m.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return n=E("settings/".concat(e)),t.prev=1,a({type:O}),t.next=5,b(50,f.a.get(n));case 5:if((r=t.sent).ok){t.next=8;break}throw new Error(r.statusText);case 8:return s=r.headers.get("Authenticity-Token"),t.next=11,r.json();case 11:c=t.sent,a({type:N,authenticityToken:s,attributes:c}),t.next=20;break;case 15:throw t.prev=15,t.t0=t.catch(1),i="HTTPError"===t.t0.name?"Network request status: ".concat(t.t0.response.status," ").concat(t.t0.message):t.t0.message,a({type:k,errorMessage:i}),t.t0;case 20:case"end":return t.stop()}},t,null,[[1,15]])}));return function(e){return t.apply(this,arguments)}}()}function M(e){return function(t){return t.headers.set("X-CSRF-Token",e)}}var A={attributes:{},authenticityToken:null,fetching:!0,fetchErrorMessage:null,fetchSuccessful:null,saving:!1,lastSaveSuccessful:null,saveErrorMessage:null},I=Object(c.b)({list:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:j,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case y:return Object(u.a)({},e,{fetching:!0});case _:return Object(u.a)({},e,{fetching:!1,fetchSuccessful:!0,items:t.data.map(function(e){return{id:e.id,type:e.type,name:e.name,value:e.value,description:e.description}}),page:t.page});case v:return Object(u.a)({},e,{fetching:!1,fetchSuccessful:!1,items:[],fetchErrorMessage:t.errorMessage,page:t.page});default:return e}},setting:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:A,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case O:return Object(u.a)({},e,{fetching:!0,fetchSuccessful:null,fetchErrorMessage:null});case N:return Object(u.a)({},e,{fetching:!1,fetchSuccessful:!0,attributes:t.attributes,authenticityToken:t.authenticityToken});case k:return Object(u.a)({},e,{fetching:!1,fetchSuccessful:!1,fetchErrorMessage:t.errorMessage});case T:return Object(u.a)({},e,{saving:!0,lastSaveSuccessful:null,saveErrorMessage:null});case C:return Object(u.a)({},e,{saving:!1,lastSaveSuccessful:!0});case x:return Object(u.a)({},e,{saving:!1,lastSaveSuccessful:!1,saveErrorMessage:t.errorMessage});default:return e}},form:o.a}),P=a(6),F=a(9),R=a(8),q=a(4),G=a(7),D=a(21),V=a(34),B=a(31),H=a.n(B),U=a(116),Y=a.n(U),z=function(e){function t(){return Object(P.a)(this,t),Object(R.a)(this,Object(q.a)(t).apply(this,arguments))}return Object(G.a)(t,e),Object(F.a)(t,[{key:"render",value:function(){return r.a.createElement("div",{className:Y.a.container},"Page not found")}}]),t}(n.Component),J=a(19),X=a.n(J),K=a(48),Q=a.n(K),W=function(e){function t(){return Object(P.a)(this,t),Object(R.a)(this,Object(q.a)(t).apply(this,arguments))}return Object(G.a)(t,e),Object(F.a)(t,[{key:"render",value:function(){var e=this.props.description;return r.a.createElement("div",{className:Q.a.wrap},r.a.createElement("div",{className:Q.a.container},r.a.createElement("div",{className:Q.a["error-large"]},"An error occurred while loading the page"),r.a.createElement("div",{className:Q.a["error-small"]},e)))}}]),t}(r.a.Component),Z=(a(197),a(64)),$=a.n(Z),ee=$.a.start,te=$.a.done,ae=($.a.inc,a(1)),ne=a.n(ae),re=a(65),se=a.n(re),ce=function(e){function t(){return Object(P.a)(this,t),Object(R.a)(this,Object(q.a)(t).apply(this,arguments))}return Object(G.a)(t,e),Object(F.a)(t,[{key:"formattedValue",value:function(){var e=this.props,t=e.type,a=e.value;switch(t){case"SystemSettings::StringListSetting":case"SystemSettings::IntegerListSetting":return a?a.map(function(e,t){return r.a.createElement("span",{key:t,className:se.a.section},e)}):null;default:return r.a.createElement("span",{className:se.a.section},a)}}},{key:"render",value:function(){return r.a.createElement("span",{className:se.a.wrap},this.formattedValue())}}]),t}(r.a.Component),ie=(ne.a.string.isRequired,ne.a.any.isRequired,function(e){function t(){var e,a;Object(P.a)(this,t);for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return(a=Object(R.a)(this,(e=Object(q.a)(t)).call.apply(e,[this].concat(r)))).columnCount=4,a}return Object(G.a)(t,e),Object(F.a)(t,[{key:"componentDidMount",value:function(){this.props.fetch(1),ee()}},{key:"componentDidUpdate",value:function(e,t,a){!this.props.fetching&&e.fetching&&te()}},{key:"render",value:function(){var e=this.props,t=e.fetching,a=e.fetchSuccessful,n=e.fetchErrorMessage,s=e.list;return t?null:a?r.a.createElement("table",{className:X.a.table},r.a.createElement("thead",null,r.a.createElement("tr",null,r.a.createElement("th",{className:X.a.name},"Name"),r.a.createElement("th",{className:X.a.description},"Description"),r.a.createElement("th",{className:X.a.value},"Value"),r.a.createElement("th",{className:X.a.actions}))),r.a.createElement("tbody",null,0===s.length&&r.a.createElement("tr",{className:X.a["empty-tr"]},r.a.createElement("td",{colSpan:this.columnCount},"No settings")),s.length>0&&s.map(function(e){return r.a.createElement("tr",{key:e.id},r.a.createElement("td",{className:X.a.name},r.a.createElement(D.b,{className:"sysname",to:"/settings/".concat(e.id)},e.name)),r.a.createElement("td",{className:X.a.description},e.description),r.a.createElement("td",{className:X.a.value},r.a.createElement(ce,{type:e.type,value:e.value})),r.a.createElement("td",{className:X.a.actions},r.a.createElement(D.b,{className:X.a["primary-action"],to:"/settings/".concat(e.id,"/edit")},"Edit")))}))):r.a.createElement(W,{description:n})}}]),t}(n.Component)),oe=Object(i.b)(function(e){return{page:e.list.page,list:e.list.items,fetching:e.list.fetching,fetchSuccessful:e.list.fetchSuccessful,fetchErrorMessage:e.list.fetchErrorMessage}},function(e){return{fetch:function(t){(function(e){return function(){var t=Object(p.a)(m.a.mark(function t(a){var n,r,s;return m.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return n=E("settings"),t.prev=1,a({type:y}),t.next=5,b(50,f.a.get(n,{searchParams:{page:e,per:S}}).json());case 5:r=t.sent,a({type:_,data:r,page:e}),t.next=14;break;case 9:throw t.prev=9,t.t0=t.catch(1),s="HTTPError"===t.t0.name?"Network request status: ".concat(t.t0.response.status," ").concat(t.t0.message):t.t0.message,a({type:v,errorMessage:s,page:e}),t.t0;case 14:case"end":return t.stop()}},t,null,[[1,9]])}));return function(e){return t.apply(this,arguments)}}()})(t)(e).catch(function(){})}}})(ie),ue=";";function le(e){switch(e){case"SystemSettings::StringSetting":return"String";case"SystemSettings::StringListSetting":return"List of strings";case"SystemSettings::IntegerSetting":return"Integer";case"SystemSettings::IntegerListSetting":return"List of integers";default:return"Unknown"}}function me(e,t){switch(e){case"SystemSettings::StringListSetting":return t.map(function(e){return e&&e.replace?e.replace(ue,"\\".concat(ue)):""}).join(ue);case"SystemSettings::IntegerListSetting":return t?t.join(ue):t;default:return t}}var pe=a(66),fe=a.n(pe),he=function(e){function t(){return Object(P.a)(this,t),Object(R.a)(this,Object(q.a)(t).apply(this,arguments))}return Object(G.a)(t,e),Object(F.a)(t,[{key:"render",value:function(){var e=this.props,t=e.name,a=e.children;return r.a.createElement("div",{className:fe.a.wrap},r.a.createElement("div",{className:fe.a.name},t),r.a.createElement("div",{className:fe.a.value},a))}}]),t}(n.PureComponent),de=(ne.a.string.isRequired,ne.a.any,a(118)),ge=a.n(de),Ee=a(119),be=a.n(Ee),ye=function(e){function t(){return Object(P.a)(this,t),Object(R.a)(this,Object(q.a)(t).apply(this,arguments))}return Object(G.a)(t,e),Object(F.a)(t,[{key:"render",value:function(){var e=this.props.children;return r.a.createElement("div",{className:be.a.container},e)}}]),t}(r.a.Component),_e=function(e){function t(){return Object(P.a)(this,t),Object(R.a)(this,Object(q.a)(t).apply(this,arguments))}return Object(G.a)(t,e),Object(F.a)(t,[{key:"componentDidMount",value:function(){var e=this.props.match.params.id;ee(),this.props.fetch(e)}},{key:"componentDidUpdate",value:function(e,t,a){!this.props.fetching&&e.fetching&&te()}},{key:"render",value:function(){var e=this.props,t=e.fetching,a=e.fetchSuccessful,n=e.fetchErrorMessage,s=e.attributes,c=s.id,i=s.name,o=s.type,u=s.description,l=s.value;return t?null:a?r.a.createElement("div",{className:ge.a.wrap},r.a.createElement(he,{name:"Name"},r.a.createElement("span",{className:"sysname"},i)),r.a.createElement(he,{name:"Type",children:le(o)}),r.a.createElement(he,{name:"Description",children:u}),r.a.createElement(he,{name:"Value"},r.a.createElement(ce,{type:o,value:l})),r.a.createElement(ye,null,r.a.createElement(D.b,{className:"button primary",to:"/settings/".concat(c,"/edit")},"Edit"),r.a.createElement(D.b,{className:"button",to:"/"},"Back"))):r.a.createElement(W,{description:n})}}]),t}(n.Component),ve=Object(i.b)(function(e){return{attributes:e.setting.attributes,fetching:e.setting.fetching,fetchSuccessful:e.setting.fetchSuccessful,fetchErrorMessage:e.setting.fetchErrorMessage}},function(e,t){return{fetch:function(t){return L(t)(e)}}})(_e),Se=a(244),je=a(242),we=a(35),Oe=a.n(we),Ne=function(e){function t(){return Object(P.a)(this,t),Object(R.a)(this,Object(q.a)(t).apply(this,arguments))}return Object(G.a)(t,e),Object(F.a)(t,[{key:"render",value:function(){var e=this.props,t=e.id,a=e.type,n=e.label,s=e.hint,c=e.placeholder,i=e.input,o=e.meta,u=o.touched,l=o.error,m=Array.isArray(l)?l.join("; "):l;return r.a.createElement("div",{className:Oe.a.wrap},r.a.createElement("label",{className:Oe.a.label,htmlFor:t},n),r.a.createElement("div",{className:Oe.a["input-and-error-wrap"]},r.a.createElement("input",Object.assign({id:t,type:a,placeholder:c},i,{className:Oe.a.input,style:{width:"".concat(i.value.length,"ch")}})),u&&m&&r.a.createElement("span",{className:Oe.a.error},m)),s&&r.a.createElement("div",{className:Oe.a.hint},s))}}]),t}(r.a.Component);Ne.defaultProps={type:"text"};Object(u.a)({},je.a,{id:ne.a.string.isRequired,type:ne.a.string.isRequired,label:ne.a.string.isRequired,hint:ne.a.oneOfType([ne.a.string,ne.a.element]),placeholder:ne.a.string});var ke=a(49),Te=a.n(ke),Ce=a(63),xe=a(120),Le=a.n(xe),Me=function(e){function t(){return Object(P.a)(this,t),Object(R.a)(this,Object(q.a)(t).apply(this,arguments))}return Object(G.a)(t,e),Object(F.a)(t,[{key:"render",value:function(){var e=this.props,t=e.size,a=e.color,n=e.title,s=e.wrapperStyle,c=Object(Ce.a)(e,["size","color","title","wrapperStyle"]);return r.a.createElement("span",{className:Le.a.wrap,style:Object(u.a)({},s,{width:t,height:t})},r.a.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg"},c,{width:t,height:t,viewBox:"0 0 64 64",fill:"none",stroke:a,"aria-labelledby":"title"}),r.a.createElement("title",{id:"title"},n),r.a.createElement("g",{strokeWidth:"4",strokeLinecap:"round"},r.a.createElement("line",{y1:"12",y2:"20",transform:"translate(32,32) rotate(180)"},r.a.createElement("animate",{attributeName:"stroke-opacity",dur:"750ms",values:"1;.85;.7;.65;.55;.45;.35;.25;.15;.1;0;1",repeatCount:"indefinite"})),r.a.createElement("line",{y1:"12",y2:"20",transform:"translate(32,32) rotate(210)"},r.a.createElement("animate",{attributeName:"stroke-opacity",dur:"750ms",values:"0;1;.85;.7;.65;.55;.45;.35;.25;.15;.1;0",repeatCount:"indefinite"})),r.a.createElement("line",{y1:"12",y2:"20",transform:"translate(32,32) rotate(240)"},r.a.createElement("animate",{attributeName:"stroke-opacity",dur:"750ms",values:".1;0;1;.85;.7;.65;.55;.45;.35;.25;.15;.1",repeatCount:"indefinite"})),r.a.createElement("line",{y1:"12",y2:"20",transform:"translate(32,32) rotate(270)"},r.a.createElement("animate",{attributeName:"stroke-opacity",dur:"750ms",values:".15;.1;0;1;.85;.7;.65;.55;.45;.35;.25;.15",repeatCount:"indefinite"})),r.a.createElement("line",{y1:"12",y2:"20",transform:"translate(32,32) rotate(300)"},r.a.createElement("animate",{attributeName:"stroke-opacity",dur:"750ms",values:".25;.15;.1;0;1;.85;.7;.65;.55;.45;.35;.25",repeatCount:"indefinite"})),r.a.createElement("line",{y1:"12",y2:"20",transform:"translate(32,32) rotate(330)"},r.a.createElement("animate",{attributeName:"stroke-opacity",dur:"750ms",values:".35;.25;.15;.1;0;1;.85;.7;.65;.55;.45;.35",repeatCount:"indefinite"})),r.a.createElement("line",{y1:"12",y2:"20",transform:"translate(32,32) rotate(0)"},r.a.createElement("animate",{attributeName:"stroke-opacity",dur:"750ms",values:".45;.35;.25;.15;.1;0;1;.85;.7;.65;.55;.45",repeatCount:"indefinite"})),r.a.createElement("line",{y1:"12",y2:"20",transform:"translate(32,32) rotate(30)"},r.a.createElement("animate",{attributeName:"stroke-opacity",dur:"750ms",values:".55;.45;.35;.25;.15;.1;0;1;.85;.7;.65;.55",repeatCount:"indefinite"})),r.a.createElement("line",{y1:"12",y2:"20",transform:"translate(32,32) rotate(60)"},r.a.createElement("animate",{attributeName:"stroke-opacity",dur:"750ms",values:".65;.55;.45;.35;.25;.15;.1;0;1;.85;.7;.65",repeatCount:"indefinite"})),r.a.createElement("line",{y1:"12",y2:"20",transform:"translate(32,32) rotate(90)"},r.a.createElement("animate",{attributeName:"stroke-opacity",dur:"750ms",values:".7;.65;.55;.45;.35;.25;.15;.1;0;1;.85;.7",repeatCount:"indefinite"})),r.a.createElement("line",{y1:"12",y2:"20",transform:"translate(32,32) rotate(120)"},r.a.createElement("animate",{attributeName:"stroke-opacity",dur:"750ms",values:".85;.7;.65;.55;.45;.35;.25;.15;.1;0;1;.85",repeatCount:"indefinite"})),r.a.createElement("line",{y1:"12",y2:"20",transform:"translate(32,32) rotate(150)"},r.a.createElement("animate",{attributeName:"stroke-opacity",dur:"750ms",values:"1;.85;.7;.65;.55;.45;.35;.25;.15;.1;0;1",repeatCount:"indefinite"})))))}}]),t}(r.a.Component);Me.defaultProps={color:"currentColor",size:"1rem",title:"Loading\u2026"};var Ae=Me,Ie=function(e){function t(){return Object(P.a)(this,t),Object(R.a)(this,Object(q.a)(t).apply(this,arguments))}return Object(G.a)(t,e),Object(F.a)(t,[{key:"render",value:function(){var e=this.props,t=e.hint,a=e.handleSubmit,n=e.myHandleSubmit,s=e.error,c=e.pristine,i=e.submitting;return r.a.createElement("form",{onSubmit:a(n)},r.a.createElement("div",{className:Te.a.fields},r.a.createElement(Se.a,{name:"value",label:"Value",id:"secret_value",component:Ne,hint:t})),s&&r.a.createElement("div",{className:Te.a["error-wrap"]},r.a.createElement("div",{className:Te.a["error-message"]},r.a.createElement("div",null,"An error occurred while saving the data"),r.a.createElement("div",{className:Te.a["error-small"]},"Network request status: ",s))),r.a.createElement(ye,null,r.a.createElement("button",{className:"primary",type:"submit",disabled:c||i},r.a.createElement("span",{className:"button-wrap"},r.a.createElement("span",{className:"button-text"},"Save"),i&&r.a.createElement(Ae,{wrapperStyle:{marginLeft:"5px"},size:"1.5em"}))),r.a.createElement(D.b,{className:"button",to:"/"},"Cancel")))}}]),t}(r.a.Component);Ie.defaultProps={};ne.a.number.isRequired,ne.a.string.isRequired,ne.a.string,ne.a.oneOfType([ne.a.string,ne.a.element]),ne.a.func.isRequired,ne.a.func.isRequired,ne.a.bool,ne.a.bool,ne.a.string,ne.a.object,ne.a.string;var Pe=a(243),Fe=Object(i.b)(function(e){var t=e.setting,a=t.fetchSuccessful,n=t.attributes;return{initialValues:Object(u.a)({},n,{value:a?me(n.type,n.value):n.value})}},function(e,t){return{myHandleSubmit:function(a){return(n=t.id,r=t.authenticityToken,s={value:a.value},function(){var e=Object(p.a)(m.a.mark(function e(t){var a,c,i,o,u;return m.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return a=E("settings/".concat(n)),t({type:T}),e.prev=2,e.next=5,b(300,f.a.put(a,{json:s,hooks:{beforeRequest:[M(r)]}}));case 5:return c=e.sent,e.next=8,c.json();case 8:i=e.sent,t({type:C,attributes:i}),e.next=34;break;case 12:if(e.prev=12,e.t0=e.catch(2),t({type:x,errorMessage:e.t0.name}),"HTTPError"!==e.t0.name){e.next=33;break}if(422!==e.t0.response.status){e.next=29;break}return e.prev=17,e.next=20,e.t0.response.json();case 20:o=e.sent,e.next=26;break;case 23:throw e.prev=23,e.t1=e.catch(17),new w.a({_error:e.t0.message});case 26:throw new w.a(o.errors);case 29:throw u="".concat(e.t0.response.status," ").concat(e.t0.message),new w.a({_error:u});case 31:e.next=34;break;case 33:throw new w.a({_error:e.t0.message});case 34:case"end":return e.stop()}},e,null,[[2,12],[17,23]])}));return function(t){return e.apply(this,arguments)}}())(e);var n,r,s}}})(Object(Pe.a)({form:"edit-setting"})(Ie)),Re=function(e){function t(){return Object(P.a)(this,t),Object(R.a)(this,Object(q.a)(t).apply(this,arguments))}return Object(G.a)(t,e),Object(F.a)(t,[{key:"componentDidMount",value:function(){var e=this.props.match.params.id;ee(),this.props.fetch(e)}},{key:"componentDidUpdate",value:function(e,t,a){!this.props.fetching&&e.fetching&&te()}},{key:"hint",value:function(e){switch(e){case"SystemSettings::StringListSetting":case"SystemSettings::IntegerListSetting":return r.a.createElement(r.a.Fragment,null,"Separate values by ",r.a.createElement("code",null,";")," character.");default:return null}}},{key:"render",value:function(){var e=this.props,t=e.fetching,a=e.fetchSuccessful,n=e.fetchErrorMessage,s=e.authenticityToken,c=e.attributes,i=c.id,o=c.name,u=c.description,l=c.type;return t?null:a?r.a.createElement("div",null,r.a.createElement(he,{name:"Name"},r.a.createElement("span",{className:"sysname"},o)),r.a.createElement(he,{name:"Type"},le(l)),r.a.createElement(he,{name:"Description"},u),r.a.createElement(Fe,{id:i,authenticityToken:s,hint:this.hint(l)})):r.a.createElement(W,{description:n})}}]),t}(n.Component),qe=Object(i.b)(function(e){return{attributes:e.setting.attributes,authenticityToken:e.setting.authenticityToken,fetching:e.setting.fetching,fetchSuccessful:e.setting.fetchSuccessful,fetchErrorMessage:e.setting.fetchErrorMessage}},function(e){return{fetch:function(t){L(t)(e).catch(function(){})}}})(Re),Ge=function(e){function t(){return Object(P.a)(this,t),Object(R.a)(this,Object(q.a)(t).apply(this,arguments))}return Object(G.a)(t,e),Object(F.a)(t,[{key:"render",value:function(){var e=window.__SYSTEM_SETTINGS_BASENAME__;return r.a.createElement(D.a,{basename:e},r.a.createElement("div",{className:H.a.container},r.a.createElement("div",{className:H.a["header-wrap"]},r.a.createElement("div",{className:H.a.header},r.a.createElement(D.b,{to:"/",className:H.a["header-name"]},this.props.name))),r.a.createElement("div",{className:H.a["header-spacer"]}),r.a.createElement("div",{className:H.a["content-wrap"]},r.a.createElement("div",{className:H.a.content},r.a.createElement(V.c,null,r.a.createElement(V.a,{exact:!0,path:"/",component:oe}),r.a.createElement(V.a,{path:"/settings/:id/edit",component:qe}),r.a.createElement(V.a,{path:"/settings/:id",component:ve}),r.a.createElement(V.a,{component:z}))))))}}]),t}(n.Component);Ge.defaultProps={name:"System Settings"};var De=Ge,Ve=(a(240),Object(c.c)(I)),Be=document.getElementById("root");window.__SYSTEM_SETTINGS_BASENAME__||(window.__SYSTEM_SETTINGS_BASENAME__="/system_settings"),Object(s.render)(r.a.createElement(i.a,{store:Ve},r.a.createElement(De,null)),Be)},31:function(e,t,a){e.exports={container:"App_container__BLGGc","header-wrap":"App_header-wrap__3DnwX",header:"App_header__1o2Y8","header-name":"App_header-name__2XXxc","header-spacer":"App_header-spacer__3F0KU","content-wrap":"App_content-wrap__1oPWs",content:"App_content__3dh9P"}},35:function(e,t,a){e.exports={wrap:"LabeledInput_wrap__2KAyr",label:"LabeledInput_label__1AyjZ","input-and-error-wrap":"LabeledInput_input-and-error-wrap__2iJKd",error:"LabeledInput_error__2QBpW",hint:"LabeledInput_hint__rAeG8"}},48:function(e,t,a){e.exports={wrap:"PageLoadError_wrap__mpF75",container:"PageLoadError_container__kcD9o","error-small":"PageLoadError_error-small__14Fex"}},49:function(e,t,a){e.exports={"error-wrap":"SettingForm_error-wrap__3SdnI","error-message":"SettingForm_error-message__uQK1Y","error-small":"SettingForm_error-small__3owRp"}},65:function(e,t,a){e.exports={wrap:"Value_wrap__3J_8z",section:"Value_section__cgQmL"}},66:function(e,t,a){e.exports={wrap:"Attribute_wrap__1Zy9J",name:"Attribute_name__3a-cD",value:"Attribute_value__IxZCj"}}},[[122,1,2]]]);
@@ -13,5 +13,10 @@ module SystemSettings
13
13
  isolate_namespace SystemSettings
14
14
  config.generators.api_only = true
15
15
  config.middleware.use ActionDispatch::Static, frontend_build_path
16
+ config.after_initialize do
17
+ SystemSettings.settings_file_path = ENV.fetch("SYSTEM_SETTINGS_PATH") do
18
+ Rails.root.join("config", "system_settings.rb")
19
+ end
20
+ end
16
21
  end
17
22
  end
@@ -1,3 +1,3 @@
1
1
  module SystemSettings
2
- VERSION = '0.1.0.pre'
2
+ VERSION = "0.1.0".freeze
3
3
  end
@@ -1,7 +1,23 @@
1
1
  require "system_settings/engine"
2
2
 
3
3
  module SystemSettings
4
+ @@settings_file_path = nil
5
+
6
+ def self.settings_file_path
7
+ @@settings_file_path
8
+ end
9
+
10
+ def self.settings_file_path=(value)
11
+ @@settings_file_path = value
12
+ end
13
+
4
14
  def self.[](name)
5
15
  Setting.find_by!(name: name).value
6
16
  end
17
+
18
+ def self.reset_to_defaults
19
+ configurator = Configurator.from_file(settings_file_path)
20
+ configurator.purge
21
+ configurator.persist
22
+ end
7
23
  end
@@ -1,4 +1,18 @@
1
- # desc "Explaining what the task does"
2
- # task :system_settings do
3
- # # Task goes here
4
- # end
1
+ namespace :system_settings do
2
+ desc "Load system settings from SYSTEM_SETTINGS_PATH or config/system_settings.rb file"
3
+ task :load => [:environment] do
4
+ configurator = SystemSettings::Configurator.from_file(SystemSettings.settings_file_path)
5
+ configurator.purge
6
+ configurator.persist
7
+ end
8
+
9
+ desc "Delete all system settings"
10
+ task :purge => [:environment] do
11
+ SystemSettings::Configurator.purge
12
+ end
13
+
14
+ desc "Reset settings to values from SYSTEM_SETTINGS_PATH or config/system_settings.rb file"
15
+ task :reset => [:environment] do
16
+ SystemSettings.reset_to_defaults
17
+ end
18
+ end
metadata CHANGED
@@ -1,72 +1,32 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: system_settings
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.pre
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Krists Ozols
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-01 00:00:00.000000000 Z
11
+ date: 2019-05-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: 5.2.1
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: 5.2.1
27
- - !ruby/object:Gem::Dependency
28
- name: pry
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: sqlite3
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: 1.3.13
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: 1.3.13
55
- - !ruby/object:Gem::Dependency
56
- name: i18n-debug
57
15
  requirement: !ruby/object:Gem::Requirement
58
16
  requirements:
59
17
  - - ">="
60
18
  - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
19
+ version: '5.0'
20
+ type: :runtime
63
21
  prerelease: false
64
22
  version_requirements: !ruby/object:Gem::Requirement
65
23
  requirements:
66
24
  - - ">="
67
25
  - !ruby/object:Gem::Version
68
- version: '0'
69
- description: Description of SystemSettings.
26
+ version: '5.0'
27
+ description: |2
28
+ SystemSettings is a Rails engine that adds settings functionality.
29
+ Initial setting values can be loaded from file and later edited in a SystemSettings provided admin panel.
70
30
  email:
71
31
  - krists.ozols@gmail.com
72
32
  executables: []
@@ -80,9 +40,11 @@ files:
80
40
  - app/controllers/system_settings/settings_controller.rb
81
41
  - app/models/system_settings/application_record.rb
82
42
  - app/models/system_settings/configurator.rb
43
+ - app/models/system_settings/errors/settings_read_error.rb
83
44
  - app/models/system_settings/integer_list_setting.rb
84
45
  - app/models/system_settings/integer_setting.rb
85
46
  - app/models/system_settings/list_of_integers_validator.rb
47
+ - app/models/system_settings/list_of_strings_validator.rb
86
48
  - app/models/system_settings/setting.rb
87
49
  - app/models/system_settings/string_list_setting.rb
88
50
  - app/models/system_settings/string_setting.rb
@@ -94,11 +56,11 @@ files:
94
56
  - frontend/build/asset-manifest.json
95
57
  - frontend/build/favicon.ico
96
58
  - frontend/build/index.html
97
- - frontend/build/precache-manifest.130ca067521371497dba783c23aa7e16.js
59
+ - frontend/build/precache-manifest.2450e38293bed26dfe321bf03ff5acbb.js
98
60
  - frontend/build/service-worker.js
99
- - frontend/build/static/css/main.e262560e.chunk.css
100
- - frontend/build/static/js/2.83a5f4da.chunk.js
101
- - frontend/build/static/js/main.afaa2372.chunk.js
61
+ - frontend/build/static/css/main.493112c7.chunk.css
62
+ - frontend/build/static/js/2.17170219.chunk.js
63
+ - frontend/build/static/js/main.dbe11b19.chunk.js
102
64
  - frontend/build/static/js/runtime~main.a09e9b82.js
103
65
  - lib/system_settings.rb
104
66
  - lib/system_settings/engine.rb
@@ -119,12 +81,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
119
81
  version: '0'
120
82
  required_rubygems_version: !ruby/object:Gem::Requirement
121
83
  requirements:
122
- - - ">"
84
+ - - ">="
123
85
  - !ruby/object:Gem::Version
124
- version: 1.3.1
86
+ version: '0'
125
87
  requirements: []
126
88
  rubygems_version: 3.0.3
127
89
  signing_key:
128
90
  specification_version: 4
129
- summary: Summary of SystemSettings.
91
+ summary: Settings for your Rails application
130
92
  test_files: []
@@ -1,22 +0,0 @@
1
- self.__precacheManifest = (self.__precacheManifest || []).concat([
2
- {
3
- "revision": "e04ed1ed3403d21f675ed787109671dd",
4
- "url": "/system_settings/index.html"
5
- },
6
- {
7
- "revision": "b12967943154ae7a6202",
8
- "url": "/system_settings/static/css/main.e262560e.chunk.css"
9
- },
10
- {
11
- "revision": "fbb0a923d9fbb93afddb",
12
- "url": "/system_settings/static/js/2.83a5f4da.chunk.js"
13
- },
14
- {
15
- "revision": "b12967943154ae7a6202",
16
- "url": "/system_settings/static/js/main.afaa2372.chunk.js"
17
- },
18
- {
19
- "revision": "1b52e032205e59a9e84f",
20
- "url": "/system_settings/static/js/runtime~main.a09e9b82.js"
21
- }
22
- ]);
@@ -1 +0,0 @@
1
- .App_container__BLGGc{min-height:100vh;display:flex;flex-direction:column;position:relative;z-index:auto}.App_header-wrap__3DnwX{position:fixed;width:100%;background:#fff;border-bottom:1px solid #e1e1e1;z-index:1}.App_header__1o2Y8{max-width:1020px;margin:0 auto;display:flex}.App_header-name__2XXxc{font-size:1.5rem;line-height:2rem;font-weight:700;padding:.5rem 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-decoration:none}.App_header-name__2XXxc:active,.App_header-name__2XXxc:focus,.App_header-name__2XXxc:hover{text-decoration:none}.App_header-spacer__3F0KU{margin-top:calc(3rem + 1px);height:3rem}.App_content-wrap__1oPWs{flex-grow:5;box-sizing:border-box;display:flex}.App_content__3dh9P{max-width:1020px;min-width:0;margin:0 auto;display:flex;flex-grow:1;flex-direction:column}.NotFoundPage_container__35vs4{flex-grow:1;align-items:center;justify-content:center;display:flex}.ListPage_table__2qY_8{table-layout:fixed;white-space:nowrap;width:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ListPage_table__2qY_8 td:empty:after{content:"-"}.ListPage_empty-tr__2VxYl{color:#a6a6a6}.ListPage_empty-tr__2VxYl td{text-align:center}.ListPage_name__1-Gs-{width:20%;overflow:hidden;text-overflow:ellipsis}.ListPage_table__2qY_8 tbody .ListPage_description__1Sci0,.ListPage_table__2qY_8 tbody .ListPage_name__1-Gs-,.ListPage_table__2qY_8 tbody .ListPage_value__3X3Vq{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.ListPage_description__1Sci0{width:50%}.ListPage_description__1Sci0,.ListPage_value__3X3Vq{overflow:hidden;text-overflow:ellipsis}.ListPage_actions__2iqTu{width:50px;text-align:right}.PageLoadError_wrap__mpF75{display:flex;align-items:flex-start;justify-content:center}.PageLoadError_container__kcD9o{display:flex;flex-direction:column;background:#ffe5e5;padding:.25rem .5rem;border-radius:4px;color:#b94343;text-align:center}.PageLoadError_error-small__14Fex{font-size:.85em}#nprogress{pointer-events:none}#nprogress .bar{background:#ffc25b;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #ffc25b,0 0 5px #ffc25b;opacity:1;-webkit-transform:rotate(3deg) translateY(-4px);transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:.9rem;right:.9rem}#nprogress .spinner-icon{width:1.2rem;height:1.2rem;box-sizing:border-box;border-color:#ffc25b transparent transparent #ffc25b;border-style:solid;border-width:2px;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(1turn)}}@keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.Attribute_wrap__1Zy9J{display:flex;flex-direction:column;margin-bottom:1rem}.Attribute_name__3a-cD{font-size:.8em;color:#737373;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.Attribute_value__IxZCj:empty:after{content:"-"}.ButtonBar_container__21aEr{border-top:1px dotted #f2f2f2;padding-top:1rem;margin-bottom:1rem}.ButtonBar_container__21aEr>*{margin-right:.5rem}.LabeledInput_wrap__2KAyr{position:relative;margin-bottom:1em}.LabeledInput_label__1AyjZ{font-size:.8em;color:#737373;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:block}.LabeledInput_input-and-error-wrap__2iJKd{display:flex;align-items:baseline}.LabeledInput_error__2QBpW{flex-grow:0;display:block;color:#ff3656;margin-left:1rem;white-space:nowrap}.LabeledInput_hint__rAeG8{font-size:.8em;display:block}.SettingForm_error-wrap__3SdnI{display:flex;padding:.5rem 0}.SettingForm_error-message__uQK1Y{background:#ffe5e5;padding:.25rem .5rem;border-radius:4px;color:#b94343}.SettingForm_error-small__3owRp{font-size:.85em}.ClassicSpinner_wrap__1LF2_{display:block}html{box-sizing:border-box;overflow-y:scroll;font-size:14px}*,:after,:before{box-sizing:inherit}:root,body{background:#fff}body{color:#233656;font-family:Arial,Helvetica,sans-serif;font-weight:400;font-size:1rem;line-height:1.5rem;margin:0;padding:0;min-height:100vh;position:relative;display:flex;flex-direction:column}table{border-collapse:collapse;border-spacing:0}table td,table th{text-align:left}a{color:#233656;text-decoration:none}a:hover{text-decoration:underline}a.button,button,input[type=button],input[type=submit]{display:inline-block;cursor:pointer;border:none;border-radius:3px;padding:.375rem .75rem;font-size:1rem;line-height:1.5;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap}button,input[type=button],input[type=submit]{color:#4d4d4d;background-color:#d9d9d9;-webkit-transition:background-color .1s ease-in-out;transition:background-color .1s ease-in-out;outline:none}button:focus,button:hover,input[type=button]:focus,input[type=button]:hover,input[type=submit]:focus,input[type=submit]:hover{background-color:#b8b8b8}button:active,input[type=button]:active,input[type=submit]:active{background-color:#828282}a.button{color:#4d4d4d;background-color:initial;-webkit-transition:background-color .1s ease-in-out;transition:background-color .1s ease-in-out;outline:none;text-decoration:none}a.button:focus,a.button:hover{background-color:rgba(0,0,0,.15)}a.button:active{background-color:rgba(0,0,0,.4)}a.button.primary,button.primary,input[type=button].primary,input[type=submit].primary{color:#4d4d4d;background-color:#a6a6a6;-webkit-transition:background-color .1s ease-in-out;transition:background-color .1s ease-in-out;outline:none}a.button.primary:focus,a.button.primary:hover,button.primary:focus,button.primary:hover,input[type=button].primary:focus,input[type=button].primary:hover,input[type=submit].primary:focus,input[type=submit].primary:hover{background-color:#8d8d8d}a.button.primary:active,button.primary:active,input[type=button].primary:active,input[type=submit].primary:active{background-color:#646464}input[type=text]{border:none;border-radius:3px;padding:.5em;font-size:1rem;line-height:normal;color:#4d4d4d;background-color:#e6e6e6;-webkit-transition:background-color .1s ease-in-out;transition:background-color .1s ease-in-out;outline:none;box-sizing:initial;width:auto;min-width:12ch;max-width:calc(100% - 2em);will-change:width}input[type=text]:focus{background-color:#c4c4c4}input[type=text]:active{background-color:#bfbfbf}.button-wrap{display:flex;align-items:center}.svg-wrap{display:block}code{border-radius:2px;padding:0 .2rem}.sysname,code{background:#f2f2f2}.sysname{display:inline-block;border-radius:3px;padding:0 .5em;font-family:Courier New,Courier,monospace;font-size:.75em}#root{z-index:1;position:relative}