Skip to content

Commit 4ba733f

Browse files
committed
Start defining basic layers
1 parent 4dc3f50 commit 4ba733f

File tree

11 files changed

+280
-71
lines changed

11 files changed

+280
-71
lines changed

Gruntfile.coffee

+61-59
Original file line numberDiff line numberDiff line change
@@ -7,109 +7,111 @@ module.exports = (grunt)->
77
pkg: grunt.file.readJSON 'package.json'
88

99
meta:
10-
banner: "/* ===========================================================\n" +
11-
"# <%= pkg.title || pkg.name %> - v<%= pkg.version %>\n" +
12-
"# ==============================================================\n" +
13-
"# Copyright (c) <%= grunt.template.today(\"yyyy\") %> <%= pkg.author.name %>\n" +
14-
"# Licensed <%= _.pluck(pkg.licenses, \"type\").join(\", \") %>.\n" +
15-
"*/\n"
10+
banner: '/* ===========================================================\n' +
11+
'# <%= pkg.title || pkg.name %> - v<%= pkg.version %>\n' +
12+
'# ==============================================================\n' +
13+
'# Copyright (c) <%= grunt.template.today(\"yyyy\") %> <%= pkg.author.name %>\n' +
14+
'# Licensed <%= _.pluck(pkg.licenses, \"type\").join(\", \") %>.\n' +
15+
'*/\n'
1616

1717
coffeelint:
1818
options:
1919
indentation:
2020
value: 2
21-
level: "error"
21+
level: 'error'
2222
no_trailing_semicolons:
23-
level: "error"
23+
level: 'error'
2424
no_trailing_whitespace:
25-
level: "error"
25+
level: 'error'
2626
max_line_length:
27-
level: "ignore"
28-
default: ["Gruntfile.coffee", "src/**/*.coffee"]
27+
level: 'ignore'
28+
default: ['Gruntfile.coffee', 'src/**/*.coffee']
2929

3030
clean:
31-
default: "lib"
32-
test: "test"
31+
default: 'lib'
32+
test: 'test'
3333

3434
coffee:
3535
options:
3636
bare: true
3737
default:
38-
expand: true
39-
flatten: true
40-
cwd: "src/coffee"
41-
src: ["*.coffee"]
42-
dest: "lib"
43-
ext: ".js"
38+
files: grunt.file.expandMapping(['**/*.coffee'], 'lib/',
39+
flatten: false
40+
cwd: 'src/coffee'
41+
ext: '.js'
42+
rename: (dest, matchedSrcPath)->
43+
dest + matchedSrcPath
44+
)
4445
test:
45-
expand: true
46-
flatten: true
47-
cwd: "src/spec"
48-
src: ["*.spec.coffee"]
49-
dest: "test"
50-
ext: ".spec.js"
46+
files: grunt.file.expandMapping(['**/*.spec.coffee'], 'test/',
47+
flatten: false
48+
cwd: 'src/spec'
49+
ext: '.spec.js'
50+
rename: (dest, matchedSrcPath)->
51+
dest + matchedSrcPath
52+
)
5153

5254
concat:
5355
options:
54-
banner: "<%= meta.banner %>"
56+
banner: '<%= meta.banner %>'
5557
stripBanners: true
5658
default:
5759
expand: true
5860
flatten: true
59-
cwd: "lib"
60-
src: ["*.js"]
61-
dest: "lib"
62-
ext: ".js"
61+
cwd: 'lib'
62+
src: ['*.js']
63+
dest: 'lib'
64+
ext: '.js'
6365

6466
# watching for changes
6567
watch:
6668
default:
67-
files: ["src/coffee/*.coffee"]
68-
tasks: ["build"]
69+
files: ['src/coffee/*.coffee']
70+
tasks: ['build']
6971
test:
70-
files: ["src/**/*.coffee"]
71-
tasks: ["test"]
72+
files: ['src/**/*.coffee']
73+
tasks: ['test']
7274

7375
shell:
7476
options:
7577
stdout: true
7678
stderr: true
7779
failOnError: true
7880
coverage:
79-
command: "istanbul cover jasmine-node --captureExceptions test && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage"
81+
command: 'istanbul cover jasmine-node --captureExceptions test && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage'
8082
jasmine:
81-
command: "jasmine-node --captureExceptions test"
83+
command: 'jasmine-node --captureExceptions test'
8284
publish:
83-
command: "npm publish"
85+
command: 'npm publish'
8486

8587
bump:
8688
options:
87-
files: ["package.json"]
88-
updateConfigs: ["pkg"]
89+
files: ['package.json']
90+
updateConfigs: ['pkg']
8991
commit: true
90-
commitMessage: "Bump version to %VERSION%"
91-
commitFiles: ["-a"]
92+
commitMessage: 'Bump version to %VERSION%'
93+
commitFiles: ['-a']
9294
createTag: true
93-
tagName: "v%VERSION%"
94-
tagMessage: "Version %VERSION%"
95+
tagName: 'v%VERSION%'
96+
tagMessage: 'Version %VERSION%'
9597
push: true
96-
pushTo: "origin"
97-
gitDescribeOptions: "--tags --always --abbrev=1 --dirty=-d"
98+
pushTo: 'origin'
99+
gitDescribeOptions: '--tags --always --abbrev=1 --dirty=-d'
98100

99101
# load plugins that provide the tasks defined in the config
100-
grunt.loadNpmTasks "grunt-bump"
101-
grunt.loadNpmTasks "grunt-coffeelint"
102-
grunt.loadNpmTasks "grunt-contrib-clean"
103-
grunt.loadNpmTasks "grunt-contrib-coffee"
104-
grunt.loadNpmTasks "grunt-contrib-concat"
105-
grunt.loadNpmTasks "grunt-contrib-watch"
106-
grunt.loadNpmTasks "grunt-shell"
102+
grunt.loadNpmTasks 'grunt-bump'
103+
grunt.loadNpmTasks 'grunt-coffeelint'
104+
grunt.loadNpmTasks 'grunt-contrib-clean'
105+
grunt.loadNpmTasks 'grunt-contrib-coffee'
106+
grunt.loadNpmTasks 'grunt-contrib-concat'
107+
grunt.loadNpmTasks 'grunt-contrib-watch'
108+
grunt.loadNpmTasks 'grunt-shell'
107109

108110
# register tasks
109-
grunt.registerTask "default", ["build"]
110-
grunt.registerTask "build", ["clean", "coffeelint", "coffee", "concat"]
111-
grunt.registerTask "test", ["build", "shell:jasmine"]
112-
grunt.registerTask "coverage", ["build", "shell:coverage"]
113-
grunt.registerTask "release", "Release a new version, push it and publish it", (target)->
114-
target = "patch" unless target
115-
grunt.task.run "bump-only:#{target}", "test", "bump-commit", "shell:publish"
111+
grunt.registerTask 'default', ['build']
112+
grunt.registerTask 'build', ['clean', 'coffeelint', 'coffee', 'concat']
113+
grunt.registerTask 'test', ['build', 'shell:jasmine']
114+
grunt.registerTask 'coverage', ['build', 'shell:coverage']
115+
grunt.registerTask 'release', 'Release a new version, push it and publish it', (target)->
116+
target = 'patch' unless target
117+
grunt.task.run 'bump-only:#{target}', 'test', 'bump-commit', 'shell:publish'

lib/client.js

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/* ===========================================================
2+
# sphere-node-sdk - v0.0.1
3+
# ==============================================================
4+
# Copyright (c) 2014 Nicola Molinari
5+
# Licensed MIT.
6+
*/
7+
var ProductService, Rest, SphereClient;
8+
9+
Rest = require('sphere-node-connect').Rest;
10+
11+
ProductService = require('./services/products');
12+
13+
/**
14+
* Defines a SphereClient.
15+
* @class SphereClient
16+
*/
17+
18+
19+
SphereClient = (function() {
20+
function SphereClient(config) {
21+
this._rest = new Rest(config);
22+
this.products = new ProductService(this._rest);
23+
}
24+
25+
return SphereClient;
26+
27+
})();
28+
29+
/**
30+
* The {@link SphereClient} client.
31+
*/
32+
33+
34+
module.exports = SphereClient;

lib/services/base.js

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
var BaseService, Q;
2+
3+
Q = require('q');
4+
5+
/**
6+
* Creates a new BaseService, containing base functionalities. It should be extended when defining a Service.
7+
* @class BaseService
8+
*/
9+
10+
11+
BaseService = (function() {
12+
/**
13+
* Initialize the class.
14+
* @param {Rest} [@_rest] an instance of the Rest client (sphere-node-connect)
15+
* @return {BaseService}
16+
*/
17+
18+
function BaseService(_rest) {
19+
this._rest = _rest;
20+
this._projectEndpoint = '/';
21+
this;
22+
}
23+
24+
/**
25+
* Fetch resource defined by [@_projectEndpoint]
26+
* @return {Promise} a promise, fulfilled with an Object or rejected with a SphereError
27+
*/
28+
29+
30+
BaseService.prototype.fetch = function() {
31+
var deferred;
32+
deferred = Q.defer();
33+
this._rest(this._projectEndpoint, function(e, r, b) {
34+
if (e) {
35+
return deferred.reject(e);
36+
} else {
37+
return deferred.resolve(JSON.parse(b));
38+
}
39+
});
40+
return deferred.promise;
41+
};
42+
43+
return BaseService;
44+
45+
})();
46+
47+
/**
48+
* The {@link BaseService} service.
49+
*/
50+
51+
52+
module.exports = BaseService;

lib/services/products.js

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
var BaseService, ProductService,
2+
__hasProp = {}.hasOwnProperty,
3+
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
4+
5+
BaseService = require('./base');
6+
7+
/**
8+
* Creates a new ProductService.
9+
* @class ProductService
10+
*/
11+
12+
13+
ProductService = (function(_super) {
14+
__extends(ProductService, _super);
15+
16+
/**
17+
* Initialize the class.
18+
* @param {Rest} [@_rest] an instance of the Rest client (sphere-node-connect)
19+
* @return {ProductService}
20+
*/
21+
22+
23+
function ProductService(rest) {
24+
ProductService.__super__.constructor.call(this, rest);
25+
this._projectEndpoint = '/';
26+
this;
27+
}
28+
29+
return ProductService;
30+
31+
})(BaseService);
32+
33+
/**
34+
* The {@link ProductService} service.
35+
*/
36+
37+
38+
module.exports = ProductService;

package.json

+5
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@
2727
"scripts": {
2828
"test": "grunt coverage"
2929
},
30+
"dependencies": {
31+
"q": "~1.0.0",
32+
"sphere-node-connect": "~0.2.2",
33+
"underscore": "~1.5.2"
34+
},
3035
"devDependencies": {
3136
"coveralls": "~2.6.1",
3237
"grunt": "~0.4.1",

src/coffee/client.coffee

+18-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
1-
"use strict"
1+
Rest = require('sphere-node-connect').Rest
2+
ProductService = require('./services/products')
23

3-
exports.awesome = -> "awesome"
4+
###*
5+
* Defines a SphereClient.
6+
* @class SphereClient
7+
###
8+
class SphereClient
9+
10+
constructor: (config)->
11+
@_rest = new Rest config
12+
13+
# services
14+
@products = new ProductService @_rest
15+
16+
###*
17+
* The {@link SphereClient} client.
18+
###
19+
module.exports = SphereClient

src/coffee/services/base.coffee

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
Q = require('q')
2+
3+
###*
4+
* Creates a new BaseService, containing base functionalities. It should be extended when defining a Service.
5+
* @class BaseService
6+
###
7+
class BaseService
8+
9+
###*
10+
* Initialize the class.
11+
* @param {Rest} [@_rest] an instance of the Rest client (sphere-node-connect)
12+
* @return {BaseService}
13+
###
14+
constructor: (@_rest)->
15+
@_projectEndpoint = '/'
16+
@
17+
18+
###*
19+
* Fetch resource defined by [@_projectEndpoint]
20+
* @return {Promise} a promise, fulfilled with an Object or rejected with a SphereError
21+
###
22+
fetch: ->
23+
deferred = Q.defer()
24+
@_rest @_projectEndpoint, (e, r, b)->
25+
if e
26+
deferred.reject e
27+
else
28+
deferred.resolve JSON.parse b
29+
deferred.promise
30+
31+
###*
32+
* The {@link BaseService} service.
33+
###
34+
module.exports = BaseService

src/coffee/services/products.coffee

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
BaseService = require('./base')
2+
3+
###*
4+
* Creates a new ProductService.
5+
* @class ProductService
6+
###
7+
class ProductService extends BaseService
8+
9+
###*
10+
* Initialize the class.
11+
* @param {Rest} [@_rest] an instance of the Rest client (sphere-node-connect)
12+
* @return {ProductService}
13+
###
14+
constructor: (rest)->
15+
super(rest)
16+
@_projectEndpoint = '/'
17+
@
18+
19+
###*
20+
* The {@link ProductService} service.
21+
###
22+
module.exports = ProductService

0 commit comments

Comments
 (0)