Up until now we’ve used the
crystal command to only run our code.
crystal command is pretty useful and does lot more than that. (check
crystal --helpfor more)
For example we can use it to create a new Crystal project.
$ crystal init app samplecreate sample/.gitignorecreate sample/LICENSEcreate sample/README.mdcreate sample/.travis.ymlcreate sample/shard.ymlcreate sample/src/sample.crcreate sample/src/sample/version.crcreate sample/spec/spec_helper.crcreate sample/spec/sample_spec.crInitialized empty Git repository in /Users/serdar/crystal_for_rubyists/code/04/sample/.git/
crystal helped us create a new project. Let’s see what it did for us.
Created a new folder named sample
Created a LICENSE
.travis.yml to easily integrate Travis for continous integration.
shard.yml for dependency management.
Initialized an empty Git repository
Created a README for our project
spec folders to put our code and tests(ssh..we’ll talk about it soon) in it.
Let’s run it.
$ cd sample$ crystal src/sample.cr
Nothing! Yay :)
Now that we create our first project. Let’s use some external libraries.
To manage dependencies of a project we use
shards is like
shard.yml is like
awesome-crystal has a curated list of Crystal shards.
[CrystalShards.xyz] lists all of the available Crystal shards on GitHub (similar to rubygems.org)
Let’s open up
name: sampleversion: 0.1.0authors:- sdogruyol <email@example.com>license: MIT
This is a default
shard.yml and it contains the minimal necessary information about our project. Those are
name specifies the name of the project
version specifies the version of the project. Crystal itself uses semver for version management so it’s a good convention for you to follow.
authors section specifies the authors of the project. By default this is taken from your global
license specifies the type of your project license. By default this is
Okay. That’s great but what can we do with this
shard.yml? Well we can use this file to add external libraries(we call it dependency) and manage them without even worrying about any folders / paths e.g.. Sweet isn’t it?
Now that we know the true power of
shards let’s add Kemal to our
shard.yml and build a simple web application :)
shard.yml. First we need to add
Kemal as a dependency to our project. We do this by including
dependencies:kemal:github: sdogruyol/kemalversion: 0.14.1
That’s great! Now we added
Kemal to our project. First, we need to install it.
$ shards installUpdating https://github.com/sdogruyol/kemal.gitUpdating https://github.com/luislavena/radix.gitUpdating https://github.com/jeromegn/kilt.gitInstalling kemal (0.14.1)Installing radix (0.3.0)Installing kilt (0.3.3)
Okay now we are ready to use
Kemal in our project. Open up
require "./sample/*"require "kemal"module Sampleget "/" do"Hello World!"endendKemal.run
Look how we used
require to access
Kemal in our program.
$ crystal src/sample.cr[development] Kemal is ready to lead at http://0.0.0.0:3000
localhost:3000 and see it in action!
Now you know how to add dependencies and use others’