cambium 1.0.4 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +31 -1
- data/app/assets/stylesheets/cambium/admin/partials/components.scss +3 -2
- data/app/assets/stylesheets/cambium/admin/partials/forms.scss +27 -0
- data/app/controllers/cambium/admin/dashboard_controller.rb +6 -8
- data/app/controllers/cambium/admin/search_controller.rb +5 -7
- data/app/controllers/cambium/admin/users_controller.rb +23 -25
- data/app/controllers/cambium/admin_controller.rb +72 -72
- data/app/controllers/cambium/base_controller.rb +2 -0
- data/app/helpers/cambium/cambium_helper.rb +126 -79
- data/app/views/cambium/admin/paper_trail/versions/_version.html.erb +2 -2
- data/app/views/cambium/admin/search/index.html.erb +1 -1
- data/lib/cambium/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff5677f58125f1cad2a98e1904ca8047bdf37252
|
4
|
+
data.tar.gz: 8316b5eb6d5bae1ef353b24cea093c9898de9412
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 22120069c0f33717fd8a4348c43b42d4ab9af23ae1631709abbd33c96f67e41833ef1e87bffed5e1ab47ce18d5a063e8507533e602843a4c7afb4222147e1e90
|
7
|
+
data.tar.gz: 537b2a2e28c4e62643100babeb1f41e03962acf5466f1c89f9138c9706270399cd7cd1b20abfca78166c1387123b79a1c5168e251ea2fec218485617600207f0
|
data/README.md
CHANGED
@@ -231,6 +231,7 @@ form:
|
|
231
231
|
type: string
|
232
232
|
email:
|
233
233
|
type: string
|
234
|
+
readonly: true
|
234
235
|
password:
|
235
236
|
type: password
|
236
237
|
password_confirmation:
|
@@ -271,13 +272,42 @@ Every setting plays a role. Let's step through each one.
|
|
271
272
|
* `form:[new/edit]:fields:[field]`: Each form field gets its own unique key to
|
272
273
|
set it apart from the others.
|
273
274
|
* `form:[new/edit]:fields:[field]:type`: The type of the HTML field to render,
|
274
|
-
which uses [SimpleForm](https://github.com/plataformatec/simple_form).
|
275
|
+
which uses [SimpleForm](https://github.com/plataformatec/simple_form). *You
|
276
|
+
can use `heading` here to break up your fields.*
|
277
|
+
* `form:[new/edit]:fields:[field]:readonly`: If set to `true`, it will add the
|
278
|
+
`readonly` attribute to the input field. *Not supported for markdown fields*.
|
275
279
|
|
276
280
|
> Note: Aside from the usual form field types, Cambium uses [Mark It
|
277
281
|
> Zero!](https://github.com/seancdavis/mark_it_zero) to render markdown
|
278
282
|
> editors. You can pass `markdown` as the `type` option and it will give you a
|
279
283
|
> markdown editor.
|
280
284
|
|
285
|
+
### Overriding the Base Controller
|
286
|
+
|
287
|
+
I've rearranged Cambium's CMS controllers so there is a blank `BaseController`
|
288
|
+
from which it inherits. You can manually override this in your app by creating
|
289
|
+
a `Cambium::BaseController` and loading the appropriate files.
|
290
|
+
|
291
|
+
First, generate the controller.
|
292
|
+
|
293
|
+
```text
|
294
|
+
$ bundle exec rails g controller cambium/base
|
295
|
+
```
|
296
|
+
|
297
|
+
That controller can inherit from any other controller in your app. The only
|
298
|
+
thing you need to ensure is that it loads the `CambiumHelper` from the
|
299
|
+
`Cambium` namespace. So, the base file should look like this:
|
300
|
+
|
301
|
+
```ruby
|
302
|
+
class Cambium::BaseController < ApplicationController
|
303
|
+
helper Cambium::CambiumHelper
|
304
|
+
end
|
305
|
+
```
|
306
|
+
|
307
|
+
You can change `ApplicationController` to any other controller in your
|
308
|
+
application.
|
309
|
+
|
310
|
+
|
281
311
|
Model Options
|
282
312
|
----------
|
283
313
|
|
@@ -37,8 +37,8 @@ div.status{
|
|
37
37
|
}
|
38
38
|
}
|
39
39
|
|
40
|
-
|
41
|
-
&.new, &.export {
|
40
|
+
a {
|
41
|
+
&.new, &.export, &.file {
|
42
42
|
&:before {
|
43
43
|
font-family: 'icomoon';
|
44
44
|
font-size: inherit;
|
@@ -48,6 +48,7 @@ div.status{
|
|
48
48
|
}
|
49
49
|
&.new:before { content: "\e702"; }
|
50
50
|
&.export:before { content: "\e65e"; }
|
51
|
+
&.file:before { content: "\e622"; }
|
51
52
|
}
|
52
53
|
|
53
54
|
.avatar-container {
|
@@ -1,9 +1,31 @@
|
|
1
1
|
section.form {
|
2
2
|
form {
|
3
3
|
|
4
|
+
h2 {
|
5
|
+
margin: 10px 0;
|
6
|
+
font-size: 22px;
|
7
|
+
line-height: 28px;
|
8
|
+
color: $color-dark-lightest;
|
9
|
+
font-weight: 400;
|
10
|
+
}
|
11
|
+
|
4
12
|
div.input {
|
5
13
|
font-size: 0;
|
6
14
|
padding: 20px 0;
|
15
|
+
&.file {
|
16
|
+
padding: 20px 0 0 0;
|
17
|
+
& + a.file {
|
18
|
+
display: block;
|
19
|
+
width: 100%;
|
20
|
+
padding: 5px 0 20px 0;
|
21
|
+
font-size: 14px;
|
22
|
+
line-height: 14px;
|
23
|
+
text-align: right;
|
24
|
+
}
|
25
|
+
& + div.input {
|
26
|
+
padding-top: 40px;
|
27
|
+
}
|
28
|
+
}
|
7
29
|
label {
|
8
30
|
position: relative;
|
9
31
|
display: inline-block;
|
@@ -35,6 +57,11 @@ section.form {
|
|
35
57
|
vertical-align: bottom;
|
36
58
|
font-size: 16px;
|
37
59
|
border: none;
|
60
|
+
@include box-sizing(border-box);
|
61
|
+
&[readonly=readonly] {
|
62
|
+
background-color: $color-light-dark;
|
63
|
+
border-bottom-color: $color-light-dark;
|
64
|
+
}
|
38
65
|
}
|
39
66
|
input {
|
40
67
|
border-bottom: 1px solid $color-light-darker;
|
@@ -1,12 +1,10 @@
|
|
1
|
-
|
2
|
-
class Admin::DashboardController < AdminController
|
1
|
+
class Cambium::Admin::DashboardController < Cambium::AdminController
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
def show
|
9
|
-
end
|
3
|
+
def index
|
4
|
+
redirect_to admin_dashboard_path
|
5
|
+
end
|
10
6
|
|
7
|
+
def show
|
11
8
|
end
|
9
|
+
|
12
10
|
end
|
@@ -1,9 +1,7 @@
|
|
1
|
-
|
2
|
-
class Admin::SearchController < AdminController
|
3
|
-
|
4
|
-
def index
|
5
|
-
@collection = PgSearch.multisearch(params[:q]).includes(:searchable)
|
6
|
-
end
|
1
|
+
class Cambium::Admin::SearchController < Cambium::AdminController
|
7
2
|
|
3
|
+
def index
|
4
|
+
@collection = PgSearch.multisearch(params[:q]).includes(:searchable)
|
8
5
|
end
|
9
|
-
|
6
|
+
|
7
|
+
end
|
@@ -1,30 +1,28 @@
|
|
1
|
-
|
2
|
-
class Admin::UsersController < AdminController
|
1
|
+
class Cambium::Admin::UsersController < Cambium::AdminController
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
end
|
22
|
-
# And then we oome back to regular behavior
|
23
|
-
redirect_to(admin_routes.index, :notice => "#{admin_model.to_s} updated!")
|
24
|
-
else
|
25
|
-
render 'edit'
|
3
|
+
def update
|
4
|
+
set_object
|
5
|
+
# To make this run smoothly, we remove the password
|
6
|
+
# fields from the update_params if they are both
|
7
|
+
# missing, that way we don't try to set a blank
|
8
|
+
# password.
|
9
|
+
p = update_params
|
10
|
+
if p[:password].blank? && p[:password_confirmation].blank?
|
11
|
+
p = p.except('password','password_confirmation')
|
12
|
+
end
|
13
|
+
# Now we use the cleansed params `p` and we're ready
|
14
|
+
# to try to save the user
|
15
|
+
if @object.update(p)
|
16
|
+
# If we have successfully saved the user, we're
|
17
|
+
# going to sign them back in automatically.
|
18
|
+
if @object == current_user
|
19
|
+
sign_in(@object, :bypass => true)
|
26
20
|
end
|
21
|
+
# And then we oome back to regular behavior
|
22
|
+
redirect_to(admin_routes.index, :notice => "#{admin_model.to_s} updated!")
|
23
|
+
else
|
24
|
+
render 'edit'
|
27
25
|
end
|
28
|
-
|
29
26
|
end
|
27
|
+
|
30
28
|
end
|
@@ -1,90 +1,90 @@
|
|
1
|
-
|
2
|
-
class AdminController < ActionController::Base
|
3
|
-
|
4
|
-
before_filter :authenticate_admin!
|
5
|
-
before_filter :set_activities
|
6
|
-
|
7
|
-
layout "admin"
|
8
|
-
|
9
|
-
include CambiumHelper
|
10
|
-
|
11
|
-
def index
|
12
|
-
respond_to do |format|
|
13
|
-
format.html do
|
14
|
-
@collection = admin_model.send(admin_table.scope)
|
15
|
-
.page(params[:page] || 1).per(15)
|
16
|
-
end
|
17
|
-
format.csv do
|
18
|
-
@collection = admin_model.send(admin_table.scope)
|
19
|
-
send_data admin.to_csv(@collection)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
1
|
+
class Cambium::AdminController < Cambium::BaseController
|
23
2
|
|
24
|
-
|
25
|
-
|
26
|
-
redirect_to(admin_routes.edit)
|
27
|
-
end
|
3
|
+
before_filter :authenticate_admin!
|
4
|
+
before_filter :set_activities
|
28
5
|
|
29
|
-
|
30
|
-
@object = admin_model.new
|
31
|
-
end
|
6
|
+
layout "admin"
|
32
7
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
8
|
+
include Cambium::CambiumHelper
|
9
|
+
|
10
|
+
def index
|
11
|
+
respond_to do |format|
|
12
|
+
format.html do
|
13
|
+
@collection = admin_model.send(admin_table.scope)
|
14
|
+
.page(params[:page] || 1).per(15)
|
15
|
+
end
|
16
|
+
format.csv do
|
17
|
+
@collection = admin_model.send(admin_table.scope)
|
18
|
+
send_data admin.to_csv(@collection)
|
40
19
|
end
|
41
20
|
end
|
21
|
+
end
|
42
22
|
|
43
|
-
|
44
|
-
|
23
|
+
def show
|
24
|
+
set_object
|
25
|
+
redirect_to(admin_routes.edit)
|
26
|
+
end
|
27
|
+
|
28
|
+
def new
|
29
|
+
@object = admin_model.new
|
30
|
+
end
|
31
|
+
|
32
|
+
def create
|
33
|
+
set_object
|
34
|
+
@object = admin_model.new(create_params)
|
35
|
+
if @object.save
|
36
|
+
redirect_to(admin_routes.index, :notice => "#{admin_model.to_s} created!")
|
37
|
+
else
|
38
|
+
render 'new'
|
45
39
|
end
|
40
|
+
end
|
46
41
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
42
|
+
def edit
|
43
|
+
set_object
|
44
|
+
end
|
45
|
+
|
46
|
+
def update
|
47
|
+
set_object
|
48
|
+
if @object.update(update_params)
|
49
|
+
redirect_to(admin_routes.index, :notice => "#{admin_model.to_s} updated!")
|
50
|
+
else
|
51
|
+
render 'edit'
|
54
52
|
end
|
53
|
+
end
|
55
54
|
|
56
|
-
|
55
|
+
private
|
57
56
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
@
|
57
|
+
def set_object
|
58
|
+
if admin_model.new.respond_to?(:slug) && params[:slug]
|
59
|
+
slug = params[:"#{admin_model.to_s.underscore}_slug"] || params[:slug]
|
60
|
+
@object = admin_model.find_by_slug(slug)
|
61
|
+
else
|
62
|
+
id = params[:"#{admin_model.to_s.underscore}_id"] || params[:id]
|
63
|
+
@object = admin_model.find_by_id(id.to_i)
|
65
64
|
end
|
65
|
+
@obj = @object
|
66
|
+
end
|
66
67
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
68
|
+
def authenticate_admin!
|
69
|
+
authenticate_user!
|
70
|
+
not_found unless current_user.is_admin?
|
71
|
+
end
|
71
72
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
73
|
+
def create_params
|
74
|
+
params
|
75
|
+
.require(admin_model.to_s.humanize.downcase.to_sym)
|
76
|
+
.permit(admin_form.fields.to_h.keys)
|
77
|
+
end
|
77
78
|
|
78
|
-
|
79
|
-
|
80
|
-
|
79
|
+
def update_params
|
80
|
+
create_params
|
81
|
+
end
|
81
82
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
83
|
+
def set_activities
|
84
|
+
@activities = PaperTrail::Version.order(:created_at => :desc)
|
85
|
+
.includes(:item).limit(20)
|
86
|
+
@users = User.where(:id => @activities.collect(&:whodunnit)
|
87
|
+
.reject(&:blank?).map(&:to_i))
|
88
|
+
end
|
88
89
|
|
89
|
-
end
|
90
90
|
end
|
@@ -107,92 +107,139 @@ module Cambium
|
|
107
107
|
|
108
108
|
def cambium_form(obj, fields)
|
109
109
|
content_tag(:section, :class => 'form') do
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
:value => obj.send(attr).present? ?
|
145
|
-
obj.send(attr).strftime("%d %B, %Y") : ''
|
146
|
-
)
|
147
|
-
o2 += content_tag(
|
148
|
-
:input,
|
149
|
-
'',
|
150
|
-
:placeholder => 'Time',
|
151
|
-
:type => 'text',
|
152
|
-
:class => 'pickadatetime-time',
|
153
|
-
:value => obj.send(attr).present? ?
|
154
|
-
obj.send(attr).strftime("%l:%M %p") : ''
|
155
|
-
)
|
156
|
-
o2 += f.input(
|
157
|
-
attr.to_sym,
|
158
|
-
:as => :hidden,
|
159
|
-
:wrapper => false,
|
160
|
-
:label => false,
|
161
|
-
:input_html => { :class => 'pickadatetime' }
|
162
|
-
)
|
163
|
-
end
|
164
|
-
elsif options.type == 'markdown'
|
165
|
-
o += content_tag(:div, :class => "input text optional #{attr}") do
|
166
|
-
o2 = content_tag(:label, attr.titleize, :for => attr)
|
167
|
-
o2 += content_tag(
|
168
|
-
:div,
|
169
|
-
f.markdown(attr.to_sym),
|
170
|
-
:class => 'markdown'
|
171
|
-
)
|
172
|
-
end
|
173
|
-
else
|
174
|
-
o += f.input(
|
175
|
-
attr.to_sym,
|
176
|
-
:as => options.type
|
177
|
-
)
|
178
|
-
end
|
110
|
+
case action_name
|
111
|
+
when 'edit', 'update'
|
112
|
+
url = cambium_route(:show, obj)
|
113
|
+
else
|
114
|
+
url = cambium_route(:index, obj)
|
115
|
+
end
|
116
|
+
simple_form_for obj, :url => url do |f|
|
117
|
+
cambium_form_fields(f, obj, fields)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def cambium_form_fields(f, obj, fields)
|
123
|
+
o = ''
|
124
|
+
fields.to_h.each do |data|
|
125
|
+
attr = data.first.to_s
|
126
|
+
options = data.last
|
127
|
+
readonly = options.readonly || false
|
128
|
+
label = options.label || attr.titleize
|
129
|
+
if options.type == 'heading'
|
130
|
+
o += content_tag(:h2, options.label || attr.titleize)
|
131
|
+
elsif ['select','check_boxes','radio_buttons'].include?(options.type)
|
132
|
+
o += f.input(
|
133
|
+
attr.to_sym,
|
134
|
+
:as => options.type,
|
135
|
+
:collection => options.options,
|
136
|
+
:label => label,
|
137
|
+
:readonly => readonly
|
138
|
+
)
|
139
|
+
elsif ['date','time'].include?(options.type)
|
140
|
+
if obj.send(attr).present?
|
141
|
+
val = (options.type == 'date') ?
|
142
|
+
obj.send(attr).strftime("%d %B, %Y") :
|
143
|
+
obj.send(attr).strftime("%l:%M %p")
|
179
144
|
end
|
180
|
-
o += f.
|
181
|
-
|
145
|
+
o += f.input(
|
146
|
+
attr.to_sym,
|
147
|
+
:as => :string,
|
148
|
+
:label => label,
|
149
|
+
:input_html => {
|
150
|
+
:class => "picka#{options.type}",
|
151
|
+
:value => val.nil? ? nil : val
|
152
|
+
},
|
153
|
+
:readonly => readonly
|
154
|
+
)
|
155
|
+
elsif options.type == 'datetime'
|
156
|
+
o += content_tag(:div, :class => 'input string pickadatetime') do
|
157
|
+
o2 = content_tag(:label, attr.to_s.humanize.titleize)
|
158
|
+
o2 += content_tag(
|
159
|
+
:input,
|
160
|
+
'',
|
161
|
+
:label => label,
|
162
|
+
:placeholder => 'Date',
|
163
|
+
:type => 'text',
|
164
|
+
:class => 'pickadatetime-date',
|
165
|
+
:value => obj.send(attr).present? ?
|
166
|
+
obj.send(attr).strftime("%d %B, %Y") : '',
|
167
|
+
:readonly => readonly
|
168
|
+
)
|
169
|
+
o2 += content_tag(
|
170
|
+
:input,
|
171
|
+
'',
|
172
|
+
:label => label,
|
173
|
+
:placeholder => 'Time',
|
174
|
+
:type => 'text',
|
175
|
+
:class => 'pickadatetime-time',
|
176
|
+
:value => obj.send(attr).present? ?
|
177
|
+
obj.send(attr).strftime("%l:%M %p") : '',
|
178
|
+
:readonly => readonly
|
179
|
+
)
|
180
|
+
o2 += f.input(
|
181
|
+
attr.to_sym,
|
182
|
+
:as => :hidden,
|
183
|
+
:wrapper => false,
|
184
|
+
:label => false,
|
185
|
+
:input_html => { :class => 'pickadatetime' }
|
186
|
+
)
|
187
|
+
end
|
188
|
+
elsif options.type == 'markdown'
|
189
|
+
o += content_tag(:div, :class => "input text optional #{attr}") do
|
190
|
+
o2 = content_tag(:label, attr.titleize, :for => attr)
|
191
|
+
o2 += content_tag(
|
192
|
+
:div,
|
193
|
+
f.markdown(attr.to_sym),
|
194
|
+
:class => 'markdown'
|
195
|
+
)
|
196
|
+
end
|
197
|
+
elsif options.type == 'file'
|
198
|
+
o += f.input(
|
199
|
+
attr.to_sym,
|
200
|
+
:as => options.type,
|
201
|
+
:label => label,
|
202
|
+
:readonly => readonly
|
203
|
+
)
|
204
|
+
o += link_to(
|
205
|
+
obj.send(attr).name,
|
206
|
+
obj.send(attr).url,
|
207
|
+
:class => 'file',
|
208
|
+
:target => :blank
|
209
|
+
) unless obj.send(attr).blank?
|
210
|
+
else
|
211
|
+
o += f.input(
|
212
|
+
attr.to_sym,
|
213
|
+
:as => options.type,
|
214
|
+
:label => label,
|
215
|
+
:readonly => readonly
|
216
|
+
)
|
182
217
|
end
|
183
218
|
end
|
219
|
+
o += f.submit
|
220
|
+
o.html_safe
|
184
221
|
end
|
185
222
|
|
186
|
-
def
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
223
|
+
def cambium_route(action, obj = nil)
|
224
|
+
case action
|
225
|
+
when :index
|
226
|
+
begin
|
227
|
+
main_app
|
228
|
+
.polymorphic_path [:admin, obj.class.to_s.downcase.pluralize.to_sym]
|
229
|
+
rescue
|
230
|
+
polymorphic_path [:admin, obj.class.to_s.downcase.pluralize.to_sym]
|
231
|
+
end
|
232
|
+
when :edit
|
233
|
+
begin
|
234
|
+
main_app.polymorphic_path [:edit, :admin, obj]
|
235
|
+
rescue
|
236
|
+
polymorphic_path [:edit, :admin, obj]
|
237
|
+
end
|
238
|
+
else
|
192
239
|
begin
|
193
|
-
main_app.
|
240
|
+
main_app.polymorphic_path [:admin, obj]
|
194
241
|
rescue
|
195
|
-
|
242
|
+
polymorphic_path [:admin, obj]
|
196
243
|
end
|
197
244
|
end
|
198
245
|
end
|
@@ -10,12 +10,12 @@
|
|
10
10
|
<%= content_tag(:strong, user.name.present? ? user.name : user.email) %>
|
11
11
|
<%= "#{version.event}d" %>
|
12
12
|
<%= version.item_type.downcase %>
|
13
|
-
<% if
|
13
|
+
<% if cambium_route(:edit, version.item).nil? %>
|
14
14
|
<%= content_tag(:strong, version.item.to_s) %>
|
15
15
|
<% else %>
|
16
16
|
<%= content_tag(
|
17
17
|
:strong,
|
18
|
-
link_to(version.item.to_s,
|
18
|
+
link_to(version.item.to_s, cambium_route(:edit, version.item))
|
19
19
|
) %>
|
20
20
|
<% end %>
|
21
21
|
</p>
|
data/lib/cambium/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cambium
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean C Davis
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-05-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -200,6 +200,7 @@ files:
|
|
200
200
|
- app/controllers/cambium/admin/search_controller.rb
|
201
201
|
- app/controllers/cambium/admin/users_controller.rb
|
202
202
|
- app/controllers/cambium/admin_controller.rb
|
203
|
+
- app/controllers/cambium/base_controller.rb
|
203
204
|
- app/helpers/cambium/cambium_helper.rb
|
204
205
|
- app/models/concerns/idx.rb
|
205
206
|
- app/models/concerns/image_cropper.rb
|