forge-cli 0.0.18 → 0.1.0
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.
- checksums.yaml +7 -0
- data/README.md +106 -0
- data/bin/cucumber +16 -0
- data/bin/erubis +16 -0
- data/bin/htmldiff +16 -0
- data/bin/ldiff +16 -0
- data/bin/rackup +16 -0
- data/bin/rake +16 -0
- data/bin/rdoc +16 -0
- data/bin/ri +16 -0
- data/bin/sprockets +16 -0
- data/bin/thor +16 -0
- data/bin/tilt +16 -0
- data/bin/tt +16 -0
- data/lib/forge-cli.rb +1 -0
- data/lib/forge-cli/application_creator.rb +25 -6
- data/lib/forge-cli/controller_module_includer.rb +43 -0
- data/lib/forge-cli/module_installer.rb +18 -13
- data/lib/forge-cli/modules/banners/routes.rb +1 -1
- data/lib/forge-cli/modules/base/forge_routes.rb +4 -4
- data/lib/forge-cli/modules/base/manifest.yml +9 -4
- data/lib/forge-cli/modules/base/post_hooks.rb +9 -2
- data/lib/forge-cli/modules/base/routes.rb +4 -4
- data/lib/forge-cli/modules/dispatches/forge_routes.rb +2 -2
- data/lib/forge-cli/modules/dispatches/manifest.yml +2 -1
- data/lib/forge-cli/modules/ecommerce/manifest.yml +5 -1
- data/lib/forge-cli/modules/ecommerce/post_hooks.rb +13 -21
- data/lib/forge-cli/modules/events/routes.rb +1 -1
- data/lib/forge-cli/modules/posts/manifest.yml +4 -1
- data/lib/forge-cli/modules/posts/post_hooks.rb +9 -17
- data/lib/forge-cli/modules/posts/routes.rb +1 -1
- data/lib/forge-cli/modules/videos/routes.rb +1 -1
- data/lib/forge-cli/version.rb +2 -2
- data/lib/forge/Gemfile +3 -9
- data/lib/forge/Gemfile.lock +214 -210
- data/lib/forge/app/controllers/forge/help_topics_controller.rb +2 -2
- data/lib/forge/app/controllers/forge/posts_controller.rb +1 -0
- data/lib/forge/app/controllers/forge/products_controller.rb +0 -4
- data/lib/forge/app/controllers/forge/users_controller.rb +0 -1
- data/lib/forge/app/controllers/forge_controller.rb +7 -6
- data/lib/forge/app/controllers/posts_controller.rb +0 -2
- data/lib/forge/app/controllers/sessions_controller.rb +2 -3
- data/lib/forge/app/helpers/forge_helper.rb +2 -2
- data/lib/forge/app/models/address.rb +3 -0
- data/lib/forge/app/models/asset.rb +9 -10
- data/lib/forge/app/models/banner.rb +3 -1
- data/lib/forge/app/models/comment.rb +17 -2
- data/lib/forge/app/models/comment_subscriber.rb +3 -0
- data/lib/forge/app/models/contact.rb +3 -0
- data/lib/forge/app/models/country.rb +5 -2
- data/lib/forge/app/models/dispatch.rb +5 -2
- data/lib/forge/app/models/dispatch_bounce.rb +3 -0
- data/lib/forge/app/models/dispatch_link.rb +4 -1
- data/lib/forge/app/models/dispatch_link_click.rb +4 -0
- data/lib/forge/app/models/dispatch_open.rb +5 -1
- data/lib/forge/app/models/dispatch_unsubscribe.rb +4 -0
- data/lib/forge/app/models/event.rb +3 -1
- data/lib/forge/app/models/gallery.rb +4 -1
- data/lib/forge/app/models/help_topic.rb +4 -1
- data/lib/forge/app/models/line_item.rb +2 -2
- data/lib/forge/app/models/order.rb +1 -1
- data/lib/forge/app/models/order_transaction.rb +3 -0
- data/lib/forge/app/models/page.rb +5 -5
- data/lib/forge/app/models/photo.rb +5 -1
- data/lib/forge/app/models/post.rb +3 -1
- data/lib/forge/app/models/post_category.rb +4 -0
- data/lib/forge/app/models/product.rb +4 -2
- data/lib/forge/app/models/product_category.rb +4 -1
- data/lib/forge/app/models/product_image.rb +4 -0
- data/lib/forge/app/models/province.rb +4 -1
- data/lib/forge/app/models/queued_dispatch.rb +7 -4
- data/lib/forge/app/models/role.rb +3 -0
- data/lib/forge/app/models/sale.rb +2 -0
- data/lib/forge/app/models/subscriber.rb +4 -0
- data/lib/forge/app/models/subscriber_group.rb +4 -0
- data/lib/forge/app/models/subscriber_group_member.rb +4 -0
- data/lib/forge/app/models/tax_rate.rb +5 -2
- data/lib/forge/app/models/user.rb +1 -2
- data/lib/forge/app/models/video.rb +2 -0
- data/lib/forge/app/models/video_feed.rb +2 -2
- data/lib/forge/app/views/forge/assets/_asset.html.haml +1 -1
- data/lib/forge/app/views/forge/posts/_post.html.haml +5 -2
- data/lib/forge/app/views/forge/settings/_ecommerce.html.haml +4 -0
- data/lib/forge/app/views/forge/subscribers/_subscriber.html.haml +2 -2
- data/lib/forge/app/views/user_mailer/approved.html.haml +1 -1
- data/lib/forge/config/application.rb +3 -9
- data/lib/forge/config/database.yml.template +30 -0
- data/lib/forge/config/environments/development.rb +3 -7
- data/lib/forge/config/environments/production.rb +6 -0
- data/lib/forge/config/environments/test.rb +5 -3
- data/lib/forge/config/initializers/ckeditor.rb +15 -143
- data/lib/forge/config/initializers/devise.rb +12 -2
- data/lib/forge/config/initializers/ecommerce.rb +1 -1
- data/lib/forge/config/initializers/secret_token.rb +1 -10
- data/lib/forge/config/routes.rb +7 -11
- data/lib/forge/config/settings.yml +82 -5
- data/lib/forge/config/sitemap.yml +3 -1
- data/lib/forge/db/migrate/20130405172031_create_products_tax_rates.rb +15 -0
- data/lib/forge/db/migrate/{20130405172040_create_subscribers copy.rb → 20130405172040_create_subscribers.rb} +0 -0
- data/lib/forge/db/seeds.rb +304 -298
- data/lib/forge/doc/update_to_rails4_notes.md +15 -0
- data/lib/forge/lib/assets/javascripts/forge/features/help.js.erb +5 -4
- data/lib/forge/lib/assets/javascripts/forge/forge_manifest.js.erb +2 -2
- data/lib/forge/lib/assets/stylesheets/forge/forge.ui.css.scss +4 -3
- data/lib/forge/lib/forge/can_use_asset.rb +5 -7
- data/lib/forge/lib/forge/config/ecommerce.rb +3 -3
- data/lib/forge/lib/forge/shared_controller_methods/ecommerce.rb +3 -3
- data/lib/forge/lib/generators/forge/scaffold/USAGE +1 -1
- data/lib/forge/lib/tasks/forge.rake +5 -10
- data/lib/forge/public/500.html +1 -0
- data/lib/forge/public/javascripts/ckeditor/config.js +0 -1
- metadata +39 -39
- data/README.rdoc +0 -4
- data/lib/forge/app/models/comment_observer.rb +0 -9
- data/lib/forge/app/sweepers/page_sweeper.rb +0 -11
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
class Product < ActiveRecord::Base
|
|
2
2
|
# Scopes and Inclusions
|
|
3
3
|
include Forge::Reorderable
|
|
4
|
-
default_scope
|
|
5
|
-
scope :published,
|
|
4
|
+
default_scope { order('products.list_order ASC') }
|
|
5
|
+
scope :published, -> { where(published: true) }
|
|
6
6
|
|
|
7
7
|
# Relationships
|
|
8
8
|
has_many :images, :class_name => "ProductImage"
|
|
@@ -17,6 +17,8 @@ class Product < ActiveRecord::Base
|
|
|
17
17
|
validates_presence_of :short_description, :description, :if => :published
|
|
18
18
|
validates_numericality_of :price, :flat_rate_shipping, :weight, :width, :height, :depth, :greater_than_or_equal_to => 0.00
|
|
19
19
|
|
|
20
|
+
# open up everything for mass assignment
|
|
21
|
+
attr_protected
|
|
20
22
|
|
|
21
23
|
# for when the product is used in the cart or in an order hash
|
|
22
24
|
def quantity
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
class ProductCategory < ActiveRecord::Base
|
|
2
2
|
include Forge::Reorderable
|
|
3
|
-
default_scope
|
|
3
|
+
default_scope { order('product_categories.list_order') }
|
|
4
4
|
before_destroy :validate_destroy
|
|
5
5
|
has_many :products
|
|
6
6
|
belongs_to :sale
|
|
@@ -9,6 +9,9 @@ class ProductCategory < ActiveRecord::Base
|
|
|
9
9
|
|
|
10
10
|
validates_presence_of :title
|
|
11
11
|
|
|
12
|
+
# open up everything for mass assignment
|
|
13
|
+
attr_protected
|
|
14
|
+
|
|
12
15
|
def validate_destroy
|
|
13
16
|
products.count < 1
|
|
14
17
|
end
|
|
@@ -4,4 +4,8 @@ class ProductImage < ActiveRecord::Base
|
|
|
4
4
|
|
|
5
5
|
validates_attachment_presence :image
|
|
6
6
|
validates_attachment_content_type :image, :content_type => ['image/gif', 'image/png', 'image/jpeg', 'image/jpg', 'image/pjpeg']
|
|
7
|
+
|
|
8
|
+
# open up everything for mass assignment
|
|
9
|
+
attr_protected
|
|
10
|
+
|
|
7
11
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
class Province < ActiveRecord::Base
|
|
2
2
|
# Scopes, Attrs, Etc.
|
|
3
|
-
default_scope order("title ASC")
|
|
3
|
+
default_scope { order("title ASC") }
|
|
4
4
|
|
|
5
5
|
# Relationships
|
|
6
6
|
belongs_to :country
|
|
@@ -10,6 +10,9 @@ class Province < ActiveRecord::Base
|
|
|
10
10
|
# Validations
|
|
11
11
|
validates_presence_of :title, :code
|
|
12
12
|
validates_uniqueness_of :title, :code
|
|
13
|
+
|
|
14
|
+
# open up everything for mass assignment
|
|
15
|
+
attr_protected
|
|
13
16
|
|
|
14
17
|
def self.options_for_select(options={})
|
|
15
18
|
options[:add_blank] ||= false
|
|
@@ -4,10 +4,13 @@ class QueuedDispatch < ActiveRecord::Base
|
|
|
4
4
|
belongs_to :subscriber
|
|
5
5
|
|
|
6
6
|
# Scopes
|
|
7
|
-
scope :queued, where('sent_at IS NULL')
|
|
8
|
-
scope :sent, where("sent_at IS NOT NULL")
|
|
9
|
-
scope :failed, where("failed_attempts > ?", 0)
|
|
10
|
-
scope :opened, where("opened_at IS NOT NULL")
|
|
7
|
+
scope :queued, -> { where('sent_at IS NULL') }
|
|
8
|
+
scope :sent, -> { where("sent_at IS NOT NULL") }
|
|
9
|
+
scope :failed, -> { where("failed_attempts > ?", 0) }
|
|
10
|
+
scope :opened, -> { where("opened_at IS NOT NULL") }
|
|
11
|
+
|
|
12
|
+
# open up everything for mass assignment
|
|
13
|
+
attr_protected
|
|
11
14
|
|
|
12
15
|
# Action Methods
|
|
13
16
|
def send!
|
|
@@ -5,6 +5,8 @@ class Sale < ActiveRecord::Base
|
|
|
5
5
|
validates_presence_of :title, :description, :start, :end
|
|
6
6
|
validates_numericality_of :value
|
|
7
7
|
|
|
8
|
+
# open up everything for mass assignment
|
|
9
|
+
attr_protected
|
|
8
10
|
|
|
9
11
|
# Define the types of sale calculation
|
|
10
12
|
@@sale_types = {:fixed => "All products in this sale are set to the same price. (e.g. Sale = $5.50: Product A = $5.50, Product B = $5.50",
|
|
@@ -2,4 +2,8 @@ class Subscriber < ActiveRecord::Base
|
|
|
2
2
|
validates :email, :presence => true, :uniqueness => true
|
|
3
3
|
has_many :subscriber_group_members
|
|
4
4
|
has_many :groups, :through => :subscriber_group_members, :class_name => "SubscriberGroup"
|
|
5
|
+
|
|
6
|
+
# open up everything for mass assignment
|
|
7
|
+
attr_protected
|
|
8
|
+
|
|
5
9
|
end
|
|
@@ -3,4 +3,8 @@ class SubscriberGroup < ActiveRecord::Base
|
|
|
3
3
|
validates_uniqueness_of :title
|
|
4
4
|
has_many :subscriber_group_members, :foreign_key => :group_id
|
|
5
5
|
has_many :subscribers, :through => :subscriber_group_members
|
|
6
|
+
|
|
7
|
+
# open up everything for mass assignment
|
|
8
|
+
attr_protected
|
|
9
|
+
|
|
6
10
|
end
|
|
@@ -8,7 +8,10 @@ class TaxRate < ActiveRecord::Base
|
|
|
8
8
|
validate :unique_country_and_province
|
|
9
9
|
|
|
10
10
|
# the new ActiveAssociation stuff is teh bomb!
|
|
11
|
-
scope :by_country_and_province, joins(:country).joins("LEFT OUTER JOIN provinces ON tax_rates.province_id = provinces.id").order('countries.title, provinces.title')
|
|
11
|
+
scope :by_country_and_province, -> { joins(:country).joins("LEFT OUTER JOIN provinces ON tax_rates.province_id = provinces.id").order('countries.title, provinces.title') }
|
|
12
|
+
|
|
13
|
+
# open up everything for mass assignment
|
|
14
|
+
attr_protected
|
|
12
15
|
|
|
13
16
|
protected
|
|
14
17
|
|
|
@@ -19,7 +22,7 @@ class TaxRate < ActiveRecord::Base
|
|
|
19
22
|
tax_rates = TaxRate.where(:country_id => self.country_id, :province_id => self.province_id).all
|
|
20
23
|
end
|
|
21
24
|
if tax_rates.size > 0
|
|
22
|
-
|
|
25
|
+
errors.add :base, "A tax rate already exists for this country and province"
|
|
23
26
|
end
|
|
24
27
|
end
|
|
25
28
|
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
class User < ActiveRecord::Base
|
|
2
2
|
# Include default devise modules. Others available are:
|
|
3
3
|
# :token_authenticatable, :confirmable, :lockable and :timeoutable
|
|
4
|
-
devise :database_authenticatable, :registerable,
|
|
5
|
-
:recoverable, :rememberable, :trackable, :validatable
|
|
4
|
+
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
|
|
6
5
|
|
|
7
6
|
# Setup accessible (or protected) attributes for your model
|
|
8
7
|
attr_accessible :email, :password, :password_confirmation, :remember_me, :avatar, :avatar_asset_id, :avatar_asset_url
|
|
@@ -3,7 +3,7 @@ class VideoFeed < ActiveRecord::Base
|
|
|
3
3
|
require 'open-uri'
|
|
4
4
|
|
|
5
5
|
# Scopes, attachments, etc.
|
|
6
|
-
default_scope
|
|
6
|
+
default_scope { order("published_at DESC") }
|
|
7
7
|
|
|
8
8
|
# Validations
|
|
9
9
|
validates_presence_of :video_id, :title, :channel
|
|
@@ -83,4 +83,4 @@ class VideoFeed < ActiveRecord::Base
|
|
|
83
83
|
:source => item.link.split("://")[1].split(".com")[0]
|
|
84
84
|
)
|
|
85
85
|
end
|
|
86
|
-
end
|
|
86
|
+
end
|
|
@@ -9,4 +9,4 @@
|
|
|
9
9
|
= asset.list_title
|
|
10
10
|
.spacer
|
|
11
11
|
.float-left= link_to "Edit", edit_forge_asset_path(asset), :class => ("basic-asset-edit" unless asset.attachment_content_type.match(/video/))
|
|
12
|
-
.float-right= link_to "Delete", forge_asset_path(asset), :method => :delete, :confirm => "Are you sure?"
|
|
12
|
+
.float-right= link_to "Delete", forge_asset_path(asset), :method => :delete, :data => { :confirm => "Are you sure?" }
|
|
@@ -4,7 +4,10 @@
|
|
|
4
4
|
= "(Draft)" unless post.published?
|
|
5
5
|
|
|
6
6
|
%br/
|
|
7
|
-
|
|
7
|
+
- if post.post_categories.empty?
|
|
8
|
+
%small Uncategorized
|
|
9
|
+
- else
|
|
10
|
+
%small Posted in #{post.post_categories.map(&:title).to_sentence}
|
|
8
11
|
.item-actions
|
|
9
12
|
.item-info{:style => "width: 137px;"}
|
|
10
13
|
%strong= post.created_at.strftime('%B %e, %Y')
|
|
@@ -14,4 +17,4 @@
|
|
|
14
17
|
= edit_link(post)
|
|
15
18
|
= delete_link(post)
|
|
16
19
|
|
|
17
|
-
.spacer
|
|
20
|
+
.spacer
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
.item-title
|
|
3
3
|
%strong= link_to subscriber.name, "mailto:#{subscriber.email}"
|
|
4
4
|
.item-actions
|
|
5
|
-
.item-action.edit
|
|
5
|
+
.item-action.edit
|
|
6
6
|
= link_to image_tag('forge/icons/edit.png', :style => "vertical-align: middle;"), edit_forge_subscriber_path(subscriber)
|
|
7
7
|
%small= link_to "Edit", edit_forge_subscriber_path(subscriber)
|
|
8
8
|
.item-action.last<
|
|
9
9
|
= link_to image_tag('forge/icons/delete.png', :style => "vertical-align: middle;"), forge_subscriber_path(subscriber), :method => :delete, :confirm => "Are you sure?"
|
|
10
10
|
%small= link_to "Delete", forge_subscriber_path(subscriber), :method => :delete, :confirm => "Are you sure?"
|
|
11
11
|
|
|
12
|
-
.spacer
|
|
12
|
+
.spacer
|
|
@@ -3,10 +3,9 @@ require File.expand_path('../boot', __FILE__)
|
|
|
3
3
|
require 'rails/all'
|
|
4
4
|
|
|
5
5
|
if defined?(Bundler)
|
|
6
|
-
#
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
# Bundler.require(:default, :assets, Rails.env)
|
|
6
|
+
# Require the gems listed in Gemfile, including any gems
|
|
7
|
+
# you've limited to :test, :development, or :production.
|
|
8
|
+
Bundler.require(:default, Rails.env)
|
|
10
9
|
end
|
|
11
10
|
|
|
12
11
|
module Forge3
|
|
@@ -22,9 +21,6 @@ module Forge3
|
|
|
22
21
|
# :all can be used as a placeholder for all plugins not explicitly named.
|
|
23
22
|
# config.plugins = [ :exception_notification, :ssl_requirement, :all ]
|
|
24
23
|
|
|
25
|
-
# Activate observers that should always be running.
|
|
26
|
-
config.active_record.observers = :comment_observer
|
|
27
|
-
|
|
28
24
|
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
|
|
29
25
|
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
|
|
30
26
|
config.time_zone = 'Eastern Time (US & Canada)'
|
|
@@ -42,8 +38,6 @@ module Forge3
|
|
|
42
38
|
# Configure sensitive parameters which will be filtered from the log file.
|
|
43
39
|
config.filter_parameters << :password << :password_confirmation << :credit_card
|
|
44
40
|
|
|
45
|
-
config.action_controller.page_cache_directory = File.join(Rails.public_path, 'system', 'cache')
|
|
46
|
-
|
|
47
41
|
config.autoload_paths += [
|
|
48
42
|
File.join(Rails.root, 'lib'),
|
|
49
43
|
File.join(Rails.root, 'app', 'form_builders'),
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# SQLite version 3.x
|
|
2
|
+
# gem install sqlite3-ruby (not necessary on OS X Leopard)
|
|
3
|
+
development:
|
|
4
|
+
adapter: mysql2
|
|
5
|
+
encoding: utf8
|
|
6
|
+
database: _development
|
|
7
|
+
username:
|
|
8
|
+
password:
|
|
9
|
+
socket:
|
|
10
|
+
|
|
11
|
+
# Warning: The database defined as "test" will be erased and
|
|
12
|
+
# re-generated from your development database when you run "rake".
|
|
13
|
+
# Do not set this db to the same as development or production.
|
|
14
|
+
test:
|
|
15
|
+
adapter: mysql2
|
|
16
|
+
encoding: utf8
|
|
17
|
+
database: _test
|
|
18
|
+
username:
|
|
19
|
+
password:
|
|
20
|
+
socket:
|
|
21
|
+
|
|
22
|
+
production:
|
|
23
|
+
adapter: mysql2
|
|
24
|
+
encoding: utf8
|
|
25
|
+
reconnect: true
|
|
26
|
+
database: _production
|
|
27
|
+
pool: 5
|
|
28
|
+
username:
|
|
29
|
+
password:
|
|
30
|
+
host: 10.200.113.226
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
Forge3::Application.configure do
|
|
2
2
|
# Settings specified here will take precedence over those in config/environment.rb
|
|
3
3
|
|
|
4
|
+
# Do not eager load code on boot.
|
|
5
|
+
config.eager_load = false
|
|
6
|
+
|
|
4
7
|
# In the development environment your application's code is reloaded on
|
|
5
8
|
# every request. This slows down response time but is perfect for development
|
|
6
9
|
# since you don't have to restart the webserver when you make code changes.
|
|
7
10
|
config.cache_classes = false
|
|
8
11
|
|
|
9
|
-
# Log error messages when you accidentally call methods on nil.
|
|
10
|
-
config.whiny_nils = true
|
|
11
|
-
|
|
12
12
|
# Show full error reports and disable caching
|
|
13
13
|
config.consider_all_requests_local = true
|
|
14
14
|
config.action_controller.perform_caching = false
|
|
@@ -34,10 +34,6 @@ Forge3::Application.configure do
|
|
|
34
34
|
|
|
35
35
|
# Raise exception on mass assignment protection for Active Record models
|
|
36
36
|
config.active_record.mass_assignment_sanitizer = :strict
|
|
37
|
-
|
|
38
|
-
# Log the query plan for queries taking more than this (works
|
|
39
|
-
# with SQLite, MySQL, and PostgreSQL)
|
|
40
|
-
config.active_record.auto_explain_threshold_in_seconds = 999
|
|
41
37
|
end
|
|
42
38
|
|
|
43
39
|
ActionMailer::Base.raise_delivery_errors = true
|
|
@@ -4,6 +4,12 @@ Forge3::Application.configure do
|
|
|
4
4
|
# e-commerce sites: uncomment this line once the SSL certificate is in place
|
|
5
5
|
# config.force_ssl = true
|
|
6
6
|
|
|
7
|
+
# Eager load code on boot. This eager loads most of Rails and
|
|
8
|
+
# your application in memory, allowing both thread web servers
|
|
9
|
+
# and those relying on copy on write to perform better.
|
|
10
|
+
# Rake tasks automatically ignore this option for performance.
|
|
11
|
+
config.eager_load = true
|
|
12
|
+
|
|
7
13
|
# The production environment is meant for finished, "live" apps.
|
|
8
14
|
# Code is not reloaded between requests
|
|
9
15
|
config.cache_classes = true
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
Forge3::Application.configure do
|
|
2
2
|
# Settings specified here will take precedence over those in config/environment.rb
|
|
3
3
|
|
|
4
|
+
# Do not eager load code on boot. This avoids loading your whole application
|
|
5
|
+
# just for the purpose of running a single test. If you are using a tool that
|
|
6
|
+
# preloads Rails for running tests, you may have to set it to true.
|
|
7
|
+
config.eager_load = false
|
|
8
|
+
|
|
4
9
|
# The test environment is used exclusively to run your application's
|
|
5
10
|
# test suite. You never need to work with it otherwise. Remember that
|
|
6
11
|
# your test database is "scratch space" for the test suite and is wiped
|
|
7
12
|
# and recreated between test runs. Don't rely on the data there!
|
|
8
13
|
config.cache_classes = true
|
|
9
14
|
|
|
10
|
-
# Log error messages when you accidentally call methods on nil.
|
|
11
|
-
config.whiny_nils = true
|
|
12
|
-
|
|
13
15
|
# Show full error reports and disable caching
|
|
14
16
|
config.consider_all_requests_local = true
|
|
15
17
|
config.action_controller.perform_caching = false
|
|
@@ -1,147 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
def parameterize_filename(filename)
|
|
9
|
-
extension = File.extname(filename)
|
|
10
|
-
basename = filename.gsub(/#{extension}$/, "")
|
|
11
|
-
|
|
12
|
-
[basename.parameterize('_'), extension].join.downcase
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def js_replace(dom_id, options = {})
|
|
16
|
-
js_options = applay_options(options)
|
|
17
|
-
js = ["if (CKEDITOR.instances['#{dom_id}']) {CKEDITOR.remove(CKEDITOR.instances['#{dom_id}']);}"]
|
|
18
|
-
|
|
19
|
-
if js_options.blank?
|
|
20
|
-
js << "CKEDITOR.replace('#{dom_id}');"
|
|
21
|
-
else
|
|
22
|
-
js << "CKEDITOR.replace('#{dom_id}', { #{js_options} });"
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
js.join
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def js_fileuploader(uploader_type, options = {})
|
|
29
|
-
options = { :multiple => true, :element => "fileupload" }.merge(options)
|
|
30
|
-
|
|
31
|
-
case uploader_type.to_s.downcase
|
|
32
|
-
when "image" then
|
|
33
|
-
options[:action] = "^EDITOR.config.filebrowserImageUploadUrl"
|
|
34
|
-
options[:allowedExtensions] = Ckeditor.image_file_types
|
|
35
|
-
when "flash" then
|
|
36
|
-
options[:action] = "^EDITOR.config.filebrowserFlashUploadUrl"
|
|
37
|
-
options[:allowedExtensions] = ["swf"]
|
|
38
|
-
else
|
|
39
|
-
options[:action] = "^EDITOR.config.filebrowserUploadUrl"
|
|
40
|
-
options[:allowedExtensions] = Ckeditor.attachment_file_types
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
js_options = applay_options(options)
|
|
44
|
-
|
|
45
|
-
"$(document).ready(function(){ new qq.FileUploaderInput({ #{js_options} }); });".html_safe
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def applay_options(options)
|
|
49
|
-
str = []
|
|
50
|
-
|
|
51
|
-
options.each do |key, value|
|
|
52
|
-
item = case value
|
|
53
|
-
when String then
|
|
54
|
-
value.split(//).first == '^' ? value.slice(1..-1) : "'#{value}'"
|
|
55
|
-
when Hash then
|
|
56
|
-
"{ #{applay_options(value)} }"
|
|
57
|
-
when Array then
|
|
58
|
-
arr = value.collect { |v| "'#{v}'" }
|
|
59
|
-
"[ #{arr.join(',')} ]"
|
|
60
|
-
else value
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
str << %Q{"#{key}": #{item}}
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
str.sort.join(',')
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def filethumb(filename)
|
|
70
|
-
extname = filename.blank? ? "unknown" : File.extname(filename).gsub(/^\./, '')
|
|
71
|
-
image = "#{extname}.gif"
|
|
72
|
-
source = Ckeditor.root_path.join("vendor/assets/javascripts/ckeditor/filebrowser/images/thumbs")
|
|
73
|
-
|
|
74
|
-
unless File.exists?(File.join(source, image))
|
|
75
|
-
image = "unknown.gif"
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
File.join(Ckeditor.relative_path, "filebrowser/images/thumbs", image)
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
module Ckeditor
|
|
85
|
-
module Helpers
|
|
86
|
-
module FormBuilder
|
|
87
|
-
extend ActiveSupport::Concern
|
|
88
|
-
|
|
89
|
-
def cktext_area(method, options = {})
|
|
90
|
-
@template.send("cktext_area", @object_name, method, objectify_options(options))
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
module Ckeditor
|
|
97
|
-
module Helpers
|
|
98
|
-
module ViewHelper
|
|
99
|
-
extend ActiveSupport::Concern
|
|
100
|
-
|
|
101
|
-
def cktext_area_tag(name, content = nil, options = {})
|
|
102
|
-
element_id = sanitize_to_id(name)
|
|
103
|
-
options = { :language => I18n.locale.to_s }.merge(options)
|
|
104
|
-
input_html = { :id => element_id }.merge( options.delete(:input_html) || {} )
|
|
105
|
-
|
|
106
|
-
output_buffer = ActiveSupport::SafeBuffer.new
|
|
107
|
-
output_buffer << text_area_tag(name, content, input_html)
|
|
108
|
-
output_buffer << javascript_tag(Utils.js_replace(element_id, options))
|
|
109
|
-
|
|
110
|
-
output_buffer
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
end
|
|
114
|
-
end
|
|
1
|
+
# Use this hook to configure ckeditor
|
|
2
|
+
Ckeditor.setup do |config|
|
|
3
|
+
# ==> ORM configuration
|
|
4
|
+
# Load and configure the ORM. Supports :active_record (default), :mongo_mapper and
|
|
5
|
+
# :mongoid (bson_ext recommended) by default. Other ORMs may be
|
|
6
|
+
# available as additional gems.
|
|
7
|
+
require "ckeditor/orm/active_record"
|
|
115
8
|
|
|
9
|
+
# Allowed image file types for upload.
|
|
10
|
+
# Set to nil or [] (empty array) for all file types
|
|
11
|
+
# config.image_file_types = ["jpg", "jpeg", "png", "gif", "tiff"]
|
|
116
12
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
extend ActiveSupport::Concern
|
|
121
|
-
|
|
122
|
-
include ActionView::Helpers::TagHelper
|
|
123
|
-
include ActionView::Helpers::JavaScriptHelper
|
|
124
|
-
|
|
125
|
-
def cktext_area(object_name, method, options = {})
|
|
126
|
-
options = { :language => I18n.locale.to_s }.merge(options)
|
|
127
|
-
input_html = (options.delete(:input_html) || {})
|
|
128
|
-
hash = input_html.stringify_keys
|
|
129
|
-
|
|
130
|
-
instance_tag = ActionView::Base::InstanceTag.new(object_name, method, self, options.delete(:object))
|
|
131
|
-
instance_tag.send(:add_default_name_and_id, hash)
|
|
132
|
-
|
|
133
|
-
output_buffer = ActiveSupport::SafeBuffer.new
|
|
134
|
-
output_buffer << instance_tag.to_text_area_tag(input_html)
|
|
135
|
-
output_buffer << javascript_tag(Utils.js_replace(hash['id'], options))
|
|
136
|
-
|
|
137
|
-
output_buffer
|
|
138
|
-
end
|
|
139
|
-
end
|
|
140
|
-
end
|
|
141
|
-
end
|
|
13
|
+
# Allowed attachment file types for upload.
|
|
14
|
+
# Set to nil or [] (empty array) for all file types
|
|
15
|
+
# config.attachment_file_types = ["doc", "docx", "xls", "odt", "ods", "pdf", "rar", "zip", "tar", "swf"]
|
|
142
16
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
ActionView::Base.send :include, Ckeditor::Helpers::FormHelper
|
|
146
|
-
ActionView::Helpers::FormBuilder.send :include, Ckeditor::Helpers::FormBuilder
|
|
17
|
+
# Setup authorization to be run as a before filter
|
|
18
|
+
# config.authorize_with :cancan
|
|
147
19
|
end
|