quick_script 0.2.2 → 0.3.0

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.
@@ -1,3 +1,3 @@
1
1
  module QuickScript
2
- VERSION = "0.2.2"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -11,10 +11,16 @@ Array.prototype.pushOnce = (item) ->
11
11
  this.push(item)
12
12
  Date.from_utc = (utc) ->
13
13
  new Date(utc * 1000)
14
+ Date.prototype.to_utc = ->
15
+ Math.round(this.getTime() / 1000.0)
14
16
  String.prototype.endsWith = (suffix) ->
15
17
  this.indexOf(suffix, this.length - suffix.length) != -1
16
18
  String.prototype.includes = (str) ->
17
19
  this.indexOf(str) != -1
20
+ String.prototype.truncate = (val)->
21
+ ret = this.substring(0, val)
22
+ ret = ret + "..." if this.length > val
23
+ return ret
18
24
 
19
25
  class @SelectOpts
20
26
  constructor : ->
@@ -148,6 +148,25 @@
148
148
  else
149
149
  $(element).siblings('label').show()
150
150
 
151
+ ko.bindingHandlers.tip =
152
+ init : (element, valueAccessor) ->
153
+ opts = valueAccessor()
154
+ content = ko.utils.unwrapObservable(opts['content'])
155
+ $(element).poshytip
156
+ className: 'tip-twitter',
157
+ showTimeout: 1,
158
+ alignTo: 'target',
159
+ alignX: 'center',
160
+ offsetY: 5,
161
+ allowTipHover: false,
162
+ fade: false,
163
+ slide: false,
164
+ content: content
165
+ update : (element, valueAccessor) ->
166
+ opts = valueAccessor()
167
+ content = ko.utils.unwrapObservable(opts['content'])
168
+ $(element).poshytip('update', content)
169
+
151
170
 
152
171
  ko.absorbModel = (data, self) ->
153
172
  for prop, val of data
@@ -314,12 +333,14 @@ class @Model
314
333
  callback(resp) if callback?
315
334
  @model_state(ko.modelStates.LOADING)
316
335
  reloadFields : (fields, callback)->
317
- opts = ko.copyObject(@toJS(), @load_fields)
336
+ opts = @reloadOpts()
318
337
  opts['fields'] = fields
319
338
  @load(opts, callback)
320
339
  reload : (callback)->
321
- opts = ko.copyObject(@toJS(), @load_fields)
340
+ opts = @reloadOpts()
322
341
  @load(opts, callback)
342
+ reloadOpts : =>
343
+ {id : @id()}
323
344
  save : (fields, callback) ->
324
345
  console.log("Saving fields #{fields}")
325
346
  if (@model_state() != ko.modelStates.READY)
@@ -375,14 +396,25 @@ class @Model
375
396
  obj = {}
376
397
  for prop in flds
377
398
  if typeof(@[prop].toAPI) == 'function'
378
- obj[prop] = @[prop].toAPI()
399
+ val = @[prop].toAPI()
400
+ obj[prop] = val if val != null
379
401
  else if typeof(@[prop].toJS) == 'function'
380
402
  obj[prop] = @[prop].toJS()
381
403
  else
382
- obj[prop] = @[prop]()
404
+ val = @[prop]()
405
+ if val instanceof Object
406
+ obj[prop] = JSON.stringify(val)
407
+ else
408
+ obj[prop] = val if val != null
383
409
  obj
384
410
  toJSON : (flds)=>
385
411
  JSON.stringify(@toJS(flds))
412
+ getClass : =>
413
+ @constructor
414
+ toClone : =>
415
+ m = new(@getClass())
416
+ m.absorb(this)
417
+ return m
386
418
  absorb : (model) =>
387
419
  @reset()
388
420
  @handleData(model.toJS())
@@ -400,6 +432,16 @@ class @FileModel extends @Model
400
432
  extend : ->
401
433
  @input = {}
402
434
  @input.files = ko.observable([])
435
+ @input.file_uri = ko.observable('')
436
+ @input.files.subscribe (val)->
437
+ if val.length > 0
438
+ @input.file_uri('')
439
+ reader = new FileReader()
440
+ reader.onload = (ev)=>
441
+ console.log('input loaded')
442
+ @input.file_uri(ev.target.result)
443
+ reader.readAsDataURL(val[0])
444
+ , this
403
445
  @input.present = ko.computed ->
404
446
  @input.files().length > 0
405
447
  , this
@@ -409,8 +451,9 @@ class @FileModel extends @Model
409
451
  @input.filename = ko.computed ->
410
452
  if @input.present() then @input.file().name else ""
411
453
  , this
412
- @input.isImage = ->
413
- if @input.present() then @input.file().type.match('image.*') else false
454
+ @input.is_image = ko.computed ->
455
+ if @input.present() then @input.file().type.match('image.*') else false
456
+ , this
414
457
  @input.clear = -> @input.files([])
415
458
  reset : ->
416
459
  super
@@ -0,0 +1,7 @@
1
+ /*
2
+ * Poshy Tip jQuery plugin v1.1
3
+ * http://vadikom.com/tools/poshy-tip-jquery-plugin-for-stylish-tooltips/
4
+ * Copyright 2010-2011, Vasil Dinkov, http://vadikom.com/
5
+ */
6
+
7
+ (function(e){var a=[],d=/^url\(["']?([^"'\)]*)["']?\);?$/i,c=/\.png$/i,b=e.browser.msie&&e.browser.version==6;function f(){e.each(a,function(){this.refresh(true)})}e(window).resize(f);e.Poshytip=function(h,g){this.$elm=e(h);this.opts=e.extend({},e.fn.poshytip.defaults,g);this.$tip=e(['<div class="',this.opts.className,'">','<div class="tip-inner tip-bg-image"></div>','<div class="tip-arrow tip-arrow-top tip-arrow-right tip-arrow-bottom tip-arrow-left"></div>',"</div>"].join("")).appendTo(document.body);this.$arrow=this.$tip.find("div.tip-arrow");this.$inner=this.$tip.find("div.tip-inner");this.disabled=false;this.content=null;this.init()};e.Poshytip.prototype={init:function(){a.push(this);var g=this.$elm.attr("title");this.$elm.data("title.poshytip",g!==undefined?g:null).data("poshytip",this);if(this.opts.showOn!="none"){this.$elm.bind({"mouseenter.poshytip":e.proxy(this.mouseenter,this),"mouseleave.poshytip":e.proxy(this.mouseleave,this)});switch(this.opts.showOn){case"hover":if(this.opts.alignTo=="cursor"){this.$elm.bind("mousemove.poshytip",e.proxy(this.mousemove,this))}if(this.opts.allowTipHover){this.$tip.hover(e.proxy(this.clearTimeouts,this),e.proxy(this.mouseleave,this))}break;case"focus":this.$elm.bind({"focus.poshytip":e.proxy(this.show,this),"blur.poshytip":e.proxy(this.hide,this)});break}}},mouseenter:function(g){if(this.disabled){return true}this.$elm.attr("title","");if(this.opts.showOn=="focus"){return true}this.clearTimeouts();this.showTimeout=setTimeout(e.proxy(this.show,this),this.opts.showTimeout)},mouseleave:function(g){if(this.disabled||this.asyncAnimating&&(this.$tip[0]===g.relatedTarget||jQuery.contains(this.$tip[0],g.relatedTarget))){return true}var h=this.$elm.data("title.poshytip");if(h!==null){this.$elm.attr("title",h)}if(this.opts.showOn=="focus"){return true}this.clearTimeouts();this.hideTimeout=setTimeout(e.proxy(this.hide,this),this.opts.hideTimeout)},mousemove:function(g){if(this.disabled){return true}this.eventX=g.pageX;this.eventY=g.pageY;if(this.opts.followCursor&&this.$tip.data("active")){this.calcPos();this.$tip.css({left:this.pos.l,top:this.pos.t});if(this.pos.arrow){this.$arrow[0].className="tip-arrow tip-arrow-"+this.pos.arrow}}},show:function(){if(this.disabled||this.$tip.data("active")){return}this.reset();this.update();this.display();if(this.opts.timeOnScreen){setTimeout(e.proxy(this.hide,this),this.opts.timeOnScreen)}},hide:function(){if(this.disabled||!this.$tip.data("active")){return}this.display(true)},reset:function(){this.$tip.queue([]).detach().css("visibility","hidden").data("active",false);this.$inner.find("*").poshytip("hide");if(this.opts.fade){this.$tip.css("opacity",this.opacity)}this.$arrow[0].className="tip-arrow tip-arrow-top tip-arrow-right tip-arrow-bottom tip-arrow-left";this.asyncAnimating=false},update:function(j,k){if(this.disabled){return}var i=j!==undefined;if(i){if(!k){this.opts.content=j}if(!this.$tip.data("active")){return}}else{j=this.opts.content}var h=this,g=typeof j=="function"?j.call(this.$elm[0],function(l){h.update(l)}):j=="[title]"?this.$elm.data("title.poshytip"):j;if(this.content!==g){this.$inner.empty().append(g);this.content=g}this.refresh(i)},refresh:function(h){if(this.disabled){return}if(h){if(!this.$tip.data("active")){return}var k={left:this.$tip.css("left"),top:this.$tip.css("top")}}this.$tip.css({left:0,top:0}).appendTo(document.body);if(this.opacity===undefined){this.opacity=this.$tip.css("opacity")}var l=this.$tip.css("background-image").match(d),m=this.$arrow.css("background-image").match(d);if(l){var i=c.test(l[1]);if(b&&i){this.$tip.css("background-image","none");this.$inner.css({margin:0,border:0,padding:0});l=i=false}else{this.$tip.prepend('<table border="0" cellpadding="0" cellspacing="0"><tr><td class="tip-top tip-bg-image" colspan="2"><span></span></td><td class="tip-right tip-bg-image" rowspan="2"><span></span></td></tr><tr><td class="tip-left tip-bg-image" rowspan="2"><span></span></td><td></td></tr><tr><td class="tip-bottom tip-bg-image" colspan="2"><span></span></td></tr></table>').css({border:0,padding:0,"background-image":"none","background-color":"transparent"}).find(".tip-bg-image").css("background-image",'url("'+l[1]+'")').end().find("td").eq(3).append(this.$inner)}if(i&&!e.support.opacity){this.opts.fade=false}}if(m&&!e.support.opacity){if(b&&c.test(m[1])){m=false;this.$arrow.css("background-image","none")}this.opts.fade=false}var o=this.$tip.find("table");if(b){this.$tip[0].style.width="";o.width("auto").find("td").eq(3).width("auto");var n=this.$tip.width(),j=parseInt(this.$tip.css("min-width")),g=parseInt(this.$tip.css("max-width"));if(!isNaN(j)&&n<j){n=j}else{if(!isNaN(g)&&n>g){n=g}}this.$tip.add(o).width(n).eq(0).find("td").eq(3).width("100%")}else{if(o[0]){o.width("auto").find("td").eq(3).width("auto").end().end().width(document.defaultView&&document.defaultView.getComputedStyle&&parseFloat(document.defaultView.getComputedStyle(this.$tip[0],null).width)||this.$tip.width()).find("td").eq(3).width("100%")}}this.tipOuterW=this.$tip.outerWidth();this.tipOuterH=this.$tip.outerHeight();this.calcPos();if(m&&this.pos.arrow){this.$arrow[0].className="tip-arrow tip-arrow-"+this.pos.arrow;this.$arrow.css("visibility","inherit")}if(h){this.asyncAnimating=true;var p=this;this.$tip.css(k).animate({left:this.pos.l,top:this.pos.t},200,function(){p.asyncAnimating=false})}else{this.$tip.css({left:this.pos.l,top:this.pos.t})}},display:function(h){var i=this.$tip.data("active");if(i&&!h||!i&&h){return}this.$tip.stop();if((this.opts.slide&&this.pos.arrow||this.opts.fade)&&(h&&this.opts.hideAniDuration||!h&&this.opts.showAniDuration)){var m={},l={};if(this.opts.slide&&this.pos.arrow){var k,g;if(this.pos.arrow=="bottom"||this.pos.arrow=="top"){k="top";g="bottom"}else{k="left";g="right"}var j=parseInt(this.$tip.css(k));m[k]=j+(h?0:(this.pos.arrow==g?-this.opts.slideOffset:this.opts.slideOffset));l[k]=j+(h?(this.pos.arrow==g?this.opts.slideOffset:-this.opts.slideOffset):0)+"px"}if(this.opts.fade){m.opacity=h?this.$tip.css("opacity"):0;l.opacity=h?0:this.opacity}this.$tip.css(m).animate(l,this.opts[h?"hideAniDuration":"showAniDuration"])}h?this.$tip.queue(e.proxy(this.reset,this)):this.$tip.css("visibility","inherit");this.$tip.data("active",!i)},disable:function(){this.reset();this.disabled=true},enable:function(){this.disabled=false},destroy:function(){this.reset();this.$tip.remove();delete this.$tip;this.content=null;this.$elm.unbind(".poshytip").removeData("title.poshytip").removeData("poshytip");a.splice(e.inArray(this,a),1)},clearTimeouts:function(){if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}},calcPos:function(){var n={l:0,t:0,arrow:""},h=e(window),k={l:h.scrollLeft(),t:h.scrollTop(),w:h.width(),h:h.height()},p,j,m,i,q,g;if(this.opts.alignTo=="cursor"){p=j=m=this.eventX;i=q=g=this.eventY}else{var o=this.$elm.offset(),l={l:o.left,t:o.top,w:this.$elm.outerWidth(),h:this.$elm.outerHeight()};p=l.l+(this.opts.alignX!="inner-right"?0:l.w);j=p+Math.floor(l.w/2);m=p+(this.opts.alignX!="inner-left"?l.w:0);i=l.t+(this.opts.alignY!="inner-bottom"?0:l.h);q=i+Math.floor(l.h/2);g=i+(this.opts.alignY!="inner-top"?l.h:0)}switch(this.opts.alignX){case"right":case"inner-left":n.l=m+this.opts.offsetX;if(n.l+this.tipOuterW>k.l+k.w){n.l=k.l+k.w-this.tipOuterW}if(this.opts.alignX=="right"||this.opts.alignY=="center"){n.arrow="left"}break;case"center":n.l=j-Math.floor(this.tipOuterW/2);if(n.l+this.tipOuterW>k.l+k.w){n.l=k.l+k.w-this.tipOuterW}else{if(n.l<k.l){n.l=k.l}}break;default:n.l=p-this.tipOuterW-this.opts.offsetX;if(n.l<k.l){n.l=k.l}if(this.opts.alignX=="left"||this.opts.alignY=="center"){n.arrow="right"}}switch(this.opts.alignY){case"bottom":case"inner-top":n.t=g+this.opts.offsetY;if(!n.arrow||this.opts.alignTo=="cursor"){n.arrow="top"}if(n.t+this.tipOuterH>k.t+k.h){n.t=i-this.tipOuterH-this.opts.offsetY;if(n.arrow=="top"){n.arrow="bottom"}}break;case"center":n.t=q-Math.floor(this.tipOuterH/2);if(n.t+this.tipOuterH>k.t+k.h){n.t=k.t+k.h-this.tipOuterH}else{if(n.t<k.t){n.t=k.t}}break;default:n.t=i-this.tipOuterH-this.opts.offsetY;if(!n.arrow||this.opts.alignTo=="cursor"){n.arrow="bottom"}if(n.t<k.t){n.t=g+this.opts.offsetY;if(n.arrow=="bottom"){n.arrow="top"}}}this.pos=n}};e.fn.poshytip=function(h){if(typeof h=="string"){var g=arguments,k=h;Array.prototype.shift.call(g);if(k=="destroy"){this.die("mouseenter.poshytip").die("focus.poshytip")}return this.each(function(){var l=e(this).data("poshytip");if(l&&l[k]){l[k].apply(l,g)}})}var i=e.extend({},e.fn.poshytip.defaults,h);if(!e("#poshytip-css-"+i.className)[0]){e(['<style id="poshytip-css-',i.className,'" type="text/css">',"div.",i.className,"{visibility:hidden;position:absolute;top:0;left:0;}","div.",i.className," table, div.",i.className," td{margin:0;font-family:inherit;font-size:inherit;font-weight:inherit;font-style:inherit;font-variant:inherit;}","div.",i.className," td.tip-bg-image span{display:block;font:1px/1px sans-serif;height:",i.bgImageFrameSize,"px;width:",i.bgImageFrameSize,"px;overflow:hidden;}","div.",i.className," td.tip-right{background-position:100% 0;}","div.",i.className," td.tip-bottom{background-position:100% 100%;}","div.",i.className," td.tip-left{background-position:0 100%;}","div.",i.className," div.tip-inner{background-position:-",i.bgImageFrameSize,"px -",i.bgImageFrameSize,"px;}","div.",i.className," div.tip-arrow{visibility:hidden;position:absolute;overflow:hidden;font:1px/1px sans-serif;}","</style>"].join("")).appendTo("head")}if(i.liveEvents&&i.showOn!="none"){var j=e.extend({},i,{liveEvents:false});switch(i.showOn){case"hover":this.live("mouseenter.poshytip",function(){var l=e(this);if(!l.data("poshytip")){l.poshytip(j).poshytip("mouseenter")}});break;case"focus":this.live("focus.poshytip",function(){var l=e(this);if(!l.data("poshytip")){l.poshytip(j).poshytip("show")}});break}return this}return this.each(function(){new e.Poshytip(this,i)})};e.fn.poshytip.defaults={content:"[title]",className:"tip-yellow",bgImageFrameSize:10,showTimeout:500,hideTimeout:100,timeOnScreen:0,showOn:"hover",liveEvents:false,alignTo:"cursor",alignX:"right",alignY:"top",offsetX:-22,offsetY:18,allowTipHover:true,followCursor:false,fade:true,slide:true,slideOffset:8,showAniDuration:300,hideAniDuration:300}})(jQuery);
@@ -3,6 +3,7 @@
3
3
  //= require ./quick_script/jquery-ui.min
4
4
  //= require ./quick_script/jquery.iframe-transport
5
5
  //= require ./quick_script/jquery.qtip.min
6
+ //= require ./quick_script/jquery.poshytip.min
6
7
  //= require ./quick_script/jquery.fileupload
7
8
  //= require ./quick_script/jquery.history
8
9
  //= require ./quick_script/knockout
@@ -14,6 +14,8 @@
14
14
  +t-2
15
15
  .t-1
16
16
  +t-1
17
+ .t-0
18
+ +t-0
17
19
  .t-upper
18
20
  +t-upper
19
21
  .t-center
@@ -26,6 +28,8 @@
26
28
  +right
27
29
  .inline, .inl
28
30
  +inline
31
+ .table-cell
32
+ +table-cell
29
33
 
30
34
  .img-shadow-dark
31
35
  +img-shadow-dark
@@ -41,6 +41,8 @@ $dark-gray: rgba(0,0,0,.75)
41
41
  letter-spacing: $val
42
42
  =inline
43
43
  display: inline-block
44
+ =table-cell
45
+ display: table-cell
44
46
  =padded
45
47
  padding: 10px
46
48
  =pad-lr
@@ -0,0 +1,59 @@
1
+ .tip-twitter {
2
+ opacity:0.8;
3
+ z-index:1000;
4
+ text-align:left;
5
+ border-radius:4px;
6
+ -moz-border-radius:4px;
7
+ -webkit-border-radius:4px;
8
+ padding:8px 8px;
9
+ max-width:200px;
10
+ color:#fff;
11
+ background-color:#000;
12
+ /**
13
+ * - If you set a background-image, border/padding/background-color will be ingnored.
14
+ * You can set any padding to .tip-inner instead if you need.
15
+ * - If you want a tiled background-image and border/padding for the tip,
16
+ * set the background-image to .tip-inner instead.
17
+ */
18
+ }
19
+ .tip-twitter .tip-inner {
20
+ font:bold 11px/14px 'Lucida Grande',sans-serif;
21
+ }
22
+
23
+ /* Configure an arrow image - the script will automatically position it on the correct side of the tip */
24
+ .tip-twitter .tip-arrow-top {
25
+ margin-top:-5px;
26
+ margin-left:-5px; /* approx. half the width to center it */
27
+ top:0;
28
+ left:50%;
29
+ width:9px;
30
+ height:5px;
31
+ background:url(tip-twitter_arrows.gif) no-repeat;
32
+ }
33
+ .tip-twitter .tip-arrow-right {
34
+ margin-top:-4px; /* approx. half the height to center it */
35
+ margin-left:0;
36
+ top:50%;
37
+ left:100%;
38
+ width:5px;
39
+ height:9px;
40
+ background:url(tip-twitter_arrows.gif) no-repeat -9px 0;
41
+ }
42
+ .tip-twitter .tip-arrow-bottom {
43
+ margin-top:0;
44
+ margin-left:-5px; /* approx. half the width to center it */
45
+ top:100%;
46
+ left:50%;
47
+ width:9px;
48
+ height:5px;
49
+ background:url(tip-twitter_arrows.gif) no-repeat -18px 0;
50
+ }
51
+ .tip-twitter .tip-arrow-left {
52
+ margin-top:-4px; /* approx. half the height to center it */
53
+ margin-left:-5px;
54
+ top:50%;
55
+ left:0;
56
+ width:5px;
57
+ height:9px;
58
+ background:url(tip-twitter_arrows.gif) no-repeat -27px 0;
59
+ }
@@ -1,4 +1,5 @@
1
1
  /* QS_VERSION=0.0.52;
2
+ *= require_tree ./quick_script/tip-twitter
2
3
  *= require ./quick_script/basics
3
4
  *= require ./quick_script/elements
4
5
  *= require ./quick_script/buttons
metadata CHANGED
@@ -1,33 +1,23 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: quick_script
3
- version: !ruby/object:Gem::Version
4
- hash: 19
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 2
9
- - 2
10
- version: 0.2.2
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Alan Graham
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-04-24 00:00:00 Z
12
+ date: 2012-05-05 00:00:00.000000000Z
19
13
  dependencies: []
20
-
21
14
  description: Framework for single-page web applications
22
- email:
15
+ email:
23
16
  - alan.g.graham@gmail.com
24
17
  executables: []
25
-
26
18
  extensions: []
27
-
28
19
  extra_rdoc_files: []
29
-
30
- files:
20
+ files:
31
21
  - .gitignore
32
22
  - Gemfile
33
23
  - README.md
@@ -50,6 +40,7 @@ files:
50
40
  - vendor/assets/javascripts/quick_script/jquery.history.js
51
41
  - vendor/assets/javascripts/quick_script/jquery.iframe-transport.js
52
42
  - vendor/assets/javascripts/quick_script/jquery.min.js
43
+ - vendor/assets/javascripts/quick_script/jquery.poshytip.min.js
53
44
  - vendor/assets/javascripts/quick_script/jquery.qtip.min.js
54
45
  - vendor/assets/javascripts/quick_script/knockout.js
55
46
  - vendor/assets/stylesheets/quick_script.css
@@ -57,38 +48,30 @@ files:
57
48
  - vendor/assets/stylesheets/quick_script/buttons.css
58
49
  - vendor/assets/stylesheets/quick_script/elements.css.sass
59
50
  - vendor/assets/stylesheets/quick_script/mixins.css.sass
60
- homepage: ""
51
+ - vendor/assets/stylesheets/quick_script/tip-twitter/tip-twitter.css
52
+ - vendor/assets/stylesheets/quick_script/tip-twitter/tip-twitter_arrows.gif
53
+ homepage: ''
61
54
  licenses: []
62
-
63
55
  post_install_message:
64
56
  rdoc_options: []
65
-
66
- require_paths:
57
+ require_paths:
67
58
  - lib
68
- required_ruby_version: !ruby/object:Gem::Requirement
59
+ required_ruby_version: !ruby/object:Gem::Requirement
69
60
  none: false
70
- requirements:
71
- - - ">="
72
- - !ruby/object:Gem::Version
73
- hash: 3
74
- segments:
75
- - 0
76
- version: "0"
77
- required_rubygems_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ! '>='
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
66
  none: false
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- hash: 3
83
- segments:
84
- - 0
85
- version: "0"
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
86
71
  requirements: []
87
-
88
72
  rubyforge_project: quick_script
89
- rubygems_version: 1.8.17
73
+ rubygems_version: 1.8.15
90
74
  signing_key:
91
75
  specification_version: 3
92
76
  summary: Web Application Framework
93
77
  test_files: []
94
-