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 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.4** (23 August 2011):
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.
@@ -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 :default_slug, :type => String
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 :default_slug
32
+ validates_presence_of :slug
33
33
  validates_uniqueness_of :title, :scope => [:parent_id, :level], :case_sensitive => false
34
- validates_uniqueness_of :default_slug, :scope => [:parent_id, :level], :case_sensitive => false
34
+ validates_uniqueness_of :slug, :scope => [:parent_id, :level], :case_sensitive => false
35
35
 
36
36
  before_validation :parse_raw_text
37
- before_validation :set_default_slug
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) { any_of({:slug => slug}, {:default_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 :default_slug, :background => true
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, :default_slug, :content, :raw_text, :position, :grid_files, :title, :description, :publish_time, :labels, :authors, :status]
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, :default_slug, :content, :raw_text, :position, :grid_files]
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 set_default_slug
234
- self.default_slug = self.title.parameterize if self.title
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
@@ -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. Its built to be flexible and customizable."
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"
@@ -1,3 +1,3 @@
1
1
  module Concen
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.5"
3
3
  end
@@ -14,6 +14,4 @@ Redcarpet is basically a Ruby wrapper of [Upskirt](https://github.com/tanoku/red
14
14
 
15
15
  To integrate Rercarpet and Haml in your Rails app, first add the Redcarpet gem in the `Gemfile`.
16
16
 
17
- ```
18
- gem "redcarpet", "~> 1.17.2"
19
- ```
17
+ gem "redcarpet", "~> 1.17.2"
@@ -0,0 +1,3 @@
1
+ Title: Something
2
+
3
+ Slug: something-else
@@ -0,0 +1 @@
1
+ Title: Something New
@@ -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.id.to_s), "Filename does not include grid_file id."
39
+ assert grid_file.filename.include?(grid_file.grid_id.to_s), "Filename does not include grid_id."
40
40
  end
41
41
  end
@@ -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 default_slug" do
64
- page = Fabricate "concen/page"
65
- assert_not_nil page.default_slug
66
- assert page.default_slug.length > 0
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
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-22 00:00:00.000000000Z
12
+ date: 2011-08-23 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: compass
16
- requirement: &70288294752920 !ruby/object:Gem::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: *70288294752920
24
+ version_requirements: *70272212467340
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: haml
27
- requirement: &70288294752460 !ruby/object:Gem::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: *70288294752460
35
+ version_requirements: *70272212466880
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: mustache
38
- requirement: &70288294752000 !ruby/object:Gem::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: *70288294752000
46
+ version_requirements: *70272212466420
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: redcarpet
49
- requirement: &70288294751540 !ruby/object:Gem::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: *70288294751540
57
+ version_requirements: *70272212465960
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: mongoid
60
- requirement: &70288294751080 !ruby/object:Gem::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: *70288294751080
68
+ version_requirements: *70272212465500
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: mongo-rails-instrumentation
71
- requirement: &70288294750620 !ruby/object:Gem::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: *70288294750620
79
+ version_requirements: *70272212465040
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: bson_ext
82
- requirement: &70288294750160 !ruby/object:Gem::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: *70288294750160
90
+ version_requirements: *70272212464580
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: rack-gridfs
93
- requirement: &70288294749700 !ruby/object:Gem::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: *70288294749700
101
+ version_requirements: *70272212464120
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: chronic
104
- requirement: &70288294749240 !ruby/object:Gem::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: *70288294749240
112
+ version_requirements: *70272212463660
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: mime-types
115
- requirement: &70288294748780 !ruby/object:Gem::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: *70288294748780
123
+ version_requirements: *70272212463200
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: bcrypt-ruby
126
- requirement: &70288294748320 !ruby/object:Gem::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: *70288294748320
134
+ version_requirements: *70272212462740
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: domainatrix
137
- requirement: &70288294747860 !ruby/object:Gem::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: *70288294747860
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. Its built to be flexible and customizable.
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