adva-core 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/app/controllers/admin/base_controller.rb +20 -0
- data/app/controllers/admin/pages_controller.rb +7 -0
- data/app/controllers/admin/sections_controller.rb +22 -0
- data/app/controllers/admin/sites_controller.rb +16 -0
- data/app/controllers/articles_controller.rb +3 -0
- data/app/controllers/base_controller.rb +18 -0
- data/app/controllers/installations_controller.rb +28 -0
- data/app/controllers/pages_controller.rb +2 -0
- data/app/controllers/sections_controller.rb +3 -0
- data/app/helpers/form_helper.rb +13 -0
- data/app/helpers/sections_helper.rb +7 -0
- data/app/helpers/url_helper.rb +18 -0
- data/app/models/account.rb +3 -0
- data/app/models/article.rb +2 -0
- data/app/models/content.rb +4 -0
- data/app/models/page.rb +9 -0
- data/app/models/section.rb +49 -0
- data/app/models/site.rb +24 -0
- data/app/views/admin/contents/_menu.html.rb +17 -0
- data/app/views/admin/pages/_menu.html.rb +10 -0
- data/app/views/admin/pages/new.html.rb +19 -0
- data/app/views/admin/pages/show.html.rb +25 -0
- data/app/views/admin/sections/_menu.html.rb +45 -0
- data/app/views/admin/sections/_section.html.rb +7 -0
- data/app/views/admin/sections/_select_type.html.rb +16 -0
- data/app/views/admin/sections/index.html.rb +28 -0
- data/app/views/admin/sites/_menu.html.rb +2 -0
- data/app/views/admin/sites/edit.html.rb +22 -0
- data/app/views/admin/sites/index.html.rb +24 -0
- data/app/views/admin/sites/new.html.rb +39 -0
- data/app/views/admin/sites/show.html.rb +7 -0
- data/app/views/installations/new.html.rb +39 -0
- data/app/views/installations/show.html.rb +9 -0
- data/app/views/layouts/admin.rb +55 -0
- data/app/views/layouts/admin/_header.rb +48 -0
- data/app/views/layouts/admin/_tabs.html.rb +18 -0
- data/app/views/layouts/admin/_top.rb +62 -0
- data/app/views/layouts/base.rb +64 -0
- data/app/views/layouts/default.rb +46 -0
- data/app/views/layouts/default/_menu.rb +19 -0
- data/app/views/layouts/simple.rb +16 -0
- data/app/views/pages/show.html.rb +7 -0
- data/config/initializers/simple_form.rb +53 -0
- data/config/locales/en.yml +129 -0
- data/config/redirects.rb +8 -0
- data/config/routes.rb +21 -0
- data/lib/adva-core.rb +1 -0
- data/lib/adva.rb +40 -0
- data/lib/adva/active_record/has_one_default.rb +40 -0
- data/lib/adva/active_record/has_options.rb +55 -0
- data/lib/adva/cli.rb +16 -0
- data/lib/adva/controller.rb +7 -0
- data/lib/adva/controller/abstract_actions.rb +92 -0
- data/lib/adva/controller/internal_redirect.rb +26 -0
- data/lib/adva/controller/references.rb +28 -0
- data/lib/adva/core.rb +94 -0
- data/lib/adva/engine.rb +44 -0
- data/lib/adva/generators.rb +8 -0
- data/lib/adva/generators/app.rb +121 -0
- data/lib/adva/generators/engine.rb +58 -0
- data/lib/adva/generators/gemfile.rb +50 -0
- data/lib/adva/generators/install.rb +31 -0
- data/lib/adva/generators/templates/app/app_template.rb +3 -0
- data/lib/adva/generators/templates/engine/Gemfile.erb +3 -0
- data/lib/adva/generators/templates/engine/all.rb +1 -0
- data/lib/adva/generators/templates/engine/en.yml.erb +2 -0
- data/lib/adva/generators/templates/engine/engine.rb.erb +11 -0
- data/lib/adva/generators/templates/engine/gemspec.erb +21 -0
- data/lib/adva/generators/templates/engine/migration.rb.erb +11 -0
- data/lib/adva/generators/templates/engine/redirects.rb.erb +3 -0
- data/lib/adva/generators/templates/engine/routes.rb.erb +3 -0
- data/lib/adva/generators/templates/engine/test_helper.rb.erb +3 -0
- data/lib/adva/rack.rb +5 -0
- data/lib/adva/rack/static.rb +50 -0
- data/lib/adva/registry.rb +62 -0
- data/lib/adva/responder.rb +21 -0
- data/lib/adva/responder/redirect.rb +31 -0
- data/lib/adva/routing_filters/section_path.rb +72 -0
- data/lib/adva/routing_filters/section_root.rb +65 -0
- data/lib/adva/tasks/core.rake +9 -0
- data/lib/adva/tasks/core.rb +160 -0
- data/lib/adva/testing.rb +58 -0
- data/lib/adva/testing/engine.rb +37 -0
- data/lib/adva/view.rb +7 -0
- data/lib/adva/view/form.rb +44 -0
- data/lib/adva/view/form/tabs.rb +46 -0
- data/lib/adva/view/helper/i18n.rb +10 -0
- data/lib/adva/view/menu.rb +73 -0
- data/lib/adva/view/menu/admin.rb +100 -0
- data/lib/adva/view/menu/items.rb +26 -0
- data/lib/adva/view/tabs.rb +28 -0
- data/lib/adva_core/version.rb +3 -0
- data/lib/core_ext/rails/action_view/has_many_through_collection_helpers.rb +27 -0
- data/lib/core_ext/rails/active_record/skip_callbacks.rb +51 -0
- data/lib/core_ext/ruby/array/flatten_once.rb +9 -0
- data/lib/core_ext/ruby/kernel/silence_stream.rb +17 -0
- data/lib/core_ext/ruby/module/include_anonymous.rb +36 -0
- data/lib/core_ext/ruby/module/option_reader.rb +9 -0
- data/lib/patches/inherited_resources.rb +35 -0
- data/lib/patches/rails/asset_expansion_multiple_registrations.rb +21 -0
- data/lib/patches/rails/integretion_runner_respond_to.rb +13 -0
- data/lib/patches/rails/polymorphic_url_for.rb +115 -0
- data/lib/patches/rails/recognize_path_env.rb +42 -0
- data/lib/patches/rails/route_set_to_param.rb +25 -0
- data/lib/patches/rails/route_set_trailing_segment.rb +13 -0
- data/lib/patches/rails/sti_associations.rb +17 -0
- data/lib/patches/rails/template_resolver_caching.rb +9 -0
- data/lib/patches/rails/translation_helper.rb +18 -0
- data/lib/patches/responders/flash_responder.rb +17 -0
- data/lib/patches/simple_form.rb +37 -0
- data/lib/patches/thor/core_ext/hash.rb +7 -0
- data/lib/patches/thor/group/symbolized_options.rb +8 -0
- data/lib/patches/webrat/links-data-method.rb +15 -0
- data/lib/patches/webrat/logger.rb +14 -0
- data/lib/patches/webrat/upload_file.rb +23 -0
- data/lib/testing/assertions.rb +19 -0
- data/lib/testing/env.rb +41 -0
- data/lib/testing/factories.rb +28 -0
- data/lib/testing/helpers/global_helpers.rb +9 -0
- data/lib/testing/paths.rb +54 -0
- data/lib/testing/step_definitions/common_steps.rb +287 -0
- data/lib/testing/step_definitions/debug_steps.rb +22 -0
- data/lib/testing/step_definitions/menu_steps.rb +11 -0
- data/lib/testing/step_definitions/routes_steps.rb +18 -0
- data/lib/testing/step_definitions/transforms.rb +50 -0
- data/lib/testing/step_definitions/webrat_steps.rb +284 -0
- data/lib/testing/step_definitions/within_steps.rb +16 -0
- data/lib/webrat/integrations/rails.rb +33 -0
- data/public/images/adva-core/admin/header_bg.png +0 -0
- data/public/images/adva-core/admin/menu_checkmark.png +0 -0
- data/public/images/adva-core/admin/section_menu_bg.png +0 -0
- data/public/images/adva-core/admin/tab_action_active.png +0 -0
- data/public/images/adva-core/admin/tab_main_active.png +0 -0
- data/public/images/adva-core/admin/tab_sidebar_active.png +0 -0
- data/public/images/adva-core/admin/tab_top_active.png +0 -0
- data/public/images/adva-core/asset_selected.png +0 -0
- data/public/images/adva-core/avatar.gif +0 -0
- data/public/images/adva-core/feed.mini.png +0 -0
- data/public/images/adva-core/filter-bg.png +0 -0
- data/public/images/adva-core/grid.png +0 -0
- data/public/images/adva-core/icons/accept.png +0 -0
- data/public/images/adva-core/icons/add.png +0 -0
- data/public/images/adva-core/icons/arrow_cross.png +0 -0
- data/public/images/adva-core/icons/arrow_cross_2.png +0 -0
- data/public/images/adva-core/icons/arrow_cross_3.png +0 -0
- data/public/images/adva-core/icons/arrow_up_down.png +0 -0
- data/public/images/adva-core/icons/assets/audio.png +0 -0
- data/public/images/adva-core/icons/assets/doc.png +0 -0
- data/public/images/adva-core/icons/assets/pdf.png +0 -0
- data/public/images/adva-core/icons/assets/video.png +0 -0
- data/public/images/adva-core/icons/attach.png +0 -0
- data/public/images/adva-core/icons/bin.png +0 -0
- data/public/images/adva-core/icons/bin_closed.png +0 -0
- data/public/images/adva-core/icons/bin_empty.png +0 -0
- data/public/images/adva-core/icons/bullet_black.png +0 -0
- data/public/images/adva-core/icons/bullet_delete.png +0 -0
- data/public/images/adva-core/icons/bullet_error.png +0 -0
- data/public/images/adva-core/icons/bullet_go.png +0 -0
- data/public/images/adva-core/icons/bullet_red.png +0 -0
- data/public/images/adva-core/icons/bullet_white.png +0 -0
- data/public/images/adva-core/icons/bullet_yellow.png +0 -0
- data/public/images/adva-core/icons/cancel.png +0 -0
- data/public/images/adva-core/icons/comment.gif +0 -0
- data/public/images/adva-core/icons/comment.png +0 -0
- data/public/images/adva-core/icons/comment_add.png +0 -0
- data/public/images/adva-core/icons/comment_blue.gif +0 -0
- data/public/images/adva-core/icons/comment_delete.png +0 -0
- data/public/images/adva-core/icons/comment_edit.png +0 -0
- data/public/images/adva-core/icons/comment_yellow.gif +0 -0
- data/public/images/adva-core/icons/cross.png +0 -0
- data/public/images/adva-core/icons/delete.png +0 -0
- data/public/images/adva-core/icons/eye.png +0 -0
- data/public/images/adva-core/icons/favorites.png +0 -0
- data/public/images/adva-core/icons/help.png +0 -0
- data/public/images/adva-core/icons/hourglass.png +0 -0
- data/public/images/adva-core/icons/icon_attachment.gif +0 -0
- data/public/images/adva-core/icons/icon_padlock.gif +0 -0
- data/public/images/adva-core/icons/link.png +0 -0
- data/public/images/adva-core/icons/lock.png +0 -0
- data/public/images/adva-core/icons/magnifier.png +0 -0
- data/public/images/adva-core/icons/minus.gif +0 -0
- data/public/images/adva-core/icons/page_add.png +0 -0
- data/public/images/adva-core/icons/page_delete.png +0 -0
- data/public/images/adva-core/icons/page_edit.png +0 -0
- data/public/images/adva-core/icons/page_favorites.png +0 -0
- data/public/images/adva-core/icons/page_go.png +0 -0
- data/public/images/adva-core/icons/page_green.png +0 -0
- data/public/images/adva-core/icons/page_red.png +0 -0
- data/public/images/adva-core/icons/page_white_add.png +0 -0
- data/public/images/adva-core/icons/page_white_delete.png +0 -0
- data/public/images/adva-core/icons/page_white_edit.png +0 -0
- data/public/images/adva-core/icons/page_white_go.png +0 -0
- data/public/images/adva-core/icons/page_white_link.png +0 -0
- data/public/images/adva-core/icons/page_white_magnify.png +0 -0
- data/public/images/adva-core/icons/pencil.png +0 -0
- data/public/images/adva-core/icons/star.png +0 -0
- data/public/images/adva-core/icons/stop.png +0 -0
- data/public/images/adva-core/icons/tag_green.png +0 -0
- data/public/images/adva-core/icons/tick.png +0 -0
- data/public/images/adva-core/icons/zoom.png +0 -0
- data/public/images/adva-core/indicator.gif +0 -0
- data/public/images/adva-core/lines.png +0 -0
- data/public/images/adva-core/preview.png +0 -0
- data/public/images/adva-core/theme_selected.png +0 -0
- data/public/javascripts/adva-core/admin.js +22 -0
- data/public/javascripts/adva-core/jquery/jquery-1.4.2.min.js +154 -0
- data/public/javascripts/adva-core/jquery/jquery.table_tree.js +296 -0
- data/public/javascripts/adva-core/jquery/jquery.tablednd_0_5.js +385 -0
- data/public/javascripts/adva-core/rails.js +127 -0
- data/public/javascripts/backup/admin/jquery.admin.js +75 -0
- data/public/javascripts/backup/admin/jquery.article.js +22 -0
- data/public/javascripts/backup/admin/jquery.cached_pages.js +14 -0
- data/public/javascripts/backup/admin/jquery.table_tree.backup.js +279 -0
- data/public/javascripts/backup/admin/jquery.table_tree.js +10 -0
- data/public/javascripts/backup/application.js +38 -0
- data/public/javascripts/backup/application.prototype.js +135 -0
- data/public/javascripts/backup/builder.js +136 -0
- data/public/javascripts/backup/controls.js +965 -0
- data/public/javascripts/backup/cookie.js +49 -0
- data/public/javascripts/backup/dragdrop.js +975 -0
- data/public/javascripts/backup/effects.js +1130 -0
- data/public/javascripts/backup/flash.js +49 -0
- data/public/javascripts/backup/jquery.dates.js +49 -0
- data/public/javascripts/backup/jquery.flash.js +40 -0
- data/public/javascripts/backup/jquery.roles.js +23 -0
- data/public/javascripts/backup/jquery/jquery-lowpro.js +224 -0
- data/public/javascripts/backup/jquery/jquery-ui.js +273 -0
- data/public/javascripts/backup/jquery/jquery.js +19 -0
- data/public/javascripts/backup/jquery/jquery.qtip.min.js +15 -0
- data/public/javascripts/backup/json.js +139 -0
- data/public/javascripts/backup/lowpro.js +320 -0
- data/public/javascripts/backup/parseuri.js +39 -0
- data/public/javascripts/backup/prototype.js +4320 -0
- data/public/javascripts/backup/roles.js +16 -0
- data/public/javascripts/backup/scriptaculous.js +60 -0
- data/public/javascripts/backup/slider.js +275 -0
- data/public/javascripts/backup/sound.js +55 -0
- data/public/javascripts/backup/unittest.js +568 -0
- data/public/stylesheets/adva-core/admin/forms.css +172 -0
- data/public/stylesheets/adva-core/admin/layout.css +38 -0
- data/public/stylesheets/adva-core/admin/lists.css +54 -0
- data/public/stylesheets/adva-core/admin/navigation.css +234 -0
- data/public/stylesheets/adva-core/admin/sidebar.css +87 -0
- data/public/stylesheets/adva-core/admin/styles.css +130 -0
- data/public/stylesheets/adva-core/common/forms.css +174 -0
- data/public/stylesheets/adva-core/common/layout.css +93 -0
- data/public/stylesheets/adva-core/common/reset.css +42 -0
- data/public/stylesheets/adva-core/common/styles.css +41 -0
- data/public/stylesheets/adva-core/default/layout.css +0 -0
- data/public/stylesheets/adva-core/default/styles.css +0 -0
- data/public/stylesheets/adva-core/simple/layout.css +11 -0
- data/public/stylesheets/backup/alternate/common.css +76 -0
- data/public/stylesheets/backup/alternate/forms.css +121 -0
- data/public/stylesheets/backup/alternate/header.css +125 -0
- data/public/stylesheets/backup/alternate/layout.css +103 -0
- data/public/stylesheets/backup/alternate/lists.css +153 -0
- data/public/stylesheets/backup/alternate/sidebar.css +65 -0
- data/public/stylesheets/backup/alternate/top.css +123 -0
- data/public/stylesheets/backup/content.css +11 -0
- data/public/stylesheets/backup/helptip.css +35 -0
- data/public/stylesheets/backup/jquery/alternate/jquery.tooltip.css +13 -0
- data/public/stylesheets/backup/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/public/stylesheets/backup/jquery/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/public/stylesheets/backup/jquery/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/public/stylesheets/backup/jquery/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/public/stylesheets/backup/jquery/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/public/stylesheets/backup/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/public/stylesheets/backup/jquery/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/public/stylesheets/backup/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/public/stylesheets/backup/jquery/images/ui-icons_222222_256x240.png +0 -0
- data/public/stylesheets/backup/jquery/images/ui-icons_2e83ff_256x240.png +0 -0
- data/public/stylesheets/backup/jquery/images/ui-icons_454545_256x240.png +0 -0
- data/public/stylesheets/backup/jquery/images/ui-icons_888888_256x240.png +0 -0
- data/public/stylesheets/backup/jquery/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/public/stylesheets/backup/jquery/jquery-ui.css +405 -0
- data/public/stylesheets/backup/jquery/jquery.tooltip.css +10 -0
- data/public/stylesheets/backup/layout.css +22 -0
- data/public/stylesheets/backup/lists.css +17 -0
- data/public/stylesheets/backup/menu.css +129 -0
- data/public/stylesheets/backup/projection.css +118 -0
- data/public/stylesheets/backup/screen/top.css +8 -0
- data/public/stylesheets/backup/themes.css +49 -0
- data/public/stylesheets/backup/users.css +40 -0
- metadata +338 -40
- data/lib/bundler/repository.rb +0 -118
@@ -0,0 +1,19 @@
|
|
1
|
+
class Layouts::Default::Menu < Adva::View::Menu
|
2
|
+
include do
|
3
|
+
def build
|
4
|
+
ul(:id => :menu) do
|
5
|
+
site.sections.each do |section|
|
6
|
+
item(section.name, url_for(section))
|
7
|
+
end
|
8
|
+
render_items
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
protected
|
13
|
+
|
14
|
+
def active?(url, options)
|
15
|
+
return false if url =~ %r(/admin/sites(/\d+)?$) && request.fullpath != url
|
16
|
+
super
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'simple_form'
|
2
|
+
# Use this setup block to configure all options available in SimpleForm.
|
3
|
+
SimpleForm.setup do |config|
|
4
|
+
|
5
|
+
# Components used by the form builder to generate a complete input. You can remove
|
6
|
+
# any of them, change the order, or even add your own components to the stack.
|
7
|
+
# config.components = [ :label_input, :hint, :error ]
|
8
|
+
|
9
|
+
# Default tag used on hints.
|
10
|
+
# config.hint_tag = :span
|
11
|
+
|
12
|
+
# Default tag used on errors.
|
13
|
+
# config.error_tag = :span
|
14
|
+
|
15
|
+
# Method used to tidy up errors.
|
16
|
+
# config.error_method = :first
|
17
|
+
|
18
|
+
# Default tag used for error notification helper.
|
19
|
+
# config.error_notification_tag = :p
|
20
|
+
|
21
|
+
# You can wrap all inputs in a pre-defined tag.
|
22
|
+
# config.wrapper_tag = :div
|
23
|
+
|
24
|
+
# CSS class to add to all wrapper tags.
|
25
|
+
# config.wrapper_class = :input
|
26
|
+
|
27
|
+
# CSS class to add to the wrapper if the field has errors.
|
28
|
+
# config.wrapper_error_class = :field_with_errors
|
29
|
+
|
30
|
+
# How the label text should be generated altogether with the required text.
|
31
|
+
config.label_text = lambda { |label, required| "#{label}#{required}" }
|
32
|
+
|
33
|
+
# Whether attributes are required by default (or not). Default is true.
|
34
|
+
# config.required_by_default = true
|
35
|
+
|
36
|
+
# Series of attemps to detect a default label method for collection.
|
37
|
+
# config.collection_label_methods = [ :to_label, :name, :title, :to_s ]
|
38
|
+
|
39
|
+
# Series of attemps to detect a default value method for collection.
|
40
|
+
# config.collection_value_methods = [ :id, :to_s ]
|
41
|
+
|
42
|
+
# Collection of methods to detect if a file type was given.
|
43
|
+
# config.file_methods = [ :file?, :public_filename ]
|
44
|
+
|
45
|
+
# Default priority for time_zone inputs.
|
46
|
+
# config.time_zone_priority = nil
|
47
|
+
|
48
|
+
# Default priority for country inputs.
|
49
|
+
# config.country_priority = nil
|
50
|
+
|
51
|
+
# Default size for text inputs.
|
52
|
+
# config.default_input_size = 50
|
53
|
+
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
en:
|
2
|
+
a_or_b: '%{a} or %{b}'
|
3
|
+
|
4
|
+
flash:
|
5
|
+
create:
|
6
|
+
notice: '%{resource_name} successfully created.'
|
7
|
+
alert: '%{resource_name} could not be created.'
|
8
|
+
update:
|
9
|
+
notice: '%{resource_name} successfully updated.'
|
10
|
+
alert: '%{resource_name} could not be updated.'
|
11
|
+
destroy:
|
12
|
+
notice: '%{resource_name} successfully deleted.'
|
13
|
+
alert: '%{resource_name} could not be deleted.'
|
14
|
+
installation:
|
15
|
+
protected: "Installation for %{host} is already complete. Please log in with your admin account."
|
16
|
+
|
17
|
+
confirmations:
|
18
|
+
destroy: 'Do you really want to delete this %{model_name}?'
|
19
|
+
|
20
|
+
menu:
|
21
|
+
sections: Sections
|
22
|
+
page: Page
|
23
|
+
view: View
|
24
|
+
new: New
|
25
|
+
edit: Edit
|
26
|
+
edit_section: Settings
|
27
|
+
destroy: Delete
|
28
|
+
reorder: Reorder
|
29
|
+
confirm_destroy: "Do you really want to delete this %{model_name}?"
|
30
|
+
|
31
|
+
columns:
|
32
|
+
published: Published
|
33
|
+
author: Author
|
34
|
+
|
35
|
+
status:
|
36
|
+
published: Published
|
37
|
+
|
38
|
+
actions:
|
39
|
+
view: View
|
40
|
+
edit: Edit
|
41
|
+
destroy: Delete
|
42
|
+
|
43
|
+
section:
|
44
|
+
types:
|
45
|
+
page: Page
|
46
|
+
default_name: Home
|
47
|
+
|
48
|
+
installations:
|
49
|
+
new:
|
50
|
+
title: adva-cms installation
|
51
|
+
welcome: |
|
52
|
+
Welcome to the adva-cms less-than-one-minute installation process:
|
53
|
+
Just fill in a name for your site below and you're done.
|
54
|
+
Don't worry. You can always change everything later.
|
55
|
+
section_name: Section Name
|
56
|
+
show:
|
57
|
+
title: Success!
|
58
|
+
confirm: You have successfully created your site. Enjoy!
|
59
|
+
link_to_admin: "Manage your new site »"
|
60
|
+
|
61
|
+
admin:
|
62
|
+
sites:
|
63
|
+
index:
|
64
|
+
title: Sites
|
65
|
+
new:
|
66
|
+
title: Create a New Site
|
67
|
+
section_name: Section Name
|
68
|
+
edit:
|
69
|
+
title: Site Settings
|
70
|
+
show:
|
71
|
+
section:
|
72
|
+
new: New Section
|
73
|
+
site:
|
74
|
+
new: New Site
|
75
|
+
sections:
|
76
|
+
index:
|
77
|
+
title: Sections
|
78
|
+
published: Published
|
79
|
+
new:
|
80
|
+
title: Create a New Section
|
81
|
+
pages:
|
82
|
+
show:
|
83
|
+
title: Edit Page
|
84
|
+
new:
|
85
|
+
title: Create a New Section
|
86
|
+
tabs:
|
87
|
+
options: Options
|
88
|
+
assets: Assets
|
89
|
+
|
90
|
+
layouts:
|
91
|
+
default:
|
92
|
+
made_with: "Made with <a href=\"http://github.com/svenfuchs/adva-cms2\">adva cms 2</a>"
|
93
|
+
admin:
|
94
|
+
top:
|
95
|
+
sites: Sites
|
96
|
+
new_site: New Site
|
97
|
+
site: Overview
|
98
|
+
sections: Sections
|
99
|
+
new_section: New Section
|
100
|
+
settings: Settings
|
101
|
+
assets: Assets
|
102
|
+
header:
|
103
|
+
sign_in: "Sign in"
|
104
|
+
sign_out: "Sign out %{user}"
|
105
|
+
change_language: "Change language:"
|
106
|
+
website: "Website »"
|
107
|
+
|
108
|
+
simple_form:
|
109
|
+
"yes": 'Yes'
|
110
|
+
"no": 'No'
|
111
|
+
required:
|
112
|
+
text: required
|
113
|
+
mark: '*'
|
114
|
+
# You can uncomment the line below if you need to overwrite the whole required html.
|
115
|
+
# When using html, text and mark won't be used.
|
116
|
+
# html: '<abbr title="required">*</abbr>'
|
117
|
+
error_notification:
|
118
|
+
default_message: "Some errors were found, please take a look:"
|
119
|
+
# Labels and hints examples
|
120
|
+
# labels:
|
121
|
+
# password: 'Password'
|
122
|
+
# user:
|
123
|
+
# new:
|
124
|
+
# email: 'E-mail para efetuar o sign in.'
|
125
|
+
# edit:
|
126
|
+
# email: 'E-mail.'
|
127
|
+
# hints:
|
128
|
+
# username: 'User name to sign in.'
|
129
|
+
# password: 'No special characters, please.'
|
data/config/redirects.rb
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
Adva::Registry.set :redirect, {
|
2
|
+
'installations#create' => lambda { |c| c.installation_url(c.resource) },
|
3
|
+
'articles#show' => lambda { |c| c.show_parent_url },
|
4
|
+
|
5
|
+
'admin/sites#update' => lambda { |c| c.edit_url },
|
6
|
+
'admin/pages#update' => lambda { |c| c.show_url },
|
7
|
+
'admin/pages#destroy' => lambda { |c| c.index_url }
|
8
|
+
}
|
data/config/routes.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'routing_filter'
|
2
|
+
require 'adva/routing_filters/section_root'
|
3
|
+
require 'adva/routing_filters/section_path'
|
4
|
+
|
5
|
+
Rails.application.routes.draw do
|
6
|
+
filter :section_path, :section_root
|
7
|
+
|
8
|
+
namespace :admin do
|
9
|
+
resources :sites do
|
10
|
+
resources :sections, :only => [:index, :new, :create]
|
11
|
+
resources :pages
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
match 'pages/:id', :to => 'pages#show', :as => :page
|
16
|
+
match 'pages/:page_id/article', :to => 'articles#show', :as => :page_article
|
17
|
+
|
18
|
+
resources :installations, :only => [:new, :create, :show]
|
19
|
+
|
20
|
+
root :to => redirect('/installations/new') # should only match if no root section is present
|
21
|
+
end
|
data/lib/adva-core.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'adva/core'
|
data/lib/adva.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'rails/engine'
|
2
|
+
|
3
|
+
module Adva
|
4
|
+
autoload :Engine, 'adva/engine'
|
5
|
+
autoload :Generators, 'adva/generators'
|
6
|
+
autoload :Rack, 'adva/rack'
|
7
|
+
autoload :Registry, 'adva/registry'
|
8
|
+
autoload :Responder, 'adva/responder'
|
9
|
+
autoload :Tasks, 'adva/tasks/core'
|
10
|
+
autoload :Testing, 'adva/testing'
|
11
|
+
autoload :View, 'adva/view'
|
12
|
+
|
13
|
+
mattr_accessor :out
|
14
|
+
self.out = $stdout
|
15
|
+
|
16
|
+
class << self
|
17
|
+
def engines
|
18
|
+
@engines ||= constants.map do |name|
|
19
|
+
constant = const_get(name)
|
20
|
+
constant if constant != Adva::Core && constant.is_a?(Class) && constant < ::Rails::Engine
|
21
|
+
end.compact.sort { |lft, rgt| lft.name <=> rgt.name }.unshift(Adva::Core)
|
22
|
+
end
|
23
|
+
|
24
|
+
def engine(name)
|
25
|
+
name = "Adva::#{name.camelize}" unless name.to_s.starts_with?('Adva::')
|
26
|
+
engines.detect { |engine| engine.name == name }
|
27
|
+
end
|
28
|
+
|
29
|
+
def engine_names
|
30
|
+
@engine_names ||= engines.map { |constant| constant.name.split('::').last.underscore.to_sym }
|
31
|
+
end
|
32
|
+
|
33
|
+
def engine?(name)
|
34
|
+
engine_names.include?(name)
|
35
|
+
end
|
36
|
+
alias :installed? :engine?
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# Extends has_one associations to allow for a :default option.
|
2
|
+
#
|
3
|
+
# This will make the page.article association always build a default article
|
4
|
+
# unless an article is already set or persisted.
|
5
|
+
#
|
6
|
+
# class Page < ActiveRecord::Base
|
7
|
+
# has_one :article, :default => :build_default_article
|
8
|
+
#
|
9
|
+
# def build_default_article
|
10
|
+
# build_article(:title => 'default title', :body => 'default body')
|
11
|
+
# end
|
12
|
+
# end
|
13
|
+
#
|
14
|
+
# Note that we also include a default scope that includes the associated record
|
15
|
+
# to avoid n+1 queries.
|
16
|
+
|
17
|
+
module ActiveRecord
|
18
|
+
module Associations
|
19
|
+
module HasOneDefault
|
20
|
+
def has_one(association_id, options = {})
|
21
|
+
default = options.delete(:default)
|
22
|
+
super
|
23
|
+
has_one_default(association_id, default) if default
|
24
|
+
end
|
25
|
+
|
26
|
+
def has_one_default(association_id, default)
|
27
|
+
default_scope includes(association_id) rescue nil # would raise during migrations. how to remove the rescue clause?
|
28
|
+
validates_presence_of association_id
|
29
|
+
|
30
|
+
define_method(:"#{association_id}_with_default") do
|
31
|
+
send(:"#{association_id}_without_default") || send(:"#{association_id}=", send(default))
|
32
|
+
end
|
33
|
+
alias_method_chain association_id, :default
|
34
|
+
end
|
35
|
+
|
36
|
+
ActiveRecord::Base.extend(self)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module HasOptions
|
2
|
+
def has_option(*names)
|
3
|
+
unless respond_to?(:option_definitions)
|
4
|
+
include InstanceMethods
|
5
|
+
class_inheritable_accessor :option_definitions
|
6
|
+
self.option_definitions = {}
|
7
|
+
serialize :options
|
8
|
+
end
|
9
|
+
|
10
|
+
definition = names.extract_options!
|
11
|
+
names.map(&:to_sym).each do |name|
|
12
|
+
self.option_definitions[name] = definition
|
13
|
+
|
14
|
+
class_eval <<-rb, __FILE__, __LINE__
|
15
|
+
def #{name}
|
16
|
+
self.options ||= {}
|
17
|
+
options.key?(:#{name}) ? options[:#{name}] : option_default(:#{name})
|
18
|
+
end
|
19
|
+
# alias #{name}_before_type_cast #{name}
|
20
|
+
|
21
|
+
def #{name}=(value)
|
22
|
+
options_will_change!
|
23
|
+
self.options ||= {}
|
24
|
+
options[:#{name}] = option_type_cast(:#{name}, value)
|
25
|
+
end
|
26
|
+
rb
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
module InstanceMethods
|
31
|
+
OPTION_DEFAULTS = { :default => nil, :type => :string }
|
32
|
+
|
33
|
+
[:type, :default].each do |reader|
|
34
|
+
define_method(:"option_#{reader}") do |name|
|
35
|
+
self.class.option_definitions[name].key?(reader) ? self.class.option_definitions[name][reader] : OPTION_DEFAULTS[reader]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
define_method :option_type_cast do |name, value|
|
40
|
+
return nil if value.nil?
|
41
|
+
case option_type(name)
|
42
|
+
when :string then value.to_s
|
43
|
+
when :integer then value.to_i rescue value ? 1 : 0
|
44
|
+
when :float then value.to_f
|
45
|
+
when :datetime then ActiveRecord::ConnectionAdapters::Column.string_to_time(value)
|
46
|
+
when :time then ActiveRecord::ConnectionAdapters::Column.string_to_dummy_time(value)
|
47
|
+
when :date then ActiveRecord::ConnectionAdapters::Column.string_to_date(value)
|
48
|
+
when :boolean then ActiveRecord::ConnectionAdapters::Column.value_to_boolean(value)
|
49
|
+
else value
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
ActiveRecord::Base.extend(HasOptions)
|
data/lib/adva/cli.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# TODO [cli] needs to use the local Gemfile if we're in an app
|
2
|
+
ENV['BUNDLE_GEMFILE'] = File.expand_path('../../../../Gemfile', __FILE__)
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'bundler/setup'
|
6
|
+
Bundler.require(:default)
|
7
|
+
|
8
|
+
Adva.engines.each { |engine| engine.new.load_tasks }
|
9
|
+
|
10
|
+
if task = Thor::Util.find_by_namespace("adva:#{ARGV.first}")
|
11
|
+
ARGV.shift
|
12
|
+
else
|
13
|
+
task = Thor::Util.find_by_namespace("adva:app")
|
14
|
+
end
|
15
|
+
|
16
|
+
task.start
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'action_controller'
|
2
|
+
|
3
|
+
# abstract_actions makes a base controller transparently use a concrete controller
|
4
|
+
# for certain actions. E.g. with an sti base model like Section and concrete model
|
5
|
+
# like Page if the route points to the SectionsController it still will use a
|
6
|
+
# PagesController if the current resource is a Page.
|
7
|
+
|
8
|
+
module Adva
|
9
|
+
module Controller
|
10
|
+
module AbstractActions
|
11
|
+
module ActMacro
|
12
|
+
def abstract_actions(options = {})
|
13
|
+
unless abstract_actions?
|
14
|
+
include InternalRedirect
|
15
|
+
include InstanceMethods
|
16
|
+
|
17
|
+
class_inheritable_accessor :abstract_action_options
|
18
|
+
self.abstract_action_options = options.reverse_merge(:except => [])
|
19
|
+
|
20
|
+
before_filter :internal_redirect
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def abstract_actions?
|
25
|
+
included_modules.include?(InstanceMethods)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
module InstanceMethods
|
30
|
+
def internal_redirect
|
31
|
+
if redirect_to_concretion?
|
32
|
+
internal_redirect_to_concretion
|
33
|
+
elsif redirect_to_abstraction?
|
34
|
+
internal_redirect_to_abstraction
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
protected
|
39
|
+
|
40
|
+
def redirect_to_abstraction?
|
41
|
+
concrete_controller? && !concrete_action?
|
42
|
+
end
|
43
|
+
|
44
|
+
def redirect_to_concretion?
|
45
|
+
!concrete_controller? && concrete_action?
|
46
|
+
end
|
47
|
+
|
48
|
+
def internal_redirect_to_abstraction
|
49
|
+
merge_params(abstract_instance_name, instance_name)
|
50
|
+
internal_redirect_to("#{abstract_controller_class.controller_path}##{params[:action]}")
|
51
|
+
end
|
52
|
+
|
53
|
+
def internal_redirect_to_concretion
|
54
|
+
merge_params(instance_name, abstract_instance_name)
|
55
|
+
internal_redirect_to("#{controller_namespace}/#{collection_name}##{params[:action]}")
|
56
|
+
end
|
57
|
+
|
58
|
+
def merge_params(to, from)
|
59
|
+
params[to] ||= {}
|
60
|
+
params[to].merge!(params.delete(from) || {})
|
61
|
+
end
|
62
|
+
|
63
|
+
def concrete_controller?
|
64
|
+
!self.instance_of?(abstract_controller_class)
|
65
|
+
end
|
66
|
+
|
67
|
+
def concrete_action?
|
68
|
+
!Array(abstract_action_options[:except]).include?(params[:action].to_sym)
|
69
|
+
end
|
70
|
+
|
71
|
+
def abstract_controller_class
|
72
|
+
@abstract_controller_class ||= begin
|
73
|
+
abstract = self.class
|
74
|
+
abstract = abstract.superclass until abstract.superclass.controller_name == 'base'
|
75
|
+
abstract
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def abstract_instance_name
|
80
|
+
@abstract_instance_name ||= abstract_controller_class.controller_name.singularize
|
81
|
+
end
|
82
|
+
|
83
|
+
def controller_namespace
|
84
|
+
@controller_namespace ||= controller_path.split('/')[0..-2].join('/')
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
ActionController::Base.extend(ActMacro)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|