Merge lp:~stephen-stewart/snapweb/show-download-or-installed-size into lp:~snappy-dev/snapweb/trunk

Proposed by Stephen Stewart on 2015-05-26
Status: Merged
Approved by: Michael Vogt on 2015-05-26
Approved revision: 135
Merged at revision: 143
Proposed branch: lp:~stephen-stewart/snapweb/show-download-or-installed-size
Merge into: lp:~snappy-dev/snapweb/trunk
Diff against target: 119 lines (+67/-6)
3 files modified
package.json (+1/-0)
www/src/js/models/snap.js (+45/-6)
www/tests/modelSpec.js (+21/-0)
To merge this branch: bzr merge lp:~stephen-stewart/snapweb/show-download-or-installed-size
Reviewer Review Type Date Requested Status
Michael Vogt 2015-05-26 Approve on 2015-05-26
Review via email: mp+260126@code.launchpad.net

Commit Message

add, but not yet show, a pretty download/installed size attr on the snap model

Description of the Change

add, but not yet show, a pretty download size attr on the snap model

To post a comment you must log in.
135. By Stephen Stewart on 2015-05-26

add tests for parsing installed_size/download_size

Michael Vogt (mvo) wrote :

This looks good to me (but mind you, I'm not a JS wizz). The testing is nice.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'package.json'
2--- package.json 2015-05-08 22:41:11 +0000
3+++ package.json 2015-05-26 11:53:54 +0000
4@@ -37,6 +37,7 @@
5 "lodash": "~3.3.1",
6 "normalize.css": "^3.0.3",
7 "postcss-bem-linter": "git://github.com/necolas/postcss-bem-linter",
8+ "pretty-bytes": "^1.0.4",
9 "vinyl-buffer": "~1.0.0",
10 "vinyl-source-stream": "~1.1.0",
11 "watchify": "~3.1.2"
12
13=== modified file 'www/src/js/models/snap.js'
14--- www/src/js/models/snap.js 2015-05-11 10:30:57 +0000
15+++ www/src/js/models/snap.js 2015-05-26 11:53:54 +0000
16@@ -3,6 +3,7 @@
17 var _ = require('lodash');
18 var Backbone = require('backbone');
19 var Radio = require('backbone.radio');
20+var prettyBytes = require('pretty-bytes');
21 var CONF = require('../config.js');
22 var chan = Radio.channel('root');
23
24@@ -57,12 +58,36 @@
25 chan.command('alert:error', model);
26 });
27
28- this.on('add change:message', this.onMessageChange);
29-
30- this.on('add change:status', this.handleStatusChange);
31- },
32-
33- handleStatusChange: function(model) {
34+ this.on('add change:status', this.onStatusChange);
35+ this.on('change:installed_size', this.onInstalledSizeChange);
36+ this.on('change:download_size', this.onDownloadSizeChange);
37+ },
38+
39+ onDownloadSizeChange: function(model) {
40+ var bytes = model.get('download_size');
41+ model.set(
42+ 'prettyDownloadSize',
43+ this.prettifyBytes(Number(model.get('download_size')))
44+ );
45+ },
46+
47+ onInstalledSizeChange: function(model) {
48+ var bytes = model.get('installed_size');
49+ model.set(
50+ 'prettyInstalledSize',
51+ this.prettifyBytes(Number(model.get('installed_size')))
52+ );
53+ },
54+
55+ prettifyBytes: function(bytes) {
56+ if (_.isFinite(bytes)) {
57+ return prettyBytes(bytes);
58+ } else {
59+ return '';
60+ }
61+ },
62+
63+ onStatusChange: function(model) {
64 this.setInstallActionString(model);
65 this.setInstallHTMLClass(model);
66 },
67@@ -157,6 +182,20 @@
68 }
69 }
70
71+ if (response.hasOwnProperty('download_size')) {
72+ this.set(
73+ //jscs:disable requireCamelCaseOrUpperCaseIdentifiers
74+ 'prettyDownloadSize', this.prettifyBytes(Number(response.download_size))
75+ );
76+ }
77+
78+ if (response.hasOwnProperty('installed_size')) {
79+ this.set(
80+ //jscs:disable requireCamelCaseOrUpperCaseIdentifiers
81+ 'prettyInstalledSize', this.prettifyBytes(Number(response.installed_size))
82+ );
83+ }
84+
85 return response;
86 },
87
88
89=== modified file 'www/tests/modelSpec.js'
90--- www/tests/modelSpec.js 2015-05-06 09:46:30 +0000
91+++ www/tests/modelSpec.js 2015-05-26 11:53:54 +0000
92@@ -67,6 +67,27 @@
93 expect(this.model.get('installActionString')).toBe(undefined);
94 });
95
96+ it('should set pretty byte attr or empty string if bad', function() {
97+ this.model.set('installed_size', 0);
98+ expect(this.model.get('prettyInstalledSize')).toBe('0 B');
99+ // we coerce strings to numbers in the setters
100+ this.model.set('installed_size', '1');
101+ expect(this.model.get('prettyInstalledSize')).toBe('1 B');
102+ // bad
103+ this.model.set('installed_size', 'foo');
104+ expect(this.model.get('prettyInstalledSize')).toBe('');
105+ });
106+
107+ it('should parse response to create prettyInstalledSize', function() {
108+ this.model.parse({'installed_size': 0});
109+ expect(this.model.get('prettyInstalledSize')).toBe('0 B');
110+ });
111+
112+ it('should parse response to create prettyDownloadSize', function() {
113+ this.model.parse({'download_size': 0});
114+ expect(this.model.get('prettyDownloadSize')).toBe('0 B');
115+ });
116+
117 });
118
119 describe('sync methods', function() {

Subscribers

People subscribed via source and target branches