concen 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/Gemfile +7 -5
- data/Gemfile.lock +15 -15
- data/README.md +8 -0
- data/Rakefile +2 -2
- data/app/assets/javascripts/concen/application.js +12 -0
- data/app/assets/javascripts/concen/pages.js +1 -1
- data/app/assets/stylesheets/concen/application.css.sass +4 -3
- data/app/assets/stylesheets/concen/partials/_variables.sass +5 -5
- data/app/controllers/concen/pages_controller.rb +0 -1
- data/app/models/concen/page.rb +112 -60
- data/app/views/concen/pages/_form.html.haml +0 -1
- data/app/views/concen/pages/_nested_list.html.haml +3 -3
- data/app/views/concen/pages/index.html.haml +1 -1
- data/concen.gemspec +3 -2
- data/config/initializers/assets.rb +1 -1
- data/lib/concen/version.rb +1 -1
- data/test/test_helper.rb +0 -1
- data/test/unit/concen_test.rb +10 -4
- data/test/unit/grid_file_test.rb +16 -10
- data/test/unit/page_test.rb +93 -57
- data/test/unit/user_test.rb +26 -18
- metadata +43 -32
- data/app/assets/javascripts/concen/application.js.coffee +0 -12
data/.gitignore
CHANGED
data/Gemfile
CHANGED
@@ -2,14 +2,17 @@ source "http://rubygems.org"
|
|
2
2
|
|
3
3
|
gem "rails", ">= 3.1.0"
|
4
4
|
|
5
|
-
gem "sass-rails", "~> 3.1.0"
|
6
5
|
gem "compass", "~> 0.12.alpha"
|
6
|
+
gem "sass-rails", "~> 3.1.3"
|
7
|
+
|
8
|
+
# gemspec.
|
7
9
|
gem "haml", "~> 3.1.0"
|
8
10
|
gem "mustache", "~> 0.99.4"
|
9
11
|
gem "redcarpet", "2.0.0b5"
|
10
|
-
gem "mongoid", "~> 2.
|
12
|
+
gem "mongoid", "~> 2.2.2"
|
13
|
+
gem "mongo", "~> 1.4.0"
|
14
|
+
gem "bson_ext", "~> 1.4.0"
|
11
15
|
gem "mongo-rails-instrumentation", "~> 0.2.4"
|
12
|
-
gem "bson_ext", "~> 1.3.0"
|
13
16
|
gem "rack-gridfs", "~> 0.4.1"
|
14
17
|
gem "chronic", "~> 0.6.3"
|
15
18
|
gem "mime-types", "~> 1.16"
|
@@ -20,5 +23,4 @@ gem "domainatrix", "~> 0.0.10"
|
|
20
23
|
gem "capybara", ">= 0.4.0"
|
21
24
|
gem "fabrication", "1.1.0"
|
22
25
|
gem "database_cleaner", "0.6.0"
|
23
|
-
gem "
|
24
|
-
gem "turn"
|
26
|
+
gem "minitest", "~> 2.6.1"
|
data/Gemfile.lock
CHANGED
@@ -31,11 +31,10 @@ GEM
|
|
31
31
|
activesupport (3.1.0)
|
32
32
|
multi_json (~> 1.0)
|
33
33
|
addressable (2.2.6)
|
34
|
-
ansi (1.2.5)
|
35
34
|
arel (2.2.1)
|
36
35
|
bcrypt-ruby (3.0.0)
|
37
|
-
bson (1.
|
38
|
-
bson_ext (1.
|
36
|
+
bson (1.4.0)
|
37
|
+
bson_ext (1.4.0)
|
39
38
|
builder (3.0.0)
|
40
39
|
capybara (1.0.0)
|
41
40
|
mime-types (>= 1.16)
|
@@ -68,10 +67,11 @@ GEM
|
|
68
67
|
mime-types (~> 1.16)
|
69
68
|
treetop (~> 1.4.8)
|
70
69
|
mime-types (1.16)
|
71
|
-
|
72
|
-
|
70
|
+
minitest (2.6.1)
|
71
|
+
mongo (1.4.0)
|
72
|
+
bson (= 1.4.0)
|
73
73
|
mongo-rails-instrumentation (0.2.4)
|
74
|
-
mongoid (2.
|
74
|
+
mongoid (2.2.2)
|
75
75
|
activemodel (~> 3.0)
|
76
76
|
mongo (~> 1.3)
|
77
77
|
tzinfo (~> 0.3.22)
|
@@ -112,10 +112,12 @@ GEM
|
|
112
112
|
redcarpet (2.0.0b5)
|
113
113
|
rubyzip (0.9.4)
|
114
114
|
sass (3.1.7)
|
115
|
-
sass-rails (3.1.
|
115
|
+
sass-rails (3.1.3)
|
116
116
|
actionpack (~> 3.1.0)
|
117
117
|
railties (~> 3.1.0)
|
118
118
|
sass (>= 3.1.4)
|
119
|
+
sprockets (~> 2.0.0)
|
120
|
+
tilt (~> 1.3.2)
|
119
121
|
selenium-webdriver (0.2.1)
|
120
122
|
childprocess (>= 0.1.7)
|
121
123
|
ffi (>= 1.0.7)
|
@@ -124,14 +126,12 @@ GEM
|
|
124
126
|
sprockets (2.0.0)
|
125
127
|
hike (~> 1.2)
|
126
128
|
rack (~> 1.0)
|
127
|
-
tilt (
|
129
|
+
tilt (~> 1.1, != 1.3.0)
|
128
130
|
thor (0.14.6)
|
129
131
|
tilt (1.3.3)
|
130
132
|
treetop (1.4.10)
|
131
133
|
polyglot
|
132
134
|
polyglot (>= 0.3.1)
|
133
|
-
turn (0.8.2)
|
134
|
-
ansi (>= 1.2.2)
|
135
135
|
tzinfo (0.3.29)
|
136
136
|
xpath (0.1.4)
|
137
137
|
nokogiri (~> 1.3)
|
@@ -140,9 +140,8 @@ PLATFORMS
|
|
140
140
|
ruby
|
141
141
|
|
142
142
|
DEPENDENCIES
|
143
|
-
ansi
|
144
143
|
bcrypt-ruby (~> 3.0.0)
|
145
|
-
bson_ext (~> 1.
|
144
|
+
bson_ext (~> 1.4.0)
|
146
145
|
capybara (>= 0.4.0)
|
147
146
|
chronic (~> 0.6.3)
|
148
147
|
compass (~> 0.12.alpha)
|
@@ -151,11 +150,12 @@ DEPENDENCIES
|
|
151
150
|
fabrication (= 1.1.0)
|
152
151
|
haml (~> 3.1.0)
|
153
152
|
mime-types (~> 1.16)
|
153
|
+
minitest (~> 2.6.1)
|
154
|
+
mongo (~> 1.4.0)
|
154
155
|
mongo-rails-instrumentation (~> 0.2.4)
|
155
|
-
mongoid (~> 2.
|
156
|
+
mongoid (~> 2.2.2)
|
156
157
|
mustache (~> 0.99.4)
|
157
158
|
rack-gridfs (~> 0.4.1)
|
158
159
|
rails (>= 3.1.0)
|
159
160
|
redcarpet (= 2.0.0b5)
|
160
|
-
sass-rails (~> 3.1.
|
161
|
-
turn
|
161
|
+
sass-rails (~> 3.1.3)
|
data/README.md
CHANGED
@@ -134,6 +134,14 @@ If you have used Concen for any of your websites and would like to be listed her
|
|
134
134
|
|
135
135
|
## Version History
|
136
136
|
|
137
|
+
- **0.2.3**:
|
138
|
+
|
139
|
+
- Update Mongoid version (2.2.2).
|
140
|
+
- UI design enhancements.
|
141
|
+
- Tests are now using MiniTest.
|
142
|
+
- Add ancestor_slugs field for Page model.
|
143
|
+
- Page is given a default title if none is present.
|
144
|
+
|
137
145
|
- **0.2.2**:
|
138
146
|
|
139
147
|
- Update Chronic gem dependency.
|
data/Rakefile
CHANGED
@@ -7,13 +7,13 @@ rescue LoadError
|
|
7
7
|
end
|
8
8
|
|
9
9
|
require "rake"
|
10
|
-
require "
|
10
|
+
require "rdoc/task"
|
11
11
|
require "rake/testtask"
|
12
12
|
|
13
13
|
Rake::TestTask.new(:test) do |t|
|
14
14
|
t.libs << "lib"
|
15
15
|
t.libs << "test"
|
16
|
-
t.
|
16
|
+
t.test_files = Dir.glob("test/**/*_test.rb")
|
17
17
|
t.verbose = false
|
18
18
|
end
|
19
19
|
|
@@ -0,0 +1,12 @@
|
|
1
|
+
//= require concen/modernizr
|
2
|
+
//= require concen/jquery
|
3
|
+
//= require concen/jquery-ui/jquery.ui.core
|
4
|
+
//= require concen/jquery-ui/jquery.ui.widget
|
5
|
+
//= require concen/jquery-ui/jquery.ui.mouse
|
6
|
+
//= require concen/jquery-ui/jquery.ui.position
|
7
|
+
//= require concen/jquery-ui/jquery.ui.sortable
|
8
|
+
//= require concen/jquery-ui/jquery.ui.resizable
|
9
|
+
//= require concen/jquery-ui/jquery.ui.draggable
|
10
|
+
//= require concen/jquery-ui/jquery.ui.droppable
|
11
|
+
//= require concen/jquery.ui.nestedSortable
|
12
|
+
//= require concen/jquery_ujs
|
@@ -1,10 +1,10 @@
|
|
1
1
|
// Colors.
|
2
2
|
|
3
|
-
$color-1: hsl(
|
4
|
-
$color-2: hsl(
|
5
|
-
$color-3: hsl(
|
6
|
-
$color-4: hsl(
|
7
|
-
$color-5: hsl(
|
3
|
+
$color-1: hsl(220, 100%, 20%) // #002266
|
4
|
+
$color-2: hsl(220, 16%, 45%) // #606D85
|
5
|
+
$color-3: hsl(220, 16%, 90%) // #E1E4EA
|
6
|
+
$color-4: hsl(220, 16%, 95%) // #F0F2F4
|
7
|
+
$color-5: hsl(220, 16%, 88%) // #DCDFE5
|
8
8
|
$gray-20: hsl(0, 0%, 20%)
|
9
9
|
$gray-60: hsl(0, 0%, 60%)
|
10
10
|
$gray-80: hsl(0, 0%, 80%)
|
data/app/models/concen/page.rb
CHANGED
@@ -19,6 +19,7 @@ module Concen
|
|
19
19
|
field :title, :type => String
|
20
20
|
field :description, :type => String
|
21
21
|
field :slug, :type => String
|
22
|
+
field :ancestor_slugs, :type => Array, :default => []
|
22
23
|
field :raw_text, :type => String
|
23
24
|
field :content, :type => Hash, :default => {}
|
24
25
|
field :position, :type => Integer
|
@@ -34,9 +35,12 @@ module Concen
|
|
34
35
|
validates_uniqueness_of :slug, :scope => [:parent_id, :level], :case_sensitive => false
|
35
36
|
|
36
37
|
before_validation :parse_raw_text
|
38
|
+
before_validation :set_title
|
37
39
|
before_validation :set_slug
|
40
|
+
before_validation :set_position
|
41
|
+
before_validation :set_level
|
38
42
|
before_save :set_publish_month
|
39
|
-
|
43
|
+
before_save :set_ancestor_slugs
|
40
44
|
after_save :unset_unused_dynamic_fields
|
41
45
|
after_destroy :destroy_children
|
42
46
|
after_destroy :destroy_grid_files
|
@@ -61,10 +65,10 @@ module Concen
|
|
61
65
|
|
62
66
|
# Get the list of dynamic fields by checking againts this array.
|
63
67
|
# Values should mirror the listed fields above.
|
64
|
-
PREDEFINED_FIELDS = [:_id, :parent_id, :level, :created_at, :updated_at, :slug, :content, :raw_text, :position, :grid_files, :title, :description, :publish_time, :labels, :authors, :status]
|
68
|
+
PREDEFINED_FIELDS = [:_id, :parent_id, :level, :created_at, :updated_at, :slug, :ancestor_slugs, :content, :raw_text, :position, :grid_files, :title, :description, :publish_time, :labels, :authors, :status]
|
65
69
|
|
66
70
|
# These fields can't be overwritten by user's meta data when parsing raw_text.
|
67
|
-
PROTECTED_FIELDS = [:_id, :parent_id, :level, :created_at, :updated_at, :content, :raw_text, :position, :grid_files]
|
71
|
+
PROTECTED_FIELDS = [:_id, :parent_id, :level, :created_at, :updated_at, :content, :raw_text, :position, :grid_files, :ancestor_slugs]
|
68
72
|
|
69
73
|
def content_in_html(key = "main", data={})
|
70
74
|
if content = self.content.try(:[], key)
|
@@ -109,12 +113,16 @@ module Concen
|
|
109
113
|
end
|
110
114
|
|
111
115
|
def underscore_hash_keys(hash)
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
+
if hash.is_a? Hash
|
117
|
+
new_hash = {}
|
118
|
+
hash.each do |key, value|
|
119
|
+
value = underscore_hash_keys(value) if value.is_a?(Hash)
|
120
|
+
new_hash[key.gsub(" ","_").downcase.to_sym] = value
|
121
|
+
end
|
122
|
+
new_hash
|
123
|
+
else
|
124
|
+
return nil
|
116
125
|
end
|
117
|
-
new_hash
|
118
126
|
end
|
119
127
|
|
120
128
|
def parse_publish_time(publish_time_string)
|
@@ -222,33 +230,6 @@ module Concen
|
|
222
230
|
|
223
231
|
protected
|
224
232
|
|
225
|
-
def set_slug
|
226
|
-
if self.slug.blank?
|
227
|
-
self.slug = self.title.parameterize if self.title
|
228
|
-
else
|
229
|
-
self.slug = self.slug.parameterize
|
230
|
-
end
|
231
|
-
end
|
232
|
-
|
233
|
-
def set_position
|
234
|
-
siblings = Page.where :parent_id => self.parent_id
|
235
|
-
if siblings.count > 0
|
236
|
-
self.position = siblings.with_position.asc(:position).last.position + 1
|
237
|
-
else
|
238
|
-
self.position = 1
|
239
|
-
end
|
240
|
-
end
|
241
|
-
|
242
|
-
def reset_position
|
243
|
-
affected_pages = Page.with_position.where :parent_id => self.parent_id, :position.gt => self.position
|
244
|
-
if affected_pages.count > 0
|
245
|
-
for page in affected_pages
|
246
|
-
page.position = page.position - 1
|
247
|
-
page.save
|
248
|
-
end
|
249
|
-
end
|
250
|
-
end
|
251
|
-
|
252
233
|
def parse_raw_text
|
253
234
|
if self.raw_text && self.raw_text.length > 0 && (self.new? || self.raw_text_changed?)
|
254
235
|
self.content = {}
|
@@ -273,22 +254,23 @@ module Concen
|
|
273
254
|
self.content = {}
|
274
255
|
end
|
275
256
|
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
257
|
+
if meta_data = underscore_hash_keys(YAML.load(meta_data))
|
258
|
+
# Set each value of meta data.
|
259
|
+
meta_data.each do |key, value|
|
260
|
+
unless PROTECTED_FIELDS.include?(key)
|
261
|
+
if key == :publish_time
|
262
|
+
self.parse_publish_time(value)
|
263
|
+
else
|
264
|
+
self.write_attribute(key, value)
|
265
|
+
end
|
284
266
|
end
|
285
267
|
end
|
286
|
-
end
|
287
268
|
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
269
|
+
# Set the field to nil if the value isn't present in meta data.
|
270
|
+
# Except for authors.
|
271
|
+
(self.attributes.keys.map{ |k| k.to_sym } - PROTECTED_FIELDS).each do |field|
|
272
|
+
self[field] = nil if !meta_data.keys.include?(field) && field != :authors
|
273
|
+
end
|
292
274
|
end
|
293
275
|
|
294
276
|
self.update_raw_text
|
@@ -311,18 +293,6 @@ module Concen
|
|
311
293
|
self.raw_text = meta_data.join + self.raw_text.match(/(?:\r?\n-{3,}\r?\n)/).to_s + raw_text_array.join
|
312
294
|
end
|
313
295
|
|
314
|
-
def destroy_children
|
315
|
-
for child in self.children
|
316
|
-
child.destroy
|
317
|
-
end
|
318
|
-
end
|
319
|
-
|
320
|
-
def destroy_grid_files
|
321
|
-
for grid_file in self.grid_files
|
322
|
-
grid_file.destroy
|
323
|
-
end
|
324
|
-
end
|
325
|
-
|
326
296
|
def unset_unused_dynamic_fields
|
327
297
|
target_fields = {}
|
328
298
|
for field in self.attributes.keys
|
@@ -333,10 +303,92 @@ module Concen
|
|
333
303
|
Page.collection.update({"_id" => self.id}, {"$unset" => target_fields})
|
334
304
|
end
|
335
305
|
|
306
|
+
# Give default title ("Untitled n") when no title is given.
|
307
|
+
def set_title
|
308
|
+
unless self.title
|
309
|
+
if self.parent
|
310
|
+
if last_untitled_page = self.parent.children.where(:title => /Untitled /i).asc(:title).last
|
311
|
+
last_untitled_number = last_untitled_page.title.split(" ").last.to_i
|
312
|
+
self.title = "Untitled #{last_untitled_number+1}"
|
313
|
+
else
|
314
|
+
self.title = "Untitled 1"
|
315
|
+
end
|
316
|
+
else
|
317
|
+
self.title = "Untitled 1"
|
318
|
+
end
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
def set_slug
|
323
|
+
if self.slug.blank?
|
324
|
+
self.slug = self.title.parameterize if self.title
|
325
|
+
else
|
326
|
+
self.slug = self.slug.parameterize
|
327
|
+
end
|
328
|
+
end
|
329
|
+
|
330
|
+
def set_position
|
331
|
+
# Only set position for newly created record.
|
332
|
+
# It will be used by before_validation callback
|
333
|
+
# just in case this field is used to validate something.
|
334
|
+
unless self.persisted?
|
335
|
+
siblings = Page.where :parent_id => self.parent_id
|
336
|
+
if siblings.count > 0
|
337
|
+
self.position = siblings.with_position.asc(:position).last.position + 1
|
338
|
+
else
|
339
|
+
self.position = 1
|
340
|
+
end
|
341
|
+
end
|
342
|
+
end
|
343
|
+
|
344
|
+
def reset_position
|
345
|
+
affected_pages = Page.with_position.where :parent_id => self.parent_id, :position.gt => self.position
|
346
|
+
if affected_pages.count > 0
|
347
|
+
for page in affected_pages
|
348
|
+
page.position = page.position - 1
|
349
|
+
page.save
|
350
|
+
end
|
351
|
+
end
|
352
|
+
end
|
353
|
+
|
354
|
+
def set_level
|
355
|
+
# Only set level for newly created record.
|
356
|
+
# It will be used by before_validation callback
|
357
|
+
# because level is part of uniqness validation of :title and :slug.
|
358
|
+
unless self.persisted?
|
359
|
+
if self.parent_id
|
360
|
+
self.level = self.parent.level + 1
|
361
|
+
else
|
362
|
+
self.level = 0
|
363
|
+
end
|
364
|
+
end
|
365
|
+
end
|
366
|
+
|
336
367
|
def set_publish_month
|
337
368
|
if self.publish_time
|
338
369
|
self.publish_month = Time.zone.local(self.publish_time.year, self.publish_time.month)
|
339
370
|
end
|
340
371
|
end
|
372
|
+
|
373
|
+
def set_ancestor_slugs
|
374
|
+
parent = self.parent
|
375
|
+
while parent
|
376
|
+
self.ancestor_slugs << parent.slug
|
377
|
+
parent = parent.parent
|
378
|
+
end
|
379
|
+
self.ancestor_slugs.reverse! if self.ancestor_slugs
|
380
|
+
end
|
381
|
+
|
382
|
+
def destroy_children
|
383
|
+
for child in self.children
|
384
|
+
child.destroy
|
385
|
+
end
|
386
|
+
end
|
387
|
+
|
388
|
+
def destroy_grid_files
|
389
|
+
for grid_file in self.grid_files
|
390
|
+
grid_file.destroy
|
391
|
+
end
|
392
|
+
end
|
341
393
|
end
|
342
394
|
end
|
@@ -5,11 +5,11 @@
|
|
5
5
|
%ul{:class => children.first.level == 0 && "pages", :data => {:level => children.first.level}}
|
6
6
|
- for child in children
|
7
7
|
%li{:data => {:id => "page-#{child.id}"}}
|
8
|
-
%p
|
8
|
+
%p{:class => "#{'author' if child.authors_as_user.map(&:_id).include? current_concen_user.id}"}
|
9
9
|
%span.handle
|
10
10
|
= link_to child.title, edit_concen_page_path(child), :class => "title"
|
11
|
-
= link_to "Add", new_concen_page_path(:
|
11
|
+
= link_to "Add", new_concen_page_path(:parent_id => child.id), :class => "link-button hidden"
|
12
12
|
= link_to "Edit", edit_concen_page_path(child), :class => "link-button hidden"
|
13
13
|
= link_to "Delete", concen_page_path(child), :method => :delete, :confirm => "Are you sure?", :class => "link-button hidden"
|
14
14
|
- if Concen::Page.where(:parent_id => child.id).count > 0
|
15
|
-
= render :partial => "nested_list", :locals => {:page => child, :root => false}
|
15
|
+
= render :partial => "nested_list", :locals => {:page => child, :root => false}
|
@@ -6,7 +6,7 @@
|
|
6
6
|
= one_line do
|
7
7
|
%span Pages
|
8
8
|
- unless @page
|
9
|
-
= link_to "New Page", new_concen_page_path
|
9
|
+
= link_to "New Page", new_concen_page_path, :class => "link-button"
|
10
10
|
|
11
11
|
- if @page
|
12
12
|
= render :partial => "nested_list", :locals => {:page => @page, :root => true}
|
data/concen.gemspec
CHANGED
@@ -25,9 +25,10 @@ Gem::Specification.new do |s|
|
|
25
25
|
s.add_dependency("haml", "~> 3.1.0")
|
26
26
|
s.add_dependency("mustache", "~> 0.99.4")
|
27
27
|
s.add_dependency("redcarpet", "~> 2.0.0b5")
|
28
|
-
s.add_dependency("mongoid", "~> 2.
|
28
|
+
s.add_dependency("mongoid", "~> 2.2.2")
|
29
|
+
s.add_dependency("mongo", "~> 1.4.0")
|
30
|
+
s.add_dependency("bson_ext", "~> 1.4.0")
|
29
31
|
s.add_dependency("mongo-rails-instrumentation", "~> 0.2.4")
|
30
|
-
s.add_dependency("bson_ext", "~> 1.3.0")
|
31
32
|
s.add_dependency("rack-gridfs", "~> 0.4.1")
|
32
33
|
s.add_dependency("chronic", "~> 0.6.3")
|
33
34
|
s.add_dependency("mime-types", "~> 1.16")
|
@@ -1,2 +1,2 @@
|
|
1
1
|
Rails.application.config.assets.precompile += ["concen/ie.css", "concen/non_ios.css"]
|
2
|
-
Rails.application.config.assets.precompile += ["concen/pages.js", "concen/performances.js", "concen/statuses.js", "concen/traffics.js", "concen/users.js"]
|
2
|
+
Rails.application.config.assets.precompile += ["concen/pages.js", "concen/performances.js", "concen/statuses.js", "concen/traffics.js", "concen/users.js", "concen/excanvas.js"]
|
data/lib/concen/version.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -5,7 +5,6 @@ require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
|
5
5
|
require File.expand_path("../fabricators.rb", __FILE__)
|
6
6
|
require "rails/test_help"
|
7
7
|
require "database_cleaner"
|
8
|
-
require "turn"
|
9
8
|
|
10
9
|
ActionMailer::Base.delivery_method = :test
|
11
10
|
ActionMailer::Base.perform_deliveries = true
|
data/test/unit/concen_test.rb
CHANGED
@@ -1,7 +1,13 @@
|
|
1
|
-
require
|
1
|
+
require "test_helper"
|
2
|
+
require "minitest/spec"
|
3
|
+
require "minitest/autorun"
|
2
4
|
|
3
|
-
|
4
|
-
|
5
|
-
|
5
|
+
describe Concen do
|
6
|
+
before do
|
7
|
+
DatabaseCleaner.clean
|
8
|
+
end
|
9
|
+
|
10
|
+
it "must be a Module" do
|
11
|
+
Concen.must_be_kind_of Module
|
6
12
|
end
|
7
13
|
end
|
data/test/unit/grid_file_test.rb
CHANGED
@@ -1,41 +1,47 @@
|
|
1
1
|
require "test_helper"
|
2
|
+
require "minitest/spec"
|
3
|
+
require "minitest/autorun"
|
2
4
|
|
3
|
-
|
4
|
-
|
5
|
+
describe Concen::GridFile do
|
6
|
+
before do
|
7
|
+
DatabaseCleaner.clean
|
8
|
+
end
|
9
|
+
|
10
|
+
it "can store file in GridFS" do
|
5
11
|
page = Fabricate "concen/page"
|
6
12
|
grid_file = page.grid_files.build
|
7
13
|
grid_file.store File.read("#{Rails.root}/public/404.html"), "404.html"
|
8
|
-
|
14
|
+
grid_file.read.must_equal File.read("#{Rails.root}/public/404.html")
|
9
15
|
end
|
10
16
|
|
11
|
-
|
17
|
+
it "must delete file from GridFS when page is deleted" do
|
12
18
|
page = Fabricate "concen/page"
|
13
19
|
grid_file = page.grid_files.build
|
14
20
|
grid_file.store File.read("#{Rails.root}/public/404.html"), "404.html"
|
15
21
|
grid_id = grid_file.grid_id.dup
|
16
22
|
page.destroy
|
17
23
|
grid = Mongo::Grid.new Mongoid.database
|
18
|
-
|
24
|
+
lambda { grid.get(grid_id).read }.must_raise(Mongo::GridFileNotFound)
|
19
25
|
end
|
20
26
|
|
21
|
-
|
27
|
+
it "must delete associated grid_file when page is deleted" do
|
22
28
|
page = Fabricate "concen/page"
|
23
29
|
grid_file = page.grid_files.build
|
24
30
|
grid_file.store File.read("#{Rails.root}/public/404.html"), "404.html"
|
25
31
|
page.destroy
|
26
32
|
end
|
27
33
|
|
28
|
-
|
34
|
+
it "must store correct original_filename" do
|
29
35
|
page = Fabricate "concen/page"
|
30
36
|
grid_file = page.grid_files.build
|
31
37
|
grid_file.store File.read("#{Rails.root}/public/404.html"), "404.html"
|
32
|
-
|
38
|
+
grid_file.original_filename.must_equal "404.html"
|
33
39
|
end
|
34
40
|
|
35
|
-
|
41
|
+
it "must include id in filename" do
|
36
42
|
page = Fabricate "concen/page"
|
37
43
|
grid_file = page.grid_files.build
|
38
44
|
grid_file.store File.read("#{Rails.root}/public/404.html"), "404.html"
|
39
|
-
|
45
|
+
grid_file.filename.must_include grid_file.grid_id.to_s
|
40
46
|
end
|
41
47
|
end
|
data/test/unit/page_test.rb
CHANGED
@@ -1,128 +1,164 @@
|
|
1
1
|
require "test_helper"
|
2
|
+
require "minitest/spec"
|
3
|
+
require "minitest/autorun"
|
2
4
|
|
3
|
-
|
4
|
-
|
5
|
+
describe Concen::Page do
|
6
|
+
before do
|
7
|
+
DatabaseCleaner.clean
|
8
|
+
end
|
9
|
+
|
10
|
+
it "can create page" do
|
5
11
|
page = Fabricate "concen/page"
|
6
|
-
|
12
|
+
page.id.wont_be_nil
|
7
13
|
end
|
8
14
|
|
9
|
-
|
15
|
+
it "can create child page" do
|
10
16
|
page = Fabricate "concen/page"
|
11
17
|
child_page = page.children.create :title => "1984"
|
12
|
-
|
13
|
-
|
18
|
+
child_page.id.wont_be_nil
|
19
|
+
page.id.must_equal child_page.parent.id
|
14
20
|
end
|
15
21
|
|
16
|
-
|
22
|
+
it "must parse title from raw_text" do
|
17
23
|
page = Fabricate "concen/page", :title => nil, :raw_text => "Title: Page Title"
|
18
|
-
|
24
|
+
page.title.must_equal "Page Title"
|
25
|
+
end
|
26
|
+
|
27
|
+
it "must get default title when none is present" do
|
28
|
+
page = Fabricate "concen/page", :title => nil
|
29
|
+
page.title.must_equal "Untitled 1"
|
30
|
+
end
|
31
|
+
|
32
|
+
it "validates uniqueness of title" do
|
33
|
+
parent_page = Fabricate "concen/page", :title => "Parent"
|
34
|
+
child_page_1 = parent_page.children.create :title => "Child"
|
35
|
+
child_page_2 = parent_page.children.build :title => "Child"
|
36
|
+
lambda { child_page_2.save! }.must_raise(Mongoid::Errors::Validations)
|
37
|
+
child_page_2.errors[:title].first.must_equal "is already taken"
|
19
38
|
end
|
20
39
|
|
21
|
-
|
40
|
+
it "must parse publish_time from raw_text" do
|
22
41
|
raw_text = "Title: Page Title 2\n\nPublish Time: now"
|
23
42
|
page = Fabricate "concen/page", :title => nil, :raw_text => raw_text
|
24
|
-
|
25
|
-
|
43
|
+
page.publish_time.wont_be_nil
|
44
|
+
page.raw_text.wont_equal raw_text
|
26
45
|
end
|
27
46
|
|
28
|
-
|
47
|
+
it "must parse multi content from raw_text and conver to html correctly" do
|
29
48
|
raw_text = File.read "#{File.dirname(__FILE__)}/../support/raw_text/multi_content.txt"
|
30
49
|
html = File.read("#{File.dirname(__FILE__)}/../support/raw_text/multi_content.html")
|
31
50
|
page = Fabricate "concen/page", :title => nil, :raw_text => raw_text
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
51
|
+
page.content.wont_be_nil
|
52
|
+
page.content.keys.must_equal ["part_1", "part_2"]
|
53
|
+
page.content_in_html("part_1").wont_be_nil
|
54
|
+
page.content_in_html("part_2").wont_be_nil
|
55
|
+
(page.content_in_html("part_1") + page.content_in_html("part_2")).must_equal html
|
37
56
|
end
|
38
57
|
|
39
|
-
|
58
|
+
it "must parse content with SmartyPants supported entities and convert to html correctly" do
|
40
59
|
raw_text_smartypants = File.read "#{File.dirname(__FILE__)}/../support/raw_text/smartypants.txt"
|
41
60
|
raw_text_smartypants_escape = File.read "#{File.dirname(__FILE__)}/../support/raw_text/smartypants_escape.txt"
|
42
|
-
|
43
|
-
|
61
|
+
raw_text_smartypants.wont_be_nil
|
62
|
+
raw_text_smartypants_escape.wont_be_nil
|
44
63
|
|
45
64
|
page1 = Fabricate "concen/page", :title => nil, :raw_text => raw_text_smartypants
|
46
|
-
|
47
|
-
|
65
|
+
page1.content_in_html.must_equal page1.content_in_html("main")
|
66
|
+
page1.content_in_html.must_equal File.read("#{File.dirname(__FILE__)}/../support/raw_text/smartypants.html")
|
48
67
|
|
49
68
|
page2 = Fabricate "concen/page", :title => nil, :raw_text => raw_text_smartypants_escape
|
50
|
-
|
51
|
-
|
69
|
+
page2.content_in_html.must_equal page2.content_in_html("main")
|
70
|
+
page2.content_in_html.must_equal File.read("#{File.dirname(__FILE__)}/../support/raw_text/smartypants_escape.html")
|
52
71
|
end
|
53
72
|
|
54
|
-
|
73
|
+
it "must parse content with code blocks and convert to html correctly" do
|
55
74
|
raw_text_code_blocks = File.read "#{File.dirname(__FILE__)}/../support/raw_text/code_blocks.txt"
|
56
|
-
|
75
|
+
raw_text_code_blocks.wont_be_nil
|
57
76
|
|
58
77
|
page = Fabricate "concen/page", :title => nil, :raw_text => raw_text_code_blocks
|
59
|
-
|
60
|
-
|
78
|
+
page.content_in_html.must_equal page.content_in_html("main")
|
79
|
+
page.content_in_html.must_equal File.read("#{File.dirname(__FILE__)}/../support/raw_text/code_blocks.html")
|
61
80
|
end
|
62
81
|
|
63
|
-
|
82
|
+
it "must parse content with inline HTML and convert to html correctly" do
|
64
83
|
raw_text_code_blocks = File.read "#{File.dirname(__FILE__)}/../support/raw_text/inline_html.txt"
|
65
|
-
|
84
|
+
raw_text_code_blocks.wont_be_nil
|
66
85
|
|
67
86
|
page = Fabricate "concen/page", :title => nil, :raw_text => raw_text_code_blocks
|
68
|
-
|
69
|
-
|
87
|
+
page.content_in_html.must_equal page.content_in_html("main")
|
88
|
+
page.content_in_html.must_equal File.read("#{File.dirname(__FILE__)}/../support/raw_text/inline_html.html")
|
70
89
|
end
|
71
90
|
|
72
|
-
|
91
|
+
it "has slug automatically generated" do
|
73
92
|
page1 = Fabricate "concen/page", :title => "Something New"
|
74
|
-
|
93
|
+
page1.slug.must_equal "something-new"
|
75
94
|
|
76
95
|
page2 = Fabricate.build "concen/page", :title => nil
|
77
96
|
page2.raw_text = File.read "#{File.dirname(__FILE__)}/../support/raw_text/title.txt"
|
78
97
|
page2.save
|
79
|
-
|
98
|
+
page2.slug.must_equal "something-new"
|
80
99
|
end
|
81
100
|
|
82
|
-
|
101
|
+
it "must be able to set slug from raw_text" do
|
83
102
|
page = Fabricate.build "concen/page", :title => nil
|
84
103
|
page.raw_text = File.read "#{File.dirname(__FILE__)}/../support/raw_text/slug.txt"
|
85
104
|
page.save
|
86
|
-
|
105
|
+
page.slug.must_equal "something-else"
|
87
106
|
end
|
88
107
|
|
89
|
-
|
90
|
-
page = Fabricate.build "concen/page", :title => nil
|
91
|
-
assert_raise(Mongoid::Errors::Validations) { page.save! }
|
92
|
-
assert_equal page.errors[:title].first, "can't be blank"
|
93
|
-
end
|
94
|
-
|
95
|
-
test "should have authors" do
|
108
|
+
it "has authors" do
|
96
109
|
page = Fabricate.build "concen/page", :authors => ["user1", "user2", "user3"]
|
97
|
-
|
110
|
+
page.authors.count.must_equal 3
|
98
111
|
end
|
99
112
|
|
100
|
-
|
113
|
+
it "must get correct author_as_user" do
|
101
114
|
user = Fabricate "concen/user"
|
102
115
|
page = Fabricate.build "concen/page", :authors => [user.username, "user2"]
|
103
|
-
|
104
|
-
|
105
|
-
|
116
|
+
page.authors.count.must_equal 2
|
117
|
+
page.authors_as_user.count.must_equal 1
|
118
|
+
page.authors_as_user.must_include user.reload
|
106
119
|
end
|
107
120
|
|
108
|
-
|
121
|
+
it "must get the correct slug" do
|
109
122
|
page = Fabricate "concen/page", :title => "New Title"
|
110
|
-
|
123
|
+
page.slug.must_equal "new-title"
|
111
124
|
page.write_attribute :slug, "new-slug"
|
112
125
|
page.save
|
113
|
-
|
126
|
+
page.slug.must_equal "new-slug"
|
114
127
|
end
|
115
128
|
|
116
|
-
|
129
|
+
it "must set/reset position correctly" do
|
117
130
|
page = Fabricate "concen/page"
|
118
131
|
child_page_1 = page.children.create :title => "Position 1"
|
119
|
-
|
132
|
+
child_page_1.position.must_equal 1
|
133
|
+
|
120
134
|
child_page_2 = page.children.create :title => "Position 2"
|
121
|
-
|
135
|
+
child_page_2.position.must_equal 2
|
136
|
+
|
122
137
|
child_page_3 = page.children.create :title => "Position 3"
|
123
|
-
|
138
|
+
child_page_3.position.must_equal 3
|
124
139
|
|
125
140
|
child_page_2.destroy
|
126
|
-
|
141
|
+
child_page_3.reload.position.must_equal 2
|
142
|
+
end
|
143
|
+
|
144
|
+
it "must have ancestor_slugs" do
|
145
|
+
page_1 = Fabricate "concen/page", :title => "A"
|
146
|
+
|
147
|
+
page_2 = page_1.children.create :title => "B"
|
148
|
+
page_2.ancestor_slugs.must_equal ["a"]
|
149
|
+
|
150
|
+
page_3 = page_2.children.create :title => "C"
|
151
|
+
page_3.ancestor_slugs.must_equal ["a", "b"]
|
152
|
+
end
|
153
|
+
|
154
|
+
it "must have level" do
|
155
|
+
page_1 = Fabricate "concen/page", :title => "A"
|
156
|
+
page_1.level.must_equal 0
|
157
|
+
|
158
|
+
page_2 = page_1.children.create :title => "B"
|
159
|
+
page_2.level.must_equal 1
|
160
|
+
|
161
|
+
page_3 = page_2.children.create :title => "C"
|
162
|
+
page_3.level.must_equal 2
|
127
163
|
end
|
128
164
|
end
|
data/test/unit/user_test.rb
CHANGED
@@ -1,42 +1,50 @@
|
|
1
1
|
require "test_helper"
|
2
|
+
require "minitest/spec"
|
3
|
+
require "minitest/autorun"
|
2
4
|
|
3
|
-
|
4
|
-
|
5
|
+
describe Concen::User do
|
6
|
+
before do
|
7
|
+
DatabaseCleaner.clean
|
8
|
+
end
|
9
|
+
|
10
|
+
it "can create user" do
|
5
11
|
user = Fabricate "concen/user"
|
6
|
-
|
12
|
+
user.id.wont_be_nil
|
7
13
|
end
|
8
14
|
|
9
|
-
|
15
|
+
it "has password_digest" do
|
10
16
|
user = Fabricate "concen/user"
|
11
|
-
|
17
|
+
user.password_digest.wont_be_nil
|
12
18
|
end
|
13
19
|
|
14
|
-
|
20
|
+
it "has auth_token" do
|
15
21
|
user = Fabricate "concen/user"
|
16
|
-
|
22
|
+
user.auth_token.wont_be_nil
|
17
23
|
end
|
18
24
|
|
19
|
-
|
25
|
+
it "has username" do
|
20
26
|
user = Fabricate.build "concen/user", :username => nil
|
21
|
-
|
22
|
-
|
27
|
+
lambda { user.save! }.must_raise(Mongoid::Errors::Validations)
|
28
|
+
user.errors[:username].first.must_equal "can't be blank"
|
23
29
|
end
|
24
30
|
|
25
|
-
|
31
|
+
it "has email" do
|
26
32
|
user = Fabricate.build "concen/user", :email => nil
|
27
|
-
|
28
|
-
|
33
|
+
lambda { user.save! }.must_raise(Mongoid::Errors::Validations)
|
34
|
+
user.errors[:email].first.must_equal "can't be blank"
|
29
35
|
end
|
30
36
|
|
31
|
-
|
37
|
+
it "has full_name" do
|
32
38
|
user = Fabricate.build("concen/user", :full_name => nil)
|
33
|
-
|
34
|
-
|
39
|
+
lambda { user.save! }.must_raise(Mongoid::Errors::Validations)
|
40
|
+
user.errors[:full_name].first.must_equal "can't be blank"
|
35
41
|
end
|
36
42
|
|
37
|
-
|
43
|
+
it "must authenticate user" do
|
38
44
|
password = {:password => "newpassword", :password_confirmation => "newpassword"}
|
39
45
|
user = Fabricate "concen/user", password
|
40
|
-
|
46
|
+
authenticated_user = user.authenticate("newpassword")
|
47
|
+
authenticated_user.wont_equal false
|
48
|
+
authenticated_user.must_be_instance_of Concen::User
|
41
49
|
end
|
42
50
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: concen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-09-
|
12
|
+
date: 2011-09-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: compass
|
16
|
-
requirement: &
|
16
|
+
requirement: &70307512129060 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.12.alpha
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70307512129060
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: haml
|
27
|
-
requirement: &
|
27
|
+
requirement: &70307512128260 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 3.1.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70307512128260
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: mustache
|
38
|
-
requirement: &
|
38
|
+
requirement: &70307512127260 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 0.99.4
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70307512127260
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: redcarpet
|
49
|
-
requirement: &
|
49
|
+
requirement: &70307512125880 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,43 +54,54 @@ dependencies:
|
|
54
54
|
version: 2.0.0b5
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70307512125880
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: mongoid
|
60
|
-
requirement: &
|
60
|
+
requirement: &70307512125080 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
64
64
|
- !ruby/object:Gem::Version
|
65
|
-
version: 2.
|
65
|
+
version: 2.2.2
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70307512125080
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name: mongo
|
71
|
-
requirement: &
|
70
|
+
name: mongo
|
71
|
+
requirement: &70307512124280 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version:
|
76
|
+
version: 1.4.0
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70307512124280
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: bson_ext
|
82
|
-
requirement: &
|
82
|
+
requirement: &70307512123400 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
86
86
|
- !ruby/object:Gem::Version
|
87
|
-
version: 1.
|
87
|
+
version: 1.4.0
|
88
|
+
type: :runtime
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *70307512123400
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: mongo-rails-instrumentation
|
93
|
+
requirement: &70307512154900 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ~>
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: 0.2.4
|
88
99
|
type: :runtime
|
89
100
|
prerelease: false
|
90
|
-
version_requirements: *
|
101
|
+
version_requirements: *70307512154900
|
91
102
|
- !ruby/object:Gem::Dependency
|
92
103
|
name: rack-gridfs
|
93
|
-
requirement: &
|
104
|
+
requirement: &70307512154380 !ruby/object:Gem::Requirement
|
94
105
|
none: false
|
95
106
|
requirements:
|
96
107
|
- - ~>
|
@@ -98,10 +109,10 @@ dependencies:
|
|
98
109
|
version: 0.4.1
|
99
110
|
type: :runtime
|
100
111
|
prerelease: false
|
101
|
-
version_requirements: *
|
112
|
+
version_requirements: *70307512154380
|
102
113
|
- !ruby/object:Gem::Dependency
|
103
114
|
name: chronic
|
104
|
-
requirement: &
|
115
|
+
requirement: &70307512153820 !ruby/object:Gem::Requirement
|
105
116
|
none: false
|
106
117
|
requirements:
|
107
118
|
- - ~>
|
@@ -109,10 +120,10 @@ dependencies:
|
|
109
120
|
version: 0.6.3
|
110
121
|
type: :runtime
|
111
122
|
prerelease: false
|
112
|
-
version_requirements: *
|
123
|
+
version_requirements: *70307512153820
|
113
124
|
- !ruby/object:Gem::Dependency
|
114
125
|
name: mime-types
|
115
|
-
requirement: &
|
126
|
+
requirement: &70307512153260 !ruby/object:Gem::Requirement
|
116
127
|
none: false
|
117
128
|
requirements:
|
118
129
|
- - ~>
|
@@ -120,10 +131,10 @@ dependencies:
|
|
120
131
|
version: '1.16'
|
121
132
|
type: :runtime
|
122
133
|
prerelease: false
|
123
|
-
version_requirements: *
|
134
|
+
version_requirements: *70307512153260
|
124
135
|
- !ruby/object:Gem::Dependency
|
125
136
|
name: bcrypt-ruby
|
126
|
-
requirement: &
|
137
|
+
requirement: &70307512152700 !ruby/object:Gem::Requirement
|
127
138
|
none: false
|
128
139
|
requirements:
|
129
140
|
- - ~>
|
@@ -131,10 +142,10 @@ dependencies:
|
|
131
142
|
version: 3.0.0
|
132
143
|
type: :runtime
|
133
144
|
prerelease: false
|
134
|
-
version_requirements: *
|
145
|
+
version_requirements: *70307512152700
|
135
146
|
- !ruby/object:Gem::Dependency
|
136
147
|
name: domainatrix
|
137
|
-
requirement: &
|
148
|
+
requirement: &70307512152080 !ruby/object:Gem::Requirement
|
138
149
|
none: false
|
139
150
|
requirements:
|
140
151
|
- - ~>
|
@@ -142,7 +153,7 @@ dependencies:
|
|
142
153
|
version: 0.0.10
|
143
154
|
type: :runtime
|
144
155
|
prerelease: false
|
145
|
-
version_requirements: *
|
156
|
+
version_requirements: *70307512152080
|
146
157
|
description: A Rails Engine to control and monitor Rails application from a web interface.
|
147
158
|
It includes content capturing system, real-time traffic monitoring, and real-time
|
148
159
|
performance monitoring. It is built to be flexible and customizable.
|
@@ -185,7 +196,7 @@ files:
|
|
185
196
|
- app/assets/images/concen/original/search-field.png
|
186
197
|
- app/assets/images/concen/record-visit.gif
|
187
198
|
- app/assets/images/concen/search-field.png
|
188
|
-
- app/assets/javascripts/concen/application.js
|
199
|
+
- app/assets/javascripts/concen/application.js
|
189
200
|
- app/assets/javascripts/concen/pages.js
|
190
201
|
- app/assets/javascripts/concen/performances.js
|
191
202
|
- app/assets/javascripts/concen/statuses.js
|
@@ -404,7 +415,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
404
415
|
version: 1.3.6
|
405
416
|
requirements: []
|
406
417
|
rubyforge_project: concen
|
407
|
-
rubygems_version: 1.8.
|
418
|
+
rubygems_version: 1.8.10
|
408
419
|
signing_key:
|
409
420
|
specification_version: 3
|
410
421
|
summary: Control and monitor Rails application.
|
@@ -1,12 +0,0 @@
|
|
1
|
-
#= require concen/modernizr
|
2
|
-
#= require concen/jquery
|
3
|
-
#= require concen/jquery-ui/jquery.ui.core
|
4
|
-
#= require concen/jquery-ui/jquery.ui.widget
|
5
|
-
#= require concen/jquery-ui/jquery.ui.mouse
|
6
|
-
#= require concen/jquery-ui/jquery.ui.position
|
7
|
-
#= require concen/jquery-ui/jquery.ui.sortable
|
8
|
-
#= require concen/jquery-ui/jquery.ui.resizable
|
9
|
-
#= require concen/jquery-ui/jquery.ui.draggable
|
10
|
-
#= require concen/jquery-ui/jquery.ui.droppable
|
11
|
-
#= require concen/jquery.ui.nestedSortable
|
12
|
-
#= require concen/jquery_ujs
|