aura 0.0.1.pre10
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.
- data/.gitignore +6 -0
- data/.travis.yml +3 -0
- data/Gemfile +2 -0
- data/HISTORY.md +95 -0
- data/README.md +53 -0
- data/Rakefile +27 -0
- data/Scribefile +8 -0
- data/app/css/_utilities.scss +88 -0
- data/app/css/admin.scss +21 -0
- data/app/css/admin/_settings.scss +136 -0
- data/app/css/admin/chrome.scss +208 -0
- data/app/css/admin/common.scss +78 -0
- data/app/css/admin/forms.scss +342 -0
- data/app/css/admin/jquery_wysiwyg.scss +96 -0
- data/app/css/admin/loading.scss +18 -0
- data/app/css/admin/meta.scss +42 -0
- data/app/css/admin/reset.scss +46 -0
- data/app/css/admin/sections.scss +79 -0
- data/app/css/admin/setup.scss +22 -0
- data/app/css/admin/sidebar.scss +136 -0
- data/app/css/admin/slug.scss +78 -0
- data/app/css/admin/uiscreen.scss +22 -0
- data/app/css/admin/wysiwyg_field.scss +11 -0
- data/app/css/admin_watermark.scss +23 -0
- data/app/css/default_home_page.scss +13 -0
- data/app/css/login.scss +47 -0
- data/app/helpers/admin_helpers.rb +59 -0
- data/app/helpers/flash_helpers.rb +86 -0
- data/app/helpers/form_builder_helpers.rb +9 -0
- data/app/helpers/html_helpers.rb +27 -0
- data/app/helpers/jquery_helpers.rb +26 -0
- data/app/helpers/main_helpers.rb +67 -0
- data/app/helpers/page_helpers.rb +92 -0
- data/app/helpers/template_helpers.rb +94 -0
- data/app/helpers/user_helpers.rb +45 -0
- data/app/init/admin.rb +34 -0
- data/app/init/extensions.rb +18 -0
- data/app/init/pistol.rb +11 -0
- data/app/init/sequel.rb +11 -0
- data/app/main.rb +106 -0
- data/app/migrations/page.rb +29 -0
- data/app/migrations/settings.rb +11 -0
- data/app/migrations/user.rb +13 -0
- data/app/models/page.rb +116 -0
- data/app/models/page_seed.rb +47 -0
- data/app/models/settings.rb +59 -0
- data/app/models/user.rb +60 -0
- data/app/routes/admin.rb +44 -0
- data/app/routes/css_js.rb +53 -0
- data/app/routes/design_tests.rb +15 -0
- data/app/routes/editor.rb +152 -0
- data/app/routes/site.rb +33 -0
- data/app/routes/user.rb +48 -0
- data/app/views/admin/_back_to_dashboard.haml +3 -0
- data/app/views/admin/dashboard.haml +46 -0
- data/app/views/admin/layout.haml +73 -0
- data/app/views/admin/settings.haml +40 -0
- data/app/views/admin/settings/database.haml +42 -0
- data/app/views/base/crumbs.haml +50 -0
- data/app/views/base/delete.haml +19 -0
- data/app/views/base/edit.haml +61 -0
- data/app/views/base/errors.haml +10 -0
- data/app/views/base/form.haml +11 -0
- data/app/views/base/list.haml +14 -0
- data/app/views/base/list_actions.haml +4 -0
- data/app/views/base/list_item.haml +7 -0
- data/app/views/base/nav.haml +36 -0
- data/app/views/base/new.haml +36 -0
- data/app/views/base/preview.haml +28 -0
- data/app/views/base/tabs.haml +12 -0
- data/app/views/default_home_page.haml +15 -0
- data/app/views/design_tests/admin_styles.haml +58 -0
- data/app/views/form_builder/builder.haml +29 -0
- data/app/views/page/edit.haml +29 -0
- data/app/views/page/form.haml +22 -0
- data/app/views/page/meta_form.haml +22 -0
- data/app/views/page/new.haml +26 -0
- data/app/views/user/edit.haml +52 -0
- data/app/views/user/form.haml +43 -0
- data/app/views/user/list.haml +11 -0
- data/app/views/user/login.haml +33 -0
- data/app/views/user/new.haml +25 -0
- data/app/views/user/welcome.haml +29 -0
- data/app/views/watermark/watermark.haml +16 -0
- data/aura.gemspec +36 -0
- data/bin/aura +8 -0
- data/config/database.rb +12 -0
- data/config/extensions.rb +5 -0
- data/config/scss.rb +14 -0
- data/config/user.rb +10 -0
- data/default/.gitignore +6 -0
- data/default/Gemfile +11 -0
- data/default/README.md +24 -0
- data/default/Rakefile +8 -0
- data/default/app/README +3 -0
- data/default/app/css/.gitignore +0 -0
- data/default/app/helpers/helpers.rb.example +9 -0
- data/default/app/js/.gitignore +0 -0
- data/default/app/migrations/model.rb.example +20 -0
- data/default/app/models/model.rb.example +11 -0
- data/default/app/models/page-ext.rb.example +17 -0
- data/default/app/routes/site.rb.example +5 -0
- data/default/app/views/hello.haml.example +1 -0
- data/default/config.ru +3 -0
- data/default/config/.gitignore +0 -0
- data/default/config/database.rb.example +30 -0
- data/default/config/extensions.rb +5 -0
- data/default/config/user.rb.example +10 -0
- data/default/db/.gitignore +0 -0
- data/default/init.rb +15 -0
- data/default/public/.gitignore +0 -0
- data/extensions/contact_form/migrations/contact_form.rb +13 -0
- data/extensions/contact_form/models/contact_form.rb +13 -0
- data/extensions/contact_form/routes/contact_form.rb +11 -0
- data/extensions/contact_form/views/contact_form/edit.haml +8 -0
- data/extensions/contact_form/views/contact_form/form.haml +3 -0
- data/extensions/contact_form/views/contact_form/nav.haml +42 -0
- data/extensions/contact_form/views/contact_form/responses.haml +20 -0
- data/extensions/contact_form/views/contact_form/tabs.haml +8 -0
- data/extensions/default_theme/css/theme/_settings.scss +3 -0
- data/extensions/default_theme/css/theme/chrome.scss +66 -0
- data/extensions/default_theme/css/theme/reset.scss +34 -0
- data/extensions/default_theme/css/theme/style.scss +3 -0
- data/extensions/default_theme/info.yml +2 -0
- data/extensions/default_theme/public/browse.png +0 -0
- data/extensions/default_theme/views/base/id_portfolio.haml +32 -0
- data/extensions/default_theme/views/base/show.haml +31 -0
- data/extensions/default_theme/views/errors/error.haml +9 -0
- data/extensions/default_theme/views/errors/not_found.haml +11 -0
- data/extensions/default_theme/views/layout.haml +33 -0
- data/lib/aura.rb +315 -0
- data/lib/aura/admin.rb +41 -0
- data/lib/aura/app.rb +4 -0
- data/lib/aura/cli.rb +19 -0
- data/lib/aura/cli/base.rb +89 -0
- data/lib/aura/cli/helpers.rb +32 -0
- data/lib/aura/editor.rb +30 -0
- data/lib/aura/extension.rb +189 -0
- data/lib/aura/files.rb +38 -0
- data/lib/aura/menu.rb +142 -0
- data/lib/aura/models.rb +80 -0
- data/lib/aura/public.rb +68 -0
- data/lib/aura/rendering.rb +134 -0
- data/lib/aura/seeder.rb +38 -0
- data/lib/aura/slugs.rb +87 -0
- data/lib/aura/subtype.rb +48 -0
- data/lib/aura/tasks.rb +24 -0
- data/lib/aura/tasks/common.rb +17 -0
- data/lib/aura/tasks/db.rake +54 -0
- data/lib/aura/utils.rb +81 -0
- data/lib/aura/version.rb +25 -0
- data/lib/core/hasharray.rb +65 -0
- data/lib/core/object_ext.rb +9 -0
- data/lib/sequel/plugins/aura_custom.rb +16 -0
- data/lib/sequel/plugins/aura_editable.rb +39 -0
- data/lib/sequel/plugins/aura_hierarchy.rb +82 -0
- data/lib/sequel/plugins/aura_model.rb +271 -0
- data/lib/sequel/plugins/aura_renderable.rb +42 -0
- data/lib/sequel/plugins/aura_sluggable.rb +103 -0
- data/lib/sequel/plugins/aura_subtyped.rb +83 -0
- data/lib/terra.rb +185 -0
- data/lib/terra/ext.rb +16 -0
- data/lib/terra/field.rb +98 -0
- data/lib/terra/fields.rb +122 -0
- data/lib/terra/fieldset.rb +93 -0
- data/lib/terra/form.rb +111 -0
- data/manual/configuration.md +42 -0
- data/manual/extensions.md +45 -0
- data/manual/files.md +70 -0
- data/manual/helpers.md +39 -0
- data/manual/index.md +65 -0
- data/manual/models.md +58 -0
- data/manual/recipes.md +38 -0
- data/manual/recipes/bundling_sample_data.md +30 -0
- data/manual/recipes/creating_themes.md +10 -0
- data/manual/recipes/using_markdown_or_textile.md +24 -0
- data/manual/routes.md +39 -0
- data/manual/theming.md +55 -0
- data/manual/views.md +128 -0
- data/public/hi.html +0 -0
- data/public/images/admin/back.png +0 -0
- data/public/images/admin/browse.png +0 -0
- data/public/images/admin/mock-bg.png +0 -0
- data/public/images/admin/top-loader.gif +0 -0
- data/public/images/admin/uiscreen-loader.gif +0 -0
- data/public/images/admin_icons/add.png +0 -0
- data/public/images/admin_icons/contact.png +0 -0
- data/public/images/admin_icons/dashboard.png +0 -0
- data/public/images/admin_icons/generic.png +0 -0
- data/public/images/admin_icons/home-12.png +0 -0
- data/public/images/admin_icons/page.png +0 -0
- data/public/images/admin_icons/settings.png +0 -0
- data/public/images/jquery.wysiwyg.gif +0 -0
- data/public/js/admin.form_builder.js +15 -0
- data/public/js/admin.js +62 -0
- data/public/js/admin.layout.js +53 -0
- data/public/js/admin.nav.js +241 -0
- data/public/js/admin.slug.js +46 -0
- data/public/js/admin.subpage.js +15 -0
- data/public/js/jquery.hashlisten.js +85 -0
- data/public/js/jquery.js +166 -0
- data/public/js/jquery.livenavigate.js +58 -0
- data/public/js/jquery.livequery.js +226 -0
- data/public/js/jquery.quickvalidate.js +164 -0
- data/public/js/jquery.tmpl.js +486 -0
- data/public/js/jquery.uiscreen.js +150 -0
- data/public/js/jquery.wysiwyg.js +2339 -0
- data/public/js/jqueryui.js +766 -0
- data/public/js/lib.dirty.js +11 -0
- data/public/js/lib.loading.js +23 -0
- data/public/js/lib.wysiwyg.js +155 -0
- data/public/js/underscore-1.1.7.js +27 -0
- data/test/app/app/css/test_raw.css +1 -0
- data/test/app/app/css/test_sass.sass +3 -0
- data/test/app/app/damogram.txt +1 -0
- data/test/app/app/js/test_coffee.coffee +4 -0
- data/test/app/app/js/test_javascript.js +4 -0
- data/test/app/init.rb +5 -0
- data/test/stories/admin_css_story.rb +18 -0
- data/test/stories/css_js_story.rb +29 -0
- data/test/stories/first_login_story.rb +29 -0
- data/test/stories/visit_story.rb +39 -0
- data/test/stories_helper.rb +58 -0
- data/test/test_cli_helper.rb +31 -0
- data/test/test_helper.rb +111 -0
- data/test/test_temp_helper.rb +9 -0
- data/test/unit/cli_test.rb +38 -0
- data/test/unit/dump_test.rb +14 -0
- data/test/unit/extensions_test.rb +18 -0
- data/test/unit/files_test.rb +14 -0
- data/test/unit/flash_helper_test.rb +36 -0
- data/test/unit/html_helper_test.rb +29 -0
- data/test/unit/jquery_helper_test.rb +18 -0
- data/test/unit/model_test.rb +34 -0
- data/test/unit/page_helpers_test.rb +36 -0
- data/test/unit/seeder_test.rb +15 -0
- data/test/unit/settings_test.rb +29 -0
- data/test/unit/slug_test.rb +39 -0
- data/test/unit/ss_migration_test.rb +14 -0
- data/test/unit/terra_test.rb +125 -0
- data/test/unit/utils_test.rb +11 -0
- data/vendor/sinatra-sequel/.gitignore +3 -0
- data/vendor/sinatra-sequel/COPYING +18 -0
- data/vendor/sinatra-sequel/README.md +84 -0
- data/vendor/sinatra-sequel/Rakefile +67 -0
- data/vendor/sinatra-sequel/lib/sinatra/sequel.rb +73 -0
- data/vendor/sinatra-sequel/sinatra-sequel.gemspec +39 -0
- data/vendor/sinatra-sequel/spec/spec_sinatra_sequel.rb +70 -0
- metadata +536 -0
data/lib/aura/menu.rb
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
class Aura
|
|
2
|
+
# Class: Menu (Aura)
|
|
3
|
+
# A menu.
|
|
4
|
+
#
|
|
5
|
+
# #### Accessing the singleton
|
|
6
|
+
# Doing Aura.admin.menu will get you the single instance of Aura::Menu.
|
|
7
|
+
#
|
|
8
|
+
# m = Aura.admin.menu #=> #<Aura::Menu ...>
|
|
9
|
+
#
|
|
10
|
+
# #### Adding menu items
|
|
11
|
+
# Use {Aura::Menu#add}.
|
|
12
|
+
#
|
|
13
|
+
# Aura.admin.menu.add "hello",
|
|
14
|
+
# :name => "Hello",
|
|
15
|
+
# :href => '/admin/lol',
|
|
16
|
+
# :icon => 'settings'
|
|
17
|
+
#
|
|
18
|
+
# #### Adding submenu items
|
|
19
|
+
# Add sub items by using the dot notation on the name.
|
|
20
|
+
#
|
|
21
|
+
# Aura.admin.menu.add "hello.subitem",
|
|
22
|
+
# :name => "Subitem",
|
|
23
|
+
# :href => '/admin/lol/sub',
|
|
24
|
+
# :icon => 'settings'
|
|
25
|
+
#
|
|
26
|
+
# #### Retrieving menu items
|
|
27
|
+
# Use {Aura::Menu.items}.
|
|
28
|
+
#
|
|
29
|
+
# Aura.admin.menu.items #=> Array of MenuItems
|
|
30
|
+
#
|
|
31
|
+
# item = Aura.admin.menu.get('hello')
|
|
32
|
+
# item.name
|
|
33
|
+
# item.href
|
|
34
|
+
# item.icon
|
|
35
|
+
# item.items # List of sub items
|
|
36
|
+
#
|
|
37
|
+
class Menu
|
|
38
|
+
# Method: add (Aura::Menu)
|
|
39
|
+
# Adds a menu item.
|
|
40
|
+
#
|
|
41
|
+
# ## Usage
|
|
42
|
+
# Aura.admin.menu.add 'key',
|
|
43
|
+
# :name => 'name',
|
|
44
|
+
# :href => '/url',
|
|
45
|
+
# :icon => 'icon_name' # <= optional
|
|
46
|
+
#
|
|
47
|
+
def add(key, options={})
|
|
48
|
+
path = key.to_s.split('.')
|
|
49
|
+
last = path.pop
|
|
50
|
+
node = root
|
|
51
|
+
|
|
52
|
+
path.each do |segment|
|
|
53
|
+
node = (node.raw_items[segment] ||= MenuItem.new)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
node.raw_items[last] = MenuItem.new(options.merge(:path => path, :key => last))
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Method: items (Aura::Menu)
|
|
60
|
+
# Returns the root menu items.
|
|
61
|
+
#
|
|
62
|
+
# ## Usage
|
|
63
|
+
# Aura.admin.menu.items
|
|
64
|
+
#
|
|
65
|
+
# ## Description
|
|
66
|
+
# Returns instances of {Aura::MenuItem}.
|
|
67
|
+
#
|
|
68
|
+
def items
|
|
69
|
+
root.items
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Method: get (Aura::Menu)
|
|
73
|
+
# Returns a menu item of a given key.
|
|
74
|
+
#
|
|
75
|
+
# ## Usage
|
|
76
|
+
# Aura.admin.menu.get(keyname)
|
|
77
|
+
#
|
|
78
|
+
# ## Example
|
|
79
|
+
#
|
|
80
|
+
# #### Get and set
|
|
81
|
+
# Use {Aura::Menu#add} to add, then `get` to get.
|
|
82
|
+
#
|
|
83
|
+
# Aura.admin.menu.add "hello",
|
|
84
|
+
# :name => "Hello",
|
|
85
|
+
# :href => '/admin/lol',
|
|
86
|
+
# :icon => 'settings'
|
|
87
|
+
#
|
|
88
|
+
# item = Aura.admin.menu.get('hello') #=> #<MenuItem>
|
|
89
|
+
# item.name #=> "Hello"
|
|
90
|
+
# item.icon #=> "settings"
|
|
91
|
+
#
|
|
92
|
+
def get(key='')
|
|
93
|
+
path = key.to_s.split('.')
|
|
94
|
+
node = root
|
|
95
|
+
path.each { |segment| node = node.raw_items[segment] }
|
|
96
|
+
node
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
protected
|
|
100
|
+
def root
|
|
101
|
+
@root ||= MenuItem.new
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# Class: MenuItem (Aura)
|
|
106
|
+
# A menu item.
|
|
107
|
+
#
|
|
108
|
+
# ## Description
|
|
109
|
+
# This is an OpenStruct.
|
|
110
|
+
#
|
|
111
|
+
# It will always have `.path` and `.key`.
|
|
112
|
+
# Optional items are `.name`, `.href`, and `.position`.
|
|
113
|
+
#
|
|
114
|
+
# Methods such as {Aura::Menu.items} and {Aura::Menu.get} return menu items.
|
|
115
|
+
#
|
|
116
|
+
class MenuItem < OpenStruct
|
|
117
|
+
def initialize(hash={})
|
|
118
|
+
super
|
|
119
|
+
self.items = Hash.new
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def name
|
|
123
|
+
@table[:name] || self.key.capitalize
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def raw_items
|
|
127
|
+
@table[:items]
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def items
|
|
131
|
+
@table[:items].values.sort_by { |item| item.position.to_s || item.key }
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def href
|
|
135
|
+
@table[:href].try(:call) || @table[:href] || R(:admin, *path.split('.'))
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
#Aura.admin.menu.add 'settings.db', :name => "Settings", :href => "/settings"
|
|
141
|
+
#Aura.admin.menu.get('settings') # list of MenuItems
|
|
142
|
+
#Aura.admin.menu.items
|
data/lib/aura/models.rb
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Class: Models (Aura)
|
|
2
|
+
# Models.
|
|
3
|
+
#
|
|
4
|
+
# #### Finding models
|
|
5
|
+
# `Aura.models` returns a Models instance, which is enumerable.
|
|
6
|
+
#
|
|
7
|
+
# Aura.models #=> #<Aura::Models>
|
|
8
|
+
# Aura.models.map { |m| m.name }
|
|
9
|
+
#
|
|
10
|
+
# #### Find by name
|
|
11
|
+
# Use {Aura.models.get} or Ruby's `const_get`.
|
|
12
|
+
#
|
|
13
|
+
# Aura.models.get('contact_form') #=> ContactForm
|
|
14
|
+
# Aura.models.const_get(:ContactForm) #=> ContactForm
|
|
15
|
+
#
|
|
16
|
+
class Aura
|
|
17
|
+
class Models
|
|
18
|
+
include Enumerable
|
|
19
|
+
|
|
20
|
+
def each(&blk)
|
|
21
|
+
all.each &blk
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Class method: all (Aura::Models)
|
|
25
|
+
# Returns an array of all model classes.
|
|
26
|
+
#
|
|
27
|
+
# ## Example
|
|
28
|
+
# Aura.models.all.each do |m|
|
|
29
|
+
# # ...
|
|
30
|
+
# end
|
|
31
|
+
#
|
|
32
|
+
def all
|
|
33
|
+
@@all ||= Array.new
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Class method: get (Aura::Models)
|
|
37
|
+
# Returns a given model.
|
|
38
|
+
#
|
|
39
|
+
# ## Usage
|
|
40
|
+
# Aura::Models.get(name)
|
|
41
|
+
#
|
|
42
|
+
# ## Description
|
|
43
|
+
# Looks up the model `name` and returns the model class, or `nil`
|
|
44
|
+
# if it's not found.
|
|
45
|
+
#
|
|
46
|
+
# ## Example
|
|
47
|
+
# Aura::Models.get('contact_form') #=> Aura::Model::ContactForm
|
|
48
|
+
#
|
|
49
|
+
def get(name)
|
|
50
|
+
name = camelize(name) if name.downcase == name
|
|
51
|
+
begin
|
|
52
|
+
Object.const_get(name)
|
|
53
|
+
rescue NameError
|
|
54
|
+
nil
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Class method: reload! (Aura::Models)
|
|
59
|
+
# Ensures that models will get new columns the next time it's loaded.
|
|
60
|
+
#
|
|
61
|
+
def reload!
|
|
62
|
+
Aura.models.each { |m| m.send :set_columns, nil }
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Puts models in the global namespace.
|
|
66
|
+
# Don't use me.
|
|
67
|
+
#
|
|
68
|
+
def unpack
|
|
69
|
+
all.each do |model|
|
|
70
|
+
klass = model.name.split('::').last
|
|
71
|
+
Kernel.const_set(klass, model) unless Kernel.const_defined?(klass)
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
protected
|
|
76
|
+
def camelize(str)
|
|
77
|
+
str.split('_').map { |s| s.capitalize }.join('')
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
data/lib/aura/public.rb
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Sinatra plugin: Public (Aura)
|
|
2
|
+
# Allows apps to use more than one public folder.
|
|
3
|
+
#
|
|
4
|
+
# ## Description
|
|
5
|
+
# This is used by the {Main} application.
|
|
6
|
+
# This is a general-purpose plugin that can be used in other Sinatra
|
|
7
|
+
# projects.
|
|
8
|
+
#
|
|
9
|
+
# ## Usage
|
|
10
|
+
# class MyApp < Sinatra::Base
|
|
11
|
+
# register Aura::Public
|
|
12
|
+
#
|
|
13
|
+
# add_public path
|
|
14
|
+
# add_public path[, :prefix => PREFIX]
|
|
15
|
+
# end
|
|
16
|
+
#
|
|
17
|
+
# ## Example
|
|
18
|
+
#
|
|
19
|
+
# #### Add a public dir
|
|
20
|
+
# Just pass a path to `add_public`.
|
|
21
|
+
#
|
|
22
|
+
# class MyApp < Sinatra::Base
|
|
23
|
+
# add_public "#{root}/app/public"
|
|
24
|
+
# end
|
|
25
|
+
#
|
|
26
|
+
# #### Accessing
|
|
27
|
+
# This may be used to access `app/public/script.js`.
|
|
28
|
+
#
|
|
29
|
+
# $ curl http://localhost:4567/script.js
|
|
30
|
+
#
|
|
31
|
+
# #### Prefix
|
|
32
|
+
# Here's how you add a prefix.
|
|
33
|
+
#
|
|
34
|
+
# add_public "#{root}/js", :prefix => "javascripts/"
|
|
35
|
+
# $ curl http://localhost:4567/javascripts/app.js
|
|
36
|
+
#
|
|
37
|
+
class Aura
|
|
38
|
+
module Public
|
|
39
|
+
def self.registered(app)
|
|
40
|
+
app.extend ClassMethods
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
module ClassMethods
|
|
44
|
+
# Class method: add_public (Aura::Public)
|
|
45
|
+
# Adds a new public dir.
|
|
46
|
+
#
|
|
47
|
+
# ## Description
|
|
48
|
+
# See {Aura::Public} for usage and examples.
|
|
49
|
+
#
|
|
50
|
+
def add_public(dir, options={})
|
|
51
|
+
return unless File.directory?(dir)
|
|
52
|
+
prefix = options.delete(:prefix)
|
|
53
|
+
|
|
54
|
+
get "#{prefix}*" do |path|
|
|
55
|
+
begin
|
|
56
|
+
fname = File.join(dir, path)
|
|
57
|
+
pass unless File.file?(fname)
|
|
58
|
+
pass unless Utils.in_dir?(fname, dir)
|
|
59
|
+
|
|
60
|
+
send_file fname
|
|
61
|
+
rescue Errno::ENOENT => e
|
|
62
|
+
pass
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# Sinatra plugin: Rendering (Aura)
|
|
2
|
+
# Allows rendering from multiple engines or renderers.
|
|
3
|
+
#
|
|
4
|
+
# ## Usage
|
|
5
|
+
#
|
|
6
|
+
# #### Registering
|
|
7
|
+
#
|
|
8
|
+
# class Main < Sinatra::Base
|
|
9
|
+
# register Aura::Rendering
|
|
10
|
+
#
|
|
11
|
+
# # These two settings are optional.
|
|
12
|
+
# set :multi_views, [ './views', './skin/default' ]
|
|
13
|
+
# set :multi_engines, [ :erb, :haml ]
|
|
14
|
+
#
|
|
15
|
+
# #### Using show
|
|
16
|
+
# Using #show will automatically find the appropriate template, trying the
|
|
17
|
+
# following variations.
|
|
18
|
+
#
|
|
19
|
+
# get '/' do
|
|
20
|
+
# show :home
|
|
21
|
+
# end
|
|
22
|
+
# end
|
|
23
|
+
#
|
|
24
|
+
# # ./views/home.erb
|
|
25
|
+
# # ./views/home.haml
|
|
26
|
+
# # ./skin/default/home.erb
|
|
27
|
+
# # ./skin/default/home.haml
|
|
28
|
+
#
|
|
29
|
+
module Aura::Rendering
|
|
30
|
+
def self.registered(app)
|
|
31
|
+
views = app.views || './views'
|
|
32
|
+
|
|
33
|
+
app.set :multi_engines, Tilt.mappings.keys unless app.respond_to?(:template_engines)
|
|
34
|
+
app.set :multi_views, views unless app.respond_to?(:multi_views)
|
|
35
|
+
|
|
36
|
+
app.helpers Helpers
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
module Helpers
|
|
40
|
+
# Helper: layout (Helpers)
|
|
41
|
+
# Defines a layout to use.
|
|
42
|
+
def layout(what=nil)
|
|
43
|
+
@layout = what if what
|
|
44
|
+
@layout
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Helper: show (Helpers)
|
|
48
|
+
# Shows a given template.
|
|
49
|
+
#
|
|
50
|
+
# ## Usage
|
|
51
|
+
# show(template[, options[, locals])
|
|
52
|
+
# show(model, template[, options[, locals])
|
|
53
|
+
#
|
|
54
|
+
# ## Options
|
|
55
|
+
# You may pass +options[:engine]+ to specify which engines you will want
|
|
56
|
+
# to limit the search to. This defaults to +App.multi_engines+, or Tilt's
|
|
57
|
+
# supported engines if that's not defined.
|
|
58
|
+
#
|
|
59
|
+
# You may pass +options[:views]+ to specify which directories to scour.
|
|
60
|
+
# This defaults to +Main.multi_views+, or +Main.views+.
|
|
61
|
+
#
|
|
62
|
+
# #### Show a template
|
|
63
|
+
#
|
|
64
|
+
# show :home
|
|
65
|
+
#
|
|
66
|
+
# #### Show a model's view
|
|
67
|
+
# This example looks at `:'page/index'` and `:'base/index'`, using
|
|
68
|
+
# whichever it finds first
|
|
69
|
+
#
|
|
70
|
+
# page = Page['/about']
|
|
71
|
+
# show page, :index
|
|
72
|
+
#
|
|
73
|
+
# #### Limiting engines
|
|
74
|
+
#
|
|
75
|
+
# # HAML only
|
|
76
|
+
# show :home, engine: :haml
|
|
77
|
+
#
|
|
78
|
+
# # HAML or ERB, favoring HAML first
|
|
79
|
+
# show :home, engine: [:haml, :erb]
|
|
80
|
+
#
|
|
81
|
+
# #### Only certain paths
|
|
82
|
+
# Only look at certain paths
|
|
83
|
+
#
|
|
84
|
+
# show :home, views: [ './views', './skins/default' ]
|
|
85
|
+
#
|
|
86
|
+
def show(templates, *args, &block)
|
|
87
|
+
if templates.respond_to?(:templates_for)
|
|
88
|
+
templates = templates.templates_for(args.shift || 'index')
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
options = args.shift || {}
|
|
92
|
+
locals = args.shift || {}
|
|
93
|
+
|
|
94
|
+
paths = [*(options[:views] || settings.multi_views)].join(',')
|
|
95
|
+
engines = [*(options[:engine] || settings.multi_engines)].join(',')
|
|
96
|
+
|
|
97
|
+
@layout = options.delete(:layout)
|
|
98
|
+
|
|
99
|
+
get_engine = lambda { |template|
|
|
100
|
+
spec = "{#{paths}}/#{template}.{#{engines}}"
|
|
101
|
+
template = Dir[spec].first
|
|
102
|
+
return nil unless template
|
|
103
|
+
|
|
104
|
+
ext = File.extname(template)[1..-1].to_sym
|
|
105
|
+
options = settings.send(ext).merge(options) if settings.respond_to?(ext)
|
|
106
|
+
|
|
107
|
+
eng = Tilt[ext] or raise "Template engine not found: #{ext}"
|
|
108
|
+
[ template, eng ]
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
t = @template_cache.fetch templates, options do
|
|
112
|
+
template, engine = [*templates].inject(nil) do |e, t|
|
|
113
|
+
e ||= get_engine[t]
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
raise Errno::ENOENT.new(templates.inspect) unless template
|
|
117
|
+
|
|
118
|
+
engine.new(template, 0, options)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
if t
|
|
122
|
+
out = t.render(self, locals, &block)
|
|
123
|
+
|
|
124
|
+
if @layout
|
|
125
|
+
layout, @layout = @layout, nil
|
|
126
|
+
out = show(layout, :layout => false) { out }
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
out
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
data/lib/aura/seeder.rb
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Sinatra plugin: Seeder (Aura)
|
|
2
|
+
# To be refactored--this sucks
|
|
3
|
+
module Aura::Seeder
|
|
4
|
+
def self.registered(app)
|
|
5
|
+
app.extend ClassMethods
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
module ClassMethods
|
|
9
|
+
def flush!(&blk)
|
|
10
|
+
blk = lambda { |*a| } unless block_given?
|
|
11
|
+
|
|
12
|
+
tables = self.database.tables
|
|
13
|
+
|
|
14
|
+
tables.each do |table|
|
|
15
|
+
blk.call(:drop_table, table)
|
|
16
|
+
self.database.drop_table table
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def seed(type=nil, &blk)
|
|
21
|
+
blk = lambda { |*a| } unless block_given?
|
|
22
|
+
|
|
23
|
+
Aura.models.each { |m|
|
|
24
|
+
blk.call :seed, m.title_plural
|
|
25
|
+
m.seed(type, &blk)
|
|
26
|
+
}
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def seed!(type=nil, &blk)
|
|
30
|
+
blk = lambda { |*a| } unless block_given?
|
|
31
|
+
|
|
32
|
+
Aura.models.each { |m|
|
|
33
|
+
blk.call :seed, m.title_plural
|
|
34
|
+
m.seed!(type, &blk)
|
|
35
|
+
}
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|