collection-json-browser 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/README.rdoc +3 -0
- data/Rakefile +40 -0
- data/app/assets/javascripts/collection_json_browser/angular.min.js +162 -0
- data/app/assets/javascripts/collection_json_browser/angular/controllers/api_controller.js +38 -0
- data/app/assets/javascripts/collection_json_browser/application.js +17 -0
- data/app/assets/stylesheets/collection_json_browser/application.css +12 -0
- data/app/assets/stylesheets/collection_json_browser/bootstrap.css +4960 -0
- data/app/controllers/collection_json_browser/application_controller.rb +4 -0
- data/app/controllers/collection_json_browser/home_controller.rb +7 -0
- data/app/helpers/collection_json_browser/application_helper.rb +4 -0
- data/app/views/collection_json_browser/home/index.html +118 -0
- data/app/views/layouts/collection_json_browser/application.html.erb +13 -0
- data/config/routes.rb +3 -0
- data/lib/collection-json-browser.rb +4 -0
- data/lib/collection-json-browser/engine.rb +5 -0
- data/lib/collection-json-browser/version.rb +3 -0
- data/lib/tasks/collection-json-browser_tasks.rake +4 -0
- data/test/collection-json-browser_test.rb +7 -0
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/images/cat.gif +0 -0
- data/test/dummy/app/assets/javascripts/application.js +15 -0
- data/test/dummy/app/assets/stylesheets/application.css +20 -0
- data/test/dummy/app/controllers/api/application_controller.rb +101 -0
- data/test/dummy/app/controllers/api/posts_controller.rb +107 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/models/post.rb +3 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +59 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +8 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/migrate/20130707043713_create_posts.rb +11 -0
- data/test/dummy/db/schema.rb +24 -0
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/development.log +62530 -0
- data/test/dummy/log/test.log +133 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/angular-scenario.js +26223 -0
- data/test/dummy/public/e2e.html +11 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/public/links.html +7 -0
- data/test/dummy/public/scenarios.js +65 -0
- data/test/dummy/script/rails +6 -0
- data/test/dummy/tmp/cache/assets/C11/E20/sprockets%2Fa12197364162a50d0a75622881d3751d +0 -0
- data/test/dummy/tmp/cache/assets/C40/150/sprockets%2Fa047ea3307600479a1f8295fc4300137 +0 -0
- data/test/dummy/tmp/cache/assets/C76/D00/sprockets%2F1141538585172cba9431bc737c1fe290 +0 -0
- data/test/dummy/tmp/cache/assets/C9A/610/sprockets%2F0f1cbc34ef00944528423628d2014e0d +0 -0
- data/test/dummy/tmp/cache/assets/CB8/F50/sprockets%2F7db66115752dc2d468a6d4852869e31a +0 -0
- data/test/dummy/tmp/cache/assets/CC8/CC0/sprockets%2F77ac1342b1ae62c0123f399257a703aa +0 -0
- data/test/dummy/tmp/cache/assets/CE5/DB0/sprockets%2F53d6d5203c9d6c96693655151fea1bf3 +0 -0
- data/test/dummy/tmp/cache/assets/CF0/4A0/sprockets%2Fdc8ec795245b571236a639c98b183b7e +0 -0
- data/test/dummy/tmp/cache/assets/D01/390/sprockets%2F152365a6c64bdbf13d80c22762c0f48b +0 -0
- data/test/dummy/tmp/cache/assets/D17/330/sprockets%2F59803fbbf63f56502acdc6710fc47389 +0 -0
- data/test/dummy/tmp/cache/assets/D18/FE0/sprockets%2F816d68b6feb37b103be618798b5e0b37 +0 -0
- data/test/dummy/tmp/cache/assets/D36/D00/sprockets%2F3a43e8f11605c939cbb04aec364ba775 +0 -0
- data/test/dummy/tmp/cache/assets/D58/C00/sprockets%2F7bd61bb28f7ce577f679872a7cc4a477 +0 -0
- data/test/dummy/tmp/cache/assets/D69/960/sprockets%2F68d11bd13c04d8959dabbf7680c37b1a +0 -0
- data/test/dummy/tmp/cache/assets/D6F/820/sprockets%2F3174b17cc559cf465cd881d7c1ac06dd +0 -0
- data/test/dummy/tmp/cache/assets/D74/650/sprockets%2F5c448233c8ef782e60adda4b8f572b6b +0 -0
- data/test/dummy/tmp/cache/assets/D97/910/sprockets%2Ff79eba25f30b74073aa198bca71a5ed5 +0 -0
- data/test/dummy/tmp/cache/assets/DCC/720/sprockets%2Fc5b1dfb51c6ca4d981cf60f8dc3f6351 +0 -0
- data/test/dummy/tmp/cache/assets/DF1/600/sprockets%2F5eabe9a0f53eaa0f7a73d5923d13dad4 +0 -0
- data/test/dummy/tmp/cache/assets/DF6/F60/sprockets%2F7e00e27c8a01ced37a4082fcaeee2ee9 +0 -0
- data/test/dummy/tmp/cache/assets/DFA/8A0/sprockets%2F59bed50c73a0e1188ff0dc3adbff1d76 +0 -0
- data/test/dummy/tmp/cache/assets/E10/600/sprockets%2Ff72f1ec8e8bb832c8b5a960fe3f9ae7d +0 -0
- data/test/integration/navigation_test.rb +9 -0
- data/test/javascripts/config/karma-e2e.conf.js +22 -0
- data/test/javascripts/config/karma.conf.js +19 -0
- data/test/javascripts/scripts/e2e-test.bat +11 -0
- data/test/javascripts/scripts/e2e-test.sh +9 -0
- data/test/javascripts/scripts/private/ScrapeData.js +115 -0
- data/test/javascripts/scripts/private/format-json.sh +11 -0
- data/test/javascripts/scripts/private/goto_step.bat +15 -0
- data/test/javascripts/scripts/private/goto_step.sh +13 -0
- data/test/javascripts/scripts/private/push-to-github.sh +7 -0
- data/test/javascripts/scripts/private/retag.sh +15 -0
- data/test/javascripts/scripts/private/snapshot-web.sh +19 -0
- data/test/javascripts/scripts/private/snapshot.sh +43 -0
- data/test/javascripts/scripts/test.bat +11 -0
- data/test/javascripts/scripts/test.sh +9 -0
- data/test/javascripts/scripts/update-repo.sh +13 -0
- data/test/javascripts/scripts/watchr.rb +19 -0
- data/test/javascripts/scripts/web-server.js +244 -0
- data/test/javascripts/test/e2e/scenarios.js +65 -0
- data/test/javascripts/test/lib/angular/angular-mocks.js +1768 -0
- data/test/javascripts/test/lib/angular/angular-scenario.js +26223 -0
- data/test/javascripts/test/lib/angular/version.txt +1 -0
- data/test/javascripts/test/unit/controllersSpec.js +54 -0
- data/test/javascripts/test/unit/directivesSpec.js +7 -0
- data/test/javascripts/test/unit/filtersSpec.js +7 -0
- data/test/javascripts/test/unit/servicesSpec.js +7 -0
- data/test/test_helper.rb +15 -0
- metadata +277 -0
File without changes
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<td>{{link.rel}}</td>
|
2
|
+
<td>{{link.name}}</td>
|
3
|
+
<td>{{link.prompt}}</td>
|
4
|
+
<td ng-switch on="link.render">
|
5
|
+
<img ng-switch-when="image" ng-src={{link.href}} title={{link.rel}} width=150/>
|
6
|
+
<a ng-switch-default href="" ng-click="goTo(link.href)">{{link.href}}</a>
|
7
|
+
</td>
|
@@ -0,0 +1,65 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
/* http://docs.angularjs.org/guide/dev_guide.e2e-testing */
|
4
|
+
|
5
|
+
describe('Collection JSON Browser', function() {
|
6
|
+
beforeEach(function() {
|
7
|
+
browser().navigateTo('/doc');
|
8
|
+
});
|
9
|
+
|
10
|
+
it('displays 1 link', function() {
|
11
|
+
expect(repeater('.links tr a').count()).toBe(1);
|
12
|
+
});
|
13
|
+
|
14
|
+
it('displays 1 image', function() {
|
15
|
+
expect(repeater('.links tr img').count()).toBe(1);
|
16
|
+
});
|
17
|
+
|
18
|
+
it('displays response status', function() {
|
19
|
+
expect(element('.status').text()).toMatch(/\s200\s/);
|
20
|
+
});
|
21
|
+
|
22
|
+
describe('clicking on posts link', function(){
|
23
|
+
beforeEach(function() {
|
24
|
+
element(".links a:contains('posts')").click();
|
25
|
+
});
|
26
|
+
|
27
|
+
it('sets and displays browser location', function() {
|
28
|
+
expect(browser().location().url()).toBe('/api/posts');
|
29
|
+
expect(element("#href").val()).toEqual('/api/posts')
|
30
|
+
expect(repeater('.links tr a').count()).toBe(0);
|
31
|
+
});
|
32
|
+
|
33
|
+
it('displays a form when the response contains a template', function() {
|
34
|
+
expect(element("form[action='/api/posts']")).toBe()
|
35
|
+
expect(element("form input#title")).toBe()
|
36
|
+
expect(element("form input#content")).toBe()
|
37
|
+
expect(element("form input#category")).toBe()
|
38
|
+
expect(element("form button[type=submit]")).toBe()
|
39
|
+
});
|
40
|
+
|
41
|
+
it('lists collection items when the form is submitted successfully', function(){
|
42
|
+
//TODO: figure out how to test this
|
43
|
+
input('field.value').enter('Ruby and Angular')
|
44
|
+
input('field.value').enter('Happily ever after')
|
45
|
+
input('field.value').enter('ruby')
|
46
|
+
//element('#title').attr('value', 'Ruby and Angular')
|
47
|
+
//element('#content').attr('value', 'Happily ever after')
|
48
|
+
//element('#category').attr('value', 'ruby')
|
49
|
+
|
50
|
+
element("form button[type=submit]").click()
|
51
|
+
|
52
|
+
expect(repeater('ol .item').count()).toBe(1);
|
53
|
+
|
54
|
+
var data = repeater("tr.data")
|
55
|
+
//expect(r.row(0)).toEqual(['title', 'Post title', 'Ruby and Angular'])
|
56
|
+
//expect(r.row(1)).toEqual(['content', 'Post content', 'Happily ever after'])
|
57
|
+
expect(data.row(2)).toEqual(['category', 'Post category', 'ruby'])
|
58
|
+
|
59
|
+
var links = repeater(".item-links tr")
|
60
|
+
expect(links.row(1)).toEqual(['edit-form', 'post', 'Edit post', '/api/posts/1/edit'])
|
61
|
+
expect(links.row(2)).toEqual(['comments', 'comments', 'Comments', '/api/posts/1/comments'])
|
62
|
+
})
|
63
|
+
})
|
64
|
+
|
65
|
+
});
|
@@ -0,0 +1,6 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
3
|
+
|
4
|
+
APP_PATH = File.expand_path('../../config/application', __FILE__)
|
5
|
+
require File.expand_path('../../config/boot', __FILE__)
|
6
|
+
require 'rails/commands'
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,22 @@
|
|
1
|
+
basePath = '../';
|
2
|
+
|
3
|
+
files = [
|
4
|
+
ANGULAR_SCENARIO,
|
5
|
+
ANGULAR_SCENARIO_ADAPTER,
|
6
|
+
'test/e2e/**/*.js'
|
7
|
+
];
|
8
|
+
|
9
|
+
autoWatch = false;
|
10
|
+
|
11
|
+
browsers = ['Chrome'];
|
12
|
+
|
13
|
+
singleRun = true;
|
14
|
+
|
15
|
+
proxies = {
|
16
|
+
'/': 'http://localhost:3000/doc'
|
17
|
+
};
|
18
|
+
|
19
|
+
junitReporter = {
|
20
|
+
outputFile: 'test_out/e2e.xml',
|
21
|
+
suite: 'e2e'
|
22
|
+
};
|
@@ -0,0 +1,19 @@
|
|
1
|
+
basePath = '../';
|
2
|
+
|
3
|
+
files = [
|
4
|
+
JASMINE,
|
5
|
+
JASMINE_ADAPTER,
|
6
|
+
'../../app/assets/javascripts/collection_json_browser/angular.min.js',
|
7
|
+
'test/lib/angular/angular-mocks.js',
|
8
|
+
'../../app/assets/javascripts/collection_json_browser/angular/**/*.js',
|
9
|
+
'test/unit/**/*.js'
|
10
|
+
];
|
11
|
+
|
12
|
+
autoWatch = true;
|
13
|
+
|
14
|
+
browsers = ['Chrome'];
|
15
|
+
|
16
|
+
junitReporter = {
|
17
|
+
outputFile: 'test_out/unit.xml',
|
18
|
+
suite: 'unit'
|
19
|
+
};
|
@@ -0,0 +1,11 @@
|
|
1
|
+
@echo off
|
2
|
+
|
3
|
+
REM Windows script for running e2e tests
|
4
|
+
REM You have to run server and capture some browser first
|
5
|
+
REM
|
6
|
+
REM Requirements:
|
7
|
+
REM - NodeJS (http://nodejs.org/)
|
8
|
+
REM - Karma (npm install -g karma)
|
9
|
+
|
10
|
+
set BASE_DIR=%~dp0
|
11
|
+
karma start "%BASE_DIR%\..\config\karma-e2e.conf.js" %*
|
@@ -0,0 +1,115 @@
|
|
1
|
+
#!/usr/bin/env node
|
2
|
+
|
3
|
+
// Script which scrapes http://google.com/phone and generates JSON files used by this application
|
4
|
+
// To run this file you will need node.js and dependencies listed below
|
5
|
+
|
6
|
+
var httpAgent = require('http-agent'),
|
7
|
+
jsdom = require('jsdom'),
|
8
|
+
fs = require('fs'),
|
9
|
+
sys = require('sys');
|
10
|
+
|
11
|
+
|
12
|
+
var agent = httpAgent.create('www.google.com', ['/phone/']);
|
13
|
+
var baseDir = __dirname + '/../app/phones/';
|
14
|
+
var phones = [];
|
15
|
+
|
16
|
+
function boolean (text) {
|
17
|
+
return /true/i.test(text);
|
18
|
+
}
|
19
|
+
|
20
|
+
agent.addListener('next', function (error, agent) {
|
21
|
+
var htmlPage = agent.body.replace('</head>', '</head><body>').
|
22
|
+
replace(/<script[\s\S]*?<\/script>/gi, '');
|
23
|
+
// console.log(htmlPage);
|
24
|
+
var window = jsdom.jsdom(htmlPage).createWindow();
|
25
|
+
jsdom.jQueryify(window, 'http://code.jquery.com/jquery-1.4.2.min.js', function (window, jquery) {
|
26
|
+
var body = jquery('body');
|
27
|
+
if (phones.length) {
|
28
|
+
var c1 = body.find('.g-section .g-unit:nth-child(1)');
|
29
|
+
var c2 = body.find('.g-section .g-unit:nth-child(2)');
|
30
|
+
var phone = {};
|
31
|
+
phone.id = agent.url.split(/\//).pop();
|
32
|
+
phone.name = body.find('h2').text().trim();
|
33
|
+
phone.description = body.find('.description').text().trim();
|
34
|
+
phone.availability = c1.find('table:nth-child(1) th:contains("Availability")+td').text().trim().split(/\s*\n\s*/),
|
35
|
+
phone.battery = {
|
36
|
+
type: c1.find('table:nth-child(2) th:contains("Type")+td').text(),
|
37
|
+
talkTime: c1.find('table:nth-child(2) th:contains("Talk time")+td').text(),
|
38
|
+
standbyTime: c1.find('table:nth-child(2) th:contains("Standby time")+td').text()
|
39
|
+
};
|
40
|
+
phone.storage = {
|
41
|
+
ram: c1.find('table:nth-child(3) th:contains("RAM")+td').text(),
|
42
|
+
flash: c1.find('table:nth-child(3) th:contains("Internal storage")+td').text()
|
43
|
+
};
|
44
|
+
phone.connectivity = {
|
45
|
+
cell: c1.find('table:nth-child(4) th:contains("Network support")+td').text(),
|
46
|
+
wifi: c1.find('table:nth-child(4) th:contains("WiFi")+td').text(),
|
47
|
+
bluetooth: c1.find('table:nth-child(4) th:contains("Bluetooth")+td').text(),
|
48
|
+
infrared: boolean(c1.find('table:nth-child(4) th:contains("Infrared")+td img').attr('src')),
|
49
|
+
gps: boolean(c1.find('table:nth-child(4) th:contains("GPS")+td img').attr('src'))
|
50
|
+
};
|
51
|
+
phone.android = {
|
52
|
+
os: c2.find('table:nth-child(1) th:contains("OS Version")+td').text(),
|
53
|
+
ui: c2.find('table:nth-child(1) th:contains("UI")+td').text()
|
54
|
+
};
|
55
|
+
phone.sizeAndWeight = {
|
56
|
+
dimensions: c2.find('table:nth-child(2) th:contains("Dimensions")+td').text().trim().split(/\s*\n\s*/),
|
57
|
+
weight: c2.find('table:nth-child(2) th:contains("Weight")+td').text().trim()
|
58
|
+
};
|
59
|
+
phone.display = {
|
60
|
+
screenSize: c2.find('table:nth-child(3) th:contains("Screen size")+td').text(),
|
61
|
+
screenResolution: c2.find('table:nth-child(3) th:contains("Screen resolution")+td').text(),
|
62
|
+
touchScreen: boolean(c2.find('table:nth-child(3) th:contains("Touch screen")+td img').attr('src'))
|
63
|
+
};
|
64
|
+
phone.hardware = {
|
65
|
+
fmRadio: boolean(c2.find('table:nth-child(4) th:contains("FM Radio")+td img').attr('src')),
|
66
|
+
physicalKeyboard: c2.find('table:nth-child(4) th:contains("Physical keyboard")+td img').attr('src'),
|
67
|
+
accelerometer: boolean(c2.find('table:nth-child(4) th:contains("Accelerometer")+td img').attr('src')),
|
68
|
+
cpu: c2.find('table:nth-child(4) th:contains("CPU")+td').text(),
|
69
|
+
usb: c2.find('table:nth-child(4) th:contains("USB")+td').text(),
|
70
|
+
audioJack: c2.find('table:nth-child(4) th:contains("Audio / headphone jack")+td').text()
|
71
|
+
};
|
72
|
+
phone.camera= {
|
73
|
+
primary: c2.find('table:nth-child(5) th:contains("Primary")+td').text(),
|
74
|
+
features: c2.find('table:nth-child(5) th:contains("Features")+td').text().trim().split(/\s*\n\s*/)
|
75
|
+
};
|
76
|
+
phone.additionalFeatures = c2.find('table:nth-child(6) td').text();
|
77
|
+
phone.images = [];
|
78
|
+
body.find('#thumbs img').each(function(){
|
79
|
+
var imgUrl = 'http://www.google.com' + jquery(this).attr('src');
|
80
|
+
phone.images.push({
|
81
|
+
small: imgUrl,
|
82
|
+
large: imgUrl.replace(/\/small$/, '/large')
|
83
|
+
});
|
84
|
+
});
|
85
|
+
fs.writeSync(fs.openSync(baseDir + phone.id + '.json', 'w'), JSON.stringify(phone));
|
86
|
+
} else {
|
87
|
+
var age = 0;
|
88
|
+
body.find('ul.phonelist li.list').each(function(a){
|
89
|
+
var url = jquery(this).find('.name a').attr('href');
|
90
|
+
console.log('=======>', url);
|
91
|
+
var phone = {};
|
92
|
+
phone.id = url.split(/\//).pop();
|
93
|
+
phone.age = age++;
|
94
|
+
phone.imageUrl = 'http://google.com' +
|
95
|
+
jquery(this).find('img.phone').attr('src');
|
96
|
+
phone.snippet = jquery(this).find('.description').text().trim();
|
97
|
+
phone.name = jquery(this).find('strong').text().trim();
|
98
|
+
phone.carrier = jquery(this).find('.buy-from img').attr('alt');
|
99
|
+
phone.buyUrl = jquery(this).find('.buy-from a').attr('href');
|
100
|
+
console.log(phone);
|
101
|
+
phones.push(phone);
|
102
|
+
agent.addUrl(url);
|
103
|
+
});
|
104
|
+
fs.writeSync(fs.openSync(baseDir + '.json', 'w'), JSON.stringify(phones));
|
105
|
+
}
|
106
|
+
console.log(phone);
|
107
|
+
agent.next();
|
108
|
+
});
|
109
|
+
});
|
110
|
+
|
111
|
+
agent.addListener('stop', function (error, agent) {
|
112
|
+
sys.puts('the agent has stopped');
|
113
|
+
});
|
114
|
+
|
115
|
+
agent.start();
|
@@ -0,0 +1,15 @@
|
|
1
|
+
@echo off
|
2
|
+
|
3
|
+
REM Windows script for changing step
|
4
|
+
REM This script just copies content of given step into sandbox
|
5
|
+
|
6
|
+
set SB_DIR=%~dp0
|
7
|
+
set STEP=%1
|
8
|
+
|
9
|
+
rd /Q /S "%SB_DIR%/app/js" ^
|
10
|
+
"%SB_DIR%/app/partials" ^
|
11
|
+
"%SB_DIR%/app/css" ^
|
12
|
+
"%SB_DIR%/test/unit" ^
|
13
|
+
"%SB_DIR%/test/e2e"
|
14
|
+
|
15
|
+
xcopy "%SB_DIR%\..\step-%STEP%" "%SB_DIR%" /E /Y
|
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
######
|
4
|
+
# This script is useful only for committers to the upstream github repo.
|
5
|
+
######
|
6
|
+
|
7
|
+
for tag in `git tag`; do
|
8
|
+
git tag -d $tag
|
9
|
+
done
|
10
|
+
|
11
|
+
for sha in `git log --oneline | grep step- | cut -d ' ' -f 1`; do
|
12
|
+
tag=`git log $sha...$sha~1 --oneline | cut -d ' ' -f 2`
|
13
|
+
echo Creating tag $tag for $sha
|
14
|
+
git tag $tag $sha
|
15
|
+
done
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
ROOT_DIR=`dirname $0`/../..
|
4
|
+
cd $ROOT_DIR
|
5
|
+
|
6
|
+
SNAP_DIR=angular-phonecat-snapshots-web
|
7
|
+
|
8
|
+
|
9
|
+
rm -rf $SNAP_DIR
|
10
|
+
mkdir $SNAP_DIR
|
11
|
+
|
12
|
+
for i in {0..11}
|
13
|
+
do
|
14
|
+
mkdir $SNAP_DIR/step-$i
|
15
|
+
git checkout -f step-$i
|
16
|
+
|
17
|
+
cp -r app test $SNAP_DIR/step-$i/
|
18
|
+
rm -rf $SNAP_DIR/step-$i/test/lib/jstestdriver
|
19
|
+
done
|
@@ -0,0 +1,43 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
ROOT_DIR=`dirname $0`/../..
|
4
|
+
cd $ROOT_DIR
|
5
|
+
|
6
|
+
SNAP_DIR=angular-phonecat-snapshots
|
7
|
+
|
8
|
+
|
9
|
+
rm -rf $SNAP_DIR
|
10
|
+
mkdir $SNAP_DIR
|
11
|
+
|
12
|
+
for i in {0..11}
|
13
|
+
do
|
14
|
+
mkdir $SNAP_DIR/step-$i
|
15
|
+
git checkout -f step-$i
|
16
|
+
|
17
|
+
if [[ $i = 0 ]]; then
|
18
|
+
cp -r app config scripts test $SNAP_DIR/step-0/
|
19
|
+
mkdir $SNAP_DIR/step-0/logs
|
20
|
+
rm -r $SNAP_DIR/step-0/scripts/private
|
21
|
+
rm $SNAP_DIR/step-0/scripts/update-repo.sh
|
22
|
+
else
|
23
|
+
cp -r app $SNAP_DIR/step-$i/
|
24
|
+
mkdir $SNAP_DIR/step-$i/test/
|
25
|
+
cp -r test/unit test/e2e $SNAP_DIR/step-$i/test
|
26
|
+
rm -r $SNAP_DIR/step-$i/app/img
|
27
|
+
rm -r $SNAP_DIR/step-$i/app/lib
|
28
|
+
rm -rf $SNAP_DIR/step-$i/app/phones
|
29
|
+
fi
|
30
|
+
|
31
|
+
if [[ $i = 5 ]]; then
|
32
|
+
cp -r app/img $SNAP_DIR/step-0/app/
|
33
|
+
cp -r app/phones $SNAP_DIR/step-0/app/
|
34
|
+
fi
|
35
|
+
done
|
36
|
+
|
37
|
+
mkdir $SNAP_DIR/sandbox
|
38
|
+
cp scripts/private/goto_step.sh $SNAP_DIR/sandbox/
|
39
|
+
cp scripts/private/goto_step.bat $SNAP_DIR/sandbox/
|
40
|
+
|
41
|
+
zip -r angular-phonecat-`date +"%y%m%d_%H%M"` $SNAP_DIR
|
42
|
+
|
43
|
+
git checkout master
|