georgia 0.7.1 → 0.7.2

Sign up to get free protection for your applications and to get access to all the features.
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