georgia 0.7.3 → 0.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -9
  3. data/app/assets/javascripts/georgia/ckeditor/config.js +0 -2
  4. data/app/controllers/georgia/dashboard_controller.rb +4 -2
  5. data/app/mailers/georgia/notifier.rb +0 -2
  6. data/app/models/acts_as_taggable_on/tag.rb +9 -0
  7. data/app/models/ckeditor/asset.rb +6 -3
  8. data/app/models/georgia/page.rb +6 -1
  9. data/config/routes.rb +0 -12
  10. data/lib/georgia.rb +2 -2
  11. data/lib/georgia/engine.rb +0 -10
  12. data/lib/georgia/indexer.rb +25 -7
  13. data/lib/georgia/indexer/extensions/solr_adapter/acts_as_taggable_on_tag.rb +21 -0
  14. data/lib/georgia/indexer/extensions/solr_adapter/ckeditor_asset.rb +46 -0
  15. data/lib/georgia/indexer/extensions/solr_adapter/georgia_page.rb +75 -0
  16. data/lib/georgia/indexer/extensions/tire_adapter/acts_as_taggable_on_tag.rb +24 -0
  17. data/lib/georgia/indexer/extensions/tire_adapter/ckeditor_asset.rb +41 -0
  18. data/lib/georgia/indexer/extensions/tire_adapter/georgia_page.rb +55 -0
  19. data/lib/georgia/indexer/solr_adapter.rb +9 -16
  20. data/lib/georgia/indexer/tire_adapter.rb +8 -14
  21. data/lib/georgia/version.rb +1 -1
  22. metadata +17 -89
  23. data/app/assets/javascripts/georgia/components/tables/messages.js.coffee +0 -59
  24. data/app/controllers/georgia/messages_controller.rb +0 -66
  25. data/app/controllers/messages_controller.rb +0 -29
  26. data/app/decorators/georgia/message_decorator.rb +0 -21
  27. data/app/decorators/georgia/messages_decorator.rb +0 -4
  28. data/app/helpers/georgia/messages_helper.rb +0 -9
  29. data/app/models/georgia/message.rb +0 -30
  30. data/app/presenters/georgia/message_actions_presenter.rb +0 -51
  31. data/app/views/georgia/header/_messages.html.erb +0 -3
  32. data/app/views/georgia/messages/_message.html.erb +0 -26
  33. data/app/views/georgia/messages/destroy.js.erb +0 -3
  34. data/app/views/georgia/messages/search.html.erb +0 -58
  35. data/app/views/georgia/messages/show.html.erb +0 -46
  36. data/app/views/messages/create.js.erb +0 -0
  37. data/app/workers/spam_worker.rb +0 -12
  38. data/lib/georgia/indexer/adapter.rb +0 -10
  39. data/lib/georgia/indexer/solr/acts_as_taggable_on/tag.rb +0 -17
  40. data/lib/georgia/indexer/solr/ckeditor/asset.rb +0 -43
  41. data/lib/georgia/indexer/solr/georgia/message.rb +0 -31
  42. data/lib/georgia/indexer/solr/georgia/page.rb +0 -71
  43. data/lib/georgia/indexer/tire/ckeditor/asset.rb +0 -38
  44. data/lib/georgia/indexer/tire/georgia/message.rb +0 -41
  45. data/lib/georgia/indexer/tire/georgia/page.rb +0 -54
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cd1a27f515ca78cc69f58d4e59d1feb142d67075
4
- data.tar.gz: 78a2a2a4ec57a76be7f9ccc0e9039894e4ccac17
3
+ metadata.gz: a3f4c9543e2181d35f09f90bd82cf2f523053974
4
+ data.tar.gz: 05657441a546365bb0011bc5e9b518acf44d602c
5
5
  SHA512:
6
- metadata.gz: ba641378b4d8279b895669a966df089b3cf9b19ec412b1257390cfc834479bf0b92c9d7c8103c052645ab93a580ec0dcf3eb9225a6401697a4cfd2559f7f1692
7
- data.tar.gz: 6b97374a1349361749d00cb58dfbc7cd75e51f856b64c388ee7a01995fbc2d9ca728dc4bf03590326ca23f06b2a4ddcd5469d2f1597aa8e912ec7a2cf8cd58c3
6
+ metadata.gz: 03bc9f24c25a6972570bb1636b38f1c5cf4d65a9f807bcde8cbc33e55c70cee9aa84b073594bed7fda169eda3f9069c434cb17d2bcb38f0ca9f9ddf4c3640511
7
+ data.tar.gz: a8c4409742f2d91a1a2dd2c9eed84f49158c1983d107e1be6d4cbdf56904d6904255455aaa8561bb4b80a2d3f70fd48a56bc403862a7e5488213dc3e6a480cb1
data/README.md CHANGED
@@ -3,6 +3,7 @@
3
3
  [![Gem Version](https://badge.fury.io/rb/georgia.png)](http://badge.fury.io/rb/georgia)
4
4
  [![Build Status](https://travis-ci.org/georgia-cms/georgia.png?branch=master)](https://travis-ci.org/georgia-cms/georgia)
5
5
  [![Code Climate](https://codeclimate.com/github/georgia-cms/georgia.png)](https://codeclimate.com/github/georgia-cms/georgia)
6
+ [![Coverage Status](https://coveralls.io/repos/georgia-cms/georgia/badge.png)](https://coveralls.io/r/georgia-cms/georgia)
6
7
 
7
8
  Rails. Engine. CMS. Plug-and-play content management system for Ruby on Rails. Have a peak at the [demo](http://sorrynodemoyet.com/i-promise-it-s-on-its-way).
8
9
 
@@ -11,8 +12,9 @@ Rails. Engine. CMS. Plug-and-play content management system for Ruby on Rails. H
11
12
  * Media library on the cloud
12
13
  * Spam filter on emails
13
14
  * Multilingual from the get-go
14
- * Review & Preview before publishing
15
- * Rollback to previous revisions
15
+ * Review you pairs and draft new pages
16
+ * Preview before publishing
17
+ * Rollback to previous revisions when it hits the fan
16
18
  * Great UI, nice search, gravatars
17
19
  * Editable menus
18
20
  * Extendable
@@ -39,7 +41,7 @@ Georgia uses available_locales to know which translations should be configured o
39
41
 
40
42
  Then run the generator to mount routes, run migrations & setup initial instances.
41
43
 
42
- rails g georgia:install
44
+ rails generate georgia:install
43
45
 
44
46
  Start your server (`rails server`) and go to [http://localhost:3000/admin](http://localhost:3000/admin) to get started.
45
47
 
@@ -57,11 +59,6 @@ Add `config/initializers/bonsai.rb` with:
57
59
  Finally, create your indices with these commands:
58
60
 
59
61
  heroku run rake environment tire:import CLASS=Georgia::Page FORCE=true
60
- heroku run rake environment tire:import CLASS=Georgia::Message FORCE=true
61
62
  heroku run rake environment tire:import CLASS=Ckeditor::Asset FORCE=true
62
63
 
63
- For more information, you can also follow these [instructions](https://gist.github.com/nz/2041121) to setup bonsai.io. More [here](https://devcenter.heroku.com/articles/bonsai) on heroku.com
64
-
65
- ### Spam filtering
66
-
67
- TODO
64
+ For more information, you can also follow these [instructions](https://gist.github.com/nz/2041121) to setup bonsai.io. More [here](https://devcenter.heroku.com/articles/bonsai) on heroku.com
@@ -1,7 +1,5 @@
1
- var CKEDITOR_BASEPATH = '/assets/ckeditor/';
2
1
  CKEDITOR.config.ignoreEmptyParagraph = false;
3
2
  CKEDITOR.config.allowedContent = true;
4
- CKEDITOR.config.baseHref = '/assets/ckeditor/';
5
3
  CKEDITOR.config.height = 400;
6
4
  CKEDITOR.config.width = '95.5%';
7
5
  CKEDITOR.config.toolbarStartupExpanded = false;
@@ -5,8 +5,10 @@ module Georgia
5
5
  if can?(:approve, Georgia::Revision) or can?(:review, Georgia::Revision)
6
6
  @awaiting_revisions = Georgia::Revision.reviews.select{|r| r.revisionable.present?}
7
7
  end
8
- if can?(:index, Georgia::Message)
9
- @messages = Georgia::Message.ham.latest.limit(5).decorate
8
+ if defined? GeorgiaMailer::Message
9
+ if can?(:index, Georgia::Message)
10
+ @messages = Georgia::Message.ham.latest.limit(5).decorate
11
+ end
10
12
  end
11
13
  end
12
14
 
@@ -1,8 +1,6 @@
1
1
  module Georgia
2
2
  class Notifier < ActionMailer::Base
3
3
 
4
- include SendGrid
5
-
6
4
  def notify_admins(message, url)
7
5
  @message = message
8
6
  @url = url
@@ -0,0 +1,9 @@
1
+ ActsAsTaggableOn::Tag.class_eval do
2
+
3
+ include Georgia::Indexer::Adapter
4
+ is_searchable({
5
+ solr: Georgia::Indexer::SolrAdapter::ActsAsTaggableOnTagExtension,
6
+ tire: Georgia::Indexer::TireAdapter::ActsAsTaggableOnTagExtension,
7
+ })
8
+
9
+ end
@@ -1,11 +1,16 @@
1
1
  class Ckeditor::Asset < ActiveRecord::Base
2
2
 
3
+ include Georgia::Indexer::Adapter
4
+ is_searchable({
5
+ solr: Georgia::Indexer::SolrAdapter::CkeditorAssetExtension,
6
+ tire: Georgia::Indexer::TireAdapter::CkeditorAssetExtension,
7
+ })
8
+
3
9
  # to allow media_path in to_jq_upload
4
10
  include Georgia::Engine.routes.url_helpers
5
11
 
6
12
  include Ckeditor::Orm::ActiveRecord::AssetBase
7
13
  include Georgia::Concerns::Taggable
8
- include Georgia::Indexer
9
14
 
10
15
  delegate :url, :current_path, :content_type, to: :data
11
16
 
@@ -40,6 +45,4 @@ class Ckeditor::Asset < ActiveRecord::Base
40
45
  '> 1 MB' => 1000..999999
41
46
  }
42
47
 
43
-
44
-
45
48
  end
@@ -1,7 +1,12 @@
1
1
  module Georgia
2
2
  class Page < ActiveRecord::Base
3
3
 
4
- include Georgia::Indexer
4
+ include Georgia::Indexer::Adapter
5
+ is_searchable({
6
+ solr: Georgia::Indexer::SolrAdapter::GeorgiaPageExtension,
7
+ tire: Georgia::Indexer::TireAdapter::GeorgiaPageExtension
8
+ })
9
+
5
10
  include Georgia::Concerns::Taggable
6
11
  include Georgia::Concerns::Orderable
7
12
  include Georgia::Concerns::Slugable
@@ -51,24 +51,12 @@ Georgia::Engine.routes.draw do
51
51
  end
52
52
  end
53
53
  resources :users
54
- resources :messages do
55
- collection do
56
- get :search
57
- get :destroy_all_spam
58
- end
59
- member do
60
- get :spam
61
- get :ham
62
- end
63
- end
64
54
  resources :menus, path: 'navigation'
65
55
  resources :links, only: [:create, :show]
66
56
  resources :widgets
67
57
  resources :ui_associations, path: 'ui-associations', only: [:new]
68
58
  resources :slides, only: [:new]
69
59
 
70
- match '/search/messages', to: 'search#messages'
71
-
72
60
  unauthenticated do
73
61
  as :user do
74
62
  root :to => 'users/sessions#new'
@@ -16,10 +16,10 @@ module Georgia
16
16
  @@url = "http://www.example.com"
17
17
 
18
18
  mattr_accessor :navigation
19
- @@navigation = %w(dashboard pages messages media navigation widgets)
19
+ @@navigation = %w(dashboard pages media navigation widgets)
20
20
 
21
21
  mattr_accessor :indexer
22
- @@indexer = :solr
22
+ @@indexer = :tire
23
23
 
24
24
  def self.setup
25
25
  yield self
@@ -17,12 +17,8 @@ module Georgia
17
17
  require 'carrierwave'
18
18
  require 'draper'
19
19
  require 'ancestry'
20
- require 'cloudfiles'
21
20
  require 'state_machine'
22
- require 'sendgrid'
23
21
  require 'routing_concerns'
24
- require 'rakismet'
25
- require 'sidekiq'
26
22
 
27
23
  require 'sass-rails'
28
24
  require 'bourbon'
@@ -36,13 +32,7 @@ module Georgia
36
32
 
37
33
  initializer 'georgia.action_controller' do |app|
38
34
  ActiveSupport.on_load :action_controller do
39
- helper Georgia::DeviseHelper
40
- helper Georgia::FormsHelper
41
- helper Georgia::RoutesHelper
42
- helper Georgia::UiHelper
43
- helper Georgia::MenusHelper
44
35
  helper Georgia::MetaTagsHelper
45
- helper Georgia::TwitterHelper
46
36
  helper Georgia::InternationalizationHelper
47
37
  end
48
38
  end
@@ -1,26 +1,44 @@
1
- require 'georgia/indexer/adapter'
1
+ require 'active_support/concern'
2
2
 
3
3
  module Georgia
4
4
  module Indexer
5
5
  autoload :SolrAdapter, 'georgia/indexer/solr_adapter'
6
6
  autoload :TireAdapter, 'georgia/indexer/tire_adapter'
7
7
 
8
- mattr_accessor :adapter
9
-
10
- def self.included(base)
8
+ def self.adapter
11
9
  @@adapter ||= adapter_lookup
12
10
  end
13
11
 
12
+ # Delegates search to the adapter
13
+ def self.search model, params
14
+ adapter.search model, params
15
+ end
16
+
17
+ def self.searching model, extension
18
+ adapter.searching model, extension
19
+ end
20
+
14
21
  private
15
22
 
16
23
  def self.adapter_lookup
17
24
  (case Georgia.indexer
18
- when :solr then Georgia::Indexer::SolrAdapter.new
19
- when :tire then Georgia::Indexer::TireAdapter.new
25
+ when :solr then SolrAdapter.new
26
+ when :tire then TireAdapter.new
20
27
  else
21
- Georgia::Indexer::TireAdapter.new
28
+ TireAdapter.new
22
29
  end)
23
30
  end
24
31
 
32
+ module Adapter
33
+ extend ActiveSupport::Concern
34
+
35
+ included do
36
+ def self.is_searchable extensions={}
37
+ raise "No extension for the #{Georgia.indexer} indexer" unless extensions[Georgia.indexer].present?
38
+ self.send(:include, extensions[Georgia.indexer])
39
+ end
40
+ end
41
+ end
42
+
25
43
  end
26
44
  end
@@ -0,0 +1,21 @@
1
+ require 'active_support/concern'
2
+
3
+ module Georgia
4
+ module Indexer
5
+ class SolrAdapter
6
+ module ActsAsTaggableOnTagExtension
7
+
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+
12
+ searchable do
13
+ text :name
14
+ end
15
+
16
+ end
17
+
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,46 @@
1
+ require 'active_support/concern'
2
+
3
+ module Georgia
4
+ module Indexer
5
+ class SolrAdapter
6
+ module CkeditorAssetExtension
7
+
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+
12
+ searchable do
13
+ text :filename, stored: true
14
+ text :tags do
15
+ tag_list.join(', ')
16
+ end
17
+ string :tags, stored: true, multiple: true do
18
+ tag_list
19
+ end
20
+ string :extension, stored: true do
21
+ extension.try(:downcase)
22
+ end
23
+ time :updated_at
24
+ integer :size, stored: true do
25
+ size / 1024 # gives size in KB
26
+ end
27
+ end
28
+
29
+ def self.search_index model, params
30
+ @search = model.search do
31
+ fulltext params[:query] do
32
+ fields(:filename, :tags)
33
+ end
34
+ with(:extension, params[:e]) unless params[:e].blank?
35
+ with(:tags).any_of(params[:tg]) unless params[:tg].blank?
36
+ order_by (params[:o] || :updated_at), (params[:dir] || :desc)
37
+ paginate(page: params[:page], per_page: (params[:per] || 8))
38
+ end.results
39
+ end
40
+
41
+ end
42
+
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,75 @@
1
+ require 'active_support/concern'
2
+
3
+ module Georgia
4
+ module Indexer
5
+ class SolrAdapter
6
+ module GeorgiaPageExtension
7
+
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+
12
+ searchable do
13
+ text :title, stored: true do
14
+ revisions.map{|r| r.contents.map(&:title)}.flatten.uniq.join(', ')
15
+ end
16
+ text :excerpt, stored: true do
17
+ revisions.map{|r| r.contents.map(&:excerpt)}.flatten.uniq.join(', ')
18
+ end
19
+ text :text do
20
+ revisions.map{|r| r.contents.map(&:text)}.flatten.uniq.join(', ')
21
+ end
22
+ text :keywords do
23
+ revisions.map{|r| r.contents.map(&:keyword_list)}.flatten.uniq.join(', ')
24
+ end
25
+ text :template do
26
+ revisions.map(&:template).uniq.join(', ')
27
+ end
28
+ text :tags do
29
+ tag_list.join(', ')
30
+ end
31
+ text :url
32
+ string :class_name do
33
+ self.class.name
34
+ end
35
+ string :title
36
+ string :excerpt
37
+ string :text
38
+ string :url
39
+ string :template
40
+ string :state do
41
+ publish_state
42
+ end
43
+ string :keywords, stored: true, multiple: true do
44
+ revisions.map{|r| r.contents.map(&:keyword_list)}.flatten.uniq
45
+ end
46
+ string :tag_list, stored: true, multiple: true #Facets (multiple)
47
+ string :tags do #Ordering (single list)
48
+ tag_list.join(', ')
49
+ end
50
+ time :updated_at # default for ordering
51
+ end
52
+
53
+ def self.search_index model, params
54
+ @search = model.search do
55
+ fulltext params[:query] do
56
+ fields(:title, :excerpt, :text, :keywords, :tags, :url, :template)
57
+ end
58
+ facet :state, :template, :tag_list
59
+ # ensure pages indexed in the wrong bucket don't get displayed
60
+ with(:class_name, model.to_s)
61
+ with(:state, params[:s]) unless params[:s].blank?
62
+ with(:template, params[:t]) unless params[:t].blank?
63
+ with(:tag_list).all_of(params[:tg]) unless params[:tg].blank?
64
+ order_by (params[:o] || :updated_at), (params[:dir] || :desc)
65
+ paginate(page: params[:page], per_page: (params[:per] || 25))
66
+ instance_eval &model.extra_search_params if model.respond_to? :extra_search_params
67
+ end.results
68
+ end
69
+
70
+ end
71
+
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,24 @@
1
+ require 'active_support/concern'
2
+
3
+ module Georgia
4
+ module Indexer
5
+ class TireAdapter
6
+ module ActsAsTaggableOnTagExtension
7
+
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+
12
+ include ::Tire::Model::Search
13
+ include ::Tire::Model::Callbacks
14
+
15
+ def to_indexed_json
16
+ {name: name}.to_json
17
+ end
18
+
19
+ end
20
+
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,41 @@
1
+ require 'active_support/concern'
2
+
3
+ module Georgia
4
+ module Indexer
5
+ class TireAdapter
6
+ module CkeditorAssetExtension
7
+
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+
12
+ include ::Tire::Model::Search
13
+ include ::Tire::Model::Callbacks
14
+
15
+ mapping do
16
+ indexes :id, :index => :not_analyzed
17
+ indexes :filename
18
+ indexes :tags
19
+ indexes :extension
20
+ indexes :updated_at, :type => 'date'
21
+ end
22
+
23
+ def self.search model, params
24
+ model.tire.search(page: (params[:page] || 1), per_page: (params[:per] || 8)) do
25
+ if params[:query].present?
26
+ query do
27
+ boolean do
28
+ must { string params[:query], default_operator: "AND" }
29
+ end
30
+ end
31
+ sort { by (params[:o] || :updated_at), (params[:dir] || :desc) }
32
+ end
33
+ end.results
34
+ end
35
+
36
+ end
37
+
38
+ end
39
+ end
40
+ end
41
+ end