merb 0.5.3 → 0.9.2
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/LICENSE +0 -20
- data/README +0 -277
- data/Rakefile +80 -199
- data/TODO +0 -3
- metadata +19 -438
- data/SVN_REVISION +0 -1
- data/app_generators/merb/USAGE +0 -5
- data/app_generators/merb/merb_generator.rb +0 -108
- data/app_generators/merb/templates/Rakefile +0 -124
- data/app_generators/merb/templates/app/controllers/application.rb +0 -3
- data/app_generators/merb/templates/app/controllers/exceptions.rb +0 -13
- data/app_generators/merb/templates/app/helpers/global_helper.rb +0 -5
- data/app_generators/merb/templates/app/mailers/views/layout/application.html.erb +0 -1
- data/app_generators/merb/templates/app/mailers/views/layout/application.text.erb +0 -1
- data/app_generators/merb/templates/app/parts/views/layout/application.html.erb +0 -1
- data/app_generators/merb/templates/app/views/exceptions/internal_server_error.html.erb +0 -216
- data/app_generators/merb/templates/app/views/exceptions/not_acceptable.html.erb +0 -38
- data/app_generators/merb/templates/app/views/exceptions/not_found.html.erb +0 -40
- data/app_generators/merb/templates/app/views/layout/application.html.erb +0 -11
- data/app_generators/merb/templates/config/boot.rb +0 -11
- data/app_generators/merb/templates/config/dependencies.rb +0 -41
- data/app_generators/merb/templates/config/environments/development.rb +0 -1
- data/app_generators/merb/templates/config/environments/production.rb +0 -1
- data/app_generators/merb/templates/config/environments/test.rb +0 -1
- data/app_generators/merb/templates/config/merb.yml +0 -82
- data/app_generators/merb/templates/config/merb_init.rb +0 -17
- data/app_generators/merb/templates/config/plugins.yml +0 -1
- data/app_generators/merb/templates/config/router.rb +0 -35
- data/app_generators/merb/templates/config/upload.conf +0 -0
- data/app_generators/merb/templates/public/images/merb.jpg +0 -0
- data/app_generators/merb/templates/public/merb.fcgi +0 -6
- data/app_generators/merb/templates/public/stylesheets/master.css +0 -119
- data/app_generators/merb/templates/script/destroy +0 -32
- data/app_generators/merb/templates/script/generate +0 -32
- data/app_generators/merb/templates/script/stop_merb +0 -13
- data/app_generators/merb/templates/script/win_script.cmd +0 -1
- data/app_generators/merb/templates/spec/spec.opts +0 -6
- data/app_generators/merb/templates/spec/spec_helper.rb +0 -15
- data/app_generators/merb/templates/test/test_helper.rb +0 -14
- data/app_generators/merb_plugin/USAGE +0 -5
- data/app_generators/merb_plugin/merb_plugin_generator.rb +0 -68
- data/app_generators/merb_plugin/templates/LICENSE +0 -20
- data/app_generators/merb_plugin/templates/README +0 -4
- data/app_generators/merb_plugin/templates/Rakefile +0 -35
- data/app_generators/merb_plugin/templates/TODO +0 -5
- data/app_generators/merb_plugin/templates/merbtasks.rb +0 -6
- data/app_generators/merb_plugin/templates/sampleplugin.rb +0 -10
- data/app_generators/merb_plugin/templates/sampleplugin_spec.rb +0 -7
- data/app_generators/merb_plugin/templates/spec_helper.rb +0 -2
- data/bin/merb +0 -4
- data/lib/autotest/discover.rb +0 -3
- data/lib/autotest/merb_rspec.rb +0 -80
- data/lib/merb.rb +0 -188
- data/lib/merb/abstract_controller.rb +0 -399
- data/lib/merb/assets.rb +0 -160
- data/lib/merb/assets.rb.orig +0 -119
- data/lib/merb/boot_loader.rb +0 -286
- data/lib/merb/boot_loader.rb.orig +0 -235
- data/lib/merb/caching.rb +0 -5
- data/lib/merb/caching/action_cache.rb +0 -92
- data/lib/merb/caching/fragment_cache.rb +0 -39
- data/lib/merb/caching/store/file_cache.rb +0 -90
- data/lib/merb/caching/store/memory_cache.rb +0 -85
- data/lib/merb/config.rb +0 -290
- data/lib/merb/constants.rb +0 -50
- data/lib/merb/controller.rb +0 -220
- data/lib/merb/cookies.rb +0 -95
- data/lib/merb/core_ext.rb +0 -15
- data/lib/merb/core_ext/array.rb +0 -0
- data/lib/merb/core_ext/class.rb +0 -180
- data/lib/merb/core_ext/enumerable.rb +0 -49
- data/lib/merb/core_ext/get_args.rb +0 -76
- data/lib/merb/core_ext/hash.rb +0 -306
- data/lib/merb/core_ext/inflections.rb +0 -112
- data/lib/merb/core_ext/inflector.rb +0 -275
- data/lib/merb/core_ext/kernel.rb +0 -242
- data/lib/merb/core_ext/mash.rb +0 -88
- data/lib/merb/core_ext/module.rb +0 -67
- data/lib/merb/core_ext/numeric.rb +0 -72
- data/lib/merb/core_ext/object.rb +0 -183
- data/lib/merb/core_ext/string.rb +0 -53
- data/lib/merb/core_ext/symbol.rb +0 -6
- data/lib/merb/dispatcher.rb +0 -109
- data/lib/merb/drb_server.rb +0 -19
- data/lib/merb/erubis_ext.rb +0 -10
- data/lib/merb/exceptions.rb +0 -192
- data/lib/merb/generators/merb_app/merb_app.rb +0 -22
- data/lib/merb/generators/merb_generator_helpers.rb +0 -318
- data/lib/merb/generators/merb_plugin.rb +0 -22
- data/lib/merb/logger.rb +0 -78
- data/lib/merb/mail_controller.rb +0 -268
- data/lib/merb/mailer.rb +0 -87
- data/lib/merb/mixins/basic_authentication.rb +0 -35
- data/lib/merb/mixins/controller.rb +0 -160
- data/lib/merb/mixins/erubis_capture.rb +0 -68
- data/lib/merb/mixins/general_controller.rb +0 -253
- data/lib/merb/mixins/inline_partial.rb +0 -32
- data/lib/merb/mixins/render.rb +0 -465
- data/lib/merb/mixins/responder.rb +0 -449
- data/lib/merb/mixins/view_context.rb +0 -558
- data/lib/merb/mixins/web_controller.rb +0 -36
- data/lib/merb/mongrel_handler.rb +0 -168
- data/lib/merb/part_controller.rb +0 -29
- data/lib/merb/plugins.rb +0 -16
- data/lib/merb/rack_adapter.rb +0 -37
- data/lib/merb/request.rb +0 -465
- data/lib/merb/router.rb +0 -646
- data/lib/merb/server.rb +0 -169
- data/lib/merb/session.rb +0 -23
- data/lib/merb/session/cookie_store.rb +0 -118
- data/lib/merb/session/mem_cache_session.rb +0 -131
- data/lib/merb/session/memory_session.rb +0 -176
- data/lib/merb/template.rb +0 -37
- data/lib/merb/template/erubis.rb +0 -68
- data/lib/merb/template/haml.rb +0 -87
- data/lib/merb/template/markaby.rb +0 -59
- data/lib/merb/template/xml_builder.rb +0 -50
- data/lib/merb/test/fake_request.rb +0 -74
- data/lib/merb/test/helper.rb +0 -260
- data/lib/merb/test/hpricot.rb +0 -136
- data/lib/merb/test/multipart.rb +0 -66
- data/lib/merb/test/rspec.rb +0 -18
- data/lib/merb/test/rspec_matchers/controller_matchers.rb +0 -117
- data/lib/merb/test/rspec_matchers/markup_matchers.rb +0 -98
- data/lib/merb/upload_handler.rb +0 -80
- data/lib/merb/upload_progress.rb +0 -48
- data/lib/merb/version.rb +0 -49
- data/lib/merb/view_context.rb +0 -79
- data/lib/tasks.rb +0 -7
- data/lib/tasks/merb.rake +0 -54
- data/merb_default_generators/model/USAGE +0 -0
- data/merb_default_generators/model/model_generator.rb +0 -16
- data/merb_default_generators/model/templates/new_model_template.erb +0 -5
- data/merb_default_generators/resource_controller/USAGE +0 -0
- data/merb_default_generators/resource_controller/resource_controller_generator.rb +0 -26
- data/merb_default_generators/resource_controller/templates/controller.rb +0 -30
- data/merb_default_generators/resource_controller/templates/edit.html.erb +0 -1
- data/merb_default_generators/resource_controller/templates/helper.rb +0 -5
- data/merb_default_generators/resource_controller/templates/index.html.erb +0 -1
- data/merb_default_generators/resource_controller/templates/new.html.erb +0 -1
- data/merb_default_generators/resource_controller/templates/show.html.erb +0 -1
- data/merb_generators/controller/USAGE +0 -5
- data/merb_generators/controller/controller_generator.rb +0 -16
- data/merb_generators/controller/templates/controller.rb +0 -8
- data/merb_generators/controller/templates/helper.rb +0 -5
- data/merb_generators/controller/templates/index.html.erb +0 -3
- data/merb_generators/part_controller/USAGE +0 -5
- data/merb_generators/part_controller/part_controller_generator.rb +0 -27
- data/merb_generators/part_controller/templates/controller.rb +0 -8
- data/merb_generators/part_controller/templates/helper.rb +0 -5
- data/merb_generators/part_controller/templates/index.html.erb +0 -3
- data/merb_generators/resource/USAGE +0 -0
- data/merb_generators/resource/resource_generator.rb +0 -67
- data/rspec_generators/merb_controller_test/merb_controller_test_generator.rb +0 -67
- data/rspec_generators/merb_controller_test/templates/controller_spec.rb +0 -8
- data/rspec_generators/merb_controller_test/templates/edit_spec.rb +0 -12
- data/rspec_generators/merb_controller_test/templates/helper_spec.rb +0 -5
- data/rspec_generators/merb_controller_test/templates/index_spec.rb +0 -12
- data/rspec_generators/merb_controller_test/templates/new_spec.rb +0 -12
- data/rspec_generators/merb_controller_test/templates/show_spec.rb +0 -5
- data/rspec_generators/merb_model_test/merb_model_test_generator.rb +0 -26
- data/rspec_generators/merb_model_test/templates/model_spec_template.erb +0 -7
- data/script/destroy +0 -14
- data/script/generate +0 -14
- data/spec/fixtures/config/environments/environment_config_test.yml +0 -1
- data/spec/fixtures/config/merb.yml +0 -18
- data/spec/fixtures/controllers/dispatch_spec_controllers.rb +0 -235
- data/spec/fixtures/controllers/render_spec_controllers.rb +0 -184
- data/spec/fixtures/foo.rb +0 -3
- data/spec/fixtures/mailers/views/layout/application.html.erb +0 -3
- data/spec/fixtures/mailers/views/layout/application.text.erb +0 -3
- data/spec/fixtures/mailers/views/test_mail_controller/eighth.html.erb +0 -1
- data/spec/fixtures/mailers/views/test_mail_controller/eighth.text.erb +0 -1
- data/spec/fixtures/mailers/views/test_mail_controller/first.html.erb +0 -1
- data/spec/fixtures/mailers/views/test_mail_controller/first.text.erb +0 -1
- data/spec/fixtures/mailers/views/test_mail_controller/ninth.html.erb +0 -1
- data/spec/fixtures/mailers/views/test_mail_controller/ninth.text.erb +0 -1
- data/spec/fixtures/mailers/views/test_mail_controller/second.text.erb +0 -1
- data/spec/fixtures/mailers/views/test_mail_controller/third.html.erb +0 -1
- data/spec/fixtures/models/router_spec_models.rb +0 -30
- data/spec/fixtures/parts/views/layout/todo_part.html.erb +0 -3
- data/spec/fixtures/parts/views/layout/todo_part.xml.erb +0 -3
- data/spec/fixtures/parts/views/todo_part/formatted_output.html.erb +0 -1
- data/spec/fixtures/parts/views/todo_part/formatted_output.js.erb +0 -1
- data/spec/fixtures/parts/views/todo_part/formatted_output.xml.erb +0 -1
- data/spec/fixtures/parts/views/todo_part/list.html.erb +0 -3
- data/spec/fixtures/sample.txt +0 -1
- data/spec/fixtures/views/erubis.html.erb +0 -1
- data/spec/fixtures/views/examples/_erubis.html.erb +0 -1
- data/spec/fixtures/views/examples/_haml.html.haml +0 -1
- data/spec/fixtures/views/examples/_markaby.html.mab +0 -1
- data/spec/fixtures/views/examples/_throw_content.html.erb +0 -6
- data/spec/fixtures/views/examples/hello.xml.builder +0 -1
- data/spec/fixtures/views/examples/js.js.erb +0 -1
- data/spec/fixtures/views/examples/template_catch_content.html.erb +0 -15
- data/spec/fixtures/views/examples/template_catch_content_from_partial.html.erb +0 -6
- data/spec/fixtures/views/examples/template_throw_content.html.erb +0 -10
- data/spec/fixtures/views/examples/template_throw_content_without_block.html.erb +0 -3
- data/spec/fixtures/views/exceptions/admin_access_required.html.erb +0 -1
- data/spec/fixtures/views/extension_template_controller/_nested_js.js.erb +0 -1
- data/spec/fixtures/views/extension_template_controller/_nested_xml.xml.erb +0 -1
- data/spec/fixtures/views/extension_template_controller/_render_partial_multiple_times.html.erb +0 -1
- data/spec/fixtures/views/extension_template_controller/erubis_templates.html.erb +0 -1
- data/spec/fixtures/views/extension_template_controller/erubis_templates.js.erb +0 -1
- data/spec/fixtures/views/extension_template_controller/erubis_templates.rhtml +0 -1
- data/spec/fixtures/views/extension_template_controller/erubis_templates.xml.erb +0 -1
- data/spec/fixtures/views/extension_template_controller/haml_index.html.haml +0 -0
- data/spec/fixtures/views/extension_template_controller/haml_templates.html.haml +0 -1
- data/spec/fixtures/views/extension_template_controller/haml_templates.js.haml +0 -1
- data/spec/fixtures/views/extension_template_controller/haml_templates.xml.haml +0 -1
- data/spec/fixtures/views/extension_template_controller/index.html.erb +0 -0
- data/spec/fixtures/views/extension_template_controller/markaby_index.html.mab +0 -0
- data/spec/fixtures/views/extension_template_controller/markaby_templates.html.mab +0 -1
- data/spec/fixtures/views/extension_template_controller/markaby_templates.js.mab +0 -1
- data/spec/fixtures/views/extension_template_controller/markaby_templates.xml.mab +0 -1
- data/spec/fixtures/views/extension_template_controller/render_multiple_partials.html.erb +0 -4
- data/spec/fixtures/views/extension_template_controller/render_nested_js.js.erb +0 -1
- data/spec/fixtures/views/extension_template_controller/render_nested_xml.xml.erb +0 -1
- data/spec/fixtures/views/haml.html.haml +0 -1
- data/spec/fixtures/views/haml.xml.haml +0 -2
- data/spec/fixtures/views/layout/application.html.erb +0 -1
- data/spec/fixtures/views/layout/application.xml.erb +0 -1
- data/spec/fixtures/views/layout/nested/example.html.erb +0 -1
- data/spec/fixtures/views/markaby.html.mab +0 -1
- data/spec/fixtures/views/nested/example/test.html.erb +0 -1
- data/spec/fixtures/views/partials/_erubis.html.erb +0 -1
- data/spec/fixtures/views/partials/_erubis_collection.html.erb +0 -1
- data/spec/fixtures/views/partials/_erubis_collection_with_locals.html.erb +0 -1
- data/spec/fixtures/views/partials/_erubis_new.html.erb +0 -1
- data/spec/fixtures/views/partials/_haml.html.haml +0 -1
- data/spec/fixtures/views/partials/_haml_collection.html.haml +0 -1
- data/spec/fixtures/views/partials/_haml_collection_with_locals.html.haml +0 -1
- data/spec/fixtures/views/partials/_haml_new.html.haml +0 -1
- data/spec/fixtures/views/partials/_markaby.html.mab +0 -1
- data/spec/fixtures/views/partials/_markaby_collection.html.mab +0 -1
- data/spec/fixtures/views/partials/_markaby_collection_with_locals.html.mab +0 -1
- data/spec/fixtures/views/partials/_markaby_new.html.mab +0 -1
- data/spec/fixtures/views/render_object_controller/render_object_with_template.html.erb +0 -1
- data/spec/fixtures/views/render_object_controller/render_object_with_template.js.erb +0 -1
- data/spec/fixtures/views/render_object_controller/render_object_with_template.xml.erb +0 -1
- data/spec/fixtures/views/template_views/interface__buffer_erubis.html.erb +0 -4
- data/spec/fixtures/views/template_views/interface__buffer_haml.html.haml +0 -7
- data/spec/fixtures/views/template_views/interface__buffer_markaby.html.mab +0 -7
- data/spec/fixtures/views/template_views/interface_capture_erubis.html.erb +0 -15
- data/spec/fixtures/views/template_views/interface_capture_haml.html.haml +0 -15
- data/spec/fixtures/views/template_views/interface_capture_markaby.html.mab +0 -4
- data/spec/fixtures/views/template_views/interface_concat_erubis.html.erb +0 -12
- data/spec/fixtures/views/template_views/interface_concat_haml.html.haml +0 -11
- data/spec/fixtures/views/template_views/interface_concat_markaby.html.mab +0 -14
- data/spec/fixtures/views/test.dir/the_template.html.erb +0 -1
- data/spec/merb/abstract_controller_spec.rb +0 -38
- data/spec/merb/assets_spec.rb +0 -207
- data/spec/merb/caching_spec.rb +0 -102
- data/spec/merb/config_spec.rb +0 -29
- data/spec/merb/controller_filters_spec.rb +0 -253
- data/spec/merb/controller_spec.rb +0 -126
- data/spec/merb/cookie_store_spec.rb +0 -72
- data/spec/merb/cookies_spec.rb +0 -96
- data/spec/merb/core_ext/class_spec.rb +0 -97
- data/spec/merb/core_ext/enumerable_spec.rb +0 -27
- data/spec/merb/core_ext/hash_spec.rb +0 -251
- data/spec/merb/core_ext/inflector_spec.rb +0 -34
- data/spec/merb/core_ext/kernel_spec.rb +0 -25
- data/spec/merb/core_ext/numeric_spec.rb +0 -26
- data/spec/merb/core_ext/object_spec.rb +0 -47
- data/spec/merb/core_ext/string_spec.rb +0 -22
- data/spec/merb/core_ext/symbol_spec.rb +0 -7
- data/spec/merb/dependency_spec.rb +0 -22
- data/spec/merb/dispatch_spec.rb +0 -528
- data/spec/merb/fake_request_spec.rb +0 -80
- data/spec/merb/generator_spec.rb +0 -248
- data/spec/merb/handler_spec.rb +0 -169
- data/spec/merb/mail_controller_spec.rb +0 -177
- data/spec/merb/mailer_spec.rb +0 -87
- data/spec/merb/multipart_spec.rb +0 -50
- data/spec/merb/part_controller_spec.rb +0 -124
- data/spec/merb/plugins_spec.rb +0 -80
- data/spec/merb/render_spec.rb +0 -469
- data/spec/merb/request_spec.rb +0 -287
- data/spec/merb/responder_spec.rb +0 -562
- data/spec/merb/router_spec.rb +0 -900
- data/spec/merb/server_spec.rb +0 -19
- data/spec/merb/template_spec.rb +0 -41
- data/spec/merb/upload_handler_spec.rb +0 -108
- data/spec/merb/version_spec.rb +0 -33
- data/spec/merb/view_context_spec.rb +0 -366
- data/spec/spec_generator_helper.rb +0 -34
- data/spec/spec_helper.rb +0 -101
- data/spec/spec_helpers/url_shared_behaviour.rb +0 -112
- data/test_unit_generators/merb_controller_test/merb_controller_test_generator.rb +0 -53
- data/test_unit_generators/merb_controller_test/templates/functional_test.rb +0 -17
- data/test_unit_generators/merb_controller_test/templates/helper_test.rb +0 -9
- data/test_unit_generators/merb_model_test/merb_model_test_generator.rb +0 -29
- data/test_unit_generators/merb_model_test/templates/model_test_unit_template.erb +0 -9
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
module Enumerable
|
|
2
|
-
|
|
3
|
-
# Abstract the common pattern of injecting a hash into a block to accumulate
|
|
4
|
-
# and return the injected hash.
|
|
5
|
-
#
|
|
6
|
-
# Both of these are equivalent
|
|
7
|
-
# [1,2,3].inject({}){|m,i| m[i] = i; m }
|
|
8
|
-
# [1,2,3].injecting({}){|m,i| m[i] = i }
|
|
9
|
-
# => {1=>1, 2=>2, 3=>3}
|
|
10
|
-
#
|
|
11
|
-
# The main difference is with injecting you do not have to end the block
|
|
12
|
-
# with ;m to return the accumulated hash m. In this sense it is very much
|
|
13
|
-
# like Object#returning
|
|
14
|
-
def injecting(s)
|
|
15
|
-
inject(s) do |k, i|
|
|
16
|
-
yield(k, i); k
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
# Look for any of an array of things inside another array (or any Enumerable).
|
|
21
|
-
#
|
|
22
|
-
# ['louie', 'bert'].include_any?('louie', 'chicken')
|
|
23
|
-
# => true
|
|
24
|
-
def include_any?(*args)
|
|
25
|
-
args.any? {|arg| self.include?(arg) }
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
#
|
|
30
|
-
# Returns a hash, which keys are evaluated result from the
|
|
31
|
-
# block, and values are arrays of elements in <i>enum</i>
|
|
32
|
-
# corresponding to the key.
|
|
33
|
-
#
|
|
34
|
-
# (1..6).group_by {|i| i%3} #=> {0=>[3, 6], 1=>[1, 4], 2=>[2, 5]}
|
|
35
|
-
#
|
|
36
|
-
# This is included in Ruby 1.9
|
|
37
|
-
# http://www.ruby-doc.org/core-1.9/classes/Enumerable.html#M002672
|
|
38
|
-
#
|
|
39
|
-
# Implementation from Ruby on Rails:
|
|
40
|
-
# trunk/activesupport/lib/active_support/core_ext/enumerable.rb
|
|
41
|
-
# [rev 5334]
|
|
42
|
-
#
|
|
43
|
-
def group_by
|
|
44
|
-
inject({}) do |groups, element|
|
|
45
|
-
(groups[yield(element)] ||= []) << element
|
|
46
|
-
groups
|
|
47
|
-
end
|
|
48
|
-
end if RUBY_VERSION < '1.9'
|
|
49
|
-
end
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
begin
|
|
2
|
-
require 'ruby2ruby'
|
|
3
|
-
|
|
4
|
-
class ParseTreeArray < Array #:nodoc:
|
|
5
|
-
def self.translate(*args)
|
|
6
|
-
self.new(ParseTree.translate(*args))
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def deep_array_node(type = nil)
|
|
10
|
-
each do |node|
|
|
11
|
-
return ParseTreeArray.new(node) if node.is_a?(Array) && (!type || node[0] == type)
|
|
12
|
-
next unless node.is_a?(Array)
|
|
13
|
-
return ParseTreeArray.new(node).deep_array_node(type)
|
|
14
|
-
end
|
|
15
|
-
nil
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def arg_nodes
|
|
19
|
-
self[1..-1].inject([]) do |sum,item|
|
|
20
|
-
sum << [item] unless item.is_a?(Array)
|
|
21
|
-
sum
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def get_args
|
|
26
|
-
arg_node = deep_array_node(:args)
|
|
27
|
-
return nil unless arg_node
|
|
28
|
-
args = arg_node.arg_nodes
|
|
29
|
-
default_node = arg_node.deep_array_node(:block)
|
|
30
|
-
return args unless default_node
|
|
31
|
-
lasgns = default_node[1..-1]
|
|
32
|
-
lasgns.each do |asgn|
|
|
33
|
-
args.assoc(asgn[1]) << eval(RubyToRuby.new.process(asgn[2]))
|
|
34
|
-
end
|
|
35
|
-
args
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
# Used in mapping controller arguments to the params hash.
|
|
41
|
-
# NOTE: You must have the 'ruby2ruby' gem installed for this to work.
|
|
42
|
-
# Example:
|
|
43
|
-
# (In PostsController)
|
|
44
|
-
# def show(id) #=> id is the same as params[:id]
|
|
45
|
-
|
|
46
|
-
module GetArgs
|
|
47
|
-
|
|
48
|
-
# Returns an array of method arguments and their default values
|
|
49
|
-
# Example:
|
|
50
|
-
# class Example
|
|
51
|
-
# def hello(one,two="two",three)
|
|
52
|
-
# end
|
|
53
|
-
#
|
|
54
|
-
# def goodbye
|
|
55
|
-
# end
|
|
56
|
-
# end
|
|
57
|
-
#
|
|
58
|
-
# Example.instance_method(:hello).get_args #=> [[:one], [:two, "two"], [:three, "three"]]
|
|
59
|
-
# Example.instance_method(:goodbye).get_args #=> nil
|
|
60
|
-
def get_args
|
|
61
|
-
klass, meth = self.to_s.split(/ /).to_a[1][0..-2].split("#")
|
|
62
|
-
# Remove stupidity for #<Method: Class(Object)#foo>
|
|
63
|
-
klass = $` if klass =~ /\(/
|
|
64
|
-
ParseTreeArray.translate(Object.const_get(klass), meth).get_args
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
class UnboundMethod #:nodoc:
|
|
69
|
-
include GetArgs
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
class Method #:nodoc:
|
|
73
|
-
include GetArgs
|
|
74
|
-
end
|
|
75
|
-
rescue LoadError
|
|
76
|
-
end
|
data/lib/merb/core_ext/hash.rb
DELETED
|
@@ -1,306 +0,0 @@
|
|
|
1
|
-
# require 'hpricot'
|
|
2
|
-
|
|
3
|
-
class Hash
|
|
4
|
-
class << self
|
|
5
|
-
# Converts valid XML into a Ruby Hash structure.
|
|
6
|
-
# <tt>xml</tt>:: A string representation of valid XML
|
|
7
|
-
#
|
|
8
|
-
# == Typecasting
|
|
9
|
-
# Typecasting is performed on elements that have a "<tt>type</tt>" attribute of
|
|
10
|
-
# <tt>integer</tt>::
|
|
11
|
-
# <tt>boolean</tt>:: anything other than "true" evaluates to false
|
|
12
|
-
# <tt>datetime</tt>:: Returns a Time object. See +Time+ documentation for valid Time strings
|
|
13
|
-
# <tt>date</tt>:: Returns a Date object. See +Date+ documentation for valid Date strings
|
|
14
|
-
#
|
|
15
|
-
# Keys are automatically converted to +snake_case+
|
|
16
|
-
#
|
|
17
|
-
# == Caveats
|
|
18
|
-
# * Mixed content tags are assumed to be text and any xml tags are kept as a String
|
|
19
|
-
# * Any attributes other than type on a node containing a text node will be discarded
|
|
20
|
-
#
|
|
21
|
-
# == Examples
|
|
22
|
-
#
|
|
23
|
-
# === Standard
|
|
24
|
-
# <user gender='m'>
|
|
25
|
-
# <age type='integer'>35</age>
|
|
26
|
-
# <name>Home Simpson</name>
|
|
27
|
-
# <dob type='date'>1988-01-01</dob>
|
|
28
|
-
# <joined-at type='datetime'>2000-04-28 23:01</joined-at>
|
|
29
|
-
# <is-cool type='boolean'>true</is-cool>
|
|
30
|
-
# </user>
|
|
31
|
-
#
|
|
32
|
-
# evaluates to
|
|
33
|
-
#
|
|
34
|
-
# { "user" =>
|
|
35
|
-
# { "gender" => "m",
|
|
36
|
-
# "age" => 35,
|
|
37
|
-
# "name" => "Home Simpson",
|
|
38
|
-
# "dob" => DateObject( 1998-01-01 ),
|
|
39
|
-
# "joined_at" => TimeObject( 2000-04-28 23:01),
|
|
40
|
-
# "is_cool" => true
|
|
41
|
-
# }
|
|
42
|
-
# }
|
|
43
|
-
#
|
|
44
|
-
# === Mixed Content
|
|
45
|
-
# <story>
|
|
46
|
-
# A Quick <em>brown</em> Fox
|
|
47
|
-
# </story>
|
|
48
|
-
#
|
|
49
|
-
# evaluates to
|
|
50
|
-
# { "story" => "A Quick <em>brown</em> Fox" }
|
|
51
|
-
#
|
|
52
|
-
# === Attributes other than type on a node containing text
|
|
53
|
-
# <story is-good='fasle'>
|
|
54
|
-
# A Quick <em>brown</em> Fox
|
|
55
|
-
# </story>
|
|
56
|
-
#
|
|
57
|
-
# evaluates to
|
|
58
|
-
# { "story" => "A Quick <em>brown</em> Fox" }
|
|
59
|
-
#
|
|
60
|
-
# <bicep unit='inches' type='integer'>60</bicep>
|
|
61
|
-
#
|
|
62
|
-
# evaluates with a typecast to an integer. But ignores the unit attribute
|
|
63
|
-
# { "bicep" => 60 }
|
|
64
|
-
def from_xml( xml )
|
|
65
|
-
ToHashParser.from_xml(xml)
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
# convert this hash into a Mash for string or symbol key access
|
|
70
|
-
def to_mash
|
|
71
|
-
hash = Mash.new(self)
|
|
72
|
-
hash.default = default
|
|
73
|
-
hash
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
# Convert this hash to a query string:
|
|
77
|
-
#
|
|
78
|
-
# { :name => "Bob",
|
|
79
|
-
# :address => {
|
|
80
|
-
# :street => '111 Ruby Ave.',
|
|
81
|
-
# :city => 'Ruby Central',
|
|
82
|
-
# :phones => ['111-111-1111', '222-222-2222']
|
|
83
|
-
# }
|
|
84
|
-
# }.to_params
|
|
85
|
-
# #=> "name=Bob&address[city]=Ruby Central&address[phones]=111-111-1111222-222-2222&address[street]=111 Ruby Ave."
|
|
86
|
-
#
|
|
87
|
-
def to_params
|
|
88
|
-
params = ''
|
|
89
|
-
stack = []
|
|
90
|
-
|
|
91
|
-
each do |k, v|
|
|
92
|
-
if v.is_a?(Hash)
|
|
93
|
-
stack << [k,v]
|
|
94
|
-
else
|
|
95
|
-
params << "#{k}=#{v}&"
|
|
96
|
-
end
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
stack.each do |parent, hash|
|
|
100
|
-
hash.each do |k, v|
|
|
101
|
-
if v.is_a?(Hash)
|
|
102
|
-
stack << ["#{parent}[#{k}]", v]
|
|
103
|
-
else
|
|
104
|
-
params << "#{parent}[#{k}]=#{v}&"
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
params.chop! # trailing &
|
|
110
|
-
params
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
# Returns a new Hash with only the selected keys:
|
|
114
|
-
#
|
|
115
|
-
# { :one => 1, :two => 2, :three => 3 }.only(:one)
|
|
116
|
-
# #=> { :one => 1 }
|
|
117
|
-
def only(*allowed)
|
|
118
|
-
reject { |k,v| !allowed.include?(k) }
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
# Returns a new hash without the selected keys:
|
|
122
|
-
#
|
|
123
|
-
# { :one => 1, :two => 2, :three => 3 }.except(:one)
|
|
124
|
-
# #=> { :two => 2, :three => 3 }
|
|
125
|
-
#
|
|
126
|
-
def except(*rejected)
|
|
127
|
-
reject { |k,v| rejected.include?(k) }
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
# Converts the hash into xml attributes
|
|
131
|
-
#
|
|
132
|
-
# { :one => "ONE", "two"=>"TWO" }.to_xml_attributes
|
|
133
|
-
# #=> 'one="ONE" two="TWO"'
|
|
134
|
-
#
|
|
135
|
-
def to_xml_attributes
|
|
136
|
-
map do |k,v|
|
|
137
|
-
%{#{k.to_s.camelize.sub(/^(.{1,1})/) { |m| m.downcase }}="#{v}"}
|
|
138
|
-
end.join(' ')
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
alias_method :to_html_attributes, :to_xml_attributes
|
|
142
|
-
|
|
143
|
-
# Adds the given class symbol or string to the hash in the
|
|
144
|
-
# :class key. This will add a html class if there are already any existing
|
|
145
|
-
# or create the key and add this as the first class
|
|
146
|
-
#
|
|
147
|
-
# @hash[:class] #=> nil
|
|
148
|
-
# @hash.add_html_class!(:selected) #=> @hash[:class] == "selected"
|
|
149
|
-
#
|
|
150
|
-
# @hash.add_html_class!("class1 class2") #=> @hash[:class] == "selected class1 class2"
|
|
151
|
-
#
|
|
152
|
-
def add_html_class!(html_class)
|
|
153
|
-
if self[:class]
|
|
154
|
-
self[:class] = "#{self[:class]} #{html_class}"
|
|
155
|
-
else
|
|
156
|
-
self[:class] = html_class.to_s
|
|
157
|
-
end
|
|
158
|
-
end
|
|
159
|
-
|
|
160
|
-
# Destructively convert all keys which respond_to?(:to_sym) to symbols.
|
|
161
|
-
# Works recursively if given nested hashes.
|
|
162
|
-
#
|
|
163
|
-
# { 'one' => 1, 'two' => 2 }.symbolize_keys!
|
|
164
|
-
# #=> { :one => 1, :two => 2 }
|
|
165
|
-
#
|
|
166
|
-
def symbolize_keys!
|
|
167
|
-
each do |k,v|
|
|
168
|
-
sym = k.respond_to?(:to_sym) ? k.to_sym : k
|
|
169
|
-
self[sym] = Hash === v ? v.symbolize_keys! : v
|
|
170
|
-
delete(k) unless k == sym
|
|
171
|
-
end
|
|
172
|
-
self
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
# Destructively and non-recursively convert each key to an uppercase string.
|
|
176
|
-
#
|
|
177
|
-
# { :name => "Bob", "age" => 12, "nick" => "Bobinator" }.environmentize_keys!
|
|
178
|
-
# #=> { "NAME" => "Bob", "NICK" => "Bobinator", "AGE" => 12 }
|
|
179
|
-
#
|
|
180
|
-
def environmentize_keys!
|
|
181
|
-
keys.each do |key|
|
|
182
|
-
self[key.to_s.upcase] = delete(key)
|
|
183
|
-
end
|
|
184
|
-
self
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
def respond_to?(method, include_private = false)
|
|
188
|
-
return true if keys.include?(method)
|
|
189
|
-
super(method, include_private)
|
|
190
|
-
end
|
|
191
|
-
end
|
|
192
|
-
|
|
193
|
-
require 'rexml/parsers/streamparser'
|
|
194
|
-
require 'rexml/parsers/baseparser'
|
|
195
|
-
require 'rexml/light/node'
|
|
196
|
-
|
|
197
|
-
# This is a slighly modified version of the XMLUtilityNode from
|
|
198
|
-
# http://merb.devjavu.com/projects/merb/ticket/95 (has.sox@gmail.com)
|
|
199
|
-
# It's mainly just adding vowels, as I ht cd wth n vwls :)
|
|
200
|
-
# This represents the hard part of the work, all I did was change the underlying
|
|
201
|
-
# parser
|
|
202
|
-
class REXMLUtilityNode # :nodoc:
|
|
203
|
-
attr_accessor :name, :attributes, :children
|
|
204
|
-
|
|
205
|
-
def initialize(name, attributes = {})
|
|
206
|
-
@name = name.tr("-", "_")
|
|
207
|
-
@attributes = undasherize_keys(attributes)
|
|
208
|
-
@children = []
|
|
209
|
-
@text = false
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
def add_node(node)
|
|
213
|
-
@text = true if node.is_a? String
|
|
214
|
-
@children << node
|
|
215
|
-
end
|
|
216
|
-
|
|
217
|
-
def to_hash
|
|
218
|
-
if @text
|
|
219
|
-
return { name => typecast_value( translate_xml_entities( inner_html ) ) }
|
|
220
|
-
else
|
|
221
|
-
#change repeating groups into an array
|
|
222
|
-
# group by the first key of each element of the array to find repeating groups
|
|
223
|
-
groups = @children.group_by{ |c| c.name }
|
|
224
|
-
|
|
225
|
-
hash = {}
|
|
226
|
-
groups.each do |key, values|
|
|
227
|
-
if values.size == 1
|
|
228
|
-
hash.merge! values.first
|
|
229
|
-
else
|
|
230
|
-
hash.merge! key => values.map { |element| element.to_hash[key] }
|
|
231
|
-
end
|
|
232
|
-
end
|
|
233
|
-
|
|
234
|
-
# merge the arrays, including attributes
|
|
235
|
-
hash.merge! attributes unless attributes.empty?
|
|
236
|
-
|
|
237
|
-
{ name => hash }
|
|
238
|
-
end
|
|
239
|
-
end
|
|
240
|
-
|
|
241
|
-
def typecast_value(value)
|
|
242
|
-
return value unless attributes["type"]
|
|
243
|
-
|
|
244
|
-
case attributes["type"]
|
|
245
|
-
when "integer" then value.to_i
|
|
246
|
-
when "boolean" then value.strip == "true"
|
|
247
|
-
when "datetime" then ::Time.parse(value).utc
|
|
248
|
-
when "date" then ::Date.parse(value)
|
|
249
|
-
else value
|
|
250
|
-
end
|
|
251
|
-
end
|
|
252
|
-
|
|
253
|
-
def translate_xml_entities(value)
|
|
254
|
-
value.gsub(/</, "<").
|
|
255
|
-
gsub(/>/, ">").
|
|
256
|
-
gsub(/"/, '"').
|
|
257
|
-
gsub(/'/, "'").
|
|
258
|
-
gsub(/&/, "&")
|
|
259
|
-
end
|
|
260
|
-
|
|
261
|
-
def undasherize_keys(params)
|
|
262
|
-
params.keys.each do |key, vvalue|
|
|
263
|
-
params[key.tr("-", "_")] = params.delete(key)
|
|
264
|
-
end
|
|
265
|
-
params
|
|
266
|
-
end
|
|
267
|
-
|
|
268
|
-
def inner_html
|
|
269
|
-
@children.join
|
|
270
|
-
end
|
|
271
|
-
|
|
272
|
-
def to_html
|
|
273
|
-
"<#{name}#{attributes.to_xml_attributes}>#{inner_html}</#{name}>"
|
|
274
|
-
end
|
|
275
|
-
|
|
276
|
-
def to_s
|
|
277
|
-
to_html
|
|
278
|
-
end
|
|
279
|
-
end
|
|
280
|
-
|
|
281
|
-
class ToHashParser # :nodoc:
|
|
282
|
-
def self.from_xml(xml)
|
|
283
|
-
stack = []
|
|
284
|
-
parser = REXML::Parsers::BaseParser.new(xml)
|
|
285
|
-
|
|
286
|
-
while true
|
|
287
|
-
event = parser.pull
|
|
288
|
-
case event[0]
|
|
289
|
-
when :end_document
|
|
290
|
-
break
|
|
291
|
-
when :end_doctype, :start_doctype
|
|
292
|
-
# do nothing
|
|
293
|
-
when :start_element
|
|
294
|
-
stack.push REXMLUtilityNode.new(event[1], event[2])
|
|
295
|
-
when :end_element
|
|
296
|
-
if stack.size > 1
|
|
297
|
-
temp = stack.pop
|
|
298
|
-
stack.last.add_node(temp)
|
|
299
|
-
end
|
|
300
|
-
when :text, :cdata
|
|
301
|
-
stack.last.add_node(event[1]) unless event[1].strip.length == 0
|
|
302
|
-
end
|
|
303
|
-
end
|
|
304
|
-
stack.pop.to_hash
|
|
305
|
-
end
|
|
306
|
-
end
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
Inflector.inflections do |inflect|
|
|
2
|
-
inflect.plural(/$/, 's')
|
|
3
|
-
inflect.plural(/s$/i, 's')
|
|
4
|
-
inflect.plural(/(ax|test)is$/i, '\1es')
|
|
5
|
-
inflect.plural(/(octop|vir)us$/i, '\1i')
|
|
6
|
-
inflect.plural(/(alias|status)$/i, '\1es')
|
|
7
|
-
inflect.plural(/(bu)s$/i, '\1ses')
|
|
8
|
-
inflect.plural(/(buffal|tomat)o$/i, '\1oes')
|
|
9
|
-
inflect.plural(/([ti])um$/i, '\1a')
|
|
10
|
-
inflect.plural(/sis$/i, 'ses')
|
|
11
|
-
inflect.plural(/(?:([^f])fe|([lr])f)$/i, '\1\2ves')
|
|
12
|
-
inflect.plural(/(hive)$/i, '\1s')
|
|
13
|
-
inflect.plural(/([^aeiouy]|qu)y$/i, '\1ies')
|
|
14
|
-
inflect.plural(/(x|ch|ss|sh)$/i, '\1es')
|
|
15
|
-
inflect.plural(/(matr|vert|ind)ix|ex$/i, '\1ices')
|
|
16
|
-
inflect.plural(/([m|l])ouse$/i, '\1ice')
|
|
17
|
-
inflect.plural(/^(ox)$/i, '\1en')
|
|
18
|
-
inflect.plural(/(quiz)$/i, '\1zes')
|
|
19
|
-
|
|
20
|
-
inflect.singular(/s$/i, '')
|
|
21
|
-
inflect.singular(/(n)ews$/i, '\1ews')
|
|
22
|
-
inflect.singular(/([ti])a$/i, '\1um')
|
|
23
|
-
inflect.singular(/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i, '\1\2sis')
|
|
24
|
-
inflect.singular(/(^analy)ses$/i, '\1sis')
|
|
25
|
-
inflect.singular(/([^f])ves$/i, '\1fe')
|
|
26
|
-
inflect.singular(/(hive)s$/i, '\1')
|
|
27
|
-
inflect.singular(/(tive)s$/i, '\1')
|
|
28
|
-
inflect.singular(/([lr])ves$/i, '\1f')
|
|
29
|
-
inflect.singular(/([^aeiouy]|qu)ies$/i, '\1y')
|
|
30
|
-
inflect.singular(/(s)eries$/i, '\1eries')
|
|
31
|
-
inflect.singular(/(m)ovies$/i, '\1ovie')
|
|
32
|
-
inflect.singular(/(x|ch|ss|sh)es$/i, '\1')
|
|
33
|
-
inflect.singular(/([m|l])ice$/i, '\1ouse')
|
|
34
|
-
inflect.singular(/(bus)es$/i, '\1')
|
|
35
|
-
inflect.singular(/(o)es$/i, '\1')
|
|
36
|
-
inflect.singular(/(shoe)s$/i, '\1')
|
|
37
|
-
inflect.singular(/(cris|ax|test)es$/i, '\1is')
|
|
38
|
-
inflect.singular(/(octop|vir)i$/i, '\1us')
|
|
39
|
-
inflect.singular(/(alias|status)es$/i, '\1')
|
|
40
|
-
inflect.singular(/^(ox)en/i, '\1')
|
|
41
|
-
inflect.singular(/(vert|ind)ices$/i, '\1ex')
|
|
42
|
-
inflect.singular(/(matr)ices$/i, '\1ix')
|
|
43
|
-
inflect.singular(/(quiz)zes$/i, '\1')
|
|
44
|
-
|
|
45
|
-
inflect.irregular('person', 'people')
|
|
46
|
-
inflect.irregular('man', 'men')
|
|
47
|
-
inflect.irregular('child', 'children')
|
|
48
|
-
inflect.irregular('sex', 'sexes')
|
|
49
|
-
inflect.irregular('move', 'moves')
|
|
50
|
-
|
|
51
|
-
inflect.uncountable(%w(equipment information rice money species series fish sheep))
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
module Inflections #:nodoc:
|
|
55
|
-
|
|
56
|
-
def pluralize
|
|
57
|
-
Inflector.pluralize(self)
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def singularize
|
|
61
|
-
Inflector.singularize(self)
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def camelize(first_letter = :upper)
|
|
65
|
-
case first_letter
|
|
66
|
-
when :upper then Inflector.camelize(self, true)
|
|
67
|
-
when :lower then Inflector.camelize(self, false)
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
alias_method :camelcase, :camelize
|
|
71
|
-
|
|
72
|
-
def titleize
|
|
73
|
-
Inflector.titleize(self)
|
|
74
|
-
end
|
|
75
|
-
alias_method :titlecase, :titleize
|
|
76
|
-
|
|
77
|
-
def underscore
|
|
78
|
-
Inflector.underscore(self)
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
def dasherize
|
|
82
|
-
Inflector.dasherize(self)
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
def demodulize
|
|
86
|
-
Inflector.demodulize(self)
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def tableize
|
|
90
|
-
Inflector.tableize(self)
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
def classify
|
|
94
|
-
Inflector.classify(self)
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
def humanize
|
|
98
|
-
Inflector.humanize(self)
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
def foreign_key(separate_class_name_and_id_with_underscore = true)
|
|
102
|
-
Inflector.foreign_key(self, separate_class_name_and_id_with_underscore)
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
def constantize
|
|
106
|
-
Inflector.constantize(self)
|
|
107
|
-
end
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
class String
|
|
111
|
-
include Inflections
|
|
112
|
-
end
|