вторник, 23 февраля 2016 г.

Вывод параметров в html с помощью res.render (Node.js)

Обычно с помощь res.render используют Jade файлы, но если вам не нужно писать много шаблонов, можно воcпользоваться обычным html.
Первое что нужно сделать это установить модуль ejs (это наш шаблонизатор).

1) Установка ejs –
npm install ejs
2) Инициализируем наш шаблонизатор в файле app.js как ejs
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');

3)Теперь вызываем метод res.render с файлом шаблоном и параметрами, которые мы хотим передать:
exports.index = function(req, res){
  res.render('index', { title: 'ejs' });
};

4)Теперь в нашем html файле выводим параметры которые мы передали

Welcome to <%= title %>!


И не забудьте объявить папку с статическими файлами где находятся файлы доступной для http запросов

app.use('/client', express.static(__dirname + '/client'));

пятница, 19 февраля 2016 г.

Генерация ruby кода из uml модели

Недавно нашел очень удобный и простой интернет сервис для генерации кода из uml модели.
На этом сайте также можно генерировать код для таких языков программирования как Php, Java, C++ и даже для Sql. В моем случае  мне нужно было генерировать код для Ruby. Ссылка на сервис.



Модульное тестирование в Ruby

Однажды во время учебы по одному из предметов было задание создать модульный тест для  двух методов calculate() и input().

Среди всех языков программирования мой выбор на Ruby со своей простотой и возможностями. Еще один плюс что не нужно устанавливать дополнительные фреймворки так и программы для модульного тестирования на ruby. Сам модуль тестирования встроен в ruby и подключается строкой

require "test/unit"


И так я написал класс и три метода которые я буду тестировать.
class SimpleNumber

  def initialize(x, acc)
  
  end

  def self.input(x,acc)
    @x = x.to_i
    @acc = acc.to_i
  end

  def self.calculate()
    ex =0 
    return @x if @x == -1
    
    for i in  1..@acc
    ex += (-1**i) * ((@x**i) / self.fact(i)) 
    end
    return ex
  end
  
  def self.fact(n)
  if n.to_i<= 1
    1
  else
    n.to_i * fact( n.to_i - 1 )
  end
  end

end
А вот это собственно и есть модуль где мы тестируем наши методы.
require_relative "simple_number"
require "test/unit"
 
class TestSimpleNumber < Test::Unit::TestCase

 
  def test_numbers
    
    SimpleNumber.input(10,6)
    assert_equal(-2863, SimpleNumber.calculate())
   
    SimpleNumber.input(10.0,6)
    assert_equal(-2863, SimpleNumber.calculate())
   
    SimpleNumber.input(100,100)
    assert_equal(-14154608721008799669375546308212763073288043, SimpleNumber.calculate())
   
  end
  
  def test_factorial
   
   assert_equal(1, SimpleNumber.fact(-1))
   assert_equal(120, SimpleNumber.fact(5.4))
   assert_equal(815915283247897734345611269596115894272000000000, SimpleNumber.fact(40))
  
  end
  
  def test_string 
   
   SimpleNumber.input("10",6)
   assert_equal(-2863, SimpleNumber.calculate())
   
   assert_equal(120, SimpleNumber.fact("5"))
    
  end
  

end
Я использовал лишь один метод для тестирования модуля это assert_equal() , этот метод сравнивает два значения и определяет правильно идет расчет в модуле или нет.
Вот результат выполнения данного тестирования:
Что бы прочитать полную документацию про модульное тестирование в Ruby перейдите по этой ссылке