concen 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +5 -1
- data/app/models/concen/page.rb +14 -18
- data/concen.gemspec +1 -1
- data/lib/concen/version.rb +1 -1
- data/test/support/raw_text/code_blocks.txt +1 -3
- data/test/support/raw_text/slug.txt +3 -0
- data/test/support/raw_text/title.txt +1 -0
- data/test/unit/grid_file_test.rb +1 -1
- data/test/unit/page_test.rb +15 -4
- metadata +31 -27
data/README.md
CHANGED
@@ -128,7 +128,11 @@ If you have used Concen for any of your websites and would like to be listed her
|
|
128
128
|
|
129
129
|
## Version History
|
130
130
|
|
131
|
-
- **0.1.
|
131
|
+
- **0.1.5** (23 August 2011):
|
132
|
+
|
133
|
+
- A better approach of handling slug. Slug by default is generated from title. It can then be overwritten by specifying "Slug" in metadata declaration (from the text editor).
|
134
|
+
|
135
|
+
- **0.1.4** (22 August 2011):
|
132
136
|
|
133
137
|
- Simpler setup process (only in 2 steps).
|
134
138
|
- Brief guide is available upon the completion of setup.
|
data/app/models/concen/page.rb
CHANGED
@@ -18,7 +18,7 @@ module Concen
|
|
18
18
|
field :level, :type => Integer
|
19
19
|
field :title, :type => String
|
20
20
|
field :description, :type => String
|
21
|
-
field :
|
21
|
+
field :slug, :type => String
|
22
22
|
field :raw_text, :type => String
|
23
23
|
field :content, :type => Hash, :default => {}
|
24
24
|
field :position, :type => Integer
|
@@ -29,12 +29,12 @@ module Concen
|
|
29
29
|
field :status, :type => String
|
30
30
|
|
31
31
|
validates_presence_of :title
|
32
|
-
validates_presence_of :
|
32
|
+
validates_presence_of :slug
|
33
33
|
validates_uniqueness_of :title, :scope => [:parent_id, :level], :case_sensitive => false
|
34
|
-
validates_uniqueness_of :
|
34
|
+
validates_uniqueness_of :slug, :scope => [:parent_id, :level], :case_sensitive => false
|
35
35
|
|
36
36
|
before_validation :parse_raw_text
|
37
|
-
before_validation :
|
37
|
+
before_validation :set_slug
|
38
38
|
before_save :set_publish_month
|
39
39
|
before_create :set_position
|
40
40
|
after_save :unset_unused_dynamic_fields
|
@@ -45,7 +45,7 @@ module Concen
|
|
45
45
|
# This scope should not be chained with other any_of criteria.
|
46
46
|
# Because the mongo driver takes a hash for a query,
|
47
47
|
# and a hash doesn't allow duplicate keys.
|
48
|
-
scope :with_slug, ->(slug) {
|
48
|
+
scope :with_slug, ->(slug) { where(:slug => slug) }
|
49
49
|
|
50
50
|
scope :with_position, where(:position.exists => true)
|
51
51
|
scope :published, lambda {
|
@@ -57,22 +57,14 @@ module Concen
|
|
57
57
|
|
58
58
|
index :parent_id, :background => true
|
59
59
|
index :publish_time, :background => true
|
60
|
-
index :
|
60
|
+
index :slug, :background => true
|
61
61
|
|
62
62
|
# Get the list of dynamic fields by checking againts this array.
|
63
63
|
# Values should mirror the listed fields above.
|
64
|
-
PREDEFINED_FIELDS = [:_id, :parent_id, :level, :created_at, :updated_at, :
|
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]
|
65
65
|
|
66
66
|
# 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, :
|
68
|
-
|
69
|
-
def slug
|
70
|
-
if user_defined_slug = self.read_attribute(:slug)
|
71
|
-
user_defined_slug
|
72
|
-
else
|
73
|
-
self.default_slug
|
74
|
-
end
|
75
|
-
end
|
67
|
+
PROTECTED_FIELDS = [:_id, :parent_id, :level, :created_at, :updated_at, :content, :raw_text, :position, :grid_files]
|
76
68
|
|
77
69
|
def content_in_html(key = "main", data={})
|
78
70
|
if content = self.content.try(:[], key)
|
@@ -230,8 +222,12 @@ module Concen
|
|
230
222
|
|
231
223
|
protected
|
232
224
|
|
233
|
-
def
|
234
|
-
|
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
|
235
231
|
end
|
236
232
|
|
237
233
|
def set_position
|
data/concen.gemspec
CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
|
|
9
9
|
s.email = ["steve.randy@gmail.com"]
|
10
10
|
s.homepage = "https://github.com/steverandy/concen"
|
11
11
|
s.summary = "Control and monitor Rails application."
|
12
|
-
s.description = "A Rails Engine to control and monitor Rails application from a web interface. It includes content capturing system, real-time traffic monitoring, and real-time performance monitoring. It
|
12
|
+
s.description = "A Rails Engine to control and monitor Rails application from a web interface. It includes content capturing system, real-time traffic monitoring, and real-time performance monitoring. It's built to be flexible and customizable."
|
13
13
|
|
14
14
|
s.required_rubygems_version = ">= 1.3.6"
|
15
15
|
s.rubyforge_project = "concen"
|
data/lib/concen/version.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
Title: Something New
|
data/test/unit/grid_file_test.rb
CHANGED
@@ -36,6 +36,6 @@ class GridFileTest < ActiveSupport::TestCase
|
|
36
36
|
page = Fabricate "concen/page"
|
37
37
|
grid_file = page.grid_files.build
|
38
38
|
grid_file.store File.read("#{Rails.root}/public/404.html"), "404.html"
|
39
|
-
assert grid_file.filename.include?(grid_file.
|
39
|
+
assert grid_file.filename.include?(grid_file.grid_id.to_s), "Filename does not include grid_id."
|
40
40
|
end
|
41
41
|
end
|
data/test/unit/page_test.rb
CHANGED
@@ -60,10 +60,21 @@ class PageTest < ActiveSupport::TestCase
|
|
60
60
|
assert_equal page.content_in_html, File.read("#{File.dirname(__FILE__)}/../support/raw_text/code_blocks.html")
|
61
61
|
end
|
62
62
|
|
63
|
-
test "should have
|
64
|
-
|
65
|
-
|
66
|
-
|
63
|
+
test "should have slug automatically generated" do
|
64
|
+
page1 = Fabricate "concen/page", :title => "Something New"
|
65
|
+
assert_equal page1.slug, "something-new"
|
66
|
+
|
67
|
+
page2 = Fabricate.build "concen/page", :title => nil
|
68
|
+
page2.raw_text = File.read "#{File.dirname(__FILE__)}/../support/raw_text/title.txt"
|
69
|
+
page2.save
|
70
|
+
assert_equal page2.slug, "something-new"
|
71
|
+
end
|
72
|
+
|
73
|
+
test "should be able to set slug from raw_text" do
|
74
|
+
page = Fabricate.build "concen/page", :title => nil
|
75
|
+
page.raw_text = File.read "#{File.dirname(__FILE__)}/../support/raw_text/slug.txt"
|
76
|
+
page.save
|
77
|
+
assert_equal page.slug, "something-else"
|
67
78
|
end
|
68
79
|
|
69
80
|
test "should not be created without title" do
|
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.1.
|
4
|
+
version: 0.1.5
|
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-08-
|
12
|
+
date: 2011-08-23 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: compass
|
16
|
-
requirement: &
|
16
|
+
requirement: &70272212467340 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - =
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.11.5
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70272212467340
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: haml
|
27
|
-
requirement: &
|
27
|
+
requirement: &70272212466880 !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: *70272212466880
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: mustache
|
38
|
-
requirement: &
|
38
|
+
requirement: &70272212466420 !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: *70272212466420
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: redcarpet
|
49
|
-
requirement: &
|
49
|
+
requirement: &70272212465960 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 2.0.0b3
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70272212465960
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: mongoid
|
60
|
-
requirement: &
|
60
|
+
requirement: &70272212465500 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 2.0.0
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70272212465500
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: mongo-rails-instrumentation
|
71
|
-
requirement: &
|
71
|
+
requirement: &70272212465040 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 0.2.4
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70272212465040
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: bson_ext
|
82
|
-
requirement: &
|
82
|
+
requirement: &70272212464580 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: 1.3.0
|
88
88
|
type: :runtime
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70272212464580
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: rack-gridfs
|
93
|
-
requirement: &
|
93
|
+
requirement: &70272212464120 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ~>
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: 0.4.1
|
99
99
|
type: :runtime
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70272212464120
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: chronic
|
104
|
-
requirement: &
|
104
|
+
requirement: &70272212463660 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ~>
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: 0.4.3
|
110
110
|
type: :runtime
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *70272212463660
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: mime-types
|
115
|
-
requirement: &
|
115
|
+
requirement: &70272212463200 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ~>
|
@@ -120,10 +120,10 @@ dependencies:
|
|
120
120
|
version: '1.16'
|
121
121
|
type: :runtime
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *70272212463200
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: bcrypt-ruby
|
126
|
-
requirement: &
|
126
|
+
requirement: &70272212462740 !ruby/object:Gem::Requirement
|
127
127
|
none: false
|
128
128
|
requirements:
|
129
129
|
- - ~>
|
@@ -131,10 +131,10 @@ dependencies:
|
|
131
131
|
version: 2.1.4
|
132
132
|
type: :runtime
|
133
133
|
prerelease: false
|
134
|
-
version_requirements: *
|
134
|
+
version_requirements: *70272212462740
|
135
135
|
- !ruby/object:Gem::Dependency
|
136
136
|
name: domainatrix
|
137
|
-
requirement: &
|
137
|
+
requirement: &70272212462280 !ruby/object:Gem::Requirement
|
138
138
|
none: false
|
139
139
|
requirements:
|
140
140
|
- - ~>
|
@@ -142,10 +142,10 @@ dependencies:
|
|
142
142
|
version: 0.0.10
|
143
143
|
type: :runtime
|
144
144
|
prerelease: false
|
145
|
-
version_requirements: *
|
145
|
+
version_requirements: *70272212462280
|
146
146
|
description: A Rails Engine to control and monitor Rails application from a web interface.
|
147
147
|
It includes content capturing system, real-time traffic monitoring, and real-time
|
148
|
-
performance monitoring. It
|
148
|
+
performance monitoring. It's built to be flexible and customizable.
|
149
149
|
email:
|
150
150
|
- steve.randy@gmail.com
|
151
151
|
executables: []
|
@@ -380,10 +380,12 @@ files:
|
|
380
380
|
- test/support/raw_text/code_blocks.txt
|
381
381
|
- test/support/raw_text/multi_content.html
|
382
382
|
- test/support/raw_text/multi_content.txt
|
383
|
+
- test/support/raw_text/slug.txt
|
383
384
|
- test/support/raw_text/smartypants.html
|
384
385
|
- test/support/raw_text/smartypants.txt
|
385
386
|
- test/support/raw_text/smartypants_escape.html
|
386
387
|
- test/support/raw_text/smartypants_escape.txt
|
388
|
+
- test/support/raw_text/title.txt
|
387
389
|
- test/test_helper.rb
|
388
390
|
- test/unit/concen_test.rb
|
389
391
|
- test/unit/grid_file_test.rb
|
@@ -452,10 +454,12 @@ test_files:
|
|
452
454
|
- test/support/raw_text/code_blocks.txt
|
453
455
|
- test/support/raw_text/multi_content.html
|
454
456
|
- test/support/raw_text/multi_content.txt
|
457
|
+
- test/support/raw_text/slug.txt
|
455
458
|
- test/support/raw_text/smartypants.html
|
456
459
|
- test/support/raw_text/smartypants.txt
|
457
460
|
- test/support/raw_text/smartypants_escape.html
|
458
461
|
- test/support/raw_text/smartypants_escape.txt
|
462
|
+
- test/support/raw_text/title.txt
|
459
463
|
- test/test_helper.rb
|
460
464
|
- test/unit/concen_test.rb
|
461
465
|
- test/unit/grid_file_test.rb
|