The Money Advice Service's responsive website.
Clone the repository:
$ git clone --recursive https://github.com/moneyadviceservice/frontend.git
Make sure you've added the following line to your /etc/hosts
file
10.50.6.148 gems.test.mas
Make sure all dependencies are available to the application:
$ bundle install
$ bowndler install
Make sure MySQL is running.
Setup the database:
bundle exec rake db:create && bundle exec rake db:schema:load
Copy the features.yml.sample to the config dir:
cp config/features.yml.sample config/features.yml
To start the application:
$ foreman s
The frontend locally will try to look for CMS locally. You can change the MAS_CMS_URL on .env file. Use http://comfy.moneyadviceservice.org.uk to point to LIVE content.
Don't forget to restart the server after the modification.
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Keep your feature branch focused and short lived
- Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request
We favor Feature Toggles over Feature Branches. To define features create a configuration file, config/features.yml with toggles for various features that are pending:
features:
an_active_feature: true
an_inactive_feature: false
At runtime you can use these toggles in order to decide whether or not to show a feature:
Feature.active?(:an_active_feature) # => true/false
Feature.inactive?(:an_active_feature) # => true/false
Feature.with(:an_active_feature) do
# code
end
Feature.without(:an_active_feature) do
# code
end
Our feature toggles are designed to be used to hide partly built features, often referred to as release toggles. A toggle and any conditional behaviour must be removed once a feature is complete.
Note that the local configuration file config/features.yml is ignored in git so make sure to run any acceptance tests with the feature toggled on and off locally.
If you need to enable a feature in any tests you can use tags. For example, in feature tests you can use:
@enable-feature-name
Scenario: View great new feature
When I visit the website
Then I should see this great new feature
Where the cucumber tag @enable-feature-name
will enable the feature feature_name
for the cucumber scenario.
We like to develop features from the outside in. We write our user stories in a declarative style. When contributing a feature:
- Create a new feature file in features.
- Write scenarios to exercise the scope of the feature in it's entirety.
- Create page objects in features/support/ui and expose them to the world in features/support/world/pages.rb.
- Start with a failing scenario then make it pass.
- Write unit tests for the objects you identify for your feature.
- Start with a failing unit test then make it pass.
- Keep your unit tests isolated.
- Test the Routing, Models, Controllers, Decorators, Helpers and JavaScript of your feature.
- Test your features against the mock API and record interactions with VCR.
The application is backed by a RESTful JSON API. This is described for humans as a blueprint file using the API Blueprint Language Specification. Changes you make to the blueprint file will be automatically reflected in the online API documentation and mock API.
The application includes an internal styleguide for contributors. It contains a living CSS styleguide, JavaScript styleguide and some recommendations on how to write Ruby code. As a contributor you should update the styleguide as you update the application. The CSS styleguide is powered by KSS, a documenting syntax for CSS.
The application uses Bower to manage front-end packages. Dependencies should be defined in the bower.json configuration file. Once installed they will be automatically available to the asset pipeline.
We use Draper for decorators. Decorators help us to keep logic out of our views, avoid procedural helpers and ensure our models are free of any presentational concerns.
Run the following in the command line.
RAILS_ENV=development bundle exec rake karma:install karma:run_once