CloudWalk Ruby Runtime - Cutomizando uma app

  1. Pré-requisitos
  2. Configurações e Cwfile.json
  3. Código fonte e DaFunk Framework API
  4. Hello world

Este guia o conduzirá através do processo de customização de uma aplicação Ruby através da CloudWalk CLI. Atente-se aos pré-requisitos e siga todos os passos com atenção.

Pré-requisitos

  1. Este guia assume que você completou o passo anterior: Criando uma nova app

Configurações e Cwfile.json

O CloudWalk Manager oferece uma interface web para customização das configurações da aplicação, e o Cwfile.json permite que algumas configurações sejam customizadas. Ao executar o comando bundle exec rake cloudwalk:deploy toda informação que contém no arquivo será atualizada no CloudWalk Manager, para aplicações Ruby e POSXML.

Entendendo Cwfile.json e Cwfile.json.lock

  1. Cwfile.json Gerencia atributos da aplicação e módulos (nome, descrição, host, versões e etc)
  2. Cwfile.json.lock (GERADO AUTOMATICAMENTE, NÃO ALTERAR) Contém os identificadores para as aplicações e versões encontradas no Cwfile.json. Deve ser gerado pelo comando bundle exec rake cloudwalk:update quando qualquer alteração acontecer no arquivo Cwfile.json

Cwfile.json POSXML

Cwfile.json para aplicações POSXML suporta atualização de versão, URL do autorizador, descrição e pos display label

$ cat Cwfile.json # POSXML 
{
  "apps":[
    {
      "name":"posxmltest.xml",
      "modules":{},
      "version":"1.0.0",
      "authorizer_url":"https://myhost.com",
      "description":"posxmltest",
      "pos_display_label":"X"
    }
  ]
}

Cwfile.json Ruby

Cwfile.json para aplicações POSXML suporta atualização de URL do autorizador, descrição e pos display label

$ cat Cwfile.json # Ruby 
{
  "name":"rb_test",
  "runtime": "ruby",
  "modules":{
  },
  "version":"1.0.0",
  "authorizer_url":"https://myhost.com",
  "description":"rb_test",
  "pos_display_label":"X"
}

Existem diferenças entre Cwfile.json para Ruby e POSXML pela necessidade do gestão de multiplas aplicações e modulos em um repositório POSXML

Código fonte e DaFunk Framework API

Arquivos e diretorios

  1. lib/ Contém arquivos ruby que serão compilados.
  2. test/ Contém arquivos de testes em ruby.
  3. Gemfile/Gemfile.lock Controla a versão da CloudWalk CLI e outras gems ruby.
  4. Cwfile.json/Cwfile.json.lock Configura atributos da aplicacão CloudWalk.
  5. Rakefile Tarefas rake em ruby.

Aplicação e API DaFunk

Com o objetivo de dar autonomia aos desenvolvedores para que eles criem aplicações Ruby, desenvolvemos um componente que abstrai todos os métodos necessários para o início do desenvolvimento, facilitando a manipulação do display, impressora, teclado e rede do terminal POS, e ainda, para processar diferentes tipos de pagamentos. Tudo isso sem ter que começar do zero e sem utilizar uma linguagem de baixo nível. Este componente é chamado DaFunk e é open source. Por favor verifique a documentação completa da API do DaFunk.

Uma aplicação nova possui o seguinte código fonte no aqruivo lib/main.rb:

require 'simplehttp'

class Main < Device
  def self.call
    puts "Hello CloudWalk!"
    getc
    true
  end

  def self.foo
    :foo
  end

  def self.version
    "0.0.1"
  end
end

Este código descreve alguns pontos importantes sobre o desenvolvimento de uma aplicação. Confira detalhadamente:

require 'simplehttp'

Esta é a forma como as gems são adicionadas. Se é Ruby, tem que ter gems!

A gem simplehttp foi adicionada no arquivo Gemfile na raiz do projeto, e também é open source. Se você for um programador Ruby experiente, isto é tudo que você precisa saber para começar a desenvolver suas próprias gems!

class Main < Device

Este é ponto onde a classe Main é definida. Todas aplicações devem possuir a classe Main.

Perceba que não necessariamente ela precisa herdar a classe Device. Opcionalmente você pode utilizar métodos da classe Device incluindo o nome da classe, por exemplo, ao invés de escrever puts, você escreveria Device.puts.

def self.call

Função que é chamada sempre que a aplicação é executada. Todas aplicações devem definir esta função. Atente-se ao fato que esta função é executada dentro de um loop, então leve isto em consideração.

puts "Card..."

Exibe a string Card... no display do terminal.

getc

Para a execução, aguardando que uma tecla seja pressionada.

true

No final do método Main.call, indica se deve continuar ou não no loop.

Hello world

Como exemplo básico, podemos alterar esta aplicação para dar boas vindas ao usuário, perguntando pelo nome e exibindo uma saudação.

Se você é um desenvolvedor Ruby, você deve estar imaginando um código mais ou menos assim:

puts "Hello World! What's your name?"
name = gets
name = name.chomp # Removing the new line
puts "Hello #{name}!!!"

Ao colocar esse código dentro do método Main.call, antes do true no final, a aplicação irá perguntar por um nome, e depois disso o nome será exibido na linha seguinte.

Teste você mesmo! Faça as mudanças, execute rake e depois cloudwalk emulate. O arquivo main.rb deve ficar mais ou menos assim:

require 'simplehttp'

class Main < Device
  def self.call
    puts "Hello World! What's your name?"
    name = gets
    name = name.chomp # Removing the new line
    puts "Hello #{name}!!!"
    true
  end

  def self.foo
    :foo
  end

  def self.version
    "0.0.1"
  end
end