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