# Upgrading Ceedling

You'd like to stay in sync with the latest Ceedling... and who wouldn't? Depending on 
how you've made use of Ceedling, that may vary slightly. No matter what, though, our first
step is to update Ceedling itself.

## Step 1: Update Ceedling Itself

```
gem update ceedling
```

That should do it... unless you don't have a valid connection to the internet. In that case,
you might have to download the gem from rubygems.org and then install it manually:

```
gem update ceedling --local=ceedling-filename.zip
```

## Step 2: Udpate Projects Using Ceedling

When you set up your project(s), it was either configured to use the gem directly, or it was
configured to install itself locally (often into a vendor directory).

For projects that are of the first type, congratulations, you're finished. The project will
automatically use the new ceedling. There MAY be things that need to be tweaked if features have
moved significantly. (And we apologize if that's your situation... as we get to version 1, we're
going to have a stronger focus on backwards compatibility). If your project isn't working perfectly, 
skip down to Step 3.

If the project was installed to have a copy of ceedling locally, you have a choice. You may 
choose to continue to run THIS project on the old version of Ceedling. Often this is the
preferred method for legacy projects which only get occasional focus. Why go through the effort 
of updating for new tools if it's serving its purpose and you're unlikely to actually use the new
features?

The other choice, of course, is to update it. To do so, we open a command prompt and address ceedling 
from *outside* the project. For example, let's say we have the following structure:

 - projects
    - myproject
        - project.yml
        - src
        - tgt
        - vendor

In this case, we'd want to be in the `projects` directory. At that point, we can ask Ceedling to
update our project.

```
ceedling upgrade myproject
```

Ceedling will automatically look for your project yaml file and do its best to determine what needs
to be updated. If installed locally, this will mean copying the latest copy of Unity, CMock, and
Ceedling. It will also involve copying documentation, if you had that installed.

## Step 3: Solving Problems

We wish every project would update seamlessly... unfortunately there is a lot of customization that
goes into each project, and Ceedling often isn't aware of all of these. To make matter worse, Ceedling
has been in pre-release for awhile, meaning it occasionally has significant changes that may break
current installations. We've tried to capture the common ones here:

### rakefile

Ceedling is built in a utility called Rake. In the past, rake was the method that the user actually
interacted with Ceedling. That's no longer the case. Using a modern version of Ceedling means that
you issue commands like `ceedling test:all` instead of `rake test:all`. If you have a continuous 
integration server or other calling service, it may need to be updated to comply.

Similarly, older versions of Ceedling actually placed a rakefile in the project directory, allowing 
the project to customize its own flow. For the most part this went unused and better ways were later
introduced. At this point, the `rakefile` is more trouble than its worth and often should just be 
removed. 

### plugins

If you have custom plugins installed to your project, the plugin architecture has gone through some 
revisions and it may or may not be compatible at this time. Again, this is a problem which should
not exist soon.