georgia 0.7.1 → 0.7.2

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 (35) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +28 -9
  3. data/app/controllers/georgia/messages_controller.rb +2 -10
  4. data/app/controllers/georgia/pages_controller.rb +2 -15
  5. data/app/models/ckeditor/asset.rb +1 -17
  6. data/app/models/georgia/message.rb +2 -19
  7. data/app/models/georgia/page.rb +1 -1
  8. data/app/views/georgia/pages/_page.html.erb +2 -2
  9. data/config/initializers/acts_as_taggable_on.rb +5 -3
  10. data/lib/generators/georgia/install/install_generator.rb +1 -16
  11. data/lib/generators/georgia/install/templates/README +1 -3
  12. data/lib/generators/georgia/install/templates/config/initializers/georgia.rb +5 -1
  13. data/lib/georgia/engine.rb +0 -1
  14. data/lib/georgia/indexer/adapter.rb +10 -0
  15. data/lib/georgia/indexer/solr/ckeditor/asset.rb +30 -0
  16. data/lib/georgia/indexer/solr/georgia/message.rb +31 -0
  17. data/lib/georgia/indexer/solr/georgia/page.rb +71 -0
  18. data/lib/georgia/indexer/solr_adapter.rb +8 -0
  19. data/lib/georgia/indexer/tire/ckeditor/asset.rb +29 -0
  20. data/lib/georgia/indexer/tire/georgia/message.rb +41 -0
  21. data/lib/georgia/indexer/tire/georgia/page.rb +54 -0
  22. data/lib/georgia/indexer/tire_adapter.rb +20 -0
  23. data/lib/georgia/indexer.rb +26 -0
  24. data/lib/georgia/version.rb +1 -1
  25. data/lib/georgia.rb +14 -2
  26. data/lib/tasks/georgia.rake +8 -40
  27. metadata +12 -24
  28. data/app/decorators/sunspot/highlighted_hit_decorator.rb +0 -29
  29. data/app/models/georgia/concerns/indexable.rb +0 -67
  30. data/lib/generators/georgia/upgrade/templates/add_anti_spam_to_messages.rb +0 -12
  31. data/lib/generators/georgia/upgrade/templates/add_contents_counter_cache_to_images.rb +0 -15
  32. data/lib/generators/georgia/upgrade/templates/add_public_to_georgia_pages.rb +0 -8
  33. data/lib/generators/georgia/upgrade/templates/add_state_to_georgia_pages.rb +0 -13
  34. data/lib/generators/georgia/upgrade/templates/create_georgia_revisions.rb +0 -12
  35. data/lib/generators/georgia/upgrade/upgrade_generator.rb +0 -34
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: abd20d9ab3944e295ac4a7f5745aeb6bfa1a97e6
4
- data.tar.gz: 6ba851a725b0976c07f71abd9f8b8163d886eddf
3
+ metadata.gz: aca6c1088ccbab0f52eff3ed79cd151ca4820787
4
+ data.tar.gz: 5276e31dc6309e9f8f26d604bf5e37b7e825b3f7
5
5
  SHA512:
6
- metadata.gz: dbc9ddd0cc66f29d279b3fc906d627d4cfa1d8e2ec871f12ec31f407937961bc569fa0704a955aff468e681104c46108235a6ad156e6cdf5ae1f5e489f9a03ba
7
- data.tar.gz: b8fb78cfcde16ffd6b0604ea7f9fee64ee73f05ed8330f7de656cf2a31ff29ba3e72f6d93a2916af52b8b3265e376a043cc777536413b40b1d4741e61c67c9b6
6
+ metadata.gz: 9e9bdc07d844634e0a21b5130e7ae416dbb2c0fa9461267fa8f7b33b3ec8dd9afbf5cd1c7cd9068b66da56a343ab03cd82f4dbbc1c9b34fce9c270fab0ddd39f
7
+ data.tar.gz: 67f8b0f80832d20262f96b25312eb5329baf56de508b02016f4846208ea336575114d6e69f19e2b045f12855da8c4f1975882611b0a211eb7b85faa993369496
data/README.md CHANGED
@@ -1,24 +1,43 @@
1
- = Georgia
1
+ ## Georgia
2
2
 
3
3
  This project rocks and uses MIT-LICENSE.
4
4
 
5
- == Getting started
5
+ ### Getting started
6
6
 
7
7
  Make sure you have properly identify your default locale and possible available ones.
8
8
  Georgia uses available_locales to know which translations should be configured or not.
9
9
 
10
- config.i18n.default_locale = :en
11
- config.i18n.available_locales = [:en]
10
+ config.i18n.default_locale = :en
11
+ config.i18n.available_locales = [:en]
12
12
 
13
13
  Then run the generator to mount routes, run migrations & setup initial instances.
14
14
 
15
15
  rails g georgia:install
16
16
 
17
- Start your server (`rails server`) and go to (http://localhost:3000/admin)[http://localhost:3000/admin] to get started.
17
+ Start your server (`rails server`) and go to [http://localhost:3000/admin](http://localhost:3000/admin) to get started.
18
18
 
19
- == Testing
19
+ #### Heroku
20
20
 
21
- === Run rspec
21
+ You will need certain addons to make it work. I suggest going with this list matching Georgia's default tools:
22
22
 
23
- cd spec/dummy
24
- rspec spec
23
+ heroku addons:add bonsai
24
+ heroku addons:add sendgrid
25
+
26
+ Add `config/initializers/bonsai.rb` with:
27
+
28
+ ENV['ELASTICSEARCH_URL'] = ENV['BONSAI_URL']
29
+
30
+ Finally, create your indices with these commands:
31
+
32
+ heroku run rake environment tire:import CLASS=Georgia::Page FORCE=true
33
+ heroku run rake environment tire:import CLASS=Georgia::Message FORCE=true
34
+ heroku run rake environment tire:import CLASS=Ckeditor::Asset FORCE=true
35
+
36
+ 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
37
+
38
+ ### Testing
39
+
40
+ #### Run rspec
41
+
42
+ cd spec/dummy
43
+ rspec spec
@@ -58,16 +58,8 @@ module Georgia
58
58
  private
59
59
 
60
60
  def prepare_search
61
- @search = Georgia::Message.search do
62
- fulltext params[:query] do
63
- fields(:name, :email, :message, :subject, :phone)
64
- end
65
- facet :spam
66
- with(:spam, (params[:s] || 'clean'))
67
- order_by (params[:o] || :created_at), (params[:dir] || :desc)
68
- paginate(page: params[:page], per_page: (params[:per] || 25))
69
- end
70
- @messages = Georgia::MessageDecorator.decorate_collection(@search.results)
61
+ @results = Georgia::Indexer.adapter.search(Georgia::Message, params)
62
+ @messages = Georgia::MessageDecorator.decorate_collection(@results)
71
63
  end
72
64
 
73
65
  end
@@ -149,21 +149,8 @@ module Georgia
149
149
 
150
150
  def search
151
151
  session[:search_params] = params
152
- @search = model.search do
153
- fulltext params[:query] do
154
- fields(:title, :excerpt, :text, :keywords, :tags, :url, :template)
155
- end
156
- facet :state, :template, :tag_list
157
- # ensure pages indexed in the wrong bucket don't get displayed
158
- with(:class_name, model.to_s)
159
- with(:state, params[:s]) unless params[:s].blank?
160
- with(:template, params[:t]) unless params[:t].blank?
161
- with(:tag_list).all_of(params[:tg]) unless params[:tg].blank?
162
- order_by (params[:o] || :updated_at), (params[:dir] || :desc)
163
- paginate(page: params[:page], per_page: (params[:per] || 25))
164
- instance_eval &model.extra_search_params if model.respond_to? :extra_search_params
165
- end
166
- @pages = Georgia::PageDecorator.decorate_collection(@search.results)
152
+ @results = Georgia::Indexer.adapter.search(model, params)
153
+ @pages = Georgia::PageDecorator.decorate_collection(@results)
167
154
  end
168
155
 
169
156
  private
@@ -5,6 +5,7 @@ class Ckeditor::Asset < ActiveRecord::Base
5
5
 
6
6
  include Ckeditor::Orm::ActiveRecord::AssetBase
7
7
  include Georgia::Concerns::Taggable
8
+ include Georgia::Indexer
8
9
 
9
10
  delegate :url, :current_path, :content_type, to: :data
10
11
 
@@ -31,23 +32,6 @@ class Ckeditor::Asset < ActiveRecord::Base
31
32
  @extension ||= data_content_type.gsub(/.*\/(.*)/, '\1')
32
33
  end
33
34
 
34
- searchable do
35
- text :filename, stored: true
36
- text :tags do
37
- tag_list.join(', ')
38
- end
39
- string :tags, stored: true, multiple: true do
40
- tag_list
41
- end
42
- string :extension, stored: true do
43
- extension.try(:downcase)
44
- end
45
- time :updated_at
46
- integer :size, stored: true do
47
- size / 1024 # gives size in KB
48
- end
49
- end
50
-
51
35
  SIZE_RANGE = {
52
36
  '< 25 KB' => 0..25,
53
37
  '25 KB to 100 KB' => 25..100,
@@ -1,6 +1,8 @@
1
1
  module Georgia
2
2
  class Message < ActiveRecord::Base
3
3
 
4
+ include Georgia::Indexer
5
+
4
6
  attr_accessible :name, :email, :subject, :message, :attachment, :phone
5
7
  delegate :url, :current_path, :size, :content_type, :filename, to: :attachment
6
8
 
@@ -20,25 +22,6 @@ module Georgia
20
22
  scope :ham, where(spam: false)
21
23
  scope :latest, order("created_at DESC")
22
24
 
23
- # Search
24
- searchable do
25
- text :name
26
- text :email
27
- text :message
28
- text :subject
29
- text :phone
30
- string :spam do
31
- status
32
- end
33
- # For sorting:
34
- string :name
35
- string :email
36
- string :phone
37
- string :subject
38
- string :message
39
- time :created_at
40
- end
41
-
42
25
  def status
43
26
  @status ||= spam ? 'spam' : 'clean'
44
27
  end
@@ -1,12 +1,12 @@
1
1
  module Georgia
2
2
  class Page < ActiveRecord::Base
3
3
 
4
+ include Georgia::Indexer
4
5
  include Georgia::Concerns::Taggable
5
6
  include Georgia::Concerns::Orderable
6
7
  include Georgia::Concerns::Slugable
7
8
  include Georgia::Concerns::Revisionable
8
9
  include Georgia::Concerns::Publishable
9
- include Georgia::Concerns::Indexable
10
10
  include Georgia::Concerns::Treeable
11
11
  include Georgia::Concerns::Cacheable
12
12
 
@@ -4,7 +4,7 @@
4
4
  </td>
5
5
  <td>
6
6
  <%= icon_tag 'pencil hide pull-right muted' %>
7
- <%= link_to page.title, [:edit, page, page.current_revision], class: 'page-title js-toggle-icon' %>
7
+ <%= link_to page.title, edit_page_revision_path(page_id: page.id, id: page.revision_id), class: 'page-title js-toggle-icon' %>
8
8
  </td>
9
9
  <td>
10
10
  <%= facet_list_tag(page.tag_list, :tg) %>
@@ -14,6 +14,6 @@
14
14
  <%= facet_tag(page.template, :t) %>
15
15
  </td>
16
16
  <td class='timestamp'>
17
- <em><%= page.updated_at.strftime('%F') %></em>
17
+ <em><%= page.updated_at %></em>
18
18
  </td>
19
19
  </tr>
@@ -12,8 +12,10 @@ ActsAsTaggableOn.remove_unused_tags = true
12
12
  # If you would like tags to be case-sensitive and not use LIKE queries for creation:
13
13
  # ActsAsTaggableOn.strict_case_match = true
14
14
 
15
- ActsAsTaggableOn::Tag.class_eval do
16
- searchable do
17
- text :name
15
+ if defined?(Sunspot)
16
+ ActsAsTaggableOn::Tag.class_eval do
17
+ searchable do
18
+ text :name
19
+ end
18
20
  end
19
21
  end
@@ -35,27 +35,12 @@ module Georgia
35
35
 
36
36
  def create_admin_user
37
37
  say("You're almost done. You need an admin user to get started.", :yellow)
38
- first_name = ask("First name:")
39
- last_name = ask("Last name:")
40
- email = ask("Email:")
41
- password = ask("Password:")
42
- Georgia::User.create(first_name: first_name, last_name: last_name, email: email, password: password, password_confirmation: password) do |user|
43
- user.roles << Georgia::Role.all
44
- end
38
+ rake "georgia:seed"
45
39
  end
46
40
 
47
41
  def copy_templates
48
42
  template "config/initializers/georgia.rb"
49
43
  template "app/controllers/pages_controller.rb"
50
- template 'Procfile'
51
- end
52
-
53
- def add_dev_gems
54
- gem_group :development do
55
- gem "foreman"
56
- gem "sunspot_solr", '2.0.0'
57
- end
58
- run "bundle"
59
44
  end
60
45
 
61
46
  def show_readme
@@ -7,8 +7,6 @@ Some setup you must do manually if you haven't yet:
7
7
 
8
8
  2. Ensure your routes we've just added are in order.
9
9
 
10
- 3. Run foreman to start solr whenever you start your rails server.
11
-
12
- bundle exec foreman start
10
+ 3. Ensure you chose one of the 2 indexers currently available (solr or elasticsearch).
13
11
 
14
12
  ===============================================================================
@@ -11,5 +11,9 @@ Georgia.setup do |config|
11
11
 
12
12
  # Georgia Headers
13
13
  # Add to this list or simply change order
14
- # config.header = %w(dashboard pages messages media navigation widgets)
14
+ # config.navigation = %w(dashboard pages messages media navigation widgets)
15
+
16
+ # Indexer
17
+ # Choices are :solr or :tire
18
+ # config.indexer = :tire
15
19
  end
@@ -18,7 +18,6 @@ module Georgia
18
18
  require 'draper'
19
19
  require 'ancestry'
20
20
  require 'cloudfiles'
21
- require 'sunspot_rails'
22
21
  require 'state_machine'
23
22
  require 'sendgrid'
24
23
  require 'routing_concerns'
@@ -0,0 +1,10 @@
1
+ module Georgia::Indexer
2
+ class Adapter
3
+
4
+ # Delegate search to the model
5
+ def search model, params
6
+ model.search model, params
7
+ end
8
+
9
+ end
10
+ end
@@ -0,0 +1,30 @@
1
+ module Georgia
2
+ module Indexer
3
+ module Solr
4
+ module Ckeditor
5
+ module Asset
6
+ def self.extended(base)
7
+ base.class_eval do
8
+ searchable do
9
+ text :filename, stored: true
10
+ text :tags do
11
+ tag_list.join(', ')
12
+ end
13
+ string :tags, stored: true, multiple: true do
14
+ tag_list
15
+ end
16
+ string :extension, stored: true do
17
+ extension.try(:downcase)
18
+ end
19
+ time :updated_at
20
+ integer :size, stored: true do
21
+ size / 1024 # gives size in KB
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,31 @@
1
+ module Georgia
2
+ module Indexer
3
+ module Solr
4
+ module Georgia
5
+ module Message
6
+ def self.extended(base)
7
+ base.class_eval do
8
+ searchable do
9
+ text :name
10
+ text :email
11
+ text :message
12
+ text :subject
13
+ text :phone
14
+ string :spam do
15
+ status
16
+ end
17
+ # For sorting:
18
+ string :name
19
+ string :email
20
+ string :phone
21
+ string :subject
22
+ string :message
23
+ time :created_at
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,71 @@
1
+ module Georgia
2
+ module Indexer
3
+ module Solr
4
+ module Georgia
5
+ module Page
6
+ def self.extended(base)
7
+ base.class_eval do
8
+ searchable do
9
+ text :title, stored: true do
10
+ revisions.map{|r| r.contents.map(&:title)}.flatten.uniq.join(', ')
11
+ end
12
+ text :excerpt, stored: true do
13
+ revisions.map{|r| r.contents.map(&:excerpt)}.flatten.uniq.join(', ')
14
+ end
15
+ text :text do
16
+ revisions.map{|r| r.contents.map(&:text)}.flatten.uniq.join(', ')
17
+ end
18
+ text :keywords do
19
+ revisions.map{|r| r.contents.map(&:keyword_list)}.flatten.uniq.join(', ')
20
+ end
21
+ text :template do
22
+ revisions.map(&:template).uniq.join(', ')
23
+ end
24
+ text :tags do
25
+ tag_list.join(', ')
26
+ end
27
+ text :url
28
+ string :class_name do
29
+ self.class.name
30
+ end
31
+ string :title
32
+ string :excerpt
33
+ string :text
34
+ string :url
35
+ string :template
36
+ string :state do
37
+ publish_state
38
+ end
39
+ string :keywords, stored: true, multiple: true do
40
+ revisions.map{|r| r.contents.map(&:keyword_list)}.flatten.uniq
41
+ end
42
+ string :tag_list, stored: true, multiple: true #Facets (multiple)
43
+ string :tags do #Ordering (single list)
44
+ tag_list.join(', ')
45
+ end
46
+ time :updated_at # default for ordering
47
+ end
48
+
49
+ def self.search_index model, params
50
+ @search = model.search do
51
+ fulltext params[:query] do
52
+ fields(:title, :excerpt, :text, :keywords, :tags, :url, :template)
53
+ end
54
+ facet :state, :template, :tag_list
55
+ # ensure pages indexed in the wrong bucket don't get displayed
56
+ with(:class_name, model.to_s)
57
+ with(:state, params[:s]) unless params[:s].blank?
58
+ with(:template, params[:t]) unless params[:t].blank?
59
+ with(:tag_list).all_of(params[:tg]) unless params[:tg].blank?
60
+ order_by (params[:o] || :updated_at), (params[:dir] || :desc)
61
+ paginate(page: params[:page], per_page: (params[:per] || 25))
62
+ instance_eval &model.extra_search_params if model.respond_to? :extra_search_params
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,8 @@
1
+ require 'georgia/indexer/solr/georgia/page'
2
+ require 'georgia/indexer/solr/georgia/message'
3
+ require 'georgia/indexer/solr/ckeditor/asset'
4
+
5
+ module Georgia::Indexer
6
+ class SolrAdapter < Adapter
7
+ end
8
+ end
@@ -0,0 +1,29 @@
1
+ module Georgia
2
+ module Indexer
3
+ module Tire
4
+ module Ckeditor
5
+ module Asset
6
+ def self.extended(base)
7
+ base.class_eval do
8
+
9
+ include ::Tire::Model::Search
10
+ include ::Tire::Model::Callbacks
11
+
12
+ mapping do
13
+ indexes :id, :index => :not_analyzed
14
+ indexes :filename
15
+ indexes :tags
16
+ indexes :extension
17
+ indexes :updated_at, :type => 'date'
18
+ end
19
+
20
+ def self.search_index model, params
21
+ model.search(params[:query], page: (params[:page] || 1))
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,41 @@
1
+ module Georgia
2
+ module Indexer
3
+ module Tire
4
+ module Georgia
5
+ module Message
6
+ def self.extended(base)
7
+ base.class_eval do
8
+ include ::Tire::Model::Search
9
+ include ::Tire::Model::Callbacks
10
+
11
+ def to_indexed_json
12
+ {
13
+ name: name,
14
+ email: email,
15
+ message: message,
16
+ subject: subject,
17
+ phone: phone,
18
+ spam: spam,
19
+ updated_at: updated_at.strftime('%F')
20
+ }.to_json
21
+ end
22
+
23
+ def self.search model, params
24
+ model.tire.search(page: (params[:page] || 1), per_page: (params[:per] || 25)) 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
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,54 @@
1
+ module Georgia
2
+ module Indexer
3
+ module Tire
4
+ module Georgia
5
+ module Page
6
+ def self.extended(base)
7
+ base.class_eval do
8
+ include ::Tire::Model::Search
9
+ include ::Tire::Model::Callbacks
10
+
11
+ def to_indexed_json
12
+ title = revisions.map{|r| r.contents.map(&:title)}.flatten.uniq.join(', ')
13
+ text = revisions.map{|r| r.contents.map(&:text)}.flatten.uniq.join(', ')
14
+ excerpt = revisions.map{|r| r.contents.map(&:excerpt)}.flatten.uniq.join(', ')
15
+ keywords = revisions.map{|r| r.contents.map(&:keyword_list)}.flatten.uniq.join(', ')
16
+ template = revisions.map(&:template).uniq.join(', ')
17
+ tags = tag_list.join(', ')
18
+ class_name = self.class.name
19
+
20
+ {
21
+ title: title,
22
+ text: text,
23
+ excerpt: excerpt,
24
+ keywords: keywords,
25
+ url: url,
26
+ template: template,
27
+ tags: tags,
28
+ tag_list: tag_list,
29
+ publish_state: publish_state,
30
+ class_name: class_name,
31
+ updated_at: updated_at.strftime('%F'),
32
+ revision_id: revision_id
33
+ }.to_json
34
+ end
35
+
36
+ def self.search model, params
37
+ model.tire.search(page: (params[:page] || 1), per_page: (params[:per] || 25)) do
38
+ if params[:query].present?
39
+ query do
40
+ boolean do
41
+ must { string params[:query], default_operator: "AND" }
42
+ end
43
+ end
44
+ sort { by (params[:o] || :updated_at), (params[:dir] || :desc) }
45
+ end
46
+ end.results
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,20 @@
1
+ require 'georgia/indexer/tire/georgia/page'
2
+ require 'georgia/indexer/tire/georgia/message'
3
+ require 'georgia/indexer/tire/ckeditor/asset'
4
+
5
+ module Georgia::Indexer
6
+ class TireAdapter < Adapter
7
+
8
+ def initialize
9
+ extend_models
10
+ end
11
+
12
+ private
13
+
14
+ def extend_models
15
+ ::Georgia::Page.send(:extend, Georgia::Indexer::Tire::Georgia::Page)
16
+ ::Georgia::Message.send(:extend, Georgia::Indexer::Tire::Georgia::Message)
17
+ ::Ckeditor::Asset.send(:extend, Georgia::Indexer::Tire::Ckeditor::Asset)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,26 @@
1
+ require 'georgia/indexer/adapter'
2
+
3
+ module Georgia
4
+ module Indexer
5
+ autoload :SolrAdapter, 'georgia/indexer/solr_adapter'
6
+ autoload :TireAdapter, 'georgia/indexer/tire_adapter'
7
+
8
+ mattr_accessor :adapter
9
+
10
+ def self.included(base)
11
+ @@adapter ||= adapter_lookup
12
+ end
13
+
14
+ private
15
+
16
+ def self.adapter_lookup
17
+ (case Georgia.indexer
18
+ when :solr then Georgia::Indexer::SolrAdapter.new
19
+ when :tire then Georgia::Indexer::TireAdapter.new
20
+ else
21
+ Georgia::Indexer::TireAdapter.new
22
+ end)
23
+ end
24
+
25
+ end
26
+ end
@@ -1,3 +1,3 @@
1
1
  module Georgia
2
- VERSION = "0.7.1"
2
+ VERSION = "0.7.2"
3
3
  end
data/lib/georgia.rb CHANGED
@@ -2,6 +2,7 @@ require "georgia/version"
2
2
  require "georgia/paths"
3
3
  require "georgia/engine"
4
4
  require "georgia/assets"
5
+ require "georgia/indexer"
5
6
 
6
7
  module Georgia
7
8
 
@@ -14,11 +15,22 @@ module Georgia
14
15
  mattr_accessor :url
15
16
  @@url = "http://www.example.com"
16
17
 
17
- mattr_accessor :header
18
- @@header = %w(dashboard pages messages media navigation widgets)
18
+ mattr_accessor :navigation
19
+ @@navigation = %w(dashboard pages messages media navigation widgets)
20
+
21
+ mattr_accessor :indexer
22
+ @@indexer = :solr
19
23
 
20
24
  def self.setup
21
25
  yield self
22
26
  end
23
27
 
28
+ class << self
29
+ alias :header :navigation
30
+
31
+ def header= value
32
+ ActiveSupport::Deprecation.warn("config.header is deprecated, use config.navigation instead.", caller)
33
+ end
34
+ end
35
+
24
36
  end
@@ -1,46 +1,14 @@
1
1
  namespace :georgia do
2
2
 
3
- namespace :migrate do
4
-
5
- desc "Saves ancestry from legacy parent_id"
6
- task ancestry: :environment do
7
-
8
- Georgia::Page.find_each do |page|
9
- if parent = page.attributes['parent_id']
10
- begin
11
- page.parent = Georgia::Page.find(parent)
12
- page.save!
13
- rescue ActiveRecord::RecordNotFound
14
- puts 'Page not found'
15
- end
16
- end
17
- end
18
-
19
- end
20
-
21
- desc "Saves keywords to tags list"
22
- task tags: :environment do
23
-
24
- Georgia::Content.find_each do |content|
25
- content.keyword_list = content.keywords
26
- content.save
27
- end
28
-
29
- end
30
- end
31
-
32
- desc "Purge assets that don't have an existing file in the cloud"
33
- task purge: :environment do
34
- count = 0
35
- Ckeditor::Asset.find_each do |asset|
36
- begin
37
- if !asset.data.file.exists?
38
- asset.destroy
39
- count += 1
40
- end
41
- end
3
+ desc "Creates an Admin user to get started"
4
+ task seed: :environment do
5
+ first_name = ask("First name:")
6
+ last_name = ask("Last name:")
7
+ email = ask("Email:")
8
+ password = ask("Password:")
9
+ Georgia::User.create(first_name: first_name, last_name: last_name, email: email, password: password, password_confirmation: password) do |user|
10
+ user.roles << Georgia::Role.all
42
11
  end
43
- puts "#{count} assets purged."
44
12
  end
45
13
 
46
14
  namespace :messages do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: georgia
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mathieu Gagné
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-20 00:00:00.000000000 Z
11
+ date: 2014-01-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -374,20 +374,6 @@ dependencies:
374
374
  - - '>='
375
375
  - !ruby/object:Gem::Version
376
376
  version: '0'
377
- - !ruby/object:Gem::Dependency
378
- name: sunspot_rails
379
- requirement: !ruby/object:Gem::Requirement
380
- requirements:
381
- - - '='
382
- - !ruby/object:Gem::Version
383
- version: 2.0.0
384
- type: :runtime
385
- prerelease: false
386
- version_requirements: !ruby/object:Gem::Requirement
387
- requirements:
388
- - - '='
389
- - !ruby/object:Gem::Version
390
- version: 2.0.0
391
377
  - !ruby/object:Gem::Dependency
392
378
  name: state_machine
393
379
  requirement: !ruby/object:Gem::Requirement
@@ -592,7 +578,6 @@ files:
592
578
  - app/assets/stylesheets/georgia/vendor/_tooltip.scss
593
579
  - app/assets/stylesheets/georgia/overrides/_select2.scss
594
580
  - app/assets/stylesheets/georgia/application.css.scss
595
- - app/decorators/sunspot/highlighted_hit_decorator.rb
596
581
  - app/decorators/pagination_decorator.rb
597
582
  - app/decorators/georgia/link_decorator.rb
598
583
  - app/decorators/georgia/widget_decorator.rb
@@ -622,7 +607,6 @@ files:
622
607
  - app/models/georgia/concerns/statable.rb
623
608
  - app/models/georgia/concerns/templatable.rb
624
609
  - app/models/georgia/concerns/orderable.rb
625
- - app/models/georgia/concerns/indexable.rb
626
610
  - app/models/georgia/concerns/contentable.rb
627
611
  - app/models/georgia/concerns/taggable.rb
628
612
  - app/models/georgia/concerns/treeable.rb
@@ -805,12 +789,6 @@ files:
805
789
  - lib/tasks/georgia.rake
806
790
  - lib/tasks/upgrade.rake
807
791
  - lib/tasks/assets.rake
808
- - lib/generators/georgia/upgrade/templates/add_contents_counter_cache_to_images.rb
809
- - lib/generators/georgia/upgrade/templates/create_georgia_revisions.rb
810
- - lib/generators/georgia/upgrade/templates/add_state_to_georgia_pages.rb
811
- - lib/generators/georgia/upgrade/templates/add_public_to_georgia_pages.rb
812
- - lib/generators/georgia/upgrade/templates/add_anti_spam_to_messages.rb
813
- - lib/generators/georgia/upgrade/upgrade_generator.rb
814
792
  - lib/generators/georgia/install/templates/Procfile
815
793
  - lib/generators/georgia/install/templates/app/controllers/pages_controller.rb
816
794
  - lib/generators/georgia/install/templates/config/initializers/georgia.rb
@@ -823,7 +801,17 @@ files:
823
801
  - lib/georgia/engine.rb
824
802
  - lib/georgia/version.rb
825
803
  - lib/georgia/paths.rb
804
+ - lib/georgia/indexer.rb
826
805
  - lib/georgia/assets.rb
806
+ - lib/georgia/indexer/tire_adapter.rb
807
+ - lib/georgia/indexer/solr_adapter.rb
808
+ - lib/georgia/indexer/tire/georgia/page.rb
809
+ - lib/georgia/indexer/tire/georgia/message.rb
810
+ - lib/georgia/indexer/tire/ckeditor/asset.rb
811
+ - lib/georgia/indexer/solr/georgia/page.rb
812
+ - lib/georgia/indexer/solr/georgia/message.rb
813
+ - lib/georgia/indexer/solr/ckeditor/asset.rb
814
+ - lib/georgia/indexer/adapter.rb
827
815
  - MIT-LICENSE
828
816
  - Rakefile
829
817
  - README.md
@@ -1,29 +0,0 @@
1
- module Sunspot
2
- class HighlightedHitDecorator < ::ApplicationDecorator
3
-
4
- def method_missing(meth, *args, &block)
5
- if source.highlights(meth) and source.highlights(meth).present?
6
- highlight_text_on(meth)
7
- elsif source.stored(meth) and source.stored(meth).is_a? Array
8
- source.stored(meth).join(', ')
9
- elsif source.stored(meth) and source.stored(meth).present?
10
- source.stored(meth)
11
- elsif source.result
12
- source.result.send(meth)
13
- else
14
- super
15
- end
16
- end
17
-
18
- def source_class_name
19
- source.class_name.parameterize
20
- end
21
-
22
- private
23
-
24
- def highlight_text_on key, options={}
25
- source.highlights(key).map{|hl| hl.format{|word| h.content_tag(:span, word, class: 'highlight') } }.join().html_safe
26
- end
27
-
28
- end
29
- end
@@ -1,67 +0,0 @@
1
- require 'active_support/concern'
2
-
3
- module Georgia
4
- module Concerns
5
- module Indexable
6
- extend ActiveSupport::Concern
7
-
8
- included do
9
-
10
- class << self
11
-
12
- # Default fields to be include in searchable block
13
- # Children of Georgia::Page can use this to extend their own searchable block
14
- def indexable_fields
15
- Proc.new {
16
- text :title, stored: true do
17
- revisions.map{|r| r.contents.map(&:title)}.flatten.uniq.join(', ')
18
- end
19
- text :excerpt, stored: true do
20
- revisions.map{|r| r.contents.map(&:excerpt)}.flatten.uniq.join(', ')
21
- end
22
- text :text do
23
- revisions.map{|r| r.contents.map(&:text)}.flatten.uniq.join(', ')
24
- end
25
- text :keywords do
26
- revisions.map{|r| r.contents.map(&:keyword_list)}.flatten.uniq.join(', ')
27
- end
28
- text :template do
29
- revisions.map(&:template).uniq.join(', ')
30
- end
31
- text :tags do
32
- tag_list.join(', ')
33
- end
34
- text :url
35
- string :class_name do
36
- self.class.name
37
- end
38
- string :title
39
- string :excerpt
40
- string :text
41
- string :url
42
- string :template
43
- string :state do
44
- publish_state
45
- end
46
- string :keywords, stored: true, multiple: true do
47
- revisions.map{|r| r.contents.map(&:keyword_list)}.flatten.uniq
48
- end
49
- string :tag_list, stored: true, multiple: true #Facets (multiple)
50
- string :tags do #Ordering (single list)
51
- tag_list.join(', ')
52
- end
53
- time :updated_at # default for ordering
54
- }
55
- end
56
-
57
- end
58
-
59
- searchable do
60
- instance_eval &self.indexable_fields
61
- end
62
-
63
- end
64
-
65
- end
66
- end
67
- end
@@ -1,12 +0,0 @@
1
- class AddAntiSpamToMessages < ActiveRecord::Migration
2
-
3
- def change
4
- add_column :georgia_messages, :spam, :boolean, default: false
5
- add_column :georgia_messages, :verified_at, :datetime
6
- add_column :georgia_messages, :permalink, :string
7
- add_column :georgia_messages, :user_ip, :string
8
- add_column :georgia_messages, :user_agent, :string
9
- add_column :georgia_messages, :referrer, :string
10
- end
11
-
12
- end
@@ -1,15 +0,0 @@
1
- class AddContentsCounterCacheToImages < ActiveRecord::Migration
2
-
3
- def up
4
- add_column :ckeditor_assets, :contents_count, :integer, default: 0
5
- Ckeditor::Picture.reset_column_information
6
- Ckeditor::Picture.find_each do |u|
7
- Ckeditor::Picture.update_counters u.id, :contents_count => u.contents.length
8
- end
9
- end
10
-
11
- def down
12
- remove_column :ckeditor_assets, :contents_count
13
- end
14
-
15
- end
@@ -1,8 +0,0 @@
1
- class AddPublicToGeorgiaPages < ActiveRecord::Migration
2
-
3
- def change
4
- add_column :georgia_pages, :public, :boolean, default: false
5
- add_index :georgia_pages, :public
6
- end
7
-
8
- end
@@ -1,13 +0,0 @@
1
- class AddStateToGeorgiaPages < ActiveRecord::Migration
2
-
3
- def up
4
- add_column :georgia_pages, :state, :string
5
- add_index :georgia_pages, :state
6
- end
7
-
8
- def down
9
- remove_column :georgia_pages, :state
10
- remove_index :georgia_pages, :state
11
- end
12
-
13
- end
@@ -1,12 +0,0 @@
1
- class CreateGeorgiaRevisions < ActiveRecord::Migration
2
-
3
- def change
4
- create_table :georgia_revisions do |t|
5
- t.string :state, default: 'draft'
6
- t.string :template
7
- t.references :revisionable, polymorphic: true
8
- t.timestamps
9
- end
10
- end
11
-
12
- end
@@ -1,34 +0,0 @@
1
- # encoding: UTF-8
2
- require 'rails/generators/migration'
3
- require 'rails/generators/active_record'
4
-
5
- module Georgia
6
- module Generators
7
- class UpgradeGenerator < ::Rails::Generators::Base
8
- include Rails::Generators::Migration
9
-
10
- source_root File.expand_path('../templates', __FILE__)
11
-
12
- desc "Upgrades Georgia CMS to fit latest changes"
13
-
14
- def self.next_migration_number(number)
15
- ActiveRecord::Generators::Base.next_migration_number(number)
16
- end
17
-
18
- def run_migrations
19
- migration_template "add_public_to_georgia_pages.rb", "db/migrate/add_public_to_georgia_pages.rb"
20
- migration_template "add_state_to_georgia_pages.rb", "db/migrate/add_state_to_georgia_pages.rb"
21
- migration_template "add_anti_spam_to_messages.rb", "db/migrate/add_anti_spam_to_messages.rb"
22
- migration_template "create_georgia_revisions.rb", "db/migrate/create_georgia_revisions.rb"
23
- migration_template "add_contents_counter_cache_to_images.rb", "db/migrate/add_contents_counter_cache_to_images.rb"
24
- rake 'db:migrate'
25
- end
26
-
27
- def run_tasks
28
- rake 'georgia:statuses'
29
- rake 'georgia:revisions'
30
- end
31
-
32
- end
33
- end
34
- end