formula 0.3.5 → 0.3.6
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +1 -1
- data/README.rdoc +6 -6
- data/lib/formula.rb +143 -143
- data/lib/formula/railtie.rb +1 -1
- data/lib/formula/version.rb +1 -1
- data/lib/generators/attached/templates/_form.html.haml +6 -0
- data/test/dummy/app/assets/javascripts/application.js +2 -1
- data/test/dummy/app/assets/javascripts/{contacts.js → main.js.coffee} +0 -0
- data/test/dummy/app/assets/stylesheets/application.css +4 -168
- data/test/dummy/app/assets/stylesheets/main.css.scss +6 -0
- data/test/dummy/app/controllers/application_controller.rb +56 -0
- data/test/dummy/app/controllers/contacts_controller.rb +15 -8
- data/test/dummy/app/controllers/main_controller.rb +2 -2
- data/test/dummy/app/controllers/sessions_controller.rb +37 -0
- data/test/dummy/app/controllers/users_controller.rb +46 -0
- data/test/dummy/app/helpers/sessions_helper.rb +2 -0
- data/test/dummy/app/helpers/users_helper.rb +2 -0
- data/test/dummy/app/models/contact.rb +6 -6
- data/test/dummy/app/models/group.rb +3 -3
- data/test/dummy/app/models/session.rb +39 -0
- data/test/dummy/app/models/user.rb +19 -0
- data/test/dummy/app/views/contacts/_form.html.haml +12 -0
- data/test/dummy/app/views/contacts/edit.html.haml +6 -0
- data/test/dummy/app/views/contacts/index.html.haml +21 -0
- data/test/dummy/app/views/contacts/new.html.haml +6 -0
- data/test/dummy/app/views/layouts/application.html.haml +23 -0
- data/test/dummy/app/views/main/index.html.haml +7 -0
- data/test/dummy/app/views/sessions/_fields.html.haml +3 -0
- data/test/dummy/app/views/sessions/_form.html.haml +5 -0
- data/test/dummy/app/views/sessions/_modal.html.haml +12 -0
- data/test/dummy/app/views/sessions/new.html.haml +5 -0
- data/test/dummy/app/views/sessions/new.js.haml +2 -0
- data/test/dummy/app/views/users/_fields.html.haml +4 -0
- data/test/dummy/app/views/users/_form.html.haml +5 -0
- data/test/dummy/app/views/users/_modal.html.haml +12 -0
- data/test/dummy/app/views/users/edit.html.haml +6 -0
- data/test/dummy/app/views/users/edit.js.haml +2 -0
- data/test/dummy/app/views/users/new.html.haml +6 -0
- data/test/dummy/app/views/users/new.js.haml +2 -0
- data/test/dummy/config/initializers/formula.rb +9 -0
- data/test/dummy/config/routes.rb +5 -3
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/migrate/20110109175811_create_contacts.rb +3 -3
- data/test/dummy/db/migrate/20120226213733_create_users.rb +11 -0
- data/test/dummy/db/schema.rb +9 -1
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/development.log +517 -8877
- data/test/dummy/log/test.log +125 -1276
- data/test/dummy/test/fixtures/users.yml +11 -0
- data/test/dummy/test/functional/sessions_controller_test.rb +7 -0
- data/test/dummy/test/functional/users_controller_test.rb +7 -0
- data/test/dummy/test/unit/helpers/sessions_helper_test.rb +4 -0
- data/test/dummy/test/unit/helpers/users_helper_test.rb +4 -0
- data/test/dummy/test/unit/user_test.rb +4 -0
- data/test/dummy/tmp/cache/assets/C78/B50/sprockets%2F50c7787472c6f1d292b210d9089ab021 +0 -0
- data/test/dummy/tmp/cache/assets/CA7/750/sprockets%2F26520da197942c10bb08b879dd27a335 +0 -0
- data/test/dummy/tmp/cache/assets/CB7/2E0/sprockets%2F122b94d05b802dec569597f372446e3e +0 -0
- data/test/dummy/tmp/cache/assets/CB9/500/sprockets%2Ff73079569d09e1dbf3d2610999b612d0 +0 -0
- data/test/dummy/tmp/cache/assets/{CFB/150/sprockets%2Ff5209763c82e66ecdff0f9583166f557 → CB9/B60/sprockets%2Fe7b839a0806e5c20e5018197f56cd656} +0 -0
- data/test/dummy/tmp/cache/assets/CBB/9B0/sprockets%2Fb718278187c3db586a420ec889c2950b +0 -0
- data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/CDA/AB0/sprockets%2F4c7fc412b88cba24c365e12622902d79 +0 -0
- data/test/dummy/tmp/cache/assets/CDE/810/sprockets%2Fe9a718cd714105529e1126df281d5b9b +0 -0
- data/test/dummy/tmp/cache/assets/CDF/F20/sprockets%2Fafb369756d4161e56d25623705a1e4cf +0 -0
- data/test/dummy/tmp/cache/assets/D02/B20/sprockets%2F8424bdf2fc431411608e3a8ad4b12d77 +0 -0
- data/test/dummy/tmp/cache/assets/D07/020/sprockets%2F48a47b7a23025cf73408c7eb161fac38 +0 -0
- data/test/dummy/tmp/cache/assets/D11/7D0/sprockets%2F3eb85317d2ba89b1dd70fa28790a5943 +0 -0
- data/test/dummy/tmp/cache/assets/D1E/300/sprockets%2Fccb7b47689ba77b4d03c884f375b9154 +0 -0
- data/test/dummy/tmp/cache/assets/D2B/FC0/sprockets%2F90966edb48c329529d676f9a992db3da +0 -0
- data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/D3E/520/sprockets%2F0c368fc7951f5ee15b407bf530a5df25 +0 -0
- data/test/dummy/tmp/cache/assets/D48/6E0/sprockets%2Fee6b9dc867c5bc23c4c70f38549b2371 +0 -0
- data/test/dummy/tmp/cache/assets/D4A/E30/sprockets%2F058c4112a2f16c6d9a8499fffa24e6f7 +0 -0
- data/test/dummy/tmp/cache/assets/D4E/110/sprockets%2Fd604658b4f6b260ccdc967ed53b9926e +0 -0
- data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/D62/170/sprockets%2F75a5cc23ce1b2511be2ff95407e62d1e +0 -0
- data/test/dummy/tmp/cache/assets/D6C/090/sprockets%2F51b52949eefd109c700dc0ad8bd96d42 +0 -0
- data/test/dummy/tmp/cache/assets/D6C/210/sprockets%2Fc38fd401489a552f8716adf4aedaa325 +0 -0
- data/test/dummy/tmp/cache/assets/D6E/060/sprockets%2Fc0f3f19ea49926baf1623d4e12bc8f64 +0 -0
- data/test/dummy/tmp/cache/assets/{D2F/290/sprockets%2Fd5c244ec777cb5719f86d085df9f8816 → D76/4D0/sprockets%2F8a096b6dd59bfda3e461617a95524eaf} +0 -0
- data/test/dummy/tmp/cache/assets/D7B/CF0/sprockets%2Fd500cd67c78fa2fc96993e6cdd3050f6 +0 -0
- data/test/dummy/tmp/cache/assets/D93/910/sprockets%2Fb3f07cff0c2b5450dff46b72d29ec320 +0 -0
- data/test/dummy/tmp/cache/assets/D9B/350/sprockets%2Fb77ea162d3f4a5a427c1f2a6cd9db666 +0 -0
- data/test/dummy/tmp/cache/assets/D9F/6A0/sprockets%2F415cba7de981a2df5af982b546bbf064 +0 -0
- data/test/dummy/tmp/cache/assets/DBC/7B0/sprockets%2Fbd0fd218d2e084da2a4a3026cf71a9ef +0 -0
- data/test/dummy/tmp/cache/assets/DC2/AF0/sprockets%2F3cd60b3d8a714ddcdc4256558f0aedc0 +0 -0
- data/test/dummy/tmp/cache/assets/{D84/210/sprockets%2Fabd0103ccec2b428ac62c94e4c40b384 → DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994} +0 -0
- data/test/dummy/tmp/cache/assets/DDD/DA0/sprockets%2Ffef9a2b73f2ed6a6042b5f4cd88279df +0 -0
- data/test/dummy/tmp/cache/assets/DDF/F90/sprockets%2Ffdb9a7e2104ed9ab57d12896fdb5f9d7 +0 -0
- data/test/dummy/tmp/cache/assets/{CF7/670/sprockets%2F00b214e322c484fcc1555dafaa240947 → DE1/6A0/sprockets%2Fcae9aba95894da8a28fa8a5387dc565f} +0 -0
- data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/cache/assets/E1B/AD0/sprockets%2F150cafe2db298a20f82fbadac1d7a7e2 +0 -0
- data/test/dummy/tmp/cache/assets/{D6B/5D0/sprockets%2F48da0deeef45ff0cac611596e0774114 → E1D/010/sprockets%2Fdffad412d86bfdfbb1f307d711da21d3} +0 -0
- data/test/dummy/tmp/cache/assets/E3D/7F0/sprockets%2Faa9db9e2e4799a861f0fff2d7ab09cee +0 -0
- data/test/dummy/tmp/cache/assets/E55/150/sprockets%2F7ade5edd1b6d232bd5eab48b3bdc64c8 +0 -0
- data/test/dummy/tmp/cache/sass/570e82feeccb881a24a9919fb3feaf73dcbe19fa/_bootstrap.scssc +0 -0
- data/test/dummy/tmp/cache/sass/900d735417fe8d5104d4de0e0165ff7cb5492466/main.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_accordion.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_alerts.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_breadcrumbs.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_button-groups.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_buttons.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_carousel.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_close.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_code.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_component-animations.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_dropdowns.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_grid.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_hero-unit.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_labels-badges.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_layouts.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_mixins.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_modals.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_navbar.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_navs.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_pager.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_pagination.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_popovers.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_progress-bars.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_reset.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_scaffolding.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_sprites.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_tables.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_thumbnails.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_tooltip.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_type.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_utilities.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_variables.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ac81519228da4075394a77780983d95f3f77aa1d/_wells.scssc +0 -0
- data/test/dummy/tmp/pids/server.pid +1 -0
- metadata +251 -65
- data/test/dummy/app/assets/javascripts/main.js +0 -0
- data/test/dummy/app/assets/stylesheets/contacts.css +0 -0
- data/test/dummy/app/assets/stylesheets/main.css +0 -0
- data/test/dummy/app/views/contacts/_form.html.erb +0 -21
- data/test/dummy/app/views/contacts/edit.html.erb +0 -4
- data/test/dummy/app/views/contacts/index.html.erb +0 -19
- data/test/dummy/app/views/contacts/new.html.erb +0 -4
- data/test/dummy/app/views/layouts/application.html.erb +0 -14
- data/test/dummy/app/views/main/index.html.erb +0 -9
- data/test/dummy/tmp/cache/assets/BAB/A00/sprockets%2F347f335128024408181207cbc0461526 +0 -0
- data/test/dummy/tmp/cache/assets/C77/F30/sprockets%2F021780432569bfa6c8135d5d4111f2e8 +0 -0
- data/test/dummy/tmp/cache/assets/C89/150/sprockets%2F1ff78c0e818b9e0311560396b734719e +0 -0
- data/test/dummy/tmp/cache/assets/CE1/BA0/sprockets%2F263ecf6bc5196b70405d900e7c44c946 +0 -0
- data/test/dummy/tmp/cache/assets/D06/B40/sprockets%2F25fca4643219052b0d5c66cf2c71f72f +0 -0
- data/test/dummy/tmp/cache/assets/D11/430/sprockets%2F25ea8d6063b1eb98361b1196f2fce807 +0 -0
- data/test/dummy/tmp/cache/assets/D24/5A0/sprockets%2F3a89b583dd80975d1e0968e730de5bc9 +0 -0
- data/test/dummy/tmp/cache/assets/D2D/490/sprockets%2F52514897c01dab621a0d9892aafb1ea2 +0 -0
- data/test/dummy/tmp/cache/assets/D54/ED0/sprockets%2F71c9fa01091d432b131da3bb73faf3d4 +0 -177
- data/test/dummy/tmp/cache/assets/D84/170/sprockets%2Fd09fc89236193cb0ff9deb09b97c648d +0 -0
- data/test/dummy/tmp/cache/assets/DA5/7E0/sprockets%2F87a5f378354ce6e80dda84ab1cfd06f3 +0 -0
- data/test/dummy/tmp/cache/assets/DA7/530/sprockets%2Fe36b8fcf5914a3a6bf058abfe7367b19 +0 -0
- data/test/dummy/tmp/cache/assets/DAA/470/sprockets%2Faa2b19ddf75cee55d7f2822e3da55779 +0 -0
data/lib/formula/railtie.rb
CHANGED
data/lib/formula/version.rb
CHANGED
File without changes
|
@@ -1,173 +1,9 @@
|
|
1
1
|
/*
|
2
2
|
*= require_self
|
3
|
-
*= require_tree .
|
3
|
+
*= require_tree .
|
4
4
|
*/
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
html, body
|
9
|
-
{
|
10
|
-
font-family: Helvetica, Verdana, Arial, sans-serif;
|
11
|
-
font-style: normal;
|
12
|
-
font-weight: normal;
|
13
|
-
}
|
14
|
-
|
15
|
-
/* grid */
|
16
|
-
|
17
|
-
.container
|
18
|
-
{
|
19
|
-
width: 960px;
|
20
|
-
margin-left: auto;
|
21
|
-
margin-right: auto;
|
22
|
-
}
|
23
|
-
|
24
|
-
.grid-01, .grid-02, .grid-03, .grid-04, .grid-05, .grid-06, .grid-07, .grid-08, .grid-09, .grid-10, .grid-11, .grid-12
|
25
|
-
{
|
26
|
-
float: left;
|
27
|
-
display: inline;
|
28
|
-
position: relative;
|
29
|
-
margin-left: 10px;
|
30
|
-
margin-right: 10px;
|
31
|
-
}
|
32
|
-
|
33
|
-
.alpha { margin-left: 0px; }
|
34
|
-
.omega { margin-right: 0px; }
|
35
|
-
|
36
|
-
.grid-01 { width: 60px; }
|
37
|
-
.grid-02 { width: 140px; }
|
38
|
-
.grid-03 { width: 220px; }
|
39
|
-
.grid-04 { width: 300px; }
|
40
|
-
.grid-05 { width: 380px; }
|
41
|
-
.grid-06 { width: 460px; }
|
42
|
-
.grid-07 { width: 540px; }
|
43
|
-
.grid-08 { width: 620px; }
|
44
|
-
.grid-09 { width: 700px; }
|
45
|
-
.grid-10 { width: 780px; }
|
46
|
-
.grid-11 { width: 860px; }
|
47
|
-
.grid-12 { width: 940px; }
|
48
|
-
|
49
|
-
.prefix-01 { padding-left: 80px; }
|
50
|
-
.suffix-01 { padding-right: 80px; }
|
51
|
-
.prefix-02 { padding-left: 160px; }
|
52
|
-
.suffix-02 { padding-right: 160px; }
|
53
|
-
.prefix-03 { padding-left: 240px; }
|
54
|
-
.suffix-03 { padding-right: 240px; }
|
55
|
-
.prefix-04 { padding-left: 320px; }
|
56
|
-
.suffix-04 { padding-right: 320px; }
|
57
|
-
.prefix-05 { padding-left: 400px; }
|
58
|
-
.suffix-05 { padding-right: 400px; }
|
59
|
-
.prefix-06 { padding-left: 480px; }
|
60
|
-
.suffix-06 { padding-right: 480px; }
|
61
|
-
.prefix-07 { padding-left: 560px; }
|
62
|
-
.suffix-07 { padding-right: 560px; }
|
63
|
-
.prefix-08 { padding-left: 640px; }
|
64
|
-
.suffix-08 { padding-right: 640px; }
|
65
|
-
.prefix-09 { padding-left: 720px; }
|
66
|
-
.suffix-09 { padding-right: 720px; }
|
67
|
-
.prefix-10 { padding-left: 800px; }
|
68
|
-
.suffix-10 { padding-right: 800px; }
|
69
|
-
.prefix-11 { padding-left: 880px; }
|
70
|
-
.suffix-11 { padding-right: 880px; }
|
71
|
-
|
72
|
-
.left { float: left; }
|
73
|
-
.right { float: right; }
|
74
|
-
|
75
|
-
.center { text-align: center; }
|
76
|
-
.justify { text-align: justify; }
|
77
|
-
|
78
|
-
.clear
|
79
|
-
{
|
80
|
-
clear: both;
|
81
|
-
overflow: hidden;
|
82
|
-
visibility: hidden;
|
83
|
-
height: 0px;
|
84
|
-
width: 0px;
|
85
|
-
}
|
86
|
-
|
87
|
-
/* form */
|
88
|
-
|
89
|
-
.field_with_errors
|
90
|
-
{
|
91
|
-
display: inline;
|
92
|
-
}
|
93
|
-
|
94
|
-
.input
|
95
|
-
{
|
96
|
-
padding: 0px;
|
97
|
-
}
|
98
|
-
|
99
|
-
.input.url, .input.text, .input.email, .input.string, .input.phone, .input.password
|
100
|
-
{
|
101
|
-
padding: 0px 20px 0px 0px;
|
102
|
-
}
|
103
|
-
|
104
|
-
.block
|
105
|
-
{
|
106
|
-
padding: 4px 0px;
|
107
|
-
}
|
108
|
-
|
109
|
-
.hint
|
110
|
-
{
|
111
|
-
display: block;
|
112
|
-
color: #888;
|
113
|
-
margin: 2px 0px;
|
114
|
-
padding: 0px;
|
115
|
-
font-size: 12px;
|
116
|
-
font-weight: normal;
|
117
|
-
}
|
118
|
-
|
119
|
-
.error
|
120
|
-
{
|
121
|
-
display: block;
|
122
|
-
color: #C22;
|
123
|
-
margin: 2px 0px;
|
124
|
-
padding: 0px;
|
125
|
-
font-size: 12px;
|
126
|
-
font-weight: bolder;
|
127
|
-
}
|
128
|
-
|
129
|
-
.errors label
|
130
|
-
{
|
131
|
-
color: #A00;
|
132
|
-
}
|
133
|
-
|
134
|
-
.errors .hint
|
135
|
-
{
|
136
|
-
color: #A00;
|
137
|
-
}
|
138
|
-
|
139
|
-
.errors .error
|
140
|
-
{
|
141
|
-
color: #A00;
|
142
|
-
}
|
143
|
-
|
144
|
-
label
|
145
|
-
{
|
146
|
-
display: inline;
|
147
|
-
color: #444;
|
148
|
-
margin: 2px 0px;
|
149
|
-
padding: 0px;
|
150
|
-
font-size: 14px;
|
151
|
-
font-weight: normal;
|
152
|
-
}
|
153
|
-
|
154
|
-
input[type="url"],
|
155
|
-
input[type="tel"],
|
156
|
-
input[type="text"],
|
157
|
-
input[type="email"],
|
158
|
-
input[type="password"],
|
159
|
-
textarea
|
160
|
-
{
|
161
|
-
width: 100%;
|
162
|
-
padding: 8px;
|
163
|
-
font-size: 16px;
|
164
|
-
font-weight: normal;
|
165
|
-
}
|
166
|
-
|
167
|
-
textarea
|
6
|
+
body
|
168
7
|
{
|
169
|
-
|
170
|
-
|
171
|
-
font-size: 16px;
|
172
|
-
font-weight: normal;d
|
173
|
-
}
|
8
|
+
padding: 80px 0px;
|
9
|
+
}
|
@@ -1,3 +1,59 @@
|
|
1
1
|
class ApplicationController < ActionController::Base
|
2
|
+
|
2
3
|
protect_from_forgery
|
4
|
+
|
5
|
+
helper_method :user
|
6
|
+
helper_method :authenticated?
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def user
|
11
|
+
cookie = cookies.signed[:user]
|
12
|
+
@_user ||= User.find(cookie) rescue deauthenticate if cookie
|
13
|
+
end
|
14
|
+
|
15
|
+
def authenticate(user)
|
16
|
+
cookies.permanent.signed[:user] = user.id
|
17
|
+
end
|
18
|
+
|
19
|
+
def deauthenticate
|
20
|
+
cookies.delete :user
|
21
|
+
end
|
22
|
+
|
23
|
+
def authenticated?
|
24
|
+
user.present?
|
25
|
+
end
|
26
|
+
|
27
|
+
def authenticate!
|
28
|
+
unless authenticated?
|
29
|
+
store
|
30
|
+
flash[:warning] = 'You must be logged in.'
|
31
|
+
respond_to do |format|
|
32
|
+
format.html { redirect_to new_user_path }
|
33
|
+
end
|
34
|
+
return false
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def deauthenticate!
|
39
|
+
if authenticated?
|
40
|
+
store
|
41
|
+
flash[:warning] = 'You must be logged out.'
|
42
|
+
respond_to do |format|
|
43
|
+
format.html { redirect_to edit_user_path }
|
44
|
+
end
|
45
|
+
return false
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def store
|
50
|
+
session[:location] = request.fullpath
|
51
|
+
end
|
52
|
+
|
53
|
+
def restore(options)
|
54
|
+
location = session[:location] || options[:default]
|
55
|
+
session[:location] = nil
|
56
|
+
return location
|
57
|
+
end
|
58
|
+
|
3
59
|
end
|
@@ -1,37 +1,44 @@
|
|
1
1
|
class ContactsController < ApplicationController
|
2
|
-
|
2
|
+
|
3
3
|
respond_to :html
|
4
|
-
|
4
|
+
|
5
5
|
# GET /contacts
|
6
6
|
def index
|
7
7
|
@contacts = Contact.all
|
8
8
|
respond_with(@contacts)
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
# GET /contacts/new
|
12
12
|
def new
|
13
13
|
@contact = Contact.new
|
14
14
|
respond_with(@contact)
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
# GET /contacts/:id/edit
|
18
18
|
def edit
|
19
19
|
@contact = Contact.find(params[:id])
|
20
20
|
respond_with(@contact)
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
# POST /contacts
|
24
24
|
def create
|
25
25
|
@contact = Contact.create(params[:contact])
|
26
26
|
respond_with(@contact, :location => contacts_path)
|
27
27
|
end
|
28
|
-
|
29
|
-
#
|
28
|
+
|
29
|
+
# PUT /contacts
|
30
30
|
def update
|
31
31
|
@contact = Contact.find(params[:id])
|
32
32
|
@contact.attributes = params[:contact]
|
33
33
|
@contact.save
|
34
34
|
respond_with(@contact, :location => contacts_path)
|
35
35
|
end
|
36
|
-
|
36
|
+
|
37
|
+
# DELETE /contacts/:id
|
38
|
+
def destroy
|
39
|
+
@contact = Contact.find(params[:id])
|
40
|
+
@contact.delete
|
41
|
+
respond_with(@contact, :location => contacts_path)
|
42
|
+
end
|
43
|
+
|
37
44
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
class SessionsController < ApplicationController
|
2
|
+
|
3
|
+
respond_to :html, :js
|
4
|
+
|
5
|
+
before_filter :authenticate!, :only => [:destroy]
|
6
|
+
before_filter :deauthenticate!, :only => [:new, :create]
|
7
|
+
|
8
|
+
# GET /session/new
|
9
|
+
def new
|
10
|
+
@session = Session.new
|
11
|
+
|
12
|
+
respond_with(@session)
|
13
|
+
end
|
14
|
+
|
15
|
+
# POST /session
|
16
|
+
def create
|
17
|
+
@session = Session.new(params[:session])
|
18
|
+
|
19
|
+
flash[:notice] = 'Session create successful.' if @session.valid?
|
20
|
+
flash[:error] = 'Session create failed.' if @session.invalid?
|
21
|
+
|
22
|
+
authenticate(@session.user) if @session.valid?
|
23
|
+
respond_with(@session, :location => restore(:default => root_path))
|
24
|
+
end
|
25
|
+
|
26
|
+
# DELETE /session
|
27
|
+
def destroy
|
28
|
+
flash[:notice] = 'Session destroyed.'
|
29
|
+
|
30
|
+
deauthenticate()
|
31
|
+
|
32
|
+
respond_to do |format|
|
33
|
+
format.html { redirect_to(restore(:default => root_path)) }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
class UsersController < ApplicationController
|
2
|
+
|
3
|
+
respond_to :html, :js
|
4
|
+
|
5
|
+
before_filter :authenticate!, :only => [:edit, :update]
|
6
|
+
before_filter :deauthenticate!, :only => [:new, :create]
|
7
|
+
|
8
|
+
# GET /user/new
|
9
|
+
def new
|
10
|
+
@user = User.new
|
11
|
+
|
12
|
+
respond_with(@user)
|
13
|
+
end
|
14
|
+
|
15
|
+
# GET /user/edit
|
16
|
+
def edit
|
17
|
+
@user = user
|
18
|
+
|
19
|
+
respond_with(@user)
|
20
|
+
end
|
21
|
+
|
22
|
+
# POST /user
|
23
|
+
def create
|
24
|
+
@user = User.create(params[:user])
|
25
|
+
|
26
|
+
flash[:notice] = 'User create successful.' if @user.valid?
|
27
|
+
flash[:error] = 'User create failed.' if @user.invalid?
|
28
|
+
|
29
|
+
authenticate(@user) if @user.valid?
|
30
|
+
respond_with(@user, :location => restore(:default => root_path))
|
31
|
+
end
|
32
|
+
|
33
|
+
# PUT /user
|
34
|
+
def update
|
35
|
+
@user = user
|
36
|
+
|
37
|
+
@user.attributes = params[:user]
|
38
|
+
@user.save
|
39
|
+
|
40
|
+
flash[:notice] = 'User update successful.' if @user.valid?
|
41
|
+
flash[:error] = 'User update failed.' if @user.invalid?
|
42
|
+
|
43
|
+
respond_with(@user, :location => restore(:default => root_path))
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -1,19 +1,19 @@
|
|
1
1
|
class Contact < ActiveRecord::Base
|
2
|
-
|
2
|
+
|
3
3
|
attr_accessor :secret
|
4
|
-
|
4
|
+
|
5
5
|
belongs_to :group
|
6
|
-
|
6
|
+
|
7
7
|
validates_presence_of :name
|
8
8
|
validates_presence_of :details
|
9
9
|
validates_presence_of :email
|
10
10
|
validates_presence_of :phone
|
11
11
|
validates_presence_of :url
|
12
12
|
validates_presence_of :group
|
13
|
-
|
13
|
+
|
14
14
|
validates_format_of :email, :with => /\A([^\s]+)@([^\s]+)\Z/i, :message => "is not valid"
|
15
15
|
validates_format_of :phone, :with => /\A[0-9\s\(\)\+\-]+\Z/i, :message => "is not valid"
|
16
|
-
|
16
|
+
|
17
17
|
has_attached :avatar
|
18
|
-
|
18
|
+
|
19
19
|
end
|