summaryrefslogtreecommitdiff
path: root/DEVELOP.md
blob: a483fb75168ffd5829130a4398ee503423bda73b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# Development #

## Engines ##

Leap Web consists of different Engines. They live in their own subdirectory and are included through bundler via their path. This way changes to the engines immediately affect the server as if they were in the main `app` directory.

Currently Leap Web consists of 4 Engines:

* [core](https://github.com/leapcode/leap_web/blob/master/core) - ships some dependencies that are used accross all engines. This might be removed at some point.
* [users](https://github.com/leapcode/leap_web/blob/master/users) - user registration and authorization
* [certs](https://github.com/leapcode/leap_web/blob/master/certs) - Cert distribution for the EIP client
* [help](https://github.com/leapcode/leap_web/blob/master/help) - Help ticket management

## Creating a new engine ##

### Rails plugin new ###

Create the basic tree structure for an engine using
```
rails plugin new ENGINE_NAME -O --full
```

`-O` will skip active record and not add a dev dependency on sqlite.
`-full` will create a directory structure with config/routes and app and a basic engine file.

See http://guides.rubyonrails.org/engines.html for more general info about engines.

### Require Leap Web Core ###

You need to add leap_web_core to your .gemspec:
```ruby
  Gem::Specification.new do |s|
    # ...
    s.add_dependency "rails" 
    s.add_dependency "leap_web_core", "~> 0.0.1"
  end
```

You also need to require it before you define your engine in lib/my_engine/engine.rb:
```ruby
require "leap_web_core"

module MyEngine
  class Engine < ::Rails::Engine
    # ...
  end
end
```

### Require UI Gems ###

Leap Web Core provides a basic set of UI gems that should be used accross the engines. These include haml, sass, coffeescript, uglifier, bootstrap-sass, jquery and simple_form.

Do you want to add views, javascript and the like to your engine? Then you should use the common gems. In order to do so you need to add them to your gemspec:

```ruby
  require "my_engine/version"
  require "leap_web_core/dependencies"
 
  # ...

  Gem::Specification.new do |s|
    # ...
    s.add_dependency "rails" 
    s.add_dependency "leap_web_core", "~> 0.0.1"

    LeapWebCore::Dependencies.add_ui_gems_to_spec(s)
  end
```

You also need to require them before you define your engine in lib/my_engine/engine.rb:

```ruby
require "leap_web_core"
LeapWebCore::Dependencies.require_ui_gems

module MyEngine
  class Engine < ::Rails::Engine
    # ...
  end
end
```


## Creating Models ##

You can use the normal rails generators to create models. Since you required the leap_web_core gem you will be using CouchRest::Model. So your models inherit from CouchRest::Model::Base.
http://www.couchrest.info/model/definition.html has some good first steps for setting up the model.
CouchRest Model behaved strangely when using a model without a design block. So make sure to define an initial view: http://www.couchrest.info/model/view_objects.html .

From that point on you should be able to use the standart persistance and querying methods such as create, find, destroy and so on.