Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 2 additions & 17 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,17 +1,2 @@
lib-cov
*.seed
*.log
*.csv
*.dat
*.out
*.pid
*.gz

pids
logs
results

node_modules
npm-debug.log

.idea/
.idea/
c
91 changes: 91 additions & 0 deletions Collection.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
/**
* Коллекции для модели Event.
*
* @constructor
* @this {EventsCollection}
* @param {Array} collect_list Список Event классов.
*/
var EventsCollection = function (collect_list) {
if (Object.prototype.toString.call(collect_list) !== '[object Array]') {
throw new TypeError("argument must be Array");
}

this.list = collect_list;
};

/**
* Фильтрует объекты из коллекции.
*
* @param {function} filter_function Функция для фильтрации, this - ссылка на Event, должен вернуть boolean значение (True - значение будет добавлено в отфильтрованную коллекцию).
* @return {EventsCollection} Новый объект EventsCollection.
*/
EventsCollection.prototype.filter = function (filter_function) {
if (typeof filter_function !== "function") {
throw new TypeError("argument must be function");
}

var buff = [];
for (var i = 0; i < this.list.length; i++) {
var event = this.list[i];
if (filter_function.call(event)) {
buff.push(event);
}
}

return new EventsCollection(buff);
}

/**
* Отфильтровывает события, которые произошли до указанной даты.
*
* @return {EventsCollection} Новый объект EventsCollection.
*/
EventsCollection.prototype.start_before = function(date) {
return this.filter(function () {
return this.info.start_time < date;
});
};

/**
* Возвращает количество событий (Event) в коллекции.
*
* @return {number} Кол-во событий.
*/
EventsCollection.prototype.count_events = function() {
return this.list.length;
};

/**
* Отфильтровывает события, которые произошли после указанной даты.
*
* @return {EventsCollection} Новый объект EventsCollection.
*/
EventsCollection.prototype.start_after = function(date) {
return this.filter(function () {
return this.info.start_time > date;
});
};


function Collection_tests() {
var a1 = createNewEvent(222, 333, 'lol');
var a2 = createNewEvent(223, 333, 'lol2');
var a3 = createNewEvent(100, 500, 'lol2');
var events_data = [a1, a2, a3];
var events_callect = new EventsCollection(events_data);

// t1
var events_before_date = events_callect.start_before(223);
console.log(events_before_date.list.length == 2);

// t2
console.log(events_before_date.count_events() == 2);

// t3
var events_after_date = events_callect.start_after(222);
console.log(events_after_date.count_events() == 1);

// t4 combine methods
var some_filtered_event = events_callect.start_before(223).start_after(100);
console.log(some_filtered_event.count_events() == 1);
}
53 changes: 53 additions & 0 deletions Model.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@

/**
* Модель для класса Event.
*
* @constructor
* @param {Object} info Обект, описывающий общую информацию о мероприятии (место проведения, название, описание, временные рамки).
*/
var Event = function (info) {
var def = {
title: "event"
};

this.info = _.extend(def, info);

if (!this.info.start_time || !this.info.end_time) {
throw "miss required fields";
}

if (this.info.start_time > this.info.end_time) {
throw "starat_time more then end_time";
}

};

/**
* Создает объект Event
*
* @param {Number|Date} start Начало события
* @param {Number|Date} end Конец события
* @param {String} [name="Событие"] Имя события
*
* @example
* Event(new Date('2011-10-10T14:48:00'),
* new Date('2011-10-10T15:48:00'),
* "Совещание")
*
* @return {Object}
*/
function createNewEvent(start_at, end_at, name) {
var info = {
start_time: start_at,
end_time: end_at,
name: name
};

return new Event(info);
}


function Model_tests() {
var a = createNewEvent(222, 333, 'lol');
}

6 changes: 6 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<h1>hello</h1>
<!-- script src="jquery-1.7.2.min.js"></script -->
<script src="underscore.js"></script>
<!-- script src="backbone.js"></script -->
<script src="Model.js"></script>
<script src="Collection.js"></script>
Loading