aboutsummaryrefslogtreecommitdiffstats
path: root/railties/doc/guides/creating_plugins/creating_plugins.txt
blob: f2ed6ed8bbd02fe3bafa38f74905eee54c9bfafc (plain) (blame)
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
The Basics of Creating Rails Plugins
====================================

Pretend for a moment that you are an avid bird watcher.  Your favorite bird is the Yaffle, and you want to create a plugin that allows other developers to share in the Yaffle goodness.

In this tutorial you will learn how to create a plugin that includes:

 * Core Extensions - extending String with a `to_squawk` method:
+
[source, ruby]
-------------------------------------------
# Anywhere
"hello!".to_squawk # => "squawk! hello!"
-------------------------------------------

* An `acts_as_yaffle` method for ActiveRecord models that adds a `squawk` method:
+
[source, ruby]
-------------------------------------------
class Hickwall < ActiveRecord::Base
  acts_as_yaffle :yaffle_text_field => :last_sang_at
end

Hickwall.new.squawk("Hello World")
-------------------------------------------

* A view helper that will print out squawking info:
+
[source, ruby]
-------------------------------------------
squawk_info_for(@hickwall)
-------------------------------------------

* A generator that creates a migration to add squawk columns to a model:
+
-------------------------------------------
script/generate yaffle hickwall
-------------------------------------------

* A custom generator command:
+
[source, ruby]
-------------------------------------------
class YaffleGenerator < Rails::Generator::NamedBase
  def manifest
    m.yaffle_definition
  end
end
-------------------------------------------

* A custom route method:
+
[source, ruby]
-------------------------------------------
ActionController::Routing::Routes.draw do |map|
  map.yaffles
end
-------------------------------------------

In addition you'll learn how to:

 * test your plugins.
 * work with 'init.rb', how to store model, views, controllers, helpers and even other plugins in your plugins.
 * create documentation for your plugin.
 * write custom Rake tasks in your plugin.


include::preparation.txt[]

include::string_to_squawk.txt[]

include::acts_as_yaffle.txt[]

include::view_helper.txt[]

include::migration_generator.txt[]

include::custom_generator.txt[]

include::custom_route.txt[]

include::odds_and_ends.txt[]

include::appendix.txt[]