Orange Buildboard 2.0

Константин Кривленя

Компания Targetprocess

goo.gl/TCtmLl

Немного о себе

Зовут меня Константин Кривленя.
Разработчик в Targetprocess.
Помогаю опенсорсной JavaScript-библиотеки чартов Taucharts.
Twitter (https://twitter.com/Krivlenia/)
Github (https://github.com/Mavrin/)
Хабр (http://habrahabr.ru/users/mavrin/)

Scala

Microservices

App

		
{
	"settings": {
		"url": {
			"caption": "Targetprocess URL",
			"type": "uri"
		},
		"token": {
			"caption": "Targetprocess authentication token",
			"type": "string"
		},
		"projects": {
			"caption": "Ids or names of projects to be monitored",
			"type": "list",
			"optional": true
		},
		"types": {
			"caption": "Names of entity types to be monitored",
			"type": "multiple selection",
			"optional": true,
			"values": [
				"UserStory",
				"Bug",
				"Feature",
				"Epic"
			],
			"defaultValue": [
				"UserStory",
				"Bug"
			]
		}
	},
	"methods": {
		"tasks": {
			"get": {}
		},
		"users": {
			"get": {}
		}
	}
}
		
	

Koa (next generation web framework for node.js)

Meteor is not framework. It is platform

Reactivity

Server

	
Meteor.publish('Lists.public', function() {
  return Lists.find({
    userId: {$exists: false}
  }, {
    fields: Lists.publicFields
  });
});

Client

	
const handle = Meteor.subscribe('Lists.public');
Lists.find({}).fetch() // return all public
 	

Client

	
Template.Lists.helpers({
  lists() {
    return Lists.find();
  }
});
	

Client

	
{{#each todo in lists}}
	{{#each tag in todo.tags}}
		{tag}
	{{/each}}
{{/each}}
	

DDP, the Distributed Data Protocol

Client

	
	// In client-side code, declare a local collection
	// by passing `null` as the argument
	ScoreAverages = new Mongo.Collection(null);
	

Client

	
function updateAverages() {
  // Clean out result cache
  ScoreAverages.remove({});

  // Call a Method that does an expensive computation
  Games.methods.calculateAverages.call((err, res) => {
    res.forEach((item) => {
      ScoreAverages.insert(item);
    });
  });
}
	

Meteor 1.3

Reactive GraphQl

Apollo

GraphQl request

	
{
  getAverage(category: 'sci-fi') {
    name,
	url,
    value
  }
}
	

GraphQl response

	
[{
	name: 'beyondthestars',
	url: 'https://beyondthestars.com'
	value: 1000
}]
	

ES2015 modules with import and export

Official testing support

Deploy

git-deploy

Demo

Future

Buildboard

Вопросы?