waves 0.7.6 → 0.7.7
Sign up to get free protection for your applications and to get access to all the features.
- data/app/Rakefile +64 -6
- data/app/configurations/development.rb.erb +2 -1
- data/app/configurations/mapping.rb.erb +1 -0
- data/app/configurations/production.rb.erb +1 -0
- data/app/lib/application.rb.erb +2 -2
- data/bin/waves +36 -1
- data/doc/HISTORY +44 -0
- data/doc/LICENSE +22 -0
- data/doc/rdoc/classes/Erubis/Context.html +218 -0
- data/doc/rdoc/classes/Kernel.html +145 -0
- data/doc/rdoc/classes/Symbol.html +154 -0
- data/doc/rdoc/classes/Tempfile.html +161 -0
- data/doc/rdoc/classes/Waves.html +455 -0
- data/doc/rdoc/classes/Waves/Application.html +371 -0
- data/doc/rdoc/classes/Waves/Blackboard.html +296 -0
- data/doc/rdoc/classes/Waves/Configurations.html +283 -0
- data/doc/rdoc/classes/Waves/Configurations/Base.html +209 -0
- data/doc/rdoc/classes/Waves/Configurations/Default.html +237 -0
- data/doc/rdoc/classes/Waves/Console.html +187 -0
- data/doc/rdoc/classes/Waves/Controllers.html +203 -0
- data/doc/rdoc/classes/Waves/Controllers/Base.html +151 -0
- data/doc/rdoc/classes/Waves/Controllers/Mixin.html +312 -0
- data/doc/rdoc/classes/Waves/Dispatchers.html +118 -0
- data/doc/rdoc/classes/Waves/Dispatchers/Base.html +198 -0
- data/doc/rdoc/classes/Waves/Dispatchers/Default.html +224 -0
- data/doc/rdoc/classes/Waves/Dispatchers/NotFoundError.html +122 -0
- data/doc/rdoc/classes/Waves/Dispatchers/Redirect.html +173 -0
- data/doc/rdoc/classes/Waves/Foundations.html +131 -0
- data/doc/rdoc/classes/Waves/Foundations/Default.html +179 -0
- data/doc/rdoc/classes/Waves/Foundations/Simple.html +167 -0
- data/doc/rdoc/classes/Waves/Helpers.html +176 -0
- data/doc/rdoc/classes/Waves/Helpers/AssetHelper.html +212 -0
- data/doc/rdoc/classes/Waves/Helpers/Common.html +213 -0
- data/doc/rdoc/classes/Waves/Helpers/Default.html +135 -0
- data/doc/rdoc/classes/Waves/Helpers/Form.html +201 -0
- data/doc/rdoc/classes/Waves/Helpers/Formatting.html +232 -0
- data/doc/rdoc/classes/Waves/Helpers/Model.html +194 -0
- data/doc/rdoc/classes/Waves/Helpers/NumberHelper.html +165 -0
- data/doc/rdoc/classes/Waves/Helpers/TagHelper.html +226 -0
- data/doc/rdoc/classes/Waves/Helpers/UrlHelper.html +242 -0
- data/doc/rdoc/classes/Waves/Helpers/View.html +163 -0
- data/doc/rdoc/classes/Waves/Inflect/InflectorMethods.html +475 -0
- data/doc/rdoc/classes/Waves/Layers.html +175 -0
- data/doc/rdoc/classes/Waves/Layers/DefaultErrors.html +161 -0
- data/doc/rdoc/classes/Waves/Layers/Inflect.html +119 -0
- data/doc/rdoc/classes/Waves/Layers/Inflect/English.html +168 -0
- data/doc/rdoc/classes/Waves/Layers/Inflect/English/Rules.html +112 -0
- data/doc/rdoc/classes/Waves/Layers/Inflect/English/StringMethods.html +194 -0
- data/doc/rdoc/classes/Waves/Layers/MVC.html +204 -0
- data/doc/rdoc/classes/Waves/Layers/ORM/ActiveRecord.html +239 -0
- data/doc/rdoc/classes/Waves/Layers/ORM/ActiveRecord/ControllerMethods.html +246 -0
- data/doc/rdoc/classes/Waves/Layers/ORM/ActiveRecord/Symbol.html +132 -0
- data/doc/rdoc/classes/Waves/Layers/ORM/DataMapper.html +166 -0
- data/doc/rdoc/classes/Waves/Layers/ORM/Filebase.html +157 -0
- data/doc/rdoc/classes/Waves/Layers/ORM/Sequel.html +232 -0
- data/doc/rdoc/classes/Waves/Layers/ORM/Sequel/ControllerMethods.html +246 -0
- data/doc/rdoc/classes/Waves/Layers/Simple.html +169 -0
- data/doc/rdoc/classes/Waves/Layers/SimpleErrors.html +159 -0
- data/doc/rdoc/classes/Waves/Logger.html +288 -0
- data/doc/rdoc/classes/Waves/Mapping.html +760 -0
- data/doc/rdoc/classes/Waves/Mapping/PrettyUrls.html +129 -0
- data/doc/rdoc/classes/Waves/Mapping/PrettyUrls/GetRules.html +174 -0
- data/doc/rdoc/classes/Waves/Mapping/PrettyUrls/RestRules.html +180 -0
- data/doc/rdoc/classes/Waves/MimeTypes.html +200 -0
- data/doc/rdoc/classes/Waves/Renderers/Erubis.html +162 -0
- data/doc/rdoc/classes/Waves/Renderers/Haml.html +160 -0
- data/doc/rdoc/classes/Waves/Renderers/Markaby.html +167 -0
- data/doc/rdoc/classes/Waves/Renderers/Mixin.html +191 -0
- data/doc/rdoc/classes/Waves/Renderers/Scope.html +181 -0
- data/doc/rdoc/classes/Waves/Request.html +441 -0
- data/doc/rdoc/classes/Waves/Request/ParseError.html +111 -0
- data/doc/rdoc/classes/Waves/Response.html +283 -0
- data/doc/rdoc/classes/Waves/ResponseMixin.html +460 -0
- data/doc/rdoc/classes/Waves/ResponseProxy.html +269 -0
- data/doc/rdoc/classes/Waves/Server.html +488 -0
- data/doc/rdoc/classes/Waves/Session.html +330 -0
- data/doc/rdoc/classes/Waves/Utilities/Hash.html +185 -0
- data/doc/rdoc/classes/Waves/Utilities/Integer.html +424 -0
- data/doc/rdoc/classes/Waves/Utilities/Module.html +174 -0
- data/doc/rdoc/classes/Waves/Utilities/Object.html +155 -0
- data/doc/rdoc/classes/Waves/Utilities/Proc.html +145 -0
- data/doc/rdoc/classes/Waves/Utilities/String.html +290 -0
- data/doc/rdoc/classes/Waves/Views.html +278 -0
- data/doc/rdoc/classes/Waves/Views/Base.html +118 -0
- data/doc/rdoc/classes/Waves/Views/Mixin.html +279 -0
- data/doc/rdoc/classes/Waves/Views/NoTemplateError.html +111 -0
- data/doc/rdoc/created.rid +1 -0
- data/doc/rdoc/files/README_rdoc.html +415 -0
- data/doc/rdoc/files/bin/waves.html +135 -0
- data/doc/rdoc/files/doc/HISTORY.html +265 -0
- data/doc/rdoc/files/lib/commands/waves-console_rb.html +110 -0
- data/doc/rdoc/files/lib/commands/waves-server_rb.html +108 -0
- data/doc/rdoc/files/lib/controllers/base_rb.html +101 -0
- data/doc/rdoc/files/lib/controllers/mixin_rb.html +101 -0
- data/doc/rdoc/files/lib/dispatchers/base_rb.html +101 -0
- data/doc/rdoc/files/lib/dispatchers/default_rb.html +101 -0
- data/doc/rdoc/files/lib/foundations/default_rb.html +101 -0
- data/doc/rdoc/files/lib/foundations/simple_rb.html +101 -0
- data/doc/rdoc/files/lib/helpers/asset_helper_rb.html +101 -0
- data/doc/rdoc/files/lib/helpers/common_rb.html +101 -0
- data/doc/rdoc/files/lib/helpers/default_rb.html +101 -0
- data/doc/rdoc/files/lib/helpers/form_rb.html +101 -0
- data/doc/rdoc/files/lib/helpers/formatting_rb.html +108 -0
- data/doc/rdoc/files/lib/helpers/model_rb.html +101 -0
- data/doc/rdoc/files/lib/helpers/number_helper_rb.html +101 -0
- data/doc/rdoc/files/lib/helpers/tag_helper_rb.html +101 -0
- data/doc/rdoc/files/lib/helpers/url_helper_rb.html +101 -0
- data/doc/rdoc/files/lib/helpers/view_rb.html +101 -0
- data/doc/rdoc/files/lib/layers/default_errors_rb.html +101 -0
- data/doc/rdoc/files/lib/layers/inflect/english/rules_rb.html +101 -0
- data/doc/rdoc/files/lib/layers/inflect/english/string_rb.html +101 -0
- data/doc/rdoc/files/lib/layers/inflect/english_rb.html +109 -0
- data/doc/rdoc/files/lib/layers/mvc_rb.html +101 -0
- data/doc/rdoc/files/lib/layers/orm/active_record/tasks/generate_rb.html +101 -0
- data/doc/rdoc/files/lib/layers/orm/active_record/tasks/schema_rb.html +101 -0
- data/doc/rdoc/files/lib/layers/orm/active_record_rb.html +108 -0
- data/doc/rdoc/files/lib/layers/orm/data_mapper_rb.html +108 -0
- data/doc/rdoc/files/lib/layers/orm/filebase_rb.html +101 -0
- data/doc/rdoc/files/lib/layers/orm/migration_rb.html +101 -0
- data/doc/rdoc/files/lib/layers/orm/sequel/tasks/generate_rb.html +101 -0
- data/doc/rdoc/files/lib/layers/orm/sequel/tasks/schema_rb.html +101 -0
- data/doc/rdoc/files/lib/layers/orm/sequel_rb.html +108 -0
- data/doc/rdoc/files/lib/layers/simple_errors_rb.html +101 -0
- data/doc/rdoc/files/lib/layers/simple_rb.html +101 -0
- data/doc/rdoc/files/lib/mapping/mapping_rb.html +101 -0
- data/doc/rdoc/files/lib/mapping/pretty_urls_rb.html +101 -0
- data/doc/rdoc/files/lib/renderers/erubis_rb.html +108 -0
- data/doc/rdoc/files/lib/renderers/haml_rb.html +108 -0
- data/doc/rdoc/files/lib/renderers/markaby_rb.html +108 -0
- data/doc/rdoc/files/lib/renderers/mixin_rb.html +101 -0
- data/doc/rdoc/files/lib/runtime/application_rb.html +107 -0
- data/doc/rdoc/files/lib/runtime/blackboard_rb.html +101 -0
- data/doc/rdoc/files/lib/runtime/configuration_rb.html +101 -0
- data/doc/rdoc/files/lib/runtime/console_rb.html +101 -0
- data/doc/rdoc/files/lib/runtime/debugger_rb.html +101 -0
- data/doc/rdoc/files/lib/runtime/logger_rb.html +108 -0
- data/doc/rdoc/files/lib/runtime/mime_types_rb.html +101 -0
- data/doc/rdoc/files/lib/runtime/request_rb.html +101 -0
- data/doc/rdoc/files/lib/runtime/response_mixin_rb.html +101 -0
- data/doc/rdoc/files/lib/runtime/response_proxy_rb.html +101 -0
- data/doc/rdoc/files/lib/runtime/response_rb.html +101 -0
- data/doc/rdoc/files/lib/runtime/server_rb.html +108 -0
- data/doc/rdoc/files/lib/runtime/session_rb.html +101 -0
- data/doc/rdoc/files/lib/tasks/cluster_rb.html +101 -0
- data/doc/rdoc/files/lib/tasks/gem_rb.html +108 -0
- data/doc/rdoc/files/lib/tasks/generate_rb.html +101 -0
- data/doc/rdoc/files/lib/utilities/hash_rb.html +101 -0
- data/doc/rdoc/files/lib/utilities/inflect_rb.html +111 -0
- data/doc/rdoc/files/lib/utilities/integer_rb.html +101 -0
- data/doc/rdoc/files/lib/utilities/module_rb.html +101 -0
- data/doc/rdoc/files/lib/utilities/object_rb.html +101 -0
- data/doc/rdoc/files/lib/utilities/proc_rb.html +101 -0
- data/doc/rdoc/files/lib/utilities/string_rb.html +101 -0
- data/doc/rdoc/files/lib/utilities/symbol_rb.html +101 -0
- data/doc/rdoc/files/lib/utilities/tempfile_rb.html +115 -0
- data/doc/rdoc/files/lib/views/base_rb.html +101 -0
- data/doc/rdoc/files/lib/views/mixin_rb.html +101 -0
- data/doc/rdoc/files/lib/waves_rb.html +195 -0
- data/doc/rdoc/fr_class_index.html +104 -0
- data/doc/rdoc/fr_file_index.html +97 -0
- data/doc/rdoc/fr_method_index.html +233 -0
- data/doc/rdoc/index.html +24 -0
- data/doc/rdoc/rdoc-style.css +208 -0
- data/lib/foundations/default.rb +1 -0
- data/lib/layers/default_errors.rb +10 -13
- data/lib/layers/inflect/english.rb +24 -0
- data/lib/layers/inflect/english/rules.rb +88 -0
- data/lib/layers/inflect/english/string.rb +24 -0
- data/lib/layers/mvc.rb +31 -35
- data/lib/layers/orm/active_record.rb +83 -32
- data/lib/layers/orm/active_record/tasks/generate.rb +28 -0
- data/lib/layers/orm/active_record/tasks/schema.rb +7 -15
- data/lib/layers/orm/data_mapper.rb +12 -16
- data/lib/layers/orm/migration.rb +20 -11
- data/lib/layers/orm/sequel.rb +53 -49
- data/lib/layers/orm/sequel/tasks/generate.rb +28 -0
- data/lib/layers/orm/sequel/tasks/schema.rb +6 -14
- data/lib/layers/simple.rb +6 -13
- data/lib/layers/simple_errors.rb +5 -8
- data/lib/renderers/haml.rb +45 -0
- data/lib/runtime/application.rb +0 -2
- data/lib/tasks/cluster.rb +1 -1
- data/lib/utilities/inflect.rb +86 -168
- data/lib/utilities/integer.rb +23 -16
- data/lib/utilities/module.rb +19 -15
- data/lib/utilities/object.rb +22 -14
- data/lib/utilities/proc.rb +13 -7
- data/lib/utilities/string.rb +0 -12
- data/lib/utilities/symbol.rb +4 -1
- data/lib/utilities/tempfile.rb +9 -0
- data/lib/waves.rb +3 -1
- data/samples/blog/Rakefile +14 -0
- data/samples/blog/bin/waves-console +3 -0
- data/samples/blog/bin/waves-server +3 -0
- data/samples/blog/blog.db +0 -0
- data/samples/blog/configurations/development.rb +31 -0
- data/samples/blog/configurations/mapping.rb +23 -0
- data/samples/blog/configurations/production.rb +30 -0
- data/samples/blog/doc/EMTPY +0 -0
- data/samples/blog/lib/application.rb +5 -0
- data/samples/blog/models/comment.rb +14 -0
- data/samples/blog/models/entry.rb +14 -0
- data/samples/blog/public/css/site.css +2 -0
- data/samples/blog/public/javascript/site.js +13 -0
- data/samples/blog/schema/migrations/001_initial_schema.rb +17 -0
- data/samples/blog/schema/migrations/002_add_comments.rb +18 -0
- data/samples/blog/schema/migrations/templates/empty.rb.erb +9 -0
- data/samples/blog/startup.rb +6 -0
- data/samples/blog/templates/comment/add.mab +10 -0
- data/samples/blog/templates/comment/list.mab +6 -0
- data/samples/blog/templates/entry/editor.mab +13 -0
- data/samples/blog/templates/entry/list.mab +11 -0
- data/samples/blog/templates/entry/show.mab +9 -0
- data/samples/blog/templates/entry/summary.mab +5 -0
- data/samples/blog/templates/errors/not_found_404.mab +2 -0
- data/samples/blog/templates/errors/server_error_500.mab +2 -0
- data/samples/blog/templates/layouts/default.mab +17 -0
- data/samples/jub/Rakefile +72 -0
- data/samples/jub/bin/waves-console +4 -0
- data/samples/jub/bin/waves-server +4 -0
- data/samples/jub/configurations/development.rb +31 -0
- data/samples/jub/configurations/mapping.rb +18 -0
- data/samples/jub/configurations/production.rb +31 -0
- data/samples/jub/lib/application.rb +5 -0
- data/samples/jub/startup.rb +6 -0
- data/samples/jub/templates/errors/not_found_404.mab +2 -0
- data/samples/jub/templates/errors/server_error_500.mab +2 -0
- data/samples/jub/templates/layouts/default.mab +14 -0
- data/verify/app_generation/helpers.rb +24 -0
- data/verify/app_generation/startup.rb +39 -0
- data/verify/blackboard/blackboard_verify.rb +92 -0
- data/verify/blackboard/helpers.rb +5 -0
- data/verify/configurations/attributes.rb +37 -0
- data/verify/configurations/helpers.rb +1 -0
- data/verify/configurations/rack_integration.rb +29 -0
- data/verify/controllers/base.rb +37 -0
- data/verify/controllers/helpers.rb +13 -0
- data/verify/controllers/interface.rb +51 -0
- data/verify/core/helpers.rb +3 -0
- data/verify/core/utilities.rb +177 -0
- data/verify/foundations/default.rb +86 -0
- data/verify/foundations/default_application/Rakefile +14 -0
- data/verify/foundations/default_application/bin/waves-console +3 -0
- data/verify/foundations/default_application/bin/waves-server +3 -0
- data/verify/foundations/default_application/configurations/development.rb +26 -0
- data/verify/foundations/default_application/configurations/mapping.rb +14 -0
- data/verify/foundations/default_application/configurations/production.rb +30 -0
- data/verify/foundations/default_application/controllers/default.rb +15 -0
- data/verify/foundations/default_application/controllers/loaded.rb +15 -0
- data/verify/foundations/default_application/defaultapplication.db +0 -0
- data/verify/foundations/default_application/helpers/loaded.rb +10 -0
- data/verify/foundations/default_application/lib/application.rb +5 -0
- data/verify/foundations/default_application/models/default.rb +13 -0
- data/verify/foundations/default_application/models/loaded.rb +13 -0
- data/verify/foundations/default_application/schema/migrations/templates/empty.rb.erb +9 -0
- data/verify/foundations/default_application/startup.rb +7 -0
- data/verify/foundations/default_application/templates/errors/not_found_404.mab +2 -0
- data/verify/foundations/default_application/templates/errors/server_error_500.mab +2 -0
- data/verify/foundations/default_application/templates/layouts/default.mab +14 -0
- data/verify/foundations/default_application/views/default.rb +7 -0
- data/verify/foundations/default_application/views/loaded.rb +15 -0
- data/verify/foundations/helpers.rb +1 -0
- data/verify/foundations/simple.rb +25 -0
- data/verify/helpers.rb +76 -0
- data/verify/layers/data_mapper/association_verify.rb +87 -0
- data/verify/layers/default_errors.rb +29 -0
- data/verify/layers/helpers.rb +1 -0
- data/verify/layers/migration.rb +33 -0
- data/verify/layers/sequel/model.rb +41 -0
- data/verify/layers/sequeltest.db +0 -0
- data/verify/mapping/always.rb +19 -0
- data/verify/mapping/filters.rb +65 -0
- data/verify/mapping/handle.rb +24 -0
- data/verify/mapping/helpers.rb +7 -0
- data/verify/mapping/matches.rb +27 -0
- data/verify/mapping/named.rb +29 -0
- data/verify/mapping/options.rb +17 -0
- data/verify/mapping/path.rb +40 -0
- data/verify/mapping/response_proxy.rb +50 -0
- data/verify/mapping/threaded.rb +25 -0
- data/verify/requests/helpers.rb +16 -0
- data/verify/requests/request.rb +73 -0
- data/verify/requests/response.rb +59 -0
- data/verify/requests/session.rb +54 -0
- data/verify/views/helpers.rb +1 -0
- data/verify/views/rendering.rb +34 -0
- data/verify/views/templates/foo.erb +0 -0
- data/verify/views/templates/moo.erb +0 -0
- data/verify/views/templates/moo.mab +0 -0
- metadata +597 -224
- data/lib/utilities/kernel.rb +0 -34
@@ -15,27 +15,23 @@ module Waves
|
|
15
15
|
@adapter ||= ::DataMapper.setup(:main_repository, config.database[:database])
|
16
16
|
end
|
17
17
|
|
18
|
-
app.
|
19
|
-
|
20
|
-
|
21
|
-
auto_load true, :directories => [:models]
|
22
|
-
end
|
18
|
+
app.auto_eval :Models do
|
19
|
+
auto_load true, :directories => [:models]
|
20
|
+
end
|
23
21
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
22
|
+
app.auto_eval :Configurations do
|
23
|
+
auto_eval :Mapping do
|
24
|
+
before true do
|
25
|
+
app.database #force adapter init if not already done
|
26
|
+
::DataMapper::Repository.context.push(::DataMapper::Repository.new(:main_repository))
|
27
|
+
end
|
28
|
+
always true do
|
29
|
+
::DataMapper::Repository.context.pop
|
33
30
|
end
|
34
31
|
end
|
35
|
-
|
36
32
|
end
|
33
|
+
|
37
34
|
end
|
38
|
-
|
39
35
|
end
|
40
36
|
end
|
41
37
|
end
|
data/lib/layers/orm/migration.rb
CHANGED
@@ -1,21 +1,30 @@
|
|
1
1
|
module Waves
|
2
|
-
module
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
# stuff in this file largely lifted from Sequel. Thanks, bro.
|
2
|
+
module Layers
|
3
|
+
|
4
|
+
# Helper methods to establish inter-ORM standards
|
5
|
+
module ORM
|
7
6
|
|
8
7
|
# Glob pattern
|
9
8
|
MIGRATION_FILE_PATTERN = '[0-9][0-9][0-9]_*.rb'.freeze
|
10
9
|
|
10
|
+
def self.create_migration_for(orm)
|
11
|
+
source = migration_template(orm.to_s.snake_case, ENV['template'])
|
12
|
+
destination = migration_destination(ENV['name'])
|
13
|
+
migration_name = migration_name(ENV['name'])
|
14
|
+
|
15
|
+
context = {:class_name => migration_name.camel_case}
|
16
|
+
|
17
|
+
write_migration(context, source, destination)
|
18
|
+
end
|
19
|
+
|
11
20
|
# Where Waves keeps its migration files
|
12
|
-
def self.
|
21
|
+
def self.migration_directory
|
13
22
|
:schema / :migrations
|
14
23
|
end
|
15
24
|
|
16
25
|
# Returns any found migration files in the supplied directory.
|
17
26
|
def self.migration_files(range = nil)
|
18
|
-
pattern =
|
27
|
+
pattern = migration_directory / MIGRATION_FILE_PATTERN
|
19
28
|
files = Dir[pattern].inject([]) do |m, path|
|
20
29
|
m[File.basename(path).to_i] = path
|
21
30
|
m
|
@@ -45,20 +54,20 @@ module Waves
|
|
45
54
|
|
46
55
|
# Returns the path to the migration template file for the given ORM.
|
47
56
|
# <em>orm</em> can be a symbol or string
|
48
|
-
def self.
|
57
|
+
def self.migration_template(orm, name=nil)
|
49
58
|
file = ( name || 'empty' ) + '.rb.erb'
|
50
59
|
source = File.dirname(__FILE__) / orm / :migrations / file
|
51
60
|
end
|
52
61
|
|
53
62
|
# Given a migration name, returns the path of the file that would be created.
|
54
|
-
def self.
|
63
|
+
def self.migration_destination(name)
|
55
64
|
version = next_migration_version
|
56
|
-
|
65
|
+
migration_directory / "#{'%03d' % version}_#{migration_name(name)}.rb"
|
57
66
|
end
|
58
67
|
|
59
68
|
# Takes an assigns hash as the Erubis context. Keys in the hash become
|
60
69
|
# instance variable names.
|
61
|
-
def self.
|
70
|
+
def self.write_migration(context, source, destination)
|
62
71
|
code = Erubis::Eruby.new( File.read( source ) ).evaluate( context )
|
63
72
|
puts "Creating #{destination}"
|
64
73
|
File.write( destination, code )
|
data/lib/layers/orm/sequel.rb
CHANGED
@@ -1,7 +1,3 @@
|
|
1
|
-
gem 'sequel', '>= 2.0.0'
|
2
|
-
require 'sequel'
|
3
|
-
require File.dirname(__FILE__) / :sequel / :tasks / :schema if defined?(Rake)
|
4
|
-
|
5
1
|
module Waves
|
6
2
|
module Layers
|
7
3
|
module ORM # :nodoc:
|
@@ -24,59 +20,67 @@ module Waves
|
|
24
20
|
#
|
25
21
|
def self.included(app)
|
26
22
|
|
23
|
+
gem 'sequel', '>= 2.0.0'
|
24
|
+
require 'sequel'
|
25
|
+
require "#{File.dirname(__FILE__)}/sequel/tasks/schema" if defined?(Rake)
|
26
|
+
require "#{File.dirname(__FILE__)}/sequel/tasks/generate" if defined?(Rake)
|
27
|
+
|
27
28
|
def app.database ; @sequel ||= ::Sequel.open( config.database ) ; end
|
29
|
+
|
30
|
+
app.auto_create_module( :Models ) do
|
31
|
+
include AutoCode
|
32
|
+
auto_create_class :Default, ::Sequel::Model
|
33
|
+
auto_load :Default, :directories => [ :models ]
|
34
|
+
end
|
28
35
|
|
29
|
-
app.
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
# note that this is not done for app::Models::Default, as it isn't
|
42
|
-
# supposed to represent a table
|
43
|
-
auto_eval true do
|
44
|
-
default = superclass.basename.snake_case.pluralize.intern
|
45
|
-
if @dataset && @dataset.opts[:from] != [ default ]
|
46
|
-
# don't clobber dataset from autoloaded file
|
47
|
-
else
|
48
|
-
set_dataset Waves.application.database[ basename.snake_case.pluralize.intern ]
|
49
|
-
end
|
36
|
+
app.auto_eval :Models do
|
37
|
+
auto_create_class true, app::Models::Default
|
38
|
+
auto_load true, :directories => [ :models ]
|
39
|
+
# set the Sequel dataset based on the model class name
|
40
|
+
# note that this is not done for app::Models::Default, as it isn't
|
41
|
+
# supposed to represent a table
|
42
|
+
auto_eval true do
|
43
|
+
default = superclass.basename.snake_case.pluralize.intern
|
44
|
+
if @dataset && @dataset.opts[:from] != [ default ]
|
45
|
+
# don't clobber dataset from autoloaded file
|
46
|
+
else
|
47
|
+
set_dataset Waves.application.database[ basename.snake_case.pluralize.intern ]
|
50
48
|
end
|
51
49
|
end
|
50
|
+
end
|
52
51
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
end
|
57
|
-
|
58
|
-
def find( name ) #:nodoc:
|
59
|
-
model[ :name => name ] or not_found
|
60
|
-
end
|
61
|
-
|
62
|
-
def create #:nodoc:
|
63
|
-
model.create( attributes )
|
64
|
-
end
|
65
|
-
|
66
|
-
def delete( name ) #:nodoc:
|
67
|
-
find( name ).destroy
|
68
|
-
end
|
69
|
-
|
70
|
-
def update( name ) #:nodoc:
|
71
|
-
instance = find( name )
|
72
|
-
instance.update_with_params( attributes )
|
73
|
-
instance
|
74
|
-
end
|
75
|
-
end
|
52
|
+
Waves::Controllers::Base.instance_eval do
|
53
|
+
include Waves::Layers::ORM::Sequel::ControllerMethods
|
54
|
+
end
|
76
55
|
|
56
|
+
end
|
57
|
+
|
58
|
+
# Mixed into Waves::Controllers::Base. Provides ORM-specific helper methods for model access.
|
59
|
+
module ControllerMethods
|
60
|
+
def all
|
61
|
+
model.all
|
62
|
+
end
|
63
|
+
|
64
|
+
def find( name )
|
65
|
+
model[ :name => name ] or not_found
|
66
|
+
end
|
67
|
+
|
68
|
+
def create
|
69
|
+
model.create( attributes )
|
70
|
+
end
|
71
|
+
|
72
|
+
def delete( name )
|
73
|
+
find( name ).destroy
|
74
|
+
end
|
75
|
+
|
76
|
+
def update( name )
|
77
|
+
instance = find( name )
|
78
|
+
instance.update_with_params( attributes )
|
79
|
+
instance
|
77
80
|
end
|
78
81
|
end
|
79
|
-
|
82
|
+
|
83
|
+
end
|
80
84
|
end
|
81
85
|
end
|
82
86
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
namespace :generate do
|
2
|
+
|
3
|
+
desc 'Generate a Sequel model, with name=<name>'
|
4
|
+
task :model do |task|
|
5
|
+
name = ENV['name']
|
6
|
+
model_name = name.camel_case
|
7
|
+
raise "Cannot generate Default yet" if model_name == 'Default'
|
8
|
+
|
9
|
+
filename = File.expand_path "models/#{name}.rb"
|
10
|
+
if File.exist?(filename)
|
11
|
+
$stderr.puts "#{filename} already exists"
|
12
|
+
exit
|
13
|
+
end
|
14
|
+
|
15
|
+
model = <<TEXT
|
16
|
+
module #{Waves.application.name}
|
17
|
+
module Models
|
18
|
+
class #{model_name} < Default
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
TEXT
|
24
|
+
|
25
|
+
File.write( filename, model )
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -1,24 +1,16 @@
|
|
1
|
-
require File.dirname(__FILE__)
|
2
|
-
|
1
|
+
require "#{File.dirname(__FILE__)}/../../migration"
|
2
|
+
|
3
3
|
namespace :schema do
|
4
4
|
|
5
|
-
desc "Create a new Sequel Migration
|
5
|
+
desc "Create a new Sequel Migration with name=<name>"
|
6
6
|
task :migration do |task|
|
7
|
-
|
8
|
-
source = Migration.template(:sequel, ENV['template'])
|
9
|
-
destination = Migration.destination(ENV['name'])
|
10
|
-
migration_name = Migration.migration_name(ENV['name'])
|
11
|
-
|
12
|
-
context = {:class_name => migration_name.camel_case}
|
13
|
-
|
14
|
-
Migration.write_erb(context, source, destination)
|
15
|
-
|
7
|
+
Waves::Layers::ORM.create_migration_for(Sequel)
|
16
8
|
end
|
17
9
|
|
18
|
-
desc
|
10
|
+
desc "Performs Sequel migrations to version=<version>"
|
19
11
|
task :migrate do |task|
|
20
12
|
version = ENV['version']; version = version.to_i unless version.nil?
|
21
|
-
Sequel::Migrator.apply( Waves.application.database,
|
13
|
+
Sequel::Migrator.apply( Waves.application.database, Waves::Layers::ORM.migration_directory , version )
|
22
14
|
end
|
23
15
|
|
24
16
|
end
|
data/lib/layers/simple.rb
CHANGED
@@ -17,20 +17,13 @@ module Waves
|
|
17
17
|
def app.config ; Waves.config ; end
|
18
18
|
def app.configurations ; self::Configurations ; end
|
19
19
|
|
20
|
-
app.instance_eval
|
21
|
-
|
20
|
+
app.instance_eval { include AutoCode }
|
21
|
+
|
22
|
+
app.auto_create_module( :Configurations ) do
|
22
23
|
include AutoCode
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
auto_create_class true, Waves::Configurations::Default
|
27
|
-
auto_load :Mapping, :directories => [:configurations]
|
28
|
-
auto_load true, :directories => [:configurations]
|
29
|
-
auto_eval :Mapping do
|
30
|
-
extend Waves::Mapping
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
24
|
+
auto_create_class true, Waves::Configurations::Default
|
25
|
+
auto_load :Mapping, :directories => [:configurations]
|
26
|
+
auto_load true, :directories => [:configurations]
|
34
27
|
end
|
35
28
|
end
|
36
29
|
end
|
data/lib/layers/simple_errors.rb
CHANGED
@@ -9,17 +9,14 @@ module Waves
|
|
9
9
|
|
10
10
|
def self.included( app )
|
11
11
|
|
12
|
-
app.
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
handle(Waves::Dispatchers::NotFoundError) do
|
17
|
-
response.status = 404; response.body = "404 Not Found"
|
18
|
-
end
|
12
|
+
app.auto_eval :Configurations do
|
13
|
+
auto_eval :Mapping do
|
14
|
+
handle(Waves::Dispatchers::NotFoundError) do
|
15
|
+
response.status = 404; response.body = "404 Not Found"
|
19
16
|
end
|
20
17
|
end
|
21
|
-
|
22
18
|
end
|
19
|
+
|
23
20
|
end
|
24
21
|
end
|
25
22
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'haml'
|
2
|
+
|
3
|
+
module Waves
|
4
|
+
|
5
|
+
module Renderers
|
6
|
+
|
7
|
+
class Scope
|
8
|
+
include Waves::Helpers::Common
|
9
|
+
include Waves::Helpers::Model
|
10
|
+
include Waves::Helpers::TagHelper
|
11
|
+
include Waves::Helpers::UrlHelper
|
12
|
+
include Waves::Helpers::View
|
13
|
+
|
14
|
+
def <<(s)
|
15
|
+
eval("@haml_buffer", @binding).push_text s # add to rendered output
|
16
|
+
end
|
17
|
+
|
18
|
+
def capture(&block)
|
19
|
+
capture_haml(nil, &block)
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
class Haml
|
25
|
+
|
26
|
+
include Renderers::Mixin
|
27
|
+
|
28
|
+
extension :haml
|
29
|
+
|
30
|
+
def self.render( path, assigns )
|
31
|
+
engine = ::Haml::Engine.new( template( path ) )
|
32
|
+
scope = Scope.new
|
33
|
+
helper = helper( path )
|
34
|
+
scope.meta_eval { include( helper ) }
|
35
|
+
scope.instance_eval do
|
36
|
+
assigns.each { |key,val| instance_variable_set("@#{key}",val) unless key == :request }
|
37
|
+
end
|
38
|
+
engine.render(scope, assigns)
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
data/lib/runtime/application.rb
CHANGED
@@ -7,10 +7,8 @@ module Waves
|
|
7
7
|
attr_reader :application
|
8
8
|
|
9
9
|
# Register a module as a Waves application.
|
10
|
-
# Also, initialize the database connection if necessary.
|
11
10
|
def << ( app )
|
12
11
|
@application = app if Module === app
|
13
|
-
# app.database if app.respond_to? 'database'
|
14
12
|
end
|
15
13
|
|
16
14
|
def instance ; Waves::Application.instance ; end
|
data/lib/tasks/cluster.rb
CHANGED
@@ -2,7 +2,7 @@ namespace :cluster do
|
|
2
2
|
|
3
3
|
desc 'Start a cluster of waves applications.'
|
4
4
|
task :start do |task|
|
5
|
-
using_waves_src = defined?(WAVES) || ENV['WAVES'] || File.exist( File.dirname(__FILE__) / :waves )
|
5
|
+
using_waves_src = defined?(WAVES) || ENV['WAVES'] || File.exist?( File.dirname(__FILE__) / :waves )
|
6
6
|
script = using_waves_src ? :bin / 'waves-server' : 'waves-server'
|
7
7
|
( Waves::Console.config.ports || [ Waves::Console.config.port ] ).each do |port|
|
8
8
|
cmd = "#{script} -p #{port} -c #{ENV['mode']||'development'} -d"
|
data/lib/utilities/inflect.rb
CHANGED
@@ -4,189 +4,107 @@
|
|
4
4
|
# of rules for different languages
|
5
5
|
# NOTE: this is NOT implemented yet.
|
6
6
|
# plural and singular work directly with the English class
|
7
|
+
module Waves
|
8
|
+
module Inflect # :nodoc:
|
9
|
+
module InflectorMethods
|
10
|
+
|
11
|
+
# Define a general exception.
|
12
|
+
def word(singular, plural=nil)
|
13
|
+
plural = singular unless plural
|
14
|
+
singular_word(singular, plural)
|
15
|
+
plural_word(singular, plural)
|
16
|
+
end
|
7
17
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
def word(singular, plural=nil)
|
13
|
-
plural = singular unless plural
|
14
|
-
singular_word(singular, plural)
|
15
|
-
plural_word(singular, plural)
|
16
|
-
end
|
17
|
-
|
18
|
-
# Define a singularization exception.
|
19
|
-
def singular_word(singular, plural)
|
20
|
-
@singular_of[plural] = singular
|
21
|
-
end
|
22
|
-
|
23
|
-
# Define a pluralization exception.
|
24
|
-
def plural_word(singular, plural)
|
25
|
-
@plural_of[singular] = plural
|
26
|
-
end
|
27
|
-
|
28
|
-
# Define a general rule.
|
29
|
-
def rule(singular, plural)
|
30
|
-
singular_rule(singular, plural)
|
31
|
-
plural_rule(singular, plural)
|
32
|
-
end
|
33
|
-
|
34
|
-
# Define a singularization rule.
|
35
|
-
def singular_rule(singular, plural)
|
36
|
-
@singular_rules << [singular, plural]
|
37
|
-
end
|
38
|
-
|
39
|
-
# Define a plurualization rule.
|
40
|
-
def plural_rule(singular, plural)
|
41
|
-
@plural_rules << [singular, plural]
|
42
|
-
end
|
43
|
-
|
44
|
-
# Read prepared singularization rules.
|
45
|
-
def singularization_rules
|
46
|
-
return @singularization_rules if @singularization_rules
|
47
|
-
sorted = @singular_rules.sort_by{ |s, p| "#{p}".size }.reverse
|
48
|
-
@singularization_rules = sorted.collect do |s, p|
|
49
|
-
[ /#{p}$/, "#{s}" ]
|
18
|
+
# Define a singularization exception.
|
19
|
+
def singular_word(singular, plural)
|
20
|
+
@singular_of ||= {}
|
21
|
+
@singular_of[plural] = singular
|
50
22
|
end
|
51
|
-
end
|
52
23
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
@pluralization_rules = sorted.collect do |s, p|
|
58
|
-
[ /#{s}$/, "#{p}" ]
|
24
|
+
# Define a pluralization exception.
|
25
|
+
def plural_word(singular, plural)
|
26
|
+
@plural_of ||= {}
|
27
|
+
@plural_of[singular] = plural
|
59
28
|
end
|
60
|
-
end
|
61
29
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
30
|
+
# Define a general rule.
|
31
|
+
def rule(singular, plural)
|
32
|
+
singular_rule(singular, plural)
|
33
|
+
plural_rule(singular, plural)
|
34
|
+
end
|
66
35
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
36
|
+
# Define a singularization rule.
|
37
|
+
def singular_rule(singular, plural)
|
38
|
+
(@singular_rules ||= []) << [singular, plural]
|
39
|
+
end
|
71
40
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
# "tomatoes".singular #=> tomato
|
76
|
-
#
|
77
|
-
def singular(word)
|
78
|
-
if result = singular_of[word]
|
79
|
-
return result.dup
|
41
|
+
# Define a plurualization rule.
|
42
|
+
def plural_rule(singular, plural)
|
43
|
+
(@plural_rules ||= []) << [singular, plural]
|
80
44
|
end
|
81
|
-
|
82
|
-
|
83
|
-
|
45
|
+
|
46
|
+
# Read prepared singularization rules.
|
47
|
+
def singularization_rules
|
48
|
+
@singular_rules ||= []
|
49
|
+
return @singularization_rules if @singularization_rules
|
50
|
+
sorted = @singular_rules.sort_by{ |s, p| "#{p}".size }.reverse
|
51
|
+
@singularization_rules = sorted.collect do |s, p|
|
52
|
+
[ /#{p}$/, "#{s}" ]
|
53
|
+
end
|
84
54
|
end
|
85
|
-
return result
|
86
|
-
end
|
87
55
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
56
|
+
# Read prepared pluralization rules.
|
57
|
+
def pluralization_rules
|
58
|
+
@plural_rules ||= []
|
59
|
+
return @pluralization_rules if @pluralization_rules
|
60
|
+
sorted = @plural_rules.sort_by{ |s, p| "#{s}".size }.reverse
|
61
|
+
@pluralization_rules = sorted.collect do |s, p|
|
62
|
+
[ /#{s}$/, "#{p}" ]
|
63
|
+
end
|
96
64
|
end
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
65
|
+
|
66
|
+
#
|
67
|
+
def plural_of
|
68
|
+
@plural_of ||= {}
|
101
69
|
end
|
102
|
-
return result
|
103
|
-
end
|
104
|
-
end
|
105
70
|
|
106
|
-
|
107
|
-
|
108
|
-
|
71
|
+
#
|
72
|
+
def singular_of
|
73
|
+
@singular_of ||= {}
|
74
|
+
end
|
109
75
|
|
110
|
-
|
111
|
-
|
76
|
+
# Convert an English word from plural to singular.
|
77
|
+
#
|
78
|
+
# "boys".singular #=> boy
|
79
|
+
# "tomatoes".singular #=> tomato
|
80
|
+
#
|
81
|
+
def singular(word)
|
82
|
+
if result = singular_of[word]
|
83
|
+
return result.dup
|
84
|
+
end
|
85
|
+
result = word.dup
|
86
|
+
singularization_rules.each do |(match, replacement)|
|
87
|
+
break if result.gsub!(match, replacement)
|
88
|
+
end
|
89
|
+
return result
|
90
|
+
end
|
112
91
|
|
113
|
-
|
114
|
-
|
92
|
+
# Convert an English word from singular to plurel.
|
93
|
+
#
|
94
|
+
# "boy".plural #=> boys
|
95
|
+
# "tomato".plural #=> tomatoes
|
96
|
+
#
|
97
|
+
def plural(word)
|
98
|
+
if result = plural_of[word]
|
99
|
+
return result.dup
|
100
|
+
end
|
101
|
+
#return self.dup if /s$/ =~ self # ???
|
102
|
+
result = word.dup
|
103
|
+
pluralization_rules.each do |(match, replacement)|
|
104
|
+
break if result.gsub!(match, replacement)
|
105
|
+
end
|
106
|
+
return result
|
107
|
+
end
|
115
108
|
end
|
116
|
-
|
117
|
-
# One argument means singular and plural are the same.
|
118
|
-
word 'equipment'
|
119
|
-
word 'information'
|
120
|
-
word 'money'
|
121
|
-
word 'species'
|
122
|
-
word 'series'
|
123
|
-
word 'fish'
|
124
|
-
word 'sheep'
|
125
|
-
word 'moose'
|
126
|
-
word 'hovercraft'
|
127
|
-
|
128
|
-
# Two arguments defines a singular and plural exception.
|
129
|
-
word 'Swiss' , 'Swiss'
|
130
|
-
word 'life' , 'lives'
|
131
|
-
word 'wife' , 'wives'
|
132
|
-
word 'cactus' , 'cacti'
|
133
|
-
word 'goose' , 'geese'
|
134
|
-
word 'criterion' , 'criteria'
|
135
|
-
word 'alias' , 'aliases'
|
136
|
-
word 'status' , 'statuses'
|
137
|
-
word 'axis' , 'axes'
|
138
|
-
word 'crisis' , 'crises'
|
139
|
-
word 'testis' , 'testes'
|
140
|
-
word 'child' , 'children'
|
141
|
-
word 'person' , 'people'
|
142
|
-
word 'potato' , 'potatoes'
|
143
|
-
word 'tomato' , 'tomatoes'
|
144
|
-
word 'buffalo' , 'buffaloes'
|
145
|
-
word 'torpedo' , 'torpedoes'
|
146
|
-
word 'quiz' , 'quizes'
|
147
|
-
word 'matrix' , 'matrices'
|
148
|
-
word 'vertex' , 'vetices'
|
149
|
-
word 'index' , 'indices'
|
150
|
-
word 'ox' , 'oxen'
|
151
|
-
word 'mouse' , 'mice'
|
152
|
-
word 'louse' , 'lice'
|
153
|
-
word 'thesis' , 'theses'
|
154
|
-
word 'thief' , 'thieves'
|
155
|
-
word 'analysis' , 'analyses'
|
156
|
-
|
157
|
-
# One-way singularization exception (convert plural to singular).
|
158
|
-
singular_word 'cactus', 'cacti'
|
159
|
-
|
160
|
-
# General rules.
|
161
|
-
rule 'hive' , 'hives'
|
162
|
-
rule 'rf' , 'rves'
|
163
|
-
rule 'af' , 'aves'
|
164
|
-
rule 'ero' , 'eroes'
|
165
|
-
rule 'man' , 'men'
|
166
|
-
rule 'ch' , 'ches'
|
167
|
-
rule 'sh' , 'shes'
|
168
|
-
rule 'ss' , 'sses'
|
169
|
-
rule 'ta' , 'tum'
|
170
|
-
rule 'ia' , 'ium'
|
171
|
-
rule 'ra' , 'rum'
|
172
|
-
rule 'ay' , 'ays'
|
173
|
-
rule 'ey' , 'eys'
|
174
|
-
rule 'oy' , 'oys'
|
175
|
-
rule 'uy' , 'uys'
|
176
|
-
rule 'y' , 'ies'
|
177
|
-
rule 'x' , 'xes'
|
178
|
-
rule 'lf' , 'lves'
|
179
|
-
rule 'us' , 'uses'
|
180
|
-
rule '' , 's'
|
181
|
-
|
182
|
-
# One-way singular rules.
|
183
|
-
singular_rule 'of' , 'ofs' # proof
|
184
|
-
singular_rule 'o' , 'oes' # hero, heroes
|
185
|
-
singular_rule 'f' , 'ves'
|
186
|
-
|
187
|
-
# One-way plural rules.
|
188
|
-
plural_rule 'fe' , 'ves' # safe, wife
|
189
|
-
plural_rule 's' , 'ses'
|
190
109
|
end
|
191
110
|
end
|
192
|
-
|