Compare commits

..

3764 Commits

Author SHA1 Message Date
Jeremy Kemper
c548e21365 Bump git versions to 3.0.0.beta1 since we've released 2010-02-05 09:24:12 -08:00
Jeremy Kemper
a81a2a29ab Bump arel dep 2010-02-05 09:21:45 -08:00
Jeremy Kemper
f1e5642fb7 Revert "Link to main Arel repository"
This reverts commit 2036268679.
2010-02-05 09:12:35 -08:00
Paul Rosania
363a752c36 install ActionController::UrlFor before environment is parsed, to provide ActionMailer#default_url_options=
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2010-02-05 00:08:56 -08:00
Jeremy Kemper
459ecaf95d Submarine the rake-gemcutter dep in Rakefiles 2010-02-05 00:03:03 -08:00
Jeremy Kemper
ae4cb0641e Add the dummy rails3b gemspec that pulls in non-prerelease deps 2010-02-04 23:53:10 -08:00
Jeremy Kemper
b1f30ef048 Kill default require_path 2010-02-04 19:13:07 -08:00
Jeremy Kemper
7b81f5981f Fix task defines 2010-02-04 18:44:32 -08:00
Jeremy Kemper
ed6e72a84f No sense bundling sense it's not available in Rakefile. Also, actually require. 2010-02-04 18:44:32 -08:00
David Heinemeier Hansson
657ffed3f5 Need gemcutter here too 2010-02-04 18:39:19 -08:00
Jeremy Kemper
c1785f3282 Release using gemcutter gem:push tasks 2010-02-04 18:28:45 -08:00
Jeremy Kemper
31f8a59c16 Test that csrf meta content is html-escaped, too 2010-02-04 18:03:06 -08:00
Jeremy Kemper
7b1d3a0ca3 Add prototype ujs handler for data-method 2010-02-04 18:01:08 -08:00
Jeremy Kemper
6bf79f02be Revert dumb test 2010-02-04 17:49:23 -08:00
Jeremy Kemper
358968cd28 Update prototype-ujs for data-confirm 2010-02-04 17:46:29 -08:00
Jeremy Kemper
3062bc70ef HTML-escape csrf meta contents 2010-02-04 17:45:43 -08:00
Jeremy Kemper
2191aa47ac Expose CSRF param name also 2010-02-04 15:26:24 -08:00
Chad Woolley
09a88a347d fix rubygems/bundler install in ci build script
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2010-02-04 14:59:04 -08:00
Jeremy Kemper
78de17cf70 Expose CSRF tag for UJS adapters 2010-02-04 14:58:32 -08:00
Jeremy Kemper
127e53453d Ensure javascripts are pulled in so UJS can hook the Delete link 2010-02-04 12:22:26 -08:00
Bryan Helmkamp
2036268679 Link to main Arel repository
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2010-02-04 12:01:25 -08:00
Jeremy Kemper
c697974fad Bump to bundler 0.9.2 2010-02-04 11:36:57 -08:00
Jeremy Kemper
a74ed0c2ee Autorequire default libs and those in groups named after the current Rails environment 2010-02-04 11:04:50 -08:00
Jeremy Kemper
a871b1a4d2 Depend on bundler >= 0.9.1 2010-02-04 10:56:16 -08:00
Jeremy Kemper
293fd9daf8 server command loads the application 2010-02-04 10:50:14 -08:00
Jeremy Kemper
ca273d171c Revert "Rails script commands load the application rather than just boot"
This reverts commit 358451c219.
2010-02-04 10:49:41 -08:00
Jeremy Kemper
358451c219 Rails script commands load the application rather than just boot 2010-02-04 10:45:35 -08:00
Jeremy Kemper
6154278d22 Fix broken autorequires 2010-02-04 10:08:06 -08:00
Jeremy Kemper
2faf94a7af Use the correct environment.rb path 2010-02-04 10:08:06 -08:00
Jeremy Kemper
23ad1eff0d Rationalize railtie dependencies: AC uses AV; AR uses AMo; and Rails always uses AS. 2010-02-04 10:08:06 -08:00
Jeremy Kemper
5c07c33ab4 Move framework requires and Bundler.require from boot.rb to app.rb. Cut down the list of railtie choices to those that make sense. 2010-02-04 10:08:06 -08:00
Antonio Cangiano
6b3fb38461 Updated the database.yml file generated for ibm_db to the latest version of DB2 and the gem.
[#3852 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2010-02-04 10:08:06 -08:00
Pratik Naik
25b6b95459 Make RAILS_* give deprecation warning just once 2010-02-04 17:00:50 +00:00
José Valim
06860dcf29 Remove duplicated version check. 2010-02-04 14:14:11 +01:00
Santiago Pastorino and José Ignacio Costa
6d6e6105c0 require 'action_controller' added on a test that uses it
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-02-04 14:07:24 +01:00
José Valim
d0f98420ea Automatically require rubygems when --dev flag is given. 2010-02-04 14:05:13 +01:00
José Valim
79376e3c9d Update Gemfile to use latest bundler config. 2010-02-04 13:53:37 +01:00
José Valim
ab14e3f862 Merge branch 'master' of gitproxy:rails/rails 2010-02-04 13:05:27 +01:00
José Valim
31248fe369 Remove instrument! and require thread from AS::Notifications. 2010-02-04 10:39:55 +01:00
Jeremy Kemper
c9ec28b2b6 Use a normal gem source url instead of a magic symbol 2010-02-04 00:21:47 -08:00
Jeremy Kemper
b63643004c Bump bundler dep to 0.9.1.pre1 2010-02-04 00:19:07 -08:00
Jeremy Kemper
db15e49ddf Autorequire bundled libraries by default 2010-02-03 23:56:51 -08:00
David Heinemeier Hansson
031139bb71 Homogenize gemspecs and remove the deprecated autorequire 2010-02-03 17:59:49 -08:00
Chad Woolley
e71825d40d remove arel directory, breaks 'git submodule init', which breaks ci builds
Signed-off-by: Yehuda Katz <yehudakatz@Billing-MacBook-Pro.local>
2010-02-03 17:57:49 -08:00
David Heinemeier Hansson
dd13874ff6 Merge 2010-02-03 17:31:35 -08:00
David Heinemeier Hansson
79817aa9e7 Move to 3.0.0.beta 2010-02-03 17:29:51 -08:00
David Heinemeier Hansson
ddb512c02b Simplify description 2010-02-03 17:27:06 -08:00
David Heinemeier Hansson
36e6daac67 Copy over latest release notes from docrails 2010-02-03 17:22:08 -08:00
Jeremy Kemper
9b033d14b2 Merge remote branch 'mikel/master' 2010-02-03 17:03:21 -08:00
SubbaRao Pasupuleti
639e044298 removing , from ,= statement in WrappedDatabaseException constructor
[#3830 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2010-02-03 17:02:40 -08:00
Mikel Lindsaar
1ae543a180 -v and --version params now work on rails script in or our of an app 2010-02-04 11:57:13 +11:00
Mikel Lindsaar
02ef8d20a1 Adding guard to make sure test database declarations exist before trying to auto create 2010-02-04 11:57:13 +11:00
Carl Lerche
f497e7ad1d Update rails to use the latest bundler 2010-02-03 16:56:32 -08:00
Yehuda Katz
77015872be Removing submodule hacks 2010-02-03 16:28:18 -08:00
José Valim
efa850558f Make bin/rails call rails/commands/application, fix generators usage and update .gitignores. 2010-02-03 18:49:47 +01:00
José Valim
391f2543c9 Properly show middlewares on rake about. 2010-02-03 18:07:22 +01:00
José Valim
622e3dda84 No more vendored thor. 2010-02-03 17:57:54 +01:00
José Valim
836cbe5735 Add method and path to AC notifications. 2010-02-03 17:18:18 +01:00
José Valim
b13504303b Merge remote branch 'mikel/master' 2010-02-03 10:32:27 +01:00
Mikel Lindsaar
f390eade5f Adding 'db' as a shortcut for dbconsole to the rails command 2010-02-03 19:50:51 +11:00
Mikel Lindsaar
38d13f9597 Deprecated freeze rake tasks and cleaned up annotations.rake 2010-02-03 18:31:57 +11:00
Mikel Lindsaar
9d65390805 Added encoding qery support for SQLite3 to make rake db:charset work on all databases shipping with Rails 3 2010-02-03 18:06:38 +11:00
Mikel Lindsaar
fbdef7aafe Made rake db:create also create the test database if you are in development mode 2010-02-03 16:39:04 +11:00
Mikel Lindsaar
80e49354f1 Updating index.html to remove script/generate and making railties tests pass again 2010-02-02 21:13:01 -08:00
Mikel Lindsaar
76d5428c33 Updating index.html to remove script/generate and making railties tests pass again 2010-02-03 15:52:05 +11:00
David Heinemeier Hansson
9a83bd5006 Rename usage path to command to just the command name 2010-02-02 16:16:26 -08:00
David Heinemeier Hansson
ea59177156 Wups, need the application command in there too 2010-02-02 16:11:40 -08:00
David Heinemeier Hansson
68ca336195 Fix rails server 2010-02-02 16:10:24 -08:00
David Heinemeier Hansson
7840ea29b4 Added "rake about" as a replacement for script/about [DHH] 2010-02-02 16:03:47 -08:00
David Heinemeier Hansson
d53749608e Add a reminder that you should use "rails" not "script/rails" when running normally 2010-02-02 15:56:16 -08:00
David Heinemeier Hansson
9f224061ee Boot path has already been required, dont need it again 2010-02-02 15:54:31 -08:00
Carl Lerche
08fd9a6491 Remove the generated gemfile in railties tests since the rails gemfile is used. 2010-02-02 15:51:24 -08:00
David Heinemeier Hansson
d236827881 Removed all the default commands in script/* and replaced them with script/rails and a rails command that'll act the same when run from within the app [DHH] 2010-02-02 15:50:56 -08:00
Carl Lerche
144f41ed9b Use bundler 0.9.0.pre4 when running CI 2010-02-02 10:19:43 -08:00
Chad Woolley
2c978160d2 Fix invocation of system commands in ci script
Signed-off-by: Carl Lerche <carllerche@mac.com>
2010-02-02 10:17:50 -08:00
José Valim
ff2d04a9ec Revert "failing tests in multibyte_chars_test.rb fixed". The bug is in Ruby 1.9.1 p376, not in AS test suite.
This reverts commit bf1f70d877.
2010-02-02 12:07:41 +01:00
Santiago Pastorino and José Ignacio Costa
afdf52402e Routing Mapper with % interpolation on Ruby 1.9.1 fixed [#3837 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-02-02 11:58:38 +01:00
José Valim
95eadb39bd Configuration values should be on AV::Base. 2010-02-02 11:32:28 +01:00
José Valim
ec4b18ec78 Get rid of deprecation warnings on config/environments/* 2010-02-02 10:44:09 +01:00
José Valim
101a8fa5f8 Ensure that attr_reader methods in generators are protected. 2010-02-02 10:30:28 +01:00
Szymon Nowak
17bee0dd2f Change Rails::Generators::Migration protected instance methods to class methods. [#3820 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-02-02 10:18:48 +01:00
Prem Sichanugrist
c01014ac1c Modify the behavior of radio_button_tag to use sanitize_to_id for consistency [#1792 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-02-02 10:17:26 +01:00
Prem Sichanugrist
ea2cbc86f7 Add test case for unable to run migration if ActiveRecord::Base.logger is nil (#3434)
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-02-02 10:14:51 +01:00
Corey Johnson
f4e5303bcf fixed migration logger bug [#3434 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-02-02 10:12:07 +01:00
Kieran Pilkington
f16e2ae9c9 Updating USAGE information for Mailer generator [#3801 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-02-02 10:09:41 +01:00
Prem Sichanugrist
ab83800c35 Hide '/rails/info/properties' from 'rake routes' [#3793 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2010-02-02 09:05:22 +00:00
Sam Ruby
df8852d04d Make rdoc match current API
Signed-off-by: Mikel Lindsaar <raasdnil@gmail.com>
2010-02-02 12:06:50 +11:00
Sam Ruby
5998dd7bb8 Resolve view paths correctly on CygWin
Signed-off-by: Mikel Lindsaar <raasdnil@gmail.com>
2010-02-02 12:05:49 +11:00
Mikel Lindsaar
485f12fe4c Fixed --dev flag for new bundler 2010-02-02 11:24:19 +11:00
Mikel Lindsaar
d1eed079e1 Merge branch 'master' of git://github.com/rails/rails 2010-02-02 10:51:19 +11:00
Carl Lerche
b9edb0c60c Update the Gemfile and CI build 2010-02-01 15:42:45 -08:00
Carl Lerche
16c0d1d3b6 Run bundle exec rake instead of bin/rake during CI 2010-02-01 15:08:40 -08:00
Carl Lerche
90ab1a6a4d [PATCH] remove geminstaller dependency from ci build 2010-02-01 15:04:03 -08:00
Mikel Lindsaar
ddf2b4add3 Xavier's edits 2010-02-02 09:46:55 +11:00
José Valim
d74b5e440c Make AM test suite green. 2010-02-01 23:34:47 +01:00
Carl Lerche
ff7a6a9b41 Add the database adapter in the generated Gemfile 2010-02-01 13:43:17 -08:00
Santiago Pastorino
bf1f70d877 failing tests in multibyte_chars_test.rb fixed
Signed-off-by: Yehuda Katz <wycats@Yehuda-Katz.local>
2010-02-01 09:30:00 -08:00
Mikel Lindsaar
428bdb5063 Adding Release Notes 3.0 2010-02-01 23:51:40 +11:00
José Valim
66615f25cf Merge branch 'master' of gitproxy:rails/rails 2010-02-01 11:41:16 +01:00
José Valim
0dece7929c Deprecate AC configuration values which were moved to Rack. 2010-02-01 11:40:27 +01:00
Jeremy Kemper
e5ab4b0d07 Convert to class_attribute 2010-02-01 02:02:42 -08:00
Jeremy Kemper
8ae25a8e41 Introduce class_attribute to declare inheritable class attributes. Writing an attribute on a subclass behaves just like overriding the superclass reader method. Unifies and replaces most usage of cattr_accessor, class_inheritable_attribute, superclass_delegating_attribute, and extlib_inheritable_attribute. 2010-02-01 02:02:41 -08:00
José Valim
a8c5d22c23 Add config.generators.fallbacks. 2010-02-01 10:48:59 +01:00
Mikel Lindsaar
aa9f549965 Updates to output and warning on being for Rails 3.0 2010-02-01 19:59:45 +11:00
Yehuda Katz
2092351652 Add support for compile-time <%= raw %> 2010-01-31 23:42:35 -08:00
Santiago Pastorino
1adfb92135 Deleted all references to ActionView::SafeBuffer in favor of ActiveSupport::SafeBuffer
Signed-off-by: Yehuda Katz <wycats@Yehuda-Katz.local>
2010-01-31 22:14:18 -08:00
Santiago Pastorino
9987a00738 action_view/safe_buffer is no longer valid
Signed-off-by: Yehuda Katz <wycats@Yehuda-Katz.local>
2010-01-31 21:55:41 -08:00
Santiago Pastorino
f439f1d86f action_view is requiring the deleted action_view/erb/util.rb file
Signed-off-by: Yehuda Katz <wycats@Yehuda-Katz.local>
2010-01-31 20:26:28 -08:00
Carl Lerche
3b922aaf08 Update the Ci build script 2010-01-31 20:18:13 -08:00
Mikel Lindsaar
65fb2c7b32 Completely updated the ActionMailer guide 2010-02-01 14:57:54 +11:00
Carl Lerche
a54654de1c Update the generated Gemfile and config/boot.rb to work with bundler 0.9 2010-01-31 19:48:42 -08:00
Yehuda Katz
4cbb9db0a5 For performance reasons, you can no longer call html_safe! on Strings. Instead, all Strings are always not html_safe?. Instead, you can get a SafeBuffer from a String by calling #html_safe, which will SafeBuffer.new(self).
* Additionally, instead of doing concat("</form>".html_safe), you can do
    safe_concat("</form>"), which will skip both the flag set, and the flag
    check.
  * For the first pass, I converted virtually all #html_safe!s to #html_safe,
    and the tests pass. A further optimization would be to try to use
    #safe_concat as much as possible, reducing the performance impact if
    we know up front that a String is safe.
2010-01-31 19:39:13 -08:00
Carl Lerche
1c83fd2eff Have rails depend on bundler 2010-01-31 19:35:11 -08:00
Carl Lerche
dfeae62e57 Update the CI geminstaller to pull in the correct version of bundler 2010-01-31 19:25:51 -08:00
Carl Lerche
9f01dff9c2 Get rails tests running on bundler 0.9 2010-01-31 19:13:43 -08:00
Jeremy Kemper
9bd0422dd7 Bump arel dependency to 0.2.0 from 0.2.pre 2010-01-31 18:42:41 -08:00
Mikel Lindsaar
65ad16568c Updating copyright dates on all licenses 2010-02-01 10:10:53 +11:00
Mikel Lindsaar
a07d0f8786 Full update on ActiveModel documentation 2010-02-01 10:08:20 +11:00
Stefan Penner
c493370f33 UJS documentation. 2010-01-31 16:37:33 -06:00
Erik St. Martin
e1618b9ac3 data-remote needs to be on the form and not the submit when using button_to :remote=>true 2010-01-31 14:43:07 -06:00
Stephen St. Martin
a9e89e82b6 add :remote option to form_tag 2010-01-31 13:46:33 -06:00
Stephen St. Martin
a3349f845f form_for should pass :remote to form_tag through html_options 2010-01-31 13:46:27 -06:00
Joshua Peek
59e9478f57 Require ac/test_case from AV::TestCase 2010-01-31 13:38:16 -06:00
Mikel Lindsaar
bb2c7b432c Updating Action Mailer documentation 2010-01-31 09:46:51 -08:00
Mikel Lindsaar
2ebea1c02d deOMGifying Railties, Active Support, and Action Pack 2010-01-31 09:46:30 -08:00
José Valim
b3a028259f Improve missing template error messages a little bit. 2010-01-31 10:24:38 +01:00
Joshua Peek
48459c8278 Add rel=nofollow on non get remote links 2010-01-30 20:26:30 -06:00
Joshua Peek
31820b9dd6 Generate UJS code for :disable_with 2010-01-30 20:22:15 -06:00
Erik St. Martin
392817cf11 updating link_to and button_to to support :remote => true and other options such as :confirm in a unobtrusive manor
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2010-01-30 19:44:35 -06:00
Joshua Peek
7d9ed8eec1 Include prototype ujs adapter with new apps 2010-01-30 19:20:49 -06:00
Joshua Peek
db49c706b6 Axe AM state machine
We're going do it eventually, get it done before 3.0 is final.
2010-01-30 18:38:01 -06:00
Joshua Peek
657d85580e Reorg options_for_javascript and array_or_string_for_javascript 2010-01-30 16:13:49 -06:00
Joshua Peek
570e02c96a Move button_to_function to prototype helper 2010-01-30 16:08:56 -06:00
Joshua Peek
ff3f779629 Unused JAVASCRIPT_PATH const 2010-01-30 16:04:58 -06:00
Joshua Peek
ad1924125d Move scripty JSG helpers into scriptaculous_helper.rb 2010-01-30 16:02:26 -06:00
Joshua Peek
9c2c307ee4 Move form_remote_tag and remote_form_for into prototype_legacy_helper 2010-01-30 15:42:30 -06:00
Joshua Peek
779094a602 Move button_to_remote and submit_to_remote into prototype_legacy_helper
plugin
2010-01-30 15:28:31 -06:00
Joshua Peek
b3787643ec Move link_to_function and link_to_remote into prototype_legacy_helper
plugin
2010-01-30 15:20:00 -06:00
Joshua Peek
2de311a093 Drop AjaxHelper 2010-01-30 15:08:29 -06:00
Joshua Peek
95f317b020 Move periodically_call_remote into prototype_legacy_helper plugin 2010-01-30 15:01:02 -06:00
Joshua Peek
61c9b16487 Move observe_field and observe_form to prototype_legacy_helper plugin 2010-01-30 14:53:43 -06:00
Joshua Peek
4f7a85d2c6 Revert "Merge branch 'rails/master' into ujs"
This reverts commit 3aa1ea1ae4, reversing
changes made to 2c12a71378.

Conflicts:

	actionpack/lib/action_view/helpers/javascript_helper.rb
	actionpack/lib/action_view/helpers/url_helper.rb
	actionpack/test/template/url_helper_test.rb
2010-01-30 14:39:59 -06:00
Joshua Peek
ac20f2cea1 Revert "Add rails.js driver to default source list"
This reverts commit 8a46e1182e.
2010-01-30 14:39:59 -06:00
Joshua Peek
ffc10731c3 Revert "fixed tests to also look for rails.js when using javascript_include_tag :defaults"
This reverts commit 7f181e4750.
2010-01-30 14:39:59 -06:00
Joshua Peek
e0d4e5f345 Revert "Drop JS scripts from core"
This reverts commit a06c47a52b.
2010-01-30 14:39:59 -06:00
Pratik Naik
ec057ada07 Rely on arel to generate the correct sql when an empty array is supplied to IN predicate 2010-01-30 19:34:05 +00:00
Joshua Peek
1bd8a50a99 Deprecation notice for TestResponse#redirected_to 2010-01-30 12:26:49 -06:00
José Valim
c164ca1efb Bring helpers_dir deprecation back. 2010-01-30 16:49:58 +01:00
José Valim
2d567e470a Add transfer_encoding= setter deprecation. 2010-01-30 16:39:27 +01:00
José Valim
0e063f435c Fix some backward incompatible behavior on AM. 2010-01-30 16:35:22 +01:00
José Valim
d6e2f5013c Drop AR I18n deprecation and simple use errors.messages as fallback. 2010-01-30 13:12:12 +01:00
José Valim
431fc3c817 Improve railtie deprecation messages. 2010-01-30 12:30:15 +01:00
Paul Rosania
766e857bea tsort-based dependency resolution for initializers
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2010-01-29 19:25:58 -08:00
Joshua Peek
a06c47a52b Drop JS scripts from core 2010-01-29 20:27:23 -06:00
Joshua Peek
bddd1bb626 Deprecate link_to :popup 2010-01-29 20:00:55 -06:00
Erik St. Martin
7f181e4750 fixed tests to also look for rails.js when using javascript_include_tag :defaults 2010-01-29 16:33:27 -06:00
Joshua Peek
8a46e1182e Add rails.js driver to default source list 2010-01-29 14:03:38 -06:00
José Valim
24aba77d9c Only load testing tasks if test unit is being used. 2010-01-29 17:51:06 +01:00
José Valim
17ea8d8d4d Automatically configure generators if application is defined. 2010-01-29 17:51:06 +01:00
José Valim
cc2642b220 Added :format and :locale options to render. 2010-01-29 17:51:06 +01:00
José Valim
986a4e616b Fix rendering of layouts. 2010-01-29 17:51:05 +01:00
José Valim
ba82eb2efa Get rid of AM warnings in AP test suite. 2010-01-29 17:51:05 +01:00
José Valim
3f84091937 ActionMailer should depend just on AbstractController. 2010-01-29 17:51:05 +01:00
Mikel Lindsaar
2960077445 Add a failing test case for render :layout
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-01-29 17:51:05 +01:00
Mikel Lindsaar
1024c11f3c Added tests for rendering different template for new API
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-01-29 17:51:05 +01:00
Yehuda Katz
8031a53abd superclass_delegating_accessor rewritten to serve as the base for many other kinds of accessors (step 1 of unification) 2010-01-29 03:01:02 -08:00
Jeremy Kemper
d58398c2b5 Ensure test sets json time format flag 2010-01-28 10:46:23 -08:00
Carl Lerche
f15bbcf97e Move the ActiveRecord generator settings into the Railtie 2010-01-28 10:45:25 -08:00
José Valim
e7418ab63c Add more tests to some key points in Railties.
Signed-off-by: Carl Lerche <carllerche@mac.com>
2010-01-28 10:28:41 -08:00
José Valim
64ea3dfd9f Add reloadable specific for engines and move environment to application paths.
Signed-off-by: Carl Lerche <carllerche@mac.com>
2010-01-28 10:28:41 -08:00
José Valim
d3d487479a Add config.to_prepare back and add tests for it.
Signed-off-by: Carl Lerche <carllerche@mac.com>
2010-01-28 10:28:40 -08:00
José Valim
226d8e745a Refactor MetalLoader and RoutesReloader to rely less on class configuration.
Signed-off-by: Carl Lerche <carllerche@mac.com>
2010-01-28 10:28:40 -08:00
Carl Lerche
252911e378 Cleanup the test_unit generator move into the railtie 2010-01-28 10:17:41 -08:00
Carl Lerche
6268fcdc30 Fix the test_framework generator tests 2010-01-28 10:03:47 -08:00
Carlhuda
c7c3eac762 Test::Unit Railtie 2010-01-28 09:55:29 -08:00
Stefan Penner
3aa1ea1ae4 Merge branch 'rails/master' into ujs 2010-01-27 22:44:56 -06:00
Jeremy Kemper
2c12a71378 Missed template change for defaults -> default 2010-01-27 19:53:46 -08:00
Jeremy Kemper
452bb1e48d Rename 'defaults' class method to 'default' to reflect that it's a declaration 2010-01-27 19:38:17 -08:00
Jeremy Kemper
079714277d Attend to brittle mailer generator tests 2010-01-27 19:33:26 -08:00
Jeremy Kemper
fd0eb3d904 Clear up some ivar warnings 2010-01-27 19:33:03 -08:00
Erik St. Martin
2ec99192d5 renaming javascript drivers to *.rails.js for better naming convention 2010-01-27 22:32:10 -05:00
Jeremy Kemper
187b3b0b48 Fix time comparison. Mail#date returns DateTime not Time. 2010-01-27 19:08:36 -08:00
Jeremy Kemper
8c60acbea2 Expected attachment encoding is binary 2010-01-27 18:37:17 -08:00
Erik St. Martin
eff999d679 initial prototype of jQuery driver complete 2010-01-27 21:35:58 -05:00
Jatinder Singh
e87748869a Use format of ARes rather than content-type of remote errors to load errors.
[#1956 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2010-01-27 18:27:18 -08:00
Geoff Buesing
e98f9579c4 Time#- with a DateTime argument behaves the same as with a Time argument, i.e. returns the difference between self and arg as a Float [#3476 status:resolved] 2010-01-27 20:17:09 -06:00
snusnu
016f15dc69 active_support/ordered_hash now requires yaml 2010-01-27 18:13:06 -08:00
Erik St. Martin
a0232d8641 jquery driver now supports :confirm 2010-01-27 20:58:17 -05:00
Erik St. Martin
4911343bf7 jquery driver now supports :popup 2010-01-27 20:42:36 -05:00
Jeremy Kemper
f2dd3578c0 self.defaults => default 2010-01-27 17:35:51 -08:00
Jeremy Kemper
030ab357f9 Remove unbundle changelogs 2010-01-27 17:11:29 -08:00
Jeremy Kemper
8399a315f5 Merge remote branch 'mikel/master' 2010-01-27 17:09:55 -08:00
Mikel Lindsaar
a06a5a64ba Unvendor'd text-format, now requires text-format gem 2010-01-28 12:08:14 +11:00
Mikel Lindsaar
c1f308f8c6 Unvendor'd MemCache-Client. Now requires the MemCache Client gem as a dependency - Don't forget to gem bundle buys and girls 2010-01-28 11:56:47 +11:00
Mikel Lindsaar
f1fe71d754 Unvendor'd Builder. Now requires the Builder gem as a dependency 2010-01-28 11:51:37 +11:00
Mikel Lindsaar
9029efce41 Unbundling TZInfo 2010-01-28 11:46:54 +11:00
Mikel Lindsaar
32ce2bb37f Updated mail requirement to 2.1.2 2010-01-28 11:33:58 +11:00
Gregor Schmidt
7b8c6472ff Adding custom yaml (de-)serialization for OrderedHash
[#3608 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2010-01-27 15:29:06 -08:00
Stefan Penner
2e338aed70 updated tests + docs, plus minor inconsistency fixes 2010-01-27 12:44:36 -06:00
Stefan Penner
253f335294 tests + docs 2010-01-27 12:44:36 -06:00
Stephen St. Martin
da19dfa419 support for observers in jquery driver, and minor bug fixes 2010-01-27 12:44:35 -06:00
Erik St. Martin
d13f254160 initial prototype of prototype js driver 2010-01-27 12:44:35 -06:00
Erik St. Martin
3c7d39d65f observe_form now supports :with option as it should 2010-01-27 12:44:35 -06:00
Stephen St. Martin
5584d58e65 refactored to be more dry, data-update-failure now correctly works, combine compat and driver, namespaced events, and support for periodically_call_remote 2010-01-27 12:44:35 -06:00
Stefan Penner
1b8ced53c4 Added regression tests that discovered the previous issue. 2010-01-27 12:44:35 -06:00
Erik St. Martin
c0f63883ea :href should be comming in through html_options and not options 2010-01-27 12:44:35 -06:00
Erik St. Martin
f661a3bc59 removing container inline js function of observed elements :function callback 2010-01-27 12:44:35 -06:00
Erik St. Martin
a6cd35ba68 moving html_safe call into helpers directly as they only work from that level 2010-01-27 12:44:35 -06:00
Erik St. Martin
007db3fca8 start of prototype driver, missing observe_form, observe_field, and periodically_call_remote 2010-01-27 12:44:35 -06:00
Erik St. Martin
0215466832 periodically_call_remote does not need data-observe=true 2010-01-27 12:44:35 -06:00
Erik St. Martin
6a8da2053e need to tell erb that our <script> tag is html_safe 2010-01-27 12:44:35 -06:00
Erik St. Martin
ad26b3934e test to go with last commit, explicit :href for link_to_remote 2010-01-27 12:44:35 -06:00
Erik St. Martin
9fe845670d adding :href override to link_to_remote 2010-01-27 12:44:34 -06:00
Erik St. Martin
56ae6550b8 adding support for :disable_with to button_to_remote 2010-01-27 12:44:34 -06:00
Stephen St. Martin
ff26ca68d2 support for submit_to_remote in jquery driver 2010-01-27 12:44:34 -06:00
Stephen St. Martin
8b7cd5ae7e fix duplidate data-submit attribute, submit_to_remote should test url 2010-01-27 12:44:34 -06:00
Stephen St. Martin
2204215b43 upgrade jquery to 1.4.1 and default request method to GET as its default on forms and links 2010-01-27 12:44:34 -06:00
Erik St. Martin
eb2d32f309 remote_form_for now supports :confirm 2010-01-27 12:44:34 -06:00
Stephen St. Martin
ed09413230 refractor handler code for remote_form_tag to also handle link_to_remote, fix a bug preventing :method from being used, also add missing :position, :confirm is still not functional yet 2010-01-27 12:44:34 -06:00
Erik St. Martin
44542bd7da account for the fact a few options may be passed as symbols and need to be converted to string 2010-01-27 12:44:34 -06:00
Stephen St. Martin
04ad12d681 initial jquery driver and compat, right now the only supported method is form_remote_tag 2010-01-27 12:44:34 -06:00
Stephen St. Martin
5a75f1ab90 add missing call to set_with_and_condition_attributes for form_remote_tag 2010-01-27 12:44:34 -06:00
Erik St. Martin
06dd23d671 removing Prototype inline js for attributes for :with and :condition, it now is free form js that can be placed there, also moved :submit out into AjaxHelper, updated tests to reflect changes 2010-01-27 12:44:34 -06:00
Stephen St. Martin
d9af0dfac4 refactor params and with into copat module 2010-01-27 12:44:33 -06:00
Stephen St. Martin
a5e9d033e8 add missing test for :with option to link_to_remote 2010-01-27 12:44:33 -06:00
Erik St. Martin
9e3e1b3f24 fixing last merge breakage 2010-01-27 12:44:33 -06:00
Stephen St. Martin
133f6011d0 add missing :before and :after callbacks for link_to_remote 2010-01-27 12:44:33 -06:00
Erik St. Martin
426a6b2e00 making non remote versions of link_to, button_to, submit_tag and image_submit_tag output data attributes for things like :confirm, :method, :popup, and :disable_with 2010-01-27 12:44:33 -06:00
Erik St. Martin
9821648644 link_to_remote and button_to_remote now support :confirm 2010-01-27 12:44:33 -06:00
Erik St. Martin
d769897171 modified helper that adds attributes for :method to include rel='nofollow' if :method => :delete, same as its remote_ equivalent 2010-01-27 12:44:33 -06:00
Erik St. Martin
fbb56f7ee8 refactoring AjaxHelper a bit so that it calls shared method from JavascriptHelper to add attributes for :confirm 2010-01-27 12:44:33 -06:00
Erik St. Martin
463fc71107 making non remote versions of link_to, button_to, submit_tag and image_submit_tag output data attributes for things like :confirm, :method, :popup, and :disable_with 2010-01-27 12:44:33 -06:00
Erik St. Martin
c3baf8b767 link_to_remote and button_to_remote now support :confirm 2010-01-27 12:44:33 -06:00
Stephen St. Martin
9ad8d348b5 test :method option of link_to_remote, and ensure rel='nofollow' is added when :method => 'delete' 2010-01-27 12:44:33 -06:00
Erik St. Martin
9f5cb3d3b4 moving include of ScriptaculousHelper into PrototypeHelper, ActionView should know as little as possible about individual frameworks 2010-01-27 12:44:33 -06:00
Stephen St. Martin
37ad57596b port existing test suite to check for new output, and fix all breaking tests 2010-01-27 12:44:32 -06:00
Erik St. Martin
7bf5aef907 fixed current tests that were failing do to module location change, this is temporary to fix state of repo till all the new tests are complete 2010-01-27 12:44:32 -06:00
Stefan Penner
255066b6c7 first round of documenation for ujs 2010-01-27 12:44:32 -06:00
Stephen St. Martin
20c6c71e6a oops, remove test code 2010-01-27 12:44:32 -06:00
Stephen St. Martin
d8343a6ad7 restructure compatibility module so it is no longer a child 2010-01-27 12:44:32 -06:00
Erik St. Martin
565a696e71 Removed all helpers from PrototypeHelper that are implemented in AjaxHelper. Modified tests that extended with PrototypeHelper to now extend using AjaxHelper. AjaxHelper is now included by default in view helper 2010-01-27 12:44:32 -06:00
Erik St. Martin
5462caf434 fixing failing tests from last commit, order of attributes matters should probably change this later 2010-01-27 12:44:32 -06:00
Erik St. Martin
1cd8b98d01 javascript_helper now correctly pulls in ajax_helper instead of prototype_helper. prototype_helper is pulled in by ajax_helper for reverse compatibility 2010-01-27 12:44:32 -06:00
Stephen St. Martin
f115fb0111 make observers a little more dry 2010-01-27 12:44:32 -06:00
Stephen St. Martin
49e84a5943 fix failing tests from fork/merge 2010-01-27 12:44:31 -06:00
Stephen St. Martin
07299eb60d rename ajax_test.rb to ajax_helper_test.rb for consistency 2010-01-27 12:44:31 -06:00
Stephen St. Martin
143d0764d0 nuke what appears to be a duplicate and unused test file 2010-01-27 12:44:31 -06:00
Stephen St. Martin
62a2d5178c cleanup some spacing 2010-01-27 12:44:31 -06:00
Stephen St. Martin
27d52e00d9 extract_remote_attributes should be a private method 2010-01-27 12:44:31 -06:00
Bob Remeika
95b77e925f Added observe_form 2010-01-27 12:44:31 -06:00
Bob Remeika
7d34975214 Added submit_to_remote helper 2010-01-27 12:44:31 -06:00
Bob Remeika
39ec7ce6a9 Removed duplication 2010-01-27 12:44:31 -06:00
Bob Remeika
8e172f13d7 Changed data-name to data-observed on observe_field 2010-01-27 12:44:31 -06:00
Bob Remeika
261654becf Refactored ajax helpers so they use a little bit more coherent pattern; Removed code duplication from form_remote_tag 2010-01-27 12:44:31 -06:00
Bob Remeika
dad3d09ce8 Applied Yehuda's patch; Sharing extract_object_name_for_form! between form_helper and ajax_helper; Added script_decorator helper 2010-01-27 12:44:30 -06:00
Bob Remeika
5491a663da Changed observe_field to field_observer 2010-01-27 12:44:30 -06:00
Bob Remeika
9c12e66748 Changed data-rails-type to data-js-type 2010-01-27 12:44:30 -06:00
Bob Remeika
bd65e7f73d Changed data-remote='true' to data-js-type='remote' 2010-01-27 12:44:30 -06:00
Bob Remeika
631537a25d remote_form_for tests pass 2010-01-27 12:44:30 -06:00
Bob Remeika
5316e77db1 Took first stab at reimplementing form_remote_tag helpers 2010-01-27 12:44:30 -06:00
Bob Remeika
b225de9711 Added assert_data_element_json test helper for data element helpers 2010-01-27 12:44:30 -06:00
Bob Remeika
afdecbc0a8 Took another stab at observe_field. Now implementing data only helpers as script elements. 2010-01-27 12:44:30 -06:00
Bob Remeika
d383f057c0 Changed the observe field node into a div with display:none 2010-01-27 12:44:30 -06:00
Bob Remeika
25c5ddd021 ObserveFieldTest uses url_for from AjaxTestCase 2010-01-27 12:44:30 -06:00
Stefan Penner
8f97e03fb0 fixed failing tests 2010-01-27 12:44:30 -06:00
Bob Remeika
773c4929fd Implemented a fuller stub in AjaxTestCase for url_for because link_to calls url_for on all urls passed to it. Tests that were testing different input types for the url were failing because of this. 2010-01-27 12:44:30 -06:00
Bob Remeika
23275d1b79 Added the beginnings of the observe_field helper 2010-01-27 12:44:29 -06:00
Bob Remeika
b599c4c7ee Added observe_form 2010-01-27 12:44:29 -06:00
Bob Remeika
8c43c11a9d Added submit_to_remote helper 2010-01-27 12:44:29 -06:00
Bob Remeika
67b73ff272 Removed duplication 2010-01-27 12:44:29 -06:00
Bob Remeika
d9765c3af5 Changed data-name to data-observed on observe_field 2010-01-27 12:44:29 -06:00
Bob Remeika
4536191d55 Refactored ajax helpers so they use a little bit more coherent pattern; Removed code duplication from form_remote_tag 2010-01-27 12:44:29 -06:00
Bob Remeika
5ced1225fa Applied Yehuda's patch; Sharing extract_object_name_for_form! between form_helper and ajax_helper; Added script_decorator helper 2010-01-27 12:44:29 -06:00
Bob Remeika
c1ce17a5f4 Changed observe_field to field_observer 2010-01-27 12:44:29 -06:00
Bob Remeika
081e057b17 Changed data-rails-type to data-js-type 2010-01-27 12:44:29 -06:00
Bob Remeika
efb70f0f9f Changed data-remote='true' to data-js-type='remote' 2010-01-27 12:44:29 -06:00
Bob Remeika
29811533b4 remote_form_for tests pass 2010-01-27 12:44:29 -06:00
Bob Remeika
118a720a01 Took first stab at reimplementing form_remote_tag helpers 2010-01-27 12:44:29 -06:00
Bob Remeika
0955f57915 Added assert_data_element_json test helper for data element helpers 2010-01-27 12:44:28 -06:00
Bob Remeika
6fa8f81d7d Took another stab at observe_field. Now implementing data only helpers as script elements. 2010-01-27 12:44:28 -06:00
Bob Remeika
88e793e5e7 Changed the observe field node into a div with display:none 2010-01-27 12:44:28 -06:00
Bob Remeika
fab8b25c15 ObserveFieldTest uses url_for from AjaxTestCase 2010-01-27 12:44:28 -06:00
Stefan Penner
77fc50a08b fixed failing tests 2010-01-27 12:44:28 -06:00
Bob Remeika
c44682f6ab Implemented a fuller stub in AjaxTestCase for url_for because link_to calls url_for on all urls passed to it. Tests that were testing different input types for the url were failing because of this. 2010-01-27 12:44:28 -06:00
Bob Remeika
a792ee5665 Added the beginnings of the observe_field helper 2010-01-27 12:44:28 -06:00
Mikel Lindsaar
b6b3db6734 Fixed bug on HTML only emails getting set to text/plain 2010-01-28 00:24:30 +11:00
Geoff Buesing
f3caa63bcb Update bundled TZInfo to v0.3.16 2010-01-26 20:22:29 -06:00
Geoff Buesing
1cda85d08a Georgetown TimeZone is now mapped to "America/Guyana" instead of "America/Argentina/San_Juan" [#1821 status:resolved] 2010-01-26 20:18:17 -06:00
Jeremy Kemper
aef76d1e71 Merge remote branch 'fxn/master' 2010-01-26 15:38:49 -08:00
Mikel Lindsaar
458b6a7fc9 Fixing mailer generators to use the right email address 2010-01-27 10:35:56 +11:00
Aaron Patterson
beda2d43d6 future proofing the sqlite3 adapter code
Signed-off-by: Yehuda Katz <wycats@Yehuda-Katz.local>
2010-01-26 15:09:11 -08:00
Xavier Noria
3c6891593d removes now void extending.rb 2010-01-26 23:08:00 +01:00
Xavier Noria
c25ac0deee removes Object#extended_by 2010-01-26 23:03:58 +01:00
Xavier Noria
ccec730d7f removes unused method Object#extend_with_included_modules_from 2010-01-26 23:01:51 +01:00
Xavier Noria
7d312e54ba deletes no void files removal.rb and class_test.rb 2010-01-26 22:57:27 +01:00
Xavier Noria
44afd785c8 removes unused method Class#remove_class 2010-01-26 22:51:44 +01:00
Xavier Noria
5f981ff029 removes unused method Class#reachable? 2010-01-26 22:49:35 +01:00
Xavier Noria
f85f5dfc8f removes unused Class#descedents 2010-01-26 22:48:21 +01:00
Xavier Noria
245bfafe33 removes unused Object#subclasses_of 2010-01-26 22:46:47 +01:00
Xavier Noria
5b01c8bb8b removes unused Object#remove_subclasses_of 2010-01-26 22:44:32 +01:00
Xavier Noria
1b2ac25a2f removes unused Class#remove_subclasses 2010-01-26 22:42:56 +01:00
Xavier Noria
ec7c642f5f removes unused method Class#subclasses 2010-01-26 22:37:55 +01:00
José Valim
6404feee50 AC railtie should configure helpers path. 2010-01-26 21:05:50 +01:00
José Valim
dc57d545bb Fix t('.helper'). 2010-01-26 20:43:35 +01:00
José Valim
9f63c4b26e Bring AM tests back to green again. 2010-01-26 19:50:59 +01:00
José Valim
af43674c1c Fix failing tests on AM about render(:body => Hash). 2010-01-26 19:15:32 +01:00
José Valim
bdc39fad36 Merge branch 'master' of git://github.com/rails/rails 2010-01-26 18:39:53 +01:00
Joshua Peek
31b538df64 Failing AM test for legacy multipart alternative rendering 2010-01-26 09:37:20 -06:00
José Valim
e274eb1df1 Bring layouts with proc back alive. 2010-01-26 16:34:25 +01:00
Joshua Peek
9f7190187c Failing AM test for nested layouts 2010-01-26 09:27:54 -06:00
José Valim
48a3985dd7 Also include translation in ActionMailer. 2010-01-26 16:18:29 +01:00
José Valim
52bb455c0d Merge branch 'master' of git://github.com/rails/rails 2010-01-26 16:05:32 +01:00
José Valim
1078677575 Merge remote branch 'mikel/master' 2010-01-26 16:00:57 +01:00
José Valim and Mikel Lindsaar
05c4ad9d3f Tidy up tests and docs. 2010-01-26 16:00:24 +01:00
Joshua Peek
f74fbf9d32 Keep ActionController::Base.helpers_dir around for a bit longer 2010-01-26 08:52:20 -06:00
José Valim
d7de1c76ca Add a test which ensures application can overwrite plugins/engines view paths. 2010-01-26 15:46:17 +01:00
José Valim
081dfca33a Clean up Rails::Rack::Logger. 2010-01-26 15:37:45 +01:00
José Valim
edb8131535 Move Rails::Rack::Metal to Rails::Application::Metal and just add cascade if any metal was declared. 2010-01-26 15:27:46 +01:00
José Valim
517b35a2bb Middleware stack actually runs routes and not the application. 2010-01-26 15:00:27 +01:00
José Valim
f8bf1982df Add tests for explicit engines. 2010-01-26 14:58:00 +01:00
Mikel Lindsaar
ccea6ab07d Fixing up tests and docs to use defaults :from => 'name' instead of defaults({:from => 'name'}) 2010-01-27 00:38:12 +11:00
Mikel Lindsaar
1133757a95 Merge branch 'master' of github.com:mikel/rails
Conflicts:
	actionmailer/lib/action_mailer/base.rb
2010-01-27 00:21:22 +11:00
Mikel Lindsaar
21dcc20ed2 Fixed up documentation to reflect code change and cleaned up tests of spurious #deliver calls 2010-01-27 00:18:40 +11:00
José Valim
7adb1ffc03 Remove old fixtures files. 2010-01-26 14:09:48 +01:00
Mikel Lindsaar
9520166f70 Fixed up being able to pass random headers in with headers, or mail. Also, undeprecated headers(hash) as this works now too 2010-01-27 00:06:19 +11:00
José Valim
1dca7ebc93 Refactor railties test, break huge files in smaller chunks and move initializers to application folder. 2010-01-26 13:57:11 +01:00
José Valim
e6da2f651f Ensure app does not show up in generators. 2010-01-26 12:23:02 +01:00
José Valim
007c0bb3b0 Ensure proper class is shown on rake middleware. 2010-01-26 12:16:47 +01:00
José Valim
db99324a89 Ensure calling a method in Rails::Application does not instantiate a void application. 2010-01-26 12:16:47 +01:00
José Valim and Mikel Lindsaar
8fabcb2eca Update generators to use new defaults. 2010-01-26 11:48:25 +01:00
José Valim and Mikel Lindsaar
39a1b06f13 Deprecate old defaults API. 2010-01-26 11:46:42 +01:00
José Valim and Mikel Lindsaar
9dd65c368b Make defaults accept a hash. 2010-01-26 11:21:20 +01:00
Mikel Lindsaar
b8c82edc1f Updating generators for mailer to reflect changes in API 2010-01-26 18:59:52 +11:00
Mikel Lindsaar
e297eed4f2 Fixing up expectations in base_test.rb 2010-01-26 17:11:36 +11:00
Mikel Lindsaar
0b05acd424 Implementing class level :defaults hash, instead of delivers_from et al 2010-01-26 17:08:55 +11:00
Jack Christensen
c5b652f3d2 PostgreSQLAdapter: set time_zone to UTC when Base.default_timezone == :utc so that Postgres doesn't incorrectly offset-adjust values inserted into TIMESTAMP WITH TIME ZONE columns [#3777 state:resolved] 2010-01-25 20:57:07 -06:00
Carlhuda
64f8c87b1d Fix AR's rake tasks to work with the Rails::Application refactor 2010-01-25 17:55:54 -08:00
José Valim
abad097016 Merge remote branch 'mikel/master' 2010-01-26 01:56:52 +01:00
José Valim and Mikel Lindsaar
c02391f8f9 Fix small typo. 2010-01-26 01:54:23 +01:00
José Valim and Mikel Lindsaar
4af2bbc6b4 Merge branch 'master' of github.com:mikel/rails 2010-01-26 01:51:23 +01:00
José Valim and Mikel Lindsaar
74a5889abe Refactor content type setting, added tests to ensure boundary exists on multipart and fixed typo 2010-01-26 11:49:59 +11:00
José Valim and Mikel Lindsaar
6589976533 Remove old files, add some information to docs and improve test suite. 2010-01-26 01:43:41 +01:00
José Valim and Mikel Lindsaar
1b3cb54eba More work on generated mailer templates. 2010-01-26 01:09:08 +01:00
José Valim
8974dac92e Ensure root routes inside optional scopes works as expected. 2010-01-26 00:55:26 +01:00
José Valim
5d07869245 Ensure all initializers are collections. 2010-01-26 00:08:08 +01:00
José Valim
a89c8cb528 Merge branch 'master' of git://github.com/rails/rails
Conflicts:
	railties/test/railties/plugin_test.rb
2010-01-25 23:44:03 +01:00
José Valim
49be3316c2 Add a deprecation for helpers_dir. 2010-01-25 23:38:47 +01:00
Joshua Peek
3086dbd8d0 Failing test for plugin init requiring another plugin lib file 2010-01-25 16:33:29 -06:00
José Valim
cc1bb8590e Refactor some railties tests structure. 2010-01-25 23:17:39 +01:00
José Valim
02908e1142 As first step setup the load path and lazy compare middlewares. 2010-01-25 22:59:08 +01:00
José Valim
1177a40e68 Fix i18n locales order test. 2010-01-25 22:10:11 +01:00
Joshua Peek
c6104e6514 Failing test for using plugin middleware in application config 2010-01-25 12:55:30 -06:00
Joshua Peek
2d1f9fb98f Plugins need to load before app initializers 2010-01-25 11:06:39 -06:00
José Valim and Mikel Lindsaar
f14390091c We don't support enriched yet 2010-01-26 00:09:18 +11:00
José Valim and Mikel Lindsaar
4a6eba3232 Added initial documentation for the new API 2010-01-25 23:46:23 +11:00
José Valim and Mikel Lindsaar
9cb3ca1d29 Change mailer generator templates and refactor the whole naming schema. 2010-01-25 13:20:32 +01:00
José Valim and Mikel Lindsaar
ad8f5d4106 Updated to mail 2.1.1 2010-01-25 23:15:16 +11:00
José Valim and Mikel Lindsaar
d5e4e9185b Updated gemspec for Mail 2010-01-25 21:47:24 +11:00
José Valim and Mikel Lindsaar
ace74974cf Got AM working with Mail yield on delivery_handler and updated tests 2010-01-25 21:47:03 +11:00
José Valim and Mikel Lindsaar
4240369a43 changed test to get TestMailer to use :file delivery method directly (as setup action was resetting delivery_method to :test on init 2010-01-25 13:46:44 +11:00
José Valim and Mikel Lindsaar
e4a989e9d9 Added delivery_handler method to mail and implemented in ActionMailer to deliver inside of instrumentation 2010-01-25 13:39:48 +11:00
José Valim
3b6f659fb6 Add active_model/railtie back to generated boot.rb, add models back to paths, load active_support/railtie since we need it and ensure default logger is set before config. 2010-01-25 01:12:22 +01:00
José Valim and Mikel Lindsaar
e1c1318638 Added delivers_from. 2010-01-25 00:37:12 +01:00
José Valim and Mikel Lindsaar
48faf53be1 Add some view paths tests. 2010-01-25 00:20:38 +01:00
José Valim and Mikel Lindsaar
90e9e46576 Merge branch 'master' of github.com:mikel/rails 2010-01-24 23:59:29 +01:00
José Valim and Mikel Lindsaar
0ece244fee Ensure implicit multipart templates with locale works as expected. 2010-01-24 23:59:12 +01:00
José Valim and Mikel Lindsaar
4e96442c4e Merge branch 'master' of git://github.com/rails/rails
Conflicts:
	actionmailer/lib/action_mailer/mail_helper.rb
	railties/lib/rails/configuration.rb
2010-01-25 09:50:01 +11:00
José Valim and Mikel Lindsaar
c0262827ca Speed up some Hash core extensions. 2010-01-24 23:40:45 +01:00
José Valim and Mikel Lindsaar
328b0b1268 Remove deprecated behavior since 2.3. 2010-01-24 23:32:09 +01:00
José Valim and Mikel Lindsaar
0361414ae3 Add uniq_by and uniq_by! to Array. 2010-01-24 23:28:52 +01:00
Rizwan Reza
396003fc48 Revamp of Rails documentation task
Signed-off-by: Yehuda Katz <wycats@Yehuda-Katz.local>
2010-01-24 13:16:38 -08:00
José Valim
6e57b88c60 Fix a couple failures on 1.9.1. 2010-01-24 21:21:37 +01:00
José Valim and Mikel Lindsaar
a74a655648 Add tests to mail helper. 2010-01-24 19:52:50 +01:00
José Valim and Mikel Lindsaar
bd96614101 Move old tests to a specific folder and add some delivery method tests. 2010-01-24 19:36:42 +01:00
José Valim and Mikel Lindsaar
99f960a3d7 Handle some TODOs and deprecations. 2010-01-24 18:40:04 +01:00
José Valim and Mikel Lindsaar
0d931fecbb Finish cleaning up delivery methods implementation. 2010-01-24 18:11:57 +01:00
José Valim and Mikel Lindsaar
5dead5bb88 Maintain old_api and deprecated_api in different files. 2010-01-24 17:49:48 +01:00
Joshua Peek
9543298d02 Use Rails::Application ref in Rakefile and console scripts.
Less places you need to change if you rename your application.
2010-01-24 10:35:45 -06:00
José Valim and Mikel Lindsaar
f30d73bab4 Add new class delivery method API. 2010-01-24 17:31:18 +01:00
Joshua Peek
9212652155 Add Rails::Application pointer to the default app to add symmetry to Foo::Application 2010-01-24 10:29:38 -06:00
José Valim and Mikel Lindsaar
7409b73484 Some refactoring. 2010-01-24 16:37:28 +01:00
José Valim
6545a68264 Fix failing tests after merge. 2010-01-24 15:08:06 +01:00
José Valim
84ebfa4550 Ensure metals and initializers in plugins are loaded. 2010-01-24 14:48:00 +01:00
José Valim
dd05b6c543 Add tests for plugin sanity check. 2010-01-24 12:49:12 +01:00
José Valim
e548f96b1d Rename plugin_name to railtie_name and engine_name. 2010-01-24 12:23:21 +01:00
José Valim
b92608770e Ensure environment config has higher priority than application ones. 2010-01-24 12:15:46 +01:00
José Valim
37e4deb260 Ensure helpers work from configured path. 2010-01-24 12:04:37 +01:00
José Valim
e0bdc4f446 Ensure namespaced controllers in engines work. 2010-01-24 11:06:06 +01:00
José Valim and Mikel Lindsaar
73a9000402 Adding failing tests for calling just the action, instead of :create_action_name and :deliver_action_name 2010-01-24 20:38:53 +11:00
José Valim
5cd9aad4fd Add I18n tests to engines. 2010-01-24 10:27:42 +01:00
José Valim
25724c664d Load deprecated tasks for plugins. 2010-01-24 10:03:03 +01:00
José Valim
5b26fa4875 Make plugin generator compatible with new schema. 2010-01-24 09:42:28 +01:00
José Valim
2fde9d774b Solve some pendencies. 2010-01-24 09:32:54 +01:00
José Valim and Mikel Lindsaar
afc758297c Moving AS::Notifications call to one location in base 2010-01-24 12:30:13 +11:00
José Valim and Mikel Lindsaar
258ca14800 Delegated ActionMailer::Base.deliveries to Mail.deliveries, added callback support in Mail to call ActionMailer on delivery, moved deliver to deprecated API in preparation for new API 2010-01-24 11:15:42 +11:00
José Valim and Mikel Lindsaar
e7e4ed48df Set sort order for explicit parts from the collector's template sequence 2010-01-24 09:34:50 +11:00
José Valim
d3c40242a5 Move console stuff to its own directory. 2010-01-23 23:02:43 +01:00
José Valim
f915f9e339 Merge branch 'master' into app
Conflicts:
	railties/lib/rails/application.rb
2010-01-23 22:53:26 +01:00
José Valim
b17e358e3d Move configuration to subfolders. 2010-01-23 22:30:17 +01:00
José Valim
788fce2550 Create configurable modules and ensure that they are added only on direct children. 2010-01-23 18:41:53 +01:00
José Valim
2b75b94ac0 Plugin is now an Engine. 2010-01-23 17:51:48 +01:00
José Valim
924fa084e8 First steps into making Plugin < Engine. 2010-01-23 17:13:25 +01:00
José Valim
13d66cdf25 Extract Railtie load from application. 2010-01-23 16:59:37 +01:00
José Valim
4f03603215 Break application.rb file in smaller chunks. 2010-01-23 16:07:20 +01:00
José Valim
80130d1201 Extract routes reloading responsibilities from application and load them just upon a request. 2010-01-23 16:06:33 +01:00
José Valim and Mikel Lindsaar
c985a0ee3d Add some tests to collector with templates and any. 2010-01-23 12:46:40 +01:00
José Valim and Mikel Lindsaar
6ba944608e Make implicit and explicit templates pass through the same part creation process. 2010-01-23 12:20:20 +01:00
José Valim and Mikel Lindsaar
5a19d24892 Adding collector to ActionMailer 2010-01-23 21:50:36 +11:00
José Valim and Mikel Lindsaar
c6b16260fe Added basic explicit multipart rendering and tests 2010-01-23 21:37:34 +11:00
José Valim and Mikel Lindsaar
502028a32b Move double render check out of AbstractController. 2010-01-23 10:29:22 +01:00
José Valim and Mikel Lindsaar
5c3ef8c17d Refactor subject with i18n. 2010-01-23 10:24:19 +01:00
José Valim and Mikel Lindsaar
ddfc0725a0 Added AbstractController::Collector. 2010-01-23 10:23:06 +01:00
Mikel Lindsaar
1ea84c38ea Merge branch 'master' of git://github.com/rails/rails 2010-01-23 19:45:25 +11:00
Pratik Naik
8ff2fb6f3a Make default_scope work with Relations 2010-01-23 13:41:09 +05:30
Mikel Lindsaar
bd24c75fc6 Updated Gemspec to mail 2.0.3 from gemcutter 2010-01-23 18:45:59 +11:00
José Valim
4eab3aad8d Ensure user set load paths have higher preference and move Bootstrap inside Application. 2010-01-23 02:03:11 +01:00
José Valim
98240c49b0 Get rid of initializers global and create i18n railtie. 2010-01-23 01:29:29 +01:00
Joshua Peek
c2e57c0bb0 I removed the rdoc task from plugin Rakefile 2010-01-22 13:56:10 -06:00
Joshua Peek
2db14457f4 Delegate App calls to instance 2010-01-22 13:56:10 -06:00
José Valim
c8cc8a9872 Moved more configuration away from bootstrap. 2010-01-22 20:44:38 +01:00
José Valim
d618b7e3dc Ensure strings given to render with slash are rendered relative to the configured _prefix. 2010-01-22 17:58:03 +01:00
Prem Sichanugrist
cc6f16685c Add test case for load initializers before routing behavior.
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-01-22 17:58:03 +01:00
Xavier Noria
5c53ffe1db Add missing require for Object#try [#3771 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2010-01-22 22:20:00 +05:30
Joshua Peek
1a750da130 Make @controller an internal ivar in the view 2010-01-22 10:19:01 -06:00
José Valim
4ae7936727 Got tests working once again. 2010-01-22 16:24:44 +01:00
Pratik Naik
4afd9702fe Relation should respond to class methods 2010-01-22 20:14:37 +05:30
Pratik Naik
ee8c006dac Allow calling class methods on a Relation 2010-01-22 20:10:41 +05:30
Joshua Peek
c52820ae15 Use expand_path to require environment in metal template 2010-01-22 08:34:12 -06:00
Joshua Peek
284fd2568d Include cascade header in metal template 2010-01-22 08:31:41 -06:00
Joshua Peek
658f9e7e44 lib is already included w/ rake test task 2010-01-22 08:29:42 -06:00
Joshua Peek
5bf5688f51 Remove rdoc task from generated plugin Rakefile 2010-01-22 08:29:07 -06:00
Joshua Peek
259f3846a9 Template whitespace 2010-01-22 08:27:05 -06:00
José Valim and Mikel Lindsaar
951397b4a2 Get implicit multipart and attachments working together. 2010-01-22 14:38:41 +01:00
José Valim and Mikel Lindsaar
1cd55928c6 First work on implicit multipart. 2010-01-22 13:56:06 +01:00
José Valim and Mikel Lindsaar
dcb9253693 Add basic template rendering to new DSL. 2010-01-22 13:27:26 +01:00
Mikel Lindsaar
6cf378aeb0 Merge branch 'master' of github.com:mikel/rails 2010-01-22 21:58:13 +11:00
José Valim and Mikel Lindsaar
b30eb39ff0 Add more tests to new API. 2010-01-22 11:57:54 +01:00
Mikel Lindsaar
1170e70797 Merge branch 'master' of github.com:mikel/rails 2010-01-22 21:10:52 +11:00
José Valim and Mikel Lindsaar
bb9d71ff9e Move class methods to deprecated stuff. 2010-01-22 11:10:37 +01:00
José Valim and Mikel Lindsaar
343ac48f45 Moved deprecated_body.rb to deprecatead_api.rb 2010-01-22 11:01:21 +01:00
Mikel Lindsaar
6fd7d1fc12 Fixing typo in config.frameworks error 2010-01-22 19:38:50 +11:00
José Valim and Mikel Lindsaar
8a6a2ca712 Merge branch 'master' of git://github.com/rails/rails 2010-01-22 13:37:29 +11:00
José Valim and Mikel Lindsaar
c9dc1ac95b Updating functional tests to not compare equality with encoded, Mail::Message has an == operator 2010-01-22 13:32:16 +11:00
José Valim and Mikel Lindsaar
90bbed233e Updating deprecated_body.rb to use :content instead of :data or :body in the params hash 2010-01-22 12:51:07 +11:00
José Valim and Mikel Lindsaar
77986f6bdb Added use of AS::Notifications for tmail_compat.rb 2010-01-22 12:49:13 +11:00
José Valim and Mikel Lindsaar
12c001fec4 Updating deprecated API to sanitize old style attachments hash to work with new mail.attachments method 2010-01-22 12:46:19 +11:00
José Valim
02c5137ead Add view paths to Engine setup. 2010-01-22 01:10:31 +01:00
José Valim
7fcf8590e7 Massive cleanup in Railties and load stack. 2010-01-21 23:14:20 +01:00
Pratik Naik
6d30002a52 Revert "Refactoring attributes/types" [#3348 state:open]
This reverts commit f936a1f100.

Conflicts:

	activerecord/lib/active_record.rb
	activerecord/lib/active_record/base.rb

Revert "Fixed: #without_typecast should only disable typecasting on the duplicated attributes" [#3387 state:open]

This reverts commit 2831996483.

Reason :

  It's not generating attribute methods properly, making object.column 5x slower.
2010-01-22 02:37:07 +05:30
Pratik Naik
a68a3e9af6 Simplify finder method definitions 2010-01-21 22:29:21 +05:30
Prem Sichanugrist
2df1810cf3 Add test case for load initializers before routing behavior.
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-01-21 17:45:21 +01:00
José Valim
fc4f237864 Make filter parameters based on request, so they can be modified for anything in the middleware stack. 2010-01-21 16:52:49 +01:00
José Valim
04063393f9 Give higher priority to rails generators. 2010-01-21 14:11:24 +01:00
Pratik Naik
da142cd865 Supplying Arel::SqlLiteral is much faster 2010-01-21 17:52:09 +05:30
José Valim
378464a2e4 Default to sync instrumentation. 2010-01-21 13:09:12 +01:00
José Valim
dcb8b64975 Add shortcut test to abstract/render_test.rb 2010-01-21 12:12:10 +01:00
José Valim
48dc1ae309 Don't let generators die if rubygems puts crap in your load path. 2010-01-21 12:10:39 +01:00
José Valim
31fddf2ace Tidy up new filter_parameters implementation. 2010-01-21 11:57:24 +01:00
Prem Sichanugrist
b1bc3b3cd3 Add deprecation warning for calling filter_parameter_logging ActionController::Base, and allow it to be configured in config.filter_parameters
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-01-21 11:41:31 +01:00
Prem Sichanugrist
bd4f21fbac Move filter_parameter_logging logic out of the controller and create ActionDispatch::ParametersFilter to handle parameter filteration instead. This will make filteration not depending on controller anymore.
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-01-21 10:08:26 +01:00
José Valim and Mikel Lindsaar
3829f9ecfd Adding tests for attachments['blah.rb'] = {} et al 2010-01-21 20:03:55 +11:00
José Valim and Mikel Lindsaar
fbdbac2b88 Merge branch 'master' of git://github.com/rails/rails 2010-01-21 11:42:22 +11:00
Pratik Naik
fa9f000246 Use quoted_table_name with arel.from() if no from values explicitly supplied. Arel seems to be spending a lot of time figuring out the FROM value otherwise. 2010-01-21 01:37:02 +05:30
Pratik Naik
798d2828dc Cache quoted_table_name 2010-01-21 01:28:50 +05:30
Pratik Naik
24cc9e5b4f Relation#spawn is basically clone + reset 2010-01-21 00:41:15 +05:30
Pratik Naik
8bdcb6f072 Always use table.* in the finder query unless specified 2010-01-21 00:40:38 +05:30
Sam Ruby
c8cba7db76 Add AD::Route#to_s
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2010-01-20 10:56:27 -06:00
Pratik Naik
459e9b29d4 Use @limit_value and @offset_value instead of calling arel 2010-01-20 22:20:56 +05:30
Pratik Naik
8d31c9f3a0 Move update and update_all to Relation 2010-01-20 22:20:56 +05:30
Joshua Peek
93956a18e4 Only send filtered_env for notifications 2010-01-20 10:07:23 -06:00
Joshua Peek
87bcf1aa15 Request#filter_parameters and filter_env 2010-01-20 09:55:58 -06:00
Pratik Naik
f7d94cdc6d Fix AP's AR integration tests warning 2010-01-20 20:40:20 +05:30
Pratik Naik
1fb78e3ed8 Base.merge_conditions is no longer needed 2010-01-20 20:37:17 +05:30
Joshua Peek
909443eab6 Expose last controller in rack env["action_controller.instance"] 2010-01-20 09:00:23 -06:00
Santiago Pastorino
d1ffc54c06 fixes the failure of config.plugins without :all option tests [#3718 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-01-20 15:02:13 +01:00
José Valim
6e26be6960 Move ActionController::Translation to AbstractController::Translation. 2010-01-20 15:02:13 +01:00
José Valim
8e2fd54b19 Bring normalize behavior to AbstractController::Rendering 2010-01-20 15:02:13 +01:00
Pratik Naik
8b9bfbe225 Dont delegate Relation#update to arel 2010-01-20 19:01:26 +05:30
José Valim and Mikel Lindsaar
d3da87ce77 Mail method accepting all headers set via the hash 2010-01-21 00:10:22 +11:00
Pratik Naik
f216fadc0e Delegate delete_all to Relation 2010-01-20 18:33:14 +05:30
Pratik Naik
9756805676 Move destroy to Relation 2010-01-20 18:28:45 +05:30
Pratik Naik
223e2a2709 Remove Base.delete as it's same as Relation#delete 2010-01-20 18:24:36 +05:30
Pratik Naik
2493229674 Delegate exists? to Relation 2010-01-20 18:17:37 +05:30
José Valim and Mikel Lindsaar
c34cfcc29f Created mail method for new API 2010-01-20 23:46:59 +11:00
Pratik Naik
8f0f02a166 Make Relation#destroy_all handle all the cases 2010-01-20 18:12:50 +05:30
José Valim and Mikel Lindsaar
10c509fbfa Moved old API into deprecated_api.rb in preparation for new Rails 3 Mailer API 2010-01-20 22:26:24 +11:00
Mikel Lindsaar
8b37fee201 Merge branch 'master' of git://github.com/rails/rails
Conflicts:
	actionmailer/lib/action_mailer/base.rb
2010-01-20 21:58:22 +11:00
Pratik Naik
8a1be22849 Use unscoped instead of with_exclusive_scope for preloading 2010-01-20 16:11:14 +05:30
Pratik Naik
5502780c69 Move array_of_strings? to Relation 2010-01-20 14:01:42 +05:30
Pratik Naik
394c05ed82 Remove stale methods constructing joins 2010-01-20 13:24:53 +05:30
Yehuda Katz
1a50d2e66a Stop overriding LoadError.new to return a MissingSourceError (and sometimes nil!) 2010-01-19 22:35:26 -08:00
Joshua Peek
5ebfa62427 Revert streaming params parser support.
AS Xml and Json parsers expect the request body to be a real IO object
supporting methods like getc or ungetc which are not specified by the
Rack spec and aren't supported by Passenger or the Rewindable input
wrapper.

We can restore functionality if the AS parsers are rewritten to support
Racks subset of supported IO methods.
2010-01-19 22:56:38 -06:00
Joshua Peek
a5d06d05fb Cleanup middleware introspection output 2010-01-19 22:56:37 -06:00
Mikel Lindsaar
c04baed627 Fixing failing test on sendmail expectation 2010-01-20 14:12:17 +11:00
Mikel Lindsaar
2a3ec5fee4 Updating gemspec to 2.0.1 for mail 2010-01-20 14:12:05 +11:00
Pratik Naik
565b4cd3e0 Scope#find is no longer needed now that Relation#find handles all the cases 2010-01-20 03:40:37 +05:30
Pratik Naik
52ec4311f5 Delegate all finders to Relation 2010-01-20 03:35:25 +05:30
Pratik Naik
74e3539cda Ignore order for simple calculations to make postgresql happy 2010-01-20 02:17:49 +05:30
José Valim
848d6cd46b Mail should log when raise_delivery_methods is false. 2010-01-19 21:34:59 +01:00
Pratik Naik
d8c30723aa Named scopes dont need count() now that Relation#count handles all the cases 2010-01-20 01:35:20 +05:30
Pratik Naik
1b78a3f8d5 with_scope no longer needs :reverse_merge 2010-01-20 01:29:18 +05:30
Pratik Naik
42553a98ea Remove find_with_associations and related code from associations now that Relation handles that stuff 2010-01-20 01:20:20 +05:30
Prem Sichanugrist
6e62e89737 Fix bug that causes TimeZone.seconds_to_utc_offset to returns wrong offset when hour < 0 and not in hundreds [#3741 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-01-19 20:31:33 +01:00
José Valim
d2759d125a Avoid load tasks from plugins recursively (so stuff in tests or vendor does not get loaded). 2010-01-19 20:07:50 +01:00
José Valim
4ca9765088 Allow railties to specify generators paths. 2010-01-19 19:59:08 +01:00
Pratik Naik
9acf0af544 Remove Relation#where_clause 2010-01-19 23:11:54 +05:30
Pratik Naik
dbce07b81d Give preference to to_a over arel from Relation#method_missing 2010-01-19 22:52:08 +05:30
Pratik Naik
9465b84b54 Rename CalculationMethods to Calculations and get rid of the old Calculations module 2010-01-19 22:17:33 +05:30
Pratik Naik
8f63dcb648 Move the only remaining calculation method calculate() to Relation 2010-01-19 22:17:33 +05:30
José Valim
fef5afa962 Get rid of RAILS_ROOT deprecation on AM::TestCase. 2010-01-19 16:13:27 +01:00
José Valim
e8e8da5c85 Logging thread should not die on logging errors. 2010-01-19 16:13:27 +01:00
Pratik Naik
ec63fdcff3 Get rid of construct_count_options_from_args 2010-01-19 20:43:03 +05:30
Pratik Naik
73b179eb68 Delegate count to Relation 2010-01-19 20:37:12 +05:30
Joshua Peek
88ffba2329 Disable ShowExceptions during integration tests 2010-01-19 09:06:21 -06:00
José Valim
a8e25a518a Move parameters to the top on logging. 2010-01-19 15:35:24 +01:00
José Valim
5a81dbf489 Fix failing test. 2010-01-19 15:35:23 +01:00
José Valim
4e2852a487 Do not send rack.input or any other rack information to AD listeners. 2010-01-19 15:35:23 +01:00
José Valim
e10f51b6b7 Refactor delivery methods. 2010-01-19 15:34:58 +01:00
Joshua Peek
bec5356f25 Define named routes for other non-GET REST actions 2010-01-19 08:23:23 -06:00
José Valim
f32e3aff5f Merge branch 'master' of git://github.com/rails/rails 2010-01-19 14:29:11 +01:00
José Valim
c1848f9736 Get all tests passing. 2010-01-19 14:28:04 +01:00
Mikel Lindsaar
c8e2998701 First pass on fixing delivery method 2010-01-19 23:36:49 +11:00
Pratik Naik
9c7c7104f6 Fix the named scope equality check 2010-01-19 17:45:48 +05:30
Mikel Lindsaar
d201d39437 latest updates 2010-01-19 23:09:46 +11:00
Pratik Naik
4148c686ec Delegate :average, :minimum, :maximum, :sum to Relation 2010-01-19 15:50:47 +05:30
Mikel Lindsaar
2107921000 Merge branch 'master' of git://github.com/rails/rails into rails 2010-01-19 21:05:37 +11:00
Pratik Naik
ed8501ef16 Fix DoubleRenderError error message 2010-01-19 15:23:56 +05:30
Pratik Naik
b9599502c9 Add Relation#construct_relation_for_association_calculations for calculations with includes 2010-01-19 15:22:09 +05:30
Joshua Peek
71d67fc6bd Prettier hash dump 2010-01-18 21:22:09 -06:00
Joshua Peek
5579de5bab Show Rack env dump on exception page 2010-01-18 21:12:17 -06:00
José Valim
f00cbf7872 Bring render_message back for 2.3 compatibility. 2010-01-19 01:36:07 +01:00
José Valim
a0374582ff Bring body(Hash) behavior back. 2010-01-19 01:36:07 +01:00
José Valim
c7255386cd script/generate mailer Notifier will now create a mailer at app/mailers. 2010-01-19 01:36:06 +01:00
José Valim
a18dd52d58 Get generators tests running on Ruby 1.9.1 2010-01-19 01:36:06 +01:00
José Valim
93d64dfefc Improve script/generate help. 2010-01-19 01:36:06 +01:00
José Valim
e1029be1eb Since Rails will require Ruby >= 1.8.7, we can rely on instance_exec. 2010-01-19 01:36:06 +01:00
Pratik Naik
e6a68a5cc3 Add Relation#find_with_associations to load relation with eager loaded associations 2010-01-19 04:42:19 +05:30
Joshua Peek
f2693cda44 Install plugin view paths into AM view load path 2010-01-18 16:48:04 -06:00
Joshua Peek
59cd044310 Add all folders in app/* to the load path 2010-01-18 15:37:58 -06:00
Pratik Naik
9e7ec2a9f1 Simplify calculation scope building. Remove :order from associations as it is troublesome w/ calculation methods using postgresql. 2010-01-18 23:40:42 +05:30
Pratik Naik
3c4186b366 Remove construct_calculation_arel_with_included_associations because it's same as construct_finder_arel_with_included_associations 2010-01-18 23:40:42 +05:30
Pratik Naik
893524382a No need to pass current_scoped_methods to construct_calculation_arel everytime 2010-01-18 23:40:42 +05:30
José Valim
728db5a932 Rake tasks should load generators from new paths. 2010-01-18 18:22:55 +01:00
Joshua Peek
68b76a38eb Cleanup deprecation notices. 2010-01-18 09:49:38 -06:00
Paco Guzman
e27bfad6a5 Forgot to change named_scope to scope in an ArgumentError raise exception for duplication scopes related to commit d60bb0a9e4 [#3736 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-01-18 16:36:08 +01:00
José Valim
a2b76d1dde Improve generators help. 2010-01-18 16:21:11 +01:00
José Valim
61f77b1dcd More cleaning up on rails generators load path. 2010-01-18 16:21:11 +01:00
José Valim
9fffdc5cdb Generators load path now will be Ruby load path. If you want to use rspec:install generator, you need generators/rspec/install_generator in your load path. 2010-01-18 16:21:11 +01:00
José Valim
e75ea47434 Automatically remove :generators: from namespaces. 2010-01-18 16:21:10 +01:00
José Valim
a2e2e73c5e Ensure generators can be invoked by their shortcut and remove attr_reader tasks. 2010-01-18 16:21:10 +01:00
Pratik Naik
4c00c65c58 Simplify construct_finder_arel_* methods 2010-01-18 19:40:23 +05:30
Pratik Naik
2a2bc8e84a Handle invalid query IN() generated when a blank array is supplied in hash conditions 2010-01-18 18:56:55 +05:30
Pratik Naik
8bb5274648 Get rid of Relation#order_clauses 2010-01-18 18:56:55 +05:30
Pratik Naik
8ba2902dd4 Fix the named_scope deprecation notice 2010-01-18 18:56:55 +05:30
José Valim
40c4a0036a Ensure deprecated validate methods are invoked when they are private [#3214 status:resolved] 2010-01-18 09:56:36 +01:00
Damien Mathieu
38c2e4687f Missing rename from named_scope to scope [#3735 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-01-18 09:33:36 +01:00
Joshua Peek
c29bb8857e Clear out AS callback method pollution in AC::Base.action_methods 2010-01-17 22:06:28 -06:00
Joshua Peek
58fe3295fe Base#action_methods delegates to Base.action_methods 2010-01-17 21:51:07 -06:00
Joshua Peek
eeba755a11 Accessing nonexistant cookies through the signed jar should not raise an
exception
2010-01-17 21:31:06 -06:00
Pratik Naik
6ce538d485 Add missing CHANGELOG entry about relations as scopes 2010-01-18 04:42:04 +05:30
Pratik Naik
d60bb0a9e4 Rename named_scope to scope 2010-01-18 04:38:19 +05:30
Pratik Naik
e1d507c7fb Dont check for class equaity when merging relations 2010-01-18 04:28:21 +05:30
Pratik Naik
88de6b2de2 Inherit named scope class Scope from Relation 2010-01-18 04:24:24 +05:30
Pratik Naik
c6850d8361 Ensure that Scope#proxy_scope is always klass. Rename proxy_scope to klass too. 2010-01-18 00:03:18 +05:30
Pratik Naik
dca3de3bc7 Make relations work as scopes 2010-01-17 23:22:11 +05:30
Pratik Naik
f0cde5be54 Make sure named_scope names are not used as method names already 2010-01-17 21:34:41 +05:30
Sam Elliott and Santiago Pastorino
5a6596787b Module lookup issue on flash_test using ruby 1.9 solved [#3716 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-01-17 16:57:14 +01:00
Prem Sichanugrist
eb67532bc1 Make local_request? to returns true when facing ::1 IPv6 address [#3257 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-01-17 16:56:54 +01:00
Rizwan Reza
a0dc6cc70b Fix RAILS_ROOT deprecation on guides generation. [#3710 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-01-17 16:28:31 +01:00
José Valim
44a10a2440 Fix resources_path_names branch which was sending an array as entity. [#3715 status:resolved] 2010-01-17 16:18:14 +01:00
José Valim
58136e1bd3 Plugin generator should use templates. 2010-01-17 15:17:50 +01:00
Rizwan Reza
e3898bda9c Take --skip-activerecord into account boot.rb requires. [#3711 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-01-17 14:55:11 +01:00
Rizwan Reza
cf109342a7 Fixes rake:template task [#3714 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-01-17 14:54:49 +01:00
Santiago Pastorino
8268d68b50 mail.create_path returns an array test fixed [#3712 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-01-17 14:54:06 +01:00
Samuel Elliott
31ea83eb89 Adding Proc support to validation messages so that they can become a little more dynamic, allowing for customisations during the request [#3514 status:resolved].
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-01-17 14:40:10 +01:00
José Valim
c0d31ca41b save(false) is gone, use save(:validate => false) instead. 2010-01-17 14:22:34 +01:00
Mikel Lindsaar
ccb7d9def3 Fixing up base to refactor settings 2010-01-17 23:27:59 +11:00
José Valim
020e656447 Move middleware builder back to Rails::Rack::Metal without losing the new behavior. 2010-01-17 13:23:38 +01:00
José Valim
27d9836ad3 Add ActionDispatch::Railties::Subscriber and finish tidying up the logging. 2010-01-17 12:43:17 +01:00
José Valim
61ada28ed3 Get rid of prepare_each_request, since now it's a middleware initialization parameter. 2010-01-17 11:44:04 +01:00
José Valim
8f5e733998 Add notifications to default middleware stack and update subscriber tests. 2010-01-17 11:35:48 +01:00
José Valim
0334f9f6cf Add ActionDispatch::Notifications middleware. 2010-01-17 11:29:51 +01:00
Mikel Lindsaar
9a3a0d15fc Updating mail require to 2.0.0 2010-01-17 21:02:38 +11:00
José Valim
afd0c06dfa Validates needs hash slice. 2010-01-17 09:57:16 +01:00
José Valim
645832cfdd Clean up filter parameter logging tests. 2010-01-17 09:54:24 +01:00
Pratik Naik
54a043895f Make merging of order values consistent 2010-01-17 14:19:41 +05:30
Joshua Peek
f9a4300415 debug helper output should not be sanitized 2010-01-16 21:43:03 -06:00
Joshua Peek
eb39d0f7b9 Use backtrace cleaner for dev mode exception page 2010-01-16 21:34:35 -06:00
Joshua Peek
d2d4acf027 Cookies middleware 2010-01-16 17:22:27 -06:00
Pratik Naik
8d87c80c19 Make Relation#reload force load the records immediately 2010-01-17 04:25:59 +05:30
Pratik Naik
7921a73acd Use relations to build scope for named scopes 2010-01-17 04:20:11 +05:30
Pratik Naik
b8b6621acb Simplify Model.scoped definition 2010-01-17 03:54:52 +05:30
Joshua Peek
603d4fbacd Build middleware stack and reload routes after app initializers run
[#3709 state:resolved]
2010-01-16 16:15:32 -06:00
Pratik Naik
dba196cb7f Merge docrails 2010-01-17 03:26:20 +05:30
Pratik Naik
6e3bee6cf1 Cache Model.arel_table 2010-01-17 03:14:17 +05:30
Pratik Naik
6806483b91 Use arel_table[] instead of unscoped[] to get arel attribute 2010-01-17 03:10:07 +05:30
Pratik Naik
0ab30637dd Revert "Fix #microseconds conversion and #fast_string_to_time"
This reverts commit 717a2941e1. Bunch of failures when running postgresql tests.
2010-01-17 03:04:11 +05:30
Pratik Naik
cd90dcb1bd Rename Model.active_relation to Model.unscoped 2010-01-17 03:00:56 +05:30
Joshua Peek
e9a1dbe79a Allow custom controller for resource(s) [#3703 state:resolved] 2010-01-16 15:16:22 -06:00
Pratik Naik
468cfcedd3 Improve the error message for class mismatch on Relation#merge 2010-01-17 02:08:42 +05:30
Pratik Naik
7f8d4d3c4e Get rid of Base#merge_includes 2010-01-16 23:59:57 +05:30
Ryan Bigg
e17b23db01 Make guides generation work for Ruby 1.9.x
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2010-01-16 23:25:16 +05:30
Ryan Bigg
0fc6418e75 Mark title and headers as html_safe! for guides [#3702 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2010-01-16 23:24:38 +05:30
Pratik Naik
07e41a8361 No need to set @arel_engine to nil twice. Committed by mistake in 3968825f 2010-01-16 23:17:14 +05:30
Pratik Naik
3968825f5f Make sure Model#active_relation always adds STI conditions if needed 2010-01-16 23:11:35 +05:30
Pratik Naik
cfdfd89926 Use new finder methods for association preloading 2010-01-16 22:14:10 +05:30
Pratik Naik
f80be3ea0f Use Relation#apply_finder_options from calculations 2010-01-16 22:05:01 +05:30
Pratik Naik
61e831564a Add Relation#apply_finder_options for applying old finder options 2010-01-16 21:21:20 +05:30
Sam Granieri
488b4c8c5c Make script/dbconsole work again [#3690 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2010-01-16 20:55:22 +05:30
José Valim
92f49b5f1e Split ActionDispatch http in smaller chunks. 2010-01-16 15:45:07 +01:00
Mikel Lindsaar
03c1457eb5 Removed autoload of DeliveryMethods 2010-01-16 14:02:55 +01:00
Mikel Lindsaar
0750304c01 Migrated over to Mail doing delivery. 2010-01-16 14:02:55 +01:00
Mikel Lindsaar
5b0c8a1266 Removing internal delivery agents 2010-01-16 14:02:55 +01:00
Pratik Naik
5a52523a80 Rename active_relation_engine -> arel_engine and active_relation_table -> arel_table 2010-01-16 16:02:30 +05:30
Chris Hapgood
717a2941e1 Fix #microseconds conversion and #fast_string_to_time
* Use direct integer parsing in #fast_string_to_time to avoid convoluted
   conversions and errors due to truncation.
 * Use Float#round in #microseconds to avoid truncation errors.

Signed-off-by: Michael Koziarski <michael@koziarski.com>
2010-01-16 15:21:36 +13:00
Pratik Naik
81cd11259c Remove protected method Class#scoped? 2010-01-16 04:38:16 +05:30
Pratik Naik
2d0bc08a7e Make type_condition return Arel predicate and not a string condition 2010-01-16 04:21:18 +05:30
Pratik Naik
99dd107760 Remove unused default_select 2010-01-16 04:21:18 +05:30
José Valim
b3c87746ef Move I18n to gemspec and update dependencies. 2010-01-15 23:48:38 +01:00
José Valim
5a5760828b Add tests for simple match with namespace. 2010-01-15 23:36:03 +01:00
José Valim
13d76b6170 Add some implicit path tests to Subscriber. 2010-01-15 23:36:03 +01:00
Joshua Peek
b2578a148c Fix singleton resource named routes 2010-01-15 16:31:00 -06:00
Pratik Naik
2ee130abec Remove scope related code from construct_join 2010-01-16 03:51:10 +05:30
Joshua Peek
89082004b0 Fix const reference for SessionRestoreError 2010-01-15 16:20:12 -06:00
Joshua Peek
6437eb9f35 Always join scoped paths with slashes 2010-01-15 16:13:01 -06:00
Joshua Peek
576b8dda52 Cleanup internal resource macro to use method helper shorthand 2010-01-15 16:13:01 -06:00
Pratik Naik
21ce8eac9b Remove stale construct_* methods 2010-01-16 03:37:04 +05:30
Pratik Naik
951e485b88 Remove construct_conditions 2010-01-16 02:56:13 +05:30
Pratik Naik
6c997c3c39 Simplify Model.delete_all 2010-01-16 02:38:19 +05:30
Pratik Naik
c5f3811a49 Model.delete should just use scoped.delete 2010-01-16 02:35:53 +05:30
Joshua Peek
184ef28f55 Routing method shorthand shouldn't clobber :to options 2010-01-15 14:55:13 -06:00
Joshua Peek
ead93c5be5 Move Flash into middleware 2010-01-15 14:55:13 -06:00
Pratik Naik
3da29f647b Remove AR#scope() method 2010-01-16 01:42:01 +05:30
Joshua Peek
3eaf525213 Make HEAD method masquerade as GET so requests are routed correctly 2010-01-15 12:38:50 -06:00
Pratik Naik
43a84a054f Fix the query matching in SubscriberTest 2010-01-16 00:02:46 +05:30
Pratik Naik
bed9179aa1 Make scopes use relations under the hood 2010-01-16 00:02:46 +05:30
José Valim
1c30ec23fe In heterogeneous collections, neither the @path nor the @template are available, so we need to tell that we are simply rendering a collection. 2010-01-15 17:43:45 +01:00
José Valim
a0cdfdc771 Allow f.submit to be localized per object. 2010-01-15 16:10:19 +01:00
José Valim
e5a2a9fced Remove URI object from ActiveResource notification, send the :mailer class in AM (like in AP#process_action) and remove locale instrumentation. 2010-01-15 15:57:33 +01:00
José Valim
4598d88749 Ensure log is flushed and tailed on failures. 2010-01-15 14:16:52 +01:00
José Valim
5252f5c1c9 Bundle automatically if --dev or --edge is given as option. 2010-01-15 13:39:56 +01:00
José Valim
c905fce35f Add message_id to AM payload and don't send bcc and cc if they were not sent. 2010-01-15 13:17:56 +01:00
José Valim
a5a9156b4e Template rendering should include layout time. 2010-01-15 12:24:32 +01:00
José Valim
6487d2871c Fix an issue where log was not being tailed in the first request. 2010-01-15 12:24:31 +01:00
José Valim
88dd60298e Do not send the whole controller in notifications, cherry pick required pieces. 2010-01-15 12:24:31 +01:00
José Valim
704daad762 Ensure we just send Ruby Stdlib objects in ActionMailer notifications. 2010-01-15 12:24:31 +01:00
José Valim
6932f6751e ActiveRecord should give the connection id as payload, and not the whole connection. 2010-01-15 12:24:31 +01:00
José Valim
7f4d8e3fbd Yield the payload notifications for further modification (like adding the result). 2010-01-15 12:24:31 +01:00
José Valim
b0994be5bd LogTailer should be invoked after all logs in threads were flushed. 2010-01-15 12:24:31 +01:00
José Valim
b4019d5080 Rails::Subscriber is now responsible for flushing all loggers it's responsible for. 2010-01-15 12:24:31 +01:00
José Valim
8b9bff9557 Small tweaks in ActionController subscriber messages format. 2010-01-15 12:24:31 +01:00
José Valim
8c8942ed4f Move Dispatcher setup to Railties and add instrumentation hook. 2010-01-15 12:24:30 +01:00
Joshua Peek
5a8e7287c5 Set a good example, no system ignores in project ignore file 2010-01-13 20:26:01 -06:00
Joshua Peek
be968ecd8b Respect resources_path_names and :path_names options in new dsl 2010-01-13 20:26:01 -06:00
Joshua Peek
0f51e45307 optimise_named_routes is unnecessary 2010-01-13 20:22:53 -06:00
José Valim
9038a4af35 Add documentation to f.submit and make scaffold generators use the new shortcut. 2010-01-14 02:02:07 +01:00
José Valim
363545aa20 Different nested validations should not be ignore [#3638 status:resolved] 2010-01-14 01:46:27 +01:00
José Valim
35933822de Ensure optional path scopes are properly handled. 2010-01-14 01:31:17 +01:00
Stephen Celis
2835ec6134 Custom 'type' attribute support for text_field. [#3646 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-01-14 01:07:04 +01:00
José Valim
214b548485 Make check boxes accept :multiple as option so they can handle collections (such as HABTM). 2010-01-14 01:07:03 +01:00
José Valim
d50bf47b00 Call :to_model before working with the object. 2010-01-14 01:07:03 +01:00
Carlos Antonio da Silva
8e0208f650 Add possibility to use i18n translatios in submit FormHelper.
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-01-14 01:07:03 +01:00
José Valim
f921ad5c97 Tidy up ActiveRecord and Views runtime information on process action logger. 2010-01-14 01:07:03 +01:00
José Valim
116df09c3e Add notifications to ActiveResource. 2010-01-14 01:07:03 +01:00
José Valim
7c3573f327 Add instrument! to notifications which adds the result to the payload. 2010-01-14 01:07:03 +01:00
José Valim
2a6bc1263e Add subscriber to ActionMailer. 2010-01-14 01:07:03 +01:00
Joshua Peek
d01716731b Add router support for resources :only and :except actions 2010-01-13 17:23:14 -06:00
Joshua Peek
5d787590f2 Cool this routing test passes now 2010-01-13 16:42:47 -06:00
Joshua Peek
bf9b81e2cb Pass :as to resources to change the resource name 2010-01-13 12:18:06 -06:00
Joshua Peek
521ef3c40f Passing in a crud action overloads the default action instead of creating a
new member action.
2010-01-13 11:45:27 -06:00
José Valim
01839834fd ControllerRuntime tests also use Rails::Subscriber::TestHelper. 2010-01-13 01:19:24 +01:00
José Valim
b0d35ad00c Test fragment/page cache and send data/file notifications. 2010-01-13 01:19:24 +01:00
José Valim
da5978c223 Add subscriber for ActionPack and move all logging inside it. 2010-01-13 01:19:23 +01:00
José Valim
8d78a82d79 Deprecate ActiveRecord::Base.colorize_logging. 2010-01-13 01:19:23 +01:00
José Valim
743cafb7f4 Create Rails::Subscriber::TestHelper and use it to make ActiveRecord subscriber tests run in both sync and async scenarios. 2010-01-13 01:19:23 +01:00
José Valim
dc2e291a93 Move AR logging responsibilities to ActiveRecord::Railties::Subscriber. 2010-01-13 01:19:23 +01:00
José Valim
fe3ceabeed Set up subscriber on initialization. 2010-01-13 01:19:23 +01:00
José Valim
7f25ccf38d Remove allow_concurrency and verification_timeout from ActiveRecord::Base (deprecated since 2.2). 2010-01-13 01:19:23 +01:00
José Valim
c464271e03 Get rid of old rails_info_controller.rb 2010-01-13 01:19:22 +01:00
José Valim
1a275730b2 Set deprecation warnings for RAILS_ENV and RAILS_DEFAULT_LOGGER. 2010-01-13 01:19:22 +01:00
José Valim
9dd4c79d61 Allow to add subscribers through Railtie. 2010-01-13 01:19:22 +01:00
José Valim
4704af763f Do not send notifications when instrumentation raise an error. 2010-01-13 01:19:22 +01:00
José Valim
1e12dc04cb Stub initial Rails::Subscriber implementation. 2010-01-13 01:19:22 +01:00
José Valim
5f34bd61b0 As the other constants, RAILS_DEFAULT_LOGGER no more. 2010-01-13 01:19:22 +01:00
José Valim
c4e3344a26 Revert "Add a generator_paths config option"
This reverts commit 8665c754cb.
2010-01-13 01:19:22 +01:00
José Valim
a5c45e69d9 Remove old bundler version from vendor. 2010-01-13 01:19:22 +01:00
Chad Woolley
b9a7ec6db5 reduce max size of fixture IDs to fix sqlite2 tests, because sqlite2 was getting negative and changing values for ID field. See http://www.sqlite.org/datatypes.html
Signed-off-by: Yehuda Katz <wycats@gmail.com>
2010-01-12 11:01:49 -08:00
Pratik Naik
006519d2c9 Use Relation#except for reversing the order 2010-01-12 22:55:57 +05:30
Pratik Naik
4938a5746d Ensure using proper engine for Arel::Table 2010-01-12 22:37:26 +05:30
Pratik Naik
a04486dc99 Delay building arel relation as long as possible for improved introspection 2010-01-12 22:25:55 +05:30
José Valim
b078f7fd39 Fix typos and add tests to ensure they will be caught the next time. 2010-01-11 23:38:35 +01:00
José Valim
cccb998800 Expose connections available in the connection pool. 2010-01-11 23:38:18 +01:00
José Valim
d382e93d8f Improve ActionPack logger output. 2010-01-11 23:38:17 +01:00
David Heinemeier Hansson
8cb594a2e1 Get everyone running on Rails.env and fix the broken environment settings for script/console and script/dbconsole 2010-01-11 14:01:28 -08:00
José Valim
a9eebde856 Merge branch 'master' of git://github.com/rails/rails 2010-01-11 15:18:24 +01:00
José Valim
c1239e6509 Send the connection in AR notifications to avoid checking out new connections in threads just for logging purposes. 2010-01-11 15:14:52 +01:00
José Valim
0a8004efd2 Provide useful information when instrumenting partials. 2010-01-11 10:21:15 +01:00
Joshua Peek
02bbde4e78 Cleanup junk metal and revise API
API Change: Returning a "X-Cascade: pass" header triggers the cascade
instead of a 404 response.
2010-01-10 23:09:10 -06:00
Joshua Peek
3921586091 Rewrite Metal tests 2010-01-10 22:33:34 -06:00
David Heinemeier Hansson
2c2b84f93c Javascript tests expects the old default of escaping HTML, make it so for now 2010-01-10 18:25:17 -08:00
David Heinemeier Hansson
5ddc597066 Use safe_concat instead of trying to html_safe! what might be a frozen string 2010-01-10 18:13:43 -08:00
José Valim
d2e7c1b97d Raise an error if respond_with is invoked and no format is declared. 2010-01-10 20:21:08 +01:00
José Valim
8d72ba51ba Ensure nested namespaces work as expected. 2010-01-10 18:42:45 +01:00
Joao Carlos
36969c6ecd Fixes namespaced routes [#3673 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-01-10 12:49:31 +01:00
David Heinemeier Hansson
d2c4a93c69 Have to remove the environment name from ARGV or IRB will freak out 2010-01-09 09:52:16 -08:00
Yehuda Katz
8665c754cb Add a generator_paths config option 2010-01-09 11:04:06 -06:00
José Valim
7e6530b170 Merge remote branch 'eloy/master' 2010-01-09 00:23:29 +01:00
José Valim
017f5d5308 Fix typo by renaming :genre to :gender. 2010-01-09 00:18:07 +01:00
José Valim
93898b389b Ensure new validates works with uniqueness validator. 2010-01-08 23:50:31 +01:00
David Heinemeier Hansson
d4589e96ef Fixed that PrototypeHelper#update_page should return html_safe [DHH] 2010-01-08 13:46:30 -08:00
Jeffrey Hardy
652d1c19ea Allow AR::Schema's migrations_path to be overwritten by subclasses. Defaults to 'db/migrate'
[#3671 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2010-01-08 13:08:23 -08:00
Eloy Duran
7f775ef1a9 Renamed AssociationReflection #collection_association? to #collection?. 2010-01-08 21:47:17 +01:00
Eloy Duran
f2aacd5140 Rollback the transaction when one of the autosave associations fails to save. [#3391 state:resolved] 2010-01-08 21:45:02 +01:00
Lawrence Pit
5193fe9dd7 Exclude unchanged records from the collection being considered for autosave. [#2578 state:resolved]
Signed-off-by: Eloy Duran <eloy.de.enige@gmail.com>
2010-01-08 21:45:02 +01:00
Bryan Stearns
1080351437 Add failing test that triggers the stack overflow 2010-01-08 21:45:02 +01:00
José Valim
802b08da00 Mailer should give self as payload because it contains all the information needed (as the template rendered and the mailer name). 2010-01-08 21:36:04 +01:00
José Valim
7045c4c279 Allow validates to map some types to specific options. So now you can do:
validates :email, :presence => true, :format => /@/
  validates :genre, :inclusion => %w(m f)
  validates :password, :length => 6..20
2010-01-08 21:36:04 +01:00
José Valim
fa14d6d51e Compile length validator options still at the class level, so whenever the validator is called, it just needs to check for :maximum, :minimum and :is values. 2010-01-08 21:36:04 +01:00
David Heinemeier Hansson
188d52165b Fixed that much of DateHelper wouldn't return html_safe? strings [DHH] 2010-01-08 11:49:12 -08:00
David Heinemeier Hansson
5ea130943e Fixed that fragment caching should return a cache hit as html_safe (or it would all just get escaped) [DHH] 2010-01-07 17:45:32 -08:00
Mikel Lindsaar
1ddf17dff0 Return-Path per RFC needs '<' and '>' around the addr_spec 2010-01-08 12:17:12 +11:00
Jeremy Kemper
8087d51842 Liberalize picky test 2010-01-07 17:08:02 -08:00
Jeremy Kemper
1ca9c26301 Merge remote branch 'mikel/master' 2010-01-07 16:59:23 -08:00
Jeremy Kemper
ee85f15453 Qualify constant lookup in BasicObject 2010-01-07 16:43:25 -08:00
Mikel Lindsaar
82407f94aa Merge branch 'master' of github.com:mikel/rails
Conflicts:
	actionmailer/actionmailer.gemspec
	actionmailer/lib/action_mailer/vendor/text-format-0.6.3/text/format.rb
2010-01-08 11:17:04 +11:00
Mikel Lindsaar
e2aa6712a1 Updating mail require 2010-01-08 11:13:46 +11:00
Jeremy Kemper
4300f94533 Revert "Remove connection method definition, since it's called just once."
Restore the connection method which was added so it can be overridden.

This reverts commit e428c75d2b.
2010-01-07 13:30:51 -08:00
José Valim
3022ce4f72 No more hacks to ensure generators are executed inside Rails.root. 2010-01-07 21:24:50 +01:00
José Valim
ccc9f0b7de Ensure application names are not singularized. 2010-01-07 21:09:32 +01:00
Joshua Peek
8fe66f1af0 Run railtie and plugin initializers before app specific ones 2010-01-07 14:01:34 -06:00
José Valim
19e7c524d2 Ensure config/application.rb also uses app_const instead of app_name.classify. 2010-01-07 20:59:26 +01:00
José Valim
423e2acbb7 Merge remote branch 'eloy/master' 2010-01-07 20:13:07 +01:00
José Valim
47a5fd4c4b Allow :if, :unless, :on, :allow_nil and :allow_blank as shared options in validates. 2010-01-07 19:23:59 +01:00
jamie
0a79eb7889 Add validates method as shortcut to setup validators for a given set of attributes:
class Person < ActiveRecord::Base
  include MyValidators

  validates :name, :presence => true, :uniqueness => true, :length => { :maximum => 100 }
  validates :email, :presence => true, :email => true
end

[#3058 status:resolved]

Signed-off-by: José Valim <jose.valim@gmail.com>
2010-01-07 19:23:59 +01:00
Jeffrey Hardy
2dcc53bdbc Remove stray semicolon from cookie_verification_secret initialzer template 2010-01-07 11:51:54 -05:00
Jeffrey Hardy
f8352ec255 Align assignments in the session_store initializer template 2010-01-07 11:46:55 -05:00
José Valim
3b631df101 Ensure that segments in default_url_options also work with format specified. 2010-01-07 17:17:06 +01:00
José Valim
f149eb19d4 From now on, parameters defined in default_url_options can be absent from named routes.
This allows the following setup to work:

  # app/controllers/application_controller.rb
  class ApplicationController
    def default_url_options(options=nil)
      { :locale => I18n.locale }
    end
  end

  # From your views and controllers:
  I18n.locale                 #=> :en
  users_url                   #=> "/en/users"
  users_url(:pl)              #=> "/pl/users"
  user_url(1)                 #=> "/en/users/1"
  user_url(:pl, 1)            #=> "/pl/users/1"
  user_url(1, :locale => :pl) #=> "/pl/users/1"

If you provide all expected parameters, it still works as previously.
But if any parameter is missing, it tries to assign all possible ones
with the hash returned in default_url_options or the one passed straight
to the named route method.

Beware that default_url_options in ApplicationController is not shared
with ActionMailer, so you are required to always give the locale in your
email views.
2010-01-07 15:34:14 +01:00
José Valim
f564f947d9 Remove duplicated url_for code and move methods shared between ActionMailer and ActionController up to AbstractController. 2010-01-07 15:31:50 +01:00
José Valim
598456b68b Updated the documentation for helpers.label. 2010-01-07 15:31:50 +01:00
José Valim
a25ef06956 Allow to specify default attributes names translation in I18n yml files.
For example, you could easily specify :created_at and :updated_at translations as:

  en:
    attributes:
      created_at: "Created at"
      updated_at: "Updated at"

This configuration is built on ActiveModel, so it means those translations are
shared between different ORMs as well (but always as a fallback).
2010-01-07 15:31:50 +01:00
José Valim
b0572ab2b6 Be sure to dup load paths before clearing the array. 2010-01-07 15:31:50 +01:00
José Valim
c68cc49dcd Use helpers.label instead of views.labels. 2010-01-07 15:31:50 +01:00
José Valim
a091e2e4f6 errors in ActionView should not be namespaced as well. 2010-01-07 15:31:50 +01:00
José Valim
821a160a49 Add a deprecation message to activerecord.errors. 2010-01-07 15:31:49 +01:00
José Valim
190ce3ab37 Errors messages are now moved from :activerecord.errors to simply :errors on I18n yml files. 2010-01-07 15:31:49 +01:00
Eloy Duran
9550916903 Raise a RecordNotFound if an ID in nested attributes is given but doesn't return a record. [#2415 state:resolved] 2010-01-07 13:19:49 +01:00
Eloy Duran
b6264c43f4 Moved the validation logic to the association reflection and refactored autosave_association.rb a bit. 2010-01-07 13:19:48 +01:00
Eloy Duran
fc6aae3459 Remove deprecated '_delete' option from NestedAttributes. 2010-01-07 13:19:48 +01:00
Eloy Duran
a559260e41 Removed unnecessary call to #try and cleaned up a bit more. 2010-01-07 13:19:48 +01:00
Eloy Duran
f866ced24a Don't use strings for callbacks, as these will be evaled. Rather use symbols, which uses a direct method dispatch.
Patch by Comron Sattari. [#3429 state:resolved]
2010-01-07 13:19:48 +01:00
Eloy Duran
2171e0a1d1 Cleanup some code in nested_attributes.rb, autosave_association.rb, and associations.rb with AssociationReflection#collection_association?
Also cache the result value.
2010-01-07 13:19:48 +01:00
Eloy Duran
f82adc7c5a Add AssociationReflection#collection_association? which returns true if it's for a has_many or has_and_belongs_to_many association. 2010-01-07 13:19:48 +01:00
Eloy Duran
1afa9fa5a9 Refactored nested attributes a bit around :reject_if => :all_blank. 2010-01-07 13:19:48 +01:00
Jeremy Kemper
a323b83acf Remove unneeded reliance on super -> method_missing quirk 2010-01-07 00:06:20 -08:00
Jeremy Kemper
816ba1e15a Remove unneeded reliance on Numeric#round quirk 2010-01-06 23:35:03 -08:00
José Valim
74f6ccea20 instrumenter should be accessible from ActiveSupport::Notifications. 2010-01-06 22:24:16 +01:00
José Valim
0c2d933f36 Ensure before_validation and after_validation accepts :on as option. 2010-01-06 22:24:16 +01:00
Jeffrey Hardy
cfe0fcae06 Fix failing app generator test when using the --dev option 2010-01-06 14:22:51 -05:00
Jeffrey Hardy
caad6c634c Restore require of 'active_record/fixtures' for Rake tasks that use them 2010-01-06 13:58:27 -05:00
Jeffrey Hardy
894ce15534 Use better defaults for fixtures: transactional=true, instantiated=false
These reflect the settings that were previously included in the default
test_helper.rb, removed in d7d9173.
2010-01-06 13:38:11 -05:00
Jeffrey Hardy
891ba18d65 Update db:migrate error message to reflect the removal of config.frameworks 2010-01-06 13:37:45 -05:00
Jeffrey Hardy
8a41b710f6 Fix spacing on frameworks error message 2010-01-06 13:37:11 -05:00
Joshua Peek
88fd569ba0 Remove config.gem deprecation stub since its not "deprecated" but
completely removed.

This makes feature detection easier with config.respond_to?(:gem)
2010-01-06 11:33:04 -06:00
José Valim
0d5ce7c525 namespace in routes changes both the path and name prefix. 2010-01-06 09:51:46 +01:00
José Valim
e4099c2ad3 Allow named routes to be debugged. 2010-01-06 09:32:29 +01:00
Joshua Peek
bbe80ae652 config.plugins should still work with an array of strings 2010-01-05 23:37:40 -06:00
José Valim
10389a4c29 Ruby 1.9.1 requires hash given to foormat to contain symbols. 2010-01-06 00:42:58 +01:00
José Valim
0cf190001e Remove CGI.escape in function of Rack::Mount.escape 2010-01-06 00:33:17 +01:00
José Valim
e55d70a380 redirect in routes takes port into account [#3653 status:resolved] 2010-01-05 23:40:56 +01:00
Joshua Peek
b3900a29eb All router redirect helper to accept a full URI [#3653 state:resolved] 2010-01-05 12:00:38 -06:00
Joshua Peek
8ff4faf66a assert_template depends on AV::Template monkey patches in action_view/test_case 2010-01-05 11:48:06 -06:00
David Heinemeier Hansson
2dc5aeed6d NumberHelper#number_to_currency should output html_safe strings so the units are not escaped 2010-01-05 08:22:17 -08:00
Dan Croak
38f669766c Rails layouts, error pages, and public/index now use HTML5.
The specification allows the character encoding meta tag to be removed
if character encoding is set at the transport level (Content-Type),
which Rails is doing.

  http://dev.w3.org/html5/html4-differences/#character-encoding

Signed-off-by: Joshua Peek <josh@joshpeek.com>
2010-01-05 10:13:29 -06:00
Jeremy Kemper
5c527c2f61 Controller tests should always require view tests since they add behavior controllers expect 2010-01-04 19:44:27 -08:00
Joshua Peek
3f28e0bda6 Trash string coercion rack hacks 2010-01-04 19:46:21 -06:00
Joshua Peek
76b5f18feb Default middleware stack needs to be available at configuration time 2010-01-04 19:40:16 -06:00
Joshua Peek
56b28ec8d6 Middleware configuration tests 2010-01-04 19:40:16 -06:00
Jeremy Kemper
6591a10b1f Reinstate explicit active_support/test_case require since console_app interacts with a non-autoloaded constant 2010-01-04 17:00:47 -08:00
Carlhuda
952e449fc0 Fix --dev option 2010-01-04 16:32:43 -08:00
Joshua Peek
17f053931e use_instantiated_fixtures and use_transactional_fixtures defaults are set in active_record/fixtures 2010-01-04 17:23:36 -06:00
Joshua Peek
947bbc170e Smoke test for test_help 2010-01-04 17:13:45 -06:00
Joshua Peek
508ffccfe7 rack and rack-test are pulled in by AD 2010-01-04 16:55:27 -06:00
Joshua Peek
e5ed62deea Autoload AR test case 2010-01-04 16:50:01 -06:00
Joshua Peek
640d9e7e32 Autoload AMo test case 2010-01-04 16:29:07 -06:00
Joshua Peek
2601a16ede Autoload AS test case 2010-01-04 16:22:46 -06:00
Joshua Peek
ce56c36cd3 Autoload AM test case class 2010-01-04 16:22:46 -06:00
Joshua Peek
cf83a6f16b Autoload AC and AV test case classes 2010-01-04 16:22:46 -06:00
José Valim
45462c5e41 Expose Instrumenter id in Notifications. 2010-01-04 23:05:28 +01:00
José Valim
562a00ba16 @_formats initialization should be AbstractController::Base. 2010-01-04 23:05:28 +01:00
José Valim
bd729344a7 Remove deprecated formatted named routes 2010-01-04 23:05:27 +01:00
Zach Brock
79438b4638 adding fix for auto linking to master too
Signed-off-by: Michael Koziarski <michael@koziarski.com>
2010-01-05 10:57:20 +13:00
Joshua Peek
ae270f597d Remove rack submodule, 1.1 has been released as a gem. 2010-01-04 10:09:10 -06:00
David Heinemeier Hansson
5e94d3e3ea Merge 2010-01-03 22:27:28 -08:00
David Heinemeier Hansson
d7d917335e Stop featuring ActiveSupport::TestCase.use_instantiated_fixtures and ActiveSupport::TestCase.use_transactional_fixtures as likely-to-change settings in test/test_helper.rb -- they are not and their values are already set in test_help.rb [DHH] 2010-01-03 19:55:21 -08:00
David Heinemeier Hansson
437df4a8d3 Describe intent, not implementation 2010-01-03 19:46:10 -08:00
David Heinemeier Hansson
0ad07d9c26 Removed config/initializers/new_rails_defaults.rb as all frameworks now follow the settings from it [DHH] 2010-01-03 19:32:48 -08:00
David Heinemeier Hansson
1459c8cc1d Changed ActiveRecord::Base.store_full_sti_class to be true by default reflecting the previously announced Rails 3 default [DHH] 2010-01-03 19:30:28 -08:00
David Heinemeier Hansson
6042067c0b Changed the default ActiveSupport.use_standard_json_time_format from false to true and
ActiveSupport.escape_html_entities_in_json from true to false to match previously announced Rails 3 defaults [DHH]
2010-01-03 19:20:43 -08:00
David Heinemeier Hansson
532b11690f Change the ActiveModel::Base.include_root_in_json default to true for Rails 3 [DHH] 2010-01-03 22:02:10 -05:00
David Heinemeier Hansson
0422314b29 Time zoning should be turned on by default with UTC 2010-01-03 21:55:48 -05:00
David Heinemeier Hansson
51460b5bf2 This comment has been true of all helpers for a long time 2010-01-03 21:34:19 -05:00
David Heinemeier Hansson
950e6bb491 Remove self-evident comment about how subclasses work 2010-01-03 21:32:40 -05:00
David Heinemeier Hansson
090d12b49b Added that ActionController::Base now does helper :all instead of relying on the default ApplicationController in Rails to do it [DHH] 2010-01-03 21:32:02 -05:00
José Valim
eca11bfdb5 Merge branch 'master' of git://github.com/rails/rails 2010-01-04 01:05:19 +01:00
José Valim
b0947bf97c Bring generators tests back to life. 2010-01-04 00:31:53 +01:00
José Valim
3990310a2b Use underscore in notification namespaces. 2010-01-04 00:03:56 +01:00
José Valim
f2d276fefd Ensure no notification is on the queue before running notifications related tests. 2010-01-03 23:39:09 +01:00
José Valim
53c6984944 Add notifications to ActionDispatch::ShowExceptions, this can be used as hooks for plugins like ExceptionNotifier. 2010-01-03 23:33:34 +01:00
Pratik Naik
a68165833a Add Relation#create_with to explictily specify create scope 2010-01-04 03:50:16 +05:30
Pratik Naik
a115b5d79a Ensure using proper engine for Arel::Table 2010-01-04 02:05:18 +05:30
José Valim
6fbe9ef2ff Use namespaces in notifications. 2010-01-03 20:39:42 +01:00
José Valim
4796be33a4 Add missing tests to Validators. 2010-01-03 17:14:50 +01:00
José Valim
271e7c803f Move all generators tests to use new test case syntax. 2010-01-03 17:14:50 +01:00
José Valim
441227a10f Create Rails::Generators::TestCase. 2010-01-03 17:14:49 +01:00
José Valim
e88ea3255f Assert for valid application names. [#3556 status:resolved] 2010-01-03 17:14:49 +01:00
José Valim
6716e4bc0c Use regexp in lookups instead of traversing namespaces. This removes the need of special cases. 2010-01-03 17:14:48 +01:00
Pratik Naik
00f3f6dc31 Relation#merge and Relation#except should respect locks 2010-01-03 21:25:19 +05:30
Pratik Naik
3db876cb76 Relation#merge and Relation#except should respect havings 2010-01-03 20:50:04 +05:30
Pratik Naik
af5e1b4cc6 Add Relation#except 2010-01-03 19:43:29 +05:30
Pratik Naik
22bfd8b098 Rename a variable name for consistency 2010-01-03 19:20:40 +05:30
Pratik Naik
8edfa8f82f Move Relation#spawn and Relation#merge to a separate module 2010-01-03 18:57:57 +05:30
Pratik Naik
3eca0ab838 Give preference to the second relation's order when merging 2010-01-03 18:52:30 +05:30
Stefan Penner
d531cbc809 fixed missing or incorrect session data error message 2010-01-02 23:01:06 -08:00
Yehuda Katz
106d8f7688 AppName::Application.root should work 2010-01-02 22:49:40 -08:00
Yehuda Katz
f1cd3a98f3 Doc fix 2010-01-02 22:46:09 -08:00
Mikel Lindsaar
42aa9b87c2 Silence warnings 2010-01-02 22:39:00 -08:00
Mikel Lindsaar
bf6d0e2bc2 Updating to Mail 1.5.0, including default values for all Message#field_name methods, can access field objects by calling Message#[:field_name] 2010-01-02 22:39:00 -08:00
Pratik Naik
4939f95c9b Reapply "Remove optional join_dependency argument as Relation always supplies it" - Now without syntax errors 2010-01-03 11:08:57 +05:30
Jeremy Kemper
7ad7c82caf Skip isolation test tests until they work 2010-01-02 20:29:47 -08:00
Xavier Noria
7a2554d9a3 Let Integer#multiple_of? accept zero as argument
[#2982 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2010-01-02 20:25:15 -08:00
Jeremy Kemper
8571aa613f Revert "Remove optional join_dependency argument as Relation always supplies it"
This reverts commit 8e57deed8b.
2010-01-02 18:39:36 -08:00
Mikel Lindsaar
fcf2dd3352 Merge branch 'master' of github.com:mikel/rails 2010-01-03 11:24:04 +11:00
Mikel Lindsaar
ffcd356771 Updating to Mail 1.5.0, including default values for all Message#field_name methods, can access field objects by calling Message#[:field_name] 2010-01-03 11:15:50 +11:00
Steve Agalloco
c3d19eb950 app_generator option should be skip_activerecord not no_activerecord
(Thor actually accepts both, the patch was applied to improve readability)

Signed-off-by: José Valim <jose.valim@gmail.com>
2010-01-03 00:47:01 +01:00
Mikel Lindsaar
5867f9516d Silence warning of missing init on @config 2010-01-03 10:17:30 +11:00
Mikel Lindsaar
a009239092 Silence @text not initialized warning 2010-01-03 10:17:30 +11:00
Pratik Naik
8e57deed8b Remove optional join_dependency argument as Relation always supplies it 2010-01-03 04:09:36 +05:30
Pratik Naik
47da00e94b Further simplify Relation#references_eager_loaded_tables? 2010-01-03 03:58:34 +05:30
Pratik Naik
e9ebf8b898 Cache Relation#to_sql 2010-01-03 03:56:21 +05:30
Pratik Naik
0d1a2a3c22 Remove unused code from association.rb now that Relation takes care of checking the referenced tables 2010-01-03 03:49:10 +05:30
Pratik Naik
eb7fdb9464 Make Relation#includes behave exactly like the existing :include option 2010-01-03 03:46:08 +05:30
Pratik Naik
6f5f23aaa7 Add Relation#includes to be an equivalent of current finder option :include 2010-01-03 03:24:28 +05:30
Pratik Naik
c51347152a Get rid of Model.construct_finder_arel_with_includes. Use construct_finder_arel instead 2010-01-03 03:08:01 +05:30
Pratik Naik
a9c790e10f Simply methods for checking eager loaded tables references in the query 2010-01-03 03:00:30 +05:30
José Valim
4c5b5024c3 Rails notifications are set through Railtie in each framework. 2010-01-02 22:27:03 +01:00
José Valim
08986ce290 Remove deprecated ActiveModel tests (%d and %s is no longer supported in error messages a couple months already) 2010-01-02 22:27:03 +01:00
José Valim
fd719d7ecf Update vendored Thor. 2010-01-02 22:27:03 +01:00
José Valim
f50bb48e04 Do not enforce human_attribute_name as required API. 2010-01-02 22:27:03 +01:00
Carsten Gehling
bef968d379 I18n label helper [#745 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
2010-01-02 22:27:02 +01:00
José Valim
653fa4c10c Add naming to AMo::Lint 2010-01-02 22:27:02 +01:00
José Valim
7cc0a4cfa1 Use activerecord.errors.format as in Rails 2.3.5. 2010-01-02 22:27:02 +01:00
José Valim
5fdd0e80a4 Be sure to convert namespaced names to we have 'Parrots name' instead of 'Parrots.name' in error messages. 2010-01-02 22:27:02 +01:00
José Valim
dcafe995bf Make nested attributes behave like in 2.3.5 and add a sanity test for it with I18n. 2010-01-02 22:27:02 +01:00
Pratik Naik
ac1df91e5e Implement Relation#create and Relation#create! 2010-01-03 00:16:14 +05:30
Pratik Naik
65200d2933 Implement Relation#new 2010-01-03 00:08:59 +05:30
Pratik Naik
32b48bf419 Use arel predicates instead of strings wherever possible when merging relations 2010-01-02 22:43:40 +05:30
Pratik Naik
f1acf1cc74 Give higher preference to second relation's equality predicates when merging 2010-01-02 21:16:16 +05:30
Pratik Naik
3e6e3e90ef Remove the test which was testing a non-existing method, always failing on 1.9 and never even running on 1.8 2010-01-02 16:12:01 +05:30
Pratik Naik
7ff131f740 Make sure not to spalt string arguments 2010-01-02 13:43:50 +05:30
Xavier Noria
abae712213 fixes a couple of wrong requires 2010-01-01 14:28:57 -08:00
Xavier Noria
9ab528df8d nokogiri.rb needs active_support/core_ext/object/blank 2010-01-01 14:28:57 -08:00
Xavier Noria
2d233ebdcf libxml.rb needs active_support/core_ext/object/blank 2010-01-01 14:28:57 -08:00
Xavier Noria
173f828760 jdom.rb needs active_support/core_ext/object/blank 2010-01-01 14:28:57 -08:00
Xavier Noria
388dde9f9d time_with_zone.rb needs active_support/core_ext/object/acts_like 2010-01-01 14:28:57 -08:00
Xavier Noria
606203c034 testing/performance.rb needs active_support/core_ext/string/inflections because it uses demodulize 2010-01-01 14:28:56 -08:00
Xavier Noria
0e5b9d7d7d rescuable.rb needs active_support/core_ext/array/extract_options 2010-01-01 14:28:56 -08:00
Xavier Noria
bddf0a6fd3 rescuable.rb needs active_support/core_ext/string/inflections because it uses constantize 2010-01-01 14:28:56 -08:00
Xavier Noria
b7afaa08bf message_verifier.rb needs active_support/core_ext/object/blank 2010-01-01 14:28:56 -08:00
Xavier Noria
679acfbefd message_verifier.rb needs active_support/base64 2010-01-01 14:28:56 -08:00
Xavier Noria
d26d671e38 message_encriptor.rb needs active_support/base64 2010-01-01 14:28:56 -08:00
Xavier Noria
f15313c0c8 duration.rb needs active_support/core_ext/object/acts_like 2010-01-01 14:28:56 -08:00
Xavier Noria
e7c08c1e29 method_wrappers.rb needs active_support/core_ext/array/extract_options 2010-01-01 14:28:56 -08:00
Xavier Noria
9036bf82c6 to_param.rb needs active_support/core_ext/object/to_query 2010-01-01 14:28:56 -08:00
Xavier Noria
cbab9c0347 extending.rb needs active_support/core_ext/object/blank 2010-01-01 14:28:56 -08:00
Xavier Noria
7f17b23aea extending.rb needs active_support/core_ext/class/removal because it uses reachable? 2010-01-01 14:28:56 -08:00
Xavier Noria
4d2f0d2287 synchronization.rb needs active_support/core_ext/array/extract_options 2010-01-01 14:28:56 -08:00
Xavier Noria
8ae9ef75f3 loading.rb needs active_support/core_ext/string/inflections because it uses underscore 2010-01-01 14:28:56 -08:00
Xavier Noria
7ba8c9e78e hash/conversions.rb needs active_support/core_ext/string/inflections because it uses singularize and a few others 2010-01-01 14:28:55 -08:00
Xavier Noria
e6385a912a hash/conversions.rb needs active_support/core_ext/object/blank because it uses blank? 2010-01-01 14:28:55 -08:00
Xavier Noria
2f9fc1fe01 date_time/calculations.rb needs active_support/core_ext/object/acts_like because it uses acts_like? 2010-01-01 14:28:55 -08:00
Xavier Noria
44f9813344 date/calculations.rb needs active_support/core_ext/object/acts_like because it uses acts_like? 2010-01-01 14:28:55 -08:00
Xavier Noria
5b295a65c3 callbacks.rb needs active_support/core_ext/object/metaclass because it uses metaclass 2010-01-01 14:28:55 -08:00
Xavier Noria
3337da9e94 cache.rb requires active_support/core_ext/string/inflections because it uses camelize 2010-01-01 14:28:55 -08:00
Xavier Noria
13168e6594 requires active_support/inflector/methods active_support/core_ext/string/inflections in local_cache.rb because it uses underscore 2010-01-01 14:28:55 -08:00
Xavier Noria
f1e34cc41d requires active_support/core_ext/array/extract_options in mem_cache_store.rb because it uses extract_options! 2010-01-01 14:28:55 -08:00
Xavier Noria
7f7f5d619a requires active_support/gzip in CompressedMemCacheStore because it uses ActiveSupport::Gzip 2010-01-01 14:28:55 -08:00
Xavier Noria
da97b51fdf requires active_support/core_ext/hash/keys in benchmarkable because it uses assert_valid_keys 2010-01-01 14:28:55 -08:00
Xavier Noria
39667c846b make sure returning is available for the libxml extension 2010-01-01 14:28:55 -08:00
Xavier Noria
a2595a1f0f delegating_attributes.rb does not use duplicable 2010-01-01 14:28:55 -08:00
Xavier Noria
4a27d42637 require cgi to reopen it, not technically needed but makes sense 2010-01-01 14:28:55 -08:00
Pratik Naik
4a7a14b0e1 Use relations to build uniqueness conditions 2010-01-02 03:46:08 +05:30
Pratik Naik
498fddc714 Fix join string for the WHERE clause 2010-01-02 03:20:52 +05:30
Willem van Bergen
689984ddd3 Fixed some bugs and fixed some tests in new SAX-based XmlMini backends.
[#3636 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2010-01-01 13:18:03 -08:00
Willem van Bergen
96a2b3905c Added SAX-based parser for XmlMini, using LibXML
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2010-01-01 13:17:46 -08:00
Willem van Bergen
d7f9b9fd24 Added SAX-based parser for XmlMini, using Nokogiri.
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2010-01-01 13:17:45 -08:00
Willem van Bergen
34b03cebf9 Code cleanup, bugfixes and speed improvements for the Nokogiri and LibXML XmlMini backends
[#3641 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2010-01-01 13:16:40 -08:00
Jeremy Kemper
4f590b67b7 Ruby 1.9.2: explicit coercion check no longer needed; bug fixed upstream 2010-01-01 11:02:09 -08:00
Pratik Naik
b35873a575 Rename Model.arel_table to Model.active_relation 2010-01-02 00:25:29 +05:30
Pratik Naik
d2c4b3b672 Rename Model.engine to active_relation_engine. Cache arel_table and the method takes no arguments now 2010-01-02 00:03:20 +05:30
Pratik Naik
5971842d2d Use Arel::Table instead of ActiveRecord::Relation from HABTM and has_many#delete_records 2010-01-01 23:42:13 +05:30
Pratik Naik
fc94c03c1d Remove unncessary arguments passed to arel_table 2010-01-01 23:34:15 +05:30
Pratik Naik
d200d08004 Use arel for building the STI type condition 2010-01-01 23:15:48 +05:30
Mikel Lindsaar
a0f44fe0fb Silence warning of missing init on @config 2010-01-01 20:45:28 +11:00
Mikel Lindsaar
f72dd368b3 Silence @text not initialized warning 2010-01-01 14:44:11 +11:00
Yehuda Katz
7789663a7d Put MySQL and Postgres in an :only block so you can gem bundle --only default to leave out MySQL and Postgres 2009-12-31 18:49:27 -08:00
José Valim
50aa876f32 Make rendering in ActionView happen through _render_template, as the rendering which comes from ActionController. 2009-12-31 18:40:20 -08:00
José Valim
c03c40b481 Expose a _render_partial hook as thhe _render_template one and make use of it. 2009-12-31 18:40:20 -08:00
José Valim
33c98b15bc ActionController::Logger should include AbstractController::Logger and sort autoloads for easier readability. 2009-12-31 18:40:20 -08:00
José Valim
38fa0d14a8 controller_path is required by ActionView, so move it up to AbstractController and refactor AbstractController::Layouts. 2009-12-31 18:40:20 -08:00
Jeremy Kemper
db49b7dc94 Fix new year heisenbug 2009-12-31 18:32:16 -08:00
Jeremy Kemper
9790f0eda5 Merge commit 'josevalim/inheritance' 2009-12-31 18:24:45 -08:00
José Valim
8c5fe60ec8 Simplify repair_validations on AR and make it work with new callbacks. 2010-01-01 03:20:38 +01:00
Jeremy Kemper
6ce562c9ff Merge commit 'mikel/master' 2009-12-31 17:15:06 -08:00
José Valim
50fbb74056 Fix inheritance issue with new callbacks. 2010-01-01 01:48:12 +01:00
Pratik Naik
58ad656769 Make sure association proxy does not pass quoted table name to sanitize_sql 2010-01-01 04:37:19 +05:30
Pratik Naik
8a32d37967 Handle Range with excluded end 2010-01-01 04:33:56 +05:30
Pratik Naik
c62e88a5ab Try using cached attribute before creating a new one 2010-01-01 04:17:56 +05:30
Pratik Naik
77c23b2104 Use PredicateBuilder for sql hash sanitization 2010-01-01 04:17:56 +05:30
Pratik Naik
141d3aff2f Fix the method name for recusion 2010-01-01 04:17:56 +05:30
Pratik Naik
3c23b71a09 Move predicate building to a stand alone PredicateBuilder class 2010-01-01 04:17:55 +05:30
Carl Lerche
ae7ada1fde Some railties cleanup:
* Rename <framework>/rails.rb -> <framework>/railtie.rb
	* Rails::Plugin -> Rails::Railtie
	* Rails::Plugin::Vendored -> Rails::Plugin
2009-12-31 13:12:52 -08:00
Carl Lerche
e749424dfa Rename rails.rb -> rails/all.rb and rails/core.rb -> rails.rb 2009-12-31 13:12:52 -08:00
Pratik Naik
fdc62cdcdb Use Arel::Attribute when building where conditions from hash 2010-01-01 02:22:03 +05:30
Carl Lerche
2f8643955a Raise a helpful error if config.frameworks is used 2009-12-31 11:57:59 -08:00
Carl Lerche
a23f4b6aee Add a /rails.rb for each framework for consistency 2009-12-31 11:57:59 -08:00
Carl Lerche
1e41097294 Fully remove config.frameworks in favor of requires in boot.rb 2009-12-31 11:57:59 -08:00
Pratik Naik
783caae52f Use Arel::Attribute for pk conditions 2010-01-01 01:00:18 +05:30
Pratik Naik
93555c672e Add Relation#table to get the relevant Arel::Table 2010-01-01 00:56:49 +05:30
Pratik Naik
d5f9173926 Add Relation#delete [Pratik Naik, Emilio Tagua] 2010-01-01 00:17:40 +05:30
David Heinemeier Hansson
ea41a757aa Dont gitkeep things that are gitignored 2009-12-31 11:09:10 -05:00
Mikel Lindsaar
94838fbe39 Updating mail requirement to 1.4.3 2009-12-31 19:51:25 +11:00
Mikel Lindsaar
e372f25b0d Merge branch 'master' of github.com:mikel/rails
Conflicts:
	actionmailer/lib/action_mailer/tmail_compat.rb
2009-12-31 19:48:40 +11:00
Mikel Lindsaar
2f1aaebe77 removing spurious line 2009-12-31 19:46:22 +11:00
Mikel Lindsaar
a2880827b4 Adding :transfer_encoding -> :content_transfer_encoding as part of TmailCompat 2009-12-31 19:37:37 +11:00
Jeremy Kemper
16f1a2b573 Clarify assertion 2009-12-30 23:21:10 -08:00
David Heinemeier Hansson
96c27e4003 Merge branch 'master' of github.com:rails/rails 2009-12-31 01:15:30 -05:00
Jeremy Kemper
c4c2502df8 Fix controller runtime test 2009-12-30 22:15:02 -08:00
David Heinemeier Hansson
5d8342cc32 Added .gitkeep to empty directories and --skip-git to skip gitignore/gitkeep files 2009-12-31 01:14:23 -05:00
Carl Lerche
d39d7f5f44 Allow ActiveSupport's isolation tests to run with MiniTest on 1.9 2009-12-30 20:48:46 -08:00
David Heinemeier Hansson
5eb3ceca01 Orphan experiment no longer needed 2009-12-30 22:55:52 -05:00
Jeremy Kemper
1fbd02e446 Revert "Add config.action_controller.include behavior to plugins."
This reverts commit 7e8b7f46bf.

Conflicts:

	railties/lib/rails/plugin.rb
2009-12-30 19:34:15 -08:00
Jeremy Kemper
10a2638db0 Fix up AR extension by using Railties module instead of Rails and requiring ControllerRuntime at initialization time instead of boot 2009-12-30 19:24:00 -08:00
Jeremy Kemper
d349b22097 Remove self-require 2009-12-30 19:00:12 -08:00
Jeremy Kemper
8ad9d14494 Partially revert "ActionDispatch should require as little of ActiveSupport as possible"
Removes load path change from commit bb153f42e4.
2009-12-30 17:35:17 -08:00
Jeremy Kemper
1a0c372b19 depends on Module#attr_internal 2009-12-30 14:31:02 -08:00
Jeremy Kemper
3a29aa3abc Merge commit 'josevalim/arlog' 2009-12-30 14:01:05 -08:00
Jeremy Kemper
0c7c842d8f Merge branch 'master' of github.com:rails/rails 2009-12-30 14:01:00 -08:00
Jeremy Kemper
17787fbfdb Merge commit 'josevalim/callbacks' 2009-12-30 13:48:20 -08:00
José Valim
cb3c0d490b Get rid of DeprecatedCallbacks in ActiveRecord::Associations and finally remove it. 2009-12-30 13:40:37 -08:00
José Valim
a6e2d16b1e Setup and teardown now use new callbacks. 2009-12-30 13:40:37 -08:00
Carl Lerche
bb153f42e4 ActionDispatch should require as little of ActiveSupport as possible 2009-12-30 12:58:40 -08:00
Pratik Naik
7aabaac0f5 Organize Relation methods into separate modules 2009-12-30 19:29:26 +05:30
José Valim
4ecdf24bde Kick AR logging back to life and move ControllerRuntime inside ActiveRecord::Rails. 2009-12-30 13:07:48 +01:00
José Valim
97a64b6b22 Get rid of DeprecatedCallbacks in ActiveRecord::Associations and finally remove it. 2009-12-30 11:43:34 +01:00
José Valim
e58ad8ed9c Setup and teardown now use new callbacks. 2009-12-30 11:09:27 +01:00
Mikel Lindsaar
79280a233f Adding :transfer_encoding -> :content_transfer_encoding as part of TmailCompat 2009-12-30 20:43:56 +11:00
Jeremy Kemper
97204fc0bc Merge commit 'mikel/master' 2009-12-30 00:18:41 -08:00
Pratik Naik
8734f9a271 Relation#many? shoud load the records if there's a LIMIT 2009-12-30 12:14:00 +05:30
Pratik Naik
bdf59a5618 Add Relation#any? and Relation#many? 2009-12-30 12:11:22 +05:30
Mikel Lindsaar
345e622a20 Adding TMailCompat layer for :set_content_type and friends 2009-12-30 16:12:51 +11:00
Pratik Naik
a56518aee2 Fix the count test for postgres 2009-12-30 10:41:47 +05:30
Jeremy Kemper
79550e8995 Revert "Add default respond_to formats to ApplicationController."
(Needs consensus that these are appropriate defaults.)

This reverts commit 66604b2e0e.
2009-12-29 19:11:00 -08:00
Carl Lerche
e5c88434db Use the correct method for eager loading autoloads 2009-12-29 19:04:37 -08:00
Jeremy Kemper
153ce2f328 Clean up changelog a bit 2009-12-29 15:50:47 -08:00
Jeremy Kemper
71ffa76070 Merge branch 'mail' 2009-12-29 15:49:04 -08:00
Jeremy Kemper
ce1aeeee3f Move mail gem dep to Action Mailer's gemspec 2009-12-29 15:47:28 -08:00
Jeremy Kemper
b27a3e8da3 Merge branch 'master' of git://github.com/mikel/rails into mail
Conflicts:
	actionmailer/lib/action_mailer.rb
2009-12-29 15:46:12 -08:00
Jeremy Kemper
485d244eae Merge branch 'master' of github.com:rails/rails 2009-12-29 15:38:17 -08:00
José Valim
0b37572552 Clean up railties Rakefile from old responsibilities which are now part of main Rakefile 2009-12-29 23:58:44 +01:00
José Valim
1a4d909c68 Add rails app --edge and rails app --dev 2009-12-29 23:58:34 +01:00
José Valim
66604b2e0e Add default respond_to formats to ApplicationController. 2009-12-29 23:58:25 +01:00
Sam Pohlenz
468bdb3ed8 Make plugins responsible for loading their own rake tasks
Signed-off-by: Carl Lerche <carllerche@mac.com>
2009-12-29 14:47:48 -08:00
Sam Pohlenz
cbce027669 Application object should instantiate non-vendored plugins
Signed-off-by: Carl Lerche <carllerche@mac.com>
2009-12-29 14:45:43 -08:00
Carl Lerche
2e87196d14 Use extlib_inheritable_accessor in request_forgery_protection.rb.
For some reason the current class_inheritable_accessor does not play nice with included hooks. class_inheritable_accessor will be revised shortly.
2009-12-29 13:21:36 -08:00
Carl Lerche
3cb7e04763 Finally remove rails/initializer.rb 2009-12-29 13:20:10 -08:00
Pratik Naik
f17bb1fbff Simplify get_projection_name_from_chained_relations using recursion 2009-12-30 01:16:24 +05:30
Emilio Tagua
00cd3789f6 Relation#count should look for projections in chained relations and perform the count on the given column
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-12-30 01:12:38 +05:30
Carl Lerche
aa1b32ae97 Check to see if the plugin object responds to load_tasks (vendor/plugin/* does not yet) Fixes Sam Ruby's tests. 2009-12-29 10:49:12 -08:00
Pratik Naik
0dea509817 Oops, add the missing #tap call 2009-12-29 15:54:40 +05:30
Pratik Naik
3b8853eda4 Replace Base#safe_to_array with Array.wrap 2009-12-29 15:53:06 +05:30
Pratik Naik
0a1ff1a14f Rewrite Relation#readonly, eager_load, preload using Object#tap 2009-12-29 15:28:40 +05:30
Pratik Naik
1785e1b26e Rename Relation#create_new_relation to spawn and refactor preload/eagerload associations using attr_writer 2009-12-29 15:24:30 +05:30
Pratik Naik
61fa111a55 Refactor Relation#readonly using attr_writer 2009-12-29 15:24:30 +05:30
Yehuda Katz
cf4978313b Make sure evalled method knows where it came from 2009-12-29 01:04:32 -08:00
Pratik Naik
981f696398 Relation#respond_to? should take second argument for responding to private methods 2009-12-29 12:31:08 +05:30
Pratik Naik
bc933d0fa1 Make sure Relation responds to dynamic finder methods 2009-12-29 12:27:40 +05:30
Pratik Naik
f290e685f0 Add Relation#size and Relation#empty? 2009-12-29 12:15:28 +05:30
Pratik Naik
13989ff8c6 Use relation#delete_all for Model.delete_all 2009-12-29 11:46:07 +05:30
Pratik Naik
54b80c7361 Add Relation#delete_all 2009-12-29 11:46:07 +05:30
Jeremy Kemper
f79caa49fb Complain if there's no such middleware 2009-12-28 20:24:28 -08:00
Carl Lerche
4ee70643b3 Don't require initializer.rb in core.rb 2009-12-28 18:26:15 -08:00
Carl Lerche
49c800b6bd Move the ActiveRecord related rake tasks into the AR gem. 2009-12-28 17:53:05 -08:00
Carl Lerche
d747b6847b Require active_support/dependencies/autoload in action_dispatch 2009-12-28 17:53:05 -08:00
Carl Lerche
c02f278263 Add the ability to have plugins load rake tasks. 2009-12-28 17:53:04 -08:00
Jeremy Kemper
9a650a6547 Silence some trivial warnings: shadowed local vars, indentation mismatches 2009-12-28 17:36:08 -08:00
José Valim
6d390671f6 Move ActiveRecord callbacks implementation to ActiveModel and make use of it.
Signed-off-by: Yehuda Katz <wycats@Yehuda-Katz.local>
2009-12-28 16:19:23 -08:00
Yehuda Katz
643862e3be Merge branch 'master' of github.com:rails/rails 2009-12-28 16:19:09 -08:00
Pratik Naik
078ea0dfbd Oops. Remove debug information inside a test from the previous commit 2009-12-29 04:33:37 +05:30
Pratik Naik
08633bae5e Migrate all the calculation methods to Relation 2009-12-29 04:30:04 +05:30
Jeremy Kemper
949c8c0d0e Don't publicize with_scope for tests since it may shadow public misuse 2009-12-28 14:07:23 -08:00
Jeremy Kemper
1b91f534ce Fix uniqueness validation: with_exclusive_scope is not public 2009-12-28 14:06:22 -08:00
Jeremy Kemper
d927265abd Fix pg test 2009-12-28 13:05:36 -08:00
Jeremy Kemper
9fe42232f1 Merge commit 'Fingertips/master' 2009-12-28 12:50:56 -08:00
Jeremy Kemper
a76af2309a rake smoke: toplevel task to quickly smoke-test all projects 2009-12-28 12:29:03 -08:00
Pratik Naik
1ebfd999ec Add ruby-debug to Gemfile for Ruby < 1.9 2009-12-29 01:53:15 +05:30
Jeremy Kemper
ea7b5ff99e Use present rather than any 2009-12-28 12:12:53 -08:00
Eloy Duran
c23fbd0d47 Refactored previous changes to nested attributes. 2009-12-28 21:09:22 +01:00
Michael Siebert
07b615fb89 Add an :update_only option to accepts_nested_attributes_for for to-one associations. [#2563 state:resolved]
Signed-off-by: Eloy Duran <eloy.de.enige@gmail.com>
2009-12-28 21:09:19 +01:00
Jeremy Kemper
f95fcdd3af Fix copy/pasted test class name 2009-12-28 11:40:34 -08:00
Jeremy Kemper
4691cc43ee Fix ruby version test 2009-12-28 11:40:23 -08:00
Jeremy Kemper
632df063a3 Merge commit 'josevalim/validations' 2009-12-28 11:13:35 -08:00
Pratik Naik
91e28aae86 Add Model.having and Relation#having 2009-12-29 00:07:46 +05:30
Eloy Duran
9c771a9608 Make sure to not add autosave callbacks multiple times. [#3575 state:resolved]
This makes sure that, in a HABTM association, only one join record is craeted.
2009-12-28 16:56:31 +01:00
Murray Steele
ff508640e2 Make polymorphic_inverse_of in Reflection throw an InverseOfAssociationNotFoundError if the supplied class doesn't have the appropriate association. [#3520 state:resolved]
Signed-off-by: Eloy Duran <eloy.de.enige@gmail.com>
2009-12-28 15:12:17 +01:00
Murray Steele
6a74ee7f4d Provide a slightly more robust we_can_set_the_inverse_on_this? method for polymorphic belongs_to associations. [#3520 state:resolved]
Also add a new test for polymorphic belongs_to that test direct accessor assignment, not just .replace assignment.

Signed-off-by: Eloy Duran <eloy.de.enige@gmail.com>
2009-12-28 15:12:15 +01:00
George Ogata
81ca0cf2b0 Add inverse polymorphic association support. [#3520 state:resolved]
Signed-off-by: Eloy Duran <eloy.de.enige@gmail.com>
2009-12-28 15:12:13 +01:00
Murray Steele
6c8c85bc1e Add more tests for the various ways we can assign objects to associations. [#3513 state:resolved]
Get rid of a duplicate set_inverse_instance call if you use new_record(true) (e.g. you want to replace the existing instance).

Signed-off-by: Eloy Duran <eloy.de.enige@gmail.com>
2009-12-28 15:12:11 +01:00
George Ogata
fc85c66527 Set inverse for #replace on a has_one association. [#3513 state:resolved]
Signed-off-by: Eloy Duran <eloy.de.enige@gmail.com>
2009-12-28 15:12:07 +01:00
Pratik Naik
e8ca22d129 Move Relation calculation methods to a separate module 2009-12-28 19:12:15 +05:30
Pratik Naik
8f5d9eb0e2 Add Relation#count 2009-12-28 18:38:28 +05:30
Pratik Naik
aefa975fdd Remove the todo note for arel#lock 2009-12-28 16:20:40 +05:30
Pratik Naik
02207dc02c Add Model.readonly and association_collection#readonly finder method 2009-12-28 16:17:46 +05:30
Mikel Lindsaar
b354496bda Adding default 8bit encoding if the body has non usascii in it 2009-12-28 21:41:16 +11:00
José Valim
616ebb8f6a Remove unused code paths and require mail only when it's needed. 2009-12-28 11:21:36 +01:00
Pratik Naik
5156507e13 Remove locking related unused code 2009-12-28 14:33:56 +05:30
Pratik Naik
b95cc72429 Raise ArgumentError when trying to merge relations of different classes 2009-12-28 14:24:52 +05:30
Pratik Naik
92c982d973 Relation#readonly(false) should toggle the readonly flag 2009-12-28 14:20:54 +05:30
Pratik Naik
9f4e98330b Remove unused construct_finder_sql 2009-12-28 12:57:35 +05:30
Pratik Naik
d6b0a7d67c Fix a typo in CHANGELOG 2009-12-28 12:44:43 +05:30
Pratik Naik
a3c1db4e44 Add Model.lock and relation#lock now that arel has locking 2009-12-28 12:42:06 +05:30
Yehuda Katz
9abbe9f0b3 Merge branch 'master' of github.com:rails/rails 2009-12-27 22:27:33 -08:00
David Heinemeier Hansson
1c47d04ea5 Added Object#presence that returns the object if it's #present? otherwise returns nil [DHH/Colin Kelley] 2009-12-27 17:54:43 -08:00
David Heinemeier Hansson
a642edbef3 Added default .gitignore (this is just recognizing Git market share, don't throw a hissy if you use another SCM) [DHH] 2009-12-27 17:48:11 -08:00
Mikel Lindsaar
c039bcdb1c Moved sort_parts into Mail, updated mail requirement to 1.4.2 2009-12-28 12:25:14 +11:00
Yehuda Katz
99f7e0ff27 Update rack submodule 2009-12-27 16:20:27 -08:00
Yehuda Katz
f095e6f59d Fixes some problems with getting a new app working 2009-12-27 16:00:34 -08:00
Jeremy Kemper
19c48281a7 String#exclude? core extension: inverse of #include? 2009-12-27 15:49:29 -08:00
Jeremy Kemper
7c4fb93ac3 Ruby 1.9: string is not enumerable, so #exclude? is not available 2009-12-27 15:38:00 -08:00
Jeremy Kemper
3a79117c77 Typo 2009-12-27 15:27:18 -08:00
David Heinemeier Hansson
ebe3c8f2e4 Merge branch 'master' of github.com:rails/rails 2009-12-27 15:23:38 -08:00
David Heinemeier Hansson
438a8c3ec7 Require the enumberable extension from active support because we use #exclude? 2009-12-27 15:23:30 -08:00
José Valim
a176263ebc Fix generators tests.
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-12-27 15:19:16 -08:00
Jeremy Kemper
292363c75f Use i18n 2009-12-27 15:17:44 -08:00
David Heinemeier Hansson
5012a1558d Merge branch 'master' of github.com:rails/rails 2009-12-27 14:44:21 -08:00
David Heinemeier Hansson
1cd949006a Fix the i18n dependency problem 2009-12-27 14:43:06 -08:00
Yehuda Katz
12e43494a7 Merge remote branch 'jose/perf' 2009-12-27 14:36:59 -08:00
Pratik Naik
1c26ba486c Add Model.from and association_collection#from finder methods 2009-12-28 03:59:44 +05:30
Pratik Naik
6a776dcc9d Use relation.from when constructing a relation 2009-12-28 03:59:44 +05:30
David Heinemeier Hansson
9521fcbcc2 Merge branch 'master' of github.com:rails/rails 2009-12-27 14:14:54 -08:00
David Heinemeier Hansson
95762cbbb3 Added shorthand for match 'products/overview' that expands to match 'products/overview', :to => 'products#overview', :as => 'products_overview' 2009-12-27 14:13:03 -08:00
Pratik Naik
a0ff5f82c3 Dont delegate relation#find to to_a 2009-12-28 03:22:33 +05:30
Pratik Naik
e9e20ab601 Use arel#from instead of the current hack 2009-12-28 03:19:31 +05:30
Pratik Naik
630dc50730 Fix relation tests for postgres 2009-12-28 02:50:04 +05:30
Pratik Naik
51a1d5a670 Handle preloads and eager loads when merging relations 2009-12-28 01:33:20 +05:30
Pratik Naik
a8b10a2a8d Add relation#merge to merge two relations 2009-12-28 01:08:34 +05:30
Pratik Naik
08312e9958 Return a new relation when blank is supplied to relation.joins 2009-12-27 23:29:41 +05:30
Pratik Naik
5565bab994 Rewrite AssociationCollection#find using relations 2009-12-27 22:32:20 +05:30
Pratik Naik
bbdeaae2ca Add relation.destroy_all 2009-12-27 21:15:12 +05:30
Pratik Naik
5cd8818258 Make Model.destroy_all use new finders 2009-12-27 19:22:18 +05:30
Pratik Naik
352cc7c94a Make Model.find(:last) use relations 2009-12-27 19:12:50 +05:30
Pratik Naik
d5e98dc859 Add relation.last and relation.reverse_order 2009-12-27 19:04:30 +05:30
Pratik Naik
8957f5db5d Make Model.all just a wrapper for find(:all) 2009-12-27 18:32:10 +05:30
Pratik Naik
d6d0fe8c8f Make Model.find(:first, ..) use relations 2009-12-27 18:28:59 +05:30
Pratik Naik
59cf5e7bf2 Make Model.exists? use relation.exists? 2009-12-27 18:10:26 +05:30
José Valim
97db79ab3c Remove ActiveRecord runtime logging from ActionPack and place in ActiveRecord, adding it through config.action_controller.include hook. 2009-12-27 13:32:40 +01:00
José Valim
7e8b7f46bf Add config.action_controller.include behavior to plugins. 2009-12-27 13:31:36 +01:00
Pratik Naik
2c8f83556b Add relation.exists? 2009-12-27 18:00:49 +05:30
Pratik Naik
b31233485b Make Model.find(:all) use relations 2009-12-27 17:43:31 +05:30
Pratik Naik
a3f3fab795 Add relation.from as a temporary workaround until arel relation has .from option 2009-12-27 17:37:36 +05:30
Pratik Naik
6f5e3a04d6 Relation should supply :from to find_with_associations 2009-12-27 17:16:20 +05:30
José Valim
971f4ff829 DRY ActionMailer code. 2009-12-27 12:36:00 +01:00
Pratik Naik
7b5d0e8b78 Make Model.find(ids) use relations 2009-12-27 16:56:10 +05:30
José Valim
4747a9a57e Getting rid of some warnings in AM suite. 2009-12-27 12:18:46 +01:00
José Valim
47e5caa96b Merge Mail with latest Rails and move mail gem to Gemfile. 2009-12-27 12:09:20 +01:00
Pratik Naik
d92c4a8402 Add find(ids) to relations 2009-12-27 16:15:29 +05:30
Mikel Lindsaar
fd58a2d1da Updating action_mailer to need mail 1.4.1 2009-12-27 21:42:33 +11:00
Mikel Lindsaar
331d375cc3 Changing body to use :to_s instead of :decoded... better use case 2009-12-27 20:56:16 +11:00
Pratik Naik
81608cf8fa Make Model.all return an array rather than a relation for consistency. Use Model.scoped to get a relation 2009-12-27 15:06:45 +05:30
Pratik Naik
1efc8edb5f Fix dynamic finder docs 2009-12-27 14:50:33 +05:30
Pratik Naik
85770ec713 Make Model.find_or_create_by_* and find_or_initialize_by_* use relations and remove method caching 2009-12-27 14:46:38 +05:30
Pratik Naik
d511de0261 Add find_or_create_by_* and find_or_initialize_by_* to relations 2009-12-27 14:28:19 +05:30
Pratik Naik
8829d6ecc6 Make Model.find_by_* and Model.find_all_by_* use relations and remove dynamic method caching 2009-12-27 13:17:29 +05:30
Mikel Lindsaar
d9aadb5b2d Updating readme 2009-12-27 18:39:37 +11:00
Mikel Lindsaar
4e1fa4912d Updating actionmailer to call :to_s on all field values instead of decoded 2009-12-27 18:38:30 +11:00
Jeremy Kemper
51d84eff12 Require bundled environment, if present, so Active Support can load i18n 2009-12-26 22:22:48 -08:00
Joshua Peek
bdf8ee44c5 script/server should init Rails by loading config.ru
Fixes "Rails 3.0 doesn't fucking work"
2009-12-26 18:23:48 -06:00
Pratik Naik
f6f416c58e Add find_by_* and find_all_by_* finders to ActiveRecord::Relation 2009-12-27 03:25:29 +05:30
Pratik Naik
cc753eaf58 Replace Model.first(options) with new finder methods inside tests 2009-12-27 01:50:03 +05:30
José Valim
75ba102a80 Remove ActionView inline logging to ActiveSupport::Notifications and create ActionController::Base#log_event, so everything can be logged within one listener. Also expose log_process_action as a hook for different modules to include their own information during the action processing. This allow ActiveRecord to hook and any other ORM. Finally, this commit changes 'Processing' and 'Rendering' in logs to 'Processed' and 'Rendered' because at the point it's logged, everying already happened. 2009-12-26 20:28:53 +01:00
Joshua Peek
feb7382047 AD::Cascade that supports X-Cascade 2009-12-26 13:28:06 -06:00
Joshua Peek
673fa7f066 rack-mount 0.4 2009-12-26 13:25:36 -06:00
Joshua Peek
f53c36350d Expect Rack 1.1 2009-12-26 13:25:35 -06:00
Pratik Naik
83f24afd44 Add new finder methods to association collection. 2009-12-27 00:25:00 +05:30
Pratik Naik
f374150698 Ensure Model.scoped adds type conditions for STI models 2009-12-27 00:11:31 +05:30
Pratik Naik
c6258ee313 Ensure all the finder methods respect scoping 2009-12-26 19:15:05 +05:30
José Valim
8a36e907d2 More <%= render(@posts) %> optimization. 2009-12-26 14:11:04 +01:00
José Valim
ff1a1c0b4d Optimize <%= render(@posts) %>. 2009-12-26 14:11:04 +01:00
José Valim
c86424a72d Break instrumentation into several end-points so rendering of partials can be optimized. 2009-12-26 14:11:04 +01:00
José Valim
48273a44c6 Wrap layout rendering in one method: _render_layout (this should make partial instrumentation easier). 2009-12-26 14:11:04 +01:00
José Valim
561885aea2 String#<< should work for any object which responds to :to_str, so enable this without the performance hit and make Fixnum safe by default. 2009-12-26 14:11:04 +01:00
Pratik Naik
9a9f97af28 Add relation.reload to force reloading the records 2009-12-26 15:31:50 +05:30
Pratik Naik
3c5a7dcaf5 Cache the loaded relations 2009-12-26 15:07:00 +05:30
Pratik Naik
9d3d60c64a Ensure preload and eager_load finder methods accept multiple arguments 2009-12-26 14:40:45 +05:30
Pratik Naik
284d186cf4 Make sure the relations are always immutable 2009-12-26 14:26:02 +05:30
Pratik Naik
187fbe5cba Add support for multiple arguments to .where finder 2009-12-26 12:57:34 +05:30
Pratik Naik
5f5aa44d2d Add missing changelog entries 2009-12-26 12:43:49 +05:30
Pratik Naik
feb8b20eb5 Add Relation#all as an alias for to_a 2009-12-26 12:39:44 +05:30
Pratik Naik
a73fa9356f Stop supporting blank arguments to AR#relation query methods 2009-12-26 04:07:50 +05:30
Pratik Naik
95274b28d9 Rename Model.conditions and relation.conditions to .where 2009-12-26 03:50:57 +05:30
Pratik Naik
1a99337180 No parentheses for assert_equal 2009-12-26 03:10:55 +05:30
Pratik Naik
a7fd564ab1 Add Model.select/group/order/limit/joins/conditions/preload/eager_load class methods returning a lazy relation.
Examples :

    posts = Post.select('id).order('name') # Returns a lazy relation
    posts.each {|p| puts p.id } # Fires "select id from posts order by name"
2009-12-26 03:06:51 +05:30
Yehuda Katz
8f6da9483b Merge remote branch 'jose/am' 2009-12-25 13:06:11 -08:00
José Valim
9f1c359a20 Fix whiny_nil tests, improve error messages and make CI happy. 2009-12-25 22:00:36 +01:00
José Valim
88ba056043 Refactor multiple parts logic and move Utils to PartContainer. 2009-12-25 21:47:47 +01:00
José Valim
ee70d1b6ad adv_attr_accessors in ActionMailer are not sent to the views, use the mailer object if you need to access the subject, recipients, from, etc. 2009-12-25 21:35:40 +01:00
Pratik Naik
2e79ec71a5 Model.scoped now returns a relation if invoked without any arguments
Example :

    posts = Post.scoped
    posts.size # Fires "select count(*) from  posts" and returns the count
    posts.each {|p| puts p.name } # Fires "select * from posts" and loads post objects
2009-12-26 01:33:20 +05:30
David Heinemeier Hansson
7f5d44bac5 The controller key shouldnt be part of the mapping if its not used 2009-12-25 10:14:44 -08:00
David Heinemeier Hansson
a8f1ee5986 Fix tests 2009-12-25 10:04:26 -08:00
José Valim
135d32c8bd Move i18n to Gemfile. 2009-12-25 15:15:13 +01:00
José Valim
eb8e627c69 Merge branch 'master' of git://github.com/rails/rails 2009-12-25 12:09:13 +01:00
Yehuda Katz
1c66f85eb6 This code was needed to work around http://redmine.ruby-lang.org/issues/show/2494. Since that bug is now closed in Ruby, we can remove it. 2009-12-24 23:48:35 -08:00
Yehuda Katz
3b1642c23c Simplify and improve the performance of output_safety 2009-12-24 22:44:21 -08:00
Yehuda Katz
f3b072189a Instead of marking raw text in templates as safe, and then putting them through String#<< which checks if the String is safe, use safe_concat, which uses the original (internal) String#<< and leaves the safe flag as is. Results in a significant performance improvement. 2009-12-24 21:50:18 -08:00
Yehuda Katz
baaaf2acaa Dead code 2009-12-24 21:50:17 -08:00
David Heinemeier Hansson
0a365d63f6 Translated strings in the view are assumed html_safe (Closes #3401) 2009-12-24 20:32:53 -08:00
David Heinemeier Hansson
6ce5982afa Stray carrier return 2009-12-24 16:13:50 -08:00
David Heinemeier Hansson
b9c0a16655 The new routes shortform now also works for :as 2009-12-24 16:08:03 -08:00
David Heinemeier Hansson
38af368360 Merge 2009-12-24 15:24:57 -08:00
David Heinemeier Hansson
2b7256a42e Extract Mapping class from monster match method 2009-12-24 15:23:39 -08:00
Jeremy Kemper
46b376962f Fix new schema test dependency on Hash#to_xml 2009-12-23 23:30:59 -08:00
Sam Ruby
aa3565f3a6 Allow named_routes to be used with root, and with new DSL short-form.
The real use case it to make all of the following act the same:

  root 'store#index', :as => 'store'
  match '/' => 'store#index', :as => 'store'
  match '/', :to => 'store#index', :as => 'store'

The test case provided deviates from this in order to demonstrate all three
forms in a single set of test routes.

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-12-23 20:55:21 -08:00
Carlhuda
84f1137ef8 Merge remote branch 'origin/master'
Conflicts:
	railties/lib/rails/application.rb
2009-12-23 19:18:11 -08:00
Carlhuda
c4d6d50a46 Rackup config.ru from the correct directory 2009-12-23 19:10:44 -08:00
Carlhuda
af5c3c852e Require active_support/all unless specifically requested to be left out. 2009-12-23 19:00:20 -08:00
Carlhuda
9653599a79 Remove the ActionView::Base autoload because it creates crazy circular autoload insanity 2009-12-23 18:59:49 -08:00
Jeremy Kemper
7a6f73e79b Fix reference to Application#configuration to use #config 2009-12-23 17:47:38 -08:00
Carlhuda
d926fb62e8 Isolation tests intentionally avoid loading any state (because they're often testing things that have their own load path semantics that should not be polluted), so rack/test is not yet on the load path. Moving require "rack/test" into the setup means and after boot_rails means that it'll be required after the laod path has been altered to add in the Rails vendor/gems 2009-12-23 17:46:38 -08:00
Jeremy Kemper
4d3602a8c4 Routing: fix that route shorthand shouldn't ignore other options. Raise if :as option is given to root method since its name is always 'root' 2009-12-23 17:42:30 -08:00
Carlhuda
d2bd71a145 Finish moving config.frameworks-dependent code to the framework plugin 2009-12-23 17:23:29 -08:00
Jeremy Kemper
1ee50e58f6 Fix Rack::Lock middleware condition: use *unless* we allow concurrency 2009-12-23 17:14:21 -08:00
Jeremy Kemper
94bb331635 Shift more responsibility from application class to its singleton instance. Treat instantiation and boot as separate steps. Use app.config rather than app.configuration. 2009-12-23 17:11:17 -08:00
Carlhuda
61af34b001 Make /rails/info/properties work again. Also, the mocked up tests were passing so we added a test that actually tested this functionality. 2009-12-23 16:26:10 -08:00
Carlhuda
83be262b4b Isolation tests intentionally avoid loading any state (because they're often testing things that have their own load path semantics that should not be polluted), so rack/test is not yet on the load path. Moving require "rack/test" into the setup means and after boot_rails means that it'll be required after the laod path has been altered to add in the Rails vendor/gems 2009-12-23 16:14:34 -08:00
Carlhuda
38aeb1528c Moving out some framework specific initializers into the framework libraries. 2009-12-23 16:13:09 -08:00
Carlhuda
fa8dfc7d01 Raise an exception if an initializer is defined without a block 2009-12-23 15:16:38 -08:00
Carlhuda
dc677f7665 tests pass with requiring the frameworks in rails.rb 2009-12-23 15:16:38 -08:00
Jeremy Kemper
24e1b55608 Fix bare string Rack response bodies 2009-12-23 13:06:53 -08:00
Dwayne Litzenberger
808cad2bb4 Fix ActiveSupport::JSON encoding of control characters [\x00-\x1f]
According to RFC 4627, only the following Unicode code points are
allowed unescaped in JSON:

  unescaped = %x20-21 / %x23-5B / %x5D-10FFFF

However, ActiveSupport::JSON did not escape the range %x00-1f.  This caused
parse errors when trying to decode the resulting output.

[#3345 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-12-23 11:46:06 -08:00
José Valim
74098e4cb6 No need to use ValidationsRepairHelper hack on ActiveModel anymore, Model.reset_callbacks(:validate) is enough. However, tests in ActiveRecord are still coupled, so moved ValidationsRepairHelper back there. 2009-12-23 13:30:58 +01:00
José Valim
e31077c9aa Small clean up in Naming and TTranslation tests. 2009-12-23 12:28:02 +01:00
José Valim
44cd9e0e71 ActiveRecord::Validations are now built on top of Validator as well. 2009-12-23 12:14:00 +01:00
Joshua Peek
74b2e00ce8 Require rack-mount 0.3.3
Fixes "Rack-mount boot time is slow as shit" [#3567 state:resolved]
2009-12-22 19:44:38 -06:00
David Heinemeier Hansson
e7ef57dd0d Merge 2009-12-22 17:31:29 -08:00
David Heinemeier Hansson
ec095456d8 Dont auto require rubygems, move dep on rack-test to Gemfile 2009-12-22 17:29:25 -08:00
David Heinemeier Hansson
fe5f660413 Dont encourage __FILE__ bullshit 2009-12-22 17:25:34 -08:00
José Valim
279067639f validates_each uses a BlockValidator. 2009-12-23 01:38:15 +01:00
José Valim
977a5c43b1 Added check_validity! to EachValidator and refactor existing ones. 2009-12-23 01:08:27 +01:00
Joshua Peek
f737c2d69b All AMo modules are safe to defer 2009-12-22 17:39:41 -06:00
José Valim
f1085f4128 Move validations in ActiveModel to validators, however all validatity checks are still in the class method. 2009-12-23 00:36:51 +01:00
Joshua Peek
22752ec27c All ARes modules are safe to defer 2009-12-22 17:36:29 -06:00
Joshua Peek
2e4e8d156c All AM modules are safe to defer 2009-12-22 17:33:00 -06:00
Joshua Peek
ace20bd25e Flip deferrable autoload convention 2009-12-22 17:27:37 -06:00
Joshua Peek
b1aee9f4ee All AD modules are "deferrable" 2009-12-22 17:11:21 -06:00
Joshua Peek
2d0c703c92 Use Rack::Runtime middleware so the reported time includes the entire middleware stack 2009-12-22 16:18:22 -06:00
José Valim
2476c5312d Validator is simply sent to validate method. However, the API needs to change, so validate accepts a record. 2009-12-22 23:12:21 +01:00
Joshua Peek
df7faef68e Referer and user agent are in Rack::Request 2009-12-22 16:09:41 -06:00
Joshua Peek
a1bf2f96ce AD::StatusCodes support is now part of rack 2009-12-22 16:08:03 -06:00
Joshua Peek
17b6053083 Float on rack/master in preparation for rack 1.1 gem release 2009-12-22 15:46:15 -06:00
José Valim
4964d3b02c Make ActionMailer::Base inherit from AbstractController::Base
Signed-off-by: Yehuda Katz <wycats@Yehuda-Katz.local>
2009-12-22 11:29:06 -08:00
José Valim
4b8330d2d5 Merge branch 'master' of git://github.com/rails/rails 2009-12-22 08:26:00 +01:00
David Heinemeier Hansson
8e48a5ef0c Add test for root 2009-12-21 21:49:36 -08:00
Joshua Peek
1de95077dc Merge branch 'master' of github.com:rails/rails
Conflicts:
	railties/test/initializer/initialize_i18n_test.rb
	railties/test/initializer/path_test.rb
2009-12-21 20:41:25 -06:00
Joshua Peek
426348b484 Update routes.rb template to use App name 2009-12-21 20:15:27 -06:00
Jeremy Kemper
2e571e8f99 Blog -> Blog::Application. Leave the toplevel module up for grabs. 2009-12-21 17:03:21 -08:00
David Heinemeier Hansson
76e732a7be Fix the documentation for root :to. It should use a fully qualified controller#action syntax (Closes #3606) 2009-12-21 16:54:04 -08:00
Carlhuda
be225adafb Fix ActionMailer. The fact that ActionMailer::Base does not inherit from AbstractController::Base is either a bug or we need to re-evaluate the requirements of the mixins. 2009-12-21 16:49:21 -08:00
David Heinemeier Hansson
a43a9c81cf Dont need to specify password_confirmation, that happens automatically 2009-12-21 16:41:02 -08:00
Carlhuda
d982fe2b2f Replace reopening the class with App.configure as an alias to class_eval 2009-12-21 16:35:54 -08:00
Carlhuda
b0b4ae970c test.rb, dev.rb, and production.rb just reopen the Application class; no more hax required 2009-12-21 16:03:26 -08:00
David Heinemeier Hansson
a110ff0fca Dont introspect inline templates for the logger and cleanup a few styling issues 2009-12-21 16:03:04 -08:00
David Heinemeier Hansson
36624b2c70 Give the builtin controllers their own routes.rb now that the legacy catch-all is gone 2009-12-21 15:55:59 -08:00
David Heinemeier Hansson
fee07b9da0 Merge branch 'master' of github.com:rails/rails 2009-12-21 15:50:19 -08:00
David Heinemeier Hansson
cf66d16bdf Its cookie_verifier_secret 2009-12-21 15:49:52 -08:00
Joshua Peek
880688a499 Default route was removed from default route config, patch up failing tests. 2009-12-21 17:47:03 -06:00
Joshua Peek
715dd10961 Less annoying RoutingError message 2009-12-21 17:34:53 -06:00
Joshua Peek
f82e1046f8 reset_session needs to be a real method so flash can override it 2009-12-21 17:29:59 -06:00
Joshua Peek
3e33985e19 Update CI bundler 2009-12-21 17:27:30 -06:00
David Heinemeier Hansson
81c3b0403d Merge branch 'master' of github.com:rails/rails 2009-12-21 15:25:51 -08:00
Jeremy Kemper
bf03ddc636 Missed changelog entry for :inverse_of 2009-12-21 13:18:11 -08:00
David Heinemeier Hansson
fa8849a573 Merge branch 'master' of github.com:rails/rails 2009-12-21 11:28:16 -08:00
José Valim
5f34421c77 Merge branch 'master' of git://github.com/rails/rails 2009-12-21 11:21:27 +01:00
David Heinemeier Hansson
f09ad263ca Turn filter_parameter_logging on by default for password and password_confirmation and remove contentless comments 2009-12-20 20:50:25 -08:00
David Heinemeier Hansson
f9a4cf1562 Show the new short-form in an example 2009-12-20 20:45:18 -08:00
David Heinemeier Hansson
3ff9e9ee14 Its now possible to use match 'stuff' => 'what#stuff' instead of using the :to for simple routes 2009-12-20 20:37:36 -08:00
David Heinemeier Hansson
8763b78f89 Merge branch 'master' of github.com:rails/rails 2009-12-20 19:41:05 -08:00
David Heinemeier Hansson
3506cb730b Mark the wild controller route as legacy an comment it out 2009-12-20 19:40:18 -08:00
Joshua Peek
15f95621d5 We don't need AD parse_config 2009-12-20 21:11:42 -06:00
Yehuda Katz
17f66473bc AC::Head now doesn't have an unfulfilled Rendering dependency, and instead works just fine standalone (which means that ConditionalGet also doesn't have a Rendering dependency) 2009-12-20 18:50:54 -08:00
David Heinemeier Hansson
eeda059818 Just a little tidying 2009-12-20 18:37:09 -08:00
David Heinemeier Hansson
91ce8d8b7f Merge branch 'master' of github.com:rails/rails 2009-12-20 18:32:35 -08:00
David Heinemeier Hansson
cf9d6a95e8 Added ActionDispatch::Request#authorization to access the http authentication header regardless of its proxy hiding [DHH] 2009-12-20 18:30:50 -08:00
David Heinemeier Hansson
36c13cc07a Rename RenderOptions to Renderers 2009-12-20 18:15:20 -08:00
Joshua Peek
29c8a43056 Rename RackConvenience => RackDelegation 2009-12-20 20:05:26 -06:00
Joshua Peek
0f8a5c7954 Merge Session stuff into RackConvenience 2009-12-20 20:00:04 -06:00
Yehuda Katz
b4ecb55551 Missing acts_like dependency 2009-12-20 17:38:28 -08:00
David Heinemeier Hansson
9b41e1e4d8 Renamed Redirector to Redirecting (its a module, not a class) 2009-12-20 17:25:13 -08:00
David Heinemeier Hansson
83f4d86a93 Rename the RenderingController module to just plain Rendering 2009-12-20 17:15:31 -08:00
Joshua Peek
bdccffc40e Remove annoying and useless meta comments 2009-12-20 19:04:54 -06:00
Joshua Peek
2e9c775998 Use instance_eval for schema block 2009-12-20 19:04:53 -06:00
Joshua Peek
c0ad3f6cc6 Rename define_schema => schema 2009-12-20 19:04:53 -06:00
Joshua Peek
669c5eec44 Rename SchemaDefinition => Schema 2009-12-20 19:04:53 -06:00
Taryn East
fc9b3e4a45 define_schema for Active Resource
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-12-20 19:04:53 -06:00
Yehuda Katz
33a6bd390a Fixes Dependency bug in ActiveSupport 2009-12-20 17:03:38 -08:00
David Heinemeier Hansson
c06aff0a7e Added cookies.permanent, cookies.signed, and cookies.permanent.signed accessor for common cookie actions [DHH] 2009-12-20 14:33:13 -08:00
Yehuda Katz
e48b4c2dd0 :to => redirect() can take a String using 1.9-style interpolation or proc that takes the path parameters as a Hash 2009-12-20 14:07:32 -08:00
Yehuda Katz
8b4735fbd9 Add active_support/ruby/shim to the default requirements for AP components 2009-12-20 14:06:40 -08:00
Joshua Peek
2419fae092 Pending tests for AD Response 2009-12-17 22:10:37 -06:00
Joshua Peek
3b44f35e24 Don't need response prepare! 2009-12-17 22:10:37 -06:00
David Heinemeier Hansson
44fb54fecd Models with no attributes should just have empty hash fixtures [Sam] (Closes #3563) 2009-12-17 17:53:16 -08:00
David Heinemeier Hansson
fa575973b1 Added alert/notice from 2-3-stable and refactored redirect_to into just living in Redirector [DHH] 2009-12-17 16:37:11 -08:00
David Heinemeier Hansson
2bfa477128 Fix deprecated :vendored_at option 2009-12-17 12:02:19 -08:00
Mikel Lindsaar
8950346f8a Updating requirement for mail to 1.3.4 2009-12-17 13:17:35 +11:00
Mikel Lindsaar
f176c94663 Updating requirement for mail to 1.3.3 2009-12-17 12:35:07 +11:00
Mikel Lindsaar
63b124b043 Merged in latest changes from rails/master 2009-12-17 12:23:08 +11:00
Mikel Lindsaar
418639b4cf Fixes for working with 1.9.1-head 2009-12-17 12:00:32 +11:00
Mikel Lindsaar
186cd7bc53 Merge branch 'rails'
Conflicts:
	actionmailer/lib/action_mailer.rb
	actionmailer/lib/action_mailer/delivery_method/smtp.rb
2009-12-17 11:24:02 +11:00
Joshua Peek
b9d4ceb43c Need to lazy realize middleware options so they can be modified in
the environment
2009-12-16 16:12:04 -06:00
Joshua Peek
7217d64f61 Use AbstractController error constants 2009-12-16 16:11:42 -06:00
Joshua Peek
7ee5843c3c Fully expand relative rails framework paths and make sure we aren't
adding any to the load path more than once.
2009-12-16 11:56:51 -06:00
Joshua Peek
1ab35020c1 Hush AMo test suite 2009-12-16 11:05:48 -06:00
Joshua Peek
c4df013852 ARes rake task should not worry about AS being in path 2009-12-16 11:03:40 -06:00
Joshua Peek
e1ee13e5fb Hush ARes test suite 2009-12-16 11:03:13 -06:00
Joshua Peek
1ca567e634 Hush AM test suite 2009-12-16 10:56:10 -06:00
Joshua Peek
ee51ddcc27 Hush AS test suite 2009-12-16 10:52:52 -06:00
Will
bf6af5f719 When passing force_reload = true to an association, don't use the query cache [#1827 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-12-16 10:49:53 -06:00
Carl Lerche
1b27f5c4f7 Add the ability for plugins to set default configuration settings. 2009-12-15 22:13:52 -08:00
Joshua Peek
f0bbc647c2 Procs don't call themselves
Fixes dev mode reloading [#3574 state:resolved]
2009-12-15 10:48:56 -06:00
Geoff Buesing
a4b19277b2 Add test for TimeWithZone#to_i with wrapped DateTime 2009-12-15 08:28:24 -06:00
Serguei Filimonov
2ae8300489 Added #to_i to DateTime in ActiveSupport so #to_yaml works correctly on ActiveRecord models with DateTime attributes. 2009-12-15 08:15:21 -06:00
David Heinemeier Hansson
7b61541ea5 Add Enumerable#exclude? to bring parity to Enumerable#include? and avoid if !x.include?/else calls [DHH] 2009-12-14 18:00:14 -08:00
Joshua Peek
5f8e48cbd2 Move route reloading into railties 2009-12-14 17:54:41 -06:00
Joshua Peek
ce970a8bb9 Remove route loading tests since it should be tested by railties 2009-12-14 16:52:22 -06:00
Joshua Peek
ec99eca013 Fix loading plugin and engine route sets 2009-12-14 16:51:13 -06:00
Joshua Peek
70c3e825fc Fix response_body warning in AC 2009-12-14 16:07:46 -06:00
Joshua Peek
bcb686054a Hush loading AR unless it fails 2009-12-14 16:01:23 -06:00
Joshua Peek
819a353c44 Hush AP test suite 2009-12-14 15:55:05 -06:00
Joshua Peek
1c52bca266 Fix warning in AC flash 2009-12-14 15:54:27 -06:00
Joshua Peek
2130566acf Fix warnings in AD::Response 2009-12-14 15:47:52 -06:00
Joshua Peek
f70079efb1 Fix warnings in railties configuration and initializeable 2009-12-14 15:42:48 -06:00
Yehuda Katz
ffb351713e Modify backtrace test to take implementations with slightly different backtrace output into consideration. 2009-12-13 10:40:00 -05:00
Yehuda Katz
0f7f90d25b Extract descendents a bit so it can take advantage of Rubinius' __subclasses__. 2009-12-13 10:39:10 -05:00
Joshua Peek
25bb301d9c Forgot to revert tests from that last commit 2009-12-12 21:03:45 -06:00
Joshua Peek
8a50f8a545 Revert "Fix instance_eval calls to association proxies"
I think it may of broke the build. Lets see.

This reverts commit 49e943c4f0.

Conflicts:

	activerecord/test/cases/associations/has_many_associations_test.rb
2009-12-12 19:58:54 -06:00
Joshua Peek
39b708be96 rendering controller needs base 2009-12-12 19:50:12 -06:00
Joshua Peek
71cd5b9568 Don't require AD test_case 2009-12-12 19:44:52 -06:00
Joshua Peek
289c9a24fc Nearly all AC modules can be deferred 2009-12-12 19:41:58 -06:00
Joshua Peek
9cc9949817 All AbstractController modules are deferrable 2009-12-12 19:28:03 -06:00
Joshua Peek
4b4e517bf1 Relocate AbstractController exceptions into their proper parent modules 2009-12-12 18:48:34 -06:00
Joshua Peek
018dafe574 Allow autoloads to opt out of eager loading 2009-12-12 18:41:26 -06:00
Joshua Peek
ee395fe626 TestProcess belongs in AD 2009-12-12 18:09:44 -06:00
José Valim
cf7b94c013 Merge branch 'master' of git://github.com/rails/rails 2009-12-11 19:24:32 -02:00
John Pignata
96deabace7 Fix postgresql AR test failure
Due to the ordering of the returning result set, the test fails under the postgresql adapter. Order results by id prior to checking the first item

[#3542 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-12-11 15:15:12 -06:00
Joshua Peek
2297eaed5b "new" and "edit" name routes always need to be prepend to the
named_route [#3561 state:resolved]
2009-12-11 12:46:50 -06:00
Joshua Peek
61e9f2023b Use rackmounts recognize api and don't piggyback recognize_path on
top of rack call
2009-12-11 00:11:16 -06:00
Joshua Peek
588225f885 Remove fancy method not allowed resource exceptions since they are
too much of a hack
2009-12-11 00:01:22 -06:00
Joshua Peek
2f90d70049 Kill RouteSet#recognize 2009-12-10 23:45:04 -06:00
Joshua Peek
d1191507bc Cleanup generate_extras build/parse mess 2009-12-10 22:57:07 -06:00
Joshua Peek
1b82590c36 Reduce usage of interpret_status. It should also return a integer
not a string.
2009-12-10 22:02:50 -06:00
Nathan Weizenbaum
c517a4fb9a Add autoloads for ActionView::Template* classes, and an ActionView::TemplateError alias for ActionView::Template::Error.
Signed-off-by: Yehuda Katz <wycats@Yehuda-Katz.local>
2009-12-10 13:11:21 -08:00
Yehuda Katz
8b9275340f Merge branch 'master' of github.com:rails/rails 2009-12-10 13:11:15 -08:00
Joshua Peek
ec5434c3c2 Check block arity passed to routes draw so you don't need to use
|map|
2009-12-09 20:46:32 -06:00
Joshua Peek
b2ef6d13f0 Fixed old routing mapper example in generated routes.rb 2009-12-09 20:39:42 -06:00
Joshua Peek
0fec53f243 Scaffolding generates new routing dsl examples 2009-12-09 18:57:16 -06:00
Carlhuda
f9d570bdd8 Simpler RenderOption API -- removes the need for registering the types and extending a module 2009-12-09 13:40:49 -08:00
Joshua Peek
9fbde11b8b More test porting 2009-12-08 17:41:00 -06:00
Joshua Peek
511cef296b Tack format onto resource routes 2009-12-08 17:19:49 -06:00
Joshua Peek
2be5e088d2 Use new routing dsl in tests 2009-12-08 16:52:26 -06:00
Joshua Peek
ac711043ec Fix ambiguous access_token scoping example 2009-12-08 16:15:25 -06:00
Joshua Peek
ce5f27b04b Remove double scoping blocks and just use one 2009-12-08 16:13:00 -06:00
Joshua Peek
c4df6332a4 Seperate scope level for nesting resources 2009-12-08 16:06:46 -06:00
Joshua Peek
33658ea1ae Don't use name prefix by itself unless as is an empty string 2009-12-08 15:50:44 -06:00
Joshua Peek
3d91d7f0a2 Routes added under resource collection should be prefixed with
resource collection name
2009-12-08 15:31:56 -06:00
Joshua Peek
1fc58a889d Fixed named prefix scope in resource member and collection actions 2009-12-07 20:57:01 -06:00
Joshua Peek
0c34e3f41a Ignore name_prefix unless there is an explicit name 2009-12-07 20:11:57 -06:00
Joshua Peek
81d7227c9b Move base mapper methods into Base module so plugins can easily
extend the mapper
2009-12-07 19:59:23 -06:00
Joshua Peek
e86a82c52c Move name_prefix merging into Scoping concern 2009-12-07 19:50:13 -06:00
Joshua Peek
e600b41c7f Cleanup resource scoping by passing down the parent resource object
in the scope
2009-12-07 19:47:47 -06:00
Joshua Peek
5835447b6f named_prefix doesn't join with "_" 2009-12-07 19:31:29 -06:00
Joshua Peek
e8489b43e2 Allow name_prefix to be pass into scope 2009-12-07 19:24:33 -06:00
Joshua Peek
40ad54e381 Allow scope to take :path and :controller options 2009-12-07 18:28:02 -06:00
Joshua Peek
66375434b6 Pass symbol in as route name when match is used with a symbol 2009-12-07 17:22:09 -06:00
José Valim
2ecfa817c9 Responder redirects to resource if destroy fails.
Signed-off-by: Yehuda Katz <wycats@Yehuda-Katz.local>
2009-12-07 15:05:27 -08:00
José Valim
324fa688fc Make controller.flash public to be used in responders.
Signed-off-by: Yehuda Katz <wycats@Yehuda-Katz.local>
2009-12-07 15:05:12 -08:00
Joshua Peek
48127c637c Deprecate recalling generation params when the defaults are nil 2009-12-06 20:40:07 -06:00
Jeremy Kemper
63e435955e Ruby 1.9.2: explicitly raise NoMethodError for explicit coercion attempts 2009-12-06 18:22:09 -08:00
Jeremy Kemper
071af66e9e Ruby 1.9.2: explicitly raise NoMethodError for explicit coercion attempts. Calling super gives us NameErrors. 2009-12-06 18:03:18 -08:00
Jeremy Kemper
adc2115132 Remove assert_raises usage that only test-unit 1 supports. Breaks minitest and test-unit 2. 2009-12-06 17:23:43 -08:00
Joshua Peek
4663f75f6b Update rackmount to fix some pending tests 2009-12-05 13:10:00 -06:00
Gabe da Silveira
32395899d7 Replace reset_counter_cache with reset_counters that has API inline with existing update_counters method
[#1211 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-12-03 23:25:11 -08:00
Ben Marini
e55284e825 Add support for Mysql column positioning via #add_column and #change_column
add_column and change_column in the Mysql adapter now accept some
additional options:
:first => true        # Put the column in front of all the columns
:after => column_name # Put the colmn after 'column_name'

add_column :new_col, :string, :first => true
add_column :another_col, :integer, :default => 0, :after => :new_col

[#3286 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-12-03 23:09:57 -08:00
Yehuda Katz
96e0638ce2 Should fix a few Sam Ruby fails. 2009-12-03 09:06:01 -08:00
Carlhuda
c1304098cc Reorganize autoloads:
* A new module (ActiveSupport::Autoload) is provide that extends
    autoloading with new behavior.
  * All autoloads in modules that have extended ActiveSupport::Autoload
    will be eagerly required in threadsafe environments
  * Autoloads can optionally leave off the path if the path is the same
    as full_constant_name.underscore
  * It is possible to specify that a group of autoloads live under an
    additional path. For instance, all of ActionDispatch's middlewares
    are ActionDispatch::MiddlewareName, but they live under 
    "action_dispatch/middlewares/middleware_name"
  * It is possible to specify that a group of autoloads are all found
    at the same path. For instance, a number of exceptions might all
    be declared there.
  * One consequence of this is that testing-related constants are not
    autoloaded. To get the testing helpers for a given component,
    require "component_name/test_case". For instance, "action_controller/test_case".
  * test_help.rb, which is automatically required by a Rails application's
    test helper, requires the test_case.rb for all active components, so
    this change will not be disruptive in existing or new applications.
2009-12-02 20:01:08 -08:00
José Valim
6e55b32e98 Merge branch 'master' of git://github.com/rails/rails 2009-12-02 22:29:34 -02:00
Joshua Peek
399909b11c Use to_query in route query string generation 2009-12-02 15:23:26 -06:00
Joshua Peek
856d2fd874 Quick fix for not escaping []s (not ideal) 2009-12-02 15:17:08 -06:00
Joshua Peek
1ee9b40b18 Failing tests for to_param/to_query not escaping "[]" 2009-12-02 15:08:42 -06:00
Mat Brown
49e943c4f0 Fix instance_eval calls to association proxies
In the current stable, ActiveRecord::Associations::AssociationProxy#method_missing calls yield() if a block is given, causing the block to always be evaluated in its calling context. However, in the case of instance_eval, correct behavior requires that the block be passed directly to the @target, rather than being evaluated inside a different block. Incidentally, this also simplifies the code slightly.

[#3412 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-12-02 12:47:09 -08:00
Mike Breen
50c28e78c7 Implement ActiveRecord#reset_counter_cache
[#1211 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-12-02 12:20:00 -08:00
Joshua Peek
de2cd8e39f Merge branch 'master' of github.com:rails/rails 2009-12-02 14:12:35 -06:00
Joshua Peek
8db038227c Move controller namespace tracking into route set so it gets
reloaded in dev mode
2009-12-02 14:10:22 -06:00
Carlhuda
c446b1b12b Ignore all pkg files 2009-12-02 11:35:48 -08:00
Carlhuda
6680f9c4d7 Fix an ivar name conflict in Rails::Server 2009-12-02 11:35:47 -08:00
Carlhuda
fe41c7030b Stop evalling the environment file in favor of require + setting a Kernel#config. This will fix the bug where reopening classes caused them to be overwritten. 2009-12-02 11:35:47 -08:00
Carlhuda
39034997d1 Add support for bare ActiveSupport via config.active_support.bare 2009-12-02 11:35:47 -08:00
Carlhuda
8ff310aef4 Break up rails and railties:
* rails is now a metagem (gem install rails works as it does now)
* railties includes the glue layer, so you can easily declare dependencies
  on railties, actionpack, and actionmailer and not get ActiveRecord's rake
  tasks, initializers, etc.
2009-12-02 11:35:47 -08:00
Carlhuda
abfc4dad3e Remove global Rails initializers 2009-12-02 11:35:47 -08:00
Joshua Peek
4dee277a9b Stop escaping "[]" in query string 2009-12-02 12:46:14 -06:00
Joshua Peek
c0949cc8f6 Rackmount 0.3.0 2009-12-02 12:38:25 -06:00
Joshua Peek
84be6cfb64 Fork rack build nested query to support to_param 2009-12-02 12:33:33 -06:00
Jeremy Kemper
de40bc033a Ensure Cache-Control max-age is an integer 2009-12-02 03:23:00 -08:00
Joshua Peek
ad26f066fe Response#write is defined twice (this is why -w is good) 2009-12-01 23:29:28 -06:00
Joshua Peek
f22db809c9 Response#cache_control is defined later 2009-12-01 23:27:40 -06:00
Joshua Peek
e12380e787 Remove concat before overriding it 2009-12-01 23:25:24 -06:00
Joshua Peek
70d0b7c87a Fix parens warning in ajax test 2009-12-01 23:19:41 -06:00
Joshua Peek
75ae5bb022 cache_store and page_cache_directory are already defined in caching
and pages
2009-12-01 23:14:03 -06:00
Joshua Peek
5d9af09563 Silence known internal AM deprecation calls 2009-12-01 23:01:21 -06:00
Joshua Peek
97be8537eb Fix @renderer warning 2009-12-01 22:58:56 -06:00
Joshua Peek
2fbd6f46fd Simply track controller namespaces instead of a complete list of
possible controllers to route to
2009-12-01 22:48:42 -06:00
Joshua Peek
7fe19d415a Make recognize try to constantize controller to see if it exists 2009-12-01 22:22:48 -06:00
Joshua Peek
30ae3538a3 Some basic route discovery tests 2009-12-01 21:19:20 -06:00
José Valim
28657e4f41 Update vendored thor and ensure that content is completely modified before checking file collisions.
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-12-01 17:51:10 -08:00
Jeremy Kemper
74be70039f Avoid using unrequired core extensions 2009-12-01 15:07:41 -08:00
Jeremy Kemper
544de09631 rails:update:configs updates boot.rb and the rest of config/* 2009-12-01 13:37:29 -08:00
Jeremy Kemper
df9f5e771b Reinstate rails:update:configs task removed in e1fdc8b 2009-12-01 13:37:29 -08:00
Jeremy Kemper
fe319103db Fix rails:update:scripts 2009-12-01 13:37:29 -08:00
Joshua Peek
44587b7fae Merge branch 'master' of github.com:rails/rails 2009-12-01 14:53:39 -06:00
Joshua Peek
61a31f3d3d Fix generating params with optional defaults [#3404 state:resolved] 2009-12-01 14:52:19 -06:00
Jeremy Kemper
0c4990b5f4 Fix caching test to ensure notifications are all delivered 2009-12-01 12:19:42 -08:00
José Valim
6e30361260 Allow ActionController::Responder to have a common entry point for all formats.
Signed-off-by: Yehuda Katz <wycats@Yehuda-Katz.local>
2009-12-01 08:23:43 -08:00
José Valim
c2e97cb410 Merge branch 'master' of git://github.com/rails/rails 2009-12-01 13:00:34 -02:00
Joshua Peek
6ac32a8328 Define a welcome controller in mailer tests 2009-11-29 18:28:45 -06:00
Joshua Peek
075f50d62c Fix some nested resource generation tests 2009-11-29 18:17:14 -06:00
Joshua Peek
f69f9820ee Wrap up http related routing helpers 2009-11-29 17:45:12 -06:00
Joshua Peek
312c3bfa24 Break down long match routing method 2009-11-29 17:39:37 -06:00
Joshua Peek
5da01a92c7 Make use of extract_options! 2009-11-29 17:01:14 -06:00
Joshua Peek
40ae2070d5 Extract Resource and SingletonResource helper objects 2009-11-29 16:59:44 -06:00
Joshua Peek
8815fefd16 Bump required rack-mount version to 0.2.3 2009-11-29 15:34:46 -06:00
Joshua Peek
b87c13242c Remove rackmount submodule 2009-11-29 15:26:55 -06:00
Joshua Peek
3f025e6408 Resource collection should be defined before member routes 2009-11-29 15:23:27 -06:00
Jeremy Kemper
327545c3ae Notifications: synchronous fanout queue pushes events to subscribers rather than having them concurrently pull 2009-11-29 02:30:35 -08:00
Bryan Helmkamp
bb84cab2fc Update reference to deprecated constant to avoid warnings 2009-11-28 23:41:03 -08:00
Yehuda Katz
45d8ff08a4 Remove reference to class that doesn't exist (ht: brynary) 2009-11-28 21:36:58 -08:00
Jeremy Kemper
4f2a04cc08 Notifications: extract central Notifier, cordon off the internal Fanout implementation, and segregate instrumentation concerns 2009-11-28 12:50:09 -08:00
Jeremy Kemper
02893d1705 Remark that Listener is an implementation detail 2009-11-28 12:50:09 -08:00
Jeremy Kemper
ddf681ce1d Expose a simple Queue#wait to block until all notifications are drained 2009-11-28 12:50:09 -08:00
Jeremy Kemper
6f7fc5824f Revert "Create SyncListener. Since they do not rely on Thread, they can be used on Google App Engine."
Take a step back on this API direction.

This reverts commit 8104f65c32.
2009-11-28 12:50:09 -08:00
Jeremy Kemper
eeb1afa200 Expand path relative to __FILE__ 2009-11-28 12:50:09 -08:00
Michael Koziarski
7e0aa35c20 avoid generating invalid SMTP commands in ruby pre 1.9
Signed-off-by: Michael Koziarski <michael@koziarski.com>

Conflicts:

	actionmailer/lib/action_mailer/base.rb
2009-11-28 13:34:05 +13:00
José Valim
fc3629f6ca Merge branch 'master' of git://github.com/rails/rails 2009-11-25 23:25:32 -02:00
Carl Lerche
02c3c9dfbc Fix the application.rb generator 2009-11-25 14:52:56 -08:00
Carl Lerche
25b8e996bd Fix the rackup test to correctly use Rack::Builder.parse_file 2009-11-25 14:45:12 -08:00
Carl Lerche
34eac1cf1c Load application specific rake tasks in the application object 2009-11-25 14:29:28 -08:00
Jeremy Kemper
71a6b0465b Revert "macruby: no format_datetime or msg2str"
Obviated by fix in macruby trunk.

This reverts commit 6d91e7dca1.
2009-11-24 17:15:35 -08:00
Carlhuda
530b8ff5ae Have script/* and Rakefile use the application object 2009-11-24 14:36:30 -08:00
Carlhuda
a2cb90c0c2 Refactor script/dbconsole into an object 2009-11-24 13:05:21 -08:00
Jeremy Kemper
d8c5ea76bc Use Rails.env after loading environment 2009-11-24 10:46:16 -08:00
Joshua Peek
fa007e591d Quieter rake test runner 2009-11-24 12:04:36 -06:00
José Valim
41e607dee2 Merge branch 'master' of git://github.com/rails/rails 2009-11-24 09:24:40 -02:00
Mikel Lindsaar
5f2395041d Merge branch 'master' of git://github.com/rails/rails into rails_master 2009-11-24 21:45:14 +11:00
Jeremy Kemper
e62e6d4099 Add a dead --irb option mentioning upgrade path 2009-11-23 22:09:36 -08:00
Jeremy Kemper
0088ceb6fa Set RAILS_ENV before loading config/environment 2009-11-23 22:07:37 -08:00
Joshua Peek
59dbae145b Privatize Routing.possible_controllers and fix brittle url helper
controller test loading.
2009-11-23 21:50:21 -06:00
Joshua Peek
15ab3a98a1 Find all controllers in memory to use for routing 2009-11-23 20:20:50 -06:00
Joshua Peek
f987e8561c with_controllers is no longer used 2009-11-23 19:45:42 -06:00
Joshua Peek
8d351eac07 Extract Routing.controller_constraints 2009-11-23 19:44:43 -06:00
Carlhuda
53d7acdf4f Refactor script/console into an object and use IRB.start instead of calling exec. 2009-11-23 17:28:50 -08:00
Carlhuda
a080323cb0 Refactor script/server into an object that inherits from Rack::Server 2009-11-23 17:28:50 -08:00
Carlhuda
58dec09353 Update rails application root detection to take into consideration a callstack that includes the rack library 2009-11-23 17:28:50 -08:00
Carlhuda
c102db9367 Updates notifications tests in railties to reflect changes to the notifications API 2009-11-23 17:28:50 -08:00
Joshua Peek
350d3daa88 Remove inflection reloads routes test 2009-11-23 19:25:39 -06:00
Joshua Peek
01c9f99c53 Kill dead routing internals helpers 2009-11-23 19:17:53 -06:00
Joshua Peek
ef771552b7 Don't really care about reloading routes when inflections are
changed.
2009-11-23 18:59:48 -06:00
José Valim
16cf25e717 Merge branch 'master' of git://github.com/rails/rails 2009-11-23 22:40:55 -02:00
Jeremy Kemper
eeb1f472a5 RAILS_ENV falls back to RACK_ENV 2009-11-23 16:10:51 -08:00
Joshua Peek
0ddba7cf66 Require rackmount >= 0.2.2 2009-11-23 18:07:18 -06:00
José Valim
4ff66b6b85 Merge branch 'master' of git://github.com/rails/rails 2009-11-23 22:04:18 -02:00
Yehuda Katz
934bb012ba Fixes remote errors in isolation tests 2009-11-23 15:42:25 -08:00
Jeremy Kemper
ada895e8ca Merge branch 'master' into mail 2009-11-23 15:32:41 -08:00
Jeremy Kemper
671538cd6e Merge commit 'mikel/master' into mail
Conflicts:
	actionmailer/lib/action_mailer.rb
2009-11-23 15:29:35 -08:00
Mikel Lindsaar
3a72923e27 Change require mail version to 1.3.0 2009-11-24 09:38:00 +11:00
Mikel Lindsaar
2e453d930d Changed deprecation to use ActiveSupport::Deprecation 2009-11-24 09:33:05 +11:00
Jeremy Kemper
f8d06e62a9 Pending test now passing 2009-11-23 14:07:54 -08:00
David Heinemeier Hansson
35eda7d6d2 Fixed that the debugger wouldn't go into IRB mode because of left-over ARGVs [DHH] 2009-11-23 15:36:48 -06:00
Jeremy Kemper
78790e47b8 Revert "Revert "Assert primary key does not exist in habtm when the association is defined, instead of doing that everytime a record is inserted.""
This reverts commit 2b82708b0e.

[#3128 state:resolved]

Conflicts:

	activerecord/lib/active_record/associations.rb
	activerecord/lib/active_record/associations/has_and_belongs_to_many_association.rb
2009-11-23 10:42:32 -08:00
Jeremy Kemper
ca5de16ddc Add mail dep to AM gemspec 2009-11-23 09:57:53 -08:00
José Valim
d0aa0cfbd7 Ensure generator fallbacks work even when a context is given.
Signed-off-by: Yehuda Katz <wycats@Yehuda-Katz.local>
2009-11-23 09:08:48 -08:00
José Valim
d6f10126eb Also load generators at lib/rails_generators.
Signed-off-by: Yehuda Katz <wycats@Yehuda-Katz.local>
2009-11-23 09:08:33 -08:00
José Valim
8104f65c32 Create SyncListener. Since they do not rely on Thread, they can be used on Google App Engine.
Signed-off-by: Yehuda Katz <wycats@Yehuda-Katz.local>
2009-11-23 09:08:17 -08:00
Mikel Lindsaar
906e308220 Fixed up incompatible encoding problem for Ruby 1.9 in test suite 2009-11-23 20:58:22 +11:00
Mikel Lindsaar
cc391c3022 Deprecating attachment :body => 'string' in favour of attachment :data => 'string' 2009-11-23 20:53:07 +11:00
Mikel Lindsaar
a6eed86c33 Removing utils, and updating requires to match 2009-11-23 20:50:49 +11:00
Jeremy Kemper
d98fee67e2 Never require jcode 2009-11-22 15:41:29 -08:00
Jeremy Kemper
e6bce95580 Rely on gemspec and bundled env for gem dependency. We just require it. 2009-11-22 15:08:01 -08:00
Jeremy Kemper
0f9029ec48 Explicit source no longer needed, default gems source points to gemcutter. 2009-11-22 14:34:11 -08:00
Jeremy Kemper
c5509a056c Bundle mail 1.2.8 2009-11-22 13:00:31 -08:00
Jeremy Kemper
e68bc3f14e Merge commit 'origin/master' into mail 2009-11-22 10:31:47 -08:00
Mikel Lindsaar
3cb46b40a0 Opps.. need to require it as well as gem mail :) 2009-11-22 23:36:30 +11:00
Mikel Lindsaar
06c5270343 Adding mail as a gem load 2009-11-22 23:34:39 +11:00
Mikel Lindsaar
747d56881a 131 tests, 309 assertions, 0 failures, 0 errors 2009-11-22 23:20:57 +11:00
Jeremy Kemper
6d91e7dca1 macruby: no format_datetime or msg2str 2009-11-21 19:11:50 -08:00
Jeremy Kemper
e1935e3c0c Fix Rails::Rack::Static deprecated constant proxy 2009-11-21 10:45:42 -08:00
Mikel Lindsaar
f6f70540bb Updating tests for Mail gem 2009-11-22 00:04:36 +11:00
Mikel Lindsaar
0e38f5bdcc 131 tests, 266 assertions, 9 failures, 6 errors 2009-11-21 23:55:53 +11:00
Mikel Lindsaar
6456a08334 Down to 13 failures, 14 errors 2009-11-20 22:01:40 +11:00
Mikel Lindsaar
a5e6295d72 Down to 30 failures total 2009-11-20 21:19:10 +11:00
Mikel Lindsaar
539d9b355f More updates... 45 errors left to get it working with Mail gem 2009-11-20 14:10:57 +11:00
Jeremy Kemper
0ce9206541 Update gemspec also 2009-11-19 18:31:50 -08:00
Joshua Peek
74a0fb9722 Should be rackmount 0.2 2009-11-19 18:08:38 -08:00
Joshua Peek
4236473e31 Depend on rack-mount 0.0.2 2009-11-19 17:59:26 -08:00
Joshua Peek
6e67f88a11 Extended and case insensitive regexp routes aren't that important.
Mark them as pending till I figure it out.
2009-11-19 17:58:57 -08:00
Joshua Peek
4b325fcd1a Update routing for rackmount 0.2 api changes 2009-11-19 17:58:57 -08:00
Jeremy Kemper
c7c39f52dc Revert "Final steps toward clean rails "foo"; cd foo; gem bundle; script/server working"
Broke stuff.

This reverts commit 520b8b5911.
2009-11-19 15:24:00 -08:00
Joshua Peek
5df26dd7a9 Add basic nested named route support to new routing dsl. Also add a
bunch of pending tests.
2009-11-19 09:04:53 -08:00
Jeremy Kemper
0dfd993e77 Fix test bleed 2009-11-18 17:54:27 -08:00
Yehuda Katz + Carl Lerche
520b8b5911 Final steps toward clean rails "foo"; cd foo; gem bundle; script/server working 2009-11-18 16:28:37 -08:00
Jeremy Kemper
4403dfac6c Check whether another lib has implemented ruby 1.9 string interp syntax 2009-11-18 11:33:41 -08:00
Jeremy Kemper
e1385be025 Extract form_authenticity_param instance method so it's overridable in subclasses 2009-11-17 23:40:06 -08:00
Gabe da Silveira
ea290e77e6 Insert generated association members in the same order they are specified when assigning to a has_many :through using the generated *_ids method
[#3491 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-11-17 22:25:40 -08:00
Jeremy Kemper
fb61fbd352 Revert "Ensure Model#destroy respects optimistic locking"
[#1966 state:open]

This reverts commit 0d922885fb.

Conflicts:

	activerecord/lib/active_record/locking/optimistic.rb
2009-11-17 15:35:35 -08:00
Joshua Peek
f8877d4b2a Merge remote branch 'Fingertips/master' 2009-11-16 21:03:27 -06:00
Yehuda Katz
c2997017f7 Make script/server work with correct application.rb 2009-11-16 13:58:08 -08:00
Yehuda Katz
2675ba9ef4 Require action_dispatch, not action_controller 2009-11-16 12:37:43 -08:00
Yehuda Katz
c1f5168073 Temporarily add submodules to the Rails repo for Arel and Rack::Mount. These submodules will be removed once we add proper Gemfile following to bundler 2009-11-16 12:30:06 -08:00
Will Read
7fadb3f261 Allow explicit placement of hidden id element for nested models.
[#3259 state:resolved]

Signed-off-by: Eloy Duran <eloy.de.enige@gmail.com>
2009-11-15 21:47:57 +01:00
Jeremy Kemper
7601d482bd Ruby 1.9: skip pg locking test for 1.9.1 also 2009-11-15 10:28:58 -08:00
Yehuda Katz
cc011bc2be Add TimeZone dependency 2009-11-14 19:33:58 -08:00
Jeremy Kemper
bc1538e995 Repair time dependencies 2009-11-14 11:37:06 -08:00
Jeremy Kemper
74e1ff9dc2 Loosen optional gem deps from ~> to >= 2009-11-14 03:32:35 -08:00
Jeremy Kemper
3ee9b8f2b2 Remove Gemfile deps duplicated from AP gemspec 2009-11-14 03:27:18 -08:00
Jeremy Kemper
795213a5f4 Just use abstract_unit 2009-11-14 03:27:18 -08:00
Jeremy Kemper
313a7ea9d6 Fix bundler environment check 2009-11-14 03:27:18 -08:00
Jeremy Kemper
61843595ea No need for test stub 2009-11-14 03:27:18 -08:00
Jeremy Kemper
364a8f3902 No need to check for generated method, just redispatch 2009-11-14 01:51:52 -08:00
Jeremy Kemper
6ebb061b18 Ruby 1.9.2: use recursive flatten 2009-11-14 01:50:47 -08:00
Jeremy Kemper
f0f4dffd3b Skip pg locking test due to connection checkout deadlock detection 2009-11-14 01:22:36 -08:00
Jeremy Kemper
7eb4f2ecc5 Consolidate date & time landscape: require 'active_support/time' 2009-11-14 01:13:54 -08:00
Jeremy Kemper
92253829de Ruby 1.9.2: fix flatten_deeper to preserve nils 2009-11-14 01:12:49 -08:00
Jeremy Kemper
58c0d31487 Notifications: queue.drained? for testability in place of brittle sleeps 2009-11-13 20:58:38 -08:00
Jeremy Kemper
66fda6b894 Fix duration check for longer sleep 2009-11-13 19:28:59 -08:00
Jeremy Kemper
7ab78b9ccd CI: slow down brittle notifications tests 2009-11-13 18:57:10 -08:00
Jeremy Kemper
7b3d85db4c Revert "Split arel_table into method to get a relation and another to memoize the default relation."
This reverts commit bd51790895.
2009-11-13 15:30:51 -08:00
Jeremy Kemper
3f54f3100b Ruby 1.9.2: StringIO no longer has #path 2009-11-13 13:10:28 -08:00
Jeremy Kemper
2841a14f4b Ruby 1.9.2: fix broken to_ary expectation 2009-11-13 12:42:49 -08:00
Jeremy Kemper
9acc824d96 Ruby 1.9.2: disallow explicit coercion via method_missing. Only give friendly nil errors for Array and Active Record methods. 2009-11-13 12:25:54 -08:00
Jeremy Kemper
0214d337b3 Rescue handlers should never need array wrapping. Bug if so. 2009-11-13 11:00:18 -08:00
Jeremy Kemper
bd51790895 Split arel_table into method to get a relation and another to memoize the default relation. 2009-11-13 10:53:19 -08:00
Jeremy Kemper
0da71980cd Missing customers fixture 2009-11-13 10:38:23 -08:00
Jeremy Kemper
3fd2624be4 Uses Hash#reverse_merge 2009-11-13 10:31:05 -08:00
Jeremy Kemper
fbbf0086ca Ruby 1.9.2: avoid #flatten 2009-11-13 09:52:53 -08:00
Jeremy Kemper
18d4976516 Prefer Array.wrap to Array() 2009-11-13 09:52:53 -08:00
Jeremy Kemper
f07bcf015e Ruby 1.9.2: work around Array allowing method_missing for to_ary 2009-11-13 09:52:53 -08:00
Jeremy Kemper
c0ebc21493 Test that Array.wrap works with proxy objects and structs 2009-11-13 09:52:52 -08:00
José Valim
2cb47c742f Split mime responder into smaller chunks and allow action to be configured.
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-11-13 09:52:52 -08:00
Joshua Peek
a28d0ea33e Remove rackmount const usage 2009-11-12 23:33:30 -06:00
Jeremy Kemper
2da432dde3 Always bundle pg and mysql for AR tests 2009-11-12 11:26:55 -08:00
David Vrensk
af44b07649 Rdoc for changes introduced in e2ed1a1ca, 36058f450.
[#3451 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-11-12 11:21:44 -08:00
Mikel Lindsaar
15d7cac282 Starting again on actionmailer integration with mail 2009-11-12 16:08:50 +11:00
Yehuda Katz + Carl Lerche
82b9b151ff Refactor plugins 2009-11-11 18:09:16 -08:00
José Valim
01ae99c681 Merge branch 'master' of git://github.com/rails/rails 2009-11-11 08:16:25 -02:00
Jeremy Kemper
fca32eb6c5 Update AR logger subscriber for Notifications subscriber args change 2009-11-11 01:43:58 -08:00
Jeremy Kemper
322b6b29c2 test-unit 2: filter_backtrace is private 2009-11-10 21:04:00 -08:00
Jeremy Kemper
0df1dc5a72 CI: yeah, run those tests 2009-11-10 17:19:39 -08:00
Jeremy Kemper
486a63c258 CI: short-circuit at first failing task. Chmod 755 bin, vendor, vendor/gems 2009-11-10 17:13:43 -08:00
Jeremy Kemper
1ac8e0662f Rack: HTTPS is either 'on' or 'off' as of 9b7a0569e4067d0c23a00fc24273436e85c56d7f 2009-11-10 16:57:55 -08:00
Jeremy Kemper
215fa16734 CI: list bundled gems in build environment 2009-11-10 16:54:15 -08:00
Jeremy Kemper
bbb3e5a858 Unify test:isolated across components and run by default at toplevel 2009-11-10 16:50:15 -08:00
Jeremy Kemper
e02bff2634 CI: missed mysql gem in bundle 2009-11-10 16:50:12 -08:00
Jeremy Kemper
13280a049e Back to rack master, rack-1.0 reverts the kind_of? String fix 2009-11-10 16:34:04 -08:00
Jeremy Kemper
631a27d6a5 Revert "Revert "Eliminate warning with layout is unset""
This reverts commit d8fd0499bf.
2009-11-10 16:15:43 -08:00
Jeremy Kemper
8cd486da80 test-unit 2 compat: assert_raise doesn't support regexp second arg to match exception message 2009-11-10 16:14:10 -08:00
Jeremy Kemper
d8fd0499bf Revert "Eliminate warning with layout is unset"
This reverts commit 1fcf32f8fe.
2009-11-10 16:09:52 -08:00
Jeremy Kemper
c626be796c CI: rearrange build order, AR last 2009-11-10 16:08:02 -08:00
Jeremy Kemper
60558cc753 CI: no system gems required 2009-11-10 15:59:39 -08:00
Jeremy Kemper
819bdd0f4a Bundle rack-1.0 branch 2009-11-10 15:51:01 -08:00
Jeremy Kemper
1fcf32f8fe Eliminate warning with layout is unset 2009-11-10 15:48:03 -08:00
Jeremy Kemper
f14eb686ef CI: bundle test-unit on 1.9 2009-11-10 15:46:32 -08:00
Jeremy Kemper
6480850d37 Revert "Eliminate warning with layout is unset"
This reverts commit 90be80361f.
2009-11-10 15:43:37 -08:00
Jeremy Kemper
e889f315c8 CI: return result of last rake task 2009-11-10 15:40:54 -08:00
Jeremy Kemper
907858c1fe CI: shush complaints about 777 perms 2009-11-10 15:32:09 -08:00
Jeremy Kemper
aef7e214bd Use an env var to expand the CI bundle. Using bundler's 'only' includes this stuff for everybody, oops. 2009-11-10 15:28:25 -08:00
Jeremy Kemper
a7dc7cd0c4 Ruby 1.9: don't bundle fcgi at all for CI 2009-11-10 15:24:37 -08:00
Jeremy Kemper
ec2b2654e5 Make root_dir a method so rails can call it 2009-11-10 15:18:21 -08:00
Jeremy Kemper
a4aa95ba0c Bump AR.gemspec Arel dep too 2009-11-10 15:13:38 -08:00
Jeremy Kemper
74306b9526 Use bundled bin/rake 2009-11-10 14:59:59 -08:00
Jeremy Kemper
0247262833 Rely on bundler for gem deps instead of geminstaller 2009-11-10 14:59:46 -08:00
Jeremy Kemper
a584b4c13d Get rack from rails/rack.git. Introduce ci-only deps. 2009-11-10 14:59:22 -08:00
Jeremy Kemper
457940e684 Bump CI mocha to 0.9.8 and rack to 1.0.1 2009-11-10 14:17:40 -08:00
Jeremy Kemper
d887e46c29 Be sure to invoke the super chain! And initialize response body. 2009-11-10 14:14:17 -08:00
Jeremy Kemper
be664392c0 Eliminate warning by initializing nil formats 2009-11-10 14:13:54 -08:00
Jeremy Kemper
90be80361f Eliminate warning with layout is unset 2009-11-10 14:13:21 -08:00
Jeremy Kemper
3bdfda0730 Bump arel dep to 0.2.pre 2009-11-10 13:52:25 -08:00
Jeremy Kemper
1874a88765 Ruby 1.9: bump CI mysql from 2.7 -> 2.8.1 2009-11-10 11:57:56 -08:00
Jeremy Kemper
5fa497abf5 Ruby 1.9: fix Relation respond_to? and method_missing 2009-11-10 11:00:50 -08:00
Jeremy Kemper
77478f21af Resolve deadlock in pooled connections test 2009-11-10 11:00:29 -08:00
Jeremy Kemper
7ad6e9bc78 Fix generated performance test helper requires 2009-11-10 01:52:40 -08:00
Joshua Peek
38e8d5b10c Enable warnings for mailer tests 2009-11-09 23:42:46 -06:00
Matt Jones
d625312fe1 delete correct records for a has_many with :primary_key and :dependent => :delete_all
Signed-off-by: Michael Koziarski <michael@koziarski.com>
2009-11-10 18:41:37 +13:00
Joshua Peek
11e798ae0f Avoid adding component lib/ to load path multiple times 2009-11-09 23:28:36 -06:00
Joshua Peek
23229d5ad4 Remove preflight lib check during AP tests. Bundler resolves this issue 2009-11-09 22:59:30 -06:00
Joshua Peek
22b581e04c Always add AS lib/ to path when running its test suite 2009-11-09 22:56:49 -06:00
Joshua Peek
a31ecff554 Don't warn me if I'm not using bundler to run tests 2009-11-09 22:51:48 -06:00
Joshua Peek
94058c689a Remove automatic rubygems loading from AS test runner 2009-11-09 22:44:28 -06:00
Joshua Peek
335c0e62cd Fix railties isolated tests if bundler environment doesn't exist 2009-11-09 22:36:30 -06:00
Joshua Peek
f03bcf2495 Don't load all of railties just for Rails::Version 2009-11-09 22:30:26 -06:00
Joshua Peek
e9d21ca903 Add pending test for generating routes with optional params that recall last
request
2009-11-09 22:18:51 -06:00
Jeremy Kemper
3ce6a10b67 Contortions to work around brittle naming dependency 2009-11-09 20:10:10 -08:00
Joshua Peek
763489ce06 Add pending test for route generation with default param 2009-11-09 21:54:50 -06:00
Joshua Peek
1004fcb767 Fixed AD assertion autoloads [#3470 state:resolved] 2009-11-09 21:38:01 -06:00
Jeremy Kemper
08f7c4dd89 Revert "the REXML security fix is not needed for Ruby >= 1.8.7"
Still required on older 1.8.7 patchlevels.

This reverts commit a48f49e56b.
2009-11-09 19:30:02 -08:00
Jeremy Kemper
703d31c20a Clarify failed assertion 2009-11-09 17:01:57 -08:00
Jeremy Kemper
feaa762e40 Ditto 2009-11-09 16:59:38 -08:00
Jeremy Kemper
eeac054d59 Fix missing dependency 2009-11-09 16:57:10 -08:00
Jeremy Kemper
0ac88af998 Remark when bundled env require fails 2009-11-09 16:10:37 -08:00
Jeremy Kemper
a66449d852 Ruby 1.9.2: work around inherited hook being called before yielding to block 2009-11-09 14:36:49 -08:00
Jeremy Kemper
7a68554291 Merge commit 'fxn/master' 2009-11-09 13:56:49 -08:00
Jeremy Kemper
d5fd09246e Bump AP gem dependencies to upgrade Rack to 1.0.1 and to include rack-mount and erubis. 2009-11-09 13:29:15 -08:00
Xavier Noria
a48f49e56b the REXML security fix is not needed for Ruby >= 1.8.7 2009-11-09 22:16:51 +01:00
Xavier Noria
db2c0d79e3 Enumerable#none? is not needed for Ruby >= 1.8.7 2009-11-09 22:16:51 +01:00
Xavier Noria
329e7f4441 Integer#even? and Integer#odd? are not needed for Ruby >= 1.8.7 2009-11-09 22:16:51 +01:00
Xavier Noria
b6598c683b String#each_char is not needed for Ruby >= 1.8.7 2009-11-09 22:16:51 +01:00
Xavier Noria
c0bb4c6ed2 String#start_with? and String#end_with? are not needed for Ruby >= 1.8.7, leaves their plural aliases though 2009-11-09 22:16:51 +01:00
Xavier Noria
004db18cb0 String#bytesize is not needed for Ruby >= 1.8.7 2009-11-09 22:16:51 +01:00
Xavier Noria
f8e713f488 Object#tap is not needed for Ruby >= 1.8.7 2009-11-09 22:16:51 +01:00
Xavier Noria
1979e9c855 Symbol#to_proc is not needed for Ruby >= 1.8.7 2009-11-09 22:16:51 +01:00
Xavier Noria
d4513ac699 Object#instance_variable_defined? is not needed for Ruby >= 1.8.7 2009-11-09 22:16:51 +01:00
Bryan Helmkamp
047007fa9d Silence warning: discarding old h 2009-11-09 15:44:36 -05:00
Jeremy Kemper
3b0b6dfc86 Merge branch 'master' of github.com:rails/rails 2009-11-09 12:00:08 -08:00
Jeremy Kemper
c74cddc919 Merge commit 'brynary/fix-master-warnings' 2009-11-09 11:58:57 -08:00
Bryan Helmkamp
17dee01b6f Fix Ruby warning: method redefined; discarding old breakpoint 2009-11-09 14:49:12 -05:00
Bryan Helmkamp
afc129e270 Fix some Ruby warnings: `*' interpreted as argument prefix 2009-11-09 14:46:29 -05:00
Yehuda Katz
0f1da1cb5c Revert "Bundle I18n 0.2.0."
This reverts commit 83f329f5f3.
2009-11-09 11:33:47 -08:00
José Valim
4a1f438781 Change mailer subjects lookup. 2009-11-09 10:57:53 -08:00
José Valim
83f329f5f3 Bundle I18n 0.2.0. 2009-11-09 10:57:53 -08:00
Yehuda Katz
790c062280 Merge branch 'master' of github.com:rails/rails 2009-11-09 10:57:20 -08:00
Jeremy Kemper
3039912886 Silence spurious warning 2009-11-09 05:09:04 -08:00
Jeremy Kemper
76b2d3e337 Ruby 1.9.2: URI.parse and .decode are deprecated 2009-11-09 05:07:58 -08:00
Jeremy Kemper
6d808cf494 Remove reliance on string access core extension 2009-11-09 04:59:26 -08:00
Jeremy Kemper
7f0fcadd36 Revert "Ruby 1.9.2: avoid Array#to_s and Array(nil)"
This reverts commit 7ad461b44d.
2009-11-09 04:05:22 -08:00
Jeremy Kemper
a038b3d1bc Make Rakefile usable outside of base dir 2009-11-09 03:31:59 -08:00
Jeremy Kemper
ee0d41c38d Remove string access core extension dependency 2009-11-09 03:18:54 -08:00
Jeremy Kemper
b1164adda1 Fix arg destructure 2009-11-08 23:29:33 -08:00
Jeremy Kemper
8e32830412 Fix unresolved string extension dependencies 2009-11-08 22:49:31 -08:00
Jeremy Kemper
deddd55086 Work around assert_raise limitation 2009-11-08 22:02:57 -08:00
Jeremy Kemper
20cdaddfd2 Ruby 1.9.2: work around changes to flatten and nil.to_str 2009-11-08 22:02:57 -08:00
Jeremy Kemper
7ad461b44d Ruby 1.9.2: avoid Array#to_s and Array(nil) 2009-11-08 22:02:49 -08:00
Jeremy Kemper
c44fb4ced5 Ruby 1.9: use method_name to work around miniunit API changes 2009-11-08 21:30:34 -08:00
José Valim
51fe6d05e7 Refactor generators a little bit.
Signed-off-by: Yehuda Katz <wycats@mobile-166-129-219-135.mycingular.net>
2009-11-08 18:41:44 -08:00
José Valim
216e8c6bfa Update Rails Generators to use Thor 0.12.0.
Signed-off-by: Yehuda Katz <wycats@mobile-166-129-219-135.mycingular.net>
2009-11-08 18:41:44 -08:00
Joshua Peek
c10f4ae01d Merge remote branch 'Fingertips/master' 2009-11-08 16:03:15 -06:00
Jeremy Kemper
a595abff21 Unknown :format param should result in empty request.formats 2009-11-08 12:12:58 -08:00
Yehuda Katz
103b29831e Since we require 1.8.7 we don't need to shim instance_exec anymore 2009-11-07 11:23:34 -08:00
Yehuda Katz
e1b5e3cc70 Break up inflector to reduce the dependency burden on dependency-les methods like constantize. 2009-11-07 11:23:21 -08:00
Eloy Duran
f125a34501 Define autosave association callbacks when using accepts_nested_attributes_for.
This way we don't define all the validation methods for all associations by
default, but only when needed.

[#3355 state:resolved]
2009-11-07 00:42:42 +01:00
Chris Hapgood
c2cfb20198 Share ActionView::TestCase's output_buffer with view for concat support.
[#3467 state:resolved]

Signed-off-by: Eloy Duran <eloy.de.enige@gmail.com>
2009-11-07 00:42:07 +01:00
Chris Hapgood
b43964d606 Make some assertions in the ActionView::TestCase tests actually do something.
[#3468 state:resolved]

Signed-off-by: Eloy Duran <eloy.de.enige@gmail.com>
2009-11-07 00:39:39 +01:00
Nathan Weizenbaum
cbded53671 When rendering layouts with blocks, use #capture to avoid assuming that the return value is the block's content.
Signed-off-by: Yehuda Katz <wycats@Yehuda-Katz.local>
2009-11-05 20:08:04 -08:00
Jeremy Kemper
cb9a1759c0 Fix generators tests that expect a class name 2009-11-05 16:12:02 -08:00
Jeremy Kemper
1c047be0fc If class doesn't have a name, there's no implied layout name, so don't set up a _layout method 2009-11-05 16:12:02 -08:00
Jeremy Kemper
60911c3933 Ruby 1.9: Rack apps must *always* take an env arg on 1.9 2009-11-05 16:12:02 -08:00
Jeremy Kemper
73a36b599a Shush 2009-11-05 16:12:02 -08:00
Yehuda Katz
b12f194c39 Update AC::Middleware to play better with the normal AC::Metal stack. This required stopping to use #call for non-rack-related stuff 2009-11-05 15:38:25 -08:00
Yehuda Katz
b0dfd1d19b Update Ruby version check to 1.8.7 2009-11-05 15:38:25 -08:00
Yehuda Katz + Carl Lerche
4369426993 Add the ability to merge initializers from various objects in order. 2009-11-05 14:45:53 -08:00
Yehuda Katz + Carl Lerche
897164ddb7 Conceptually unify instance & global initializers 2009-11-05 14:44:29 -08:00
Chris Hapgood
6c59e5a558 Fix OrderedHash#replace
Signed-off-by: Michael Koziarski <michael@koziarski.com>
2009-11-05 21:17:13 +13:00
Jeremy Kemper
a8ed10546d Ruby 1.9: don't assume params are US-ASCII. Hands off the encoding. 2009-11-04 16:27:54 -08:00
Jeremy Kemper
dc1816da30 Ruby 1.9: fix number precision test 2009-11-04 16:10:24 -08:00
Jeremy Kemper
425a02cece Ruby 1.9: resolve constant lookup issues 2009-11-04 15:41:50 -08:00
Jeremy Kemper
0ff8f81adc Ruby 1.9: more constant lookup badness :( 2009-11-04 15:00:19 -08:00
Jeremy Kemper
52e2bbd5c0 Ruby 1.9: work around constant resolution behavior change :( 2009-11-04 14:51:54 -08:00
Jeremy Kemper
d2d3464fcc Turn off --debug for gem bundle. Force gem update. 2009-11-04 14:49:15 -08:00
Jeremy Kemper
726a2fc8d2 Give useful test:isolated failures 2009-11-04 12:44:06 -08:00
Jeremy Kemper
03dc66444e Add bundler 0.6.0 to CI geminstaller 2009-11-04 11:57:21 -08:00
Jeremy Kemper
d64e87edd6 Try to remotely troubleshoot bundler issue in CI 2009-11-04 11:50:52 -08:00
Manfred Stienstra
0e64eab6a2 Autoload Multibyte features. 2009-11-04 10:15:03 +01:00
Manfred Stienstra
da3a228a93 Make ActiveSupport::Chars#limit run on Ruby 1.9. 2009-11-04 10:14:49 +01:00
Manfred Stienstra
62a022891b Improve performance of Multibyte::Utils.
Replace explicit for-loops by faster enumeration methods.

[#3158 state:committed]
2009-11-04 10:12:06 +01:00
Manfred Stienstra
935bd0fef8 Add ActiveSupport::Multibyte::Chars#limit.
The limit method limits the number of bytes in a string. Useful when the
storage space of the string is limited, for instance in a database column
definition.

Sharpen up the implementation of translate offset.

[#3192 state:committed]
2009-11-04 10:12:03 +01:00
Jeremy Kemper
a3d5274e67 Configure generator when needed rather than during initialization 2009-11-03 18:58:40 -08:00
José Valim
d627c932bd Pass config.generators options along when RAILS_GENERATORS is set and show --force-plural message just once.
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-11-03 18:22:05 -08:00
Jeremy Kemper
e5211e3bd0 Improve Gemfile commentary 2009-11-03 16:36:19 -08:00
José Valim
3b8e29fe56 Remove --freeze (since Rails will come bundled in all new apps) and update gem action to change Gemfile instead of config.environment.
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-11-03 16:32:47 -08:00
José Valim
3fb548cac3 Ensure ActiveRecord is loaded on revoke/destroy.
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-11-03 16:32:47 -08:00
José Valim
e15b5eda2b Avoid duplicated names on help description and show proper error message if trying to load a Rails 2.x generator.
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-11-03 16:32:47 -08:00
Joshua Peek
f950d0b4af Fix simple resource named routes for new routing dsl 2009-11-03 11:23:22 -06:00
Jeremy Kemper
aaa5a692a3 Use spoofed version bump to ensure git is preferred 2009-11-03 00:25:15 -08:00
Jeremy Kemper
8ed82dfeb9 Force gemcutter source to ensure a consistent arel version 2009-11-02 20:26:44 -08:00
Jeremy Kemper
ca990b03cc Work around rebundling issue 2009-11-02 20:08:43 -08:00
José Valim
d226f17507 Ensure that generators can be invoked from any directory.
Signed-off-by: Engine Yard <engineyard@Engine-Yards-MacBook-Pro.local>
2009-11-02 18:20:16 -08:00
Matias Flores
2378085023 Fix chars.reverse for multibyte decomposed strings
[#597 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-11-02 17:57:55 -08:00
Jeremy Kemper
e93c2da141 Arel::In -> Arel::Predicates::In 2009-11-02 17:50:12 -08:00
Jeremy Kemper
36a9644b86 Clarify date/time dependencies 2009-11-02 17:50:12 -08:00
Jeremy Kemper
b540eca588 Consolidate Object#to_param and #to_query core extensions 2009-11-02 17:50:12 -08:00
Jeremy Kemper
8935854375 Ruby 1.9.2: rational.rb is deprecated 2009-11-02 17:50:12 -08:00
Jeremy Kemper
a2de13e1e0 Ruby 1.9.2: URI.escape is obsolete 2009-11-02 17:50:12 -08:00
Jeremy Kemper
36121d29a5 Ruby 1.9 doesn't recognize EM SPACE as whitespace, breaking String#strip 2009-11-02 17:50:12 -08:00
Jeremy Kemper
13004c37e6 Give useful test:isolated failures 2009-11-02 17:50:11 -08:00
José Valim
d002826e54 Merge branch 'master' of git://github.com/rails/rails 2009-11-02 23:46:00 -02:00
Yehuda Katz
14370e1aab CI breakage
This reverts commit a288b74f1c.
2009-11-02 17:12:01 -08:00
José Valim
976c264724 Extracted localized_cache.rb from ActionController, added it to AbstractController and made ActionMailer use it. 2009-11-01 02:23:49 +01:00
José Valim
a107103e85 Allow :instance_reader to be given to superclass_delegating_accessor as well. 2009-11-01 02:23:49 +01:00
José Valim
2aafdc8396 Use I18n on ActionMailer subjects by default. 2009-11-01 02:23:49 +01:00
José Valim
81c416b72e More refactoring on ActionMailer::Base. 2009-11-01 02:23:49 +01:00
José Valim
e9667ad1f0 Make tests run without deprecation warning (just one left). 2009-11-01 02:23:48 +01:00
José Valim
418c3f801c Another refactoring on AM. body is deprecated, use render instead. 2009-11-01 02:23:48 +01:00
José Valim
0396004861 Add some basic render_test to AbstractController. 2009-11-01 02:23:48 +01:00
José Valim
0cf16ddb88 Improve AbstractController layouts coverage. 2009-11-01 02:23:48 +01:00
José Valim
2d514e5352 Move some of helper tests to AbstractController. 2009-11-01 02:23:48 +01:00
José Valim
43d5504f0a Move all render and layout pieces required in ActionMailer from ActionController to AbstractController. 2009-11-01 02:23:48 +01:00
José Valim
684c2dc208 Remove ActionMailer helpers and rely on AbstractController one. 2009-11-01 02:23:48 +01:00
José Valim
a9751a7034 Refactor ActionMailer layout and remove legacy one. 2009-11-01 02:23:47 +01:00
Matthew Rudy Jacobs
f4f76772fb abstract all of the ActionMailer delivery methods into their own classes. thereby the following are equivalent
ActionMailer::Base.delivery_method = :smtp
  ActionMailer::Base.delivery_method = ActionMailer::DeliveryMethod::Smtp

we could equally set our own custom object
as long as it provides the instance method :perform_delivery(mail)

eg.

  class MySmsDeliveryMethod
    def perform_delivery(mail)
      Sms.send(mail['to'], mail['body'])
    end
  end

  MySmsMailer.delivery_method = MySmsDeliveryMethod.new

Signed-off-by: José Valim <jose.valim@gmail.com>
2009-11-01 02:23:47 +01:00
Tim Carey-Smith
3f56038612 Remove the random line at the beginning of every new log file 2009-10-29 08:05:41 +01:00
Yehuda Katz
51c24ae3e3 Caching refactoring 2009-10-29 00:44:12 -04:00
José Valim
a288b74f1c Generators should use Rails.root instead of Dir.pwd [#3408 status:resolved]
Signed-off-by: Yehuda Katz <wycats@gmail.com>
2009-10-28 16:54:38 -04:00
Yehuda Katz
8dcf91ca11 First pass at cleaning up action caching 2009-10-28 16:54:00 -04:00
José Valim
427a7385eb Make polymorphic_url work with symbols again and refactor it [#1384 status:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-10-28 14:13:48 -05:00
Yehuda Katz
f51ac9e780 Array.wrap(struct) needs to return the wrapped struct 2009-10-28 06:51:25 -07:00
Yehuda Katz
c9487ed6af Change Event#thread_id to #transaction_id. Defaults to one "transaction" per thread but you can explicitly declare the start of a new one. This makes it possible for each request to have it own id. 2009-10-28 01:58:33 -07:00
Yehuda Katz
03d3824d96 Make it possible to have IDs per request 2009-10-28 01:50:59 -07:00
Yehuda Katz
654b33afc5 New semantics eliminate the need for __send__ 2009-10-28 01:43:46 -07:00
Yehuda Katz
a0fc92f455 This is all that's needed in 1.8.7+ 2009-10-28 01:43:33 -07:00
Yehuda Katz
c5e73b8976 Reduce TextTemplate cost for simple cases 2009-10-28 00:13:08 -07:00
Yehuda Katz
0b2dd7afd9 Reorganize CSRF a bit 2009-10-28 00:12:35 -07:00
Yehuda Katz
cbcb947b00 AS::Notifications.subscribe blocks are now yielded the arguments to pass to AS::Notifications::Event.new 2009-10-27 21:04:53 -07:00
Phil Ross
9b67b7ba2f Edinburgh TimeZone references "Europe/London" instead of "Europe/Dublin" [#3310 state:resolved] 2009-10-27 21:13:13 -05:00
Geoff Buesing
057f0d3c16 Bundle Tzinfo 0.3.15 2009-10-27 21:13:13 -05:00
Geoff Buesing
37c9ec3add Tzinfo bundling task: unpack tzinfo with lib directory preserved 2009-10-27 21:13:12 -05:00
Yehuda Katz
86596975be Tests pass again 2009-10-27 19:05:47 -07:00
Joshua Peek
07da304ff8 Some more generation tests 2009-10-27 21:02:21 -05:00
Joshua Peek
43e0bc1c9f Extract routing controller stub helper into abstract unit 2009-10-27 21:02:20 -05:00
Joshua Peek
e296ea056e Enable named route tests 2009-10-27 21:02:20 -05:00
Joshua Peek
759f2ccc4c Start migrating AC routing tests into dispatch folder 2009-10-27 21:02:20 -05:00
Jeremy Kemper
c2a17217d0 Fix test failures due to requiring rails without AS in load path 2009-10-27 18:35:41 -07:00
Yehuda Katz + Carl Lerche
df95f16570 Update initializable 2009-10-27 17:01:33 -07:00
Yehuda Katz + Carl Lerche
da62a7c536 Duplicate AS code no longer needed 2009-10-27 17:01:33 -07:00
José Valim
c28a45ad8b Fix rake dev and update vendored Thor.
Signed-off-by: Yehuda Katz <wycats@gmail.com>
2009-10-27 16:46:19 -07:00
Jeremy Kemper
b30294b54a Fix broken tests 2009-10-27 09:34:17 -07:00
Yehuda Katz
c3fa20883e #include should be #extend 2009-10-27 09:21:01 -07:00
Yehuda Katz
b3a198041b Some optimizations on AS::Notifications. This does not change the public-facing API. 2009-10-27 09:15:41 -07:00
Yehuda Katz
4653719aa6 Clean up flash a bit 2009-10-27 09:15:41 -07:00
Jeremy Kemper
58555d0c8b Remove old per-component bundled environments first 2009-10-27 02:03:25 -07:00
Jeremy Kemper
b3012bbd16 Tweak CI for toplevel gem bundle 2009-10-27 01:55:27 -07:00
Yehuda Katz
df06e0bd86 Clean up flash a bit 2009-10-26 23:11:52 -07:00
Yehuda Katz
2bdd8fa863 Clean up parameter logging some 2009-10-26 21:31:37 -07:00
Yehuda Katz
000d593621 Clean up and update cookies 2009-10-26 18:01:09 -07:00
Yehuda Katz
e1786ee6eb Fixes expires_now and cleans things up a bit 2009-10-26 17:32:42 -07:00
Yehuda Katz
d7499f8ee8 Extract #head into its own module and simplify it 2009-10-26 17:13:43 -07:00
Yehuda Katz
60cc86136b Base setup for config object in AC. 2009-10-26 15:47:08 -07:00
Joshua Peek
55ae53baad Fix rake routes method name output [#3422 state:resolved] 2009-10-26 11:23:39 -05:00
Joshua Peek
6083a87d63 Splat calls to_a not to_ary [#3423 state:resolved] 2009-10-26 11:16:17 -05:00
Joshua Peek
a840c8afbf Restore rake routes [#3402 state:resolved] 2009-10-24 18:08:54 -05:00
Jeremy Kemper
a0049a6b42 Use rails/rack-mount 2009-10-22 20:13:46 -07:00
Carl Lerche
8a0f456443 Refactored railties' isolation tests to be able to run script/* scripts. 2009-10-21 15:46:22 -07:00
Joshua Peek
3e35d30c0c Always add actionpack/lib to load path for isolated tests 2009-10-21 11:32:31 -05:00
José Valim
9fbb2c571b Fix error_messages_for when instance variable names are given.
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-10-21 11:18:36 -05:00
José Valim
e714b499cc Move validator, human_name and human_attribute_name to ActiveModel, remove deprecated error messages and add i18n_scope and lookup_ancestors.
Signed-off-by: Carl Lerche <carllerche@mac.com>
2009-10-20 17:52:32 -07:00
Yehuda Katz + Carl Lerche
4f6d6f7031 Have all the tests running off a single Gemfile 2009-10-20 16:34:44 -07:00
Joshua Peek
a5c82a9dfb Start rewriting some internal tests to use the new routing dsl 2009-10-20 16:03:55 -05:00
Joshua Peek
207d0483e5 Run bundler before AM and AMo tests 2009-10-20 15:28:34 -05:00
Joshua Peek
a1ce52effc New routing dsl 2009-10-20 12:31:23 -05:00
Joshua Peek
df68cae0c0 Group together all the old routing dsl logic 2009-10-20 10:46:27 -05:00
Joshua Peek
35576a237e Add arel to AMo gemfile 2009-10-20 10:16:19 -05:00
Joshua Peek
a74022ecd3 Move Routing into AD 2009-10-20 10:14:46 -05:00
Joshua Peek
3895e2ccb3 Donate tests I wrote for rackmount rails integration 2009-10-20 09:52:59 -05:00
Joshua Peek
fa1926ddaa Exclude gem backtrace filter if rubygems is not loaded 2009-10-20 09:32:26 -05:00
Joshua Peek
80a3983b7b Add rackmount to railties gemspec 2009-10-20 09:27:37 -05:00
Joshua Peek
e994bf0c81 Add rackmount to actionmailer gemspec 2009-10-20 09:27:06 -05:00
Joshua Peek
a1df259074 Replace decaying routing internals w/ rack-mount 2009-10-19 23:32:17 -05:00
Jeremy Kemper
cbedcb0615 Missed cherry-pick from 2e37effd72 2009-10-19 21:03:37 -07:00
Jeremy Kemper
248d84f2e6 Simplify path expansions 2009-10-19 21:00:22 -07:00
Joshua Peek
6c581f5fd5 Kill routing tests expecting path to be unescaped. Most rack servers already escape PATH_INFO. 2009-10-19 22:42:11 -05:00
Joshua Peek
33258d713a Fix brittle query string comparisons 2009-10-19 22:42:11 -05:00
Jeremy Kemper
16d245e796 Missed Gemfile commits 2009-10-19 19:25:52 -07:00
Jeremy Kemper
4f6d8ceb04 Bundle for railties tests too 2009-10-19 19:22:23 -07:00
Jeremy Kemper
2767036392 Use bundled env for tests only 2009-10-19 19:00:48 -07:00
Jeremy Kemper
c9cd10c4fa Bundle arel for AR integration tests 2009-10-19 19:00:17 -07:00
Jeremy Kemper
418ce487c4 Only undef to_json if it's defined 2009-10-19 18:46:59 -07:00
Jeremy Kemper
acb1624f27 Merge commit 'josevalim/fixes'
Conflicts:
	railties/test/generators/app_generator_test.rb
2009-10-19 18:37:19 -07:00
Jeremy Kemper
7ab30599a6 Error message references application.rb instead of environment.rb 2009-10-19 18:33:57 -07:00
Jeremy Kemper
66c4f28bd6 Bump arel requirement to 0.1.1 2009-10-19 18:33:38 -07:00
Jeremy Kemper
4afe70790c Check for environment.rb 2009-10-19 18:12:29 -07:00
Jeremy Kemper
3072bf7555 Check for bundler environment or 2.x-style vendor/rails + rubygems 2009-10-19 18:10:14 -07:00
Jeremy Kemper
a49c3b0365 Merge branch 'master' of github.com:rails/rails 2009-10-19 12:33:36 -07:00
Pratik Naik
1ac5cf4788 Make sure boot.rb requires rubygems only when needed 2009-10-19 15:06:54 -02:00
Mike Gunderloy
77bb129fdb Fix bad assumption in BacktraceCleaner test [#3249 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-10-18 17:17:09 -02:00
Joshua Peek
51e1260b18 Rails info tests needs use_controllers 2009-10-18 11:13:57 -05:00
Joshua Peek
91726c201b Relax generation requirements and only enforce the requirements used in the path segment 2009-10-18 11:05:24 -05:00
Joshua Peek
01e04a446c Use Rails.root in railties tests 2009-10-18 10:53:43 -05:00
Joshua Peek
f74e04c21d RAILS_GEM_VERSION is obsolete 2009-10-18 10:44:05 -05:00
Joshua Peek
3ccaabc6c6 Need to use "use_controllers" for nonexistent controller in AM test 2009-10-18 10:39:21 -05:00
Eric Chapweske
2831996483 Fixed: #without_typecast should only disable typecasting on the duplicated attributes [#3387 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-10-18 10:22:22 -05:00
Joshua Peek
6873b1d658 Don't use use_controllers in routing tests 2009-10-18 00:26:36 -05:00
Joshua Peek
2c3ca9ae80 This is routing error message test is tightly coupled to the implementation. Just test that it raises an exception. 2009-10-17 21:56:43 -05:00
Joshua Peek
f1767c1513 Drop legacy support for case insensitive controller recognition 2009-10-17 21:21:34 -05:00
Joshua Peek
cc0103fe83 Fix brittle query string comparisons 2009-10-17 19:18:18 -05:00
Joshua Peek
e900a8437a Fix brittle query string comparisons 2009-10-17 17:35:21 -05:00
Joshua Peek
702df0d238 Fix standalone run of routing test. Only reference controllers that are provided in fake_controllers 2009-10-17 17:35:21 -05:00
Joshua Peek
6c2a73909e Stop using with_controllers in tests 2009-10-17 17:35:20 -05:00
Joshua Peek
e00f57e208 No longer need this special routing exception message because these kinds of ambiguous generations are deprecated 2009-10-17 17:35:20 -05:00
Joshua Peek
20f0b33035 Drop support for routing :generate_all 2009-10-17 17:35:20 -05:00
Joshua Peek
d50413826f Invalid route requirements should always raise an exception even if they are unused 2009-10-17 17:35:19 -05:00
Carl Lerche
d0f4d93df8 Remove some remnants of config.gem 2009-10-17 14:38:40 -07:00
José Valim
1f9d234a6b By default use ActiveModel API in controller generators, unless otherwise specified [#3123 status:resolved] 2009-10-17 15:56:44 -03:00
José Valim
03c5a0e5c4 Make app generatoor specs green once again. 2009-10-17 15:54:58 -03:00
Eric Chapweske
f936a1f100 Refactoring attributes/types [#3348 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-10-17 12:37:15 -05:00
José Valim
cb87302689 Bring agnosticism to error_messages_for. 2009-10-17 13:03:28 -03:00
José Valim
2e37effd72 Unify class_inheritable_accessor and extlib_inheritable_accessor and allow responder to be set in the class level. 2009-10-17 12:54:03 -03:00
Joshua Peek
e13d232150 Add stub for configuring your package manager 2009-10-16 20:57:46 -05:00
Carl Lerche
e1fdc8bba3 Remove config.gem in favor of using the bundler. This makes config/boot.rb obsolete.
The bundler library is at: http://github.com/wycats/bundler/ and is a rubygem.
2009-10-16 18:10:52 -07:00
Joshua Peek
29ba9c0307 Use Rails.root in statistics rake task 2009-10-16 19:40:59 -05:00
Joshua Peek
7593e8b8b5 Rakefile doesn't need initializers to be ran 2009-10-16 19:40:08 -05:00
Jeremy Kemper
028911ad00 Use rails/rack 2009-10-16 17:39:12 -07:00
Joshua Peek
c7bf1058d3 Fix incorrect path in script/runner template 2009-10-16 19:33:25 -05:00
Joshua Peek
f1640a1653 script/runner should require environment 2009-10-16 19:33:25 -05:00
Joshua Peek
8f2d8f4528 script/performance/profiler should require environment 2009-10-16 19:33:24 -05:00
Joshua Peek
2f7217c76a script/performance/benchmarker should require environment 2009-10-16 19:33:24 -05:00
Joshua Peek
7635c9f4c0 script/generate should require environment 2009-10-16 19:33:24 -05:00
Yehuda Katz
7e9e370e03 Make encodings work with Erubis and 1.9 again 2009-10-16 17:28:44 -07:00
Joshua Peek
a22394295c Ignore log folder created by tests 2009-10-16 19:25:21 -05:00
Joshua Peek
c40f79f330 script/about should require environment 2009-10-16 19:24:19 -05:00
Joshua Peek
4cebd41d9e Fix Rails root in sqlite adapter 2009-10-16 19:08:09 -05:00
Joshua Peek
c1261b5484 Use Rails.application where we want a valid rack app 2009-10-16 19:04:28 -05:00
Joshua Peek
d859402696 Use Rails.initialize! where we just want to run the initializers and aren't concerned about the config 2009-10-16 18:58:35 -05:00
Joshua Peek
92bfc693f2 Rackup file should require environment 2009-10-16 18:46:34 -05:00
Joshua Peek
3971d972c3 Expand paths in i18n initializer tests 2009-10-16 18:42:55 -05:00
Carl Lerche
c296b33ef1 Make the railties tests pass 2009-10-16 16:31:05 -07:00
Carl Lerche
591eaf3b2c Get apps generated with working again. 2009-10-16 16:03:14 -07:00
Joshua Peek
2ca93403a2 Ruby 1.9: qualify toplevel File reference since config.ru could be eval'd in a different scope
Restores accidentally-reverted commit.
2009-10-16 14:21:27 -07:00
Carl Lerche
2110a524a4 Deprecate RAILS_ROOT in favor of Rails.root (which proxies to the application's object root) 2009-10-16 12:51:02 -07:00
Joshua Peek
6094e65169 We won't be publishing tars and zips anymore 2009-10-16 13:56:59 -05:00
Yehuda Katz
a565c19c5b Fix a bug where templates with locales were not being sorted correctly 2009-10-16 11:26:19 -07:00
Nick Sieger
471a394215 Modify connection pool callbacks to be compatible w/ new style
Signed-off-by: Yehuda Katz <wycats@gmail.com>
2009-10-16 10:34:52 -07:00
Jeremy Kemper
b0f55dc1f8 Remove framework subscriber tests which depends on AR, which isn't loaded 2009-10-15 21:51:24 -07:00
José Valim
9ba83cce03 Merge branch 'master' of git://github.com/rails/rails 2009-10-16 01:08:18 -03:00
Jeremy Kemper
ef75d05829 Get rid of stray require again 2009-10-15 17:39:19 -07:00
Jeremy Kemper
71f7e75d95 Merge branch 'master' into orchestra 2009-10-15 17:36:54 -07:00
Yehuda Katz
ef70ad5538 Fix a few more 1.9 bugs. Rack 1.0.1 is required for 1.9 compliance but not release, so bundling 1.0.1 from git 2009-10-15 17:16:42 -07:00
Yehuda Katz
c44d560145 Rack responses need to wrap Strings in 1.9 2009-10-15 16:37:27 -07:00
Yehuda Katz
e9d6bcd19f Update MetalTest for constant scoping change in 1.9 2009-10-15 16:33:47 -07:00
Yehuda Katz
4869b74aee Fix test to correctly handle 1.9 Array#to_s behavior 2009-10-15 16:27:26 -07:00
Yehuda Katz
b71f83c9cc Work around apparent bug in 1.9 2009-10-15 16:03:30 -07:00
Carl Lerche
97296b11e2 Have config/application.rb contain the application definition and require that file instead of config/boot.rb or config/environment.rb in script/*. 2009-10-15 14:54:12 -07:00
José Valim
2d7abe245e Renamed Orchestra to Notifications once again [#3321 state:resolved] 2009-10-15 18:51:51 -03:00
Yehuda Katz
e1490d4e4c Change config implementation in AV slightly 2009-10-15 14:41:59 -07:00
José Valim
5988b87c30 Added parent_of? method to help tracing events. 2009-10-15 18:19:25 -03:00
José Valim
11f9f556b8 Make Orchestra specs run on isolation. 2009-10-15 18:19:25 -03:00
José Valim
a15e02d44a Unify benchmark APIs. 2009-10-15 18:19:25 -03:00
José Valim
aeaabc6d2d Configure Orchestra on initialization. 2009-10-15 18:19:25 -03:00
José Valim
8f59d7a8d8 Instrument cache store events only if required. 2009-10-15 18:19:24 -03:00
José Valim
af0d1fa892 Update Orchestra instrumentations and move part of logging to Orchestra. 2009-10-15 18:18:44 -03:00
José Valim
5d0f8abc00 Orchestra listeners have their own queue. 2009-10-15 18:18:44 -03:00
José Valim
7b7796e23d Events are created inside threads. 2009-10-15 18:18:44 -03:00
José Valim
7b5225a529 Abstract publishing, subscribing and instrumenting in Orchestra. 2009-10-15 18:18:43 -03:00
José Valim
a60bdd7d29 Added queue abstraction to Orchestra. 2009-10-15 18:18:43 -03:00
José Valim
8b340ab2f6 Revert "Rename Orchestra to Notifications [#3321 state:resolved]"
This reverts commit 8cbf825425.
2009-10-15 18:06:15 -03:00
Yehuda Katz
02b76862e1 Bundle AMo 2009-10-15 14:04:18 -07:00
Yehuda Katz
cb8b0f4a5a Make this less brittle and work on 1.8 2009-10-15 13:35:22 -07:00
Jeremy Kemper
428c0bd4ba Kill rake bundle 2009-10-15 00:29:21 -07:00
Jeremy Kemper
d5de94d6b7 Fix AM tests by configuring AV 2009-10-15 00:22:15 -07:00
Jeremy Kemper
deafa10e6c AP tests depend on AR 2009-10-15 00:22:15 -07:00
Michael Koziarski
b1201792a7 Make the erubis implementation easier for plugins to change. 2009-10-15 17:54:01 +13:00
Michael Koziarski
cc1ad46ead Add a read-only method which plugin authors can use to determine if xss escaping.
This doesn't provide a way to turn off the escaping, but alternative template engine authors
can figure out what their default should be by calling this.  Avoids a messy version + plugin check.
2009-10-15 17:22:50 +13:00
Jeremy Kemper
4484f0bccf Don't push siblings on load path if using bundled env 2009-10-14 20:59:45 -07:00
Jeremy Kemper
5b8e6279ac AV expects options[:locals] to be a Hash 2009-10-14 20:59:33 -07:00
Jeremy Kemper
e19ab99134 CI bundles Active Record dependencies before running (pulls in Arel) 2009-10-14 19:36:55 -07:00
Jeremy Kemper
c09a5ffea7 Merge branch 'arel' 2009-10-14 19:32:09 -07:00
Jeremy Kemper
6eee1dd62c Clarify AR dependency 2009-10-14 19:31:29 -07:00
Jeremy Kemper
6be5f45019 Fix env path 2009-10-14 19:30:06 -07:00
Jeremy Kemper
9c52f96acb Include bundled env in toplevel require, if present 2009-10-14 19:15:33 -07:00
Jeremy Kemper
df55781458 No more toplevel arel sibling 2009-10-14 19:05:06 -07:00
Jeremy Kemper
a9f9ae385e Explicitly require logger 2009-10-14 18:03:07 -07:00
Joshua Peek
bc1a18d7bd Punt on ConcurrentHash [#3322 state:resolved] 2009-10-14 19:53:52 -05:00
Joshua Peek
8cbf825425 Rename Orchestra to Notifications [#3321 state:resolved] 2009-10-14 19:50:36 -05:00
Jeremy Kemper
5ad0e315e4 Merge branch 'master' into arel 2009-10-14 17:24:17 -07:00
Jeremy Kemper
4cbd3f050b Move from git submodule to gem bundle 2009-10-14 17:19:24 -07:00
Carl Lerche
bf9819f73d Have Rails.root be based off of config.ru 2009-10-14 16:40:25 -07:00
Jeremy Kemper
00eb09e016 Revert "Get AS TestCase off deprecated callbacks"
This reverts commit 29b280666b.
2009-10-14 16:12:57 -07:00
Jeremy Kemper
efdc062454 Revert "Rewrite AS::TestCase setup/teardown as a single callback chain"
This reverts commit 610e94c097.
2009-10-14 16:12:57 -07:00
Michael Koziarski
d5d242660c Avoid warning spam by flipping to the new callbacks mechanism. These callbacks are actually never called by rails itself, merely there for plugins 2009-10-15 11:21:53 +13:00
George Ogata
3de8b44b26 Make IntegrationTest::Runner propagate method_missing to ancestors.
Fixes RSpec integration example groups, which mixes its Matchers
module into ActiveSupport::TestCase.

Signed-off-by: Michael Koziarski <michael@koziarski.com>
2009-10-15 11:01:42 +13:00
Craig Smith
316f4704ea Test cases should see all the cookies, not just cookies that have been set in the controller.
Previously this example would always pass, even when cookies.delete was not called.

@request.cookies['foo'] = 'bar'
get :delete_cookie
assert_nil cookies['foo']

Signed-off-by: Michael Koziarski <michael@koziarski.com>
[#2768 state:committed]
2009-10-15 10:58:55 +13:00
Jacob Lauemoeller
fc46c9b220 Added CDATA support to the XmlMini LibXML engine, adjusted whitespace handling to closer match that of the REXML engine, and added a LibXML engine test
Signed-off-by: Michael Koziarski <michael@koziarski.com>
2009-10-15 10:54:30 +13:00
Jeremy Kemper
3fa7e2fc98 Revert "Missing requires"
These rely on constant autoloads.

This reverts commit d39f397dc6.
2009-10-14 14:48:43 -07:00
Jeremy Kemper
3e62503903 Fix tests 2009-10-14 14:47:11 -07:00
Michael Koziarski
d39f397dc6 Missing requires 2009-10-15 10:42:18 +13:00
pivotal
945d999aad Digest auth option for ActiveResource.
Signed-off-by: Michael Koziarski <michael@koziarski.com>
2009-10-15 10:37:04 +13:00
Michael Koziarski
1d01bad3ce Make sure non-escaped urls aren't considered safe 2009-10-15 09:58:35 +13:00
Michael Koziarski
5d5e34fa52 Use ERB::Util.h over CGI.escapeHTML as the former is safety aware and the latter isn't 2009-10-15 09:58:17 +13:00
Phil Darnowsky
1b3195b63c ActionView.url_for doesn't escape by default
ActionView::Helpers::UrlHelper#url_for used to escape the URLs it generated by
default.  This was most commonly seen when generating a path with multiple
query parameters, e.g.

  url_for(:controller => :foo, :action => :bar, :this => 123, :that => 456)

would return

  http://example.com/foo/bar?that=456&amp;this=123

escaping an ampersand that shouldn't be escaped.  This is both wrong and
inconsistent with the behavior of ActionController#url_for, and is changed.

Signed-off-by: Michael Koziarski <michael@koziarski.com>
2009-10-15 09:49:07 +13:00
Yehuda Katz
a41c6c35ca Start adding configuration to ActionView instead of using constants.
By using config rather than hardcoded constants, we can evolve the
  configuration system over time (we'd just need to update the config
  method with more robust capabilities and all consumers would get
  the capabilities with no code changes)
2009-10-14 13:36:41 -07:00
Jeffrey Hardy
a8dc9fd27b CookieJar#delete should return the key's value, consistent with a Hash
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-10-14 11:50:51 -07:00
Carl Lerche
ff8be66f24 Finish porting over the initializers to the app object and fix all the tests 2009-10-14 11:47:37 -07:00
Yehuda Katz + Carl Lerche
5ffb877d3a Add Gemfile to the rails application generator 2009-10-14 11:18:45 -07:00
Yehuda Katz + Carl Lerche
d56984c016 Make rails configuration's path object's root lazy 2009-10-14 11:18:45 -07:00
Emilio Tagua
5da109d105 Merge commit 'rails/master' 2009-10-14 09:50:23 -03:00
Joshua Peek
7ec947d59c Refactor AS concern to avoid hacking the "include" method.
Ruby Magic!
2009-10-13 23:32:32 -05:00
Joshua Peek
7b169ed1bb Extend Callbacks and Rescuable with AS concern 2009-10-13 23:30:06 -05:00
Emilio Tagua
06ad817f92 Use ActiveSupport::Callbacks instead of
ActiveSupport::DeprecatedCallbacks.
2009-10-13 15:15:00 -03:00
Emilio Tagua
991d1bc200 Merge commit 'rails/master' 2009-10-13 15:06:43 -03:00
Yehuda Katz
9cd50e7752 Make logger work again (h/t Sam Ruby) 2009-10-13 10:43:28 -07:00
Joshua Peek
610e94c097 Rewrite AS::TestCase setup/teardown as a single callback chain 2009-10-12 23:23:02 -05:00
Joshua Peek
29b280666b Get AS TestCase off deprecated callbacks 2009-10-12 23:03:02 -05:00
Joshua Peek
4552dabba7 Add erubis gem to ci 2009-10-12 22:23:29 -05:00
Joshua Peek
eff61fcfa8 Insert a deprecation warn notice when using AS::DeprecatedCallbacks.
We are still using DeprecatedCallbacks in AS and AR. This is meant to annoy the
shit out of Rails core until we fix it.
2009-10-12 22:18:41 -05:00
Joshua Peek
21e7b84621 Callbacks, DeprecatedCallbacks = NewCallbacks, Callbacks 2009-10-12 22:15:43 -05:00
Joshua Peek
9bc8defe38 Use "run_callbacks :foo" since it is the public api for callbacks [#3329
state:resolved]
2009-10-12 21:58:49 -05:00
Joshua Peek
2a5c92c101 Kill unused SafelyMemoizable [#3323 state:resolved] 2009-10-12 21:44:30 -05:00
Jeremy Kemper
cbb70c896c Bundle with system gem sources rather than gems.rubyforge.org default 2009-10-11 12:35:01 -07:00
Jeremy Kemper
7b8f9d254a Fix generators load paths 2009-10-11 12:35:01 -07:00
José Valim
0cd7d4d8cf Fix rake dev.
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-10-11 12:35:01 -07:00
Joshua Peek
8b46c50eac Kill mock routing assertion that tests router implementation 2009-10-10 21:30:51 -05:00
Joshua Peek
e61bc8e29f Fix failing safe buffer test. We don't patch CGI.escapeHTML, only ERB:Util. 2009-10-10 21:30:51 -05:00
Joshua Peek
1610cd0827 Move safe buffer into test/template 2009-10-10 21:30:51 -05:00
Joshua Peek
21be1dcffa Relative url generations are covered more thoroughly by url rewriter tests 2009-10-10 21:30:50 -05:00
Joshua Peek
673f73b538 Add define another "stuff" controller to support routing tests 2009-10-10 21:30:50 -05:00
Joshua Peek
5d071b4bc2 Drop implementation specific routing test assertions 2009-10-10 21:30:50 -05:00
Joshua Peek
7bc5e3bd02 Add define a "stuff" controller in fixtures to support routing tests 2009-10-10 21:30:50 -05:00
Yehuda Katz
b9ce8216fa Fix a bug where render :text could not handle yield :symbol. Fixes guides generation 2009-10-10 00:31:12 -10:00
Jeremy Kemper
6395c7bed2 Mark html safety 2009-10-09 18:36:58 -07:00
Jeremy Kemper
ed139730ff Uses fileutils 2009-10-09 18:31:30 -07:00
Jeremy Kemper
c23d28e2b3 To unmarshal MissingSourceFile from child 2009-10-09 18:31:30 -07:00
Pratik Naik
68d416a58f Add a :limit option to specify the maximum number of records that can be processed by accepts_nested_attributes_for 2009-10-09 16:08:11 +01:00
Pratik Naik
e94caf0788 Store entire options hash in the class var rather than just the reject_if proc for the nested attributes 2009-10-09 15:47:10 +01:00
Pratik Naik
987d501182 Mute log info coming from the local_cache strategy 2009-10-09 15:03:18 +01:00
Yehuda Katz
16a48a95e3 Fix issue with standalone ActionView 2009-10-09 00:55:00 -10:00
Yehuda Katz
2954cf1369 Avoid super in define_method for Rubinius 2009-10-09 00:54:12 -10:00
Yehuda Katz
ee37ff46e9 Get rid of constant name usage for stack trace help in favor of overriding #inspect and .name. 2009-10-09 00:53:48 -10:00
Pratik Naik
69aa5e8a86 Ensure MessageVerifier raises appropriate exception on tampered data 2009-10-09 02:26:18 +01:00
Carl Lerche
992c2db76c Finish porting over the initializers to the app object and fix all the tests 2009-10-08 18:12:28 -07:00
Carl Lerche
5c42157cd8 Even more initializers ported over 2009-10-08 15:30:17 -07:00
Carl Lerche
ed77e84c4b Ported over more initializers 2009-10-08 15:08:08 -07:00
Carl Lerche
7faa52a424 Add a test that ensures that Rails::Initializable can be used with modules 2009-10-08 12:31:09 -07:00
Carl Lerche
feb04bf897 Move the ensure_tmp_directories_exist initializer to the application object 2009-10-08 12:31:09 -07:00
Carl Lerche
e4d7e5090c Moving more initializers into the application object 2009-10-08 12:31:09 -07:00
Carl Lerche
6d6ae0841c Start moving the initializers into the application object 2009-10-08 12:31:09 -07:00
Carl Lerche
d096589245 Remove the old initializer file. 2009-10-08 12:31:09 -07:00
Joshua Peek
3b6bdfc105 API change: content_tag_for outputs prefixed class name 2009-10-08 14:13:49 -05:00
Emilio Tagua
0cf4662ec5 Merge commit 'rails/master' 2009-10-08 15:05:18 -03:00
Emilio Tagua
c3f9d51a00 Updated ARel commit version. 2009-10-08 15:04:27 -03:00
Carl Lerche
665c7ad29d Fix warning spew for 1.9 2009-10-08 10:58:04 -07:00
Chad Woolley
6e7b02b21a Fix for Ruby 1.9 - define_method throws an exception under 1.9 if given incorrect number of args
Signed-off-by: Carl Lerche <carllerche@mac.com>
2009-10-08 10:48:47 -07:00
Chad Woolley
32cea98c3b Ruby 1.9: Fix ActiveResource::ConnectionError#to_s when @response does not respond to #code or #message
Signed-off-by: Carl Lerche <carllerche@mac.com>
2009-10-08 10:45:00 -07:00
Michael Koziarski
28bd0873ff Don't need h in there now that XSS protection is on by default 2009-10-08 14:34:15 +13:00
Pratik Naik
0c27d0886e Use indifferent access attributes instead of stringifying them 2009-10-08 00:15:36 +01:00
Michael Koziarski
c352ec060c error procs have to be safe too 2009-10-08 12:13:48 +13:00
Pratik Naik
572323135f Allow accepts_nested_attributes_for :reject_if option accept symbols for using a method
Conflicts:

	activerecord/lib/active_record/nested_attributes.rb
2009-10-07 23:50:30 +01:00
Michael Koziarski
9415935902 Switch to on-by-default XSS escaping for rails.
This consists of:

  * String#html_safe! a method to mark a string as 'safe'
  * ActionView::SafeBuffer a string subclass which escapes anything unsafe which is concatenated to it
  * Calls to String#html_safe! throughout the rails helpers
  * a 'raw' helper which lets you concatenate trusted HTML from non-safety-aware sources (e.g. presantized strings in the DB)
  * New ERB implementation based on erubis which uses a SafeBuffer instead of a String

Hat tip to Django for the inspiration.
2009-10-08 09:31:20 +13:00
José Valim
f27e7ebc0e Do not ignore .empty_directory files.
Signed-off-by: Carl Lerche <carllerche@mac.com>
2009-10-07 11:00:17 -07:00
Emilio Tagua
9a958a3d7d Relations: Added offset when finding with associations. Delegate array instance
methods to to_a.
2009-10-07 12:43:04 -03:00
Emilio Tagua
aadb09b13b Merge commit 'rails/master' 2009-10-07 12:23:23 -03:00
Emilio Tagua
f13a7bf4e1 Don't send table_name when updating attributes, use the class arel_table. 2009-10-07 12:21:52 -03:00
Emilio Tagua
942d4b2e4f Don't send table_name when there's no need to. 2009-10-07 12:17:51 -03:00
Emilio Tagua
1d5854826b Allow preload and eager_load to work on relations at the same time. 2009-10-07 11:57:59 -03:00
Joshua Peek
ff56f3d5e1 Rewrite ActiveModel::Lint as a simple TU mixin 2009-10-07 09:24:51 -05:00
Sam Pohlenz
4df96338ed Fixed behavior of attribute_methods_generated? [#3220 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-10-07 09:07:39 -05:00
Sam Pohlenz
f8e91bda9c Don't share attribute matchers between classes [#3216 state:resolved]
Allows separate models that include ActiveModel::AttributeMethods to
use different sets of attribute matchers.

Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-10-07 09:07:39 -05:00
Yehuda Katz
3916f0340e Not calling a private method anymore 2009-10-07 00:33:13 -10:00
Yehuda Katz
e57197a967 Fix warning spew 2009-10-06 22:36:14 -10:00
Paul Gillard
6361d4234c Call initialize_copy when cloning [#3164 state:resolved]
Cloned AR objects are now instantiated through initialize_copy rather than
new/initialize. This allows AR classes to override initialize_copy in order to
implement deep cloning.

Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-10-06 16:25:51 -05:00
Emilio Tagua
c3b4da7796 Merge commit 'rails/master' 2009-10-06 16:17:02 -03:00
Michael Koziarski
126f623711 don't ignore all bin directories 2009-10-06 15:53:25 +13:00
Jeffrey Hardy
9212138ad0 MessageVerifier#verify raises InvalidSignature if the signature is blank
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-10-05 13:38:26 -07:00
Joshua Peek
b480da5cd6 Coerce all out going body parts to Strings 2009-10-05 13:58:43 -05:00
Emilio Tagua
97aba353c8 Merge commit 'rails/master' 2009-10-05 15:33:59 -03:00
Emilio Tagua
23c168a4fd Initial documentation to Base#all. 2009-10-05 15:27:40 -03:00
Emilio Tagua
1daceeb838 Merge branch 'associations_2' 2009-10-05 15:25:06 -03:00
Emilio Tagua
65f055a3ed Added eager loading support to Relation and ActiveRecord#all. 2009-10-05 15:24:08 -03:00
Emilio Tagua
3747f896a1 Moved relation's test to relation_test. 2009-10-05 14:39:20 -03:00
Joshua Peek
570f055c44 Yank FCGI Handler from core
http://github.com/rails/fcgi_handler
2009-10-05 11:16:24 -05:00
Joshua Peek
20d6938453 Rewrite FCGI handler test 2009-10-05 10:36:05 -05:00
Joshua Peek
7de5f69cc6 Try to load lib before trying to activate the gem for testing 2009-10-05 10:01:46 -05:00
Joshua Peek
444ba150bd Put test in place for deprecated dispatcher 2009-10-05 09:42:35 -05:00
Joshua Peek
635aa91224 More robust console test 2009-10-05 09:41:08 -05:00
Emilio Tagua
9a71b6d29d Merge commit 'rails/master' 2009-10-05 11:30:18 -03:00
Joshua Peek
76d823677f Revert "Revert "Fix Dispatch.new so passenger works" as it broke the build"
This reverts commit 49b52cadc2.
2009-10-05 09:17:51 -05:00
Michael Koziarski
49b52cadc2 Revert "Fix Dispatch.new so passenger works" as it broke the build
This reverts commit c97c31b096.
2009-10-05 17:23:37 +13:00
Joshua Peek
c97c31b096 Fix Dispatch.new so passenger works 2009-10-04 12:45:53 -05:00
Joshua Peek
86d0590022 Only draw default route once 2009-10-03 23:55:35 -05:00
Joshua Peek
86ed58d912 Use with_routing helper in tests instead of modifying global route set 2009-10-03 23:31:38 -05:00
Joshua Peek
61411f2aeb Redraw default routes on all internal integration tests. We don't need SimpleRouteCase anymore 2009-10-03 23:18:32 -05:00
Joshua Peek
8287a112c9 Avoid creating new controller constants during test runtime. All routable controllers should be defined beforehand. 2009-10-03 23:03:08 -05:00
Joshua Peek
2a938ad5e7 Run AP isolated tests on CI 2009-10-03 22:14:58 -05:00
Joshua Peek
f5cba5e6b1 Moved shared form helper models into fake_models 2009-10-03 22:14:50 -05:00
Joshua Peek
31319b471b NumberHelper depends on big decimal extensions 2009-10-03 22:06:25 -05:00
Joshua Peek
7eaed071a2 Changing directories during the test breaks file loading when ran by itself 2009-10-03 22:02:51 -05:00
Joshua Peek
660eb068d3 Don't load rubygems for isolated tests 2009-10-03 21:51:34 -05:00
Joshua Peek
75a2f00c97 Move improved isolated test runner to AP 2009-10-03 21:33:06 -05:00
Joshua Peek
018b79dd36 File extra test folders into controller, dispatch, or template 2009-10-03 21:05:51 -05:00
Joshua Peek
84e94551f6 Add custom "with_routing" to internal tests to fix reseting session after using
with_routing. This only affects our internal AP tests.
2009-10-03 20:45:49 -05:00
Emilio Tagua
61c959ab0d Merge commit 'rails/master' 2009-10-03 18:23:06 -03:00
Joshua Peek
89630a7c2c Cleanup whitespace introduced in 8377646 and f4f6888 2009-10-02 10:19:30 -05:00
Taryn East
8377646d68 add indifferent access to the attributes
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-10-02 10:13:40 -05:00
Taryn East
f4f68885ef update_attribute(s) added to Active Resource
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-10-02 10:13:01 -05:00
Emilio Tagua
29457a21c0 Merge commit 'rails/master' 2009-10-02 10:52:55 -03:00
Carl Lerche
420004e030 Initialize a new instance of Rails.application during integration tests
This is to fix the AWDWR tests until the application object is refactored to be a singleton.
2009-09-30 12:39:26 -07:00
Carl Lerche
2370e87ae0 Remove all calls to Rails::Initializer from boot.rb
This is starting a refactor of the rails initialization process. The boot.rb file will not remain the same.
2009-09-30 12:05:34 -07:00
Carl Lerche
34aae6d739 Remove a duplicate initializer 2009-09-29 17:46:33 -07:00
Carl Lerche
c9d4529c9d Change Rails::Application to a class that is inherited from.
This is still very experimental.
2009-09-29 17:33:17 -07:00
Carl Lerche
d1a63b15e3 Remove unneeded files from the railties test directory 2009-09-29 16:12:45 -07:00
Carl Lerche
6b086449be Fix the broken railties isolation tests 2009-09-29 16:07:29 -07:00
Yehuda Katz + Carl Lerche
6f6a589d4b Create the application object from config/environment.rb
This is preliminary and not necessarily reflective of the
  full plan.
2009-09-28 18:00:26 -07:00
Erik Ostrom
8ffc2e3b8d Ported the new ActionView::TestCase from 2-3-stable to master [#3260
state:resolved]

The test case now mimicks the template environment more closely, so it's
possible to use render, load helper dependencies.

This also fixes assert_select, and similar assertions. Because view tests
and helpers generally don't render full templates assert_select looks
first in rendered and then in output_buffer to find the rendered output.

Additional `master'-only changes: Made the Action Pack Rakefile run the
ActionView::TestCase tests, and made ActionView::Rendering#_render_text
always return a string.

Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-09-28 13:31:30 -05:00
Mike Gunderloy
1696039f29 Remove SQLite2 from CI setup
Signed-off-by: Michael Koziarski <michael@koziarski.com>
2009-09-28 14:51:40 +13:00
Luciano G Panaro
4168f87623 Make has_one with :conditions hash scope build or creation of the associated object with those conditions
Signed-off-by: Michael Koziarski <michael@koziarski.com>
[#3088 state:committed]
2009-09-28 14:50:33 +13:00
Jay Pignata
d48ebeade2 Escaping symbol passed into Memoizable's flush_cache for query methods to allow them to be cleared
Signed-off-by: Michael Koziarski <michael@koziarski.com>

[#3138 state:committed]
2009-09-28 14:48:13 +13:00
John Trupiano
e01f99786a Allow PKG_NAME env variable to control the directory name used when 'rake dev' is used to generate a new rails app.
Signed-off-by: Michael Koziarski <michael@koziarski.com>
[#3278 state:committed]
2009-09-28 14:41:17 +13:00
Matias Flores
173ee14c3d Prefer tap to returning
Signed-off-by: Michael Koziarski <michael@koziarski.com>
[#3280 state:committed]
2009-09-28 14:38:24 +13:00
John Trupiano
c9318e9010 Introduce :almost keyword for distance_of_time_in_words. Make 1.75 days - 2 days return '2 days'.
Signed-off-by: Michael Koziarski <michael@koziarski.com>
[#3266 state:committed]
2009-09-28 14:37:31 +13:00
Jay Pignata
8ef1cd9733 Enhancing distance_of_time_in_words to prefix year output with over and about depending upon how many months have elapsed
Signed-off-by: Michael Koziarski <michael@koziarski.com>
[#3106 state:committed]
2009-09-28 14:36:38 +13:00
Joshua Peek
a6757a02e1 Move middleware and route configuration from AC::Dispatcher to Rails application object 2009-09-26 21:59:28 -05:00
Joshua Peek
14866fa3d8 Allow setting a default application for all integration tests 2009-09-26 21:38:48 -05:00
Joshua Peek
b0506b086f Create separate middleware stack for initializer 2009-09-26 21:07:49 -05:00
Joshua Peek
acfeec5151 Allow integration test rack app to be set with "@app" ivar instead of using open_session 2009-09-26 20:51:05 -05:00
Joshua Peek
02413baabb Fix skipping memcache tests if a memcache server isn't running 2009-09-26 20:02:47 -05:00
Joshua Peek
198081a639 Remove deprecated calls to Dispatcher.to_prepare 2009-09-26 19:57:36 -05:00
Joshua Peek
1f72700575 Move default middleware stack into initializer 2009-09-26 13:41:32 -05:00
Joshua Peek
71b33ec482 AC::Dispatcher is the default app, don't need to set it 2009-09-26 13:02:34 -05:00
Joshua Peek
0c638b3406 Clean up session integration tests so they don't reference AC::Dispatcher 2009-09-26 12:56:53 -05:00
Joshua Peek
db65bb5a31 Pull middleware for Rails info from the initializer instead of ActionController 2009-09-26 12:41:17 -05:00
Chad Woolley
438ff3b5b9 include nokogiri gem, so activesupport nokogiri tests run
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-09-26 12:23:30 -05:00
Joshua Peek
15cffe6fbc ruby 1.9: Qualify toplevel File reference since config.ru could be eval'd in a different scope 2009-09-26 11:52:37 -05:00
Joshua Peek
ef58194129 Move Rails::Static into ActionDispatch 2009-09-26 11:37:42 -05:00
Joshua Peek
dbb32115ef Enable static asset server by default 2009-09-26 11:24:56 -05:00
Joshua Peek
79a4d505fa Add gem filter for default gem path since it maybe different than the set of gem paths 2009-09-26 11:04:08 -05:00
Joshua Peek
5eeed9f00a Move tmp directory creation from server to initializer 2009-09-26 10:56:36 -05:00
Joshua Peek
c83c0f6936 Remove config.ru generation from --with-dispatchers option 2009-09-25 23:15:49 -05:00
Joshua Peek
5fba5409f7 Fix railties tests 2009-09-25 22:54:41 -05:00
Joshua Peek
85e0a6cd7d Set const for application object. "Basecamp::Application" 2009-09-25 22:35:54 -05:00
Joshua Peek
968c994c3b Initializer.run returns an application object 2009-09-25 22:28:09 -05:00
Joshua Peek
dfbd3b9409 Extract "parse_config" into AD 2009-09-25 21:40:55 -05:00
Joshua Peek
accd9b4634 Restore "Start Rails::Application object
This reverts commit f14ad41456.
2009-09-25 21:32:28 -05:00
Joshua Peek
bace497aea Remove relative url configuration from script/server 2009-09-25 21:17:38 -05:00
Joshua Peek
382870f763 Generate a config.ru stub 2009-09-25 21:10:00 -05:00
Joshua Peek
f14ad41456 Revert "Start Rails::Application object"
This reverts commit 4129449594.
2009-09-25 20:41:40 -05:00
Yehuda Katz + Carl Lerche
4129449594 Start Rails::Application object 2009-09-25 17:42:53 -07:00
Joshua Peek
088ce2904d Fix generic url rewriter in integration tests 2009-09-25 11:10:39 -05:00
Joshua Peek
24ac3a8d8e Wrap isolated test runner in a test suite 2009-09-25 01:16:52 -05:00
Jeremy Kemper
a6a0904fcb Nah, test SHA1, but skip the test and whine if OpenSSL is borked up 2009-09-24 23:13:56 -07:00
Jeremy Kemper
55f132ab82 Test with MD5 digest in an attempt to mollify CI 2009-09-24 23:10:05 -07:00
Jeremy Kemper
38e056ee2a Use ActiveModel::TestCase base class 2009-09-24 22:56:30 -07:00
Joshua Peek
f430d6b63e Make gemspecs the authoritative source instead of generating them from the Rakefile 2009-09-25 00:46:13 -05:00
Jeremy Kemper
0a692e48ae Use OpenSSL::Digest.const(...).new instead of OpenSSL::Digest::Digest.new(...) 2009-09-24 22:44:40 -07:00
Jeremy Kemper
5d24827e39 Explicitly require String#bytesize extension 2009-09-24 22:44:40 -07:00
Joshua Peek
897b9ac43b Make activesupport.gemspec the authoritative source instead of generating it from the Rakefile 2009-09-25 00:24:34 -05:00
Joshua Peek
bb6ca25d03 Check if the lib is in the load path and requirable before attempting to activate the gem version 2009-09-24 23:57:14 -05:00
Jeremy Kemper
018ba27701 Skip addition to load path if an externally-provided lib is already in place. Just to keep the path shorter. 2009-09-24 19:10:31 -07:00
Jeremy Kemper
0bd6e933c0 Restore split between require-time and runtime load path mungery. Simplifies vendor requires. 2009-09-24 18:38:18 -07:00
Jeremy Kemper
772a32a22d Convert the other vendored libs to avoid pulling in old gems. Works even if rubygems isn't loaded. 2009-09-24 17:29:59 -07:00
Jeremy Kemper
0039c0344c Avoid inadvertently loading an old tzinfo gem 2009-09-24 17:21:14 -07:00
Yehuda Katz + Carl Lerche
f0dd77c6be Move railties/lib/* into railties/lib/* 2009-09-24 16:11:41 -07:00
Joshua Peek
610b81beca Clean up log output for rendered templates 2009-09-24 12:30:13 -05:00
Joshua Peek
9f96708f53 Resurrect AC::Benchmarking [#3140 state:resolved] 2009-09-24 12:13:09 -05:00
Joshua Peek
c2f8b4e92f Remove dead requries to AC integration. Rely on autoloads instead 2009-09-24 09:41:46 -05:00
Joshua Peek
3fb623fa90 SessionRestoreError belongs in AD 2009-09-23 23:37:31 -05:00
Joshua Peek
542ddde5d4 Move helpers specific to functional tests out of TestProcess into AC::TestCase 2009-09-23 23:03:24 -05:00
Joshua Peek
4a55d1de8d Move integration test runner into ActionDispatch 2009-09-23 22:38:19 -05:00
Mike Gunderloy
3600c3840e More places to bump rack-test version [#3250 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-09-23 09:21:44 -05:00
Joshua Peek
a9c8995ac2 Bump rack-test required version to 0.5 2009-09-22 14:09:24 -05:00
Emilio Tagua
5f9540e483 Merge commit 'rails/master' 2009-09-22 15:08:45 -03:00
José Valim
2407479603 Fixes Sam Ruby tests suite.
Signed-off-by: Yehuda Katz <wycats@gmail.com>
2009-09-21 17:56:24 -07:00
Yehuda Katz
1bbb9b2db0 Merge commit 'jose/orchestra' 2009-09-21 12:05:28 -07:00
Emilio Tagua
a294d8362b Merge commit 'rails/master' 2009-09-21 14:57:24 -03:00
lakshan
e2d0b0ee61 fixed ActiveModel::Lint typos [#3236 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-09-21 09:49:43 -05:00
José Valim
4215e9ab93 Instrumenting cache stores. 2009-09-20 12:07:21 -03:00
José Valim
09f798ba18 Instrument create and deliver in ActionMailer. 2009-09-20 11:09:17 -03:00
José Valim
a0233dd3b2 Use NewCallbacks on ActionDispatch::Callbacks. 2009-09-20 10:56:38 -03:00
José Valim
7cc1c2e71d Add Orchestra instrumentation to fragment and page caching. 2009-09-20 10:56:38 -03:00
José Valim
8f47f311b7 Instrument process_action, render and sql. 2009-09-20 10:56:38 -03:00
José Valim
3c9a37c9c4 Added Orchestra. 2009-09-20 10:56:38 -03:00
Joshua Peek
762d761673 All tests should be ran under isolated_test too 2009-09-19 13:26:54 -05:00
Joshua Peek
d5cfc72f55 Merge "test_new_base" runner into standard "test_action_pack" 2009-09-19 13:22:58 -05:00
Joshua Peek
f5ace625fe Ensure changes to I18n locale get reset during tests 2009-09-19 13:22:09 -05:00
Joshua Peek
f1c8f07be8 Follow short name convention for test folder and just call it "abstract" 2009-09-19 13:14:22 -05:00
Joshua Peek
69192bee2d Merge bundler helper into abstract_unit 2009-09-19 13:12:54 -05:00
Joshua Peek
0540781539 Namespace TestControllers inside their test case class 2009-09-19 13:04:12 -05:00
Joshua Peek
db0af8075d Avoid conflict with a "MetalTest" module used in tests 2009-09-19 12:52:52 -05:00
Joshua Peek
355e2350ca All on one base, don't need this 2009-09-19 12:51:28 -05:00
Joshua Peek
12b3799448 Avoid conflicts with another ContentTypeController used in testing 2009-09-19 12:50:14 -05:00
Joshua Peek
f05b1e5eb1 All on one abstract_unit 2009-09-19 12:10:41 -05:00
Joshua Peek
a6f19a155a There is only one base now 2009-09-19 11:57:56 -05:00
Joshua Peek
5bc47a93b7 Make sure caching test is using a generatable url 2009-09-19 11:56:11 -05:00
Yehuda Katz
81c421386c 1.9 fix for changes to #to_s. By Sam Ruby. [#3228 state:resolved] 2009-09-18 10:35:42 -07:00
Brian Donovan
f183288050 Fix typo.
Signed-off-by: Yehuda Katz <wycats@gmail.com>
2009-09-17 18:30:28 -07:00
Jeremy Kemper
3fc2d1ebd9 Extract class-finder method from instantiate 2009-09-17 17:26:29 -07:00
Jeremy Kemper
7701c6f1c0 Collapse nested conditional 2009-09-17 16:15:04 -07:00
Aaron Patterson
636624fbf2 making nokogiri to hash less clever, more fast O_o
[#2243 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-09-17 11:50:58 -07:00
Jeremy Kemper
b5dd1b6599 Fix brittle content-type check. [#1956 state:committed] 2009-09-17 11:34:40 -07:00
Justin Bailey
c9d3c48dc6 Enable use of MySQL stored procedures by default.
[#3204 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-09-17 10:57:03 -07:00
Developer
0d762646c4 Allow Nokogiri XmlMini backend to process cdata elements
[#3219 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-09-17 10:28:10 -07:00
Joshua Peek
23e72d4cc8 Forward all methods to delayed log 2009-09-16 22:34:44 -05:00
Yehuda Katz
6be6fae59a Adds patch to CI 2009-09-15 17:56:20 -07:00
José Valim
befec8a0d8 Remove unused code in ActionView.
Signed-off-by: Yehuda Katz <wycats@gmail.com>
2009-09-15 16:18:10 -07:00
Joshua Peek
52aeb8d2e7 Beef up AD::Rescue to replace global exception handling lost in ApplicationController 2009-09-15 16:33:15 -05:00
Joshua Peek
90d7ae23c6 Remove global exception catching from ApplicationController.
It was severely broken since it was ported to NewBase and is causing problems with normal exception catching. A replacement is coming soon.
2009-09-15 10:05:46 -05:00
Emilio Tagua
378b02d3aa Updated ARel version. 2009-09-14 17:37:26 -03:00
Jeremy Kemper
d58ee23008 Require rubygems in generators test so Action Dispatch can find rack 2009-09-14 13:04:43 -07:00
Jeremy Kemper
b8e914709c Require active_support after autoload setup 2009-09-14 13:04:43 -07:00
Jeremy Kemper
4b8576a0c6 Style bikeshed: prefer obvious string paths with / separator to args lists with ', ' separator 2009-09-14 13:04:43 -07:00
Jeremy Kemper
697dda5f29 Fix deprecated gem-name requires 2009-09-14 13:04:43 -07:00
Jeremy Kemper
70d2640700 Cherry-pick core extensions. Don't explicitly require rubygems. Use load path for vendored thor. 2009-09-14 13:04:43 -07:00
Jeremy Kemper
51d202e6f3 Remove premature active_support/mini 2009-09-14 13:04:43 -07:00
Jeremy Kemper
af68eb99c1 Uses extlib_inheritable_accessor 2009-09-14 13:04:43 -07:00
Emilio Tagua
24260dc0c8 Merge commit 'rails/master' 2009-09-14 09:47:55 -03:00
Joshua Peek
181cd109d9 Lookup ruby bin name too 2009-09-14 00:51:31 -05:00
Joshua Peek
c5a6de50bb Use rbconfig instead of rubygem detection 2009-09-14 00:47:09 -05:00
Joshua Peek
ec01cc4510 For testing, only load rubygems if mocha is missing 2009-09-14 00:41:04 -05:00
Joshua Peek
27458464d6 Forgot to update load path dir for vendored memcache 2009-09-14 00:09:34 -05:00
Jeremy Kemper
ec36edff2d Use abort 2009-09-13 21:52:18 -07:00
Jeremy Kemper
fa1e6dc577 Skip parent isolation tests too 2009-09-13 21:37:31 -07:00
Joshua Peek
988a614dd2 Don't run gem bundle by default 2009-09-13 23:33:54 -05:00
Joshua Peek
a42c8958f9 Bump vendored memcache to 1.7.5 2009-09-13 23:30:32 -05:00
Joshua Peek
b2f0b8cbda Rollback AS bundler work and improve activation of vendored dependencies 2009-09-13 22:55:46 -05:00
Joshua Peek
6f9e449830 Callbacks need to require reporting 2009-09-13 21:56:10 -05:00
Joshua Peek
8c8e09c305 Restore AS vendor file until we get things sorted out in railties 2009-09-13 21:07:35 -05:00
Joshua Peek
a0e43073e2 Rewrite resource routing tests that are coupled to the router implementation 2009-09-13 18:43:16 -05:00
Joshua Peek
a3fcfd819b Need to reset session for AP rescue tests after altering the route set 2009-09-13 17:52:33 -05:00
Joshua Peek
213c920e4f Define weblog controller for url helper test 2009-09-13 17:28:44 -05:00
Joshua Peek
67eb892e94 AV::UrlHelper depends on Array#second 2009-09-13 17:25:40 -05:00
Joshua Peek
8491b77f55 Omit PATH_INFO in integration test so rack mock will properly override it 2009-09-13 17:15:35 -05:00
Joshua Peek
076d7f885e AP tests: detect missing dependencies and automatically run bundler 2009-09-13 16:37:30 -05:00
Joshua Peek
6d214c953b Merge abstract_controller/test_helper and new_base/test_helper since they are expected to run in the same testing sandbox 2009-09-13 16:30:27 -05:00
Joshua Peek
199a423f42 Don't eager require mocha, AS unit needs to set stuff up first 2009-09-13 16:12:33 -05:00
Joshua Peek
48c81f52d4 Remove dead old base abstract unit 2009-09-13 15:34:17 -05:00
Joshua Peek
a01bf41c61 Lazy require memcache for session middleware 2009-09-13 15:30:55 -05:00
Joshua Peek
fff3f0ae0c Detect missing dependencies and automatically run bundler 2009-09-13 15:10:29 -05:00
Joshua Peek
ef38e67562 Ignore bundled gems 2009-09-13 14:36:20 -05:00
Joshua Peek
5b8373da29 Shush interpolation warnings 2009-09-13 14:34:59 -05:00
Joshua Peek
3b6bb4664f Forget about old memoize immutable behavior 2009-09-13 13:08:12 -05:00
Joshua Peek
25f4129151 Need to declare optional dependencies from AS 2009-09-13 12:58:49 -05:00
Joshua Peek
870bf8950f Load vendored i18n if its not found since its a real requirement 2009-09-13 12:49:22 -05:00
Joshua Peek
ec0d4efd79 Avoid referencing rubygems 2009-09-13 12:47:37 -05:00
Joshua Peek
a9f5f4bb45 Don't force test suite to use bundler 2009-09-13 12:42:13 -05:00
Joshua Peek
f3f2e0b00d Move AS vendor support into bundler.
Run `rake bundle` before running tests.
2009-09-13 12:24:50 -05:00
Joshua Peek
3b325d624c require reporting before attempting to "shush" 2009-09-13 10:53:12 -05:00
Jeremy Kemper
941e990410 Shush, new_callbacks 2009-09-13 06:06:20 -07:00
Jeremy Kemper
c2018b4b7b Shush, rexml 2009-09-13 05:57:44 -07:00
Jeremy Kemper
7e6652edbf Prefer not to shadow a local 2009-09-13 05:56:21 -07:00
Jeremy Kemper
98f96a0809 Ignore isolation test tests for test-unit 2 also 2009-09-13 05:52:18 -07:00
Jeremy Kemper
053a0f6ac4 Clean up spurious JSON decoding test failure 2009-09-13 05:43:02 -07:00
Jeremy Kemper
7d2add8c96 Ruby 1.9 compat: fix regexp slice test 2009-09-13 05:31:43 -07:00
Jeremy Kemper
cce2112f12 Silence warning for Encoding.default_external= 2009-09-13 04:48:40 -07:00
Jeremy Kemper
91ffddca57 Use Encoding.default_external, not _internal 2009-09-13 04:43:41 -07:00
sdsykes
dbe9fa03df Ruby 1.9 compat: corrected instance_methods check
[#3156 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-09-13 02:57:53 -07:00
Jeremy Kemper
091486fb98 activesupport -> active_support 2009-09-13 02:45:37 -07:00
Aaron Patterson
f959758687 making secure_compare faster
[#3195 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-09-13 02:44:52 -07:00
Michael Koziarski
e590508a9b Dup the arguments to string compare so we can use force_encoding. 2009-09-13 10:36:04 +12:00
Michael Koziarski
81cba78e9e Merge commit 'alloy/master-nested_attributes_and_autosave' 2009-09-13 10:32:24 +12:00
Yehuda Katz
76cd4cb27e Memoize in the endpoint. 2009-09-12 15:38:34 -05:00
Yehuda Katz
ddb4600ce6 Get ActionPack's test running on bundled gems. This should make running tests on new machines, as well as CI, work well. 2009-09-12 15:22:11 -05:00
Yehuda Katz
a8a336cbfc Revert "ruby 1.9 friendly secure_compare" because it breaks CI and Sam Ruby's suite
This reverts commit 5de75398c4.
2009-09-12 14:35:03 -05:00
Yehuda Katz
7152a4e9a6 Add per-controller middleware 2009-09-12 13:51:15 -05:00
Eloy Duran
26639e8a45 Removed the version of ActiveRecord::Base#destroyed? that was added in a44a1257d8.
Because José Valim was cheeky enough to already add it to the master branch.
2009-09-12 16:16:48 +02:00
Eloy Duran
a144b41cbc Removed some superfluous conditionals from the autosave association validation methods.
Which are unneeded now that we only define them when needed.
2009-09-12 16:04:47 +02:00
Alexey Kovyrin
938c0ee045 Define autosave association validation methods only when needed. [#3161 state:resolved]
Signed-off-by: Eloy Duran <eloy.de.enige@gmail.com>
2009-09-12 16:04:36 +02:00
Eloy Duran
580ec0dccd Added some documentation about setting :autosave => false on an association. 2009-09-12 16:04:25 +02:00
Eloy Duran
65f98951ac During autosave, ignore records that already have been destroyed. [#2537 state:resolved] 2009-09-12 16:04:07 +02:00
Graeme Porteous
c01be9de32 Fix has_one with foreign_key and primary_key association bug which caused the associated object being lost when saving the owner. [#1756 state:resolved]
Mixed in a bit from patch by ransom-briggs. [#2813 state:resolved]

Signed-off-by: Eloy Duran <eloy.de.enige@gmail.com>
2009-09-12 16:03:32 +02:00
José Valim
3091252aba Rename nested attributes _delete to _destroy to reflect its actual behavior and DSL (:allow_destroy). Deprecation warning added. [#2889 state:resolved]
Signed-off-by: Eloy Duran <eloy.de.enige@gmail.com>
2009-09-12 15:59:32 +02:00
Dmitry Polushkin
845f62f473 Fix autosave association to skip validation if it is marked for destruction. [#2064 state:resolved]
Signed-off-by: Eloy Duran <eloy.de.enige@gmail.com>
2009-09-12 15:56:01 +02:00
Eloy Duran
6cc0b9638f Explicitely setting `autosave => false' should override new_record autosaving. [#2214 state:resolved]
Original author is Jacob.
2009-09-12 15:53:15 +02:00
Andrew France
1b78e9bba3 Allow fields_for on a nested_attributes association to accept an explicit collection to be used. [#2648 state:resolved]
Signed-off-by: Eloy Duran <eloy.de.enige@gmail.com>
2009-09-12 15:50:05 +02:00
Lance Ivy
a44a1257d8 Don't cascade autosave validation to destroyed children. [#2761 state:resolved]
Signed-off-by: Eloy Duran <eloy.de.enige@gmail.com>
2009-09-12 15:40:45 +02:00
Mike Breen
bcd0ef710e Raise an exception with friendlier error message when attempting to build a polymorphic belongs_to with accepts_nested_attributes_for. [#2318 state:resolved]
Signed-off-by: Eloy Duran <eloy.de.enige@gmail.com>
2009-09-12 15:37:54 +02:00
sdsykes
3180619c0d Fix habtm associations when using multiple databases
[#3128]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-09-12 02:57:29 -07:00
Jeremy Kemper
8682d76cc9 Revert "Allow frameworks to be required by their gem name"
This has just been confusing. Better to educate than band-aid.

This reverts commit 18a24274ec.
Originally from http://dev.rubyonrails.org/ticket/8845 [drnic]
2009-09-12 02:41:01 -07:00
Akira Matsuda
3ce16b4c5f Ruby 1.9 compat: Avoid using the return value of FileUtils.mkdir_p, as it does not return a String but an Array in Ruby 1.9
[#2018 state:committed milestone:2.3.5]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-09-11 19:20:57 -07:00
Akira Matsuda
0990a13500 Ensure validation errors to be ordered in declared order
[#2301 state:committed milestone:2.3.5]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-09-11 18:52:22 -07:00
Akira Matsuda
68b2b730e4 Fix default_error_messages back to the original message
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-09-11 18:34:12 -07:00
Jakub Kuźma
b22c951e7a ruby 1.9 friendly secure_compare
Signed-off-by: Michael Koziarski <michael@koziarski.com>
2009-09-12 12:48:34 +12:00
Shugo Maeda
ff2eb2d808 Removed the copyright notice not to show it in the result of 'ri ActiveRecord'. 2009-09-11 15:33:20 -07:00
Joshua Peek
72721c6725 Add gem load paths after loading environment 2009-09-11 10:31:31 -05:00
Nathaniel Talbott
f024aabee3 Fix filtering parameters when there are Fixnum or other un-dupable values.
[#3184 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-09-10 18:53:50 -07:00
Beau Harrington
38d65b03d6 Remove redundant checks for valid character regexp in ActiveSupport::Multibyte#clean and #verify.
[#3181 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-09-10 17:36:54 -07:00
Emilio Tagua
0489f0c582 Merge commit 'rails/master' 2009-09-08 15:39:33 -03:00
Emilio Tagua
670281c6b2 Merge commit 'rails/master'
Conflicts:
	activerecord/lib/active_record/associations.rb
2009-09-08 15:38:51 -03:00
José Valim
af5b12c64c Fix callbacks on ActionPack.
Signed-off-by: Yehuda Katz <wycats@gmail.com>
2009-09-08 10:28:28 -07:00
José Valim
2ea1d684d9 Refactor new callbacks and AR implementation.
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-09-08 10:26:39 -05:00
José Valim
4f37b97033 Changed ActiveRecord to use new callbacks and speed up observers by only notifying events that are actually being consumed.
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-09-08 10:26:39 -05:00
Jeremy Kemper
aeab739bd5 Ruby 1.9: fix MessageVerifier#secure_compare 2009-09-08 14:05:33 +09:00
Joshua Peek
47aebacd51 Please 1.8.6 CI 2009-09-07 21:56:53 -05:00
Joshua Peek
b7c1fbc050 Start running AS isolated tests on CI 2009-09-07 21:13:25 -05:00
Joshua Peek
1a0f822037 Use draw/connect mapper api instead of directly using add_named_route 2009-09-06 23:21:04 -05:00
Joshua Peek
314e18aba2 Need to reset session for AR session tests after altering the route set 2009-09-06 23:09:47 -05:00
Joshua Peek
2ae84e04aa Add fake controllers for url rewriter tests 2009-09-06 23:02:55 -05:00
Joshua Peek
c531bd6665 Cleanup hacky routing with controller_path in url helper tests. This doesn't work in real life anyway. 2009-09-06 22:29:29 -05:00
Joshua Peek
ab8aac09d6 Need to reset session in internal integration tests after altering the route set 2009-09-06 22:01:58 -05:00
Joshua Peek
9f47f8d892 Fix isolated running of AddressesTest 2009-09-06 21:42:05 -05:00
Joshua Peek
1c02fc295d Fix isolated running of ActionPackAssertionTest 2009-09-06 21:19:29 -05:00
Joshua Peek
c3accd7ded Fix failing isolated routing test 2009-09-05 19:39:33 -05:00
Joshua Peek
59d1b23ea1 Fix failing ARes isolated tests 2009-09-05 19:24:43 -05:00
Joshua Peek
6dc9ad80e6 Fix warnings in AMo 2009-09-05 19:10:21 -05:00
Joshua Peek
c6e0923245 Fix failing AMo isolated tests 2009-09-05 18:54:19 -05:00
Joshua Peek
fe68cf2784 Fix failing AS isolated tests 2009-09-05 18:31:10 -05:00
Joshua Peek
ca2f2d1800 Turn warnings on for AS isolated tests 2009-09-05 18:24:58 -05:00
Michael Koziarski
87c93da440 Fix a messed up merge commit 2009-09-04 14:28:32 +12:00
Michael Koziarski
b16e0c9223 Clean tag attributes before passing through the escape_once logic.
Addresses CVE-2009-3009
2009-09-04 09:25:38 +12:00
Michael Koziarski
9a73630d93 Add verify and clean methods to ActiveSupport::Multibyte.
When accepting character input from outside of your application you can't
blindly trust that all strings are properly encoded. With these methods
you can check incoming strings and clean them up if necessary.

Signed-off-by: Michael Koziarski <michael@koziarski.com>

Conflicts:

	activesupport/lib/active_support/multibyte.rb
2009-09-04 09:25:38 +12:00
Coda Hale
5e6dab8b34 Fix timing attack vulnerability in ActiveSupport::MessageVerifier.
Use a constant-time comparison algorithm to compare the candidate HMAC with the calculated HMAC to prevent leaking information about the calculated HMAC.

Signed-off-by: Michael Koziarski <michael@koziarski.com>
2009-09-04 09:25:38 +12:00
Jay Pignata
bd97c3044a CookieStore should not be derived from Hash - reverting [#2268 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-09-03 15:15:15 -05:00
Yehuda Katz + Carl Lerche
487ee41d2f Test for previous commit (we wrote it first, I swear) 2009-09-03 12:58:43 -07:00
Yehuda Katz + Carl Lerche
119793a4c1 Replace :formats => ["*/*"] with the default formats set 2009-09-03 12:52:53 -07:00
Yehuda Katz + Carl Lerche
e3744166ec Refactor ActionController to use find_template and template_exists? 2009-09-03 12:52:53 -07:00
Sam Pohlenz
4b6321efa9 Don't raise exceptions for missing javascript_include_tag or stylesheet_link_tag sources unless the :cache or :concat options are given. [#2738 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-09-03 14:01:01 -05:00
Yehuda Katz + Carl Lerche
f61dc0ef65 Remove a useless method in the fixture template class 2009-09-03 11:40:03 -07:00
Yehuda Katz + Carl Lerche
f3fc5c4b5f Refactor ActionView::Resolver 2009-09-03 11:18:57 -07:00
Yehuda Katz + Carl Lerche
dd34691b8d Extract finding the template in AC to it's own method 2009-09-03 11:18:56 -07:00
Jay Pignata
e0f1a7dc19 If session_options[:id] is requested when using CookieStore, unmarshal the session to access it [#2268 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-09-03 11:50:01 -05:00
Carl Lerche
f416f9f0ae Vendor the latest version of the bundler 2009-09-03 09:31:04 -07:00
Carl Lerche
e3f5fd536e Add ActiveModel's ./pkg and ./doc to .gitignore 2009-09-03 08:59:26 -07:00
Jeremy Kemper
3b6a9a020e Revert "Assert primary key does not exist in habtm when the association is defined, instead of doing that everytime a record is inserted."
Test failures on PostgreSQL.

[#3128 state:open]

This reverts commit da636809da.
2009-09-02 13:55:47 -07:00
Joshua Peek
723a47bfb3 Kill AMo observing wrap_with_notifications since ARes was only using it 2009-09-02 11:44:36 -05:00
Jeffrey Hardy
e870e24887 Don't try to log protected attribute removal if there's no logger defined [#3135 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-09-02 11:21:20 -05:00
Jeffrey Hardy
41b3c912b7 Remove ClassInheritableAttributes test case, already covered by ActiveSupport [#3114 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-09-02 11:21:20 -05:00
Yehuda Katz
847907d753 Make Sam Ruby's test suite happy 2009-09-01 19:37:49 -07:00
Yehuda Katz + Carl Lerche
66a4585f88 Fix the */* with Net::HTTP bug [#3100 state:resolved] 2009-09-01 15:54:29 -07:00
Carl Lerche
bd53ebde72 Add required dependencies on activemodel 2009-09-01 12:26:00 -07:00
Carl Lerche
016b1d3596 Merge branch 'master' of git@github.com:rails/rails 2009-09-01 12:19:09 -07:00
Emilio Tagua
39e4e76d15 Merge commit 'rails/master'
Conflicts:
	activerecord/lib/active_record/associations.rb
2009-09-01 15:45:43 -03:00
Emilio Tagua
c01c21b31d Added association preload to relation. 2009-09-01 15:36:09 -03:00
José Valim
da636809da Assert primary key does not exist in habtm when the association is defined, instead of doing that everytime a record is inserted.
[#3128 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-09-01 10:15:23 -07:00
Joshua Peek
c5f6e038da ActionPack test helpers need to activate rack gem 2009-09-01 10:27:19 -05:00
Joshua Peek
ad49895fe8 Railties test helpers need to activate rack gem 2009-09-01 10:05:17 -05:00
Geoff Buesing
cc1efe7e5a Rails::Info doesn't require version for unwanted frameworks
[#3124 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-09-01 02:29:22 -07:00
Bryan Helmkamp
a5588ffc08 Activate rack-test gem before it's required. This shouldn't be necessary, but should fix the build for now 2009-08-31 23:17:43 -07:00
Joshua Peek
a79790e1a5 rack-test 0.4.2 has rack 1.1.pre goodies, we'll use it instead 2009-08-31 23:08:20 -05:00
Joshua Peek
426e76ad85 Temp rack-test gem needs proper gem source 2009-08-31 21:53:24 -05:00
Joshua Peek
14870257c1 Initializer middleware helper needs to require actioncontroller 2009-08-31 21:09:39 -05:00
Yehuda Katz
67f5d611f5 Add rake gemspec and gemspecs to the repo 2009-08-31 17:20:44 -07:00
Joshua Peek
66d713fc8f License, version, and gemspec for ActiveModel. Ship it! 2009-08-31 19:09:16 -05:00
Joshua Peek
ffd2cf1670 To make CI happy, use my edge rack-test gem (just for now) 2009-08-31 15:46:29 -05:00
Joshua Peek
b4068c12eb Restore rack gem dependency 2009-08-31 15:40:08 -05:00
Joshua Peek
5e5e34377c Back off rack 1.1-pre and bundle in the new testing goodies 2009-08-31 15:39:19 -05:00
Joshua Peek
8974ab2e2e action_dispatch and action_view are just more autoloads, so its okay to require them 2009-08-31 14:49:59 -05:00
Joshua Peek
c63dac81c1 Switch over to rack-test gem 2009-08-31 14:27:10 -05:00
Joshua Peek
6f40139b53 SessionHash#update and SessionHash#delete are missing a call to load! [#3056 state:resolved] 2009-08-31 13:39:06 -05:00
Kane
cf9f361699 added proc and symbol support to validates_numericality_of [#3049 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-08-31 13:35:14 -05:00
Yehuda Katz
7e3abbfdc2 Merge commit 'jose/generators' 2009-08-31 11:07:37 -07:00
Jay Pignata
7316d029e6 Duplicating the options hash in Date#advance to prevent modification of the original [#1133 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-08-31 13:02:19 -05:00
Josh Sharpe
80989437dc I added this feature so that a Map of changed fields could be retrieved
after a model had been saved. This is useful in the after_save callback
when you need to know what fields changed. At present there is no way
to do this other than have code in the before_save callback that takes
a copy of the changes Map, which I thought was a bit messy.

Example.

  person = Person.find_by_name('bob')
  person.name = 'robert'
  person.changes # => {'name' => ['bob, 'robert']}
  person.save
  person.changes # => {}
  person.previous_changes # => {'name' => ['bob, 'robert']}
  person.reload
  person.previous_changes # => {}

Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-08-31 12:50:27 -05:00
Jay Pignata
57f7308da4 Changing plugin loader to use blocks instead of Symbol#to_proc to ensure tests run without activesupport
[#3118 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-30 17:01:59 -07:00
Antonio Tapiador del Dujo
cf4846c6ae I18n support for plugins
Rails will now automatically add locale files found in any engine's locale
directory to the I18n.load_path (i.e. files that match the glob pattern
"config/locales/**/*.{rb,yml}" relative to engine directories).

[#2325 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-30 13:36:22 -07:00
José Valim
d8d83e7821 Change div.attribute to div.field and add some _form to tests. 2009-08-30 18:49:54 +02:00
José Valim
0efedf2a30 Ensure scaffold works properly even if plural name is given. [#3062] 2009-08-30 17:58:20 +02:00
José Valim
5096ba961c Remove inline css. [#593 status:resolved] 2009-08-30 17:04:16 +02:00
José Valim
5d645c271b Change scaffold to use _form as partial and div's instead of paragraphs. [#1760 status:resolved] 2009-08-30 16:53:23 +02:00
David Calavera
0fc5c59b37 Rails templates git command runs inside another directory [#2466 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
2009-08-30 16:25:07 +02:00
Rodrigo Rosenfeld Rosas
0f9675a872 Fix spelling in Rails 'generator' generator. [#3080 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
2009-08-30 16:18:21 +02:00
José Valim
72c6ea1022 Update vendored thor. 2009-08-30 16:16:53 +02:00
Chad Woolley
d8e7ff12a8 CI config updates: do not send CI emails unless explicitly enabled, use 'gem update --system', and send emails from an address which can post to the core list
[#3116 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-30 00:06:07 -07:00
Chad Woolley
22e946873c Send CI notifications to core list.
* Only send emails on official box.
 * Update CI setup docs to correct hostname instructions.

[#3063 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-29 13:09:46 -07:00
José Valim
3f78de67b5 Ensure that blocks are also handled inside the responder. 2009-08-29 18:21:19 +02:00
José Valim
684a6b3c71 Attempt to render the template inside the responder, so it can be used for caching and pagination.
Signed-off-by: Yehuda Katz <wycats@gmail.com>
2009-08-29 11:01:00 -05:00
Carl Lerche
22d5e3d89d Make sure all needed files get added to the rails gem 2009-08-29 10:13:52 -05:00
Yehuda Katz
dbf20c2dbb Initial AMo Lint implementation 2009-08-29 01:49:18 -05:00
Yehuda Katz
353157ccd9 Make rake install work 2009-08-28 18:05:02 -05:00
Jeremy Kemper
f6ca7e4e75 Prefer utf8_unicode_ci (better) over utf8_general_ci (faster) 2009-08-27 23:07:43 -07:00
Emilio Tagua
6b67df70ab Revert "Revert "Add readonly support for relations.""
This reverts commit f2c0725d79.
2009-08-27 20:03:46 -03:00
Emilio Tagua
f2c0725d79 Revert "Add readonly support for relations."
This reverts commit 7cce95b25a.
2009-08-27 20:00:14 -03:00
Emilio Tagua
7cce95b25a Add readonly support for relations. 2009-08-27 18:52:14 -03:00
Emilio Tagua
d56e987757 No need to reload the relation table with a method param, just nil it. 2009-08-27 16:49:16 -03:00
Emilio Tagua
53f6c6d24e Performance: Don't reload ARel relation on update. 2009-08-27 16:46:24 -03:00
Emilio Tagua
e204f80dbb Performance: Don't reload the ARel relation on create, do it on
reset_column_information.
2009-08-27 16:42:57 -03:00
Emilio Tagua
1cc0ea826e Performance: Don't reload the arel_table when destroying. 2009-08-27 16:30:48 -03:00
Emilio Tagua
d395391e1d Merge commit 'rails/master' 2009-08-27 15:56:16 -03:00
Jeffrey Hardy
c10396b142 When running multiple test tasks, don't abort early if one produces failures
[#3107 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-27 11:20:51 -07:00
Joshua Peek
ba5995dcd9 Reset session in integration tests after changing routes to reload the middleware stack 2009-08-27 12:43:26 -05:00
Yehuda Katz
f3ed0de340 Create an install task that successfully installs all Rails gems 2009-08-27 05:00:57 -05:00
Yehuda Katz
bb91beabbd Remove some old cruft 2009-08-27 05:00:57 -05:00
Carl Lerche
6a001e925e Require necessary active_support files in cookie store 2009-08-26 23:07:55 -07:00
Carl Lerche
4467fa7d24 Fixed stupid mistake... nothing to see here. 2009-08-26 20:51:54 -07:00
Carl Lerche
78ced08338 Add a default parameter for Resolver#initialize 2009-08-26 19:52:18 -07:00
Carl Lerche
2890760665 Set the request and response in ActionController::Middleware 2009-08-26 19:52:18 -07:00
Carl Lerche
efbd535f36 Have AbstractController::Logger#process_action return super's value 2009-08-26 19:52:17 -07:00
Jeffrey Hardy
8c05ca96f8 Don't use AR::Base.connection for fixture column quoting. Use the connection given to Fixtures.new
[#3104 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-26 14:53:09 -07:00
Jeffrey Hardy
0821941598 Eliminate warnings from Regexp multiline extension tests
[#3103 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-26 14:47:29 -07:00
Jeffrey Hardy
66d8063c91 Correct Regexp#un/optionalize assertions and fix uncovered failures
[#3102 state:incomplete]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-26 14:46:38 -07:00
Jeffrey Hardy
05b529ca57 UrlRewriter#rewrite_url should call #to_param on the value given in :anchor option, just as #url_for does
[#2746 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-26 14:11:26 -07:00
Akira Matsuda
cc9af20da7 I18n: use I18n for select helpers' prompt text
[#2252 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-26 13:55:57 -07:00
Emilio Tagua
286f47f3b0 Remove useless var local definition. 2009-08-26 16:19:19 -03:00
Jeremy Kemper
a7ca5595a2 Revert "I18n: use I18n for select helpers' prompt text"
Broke CI.

[#2252 state:open]

This reverts commit adedf72821.
2009-08-26 12:12:40 -07:00
Sven Fuchs
d672a14ee7 allow ActiveRecord#RecordInvalid exception message to be localized
[#2754 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-26 11:29:16 -07:00
Akira Matsuda
adedf72821 I18n: use I18n for select helpers' prompt text
[#2252 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-26 11:29:16 -07:00
Yehuda Katz
9408fcd2e8 Create new ActionController::Middleware class that will work as a normal Rack middleware.
* This initial implementation is a bit hackish, but it uses a normal middleware API
    so it's future-proof when we improve the internals.
2009-08-26 00:18:52 -07:00
Joshua Peek
78129b1731 Track all AC base subclasses as possible controllers for internal testing 2009-08-25 23:34:48 -05:00
Yehuda Katz + Carl Lerche
5bc66f160d And the same thing for Basic 2009-08-25 17:34:07 -07:00
Yehuda Katz + Carl Lerche
3a5269eba4 HTTP Auth should not depend on RenderingController 2009-08-25 17:29:48 -07:00
Yehuda Katz + Carl Lerche
303f9b8841 Redirector had an undeclared dependency on Logger. 2009-08-25 17:20:58 -07:00
Yehuda Katz + Carl Lerche
a21aaca8ea Rework Middleware stack to match the Rack middleware protocol more closely 2009-08-25 17:04:09 -07:00
Yehuda Katz + Carl Lerche
469424c85e Modify Digest and Basic to take a request so they can be used outside of the controller 2009-08-25 16:02:26 -07:00
Yehuda Katz + Carl Lerche
86c7b144fa Add a TODO so we remember to fix partial layouts 2009-08-25 16:02:26 -07:00
Emilio Tagua
33746c44cb No need to create a new relation if the argument is blank. 2009-08-25 19:47:29 -03:00
Emilio Tagua
51910106f1 Merge commit 'rails/master' 2009-08-25 19:37:41 -03:00
Jeremy Kemper
c3a0a36fc3 Fix typo 2009-08-25 13:41:48 -07:00
Yehuda Katz + Carl Lerche
c7ba911a43 ActionController::Metal can be a middleware 2009-08-25 12:14:31 -07:00
Emilio Tagua
09fde6440a timestamps gives a created_at field not created_on.
[#3093 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-24 16:17:08 -07:00
Jeremy Kemper
e93d0a50c0 Ruby 1.9: fix Time#beginning_of_day inaccuracy due to subtracting a Float 2009-08-22 15:53:19 -07:00
Joshua Peek
b58acea569 Move legacy param_parsers config onto AD::ParamsParser 2009-08-21 16:49:33 -05:00
Emilio Tagua
689b89f548 Revert "Add bench script for ActiveRecord. Ignore log file and temporary cache"
This reverts commit 0c6aed0a09.
2009-08-21 17:43:46 -03:00
Emilio Tagua
c57f94d730 Merge commit 'rails/master' 2009-08-21 17:43:32 -03:00
taryn
ce61a6bd55 Added first/last/all aliases for equivalent find scopes
Just a copy from Active Record (with tests). Each is a warpper function for
the equivalent scoped call to find eg first is a wrapper for find(:first)

Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-08-21 14:49:59 -05:00
Jeremy Kemper
8bc3a14727 Benchmark script via miloops' arel fork via DataMapper's AR comparison script 2009-08-20 21:09:59 -07:00
Emilio Tagua
0c6aed0a09 Add bench script for ActiveRecord. Ignore log file and temporary cache
sql files.
2009-08-20 18:58:12 -03:00
Emilio Tagua
a60334fdc5 Remove useless conditionals/local var. 2009-08-19 19:36:06 -03:00
Emilio Tagua
54fcbb881d Make sure join association methods are called once. 2009-08-19 17:45:13 -03:00
Emilio Tagua
b32474020c Don't sanitize_sql where it doesn't make sense. 2009-08-19 16:29:26 -03:00
Emilio Tagua
ccf5f2c4a2 Remove old method and comment. 2009-08-19 16:17:16 -03:00
Emilio Tagua
3e1ef198e0 Remove useless InnerJoinDependency, inner joins are performed through
Arel::InnerJoin.
2009-08-19 16:08:54 -03:00
Emilio Tagua
b342728677 Merge commit 'rails/master' 2009-08-19 11:09:24 -03:00
Emilio Tagua
2048556a14 Remove whitespace. 2009-08-19 11:09:12 -03:00
taryn
328ba3b333 Added save! which raises ResourceInvalid unless valid?
Similar to Active Record - it will raise ActiveResouce::ResourceInvalid if
the resource is not valid (ie if <tt>valid?</tt> returns false)

However - does not raise ActiveResource::ResourceNotFound if the callbacks
fail (callbacks have not yet been implemented) - it will just try to save
and raise if the callbacks all fail.

This is not ideal behaviour - but will do until we decide to change the
behaviour of save_with_validations to actually raise (rather than catch) the
ResourceInvalid exception.

Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-08-19 09:05:02 -05:00
taryn
4dc05bc8a9 Swallow ResourceNotFound error on find_every
Active Record does not explode with RecordNotFound if you go looking for a
collection of objects - it just returns nil. Thus Active Resource should
also not explode.

After all - finding no objects that match a set of conditions is not
exceptional behaviour - unlike looking for a specific object with a given id
(which you'd expect to exist).

I've also added documentation to +find+ to reflect this.

Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-08-19 09:04:48 -05:00
taryn
079ed8fc43 Pulled find-based tests into their own test case. This matches Active Record, and allows us to have one places where all find-tests are located, which will help when adding dynamic finders later.
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-08-19 09:04:14 -05:00
taryn
36bf587347 Moved all test cases into a new test/cases directory to match Active Record test directory structure.
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-08-19 09:03:57 -05:00
taryn
c2f90d6530 Added validations to ActiveResource. Added a smoke test to see if we can add a validation and use it, and add a validates callback and use it.
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-08-19 09:03:17 -05:00
Emilio Tagua
c36cfa7568 Remove unused quoted_record_ids, now ARel does this using ARel::In. 2009-08-18 20:03:32 -03:00
Emilio Tagua
a09215ee96 has_many nullify associations keys using ARel. 2009-08-18 20:02:14 -03:00
Emilio Tagua
a7178773d2 Remove now unused quote_table_name, ARel does that quoting now. 2009-08-18 19:53:21 -03:00
Emilio Tagua
d5476b466f habtm insertion with ARel integration. 2009-08-18 19:51:41 -03:00
Emilio Tagua
c1f833dff4 habtm delete method integrated with ARel. 2009-08-18 19:38:34 -03:00
Emilio Tagua
0abba2813b Call to_sql method on ActiveRecord::Relation instance not it's relation
attribute.'
2009-08-18 19:38:03 -03:00
Emilio Tagua
74ed123e08 Override respond_to? in ActiveRecord::Relation to go with
method_missing.
2009-08-18 16:35:33 -03:00
Emilio Tagua
fefb4c78ac Cache arel_table when possible, use class method arel_table instead
instance method.
2009-08-18 16:28:04 -03:00
Emilio Tagua
0d6997b6e3 Cache #arel_able when possible. 2009-08-18 14:49:11 -03:00
Emilio Tagua
60926db9e0 Inline initializer setup. 2009-08-18 14:22:38 -03:00
Emilio Tagua
66fbcc1de6 Use immutable relation objects to generate queries. 2009-08-18 14:10:03 -03:00
Mike Gunderloy
ef93524058 Remove sqlite2 build from CI recipe [#3066 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-18 13:24:39 +01:00
Emilio Tagua
ac03bc91db Use explicit method definition instead of metaprogramming. 2009-08-18 08:27:37 -03:00
Emilio Tagua
fa8f5c2667 Relation#joins! should know what to join instead of delegating to
construct_join.
2009-08-18 08:18:24 -03:00
Emilio Tagua
08f6af2d53 Fix typo in test classname. 2009-08-18 08:12:35 -03:00
Emilio Tagua
79e951ca9b Use finder options as relation method names to provide more familiar
naming. Use bang methods convention in methods that alter the
relation.
2009-08-18 07:50:11 -03:00
Emilio Tagua
c923409630 Clean up relation joins when finding records with included associations. 2009-08-17 20:17:40 -03:00
Emilio Tagua
4b339f44bd Merge commit 'rails/master' 2009-08-17 19:46:32 -03:00
Emilio Tagua
c01c8967a0 Merge commit 'rails/master'
Conflicts:
	activerecord/lib/active_record/calculations.rb
2009-08-17 19:46:06 -03:00
Pratik Naik
25e5b0c4a8 Remove support for SQLite 2.
If you're still using it, please install the plugin from git://github.com/rails/sqlite2_adapter.git
2009-08-17 14:54:34 +01:00
Joshua Peek
ff1b0d3c86 k, thats really slow, lets not 2009-08-16 21:21:39 -05:00
Joshua Peek
24ad9ae3d2 Cleanup route reloading in tests. Prefer with_routing over using ActionController::Routing::Routes directly 2009-08-16 21:14:26 -05:00
Emilio Tagua
770fca10fb Remove group when building the relation, it will be added later if
options[:group] is given.
2009-08-16 17:27:45 -03:00
Yehuda Katz
ccf28d2499 Fixes ActionMailer regression [#3059 state:resolved] 2009-08-15 20:38:50 -07:00
Yehuda Katz
d6d550f0cb Missing fixture template -- fixes AP tests 2009-08-15 20:33:34 -07:00
Jay Pignata
7213da37ce Fix test_has_many_through_polymorphic_has_one on sqlite2 [#3054 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-15 19:14:32 -07:00
Jay Pignata
cb3e669b0d Fix calculation tests on sqlite2 [#3053 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-15 19:14:11 -07:00
Jeremy Kemper
76335c27b6 Bump pg gem requirement to 0.8.0. Build psql db with UTF8 encoding. 2009-08-15 19:04:25 -07:00
Jay Pignata
679128da58 Adding a call to logger from params_parser to give detailed debug information when invalid xml or json is posted
[#2481 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-15 16:51:03 -07:00
Joshua Peek
911acc10de Axe "best fit" generation support 2009-08-15 18:08:46 -05:00
Jeremy Kemper
df6617bc8a Normalize route generation order: associations, yield block, then own routes. 2009-08-15 15:56:52 -07:00
Yehuda Katz
1310231c15 Got tests to pass with some more changes.
* request.formats is much simpler now
    * For XHRs or Accept headers with a single item, we use the Accept header
    * For other requests, we use params[:format] or fallback to HTML
    * This is primarily to work around the fact that browsers provide completely
      broken Accept headers, so we have to whitelist the few cases we can
      specifically isolate and treat other requests as coming from the browser
    * For APIs, we can support single-item Accept headers, which disambiguates
      from the browsers
  * Requests to an action that only has an XML template from the browser will
    no longer find the template. This worked previously because most browsers
    provide a catch-all */*, but this was mostly accidental behavior. If you
    want to serve XML, either use the :xml format in links, or explicitly
    specify the XML template: render "template.xml".
2009-08-15 12:32:02 -07:00
Yehuda Katz
9b552fb300 Caches and cache clearing seems to actually work, but the actual architecture is kind of messy. Next: CLEAN UP. 2009-08-15 12:32:01 -07:00
Yehuda Katz
9f5cd0156a More cleanup of ActionView and reduction in need for blocks in some cases:
* only one of partial_name or :as will be available as a local
  * `object` is removed
  * Simplify _layout_for in most cases.
    * Remove <% render :partial do |args| %>
    * <% render :partial do %> still works fine
2009-08-15 12:32:01 -07:00
Yehuda Katz
27adcd1c1a Clean up ActionView some:
* Call _evaluate_assigns_and_ivars at the two entry points so we don't have to
    do a check at every render.
  * Make template.render viable without having to go through a wrapper method
  * Remove old TemplateHandler#render(template, local_assigns) path so we don't have
    to set self.template every time we render a template.
  * Move Template rescuing code to Template#render so it gets caught every time.
  * Pull in some tests from Pratik that test render @object in ActionView
2009-08-15 12:32:01 -07:00
Jatinder Singh
a363dba790 Fix ActiveResource load test for 64bit machines [#3051 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-15 20:29:37 +01:00
Jeremy Kemper
26e4d688ac Skip isolation test tests when using MiniTest 2009-08-15 12:28:09 -07:00
Joshua Peek
940a391c9b Attempt to rewrite most of the highly coupled router segments tests 2009-08-14 16:16:29 -05:00
Joshua Peek
f86a4b84dd Kill routing timed tests 2009-08-14 14:30:19 -05:00
Emilio Tagua
796ec652ad Don't use regular rinder on calculations since scoping order blows
PostreSQL.
2009-08-14 15:59:55 -03:00
Emilio Tagua
48c1e6d584 Merge commit 'rails/master' 2009-08-14 12:34:38 -03:00
Emilio Tagua
9ac01fad19 Use ARel's joins when building a query for finding records with included
associations.
2009-08-14 12:33:05 -03:00
Joshua Peek
c6bc8e6626 Break up concerns for choosing what attributes should be serialized and the actual serializer 2009-08-13 22:27:36 -05:00
Joshua Peek
7a26c21d8e Use safe tmp dir 2009-08-13 21:03:25 -05:00
José Valim
8692b11e81 Merge branch 'master' of git://github.com/rails/rails 2009-08-13 10:27:53 +02:00
José Valim
4f9047ecc8 Ensure collections are not treated as nested resources. 2009-08-13 10:27:41 +02:00
Chad Woolley
f413a703ba make mysql and postgresql rebuild databases on every CI build, to prevent breakages such as collation and character set changing
Signed-off-by: Yehuda Katz <wycats@gmail.com>
2009-08-12 00:11:16 -07:00
Yehuda Katz
ba67e256b8 Remove submodule 2009-08-11 23:44:44 -07:00
Yehuda Katz
27e880729e Made benchmarks submodule so it's easier to keep in sync 2009-08-11 16:49:27 -07:00
Yehuda Katz
ccd1c5e521 Allow superclass_delegating_accessor to take a block for initial set. 2009-08-11 15:03:53 -07:00
Yehuda Katz
4bf516e072 More perf work:
* Move #set_cookie and #delete_cookie inline to optimize. These optimizations should
    almost certainly be sent back upstream to Rack. The optimization involves using
    an ivar for cookies instead of indexing into the headers each time.
  * Was able to use a bare Hash for headers now that cookies have their own joining
    semantics (some code assumed that the raw cookies were an Array).
  * Cache blankness of body on body=
  * Improve expand_cache_key for Arrays of a single element (common in our case)
  * Use a simple layout condition check unless conditions are used
  * Cache visible actions
  * Lazily load the UrlRewriter
  * Make etag an ivar that is set on prepare!
2009-08-11 15:03:53 -07:00
Yehuda Katz
0adbeeb0c9 Got overhead down from 127 to 85. All tests pass:
* Tentatively replaced HeaderHash with SimpleHeaderHash, which does not preserve
    case but does handle converting Arrays to Strings in to_hash. This requires
    further discussion.
  * Moved default_charset to ActionDispatch::Response to avoid having to hop over
    to ActionController. Ideally, this would be a constant on AD::Response, but
    some tests expect to be able to change it dynamically and I didn't want to change
    them yet.
  * Completely override #initialize from Rack::Response. Previously, it was creating
    a HeaderHash, and then we were creating an entirely new one. There is no way to
    call super without incurring the overhead of creating a HeaderHash.
  * Override #write from Rack::Response. Its implementation tracks Content-Length,
    and doing so adds additional overhead that could be mooted if other middleware
    changes the body. It is more efficiently done at the top-level server.
  * Change sending_file to an instance_variable instead of header inspection. In
    general, if a state is important, it should be set as a property of the response
    not reconstructed later.
  * Set the Etag to @body instead of .body. AS::Cache.expand_cache_key handles
    Arrays fine, and it's more efficient to let it handle the body parts, since
    it is not forced to create a joined String.
  * If we detect the default cache control case, just set it, rather than setting
    the constituent parts and then running the normal (expensive) code to generate
    the string.
2009-08-11 15:03:53 -07:00
Yehuda Katz
9e62d6d1c0 Tentatively accept the ":as or :object, but not both" solution 2009-08-11 15:03:53 -07:00
Yehuda Katz
945a7df9f8 Make large_collection 1,000 partials 2009-08-11 15:03:53 -07:00
Yehuda Katz
4945d82239 Further experimentation. Was able to cut the cost of rendering 100 partials in a collection in half.
To discuss: What are the desired semantics (if any) for layouts in a collection. There are no
  tests for it at present, and I'm not sure if it's needed at all.

  Deprecated on this branch: `object` pointing at the current object in partials. You can still
  use the partial name, or use :as to achieve the same thing. This is obviously up for discussion.
2009-08-11 15:03:53 -07:00
Yehuda Katz
bef7576c09 Add a few more benches 2009-08-11 15:03:53 -07:00
Yehuda Katz
02d9dd9000 Add some more caching to the lookup 2009-08-11 15:03:52 -07:00
Yehuda Katz
04d4537cd4 This change causes some failing tests, but it should be possible to make them pass with minimal performance impact. 2009-08-11 15:03:52 -07:00
Emilio Tagua
b68ef73344 Merge commit 'rails/master' 2009-08-11 12:41:49 -03:00
Pratik Naik
0a558b36eb Add tests for hm:t#push failures 2009-08-11 02:37:04 +01:00
Emilio Tagua
8c3a6f871e Merge commit 'rails/master' 2009-08-10 20:51:05 -03:00
Bryan Helmkamp
d15ddf04ec Allow delegating to nil, because the method might actually exist on it 2009-08-10 18:48:38 -05:00
Emilio Tagua
10af9fae4a Merge commit 'rails/master' 2009-08-10 18:19:24 -03:00
Emilio Tagua
0e2fbd80e2 Merge commit 'rails/master'
Conflicts:
	activerecord/lib/active_record/calculations.rb
	activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
	activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
2009-08-10 18:07:33 -03:00
Pratik Naik
d0f891ae02 Rewrite hm:t#create tests using assert_no_difference and assert_difference 2009-08-10 21:30:44 +01:00
Pratik Naik
ad28e0037b Remove unnecessary scoping for creating hm:t join record 2009-08-10 21:20:01 +01:00
Pratik Naik
50b83984f1 Remove unnecessary scoping and validation checks from hm:t#create 2009-08-10 21:06:49 +01:00
Pratik Naik
d9c4087a9e Unify hm:t#create and create! implementation 2009-08-10 21:02:06 +01:00
Joshua Peek
f97dae5ebe Extract common dirty tracking methods in AMo 2009-08-10 13:51:48 -05:00
Joshua Peek
391f978acd AMo overrides alias_attribute and manages aliasing all known attribute method matchers 2009-08-10 11:58:44 -05:00
Joshua Peek
d574cb31f0 Centralize attr method name concatenation in AttributeMethodMatch 2009-08-10 11:53:10 -05:00
José Valim
5f7cfffc53 Use less strict rules in generators lookup, so people can lay their generators wherever they want. 2009-08-10 18:29:20 +02:00
Arthur Zapparoli
55b5cf586a Fixed typo in test name and CHANGELOG [#3017 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-10 16:13:18 +01:00
Pratik Naik
e202c6c814 Move :with/:without check outside the method generated by validates_format_of 2009-08-10 15:24:48 +01:00
Elliot Winkler
cccb0e6b93 Add validates_format_of :without => /regexp/ option [Elliot Winkler, Peer Allan]
[#430 state:resolved]

  Example :

    validates_format_of :subdomain, :without => /www|admin|mail/

Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-10 15:22:31 +01:00
Emilio Tagua
eb3ae44cca Merge commit 'rails/master'
Conflicts:
	activerecord/lib/active_record/migration.rb
2009-08-10 10:40:11 -03:00
Kamal Fariz Mahyuddin
600a89f208 find_cmd should return the full path of the db command
[#1488 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-10 00:04:37 -07:00
codeape
8c32248acb Introduce grouped_collection_select helper.
[#1249 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 23:58:43 -07:00
Erik Ostrom
7d16e94d82 Correctly handle offsets in Multibyte::Chars#index and #rindex.
The offset in codepoints was being passed directly to the wrapped string's index/rindex method. Now we translate the offset into bytes first.

[#3028 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 23:30:41 -07:00
Cristi Balan
3e35ba2481 Add tests for scoping schema_migrations index by global table prefix and suffix
[#1543 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 22:59:04 -07:00
Tim Peters
7eaed4fefe Use table prefix and suffix for schema_migrations index.
[#1543 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 22:56:37 -07:00
Jeff Dean
22f3398253 Introduce validates_with to encapsulate attribute validations in a class.
[#2630 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 22:47:56 -07:00
Fabien Jakimowicz
797588543e Add support for errors in JSON format.
[#1956 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 22:40:20 -07:00
Jay Pignata
793a9f122f Fixing isolation test
[#3022 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 22:33:23 -07:00
Daniel Sheppard
b3381cacaf Fix that JSON parser fails to read escaped backslashes.
[#973 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 22:30:44 -07:00
Leonardo Borges
0c391b46fb PostgreSQL: XML datatype support
[#1874 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 22:24:54 -07:00
Jaime Bellmyer
9c1bac0b7f raises an exception on habtm join table inserts if join table contains a primary key. Caches this check to save time on subsequent inserts.
[#2086 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 22:19:18 -07:00
Jaime Bellmyer
f0602214e0 raises exception (ActiveRecord::ConfigurationError with message) on habtm association creation if join table contains a primary key
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 22:17:39 -07:00
Morgan Schweers
d2d464e26e Fix that creating a table whose primary key prefix type is :table_name generates an incorrectly pluralized primary key.
[#872 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 21:57:56 -07:00
Jeremy Kemper
47f7c936a2 Fix test dependency on taggings 2009-08-09 21:30:55 -07:00
Gabe da Silveira
7e3364ac46 Fix that counter_cache breaks with has_many :dependent => :nullify.
[#1196 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 21:18:16 -07:00
Jatinder Singh
5704ecffad AR should respect default values for MySQL BINARY and VARBINARY columns.
[#1273 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 21:05:26 -07:00
Joshua Peek
734e903af5 Deprecate router generation "best match" sorting 2009-08-09 22:53:16 -05:00
Prem Sichanugrist
82dd725fc1 Fix that irregular plural inflections should not be double-pluralized: 'people'.pluralize should return 'people' not 'peoples'.
[#1183 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 20:28:57 -07:00
Joshua Nichols
84d24cdae8 Only load db/schema.rb if it exists; otherwise, display a message to run db:migrate or remove active_record in environment.rb.
[#3012 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 20:18:56 -07:00
Jeremy Kemper
279b785839 pare down core_ext dependency 2009-08-09 19:32:38 -07:00
Erik Ostrom
4dda9b644d Add rindex to ActiveSupport::Multibyte::Chars.
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 19:05:19 -07:00
railsbob
e06a0b03c8 has_many :through create should not raise validation errors
[#2934 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 18:44:45 -07:00
jeem
e4ceea3795 make private_and_public_methods unmemoizable [#2372 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-08-09 20:04:48 -05:00
Andrew Moreland
ca92d44e76 Support deep-merging HashWithIndifferentAccess.
[#2732 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 17:32:04 -07:00
Max Lapshin
0af4b0755f Make sure link_to generates the form with the specified :href if any [#2254 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-10 00:58:40 +01:00
Tristan Dunn
a0f69722be Allow ho:through#build when the owner is a new record [#1749 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-10 00:46:16 +01:00
Tristan Dunn
0472839d68 Prevent overwriting of table name in merging SQL conditions [#2949 state:resolved] 2009-08-10 00:41:36 +01:00
Gabe da Silveira
00d6c76660 Enable has_many :through for going through a has_one association on the join model [#2719 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-10 00:30:44 +01:00
Arthur Zapparoli
810b59a2a9 Removed duplicated tests [#3026 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-10 00:08:40 +01:00
Arthur Zapparoli
ce2422ceaf Model#human_attribute_name now accept symbols [#3025 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
2009-08-09 23:55:54 +01:00
Matt Duncan
920ef4e6f3 Fixed to_label_tag to accept id attribute without changing for attribute [#2660 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
2009-08-09 23:54:21 +01:00
Grzegorz Forysinski
e391c7a97c Ensure ActiveResource#load works with numeric arrays [Grzegorz Forysinski, Elad Meidar]
[#2305 state:resolved]

Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-09 23:39:38 +01:00
Vladimir Meremyanin
08ec22054f Make sure association conditions work with :include and :joins [#358 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-09 23:10:23 +01:00
Jordan Brough
916b18adeb Active Resource recognizes 410 as Resource Gone now [#2316 state:resolved] [Jordan Brough, Jatinder Singh]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-09 22:56:32 +01:00
Tristan Dunn
1af9bd58a0 No longer require database name for MySQL to allow cross database selects.
[#1122 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 14:35:57 -07:00
Hugo Peixoto
202b091373 Added both the documentation and a test case for the collection path name customization feature.
[#1218 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 14:26:36 -07:00
Bence Nagy
e1b73b9752 path_names could be used to customize collection actions too
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 14:26:36 -07:00
Jatinder Singh
1fc1986d6d Make ActiveResource#exists? work [#3020 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-09 22:24:57 +01:00
Joshua Nichols
0ec64bea92 Added back support for destroying an association's object by id. [#2306 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
2009-08-09 21:46:52 +01:00
José Valim
ae47f7575d Improving test coverage for Range#sum [#2489]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-09 21:46:52 +01:00
David Burger
1382f4de1f Fix that Hash#to_xml and Array#to_xml shouldn't modify their options hashes [#672 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-09 21:46:52 +01:00
Hugo Peixoto
870750ed4b With multiparameter date attributes, the behaviour when empty fields are present is now coherent with the one described in the date_select documentation.
[#1715 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 13:39:47 -07:00
Roy Nicholson
3e0951632c Add ability to set SSL options on ARes connections.
[#2370 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 13:24:05 -07:00
Elise Huard
c5896bfd84 validate uniqueness with limit in utf8
[#2653 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 12:50:04 -07:00
Jeremy Kemper
87e2c1895f Fix failing dependencies test relying on . being in LOAD_PATH 2009-08-09 12:40:16 -07:00
Jeremy Kemper
d0bcf51191 Extract repetitive method 2009-08-09 12:14:25 -07:00
Jeremy Kemper
635f68dca9 Uses &:foo 2009-08-09 12:11:50 -07:00
Jeremy Kemper
db42f1bf67 Fix standalone test missing developer fixture 2009-08-09 11:58:07 -07:00
Hugo Peixoto
ff60ec469f Added a uniqueness validation test that uses diacritics.
[#2883 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 11:51:58 -07:00
Jeremy Kemper
c2f9c42719 Fix that RedCloth shouldn't be required to run tests 2009-08-09 11:02:34 -07:00
Pratik Naik
bb1e177691 .gitignore activesupport/test/fixtures/isolation_test 2009-08-09 18:18:47 +01:00
Pratik Naik
60bed59fbf Remove unnecessary &block from Range#sum and add tests for (num..float).sum 2009-08-09 18:15:20 +01:00
Pratik Naik
97a5c7a516 Make enumerable test run stand alone 2009-08-09 18:13:03 +01:00
José Valim
e0adfa82c0 Optimize Range#sum only for integers [#2489] 2009-08-09 18:05:58 +01:00
Gabe da Silveira
1185500ff0 Remove unused routeset method routes_for_controller_and_action in favour for routes_for [#3023 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-09 18:02:35 +01:00
jastix
a1c289dbe4 Require test/unit in the generated test_helper for plugin [#1878 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-09 17:56:41 +01:00
Matt Conway
1c9b3aabdd Allow connect_timeout, read_timeout and write_timeout settings for MySQL [#2544 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-09 17:13:22 +01:00
railsbob
076ca48bd6 Ensure hm:t#find does not assign nil to :include [#1845 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-09 17:02:19 +01:00
Felipe Talavera
654568e71b Allow to configure trusted proxies via ActionController::Base.trusted_proxies [#2126 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-09 16:56:18 +01:00
rizwanreza
7dbb2b6f83 Support passing Redcloth options via textilize helper [#2973 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-09 16:41:09 +01:00
Mike Breen
7d254b5d74 Serialized attributes should only be saved with partial_updates when the serialized attribute is present [#2397 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-09 16:34:53 +01:00
Pratik Naik
96b575d6dc Get rid of parenthesize argument warnings 2009-08-09 16:00:53 +01:00
José Valim
1ea7a00bc4 Refactored create_migration on model generator.
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-09 15:57:59 +01:00
Hugo Peixoto
3545d6b0b2 Setting usec (and nsec for Ruby 1.9) on Time#end_of_* methods [#1255 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
2009-08-09 15:56:37 +01:00
José Valim
1bd4d1c674 Optimize Range#sum to use arithmetic progression when a block is not given [#2489].
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-09 15:56:10 +01:00
Michael Siebert
d811864e88 Fix deprecating =-methods by using send [#2431 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
2009-08-09 15:54:56 +01:00
José Valim
32bde66aa6 Make http digest work with different server/browser combinations
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-09 15:53:52 +01:00
Dmitry Ratnikov
314ba0433f Changed to use klass instead of constantizing in assign_ids generated method
[#260 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 02:52:06 -07:00
Dmitry Ratnikov
f16008afdd Modified Rich Bradley's test-case to fail as part of suite and with a reasonable message
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 02:40:27 -07:00
Hugo Peixoto
22b38c18c6 Fixed generating a namespaced model with table pluralization turned off. Add tests for namespaced model generation.
[#767 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-09 02:38:35 -07:00
Jeremy Kemper
a0caad5255 Setting connection timeout also affects Net::HTTP open_timeout.
[#2947 state:resolved]
2009-08-09 02:28:00 -07:00
Yehuda Katz
60219a13da Add a .tmp path 2009-08-09 05:52:49 -03:00
Rich Bradley
9bb8ef9ede Fix for nested :include with namespaced models.
[#260 state:committed]
2009-08-09 00:31:46 -07:00
Yehuda Katz
0d53994701 Make bench harness produce output that is easier to compare 2009-08-09 04:12:09 -03:00
Yehuda Katz
e8849203dc Updates to benchmark harness. 2009-08-09 04:12:09 -03:00
Yehuda Katz
b05c951907 Temporary fix to get our LoadError monkey-patch working with newer JRuby. We should probably remove MissingSourceFile and just monkey-patch LoadError instead of overriding LoadError.new. 2009-08-09 04:12:09 -03:00
Yehuda Katz
e58b2769cf Experimental: Improve performance of ActionView by preventing method cache flushing due to runtime Kernel#extend:
* The helper module adds a new _helper_serial property onto AbstractController subclasses
  * When #helper is used to add helpers to a class, the serial number is updated
  * An ActionView subclass is created and cached based on this serial number.
    * That subclass includes the helper module from the controller
    * Subsequent requests using the same controller with the same serial will result in
      reusing that subclass, rather than being forced to take an action (like include
      or extend) that will result in a global method cache flush on MRI and a flush 
      of the entire AV class' cache on JRuby.
  * For now, this optimization is not applied to the RJS helpers, which results in
    a global method cache flush in MRI and a flush of the JavaScriptGenerator class in
    JRuby only when using RJS.
    * Since the effects are limited to using RJS, and would only affect JavaScriptGenerator
      in JRuby (as opposed to the entire view object), it seems worthwhile to apply this
      now.
  * This resulted in a significant performance improvement. I will have benchmarks
    in the next day or two that show the performance impact of the last several
    commits.
  * There is a small chance this could break existing code (although I'm not sure how).
    If that happens, please report it immediately.
2009-08-09 04:12:09 -03:00
Yehuda Katz
10eaba8f41 Cache controller_path on the AV instance to avoid needing to make additional calls back into the controller for each attempt (this was done because these calls were adding up significantly in partial rendering and showing up on profiles) 2009-08-09 04:12:09 -03:00
Yehuda Katz
e28e061165 Use response_body rather than performed? 2009-08-09 04:12:09 -03:00
Yehuda Katz
964bc4e855 Rendering a template from ActionView will default to looking for partials only in the current mime type.
* The old behavior was tested only as a side-effect of a different test--the original tests remain;
    a new template in the XML mime was added.
  * If you are relying on the current behavior and object to this change, please participate in
    http://groups.google.com/group/rubyonrails-core/browse_thread/thread/6ef25f3c108389bd
2009-08-09 04:12:08 -03:00
Yehuda Katz
33f01fb1f6 Cache some more things to improve partial perf 2009-08-09 04:12:08 -03:00
Yehuda Katz
0ab40b039b Went from 25% slower partials (vs. 2.3) to 10% faster. More to come. 2009-08-09 04:12:08 -03:00
Yehuda Katz
930d235981 Support a warmup for JRuby 2009-08-09 04:12:08 -03:00
Yehuda Katz
b57d94c187 Update minimal.rb to benchmark partials 2009-08-09 04:12:08 -03:00
Yehuda Katz
d7415f792c Clean up partial object some more; replace passing around a block to a single block ivar 2009-08-09 04:12:08 -03:00
Yehuda Katz
bf412c9ec6 Clean up initializer and some of the internals of PartialRenderer 2009-08-09 04:12:08 -03:00
Jeremy Kemper
b5b1576aa9 Ruby 1.9 compat: can't implicitly set instance var using block arg 2009-08-08 23:04:25 -07:00
Tristan Dunn
791cccaeda Don't define a default primary key in the schema dumper.
[#1908 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-08 19:31:35 -07:00
Rob
4b7f95eb8b Fix binary fixture test on Windows
[#2597 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-08 19:18:38 -07:00
Hugo Peixoto
d8041538dd MySQL: fix diacritic uniqueness test by setting the default character set and collation to utf8/utf8_unicode_ci
[#2883 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-08 19:02:29 -07:00
Michael Koziarski
b97d293374 Merge branch 'patches' 2009-08-09 13:10:14 +12:00
Michael Koziarski
370bf1401a Don't call additional methods on builders passed to the atom_feed helper.
Additionally, actually test that the atom_feed helper works with :xml as an option.

[#1836 state:committed]
2009-08-09 13:10:08 +12:00
Jon Wood
271baf235d Add :redirect to the testable RJS statements [#2612 state:resolved]
Example :
  assert_select_rjs :redirect, root_path

Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-09 02:00:15 +01:00
Pratik Naik
89c8affe47 Use Pathname for checking if sqlite path is absolute 2009-08-09 01:54:08 +01:00
bastilian
071f48b716 Make sure db:drop doesn't fail when sqlite db is given by an absolute path [#1789 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-09 01:54:08 +01:00
Marc-Andre Lafortune
29096268cc Enumerable#sum now works will all enumerables, even if they don't respond to :size
[#2489 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-08 17:51:09 -07:00
Matt Duncan
3b3798506b Adding :from scoping to ActiveRecord calculations
Signed-off-by: Michael Koziarski <michael@koziarski.com>
[#1229 state:committed]
2009-08-09 12:43:07 +12:00
Matt Duncan
45f5bdfbc7 Adding :from scoping to ActiveRecord calculations
Signed-off-by: Michael Koziarski <michael@koziarski.com>
[#1229 state:committed]
2009-08-09 12:33:33 +12:00
Jan Schwenzien
1f6afe4a74 Fix HTTP basic authentication for long credentials [#2572 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-09 01:28:43 +01:00
Steve St. Martin
618771beb5 Update truncate documentation / examples to more clearly demonstrate its actual behavior
[#3016 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-08 17:16:26 -07:00
Michael Koziarski
df745ed805 Depend on rubygems 1.3.2
Also move the min_version definition up a line so it's present in the rescue block down below.
2009-08-09 11:11:34 +12:00
Adam Keys
5632b36701 Fix exclusive range patch to use begin/end instead of min/max. [#2981 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-08 23:42:18 +01:00
Matt Duncan
bee3e099bd Users can now pass :branch for git plugins and :revision for subversion plugins
[#2352 status:resolved]

Signed-off-by: José Valim <jose.valim@gmail.com>
2009-08-08 23:42:18 +01:00
José Valim
3ea091e1cc Improved coverage for session_migration generator. [#3008 status:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-08 23:42:18 +01:00
Elad Meidar
c0f828ca4f Fixed reference to AR::SessionStore::Session.table_name in session migrations
Signed-off-by: José Valim <jose.valim@gmail.com>
2009-08-08 23:42:18 +01:00
Marshall Huss
4d1552810f HTTP proxy support
[#2133 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-08 15:33:55 -07:00
Emilio Tagua
9520143159 Merge commit 'rails/master'
Conflicts:
	activerecord/test/cases/adapter_test.rb
	activerecord/test/cases/method_scoping_test.rb
2009-08-08 19:14:35 -03:00
rizwanreza
5786395760 Allow content_tag options to take an array [#1741 state:resolved] [rizwanreza, Nick Quaranto]
Example:
  content_tag('p', "limelight", :class => ["song", "play"])
  # => <p class="song play">limelight</p>

Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-08 22:21:32 +01:00
Pratik Naik
761283ffdb Ensure hm:t#create/create! throws ActiveRecord::RecordNotSaved when the owner is new 2009-08-08 21:51:33 +01:00
Dan Croak
00544c778f Add test ensuring redirect_to uses the given protocol [#2886]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-08 20:48:39 +01:00
Pratik Naik
6464d76feb DRY migration's rollback/forward methods 2009-08-08 20:47:14 +01:00
Pratik Naik
c6fe49b009 Simplyfy validates_length_of and remove puts 2009-08-08 19:08:39 +01:00
jzw
5ab94b2595 validates_length_of with maximum should allow nil [#2309 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
2009-08-08 19:08:13 +01:00
José Valim
c34d6279a0 Allow radio buttons to work with booleans.
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-08 18:02:07 +01:00
rizwanreza
1191e3ffaf Add :include_blank option for select_tag [#1987 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-08 17:58:27 +01:00
Pratik Naik
ed8a0a1c23 Ensure db:drop:all doesn't error out on exception [#2997 state:resolved] [Anthony Caliendo] 2009-08-08 17:53:51 +01:00
Cristi Balan
7f84f14efa Add rake db:forward - opposite of db:rollback [#768 state:resolved]
Example:
  rake db:forward # performs the next migration
  rake db:forward STEP=4 # performs the next 4 migrations

Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-08 17:41:43 +01:00
Niklas Holmgren
c284412b14 Polymorphic routes generates collection URL from model class [#1089 state:resolved]
Signed-off-by: Dan Pickett <dpickett@enlightsolutions.com>
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-08 17:00:29 +01:00
Yehuda Katz
ad98827a78 Merge commit 'jose/responder' 2009-08-08 12:54:02 -03:00
José Valim
016ed9b429 Added rubygems to generators load_paths, but we only load generators from gems that are alraedy activated. This fixes the version problem and avoid silly conflicts. 2009-08-08 17:48:07 +02:00
José Valim
469d89dd44 Rename Rails::Generators::ActionORM to Rails::Generators::ActiveModel. 2009-08-08 17:48:07 +02:00
José Valim
6e0ac748e4 Renamed ActionController::Renderer to ActionController::Responder and ActionController::MimeResponds::Responder to ActionController::MimeResponds::Collector. 2009-08-08 17:48:07 +02:00
Yehuda Katz
efcfce50c4 Fixes "Cached fragment hit" written to log even if fragment is not cached (Erik Andrejko) [#2917 state:resolved] 2009-08-08 12:46:44 -03:00
Bas Van Klinkenberg
0fbeaa98e4 Fixed a bug in JSON decoding with Yaml backend, where a combination of dates, escaped or unicode encoded data and arrays would make the parser fail with a ParseError exception. [#2831 state:resolved]
Signed-off-by: Yehuda Katz <wycats@gmail.com>
2009-08-08 12:44:41 -03:00
Yehuda Katz
d0301e13f4 First pass at making partial rendering an Object. More cleanup to come. 2009-08-08 12:44:26 -03:00
Steve St. Martin
a8645593a4 remove duplicate call to stringify_keys [#2587 status:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
2009-08-08 13:56:41 +02:00
Wolfram Arnold
73f2d37505 Add test to verify that the new :inverse_of association option will indeed fix the validation problem for a belongs_to relationship that validates_presence_of the parent, when both the parent and the child are new (in-memory) records. Also check that this works when the parents adds child via nested_attributes_for.
Lastly, add a require 'models/pet' to association_validation_test.rb, so that test can be run independently (was failing due to that missing dependency). [#2815 status:resolved]

Signed-off-by: José Valim <jose.valim@gmail.com>
2009-08-08 13:07:49 +02:00
Eric Davis
fbe6c3c195 Adds a :file delivery_method to save email to a file on disk
Signed-off-by: Michael Koziarski <michael@koziarski.com>
[#2438 state:committed]
2009-08-08 16:32:17 +12:00
Josh Sharpe
54e7f5ba43 Tidy up the AR tests, removing duplicates and making tests clearer / more focussed.
Signed-off-by: Michael Koziarski <michael@koziarski.com>

[#2774 state:committed]
2009-08-08 14:53:35 +12:00
Mike Breen
e8dc151396 Add option to routes task to target a specific controller with CONTROLLER=x.
Signed-off-by: Michael Koziarski <michael@koziarski.com>
[#2928 state:committed]
2009-08-08 14:38:33 +12:00
Matt Duncan
5fdc33c1a3 Default sent_on time to now in ActionMailer
Signed-off-by: Michael Koziarski <michael@koziarski.com>
[#2607 state:committed]
2009-08-08 14:11:32 +12:00
wmoxam
98450fd168 Fix number_to_precision rounding error [#2071 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-08 02:05:10 +01:00
Jeremy Kemper
43b406bdb0 Ruby 1.9 compat: fix route recognition encoding test 2009-08-07 17:16:34 -07:00
Jeremy Kemper
12c271d1d2 Ruby 1.9.2: implicit argument passing of super from method defined by define_method() is not supported 2009-08-07 17:04:56 -07:00
Jeremy Kemper
019ed5a7c0 Don't rely on T::U::TestCase#name 2009-08-07 17:04:19 -07:00
Jeremy Kemper
482a6f716f Ruby 1.9.2: Object#id is gone now 2009-08-07 16:41:04 -07:00
Emilio Tagua
ae9e1e9f6d Removed unused methods. 2009-08-07 17:55:36 -03:00
Emilio Tagua
d469ad8a49 Removed useless OR. 2009-08-07 16:41:58 -03:00
Brendan Schwartz
201387496e Ruby 1.9 compat: fix for SSL in Active Resource
[#1272 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-07 12:24:02 -07:00
Jeremy Kemper
06afa48c8c Merge branch 'oracle_enhanced' 2009-08-07 11:58:45 -07:00
Yehuda Katz
010a0c92eb Rename find_by_parts and find_by_parts? to find and exists? 2009-08-07 15:00:12 -03:00
Emilio Tagua
6b5fab9300 Don't scope order in calculations.' 2009-08-07 14:33:35 -03:00
Emilio Tagua
04abe538ac Merge commit 'rails/master' 2009-08-07 13:27:36 -03:00
Emilio Tagua
945ef58533 More work on removing plain SQL from associations and use ARel instead. 2009-08-07 13:16:34 -03:00
José Valim
55575e2165 Allow rails templates relative to the current path to be given. 2009-08-07 17:17:51 +02:00
José Valim
aed135d3e2 Renamed presenter to renderer, added some documentation and defined its API. 2009-08-07 17:17:51 +02:00
José Valim
1fd65c80fc Encapsulate respond_with behavior in a presenter. 2009-08-07 17:16:16 +02:00
José Valim
7034272354 Add destroyed? to ActiveRecord, include tests for polymorphic urls for destroyed objects and refactor mime responds tests and documentation. 2009-08-07 17:16:16 +02:00
José Valim
f59984cc81 Add nagivational behavior to respond_with. 2009-08-07 17:16:15 +02:00
José Valim
c44f7e39f4 Updated vendored thor to 0.11.5 2009-08-07 17:16:15 +02:00
José Valim
e45e120af9 Merge branch 'master' of git://github.com/rails/rails into old 2009-08-07 17:13:44 +02:00
Yehuda Katz
bfe58ac05d Get all ActionController partial rendering to use ActionView's partial code. Consequences:
* It is not possible to always pre-determine the layout before going to ActionView.
    This was *already* broken for render :partial => @object, :layout => true. This is
    now handled by overriding render_to_body in layouts.rb and manually injecting the
    partial's response. This needs to be done in ActionController since ActionController
    knows enough to get _layout_for_option. There is probably a better abstraction here.
  * As a result, all partial rendering can correctly restrict their layouts to the mime
    type of the rendered partial. This could have previously caused a bug in some edge cases.
  * If other layout-like options are added, they might need to add special code for the
    case of render :partial. We should try to think of an alternate solution, if possible,
    but this works for the cases we know of now.
2009-08-07 11:33:54 -03:00
José Valim
dac8927b05 Merge branch 'master' of git://github.com/rails/rails into old 2009-08-07 16:10:17 +02:00
Yehuda Katz
606e950ccb Whitespace 2009-08-07 06:32:54 -03:00
Yehuda Katz
d94ba11295 Continue reworking the partial path.
* TODO: Review ActionController calling render_template for certain partials.
    Might we be able to save logic by always delegating to AV's render_partial?
2009-08-07 06:32:17 -03:00
Yehuda Katz
493d84ce2f Modify various partial methods to carry along the block that can be passed in with render
* _render_single_template, which renders a template without layout
  * _render_partial_unknown_type, which renders a partial of unknown type
    (the entry method for most partial rendering; supports strings, objects, and collections)
  * _render_partial_object, which renders a partial for a single object.
  * extracted _render_partial_path so it can be used to render the spacer without going
    through the public render :partial
2009-08-07 05:40:01 -03:00
Yehuda Katz
59e475e3a6 Some more AV work:
* rename _render_partial to _render_partial_unknown_type to reflect that for this call, 
  	we don't know the type.
  * Merge _render_partial_with_block and _render_partial_with_layout to _render_partial
    * TODO: Check to see if any more logic can be shared
    * TODO: See about streamlining block path so we can get rid of @_proc_for_layout
  * Remove @exempt_from_layout as it is no longer needed
2009-08-07 03:48:28 -03:00
Yehuda Katz
0612fd0f09 Replace _render_template_with_layout with _render_template since the layout is optional 2009-08-07 03:18:45 -03:00
Yehuda Katz
b3e199f698 Some more AV refactoring:
* remove no longer used _array_like_objects
  * _render_content_with_layout renamed to _render_content since layout it optional
  * remove check for optional layout before _render_content
2009-08-07 02:46:21 -03:00
Yehuda Katz
8534c5bf19 Start cleaning up partial path 2009-08-07 01:51:50 -03:00
Yehuda Katz
9b506484f1 This is handled by the resolver now 2009-08-07 01:51:32 -03:00
Yehuda Katz
70a440aa27 Clean up render @object a bit more. 2009-08-07 00:52:13 -03:00
Yehuda Katz
4ac9d391d3 Improve a path in _render_partial 2009-08-06 23:42:11 -03:00
Yehuda Katz
0435178ff8 Remove file that doesn't seem to be used anymore 2009-08-06 22:57:42 -03:00
Yehuda Katz
71638e6760 Move AbstractController to a top-level component 2009-08-06 22:51:24 -03:00
Yehuda Katz
16c01224cb ActionController::Metal#to_rack converted to #to_a to match normal rack convention 2009-08-06 20:05:14 -03:00
Yehuda Katz
70d779aaea Update _render_options to reflect the fact that they're public 2009-08-06 20:03:59 -03:00
Yehuda Katz
bd6b61be88 Rename /base to /metal and make base.rb and metal.rb top-level to reflect their module locations 2009-08-06 19:52:11 -03:00
Yehuda Katz
52798fd479 rename ActionController::Http to ActionController::Metal at Josh's suggestion 2009-08-06 19:50:22 -03:00
Yehuda Katz
af375a5eb3 Replace _action_view with view_context to reflect that it is public and that it does not need to be an ActionView instance 2009-08-06 19:45:40 -03:00
Yehuda Katz
f0945409d9 replace _render_*_from_controller with render_* as they are intended to be public 2009-08-06 19:43:28 -03:00
Emilio Tagua
4e86602e11 Merge commit 'rails/master' 2009-08-06 18:57:47 -03:00
Raimonds Simanovskis
5f0c425e8d Some databases (e.g. Oracle) does not allow "AS" between table name and table alias name, for others it is optional 2009-08-06 23:41:00 +03:00
Raimonds Simanovskis
53be10c5e6 fixed test_foreign_key_violations_are_translated_to_specific_exception to work with Oracle 2009-08-06 23:41:00 +03:00
Raimonds Simanovskis
44a7ef85eb modifications to Oracle connection.rb setup 2009-08-06 23:41:00 +03:00
Raimonds Simanovskis
9b2309c4a8 fix schema_dumper_test for Oracle as it supports precision up to 38 2009-08-06 23:41:00 +03:00
Raimonds Simanovskis
94e761551b changed default connection to localhost orcl database 2009-08-06 23:41:00 +03:00
Raimonds Simanovskis
8afab34a76 always sort lists by id before comparison to avoid errors because of different sorting of same results (on Oracle database) 2009-08-06 23:41:00 +03:00
Raimonds Simanovskis
8f34c96614 support for assert_queries when using Oracle adapter
initialize $KCODE to UTF8 when JRuby is used
2009-08-06 23:41:00 +03:00
Raimonds Simanovskis
090ec47bec added Subject#after_initialize to be the same as Topic#after_initialize 2009-08-06 23:41:00 +03:00
Raimonds Simanovskis
01a4e07c36 Oracle can store integers with any :limit 2009-08-06 23:41:00 +03:00
Raimonds Simanovskis
04e6bc1134 Oracle adapter recourns count() as numeric (not string) 2009-08-06 23:40:59 +03:00
Raimonds Simanovskis
5d0dece6a6 Oracle adapter gets Time or DateTime value already with timezone 2009-08-06 23:40:59 +03:00
Raimonds Simanovskis
ee654e54c4 Oracle generates different ORDER BY fragment 2009-08-06 23:40:59 +03:00
Raimonds Simanovskis
3a1cbc5c3b Oracle adapter returns Time value for DATE columns 2009-08-06 23:40:59 +03:00
Raimonds Simanovskis
42fd2a3b16 added :order to find :all as otherwise Oracle tests were failing 2009-08-06 23:40:59 +03:00
Raimonds Simanovskis
c3e1ef0b40 Oracle needs sequence value for primary key in INSERT statement 2009-08-06 23:40:59 +03:00
Raimonds Simanovskis
a12358b3a5 Oracle adapter returns numeric (not string) value after SUM 2009-08-06 23:40:59 +03:00
Raimonds Simanovskis
d40e3ea936 Oracle saves empty string as NULL 2009-08-06 23:40:59 +03:00
Raimonds Simanovskis
71c32d3cac 1=2 is invalid expression in Oracle SELECT 2009-08-06 23:40:59 +03:00
Raimonds Simanovskis
5666a3ad06 added :order option to find :first methods and associations as otherwise Oracle tests were failing
Oracle stores '' string as NULL
Oracle cannot have identifiers larger than 30 characters
added missing fixtures to test setup method
2009-08-06 23:40:59 +03:00
Raimonds Simanovskis
963570b51c added additional objects necessary for OracleAdapter specific tests
if OracleAdapter is used then use VARCHAR2(4000) instead of CLOB datatype as CLOB data type has many limitations in
Oracle SELECT WHERE clause which causes many unit test failures
2009-08-06 23:40:59 +03:00
Raimonds Simanovskis
04fea8a07b modified native_oracle/connection.rb to run it with oracle_enhanced adapter 2009-08-06 23:40:58 +03:00
Rob Christie
7e560d0b0d Fixed adapter test cases that were failing in oracle because the asserts were looking for the presence of offset and limit which are not available in oracle. Changed the tests to check that the sql injection is not present in the output so that the tests are database adapter agnostic. 2009-08-06 23:40:58 +03:00
Jeremy Kemper
7f717abb0e Merge branch 'master' of git@github.com:rails/rails 2009-08-05 17:09:56 -07:00
Akira Matsuda
230d43fbf5 Ruby 1.9.2 compat: Array#* uses to_str instead of to_s to join values since Ruby 1.9.2
[#2959 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-05 17:08:02 -07:00
Pratik Naik
5ce3831faf Use send instead of instance_eval 2009-08-06 00:11:28 +01:00
James Tucker
b7052b8dc3 Dont require thin as the thin rack adapter is now upstream
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-05 23:00:33 +01:00
Emilio Tagua
ae175a5354 Merge commit 'rails/master' 2009-08-05 14:52:07 -03:00
James Hill
cfd421daa2 Allow validations to use values from custom readers [#2936 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-08-05 11:45:01 -05:00
Matthew Rudy Jacobs
64268a0b06 Make sure javascript_include_tag/stylesheet_link_tag does not append ".js" or ".css" onto external urls [#1664 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-08-05 15:58:55 +01:00
Geoff Buesing
bfafe8c405 Revert "fallback_string_to_date sets Date._parse comp arg to true, so that strings with two-digit years, e.g. '1/1/09', are interpreted as modern years" [#2019 state:wontfix]
This reverts commit 55d1d12c32.
2009-08-05 08:26:12 -05:00
Joshua Peek
f8d3c72c39 Extract generic attribute method generation to AMo 2009-08-04 23:36:05 -05:00
Joshua Peek
64eecdd131 whitespace 2009-08-04 16:28:44 -05:00
Paul Gillard
bada18dc36 Added reset_attribute! method to ActiveRecord::AttributeMethods::Dirty which will reset an attribute to its original value should it have changed.
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-08-04 16:23:08 -05:00
Paul Gillard
c30a0ce3c8 Modified ActiveRecord::AttributeMethods to allow classes to specify attribute method prefixes and/or suffixes. Previously only suffixes were allowed.
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-08-04 16:19:19 -05:00
Joshua Peek
aad5a30bf2 Add simple support for ActiveModel's StateMachine for ActiveRecord 2009-08-04 11:03:57 -05:00
Matt Ganderup
55d1d12c32 fallback_string_to_date sets Date._parse comp arg to true, so that strings with two-digit years, e.g. '1/1/09', are interpreted as modern years [#2019 state:resolved] 2009-08-03 22:41:56 -05:00
Geoff Buesing
6f97ad07de quoted_date converts time-like objects to ActiveRecord::Base.default_timezone before serialization. This allows you to use Time.now in find conditions and have it correctly be serialized as the current time in UTC when default_timezone == :utc [#2946 state:resolved] 2009-08-03 22:03:47 -05:00
Emilio Tagua
f8eb4434d6 Added collection iteration to AR::Relation. 2009-08-03 14:15:47 -03:00
Emilio Tagua
31c83534d6 Don't use local vars before testing its conditional. 2009-08-03 13:59:34 -03:00
Emilio Tagua
62296a51c8 Merge commit 'rails/master' 2009-08-03 13:12:51 -03:00
Joshua Peek
9b68877897 Track generated attribute methods in a separate module 2009-08-02 21:06:35 -05:00
Yehuda Katz
b53f006901 Remove legacy processing and content_length
* convert_content_type! is handled by assign_default_content_type_and_charset!
  * set_content_length! should be handled by the endpoint server. Otherwise
    each middleware that modifies the body has to do the expensive work of
    recalculating content_length.
  * convert_language! appears to be legacy. There are no tests for this
  * convert_cookies! should be handled by the new HeaderHash in Rack
  * Use an integer for .status's internal representation to avoid needing to
    do String manipulation just to find out the status
2009-08-02 19:39:33 -04:00
Yehuda Katz
503ce1d01c Update cache_control to be a Hash of options that is used to build the header.
* Significantly simplifies setting and modifying cache control in other areas
2009-08-02 19:39:33 -04:00
Jeremy Kemper
f2a35723c8 Ruby 1.9: fix encoding for test_file_stream 2009-08-01 20:26:05 -07:00
Sava Chankov
ec94c2550d Ruby 1.9: fix Content-Length for multibyte send_data streaming
[#2661 state:resolved]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-08-01 20:25:59 -07:00
Jeremy Kemper
a606727606 Extract String#bytesize shim 2009-08-01 18:34:41 -07:00
Jeremy Kemper
cdf60e46cc SQLite: drop support for 'dbfile' option in favor of 'database.' 2009-08-01 18:22:12 -07:00
José Valim
072c87b532 Merge branch 'respond_with' 2009-07-31 21:49:29 +02:00
Emilio Tagua
3de59e916d Merge commit 'rails/master'
Conflicts:
	activerecord/lib/active_record/associations.rb
2009-07-31 16:21:07 -03:00
Emilio Tagua
c1cbf02e31 Added ActiveRecord::Relation tests. Allow Relation to accept conditional
hashes and arrays like #find does.
2009-07-31 16:08:22 -03:00
José Valim
b2d24baf79 Added tests for nested resources. 2009-07-31 20:56:53 +02:00
José Valim
5b7e81efec Allow respond_with to deal with http verb accordingly. 2009-07-31 11:59:05 +02:00
Joshua Peek
62fd1d3716 Start separating primary key concerns 2009-07-30 17:54:02 -05:00
Joshua Peek
ded3d97c5a Make sure we use send for the default attribute method body because the suffix maybe an invalid method name 2009-07-30 17:54:02 -05:00
Joshua Peek
1ae7eb5200 Make sure to reset defined methods after calling attribute_method_suffix 2009-07-30 17:54:02 -05:00
Joshua Peek
d599ea27c5 Move attribute_types_cached_by_default into attribute methods reading concern 2009-07-30 17:54:02 -05:00
Joshua Peek
89e9efcbe2 Don't need to pass attr_name to evaluate_attribute_method anymore 2009-07-30 17:54:01 -05:00
Joshua Peek
2c30c9fe6c Undefine id and let it automatically be generated 2009-07-30 17:54:01 -05:00
Joshua Peek
f8d2c77c90 Redirect method missing for primary key to read_attribute 2009-07-30 17:54:01 -05:00
Joshua Peek
9cdcfb4fc5 ditto for id= 2009-07-30 17:54:01 -05:00
Joshua Peek
831c38ffc7 Don't define id_before_type_cast, just let it be generated on its own 2009-07-30 17:54:01 -05:00
Joshua Peek
1841fd54e6 Move id attribute methods into their related concern 2009-07-30 17:54:01 -05:00
Joshua Peek
3e58f8e191 Restore DangerousAttributeError 2009-07-30 17:54:00 -05:00
Joshua Peek
e129c5673a Wrap up attribute method reset concerns in 'undefine_attribute_methods' 2009-07-30 17:54:00 -05:00
Joshua Peek
586baf8ffe read_attribute is always available through attribute 2009-07-30 17:54:00 -05:00
Joshua Peek
bd07c5ca8e cache_attributes is related to attribute reading 2009-07-30 17:54:00 -05:00
Joshua Peek
94dabf9b4b Generate methods for all suffixes 2009-07-30 17:54:00 -05:00
Joshua Peek
c2b075bed0 Concernify AR AttributeMethods 2009-07-30 17:53:59 -05:00
José Valim
7a4a679dba Remove any resource logic from respond_to. 2009-07-30 22:43:37 +02:00
Yehuda Katz
2c2ca833a5 Removed default_internal, which was preventing round-tripping of some encodings. 2009-07-30 09:55:17 -07:00
Pratik Naik
83537bf090 Generator config should be commented by default 2009-07-30 17:49:48 +01:00
Pratik Naik
61d995f7ed Remove whitespaces from the default mailer file 2009-07-30 17:49:48 +01:00
Marc Love
d860c89170 Fix tag helpers so that all HTML element boolean attributes render according to the specs. Added all boolean attributes listed in the XHTML 1.0 specs (http://www.w3.org/TR/xhtml1/guidelines.html) and HTML 5 specs (http://www.whatwg.org/specs/web-apps/current-work). HTML 5 boolean attribute rendering was broken in commit 1e2d722960 / [#2864 state:resolved].
Signed-off-by: Yehuda Katz <wycats@gmail.com>
2009-07-30 09:48:27 -07:00
Jeremy Kemper
d83b182857 Revert "Methods invoked within named scope Procs should respect the scope stack. [#1267 state:resolved]"
This reverts commit 6a13376525.

Conflicts:

	activerecord/test/cases/named_scope_test.rb
2009-07-29 16:54:54 -07:00
José Valim
e566fc0577 Merge branch 'master' of git://github.com/rails/rails 2009-07-29 21:22:56 +02:00
José Valim
d209aea7d8 Remove last TODO.
Signed-off-by: Yehuda Katz <wycats@gmail.com>
2009-07-29 12:06:04 -07:00
José Valim
fa0cf663fe Add a couple more tests to respond_with.
Signed-off-by: Yehuda Katz <wycats@gmail.com>
2009-07-29 12:06:03 -07:00
José Valim
09de34ca56 Added respond_with.
Signed-off-by: Yehuda Katz <wycats@gmail.com>
2009-07-29 12:06:03 -07:00
José Valim
bbe86077c2 Added tests for respond_to class method.
Signed-off-by: Yehuda Katz <wycats@gmail.com>
2009-07-29 12:06:03 -07:00
José Valim
67b2d08c0a Ensure that the proper accept header value is set during tests.
Signed-off-by: Yehuda Katz <wycats@gmail.com>
2009-07-29 12:06:03 -07:00
José Valim
b51632d34d Improve request test coverage by adding formats and negotiate_mime tests.
Signed-off-by: Yehuda Katz <wycats@gmail.com>
2009-07-29 12:06:02 -07:00
José Valim
7e280c3bff Remove Mime::ALL from Mime::SET.
Signed-off-by: Yehuda Katz <wycats@gmail.com>
2009-07-29 12:06:02 -07:00
José Valim
3e8ba616ef Refactor even more Responder. Move mime negotiation to request and added respond_to class method.
Signed-off-by: Yehuda Katz <wycats@gmail.com>
2009-07-29 12:06:02 -07:00
José Valim
3f445b316d Refactor Responder to only calculate available mime types. Those are sent to the controller that knows what to do with it (render a block or call default render).
Signed-off-by: Yehuda Katz <wycats@gmail.com>
2009-07-29 12:06:02 -07:00
Yehuda Katz
c4d1075bd3 Add support for error_messages_for(@obj) 2009-07-28 19:06:14 -07:00
José Valim
7d56fd9f08 Always use application generator to run templates. 2009-07-28 16:21:30 +02:00
José Valim
d9aae2b56e Merge branch 'master' of git://github.com/rails/rails 2009-07-28 09:00:33 +02:00
José Valim
5025ae610f Ensure that not namespaced generators also load RAILS_ROOT/lib/templates files. 2009-07-28 08:51:57 +02:00
José Valim
419ca7a747 Ensure that developers options are overwritten by user options. 2009-07-28 08:48:21 +02:00
Pratik Naik
9533e0eca7 Ignore everything under test/fixtures/public/absolute 2009-07-27 17:21:52 +01:00
José Valim
67c2f53938 Allow templates for non namespaced generators too. 2009-07-25 21:14:43 +02:00
Pratik Naik
e033b5d037 Merge docrails 2009-07-25 16:03:58 +01:00
José Valim
edd07b5a7a Updated vendored thor to 0.11.3. 2009-07-23 14:30:49 +02:00
José Valim
178044dbd2 Do not try to use thor gem. 2009-07-23 07:33:54 +02:00
John Duff
0c68d23f19 make pass through error code configurable [#2817 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-07-22 22:21:06 -05:00
Joshua Peek
272c504f91 Dasherize XML root by default to avoid invalid tags "<admin/posts>...</admin/posts>" [#2875 state:resolved] 2009-07-22 21:06:34 -05:00
John Maxwell
c39151a847 Patch to ActiveModel's (and ActiveRecord, by association) XML serialization: If two parameters are present in Procs supplied to to_xml's :procs option, the model being serialized will be passed as the second argument [#2373 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-07-22 20:47:15 -05:00
Emilio Tagua
ca1e62f142 Performance: cache/reload arel relation when possible to speed up things. 2009-07-21 23:01:26 -03:00
Emilio Tagua
5123a2359b Removed unused local variable. 2009-07-21 20:28:35 -03:00
Emilio Tagua
0e0866e056 Introduced ActiveRecord::Relation, a layer between an ARel relation and an AR relation 2009-07-21 20:21:03 -03:00
Emilio Tagua
f32c370983 Merge commit 'rails/master' 2009-07-21 11:27:23 -03:00
José Valim
33048b6e27 Solving merge conflicts. 2009-07-21 12:51:53 +02:00
José Valim
edda0bfe76 Allow nested and multiple fallbacks for generators. 2009-07-21 12:16:25 +02:00
José Valim
10fd021789 Change attributes default type to array to allow order to be preserved. 2009-07-21 12:00:02 +02:00
José Valim
c90419d4f4 Update db:sessions:create to use the proper generator. 2009-07-21 11:28:54 +02:00
Akira Matsuda
9d7aae7103 Ruby 1.9.2 compat: name method was renamed to __name__ since MiniTest 1.4.x [#2922 state:resolved]
Signed-off-by: Yehuda Katz <wycats@gmail.com>
2009-07-21 01:15:51 -07:00
Akira Matsuda
9163b9ac9d Ruby 1.9.2 compat: Use File#expand_path for require path because "." will not be included in LOAD_PATH since Ruby 1.9.2 [#2921 state:resolved]
Signed-off-by: Yehuda Katz <wycats@gmail.com>
2009-07-21 00:09:39 -07:00
Joshua Peek
108545a9d6 Clean up validation example 2009-07-21 00:56:27 -05:00
Joshua Peek
574323df62 So you can require 'activemodel' 2009-07-21 00:52:50 -05:00
Joshua Peek
92c00d7586 AMo conversion helper 2009-07-21 00:51:57 -05:00
Joshua Peek
6944b391cd Kill AMo Base 2009-07-21 00:13:26 -05:00
Joshua Peek
48bc39e03a Improve AMo observing docs 2009-07-21 00:11:26 -05:00
Joshua Peek
7c84bbf160 Add wrap_with_notifications helper to AMo observing 2009-07-20 23:57:01 -05:00
Joshua Peek
2685d93b07 Kill AMo ivar attributes helper 2009-07-20 23:28:58 -05:00
Yehuda Katz + Carl Lerche
e7a2496fda Vendor the bundler project 2009-07-20 18:03:38 -07:00
Yehuda Katz
d80316ad32 First effort at new Ajax helpers 2009-07-20 16:13:21 -07:00
Emilio Tagua
9a28bd7876 Merge commit 'rails/master' 2009-07-20 16:57:23 -03:00
Emilio Tagua
b326faef09 Performance boost for AR#create 2009-07-20 16:56:15 -03:00
Emilio Tagua
046c22c8c1 Removed legacy test. 2009-07-20 16:53:48 -03:00
Yehuda Katz
37658f15bb Merge branch 'master' of git@github.com:rails/rails 2009-07-19 13:21:17 -07:00
Yehuda Katz
f2f5cdc8bc Rename ActiveRecordHelper to ActiveModelHelper 2009-07-20 01:30:49 +09:00
Yehuda Katz
b00cac4adc Finish convert_to_object updates 2009-07-20 01:22:24 +09:00
Yehuda Katz
13e18dd940 Update some tests and add a to_model to form helpers 2009-07-20 00:58:59 +09:00
Yehuda Katz
5ffaaa71d1 Define ActiveModel API Compliance
- Define to_model on AR
  - Define to_model on ActiveModel::APICompliant
  - Update test fixtures to be API Compliant
  - Start using to_model in AP
2009-07-20 00:27:04 +09:00
Yehuda Katz
45d41d8012 Add some simple examples for unconventional AMo and AP use 2009-07-19 23:24:19 +09:00
Yehuda Katz
b20d68446d Move default_form_builder to ActionView so it'll work in environments not using ActionView::Base 2009-07-19 22:31:55 +09:00
Yehuda Katz
0f2914be40 Separate ActionView::Context so something else can easily be made into an AV context 2009-07-19 22:31:44 +09:00
Yehuda Katz
bb530923bc Simplify required "ActionView compliant" API 2009-07-19 21:53:02 +09:00
Sven Fuchs
17d5cc12b9 * don't include String#% for Ruby 1.9
* raise a KeyError exception for missing named interpolation args (like Ruby 1.9 does)
* raise an ArgumentError when mixing named and unnamed placeholders (like Ruby 1.9 does)
* improve docs and comply a bit more w/ Rails names/conventions

[#2870 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-07-18 11:27:27 -07:00
Emilio Tagua
87ca87d635 Merge commit 'rails/master' 2009-07-16 16:18:25 -03:00
Emilio Tagua
f4a23567e2 Added ActiveRecord::Base#(where|join|project|group|order|take|skip) methods. 2009-07-16 13:35:07 -03:00
José Valim
d6a590a710 Modified rake tasks to use new app generator structure and updated Thor version. 2009-07-16 11:17:19 +02:00
José Valim
b03034a686 Update vendored Thor to have latest actions updates. 2009-07-16 10:16:23 +02:00
Szymon Nowak
1c11437a32 Add primary_key option to belongs_to association
[#765 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-07-15 18:13:32 -07:00
José Valim
fa5f7f7087 Merge branch 'master' of git://github.com/rails/rails 2009-07-16 00:28:33 +02:00
José Valim
e3d5364e41 Implemented generaators fallbacks. 2009-07-16 00:17:28 +02:00
José Valim
9c4ba74b7c Change generators configuration to have a hash style. 2009-07-15 23:38:41 +02:00
Yehuda Katz
1a2946a6d9 Add some missing dependencies 2009-07-15 14:16:30 -07:00
Yehuda Katz
1273ffa186 Fix AbstractController::Layouts to work when included directly on a controller 2009-07-15 14:16:12 -07:00
Yehuda Katz
28508d444e Centralize commonly used parts of AS in ActionController into action_controller.rb 2009-07-15 14:15:52 -07:00
José Valim
bcf754d8c4 Add a form hook to erb scaffold. Customize and go! 2009-07-15 22:43:25 +02:00
José Valim
8d47078a49 Added source_paths to rails generators. If a template is added to RAILS_ROOT/lib/templates/base/generator it will be used. For example, to customize edit.html.erb template on scaffold, just add a customized copy at RAILS_ROOT/lib/templates/erb/scaffold. 2009-07-15 22:37:22 +02:00
Lourens Naude
0920e69244 ActiveSupport Hash optimizations [#2902 state:resolved]
Signed-off-by: Carl Lerche <carllerche@mac.com>
2009-07-15 13:23:05 -07:00
José Valim
b4ef958de6 Change false to :verbose => false as in new Thor version. 2009-07-15 20:16:37 +02:00
José Valim
baa4781ac7 Allow nil and false to be given as configuration values and avoid creating unecessary hashes. 2009-07-15 16:53:54 +02:00
José Valim
7022b58842 Allow namespaced configuration on generators. 2009-07-15 16:20:48 +02:00
José Valim
0702e04e0d Refactored some generators to make use of improved invocations on thor. 2009-07-15 11:33:36 +02:00
Emilio Tagua
634f6713ee Merge commit 'rails/master' 2009-07-14 23:00:08 -03:00
José Valim
a06c825b46 Updated vendored Thor to 0.11.1 and update Rails::Generators. 2009-07-14 22:20:43 +02:00
José Valim
e96af1eaa2 Add version to thor frozen gem. 2009-07-14 15:44:14 +02:00
José Valim
925c9104e0 Copy Thor files instead of using as a submodule. 2009-07-13 23:21:47 +02:00
José Valim
5021dc69a4 Vendorized Thor. 2009-07-13 23:13:48 +02:00
José Valim
52673cd2ee Added a generator generator. 2009-07-13 23:01:12 +02:00
Pratik Naik
40b387580f Use map! instead of map for <association>_ids 2009-07-13 21:59:06 +01:00
José Valim
a5ab030ae4 Ensure non timestamped migrations are generated properly. 2009-07-13 22:26:58 +02:00
José Valim
25647f7021 Add some attribute readers to migration module. 2009-07-13 20:42:25 +02:00
José Valim
b9f4ea7198 Add hooks for integration and performance tests. 2009-07-13 18:29:40 +02:00
José Valim
f68e7a3987 Remove generator environment until we have a gem manifest. 2009-07-13 18:18:08 +02:00
Pratik Naik
373b053dc8 Optimize <association>_ids for hm:t with belongs_to source 2009-07-13 16:29:19 +01:00
José Valim
21019304f0 Make explicit that references and belongs_to types have nil as default value. 2009-07-13 16:18:56 +02:00
José Valim
ae7a7852d5 Always allow params to be skipped on action orm in generators. 2009-07-13 15:08:45 +02:00
José Valim
d5225c1fd5 Do not require options on class_option. 2009-07-13 14:30:32 +02:00
José Valim
cd28dcb5a4 Cache source root in a rails specific variable. 2009-07-13 13:39:48 +02:00
José Valim
3075ae0611 Solving merge conflicts. 2009-07-12 16:29:15 +02:00
Yehuda Katz
b0429f5e66 Rename method to a more obvious name 2009-07-11 23:40:36 -04:00
Joshua Peek
c863388039 Add observing hooks to ARes 2009-07-11 16:59:11 -05:00
Joshua Peek
e83a05af07 Integrate AMo XML serializer into AR 2009-07-11 16:20:58 -05:00
Joshua Peek
01d92021e6 Switch scaffolding templates to HTML 5 doctype 2009-07-10 11:34:39 -05:00
José Valim
cca16a015d Do not clean up frameworks on generators environment, otherwise initializers, gems and plugins might not be loaded properly. 2009-07-09 10:04:59 +02:00
Sam Goldstein
d60d7edce4 Make it so AR attributes which conflict with object-private methods (e.g. system) don't 'randomly' cause NoMethodErrors
Previously if you called this attribute before others, you'd get exceptions.  But if it was the second-or-subsequent attribute you retrieved you'd get the correct behaviour.

Signed-off-by: Michael Koziarski <michael@koziarski.com>
[#2808 state:committed]
2009-07-09 16:44:30 +12:00
José Valim
09c288f0c5 Add the new generators environment and update commands. 2009-07-08 12:55:50 +02:00
José Valim
c9ea21717e Generators are configured on initialization if RAILS_ENV=generators. 2009-07-08 12:53:45 +02:00
José Valim
2699e9c2dd Added config.generators with tests. 2009-07-08 12:53:45 +02:00
José Valim
c07746cbdf Merge branch 'master' of git://github.com/rails/rails 2009-07-08 12:53:13 +02:00
Lawrence Pit
579250ea46 Use the i18n gem if present instead of vendor code. [#2871 state:resolved]
Signed-off-by: Yehuda Katz <wycats@gmail.com>
2009-07-07 18:36:42 -07:00
Lawrence Pit
da635394c1 Ruby 1.9 style String interpolation support for lower ruby versions. Thanks to code from Masao Mutoh's GetText gem. [#2870 state:resolved]
Signed-off-by: Yehuda Katz <wycats@yehuda-katzs-macbookpro41.local>
2009-07-07 16:21:57 -07:00
Hongli Lai (Phusion)
187d90f752 Add support for dumping non-standard primary keys when using the SQLite3 adapter. Fix unit tests so that this feature is tested for all adapters. [#2868 state:resolved]
Signed-off-by: Yehuda Katz <wycats@yehuda-katzs-macbookpro41.local>
2009-07-07 16:17:25 -07:00
Emilio Tagua
1e2d722960 Adds a audio_tag helper for the HTML5 audio tag. Fixed video_path docs. HTML attributes values should be true or false not attribute's name. [#2864 state:resolved]
Signed-off-by: Yehuda Katz <wycats@yehuda-katzs-macbookpro41.local>
2009-07-07 15:56:27 -07:00
Yehuda Katz + Carl Lerche
61604feec0 Get Initializer tests running without requiring parts of Rails being loaded first 2009-07-06 12:25:34 -07:00
Yehuda Katz + Carl Lerche
9a42e06dd8 Reapply Rails::Application::Path tweaks
Reapplies: a4bdc00fec
             3c1dab7225
2009-07-06 10:22:42 -07:00
José Valim
dd7ee082be Use active_support/mini since we just need inflections. 2009-07-06 18:38:27 +02:00
José Valim
66d1b968d1 Make specs pass on Ruby 1.9. 2009-07-06 18:31:28 +02:00
Emilio Tagua
fb46d00fdf Merge commit 'rails/master' 2009-07-06 10:29:05 -03:00
José Valim
eeb6a0786a Load generators from user home and show a error message if they can't be loaded. 2009-07-04 20:17:32 +02:00
José Valim
b277cf28e8 Allow scaffold controller to load action_orm files on demand. 2009-07-04 20:17:32 +02:00
José Valim
35925a8995 Ensure that rails templates methods are invoked with the proper extensions [#2531 status:resolved] 2009-07-04 20:17:32 +02:00
José Valim
8ff214e0db Use the proper shebang when using Ruby 1.9 or jruby or windows. 2009-07-04 20:17:32 +02:00
José Valim
da09d46ed4 Make generators test pass with latest Thor version 2009-07-04 20:17:32 +02:00
José Valim
cd388e075c Search for generators on vendorized plugins and gems. 2009-07-04 20:17:31 +02:00
José Valim
37ba0047a9 Removed invoke_if and allow hook_for to accept boolean options. 2009-07-04 20:17:31 +02:00
José Valim
9e36dd4e1c Remove update_js from Rakefile and the uneeded railsgen. 2009-07-04 20:17:31 +02:00
José Valim
20e2140ce7 Merge branch 'master' of git://github.com/rails/rails 2009-07-04 20:16:36 +02:00
Joshua Peek
783db25e0c Integrate AMo JSON serializer into AR 2009-07-03 23:12:42 -05:00
Joshua Peek
d2b78b3594 Initial extraction of AMo xml serializer 2009-07-03 21:38:14 -05:00
Joshua Peek
e3d6d10e1f Ensure JSON serializer includes model naming 2009-07-03 21:38:13 -05:00
Emilio Tagua
6d4b6a247e Merge commit 'rails/master' 2009-07-03 12:17:23 -03:00
José Valim
44633dc7a5 Add some tests for no_color! behavior. 2009-07-03 15:12:18 +02:00
José Valim
21db04818e More tests for rails generators and lookup. 2009-07-03 14:57:46 +02:00
José Valim
3ca504c966 Removed remaining old generators files. 2009-07-03 14:57:46 +02:00
José Valim
de68cf7e06 Plugin generators now reflect new generators sutrcture. 2009-07-03 14:57:46 +02:00
José Valim
d1c404ee90 Added lookup to generators. 2009-07-03 14:57:46 +02:00
José Valim
3bf45890b3 Merge branch 'master' of git://github.com/rails/rails 2009-07-03 14:56:19 +02:00
Pratik Naik
a4bdc00fec Revert "Compact the way application paths are defined"
This reverts commit 940aad225a.

Reason : The server does not start
2009-07-03 12:35:53 +01:00
Pratik Naik
3c1dab7225 Revert "Modify the Rails::Application::Path object to allow for more concise path definition."
This reverts commit 913bb2f4c2.

Reason : The server does not start
2009-07-03 12:23:57 +01:00
Yehuda Katz + Carl Lerche
378a65a909 Added tests for the :install_gem_spec_stubs initializer 2009-07-02 17:52:46 -07:00
Yehuda Katz + Carl Lerche
d8406f0c20 Wrote tests for the :check_ruby_version initializer 2009-07-02 16:51:05 -07:00
Yehuda Katz + Carl Lerche
1d280e21a1 Adds support for def self.setup in isolation tests for setup that should be run only once in the parent 2009-07-02 16:03:41 -07:00
Yehuda Katz + Carl Lerche
940aad225a Compact the way application paths are defined 2009-07-02 15:49:35 -07:00
Yehuda Katz + Carl Lerche
913bb2f4c2 Modify the Rails::Application::Path object to allow for more concise path definition. 2009-07-02 15:47:11 -07:00
Emilio Tagua
cd424f0f32 Merge commit 'rails/master' 2009-07-02 16:30:55 -03:00
Jesús García Sáez
fc6077d76e Allow symbols on routes declaration (:controller and :action values) [#2828 state:resolved]
Signed-off-by: Yehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>
2009-07-02 12:18:48 -07:00
Yehuda Katz + Carl Lerche
0fbf458b6c Removed unnecessary calls to image_path and hash lookups [#2827 state:resolved] 2009-07-02 12:14:23 -07:00
Brian Abreu
d036899717 Fixed ActiveSupport::OrderedHash::[] work identically to ::Hash::[] in ruby 1.8.7 [#2832 state:resolved]
Signed-off-by: Yehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>
2009-07-02 12:01:05 -07:00
Jarl Friis
e61afed6f8 My suggestion to fix ticket 2401 [#2401 state:resolved]
Signed-off-by: Yehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>
2009-07-02 11:55:24 -07:00
Aaron Patterson
49bdbebca6 wycats forgot a +1, so I added it [#2749 state:resolved]
Signed-off-by: Yehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>
2009-07-02 11:39:06 -07:00
Levin Alexander
ab2d6abb55 make #inspect if zero length duration return '0 seconds' instead of empty string [#2838 state:resolved]
Signed-off-by: Yehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>
2009-07-02 11:22:25 -07:00
Yehuda Katz + Carl Lerche
cf5b2b250f Fixes a number of tests that inexplicably didn't fail when we committed the original patch 2009-07-02 10:50:25 -07:00
Tieg Zaharia
51d7b3070c Adds a video_tag helper for the HTML5 video tag (similar to how the image_tag works) (tests included); removes a duplicate test line for image_tag; adds boolean attributes for video tag to tag()'s boolean attributes
Signed-off-by: Yehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>
2009-07-02 10:36:38 -07:00
J.D. Hollis
9eab435631 Only check for built extensions on gem dependencies that are in vendor/gems. [#2825 state:resolved]
Signed-off-by: Yehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>
2009-07-02 10:27:54 -07:00
José Valim
b7bc68076c Make color optional. 2009-07-02 15:57:37 +02:00
José Valim
528d555e37 Make invoke output white and use padding. 2009-07-02 15:55:21 +02:00
José Valim
a08a8cd8d2 Add update tasks. 2009-07-02 11:47:03 +02:00
José Valim
826a6a72fe Updated rake tasks. 2009-07-02 11:40:00 +02:00
José Valim
ec55e59e99 Updated commands. 2009-07-02 11:08:07 +02:00
José Valim
776220e1e2 Rename a wrongly named file. 2009-07-02 10:27:40 +02:00
José Valim
ea0b0c820d rm -rf rails_generator/generators 2009-07-02 10:27:40 +02:00
José Valim
c972b25df5 Tests for scaffold generator. 2009-07-02 10:27:40 +02:00
José Valim
a7c1591315 Added stylesheets controller which is invoked by scaffold. 2009-07-02 10:27:40 +02:00
José Valim
7f7afdf0f1 Rename ControllerNamedBase to ScaffoldBase and move ActionORM helpers. 2009-07-02 10:27:40 +02:00
José Valim
1a4d8aca8a Added tests to scaffold controller. 2009-07-02 10:27:40 +02:00
José Valim
86ff074101 Added test unit files for scaffold_controller. 2009-07-02 10:27:40 +02:00
José Valim
80cd16372c Added scaffold views to scaffold controller. 2009-07-02 10:27:39 +02:00
José Valim
9541977e04 Make scaffold controller generate agnostic code and mark some hooks as required. 2009-07-02 10:27:39 +02:00
José Valim
bf672a12a3 Added Rails::Generators::ActionORM to hold ORM methods necessary to build a generator. 2009-07-02 10:27:39 +02:00
José Valim
0760d5b542 Added comments to meta programming code. 2009-07-02 10:27:39 +02:00
José Valim
555a956a66 Ensure both migration and routes are removed on revoke. 2009-07-02 10:27:39 +02:00
José Valim
10a9205c58 Put migration methods into a separate folder and let just ActiveRecord dependency in ActiveRecord models. 2009-07-02 10:27:39 +02:00
José Valim
b77a7dcf4d Added controller named base. 2009-07-02 10:27:39 +02:00
José Valim
d5d0b8ea8e Removing unecessary class methods. 2009-07-02 10:27:39 +02:00
José Valim
35c4df4aa5 Added scaffold_controller. 2009-07-02 10:27:39 +02:00
José Valim
00b168e9d0 Show second level invocations on usage. 2009-07-02 10:27:39 +02:00
José Valim
dec1ee7422 Started with scaffold controller and added remove_hook_for. 2009-07-02 10:27:39 +02:00
José Valim
1c265da1db Merge branch 'master' of git://github.com/rails/rails 2009-07-02 10:25:18 +02:00
Elliot Winkler
8bb510f6c1 Patch FormTagHelper so that when a form tag is created, the div which holds the form authenticity token is set to display:inline [#2846 state:resolved]
Signed-off-by: Yehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>
2009-07-01 17:12:08 -07:00
Yehuda Katz + Carl Lerche
ee7d4c47e7 Fixes bug where Memcached connections get corrupted when an invalid expire is passed in [#2854 state:resolved] 2009-07-01 16:56:43 -07:00
Emilio Tagua
084e4a2dd4 Merge commit 'rails/master' 2009-07-01 20:36:53 -03:00
Emilio Tagua
260c847817 Create is now powered by Arel. Removed methods that are no longer used. 2009-07-01 20:34:26 -03:00
Akira Matsuda
92bff2ebf1 Fix pattern to match various magic comment formats 2009-07-01 16:26:15 -07:00
Jeremy Kemper
49824e8ad6 JSON.escape returns UTF-8 strings
[#2849 state:resolved]
2009-07-01 16:22:19 -07:00
Jeremy Kemper
f37a2ea84c uses Hash#except/slice 2009-07-01 16:01:20 -07:00
Yehuda Katz + Carl Lerche
8e3e362aed Forgot to commit the new file. This is slightly embarrassing. 2009-07-01 15:26:14 -07:00
Yehuda Katz + Carl Lerche
1a6f4d424a Apparently stdlib isn't std enough 2009-07-01 15:20:02 -07:00
Yehuda Katz + Carl Lerche
3990c128ef Modify isolation test to require a file not in use anywhere in Rails 2009-07-01 15:06:11 -07:00
Yehuda Katz + Carl Lerche
677f74dd0d Updates CI to use latest mocha 2009-07-01 13:50:05 -07:00
Jeremy Kemper
e7312105c7 Merge branch 'master' of git@github.com:rails/rails 2009-07-01 12:55:19 -07:00
Yehuda Katz + Carl Lerche
1026d7706f Original cache objects should not be immutable [#2860 state:resolved]
Signed-off-by: Yehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>
2009-07-01 12:16:55 -07:00
Yehuda Katz + Carl Lerche
16dc139caa Added AR:B#dup method for duplicationg object without frozen attributes [#2859 state:resolved]
Signed-off-by: Yehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>
2009-07-01 12:16:35 -07:00
Emilio Tagua
0f5785c997 Small refactor to update_all. 2009-07-01 16:16:11 -03:00
Yehuda Katz + Carl Lerche
882dd4e605 ensure Inflector.camelize works with symbols [#2856 state:resolved]
Signed-off-by: Yehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>
2009-07-01 12:14:34 -07:00
Emilio Tagua
a9cd9f4c75 Merge commit 'rails/master' 2009-07-01 16:07:45 -03:00
Yehuda Katz + Carl Lerche
7583a24ee0 Move mocha down below initial T::U require and bump version to 0.9.7 [#2858 state:resolved] 2009-07-01 11:53:17 -07:00
Yehuda Katz + Carl Lerche
0515256fd3 Accept Symbol for contoller name [#2855 state:resolved]
Signed-off-by: Yehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>
2009-07-01 11:16:18 -07:00
Yehuda Katz + Carl Lerche
eea7b5db1d Crazy hacks to get the Isolation testing module to work on non forking environments 2009-06-30 17:39:32 -07:00
Emilio Tagua
cbf8ecc1cb Merge commit 'rails/master' 2009-06-30 20:32:28 -03:00
Emilio Tagua
e5b8c4483c Merge commit 'rails/master'
Conflicts:
	activerecord/lib/active_record/base.rb
2009-06-30 20:12:17 -03:00
Pratik Naik
45e6f19925 Revert "Revert "Generate proper :counter_sql from :finder_sql when there is a newline character immediately following 'SELECT' [#2118 state:resolved]""
This reverts commit 80f1f863cd.

The feature doesn't work on Postgres, so don't test it on Postgres.
Also, Postgres compatibility is irrelevant to the ticket/patch in question.
2009-07-01 00:02:00 +01:00
Emilio Tagua
9c70442534 Merge commit 'rails/master'
Conflicts:
	activerecord/test/cases/adapter_test.rb
2009-06-30 19:34:26 -03:00
Carl Lerche
db3de78a83 Bump up the version to 3.0.pre 2009-06-30 14:37:12 -07:00
Carl Lerche
132e6d0063 Add #concat to Rails::Application::Path 2009-06-30 13:55:11 -07:00
Carl Lerche
f281745056 Test that builtin_directories is only used in development mode 2009-06-30 13:53:03 -07:00
Yehuda Katz + Carl Lerche
575b95ea0b Created AS::Testing::Isolation which runs each test case in a separate process.
This allows for testing rails bootup (files are required, correct constants are
	set, etc...). Currently, this is implemented via forking only, but we will add 
	support for jruby and windows shortly.
2009-06-30 12:00:50 -07:00
Carl Lerche
9101941c12 Require core_ext/kernel/requires in test_help to providing #require_library_or_gem 2009-06-30 09:05:53 -07:00
Carl Lerche
f66b5d79c1 Stop the initializer from blowing up when builtin_directories is empty 2009-06-30 09:01:46 -07:00
Carl Lerche
4954379283 Remove stray checks for Rspec in the testing setup. 2009-06-30 08:41:17 -07:00
Justin French
7d548f795d Changed ActiveRecord::Base.human_name to underscore the class name before it humanizes it
This gives you 'Post comment' rather than 'Postcomment' by default.

Signed-off-by: Michael Koziarski <michael@koziarski.com>
[#2120 state:committed]
2009-06-30 15:24:04 +12:00
José Valim
4739f0ff5d Small fix to plugin generator. 2009-06-29 21:08:12 +02:00
José Valim
95ef9bd67f Simplifying resource generator. 2009-06-29 19:56:22 +02:00
José Valim
ff4c600448 Added singleton support to resource controller. 2009-06-28 19:57:00 +02:00
José Valim
9413dba432 Added tessts for resources generator. 2009-06-28 19:46:34 +02:00
José Valim
9068bc05b8 Added ResourceGenerator. 2009-06-28 18:28:30 +02:00
José Valim
a2d4d755ae Use inject_into_file instead of gsub_file (the first is reversible) 2009-06-28 16:48:22 +02:00
José Valim
1ca51df000 Added migration and session_migration generator. 2009-06-28 13:16:14 +02:00
José Valim
4f3e44fa03 Move file action only to app generator. 2009-06-28 12:00:13 +02:00
José Valim
496dde95fb Added migrations and make base generators be lazy loaded. 2009-06-28 11:56:44 +02:00
José Valim
c03585aa8d Show invoked generators options on meta generators. 2009-06-27 21:30:00 +02:00
José Valim
fdeee65c96 Add model_subclass generator with deprecation warning. 2009-06-27 21:30:00 +02:00
José Valim
7b6c5ed7db Added parent option to model generator. 2009-06-27 21:30:00 +02:00
José Valim
ff44e5055c Output invocations. 2009-06-27 21:30:00 +02:00
José Valim
1a15dd4de5 Rename invoke_for to hook_for. 2009-06-27 21:30:00 +02:00
José Valim
acaeaf308a Add a fixture replacement hook to TestUnit model generator. 2009-06-27 21:29:59 +02:00
José Valim
8c5622f0d4 Initial scratch of model generators. 2009-06-27 21:29:59 +02:00
José Valim
9acb721e6a Do not generate aliases automatically to avoid conflicts. 2009-06-27 21:29:59 +02:00
José Valim
ff48e23a4e Make Observer generator agnostic. 2009-06-27 21:29:59 +02:00
José Valim
85ff67ce4c Merge branch 'master' of git://github.com/rails/rails 2009-06-27 21:27:21 +02:00
Chris Mear
085db5e128 Make text_area_tag escape contents by default.
Signed-off-by: Michael Koziarski <michael@koziarski.com>
[#2015 state:committed]
2009-06-27 13:16:52 +12:00
Vicente Mundim
68b02cb00a Make filter_parameters work correctly with array parameters. 2009-06-27 12:43:57 +12:00
Yehuda Katz + Carl Lerche
188a892c5a Starting to replace scattered path configuration settings with the path object 2009-06-26 17:32:05 -07:00
Yehuda Katz + Carl Lerche
4153c6b720 Finished a first stab at the Rails application path object. 2009-06-26 15:37:52 -07:00
Yehuda Katz + Carl Lerche
b0774281ef Update paths to support an explicit root and multiple paths per category 2009-06-26 15:37:52 -07:00
Yehuda Katz + Carl Lerche
728e3b4047 Simple initial Paths impl 2009-06-26 15:37:52 -07:00
Yehuda Katz + Carl Lerche
2865421f5d Checkpoint. Added a bunch of TODOs and some changes after further going through the initializer 2009-06-26 15:37:52 -07:00
José Valim
e375819b76 Spec --no and --skip. 2009-06-26 20:42:00 +02:00
José Valim
95a5cc6167 Add invoke_iff and invoke_for to the public interface. 2009-06-26 20:26:10 +02:00
José Valim
54208cbe60 Added invoke_if and make use of it on controller generators. 2009-06-26 20:24:52 +02:00
José Valim
e981aeb576 invoke_for now uses Rails built-in lookup. 2009-06-26 19:30:18 +02:00
José Valim
5ef1d9706b Added Rails::Generators.find_by_namespace. 2009-06-26 19:14:55 +02:00
José Valim
3a0619f1bb Update some USAGE files. 2009-06-26 18:54:58 +02:00
José Valim
2d48f80a6b Use type :default for invoke_for, this allows --no-test-framework and --skip-test-framework to be given. 2009-06-26 12:33:21 +02:00
José Valim
e2346244a2 Added Controller Generators. 2009-06-26 11:59:14 +02:00
José Valim
d40bd85119 Small fixes. 2009-06-26 11:59:14 +02:00
José Valim
2f3681dfc2 Clean up class collisions check and a class method helper. 2009-06-26 11:59:14 +02:00
José Valim
6bd101188e Class collision checks. 2009-06-26 11:59:14 +02:00
José Valim
e084313640 Added HelperGenerator. 2009-06-26 11:59:13 +02:00
José Valim
da1baeab4a Added integration and performance test generators. 2009-06-26 11:59:13 +02:00
José Valim
0f1c325f3c Improving generators runner. 2009-06-26 11:59:13 +02:00
José Valim
915f108d6a Merge branch 'master' of git://github.com/rails/rails 2009-06-26 11:58:02 +02:00
Michael Koziarski
b5dfdc714f Make sure the wrapped exceptions also have the original exception available.
[#2419 state:committed]
2009-06-26 17:01:21 +12:00
Michael Schuerig
00a5fd3d18 Translate foreign key violations to ActiveRecord::InvalidForeignKey exceptions.
Signed-off-by: Michael Koziarski <michael@koziarski.com>
2009-06-26 16:52:55 +12:00
Michael Schuerig
53a3eaa860 Translate adapter errors that indicate a violated uniqueness constraint to ActiveRecord::RecordNotUnique exception derived from ActiveReecord::StatementInvalid.
Signed-off-by: Michael Koziarski <michael@koziarski.com>
2009-06-26 16:52:54 +12:00
Christos Zisopoulos
18a97a6601 Handle missing javascript/stylesheets assets by raising an exception
An exception will be raised if a local javascript/stylesheet file included
by the stylesheet_link_tag or javascript_include_tag can not be found.

When caching is enabled, we use atomic_write to ensure that the cache file
is not created with zero length.

Signed-off-by: Michael Koziarski <michael@koziarski.com>

[#2738 state:committed]
2009-06-26 16:47:15 +12:00
Yehuda Katz + Carl Lerche
8ee60660ce Try speeding up rails booting 2009-06-25 14:32:15 -07:00
Yehuda Katz + Carl Lerche
c117e8e848 Run the block passed to #run first when initializing 2009-06-25 14:32:15 -07:00
Joshua Peek
b598baf813 ignore absolute tmp directory 2009-06-25 14:52:58 -05:00
Joshua Peek
7837da41a3 send_data should set Content-Length as a string 2009-06-25 14:47:15 -05:00
Joshua Peek
7aa730440c Remove deprecated implicit ivar assignment 2009-06-25 12:51:21 -05:00
Pratik Naik
97159fad6a Missed file from the previous commit 92b229e125 2009-06-25 17:03:07 +01:00
Pratik Naik
92b229e125 Make performance tests work again 2009-06-25 17:02:04 +01:00
José Valim
aee63a12f2 More tests for mailer. 2009-06-25 16:27:44 +02:00
José Valim
534f7b54e3 Mailer tests. 2009-06-25 16:21:33 +02:00
José Valim
0bb95968db More code refactoring. 2009-06-25 15:45:15 +02:00
José Valim
d5bdf31d89 Refactoring out descriptions. 2009-06-25 13:46:19 +02:00
José Valim
6e6c0117b3 Added Mailer generaator template engine and test framework agnostic. 2009-06-25 12:57:58 +02:00
José Valim
ed33c29a4e Added class collision checks. 2009-06-25 11:56:18 +02:00
José Valim
4573fd2e06 Added observer generator. 2009-06-25 11:24:35 +02:00
José Valim
eaef1ee09c Make tests pass again after merge. 2009-06-25 10:44:46 +02:00
José Valim
5337766fa0 Tests for metal generator. 2009-06-25 10:39:44 +02:00
José Valim
f596495556 Tests for plugin generator. 2009-06-25 10:39:44 +02:00
José Valim
a748bb7961 Get base_name from class_name. 2009-06-25 10:39:43 +02:00
José Valim
0ed602b3ef Removed TODOs. 2009-06-25 10:39:43 +02:00
José Valim
ccd26575d1 Clean up plugin generator. 2009-06-25 10:39:43 +02:00
José Valim
b72d966707 Merge branch 'master' of git://github.com/rails/rails 2009-06-25 10:38:17 +02:00
Emilio Tagua
50f73bd39c Merge commit 'rails/master' 2009-06-24 16:30:27 -03:00
Yehuda Katz + Carl Lerche
3aad4d7fbe Separate Rails module methods, the config object, and the initializer into separate files. 2009-06-23 16:10:43 -07:00
Emilio Tagua
0002fd4ab6 Updated Arel submodule. 2009-06-23 19:47:55 -03:00
Emilio Tagua
3b27a4856f Refactoring: Calculations now use construct_finder_sql instead they own method. 2009-06-23 19:40:57 -03:00
Yehuda Katz + Carl Lerche
ce9d9fda77 Resurrect threadsafe! 2009-06-23 14:49:04 -07:00
Yehuda Katz + Carl Lerche
042bd0a5c8 Tests pass, AWDoR passes, and a fresh app boots. 2009-06-23 14:49:04 -07:00
Yehuda Katz + Carl Lerche
9d398f4827 Got all the railties tests to pass, rails must boot! 2009-06-23 14:49:04 -07:00
Yehuda Katz + Carl Lerche
30baaac546 Fix the default frameworks 2009-06-23 14:49:04 -07:00
Yehuda Katz + Carl Lerche
9cfd1d4491 Get more tests to pass 2009-06-23 14:49:04 -07:00
Yehuda Katz + Carl Lerche
f2aea4d3ea Get initializer_test.rb to pass with the new initializer. 2009-06-23 14:49:03 -07:00
Yehuda Katz + Carl Lerche
a3309e4d70 Started making progress on implementing a new initializer.
Class.any_instance.expects(:require).raises(LoadError)
	... w0t
2009-06-23 14:49:03 -07:00
Yehuda Katz + Carl Lerche
99b8248f6e Initial initializer impl 2009-06-23 14:49:03 -07:00
Yehuda Katz + Carl Lerche
805369c8c8 Starting to write the new initializer 2009-06-23 14:49:03 -07:00
Yehuda Katz + Carl Lerche
1b844e4bf4 Passes in 1.9 2009-06-23 14:45:27 -07:00
Emilio Tagua
b9088dce07 Merge commit 'rails/master' 2009-06-23 18:13:46 -03:00
Yehuda Katz
4417a19b03 Small changes to get 1.9 passing (for the most part) 2009-06-23 14:06:22 -07:00
Emilio Tagua
4864f92ee3 Removed unused methods. 2009-06-23 17:57:31 -03:00
Emilio Tagua
02a723f7b5 Arel now buils SQL queries for associations. Removed old code and
updated Arel version to support this.
2009-06-23 17:38:31 -03:00
Emilio Tagua
bc899fd3a3 Arel updated. All tests passing for SQLite3 and PostgreSQL. 2009-06-23 17:20:42 -03:00
Emilio Tagua
d587cf3794 Removed old commented code 2009-06-23 17:19:51 -03:00
José Valim
8843b91da7 Delete uneeded USAGE file. 2009-06-23 20:45:27 +02:00
José Valim
ea106cf051 Added plugin generators (and a couple of TODOs). 2009-06-23 20:42:29 +02:00
José Valim
d7bab3a43a Splitting base into several files. 2009-06-23 19:45:50 +02:00
José Valim
a7ba4b95e9 TestUnit, you have a home. 2009-06-23 19:27:46 +02:00
José Valim
4494a752c3 Change current sstructure. 2009-06-23 19:10:42 +02:00
José Valim
75fbd73936 Add GeneratedAttribute. 2009-06-23 18:12:37 +02:00
José Valim
d4ec091580 Removing template runner old specs. 2009-06-23 16:58:43 +02:00
José Valim
83f7fe2028 NamedBase. 2009-06-23 16:53:48 +02:00
José Valim
301c48c15c Added a generator file responsable for loading generator files. 2009-06-23 16:53:47 +02:00
José Valim
1845675822 Added metal generator. 2009-06-23 16:53:47 +02:00
José Valim
f03890e151 Use Rails generators files organization. 2009-06-23 16:53:47 +02:00
José Valim
04eb5b6e34 Use Rails default banner. 2009-06-23 16:53:47 +02:00
José Valim
0744900861 Merge branch 'master' of git://github.com/rails/rails 2009-06-23 16:52:39 +02:00
Yehuda Katz + Carl Lerche
80f1f863cd Revert "Generate proper :counter_sql from :finder_sql when there is a newline character immediately following 'SELECT' [#2118 state:resolved]"
This reverts commit 4851ca9e13.

The tests do not pass for postgresql.
2009-06-22 12:04:02 -07:00
Patrick Joyce
4851ca9e13 Generate proper :counter_sql from :finder_sql when there is a newline character immediately following 'SELECT' [#2118 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-06-21 22:07:23 +01:00
Joseph Wilk
eb30e4ca40 Fixed a bug where create_table could not be called without a block [#2221 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-06-21 19:51:32 +01:00
Brian Hogan
b26c2c11ab Ensure table names are quoted while renaming for sqlite3 adapter [#2272 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-06-21 18:24:19 +01:00
=?utf-8?q?Mislav=20Marohni=C4=87?=
21cd4c0e93 Fix polymorphic_path doesn't modify options hash [#2099 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-06-21 17:53:07 +01:00
mattbauer
83c1934003 Ensure hm:t#create respects source associations hash conditions [#2090 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-06-21 17:35:04 +01:00
Darragh Curran
9cb8c812f2 Add content_for?(:name) helper to check if content_for(:name) is present [#1311 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-06-21 17:07:22 +01:00
Pratik Naik
66eb05821b Use stubbing instead of sleep() in File store cache tests 2009-06-21 15:25:28 +01:00
Pratik Naik
b5775c2b3e Add expiry support File cache store [#1693 state:resolved] [Roman Shterenzon, Pratik Naik] 2009-06-21 15:25:28 +01:00
José Valim
6dd196914c Remove class level conditions and ensure that RAILS_GEM_VERSION is commented when freeze. 2009-06-20 22:04:34 +02:00
José Valim
2c3ebc00b7 More tests to app generator. 2009-06-20 16:58:15 +02:00
José Valim
181feecfb9 First stub at app generators test. 2009-06-20 15:43:25 +02:00
José Valim
68739eed57 Skip Rails::VERSION warnings. 2009-06-19 16:19:15 +02:00
José Valim
631deb5992 Removing duplicated files. 2009-06-19 16:14:49 +02:00
José Valim
5b8fe9c4c7 Moving tests to new generators schema. 2009-06-19 16:11:55 +02:00
José Valim
9dd1e2f2b0 Starting test structure. 2009-06-19 16:11:55 +02:00
José Valim
bd216924a3 No more application generator. 2009-06-19 16:11:55 +02:00
José Valim
6658711775 Template wwas not found? Raise an error. 2009-06-19 16:11:55 +02:00
José Valim
98adc9a42e Secret key generator. You are gone. 2009-06-19 16:11:55 +02:00
José Valim
94a83007b6 Kick boot_test back to life. 2009-06-19 16:11:54 +02:00
José Valim
7a8e284766 Refactor shebang to a class method, so other generators can use it. 2009-06-19 16:11:54 +02:00
José Valim
748e1d6745 Require open-uri, we will need it. 2009-06-19 16:11:54 +02:00
José Valim
cd05ed6711 Do not show status when calling gsub_file or append_file. 2009-06-19 16:11:54 +02:00
José Valim
e0a4d8be93 Fix shebang on created files. 2009-06-19 16:11:54 +02:00
José Valim
6f044c9b6c Change --freeze alias from -f to -F to avoid conflict with --force. 2009-06-19 16:11:54 +02:00
José Valim
768d763436 Apply template when required. 2009-06-19 16:11:54 +02:00
José Valim
9b82fa159a Freeze rails when required. 2009-06-19 16:11:54 +02:00
José Valim
b9d8fafd7e Update templates to be backwards compatible. 2009-06-19 16:11:54 +02:00
José Valim
090de591fc Raise an error if invalid value for database is provided. 2009-06-19 16:11:54 +02:00
José Valim
6619357f75 When rails is invoked without args, be sure that help is called. 2009-06-19 16:11:54 +02:00
José Valim
01cde13290 Updated namespace so help can show usage properly. 2009-06-19 16:11:54 +02:00
José Valim
30fff3077d Updated dependency, so we can remove extra code. 2009-06-19 16:11:54 +02:00
José Valim
5ff80e7433 bin/rails uses the new generator. 2009-06-19 16:11:53 +02:00
José Valim
b6f826376a Added a couple more options to app generator. 2009-06-19 16:11:53 +02:00
José Valim
615527dcb0 Allow user to skip ActiveRecord, TestUnit and/or Prototype. However any customization should be done with templates. 2009-06-19 16:11:53 +02:00
José Valim
fef38fd542 Small alias typo. 2009-06-19 16:11:53 +02:00
José Valim
a8b3efbe5c Moved prototypes files to where they should be. 2009-06-19 16:11:53 +02:00
José Valim
4bf8f40638 Added usage to app generator. 2009-06-19 16:11:53 +02:00
José Valim
34ed2d8d5e Send new files too. 2009-06-19 16:11:51 +02:00
José Valim
d57b19380e Add base and port actions. Not functional though. 2009-06-19 16:10:43 +02:00
José Valim
ceede90017 Move prototype files to javascripts folder. 2009-06-19 16:10:42 +02:00
José Valim
720aceeea9 Send new files too. 2009-06-19 16:10:42 +02:00
José Valim
ced68c7430 App generator is working using new generators (except for templates). 2009-06-19 16:10:42 +02:00
José Valim
42e51ea9c0 More tasks into app generator. 2009-06-19 16:10:42 +02:00
José Valim
489f422152 Initial scratch of application generator. 2009-06-19 16:10:42 +02:00
José Valim
8037fee9ff Merge branch 'master' of git://github.com/rails/rails 2009-06-19 16:10:24 +02:00
Jeremy Kemper
54f4851770 Turn on autolist for debugging also 2009-06-18 21:55:13 -04:00
Jeremy Kemper
63cc6b7242 Friendlier runtime exception if delegatee is nil 2009-06-18 20:00:35 -04:00
Jeremy Kemper
50fe928c15 Delegated methods report the expected file/line in backtraces 2009-06-18 18:07:55 -04:00
Yehuda Katz + Carl Lerche
9f7eaea201 Minor ActionView cleanup 2009-06-18 12:08:50 -07:00
Yehuda Katz + Carl Lerche
497554fd10 Fix typo 2009-06-18 11:14:44 -07:00
Jeremy Kemper
5267addd4f Use errors[field] instead of errors.on(field) 2009-06-17 19:37:56 -07:00
Joshua Peek
fbdf706fff Add basic JSON serializer to AMo 2009-06-17 21:27:54 -05:00
Joshua Peek
af5301089f Add simple attribute implementation backed by ivars 2009-06-17 21:27:54 -05:00
Joshua Peek
d5d59230f4 Simplify AMo validation attribute reader 2009-06-17 21:27:54 -05:00
Yehuda Katz + Carl Lerche
b4a91db441 Extract the layout proc into a method, and write documentation explaining what the proc does in various cases. 2009-06-17 18:55:10 -07:00
Yehuda Katz + Carl Lerche
ca8f8fb031 Remove one more note about deprecated behavior 2009-06-17 18:15:41 -07:00
Yehuda Katz + Carl Lerche
a9ad763c86 Drive the final stake through @content_for_*'s heart! 2009-06-17 18:08:45 -07:00
Yehuda Katz + Carl Lerche
65102c8f1a Cleaning up more tests and code that needed to work in both old and new base 2009-06-17 16:51:51 -07:00
Yehuda Katz + Carl Lerche
55ee0ba7f5 Cleaning up if defined?(ActionController::Http) blocks from the pre new base era. 2009-06-17 16:23:11 -07:00
Yehuda Katz + Carl Lerche
8fdf3d7890 Remove some defined?(Http) checks 2009-06-17 16:14:05 -07:00
Yehuda Katz + Carl Lerche
251a6e492c Rename path.rb to resolver.rb 2009-06-17 15:39:41 -07:00
Yehuda Katz + Carl Lerche
d8f352e970 Rename ActionView::Template::Path ActionView::Resolver 2009-06-17 15:32:55 -07:00
Yehuda Katz + Carl Lerche
7ac9f29093 Updated require for AMo move 2009-06-17 13:05:14 -07:00
Yehuda Katz + Carl Lerche
6927f1119b Finish making pending tests pass 2009-06-17 12:54:19 -07:00
Yehuda Katz + Carl Lerche
487312515c RJS doesn't render with an HTML layout by default 2009-06-17 12:54:19 -07:00
Yehuda Katz + Carl Lerche
4fad953f90 Fixing pending tests and fixed some formats / partial rendering semantics 2009-06-17 12:54:19 -07:00
Yehuda Katz + Carl Lerche
de388ba864 Fix pending test about content-type 2009-06-17 12:54:18 -07:00
Emilio Tagua
3e4452c73f Forget about auto scope, it's always explicit. 2009-06-17 15:10:57 -03:00
Joshua Peek
1c4d28ba31 Move model naming into ActiveModel 2009-06-17 10:37:39 -05:00
José Valim
908b5305d4 Convert line breaks. 2009-06-17 11:26:32 +02:00
Yehuda Katz + Carl Lerche
85f2f34d5e Remove a stray process2 require 2009-06-16 16:29:33 -07:00
Yehuda Katz + Carl Lerche
315147fcb5 Move the exceptions for missing template into Compatibility in prep for moving it into a "not-production" module 2009-06-16 13:54:55 -07:00
Yehuda Katz + Carl Lerche
dd58f4021d An exception is raised if a layout is missing only if the layout is missing for all mimes 2009-06-16 13:44:51 -07:00
Emilio Tagua
16ac353f4c Merge commit 'rails/master' 2009-06-16 16:59:12 -03:00
Yehuda Katz + Carl Lerche
01a4bc84b8 Exceptions now in an exceptions module 2009-06-16 11:32:38 -07:00
Yehuda Katz + Carl Lerche
a6e803bee1 Remove exceptions from AbstractUnit so they work in real life 2009-06-16 11:20:28 -07:00
Yehuda Katz + Carl Lerche
18c3b77b23 Merge process2 into process to people's regular tests run :P 2009-06-16 10:46:03 -07:00
Yehuda Katz + Carl Lerche
1fbfa3e705 More _write_layout_method removal 2009-06-15 17:33:25 -07:00
Yehuda Katz + Carl Lerche
3c15cba175 Whoops, I guess we broke layouts ;) 2009-06-15 17:32:10 -07:00
Yehuda Katz + Carl Lerche
19c3495a67 rm -r controller/base! 2009-06-15 16:29:45 -07:00
Yehuda Katz + Carl Lerche
7b1f483fda Get all of rake tests to pass 2009-06-15 16:14:45 -07:00
Yehuda Katz + Carl Lerche
c7ba9aa195 Get the new base tests to pass 2009-06-15 15:56:18 -07:00
Yehuda Katz + Carl Lerche
0e558f0bbd Get the AR integration tests to pass 2009-06-15 15:55:09 -07:00
Yehuda Katz + Carl Lerche
5314abed18 Keep ActionMailer using the old layouts code until it gets refactored. 2009-06-15 11:59:28 -07:00
Yehuda Katz + Carl Lerche
80d1e27788 Fix the fixture path 2009-06-15 11:50:11 -07:00
Yehuda Katz + Carl Lerche
a63caa4c0c Get tests to run (with failures) without old base around 2009-06-15 11:44:45 -07:00
Yehuda Katz + Carl Lerche
614374b3e5 Require missing file in AS 2009-06-15 11:31:52 -07:00
Yehuda Katz + Carl Lerche
64ae5b56ff Fix failing tests in new callbacks 2009-06-15 11:26:47 -07:00
Yehuda Katz + Carl Lerche
5a8a550a45 Finish making things pass with updated internal content_type semantics 2009-06-15 11:21:08 -07:00
Joshua Peek
c50b03b754 Add :concat option to asset tag helpers to force concatenation.
This is useful for working around IE's stylesheet limit.

  stylesheet_link_tag :all, :concat => true
2009-06-15 10:23:23 -05:00
Xavier Noria
b56169c262 moves reopening of core classes to add generic stuff from Action Pack to AS/core_ext and adds tests
[#2798 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-06-13 15:01:14 -07:00
Luca Guidi
9eeb5fed2f Bytes calculation speed up
[#2800 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-06-13 14:03:45 -07:00
Xavier Noria
d32965399c uses Object#metaclass and Object#class_eval in a few spots
[#2797 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-06-12 16:14:06 -07:00
Emilio Tagua
34a068d053 Leave the quoting part to ARel 2009-06-12 18:09:48 -03:00
Adam Milligan
54a5446641 HasOneThroughAssociation still shouldn't derive from HasManyThroughAssociation.
[#1642 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-06-12 13:52:51 -07:00
Emilio Tagua
8db190acba HasOneAssociation inherits AssociationProxy since it shares nothing with BelongsToAssociation.
[#2796 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-06-12 13:45:25 -07:00
Emilio Tagua
a924b2f66e Merge commit 'rails/master' 2009-06-12 16:20:27 -03:00
Joshua Peek
8f7c657f4b Move observing notify helper into AMo 2009-06-11 13:41:48 -05:00
Joshua Peek
c4e440b1d2 Fix observing AS dependencies 2009-06-11 13:21:56 -05:00
Joshua Peek
4d70359200 Integrate ActiveModel::Observing into ActiveRecord 2009-06-10 23:36:44 -05:00
Andrew Kaspick
59c83af18b allow absolute paths for the asset caches
Signed-off-by: Michael Koziarski <michael@koziarski.com>
2009-06-11 16:33:32 +12:00
Emilio Tagua
247ac95413 Merge commit 'rails/master' 2009-06-10 19:54:27 -03:00
Emilio Tagua
d7b98b3ca8 Arel updated 2009-06-10 19:54:08 -03:00
Emilio Tagua
d127831d9e Merge branch 'update_all' 2009-06-10 19:46:47 -03:00
Emilio Tagua
af9f9dd02c Use array of orders instead of string concatenation 2009-06-10 19:46:35 -03:00
Emilio Tagua
71528c2921 Initial update_all migration 2009-06-10 19:36:45 -03:00
Yehuda Katz + Carl Lerche
47ff57f6d1 Document and clean up HideActions and Http 2009-06-10 15:27:53 -07:00
Yehuda Katz + Carl Lerche
82a10ce9f6 Removed unnecessary code 2009-06-10 14:43:43 -07:00
Yehuda Katz + Carl Lerche
fbb6b936e9 Document ActionController::Helpers 2009-06-10 14:28:58 -07:00
Yehuda Katz + Carl Lerche
316fab7de6 Cleaned up the #default_helper_module method to make better use of #helper instead of duplicating code. 2009-06-10 14:15:21 -07:00
Emilio Tagua
0587462050 Revert "Use ARel in SQL generation through associations"
This reverts commit 7be3e3ba05.
2009-06-10 17:32:20 -03:00
Emilio Tagua
7be3e3ba05 Use ARel in SQL generation through associations 2009-06-10 17:31:26 -03:00
Emilio Tagua
8c3b8323f5 Use ARel in SQL generation through associations 2009-06-10 16:36:05 -03:00
Yehuda Katz + Carl Lerche
37be453a87 Adding "test" to the lib directory when running action pack tests on new base 2009-06-10 12:26:03 -07:00
Yehuda Katz + Carl Lerche
4fc0778123 Simplify helper use of ActiveSupport::Dependencies, and use super better for in #helpers 2009-06-10 12:15:30 -07:00
Michael Koziarski
c014c3e5c1 Whitelist the methods which are called by multiparameter attribute assignment.
This prevents users from causing NoMethodErrors and the like by editing the parameter names, and closes a potential exploit of CVE-2009-1904.
2009-06-10 12:12:21 +12:00
Yehuda Katz + Carl Lerche
b6fde6b480 Clean up AbstractController::Logger and write documentation 2009-06-09 17:03:02 -07:00
Yehuda Katz + Carl Lerche
f35f47b8c0 Cleaning up and documenting AbstractController::Layouts 2009-06-09 16:47:40 -07:00
Yehuda Katz + Carl Lerche
acb2447785 Write documentation for AbstractController::Helpers 2009-06-09 16:47:39 -07:00
Matt Jones
d7e0cb05cc Fix incorrect specification path in GemDependency#from_directory_name
Signed-off-by: Michael Koziarski <michael@koziarski.com>
2009-06-10 09:57:58 +12:00
Brian Lopez
69bc2043f9 enable *real* IO parsing for the libxml, nokogiri and rexml backends [#2659 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-06-09 09:01:50 -05:00
Emilio Tagua
103b282130 Merge commit 'rails/master' 2009-06-09 10:29:55 -03:00
Stephen Anderson
a94e7d7897 Sanitized the id generated by text_area_tag helper method. text_area_tag('item[description]') should return: <textarea id="item_description" name="item[description]"></textarea> instead of: <textarea id="item[description]" name="item[description]"></textarea> The old id was causing HTML validation failures.
Signed-off-by: Michael Koziarski <michael@koziarski.com>
2009-06-09 20:36:45 +12:00
David Stevenson
a14df8c9b2 Made label target radio button tags with values. Radio button now respects inherited :index options when generating id.
Signed-off-by: Michael Koziarski <michael@koziarski.com>
2009-06-09 20:28:43 +12:00
Raimonds Simanovskis
63091cef2e disabled base_test.rb tests that were not Oracle compatible (TIME datatype is not supported on Oracle, UPDATE does not support ORDER BY) _before_type_cast on Oracle returns Time and not String added Oracle specific schema definition that was missing for test_default_values test
Signed-off-by: Michael Koziarski <michael@koziarski.com>
2009-06-09 20:26:55 +12:00
Friedrich Göpel
1d57ccbc6f 1.9 compatibility - don't pass an array as the from address as this ends up generating invalid SMTP commands. 2009-06-09 20:22:20 +12:00
Eugene Pimenov
74c1249d07 PostgreSQL adapter should call thread safe quote_string function
Signed-off-by: Michael Koziarski <michael@koziarski.com>
2009-06-09 20:12:01 +12:00
Michael Koziarski
99803b7cdb Pull autoload fix from 2-3-stable 2009-06-09 20:10:21 +12:00
Matt Jones
41a94048e5 Fix several issues with the 2.3.2 gem loader.
Incorporates the following:

- migrates back small change to gems:build:force from bfc1609a50 to finish closing #2266.

- unrolls to_proc calls in gems.rake, to match the change in master.

- fixes #2722 by passing the options hash to dependencies during build. (includes a test)

- fixes #2721 by loading the specification directly in from_directory_name. Adds an option to opt-out of specification loading when needed (in gems:refresh_specs, for instance). Includes tests.

- fixes #2679 by refreshing specs for all frozen gems rather than just gems loaded from the environment.

- fixes #2678 by passing the options hash to dependencies during unpack.

Signed-off-by: Michael Koziarski <michael@koziarski.com>
2009-06-09 19:57:38 +12:00
nate
f68cc639f5 A test to show that http_authentication needs to fail authentication if the password procedure returns nil. Also includes a fix to validate_digest_response to fail validation if the password procedure returns nil.
Signed-off-by: Michael Koziarski <michael@koziarski.com>
2009-06-09 19:47:53 +12:00
Yehuda Katz
114e25e735 Further cleanup of callbacks 2009-06-09 19:47:53 +12:00
Yehuda Katz
8cae3cd0cf More pruning of NewCallbacks 2009-06-09 19:47:53 +12:00
Jeremy Kemper
e9a6255938 Lazier Rakefile requires to avoid needing full rake gem on 1.9 2009-06-08 20:49:21 -07:00
Jeremy Kemper
23f3b567e2 Uses Hash#symbolize_keys 2009-06-08 19:37:52 -07:00
Jeremy Kemper
5b256ac369 Prefer JSON.encode(value) to value.to_json 2009-06-08 19:37:52 -07:00
Jeremy Kemper
14de1a9597 each yields per message not per attribute 2009-06-08 19:37:51 -07:00
Jeremy Kemper
e1f679a020 Simplify json decoder backend lazy load 2009-06-08 19:37:51 -07:00
Jeremy Kemper
6e73cf6bdf Fix AR json encoding 2009-06-08 19:37:51 -07:00
Jeremy Kemper
99cf77be27 Add #element and #collection to ModelName 2009-06-08 19:37:50 -07:00
Jeremy Kemper
d9f16fafec Update for Active Model yielding per error not per attribute 2009-06-08 19:37:50 -07:00
Joshua Peek
27766ccf3b Make use of AS::Concern in ActiveResource 2009-06-08 20:52:27 -05:00
Joshua Peek
0b694a4ff4 Setup ActiveResource autoloads 2009-06-08 20:48:14 -05:00
Joshua Peek
28f36279cd Properly require ActiveModel validation dependencies 2009-06-08 20:32:08 -05:00
Joshua Peek
01515f8ecd Fix activesupport path 2009-06-08 19:59:56 -05:00
Yehuda Katz + Carl Lerche
be371993b7 More documentation work on AbstractController
This is still not completely done and there might be pointers to things that don't exist yet.
2009-06-08 17:41:08 -07:00
Yehuda Katz + Carl Lerche
38b608ecab Writing comments to AbstractController 2009-06-08 16:15:14 -07:00
Yehuda Katz + Carl Lerche
a470bb3612 Remove extraneous response_obj 2009-06-08 16:15:13 -07:00
Jeremy Kemper
30a3b6b4fc Ruby 1.9: fix json encoding 2009-06-08 15:16:47 -07:00
Jeremy Kemper
d3078b540e Explicitly qualify constants in BasicObjects 2009-06-08 15:07:52 -07:00
Yehuda Katz + Carl Lerche
c1fcabb350 Remove duplicate 2009-06-08 14:26:22 -07:00
Jeremy Kemper
a6bf6f275c Use as_json instead of rails_to_json 2009-06-08 14:08:04 -07:00
Yehuda Katz + Carl Lerche
86fc43fd58 ActionPack components should no longer have undeclared dependencies.
* Tests can be run in isolation
  * Dependencies added
  * A few tests modified to avoid depending on AS deps 
    not depended on my files they were testing
2009-06-08 13:34:07 -07:00
Jeremy Kemper
00ee990443 JSON: split encoding and coercion 2009-06-08 13:21:30 -07:00
Jeremy Kemper
5e1b46d4c2 Don't rely on Rails.logger 2009-06-08 01:40:14 -07:00
Geoff Buesing
7fe8b630ce Add notes to TZInfo bundling task 2009-06-07 22:09:21 -05:00
Geoff Buesing
71b1a4b39d Kathmandu TimeZone: reference Asia/Kathmandu zone directly instead of through linked timezone 2009-06-07 21:43:44 -05:00
Geoff Buesing
184986067a Load correct version of TZInfo 2009-06-07 21:36:09 -05:00
Jason Frey (Fryguy)
1d9346428b String #to_time and #to_datetime: handle fractional seconds [#864 state:resolved] 2009-06-07 20:16:08 -05:00
Geoff Buesing
04eb2b72b4 Update bundled TZInfo to v0.3.13 2009-06-07 20:00:25 -05:00
Tim Connor
6a3f8ae407 Work around a gem dependency edge case that prevents Rails from booting..
If you have a frozen gem with unfrozen dependencies (for instance if the
dependency has native extensions so can't be frozen) you can have a
nightmare upgrade problem, where you cannot rake gems:install, because
rake is broken by a gem loading problem.

If you bump up your frozen gem to a newer version that requires a newer
dependency, everybody else on the team will have rake broken by that
dependency mismatch, since you will have had to specify the dependency
in your config.gems, otherwise nobody will have installed it, since the
parent is frozen. And now the config.gems loading code will kill rake.

[#2609 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-06-05 21:54:56 -07:00
Jeremy Kemper
ccf70b9570 Pull in time extensions also 2009-06-05 18:27:27 -07:00
Jeremy Kemper
a838ba392e Prefer sibling action_controller 2009-06-05 18:27:27 -07:00
Yehuda Katz
d6e4113c83 YAGNI Method references. Deprecated 2009-06-02 22:06:21 -07:00
Yehuda Katz
6b4da2ecac Add explicit requirement in a few cases it was missing.
TODO: Come up with the minimal core and remove all of these
2009-06-02 21:43:54 -07:00
Yehuda Katz
1126a85aed Further cleaning up new callbacks 2009-06-02 21:41:31 -07:00
Yehuda Katz
971e2438d9 Simplify callbacks to use less metaprogramming 2009-06-02 19:00:59 -07:00
Emilio Tagua
fd3c55f09f Merge commit 'rails/master'
Conflicts:

	activerecord/lib/active_record.rb
2009-06-02 12:36:36 -03:00
Emilio Tagua
5255a81b80 Updated Arel submodule 2009-06-02 12:33:51 -03:00
Emilio Tagua
2474fbb4d6 Set ActiveRecord as Arel engine on load. 2009-06-02 12:29:09 -03:00
Emilio Tagua
bbe51a1b9d No need to specify the engine now that it is in active_record.rb 2009-06-02 12:27:26 -03:00
Emilio Tagua
522711952b Refactors to work with latest Arel implementation. 2009-06-02 11:40:01 -03:00
Yehuda Katz + Carl Lerche
196f780e30 Get all the callback tests to work on new base 2009-06-01 15:40:40 -07:00
Jeremy Kemper
dcba6e1148 Fix initializer i18n path test 2009-06-01 13:44:43 -07:00
Jeremy Kemper
94911c7af7 Ensure ERB source begins with the encoding comment 2009-06-01 12:34:08 -07:00
Han Kessels
9537fd0e3a fix for IE incompatibility of :disable_with in submit_tag
Signed-off-by: Michael Koziarski <michael@koziarski.com>
2009-06-01 14:03:52 +12:00
Giles Alexander
532219fd09 Schema dumper now records scale 0 decimal columns as decimal not integer.
The schema dumper would dump out any decimal or numeric column that had a zero
scale as an integer column. This will cause problems for very large precision
columns on some DBMSs, particularly PostgreSQL. It also looks strange to see
your column change type after moving through schema.rb.

Signed-off-by: Michael Koziarski <michael@koziarski.com>
[#2741 state:committed]
2009-06-01 13:40:05 +12:00
Jeff Dean
b3839f1c98 Updated the db:structure:dump task to properly format the pgdump command when you have multiple schemas in your schema search path.
Signed-off-by: Michael Koziarski <michael@koziarski.com>
[#2695 state:committed]
2009-06-01 12:12:45 +12:00
Vladimir Dobriakov
64756e8f71 better db:create for mysql - do not assume root user
Signed-off-by: Michael Koziarski <michael@koziarski.com>
[#1459 state:committed]
2009-06-01 12:09:19 +12:00
Jeremy Kemper
f9bd10054c Sidestep need for Kernel#silence_warnings 2009-05-30 11:59:17 -07:00
Jeremy Kemper
c79551f02b Depend on Hash#slice and Object#try 2009-05-30 11:59:17 -07:00
Jeremy Kemper
85eb3af873 Tolerate missing logger 2009-05-30 11:59:17 -07:00
Jeremy Kemper
3962be5b8c Use URI and Inflector 2009-05-30 11:59:17 -07:00
Jeremy Kemper
c53057d4fd html-scanner uses Set and class_inheritable_accessor 2009-05-30 11:59:17 -07:00
Jeremy Kemper
249d9a6606 Depend on Hash#diff extension 2009-05-30 11:59:17 -07:00
Jeremy Kemper
5481e54175 AM::StateMachine autoloads 2009-05-30 11:59:16 -07:00
Joshua Peek
a1140a1031 Revert "Only save the session if we're actually writing to it [#2703 state:resolved]"
This reverts commit dd98280e38.
2009-05-30 09:36:08 -05:00
Luke Melia
54984f0f24 Avoid loading the ActiveRecord::SessionStore class on initialization if it is not in use [#2737 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-05-30 09:35:25 -05:00
Joshua Peek
e7d6f48ea9 Use AS::Concern in ActiveModel 2009-05-30 09:35:24 -05:00
Pratik Naik
e767c65cc9 Make sure tests pass action name to Controller.action() 2009-05-30 15:18:46 +01:00
Pratik Naik
63992e8f3a Support Object#filter method for before/after filters 2009-05-30 15:14:23 +01:00
Joshua Peek
669fd84910 AS::Concern redefines "include" to lazy include modules as dependencies 2009-05-29 17:03:23 -05:00
Joshua Peek
c7c35be8fe AS::Concern includes InstanceMethods module if it exists 2009-05-29 16:28:54 -05:00
Joshua Peek
69742ca8fa Merge branch 'master' into active_model
Conflicts:
	activemodel/lib/active_model/core.rb
	activemodel/test/cases/state_machine/event_test.rb
	activemodel/test/cases/state_machine/state_transition_test.rb
	activerecord/lib/active_record/validations.rb
	activerecord/test/cases/validations/i18n_validation_test.rb
	activeresource/lib/active_resource.rb
	activeresource/test/abstract_unit.rb
2009-05-29 16:06:21 -05:00
Jeremy Kemper
5ec2c7dc29 Ruby 1.9: ERB template encoding using a magic comment at the top of the file 2009-05-28 17:12:48 -05:00
Jeremy Kemper
e23554d79e Ruby 1.9: flushing the output buffer preserves its encoding 2009-05-28 17:12:48 -05:00
Jeremy Kemper
d120f9de7e Reinstate pending output buffer tests 2009-05-28 17:12:48 -05:00
Jeremy Kemper
cf3ccd7be0 Ruby 1.9: use UTF-8 for default internal and external encodings. 2009-05-28 17:12:48 -05:00
Joshua Peek
4e50a35fa2 Break up DependencyModule's dual function of providing a "depend_on" DSL and "included" block DSL into separate modules. But, unify both approaches under AS::Concern. 2009-05-28 11:35:36 -05:00
Joshua Peek
de203245af Revert "Revert "Whitespace!""
This reverts commit 0cac68d3be.
2009-05-28 09:49:02 -05:00
Johan Sörensen
dd98280e38 Only save the session if we're actually writing to it [#2703 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-05-28 09:35:17 -05:00
Johan Sörensen
72cb6f58be The FlashHash and friends causes a lot of needless session storing, when we know for a fact that there's no content in the flash. By not storing the empty hash in the session we save a lot of communication with the various session backends, while still keeping the same interface to the flash. [#2703 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-05-28 09:30:49 -05:00
Olly Legg
0349278f3d Memoize cookies so that updates to cookies are available in the current request. [#2733 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-05-28 09:18:27 -05:00
Joshua Peek
d17fb9dc76 Fix script/server's default mount path [#2731 state:resolved] 2009-05-28 09:16:29 -05:00
Yehuda Katz + Carl Lerche
f2f58f5355 Fix failing ActionCacheFilter tests due to around filter changes. 2009-05-27 17:31:48 -07:00
Yehuda Katz + Carl Lerche
1e2628431a Added support to new callbacks for around filter object that respond to :before & :after used in before|after callbacks 2009-05-27 16:50:40 -07:00
Yehuda Katz + Carl Lerche
2b166d306c Added support to new callbacks for around filter object that respond to :before & :after 2009-05-27 16:49:23 -07:00
Yehuda Katz + Carl Lerche
bd7e3dc47d Added a compatibility layer to get legacy filter tests to pass on new base 2009-05-27 16:49:04 -07:00
Yehuda Katz + Carl Lerche
e70bd6bdfa Added hook point in new base #send_action which does the actual action method dispatching 2009-05-27 16:16:33 -07:00
Carl Lerche
a5688fa907 Add the ability to prepend filters to new callbacks 2009-05-27 16:15:53 -07:00
Hongli Lai (Phusion)
760cb63339 Make the default 500 Internal Server Error page more friendly. Many people don't know they're supposed to look in the log files. [#2716 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-05-27 15:01:03 -05:00
calavera
0d9e904da3 ensure initialize_database_middleware doesn't use ActionController if action_controller framework is not enabled [#2680 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-05-27 14:56:14 -05:00
Joshua Peek
6ef329d325 Ensure Memcache local cache returns duplicated values [#2302 state:resolved] 2009-05-27 14:54:58 -05:00
Eduard Bondarenko
61c471eebb Add % to RESERVED_PCHAR [#2574 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-05-27 14:53:05 -05:00
Niels Ganser
bb8e5843f3 ActionController::Flash::FlashHash.use now returns either the value corresponding to the passed key or itself when no key is passed [#1792 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-05-27 14:51:33 -05:00
anupom syam
746f3860c1 server command help inconsistency fix [#2685 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-05-27 14:45:16 -05:00
Chad Woolley
5679bf64d5 Fix failing CI test (broken in 2daac47 or e693f45): make test_multipart_with_template_path_with_dots only test path with dots, and stop failing on unrelated mimetype assertion. The image/jpeg multipart content type is already tested in test_explicitly_multipart_messages.
Signed-off-by: Yehuda Katz <wycats@yehuda-katzs-macbookpro41.local>
2009-05-27 21:38:23 +02:00
Fabien Jakimowicz
2cb60abfec Add an model_subclass generator.
This generator creates a new model as a subclass of an existing model and the unit test for that model.  Lets users avoid having to manually delete the fixtures and migration or remember to pass those arguments.

[#2702 state:committed]

Signed-off-by: Michael Koziarski <michael@koziarski.com>
2009-05-27 13:14:04 +02:00
Yehuda Katz
eaf8fe7708 Merge branch 'master' of git@github.com:rails/rails 2009-05-27 10:40:55 +02:00
Yehuda Katz
6bbe965ccd Reduce the cost of using ActionController::Http significantly by:
* Removing the dependency on AD::Request and AD::Response
  * Moving the logic for the request and response object
    into a new module that is included by default.
  * Changing Renderer and Redirector to use self.headers,
    self.content_type, and self.status, which have very basic
    default implementations on AC::Http. When RackConvenience
    is included (which it is by default on AC::Base), the full
    Request/Response logic is used instead of the simple logic.
2009-05-27 10:40:43 +02:00
Jeremy Kemper
d73f2ff434 Rename tools/profile_requires -> tools/profile since we do both require and ruby-prof profiling. 2009-05-27 01:11:33 -05:00
Jeremy Kemper
311d686d03 add a metal to minimal examples for comparison 2009-05-27 01:00:02 -05:00
Carl Lerche
7211048b2b Get all template tests passing on new base 2009-05-26 15:19:39 -07:00
Carl Lerche
a1f280e83d Got all the dispatch tests running on new base 2009-05-26 15:03:09 -07:00
Carl Lerche
1358f77745 Add controller/integration_test.rb to the new base test runner 2009-05-26 14:24:22 -07:00
Carl Lerche
a3ca5638d3 Get controller/test_test.rb to pass on new base 2009-05-26 14:13:35 -07:00
Carl Lerche
7dd094329e Add html-scanner to the new base set of autoloads 2009-05-26 13:40:58 -07:00
Carl Lerche
09907d1b93 Get controller/view_paths_test.rb to pass on new base 2009-05-26 12:14:50 -07:00
Carl Lerche
cbb0724f0d In new base Rails2Compatibility, move @template assignment to right before the first action is processed. 2009-05-26 12:06:48 -07:00
Carl Lerche
cd8fb1800d Remove a no-op from view path tests and removed a Symbol#to_proc 2009-05-26 11:47:42 -07:00
Emilio Tagua
b3d4054692 Merge commit 'rails/master' 2009-05-26 11:34:02 -03:00
Pratik Naik
2f59066470 Support Method callbacks 2009-05-26 13:09:33 +02:00
Pratik Naik
10085114ce Make Filter#filter work with around filters 2009-05-25 18:09:12 +02:00
Pratik Naik
9cda410d81 Make cookie store tests pass with the new base 2009-05-25 16:52:44 +02:00
Jeremy Kemper
8097da93cc Don't want Rack's Content-Type default header though 2009-05-24 19:25:53 -07:00
Jeremy Kemper
b1d4fb71bf Construct a single HeaderHash. Speed up assign_default_content_type_and_charset 2009-05-24 17:35:49 -07:00
Jeremy Kemper
bdb61c1dad Compare Base with Http 2009-05-24 17:34:40 -07:00
Jeremy Kemper
6e039e863a Speed up Request#formats 2009-05-23 19:30:23 -07:00
Jeremy Kemper
a78b0a40c6 runner class 2009-05-23 19:30:18 -07:00
Jeremy Kemper
4e3fd23e31 test depends on html-scanner 2009-05-23 03:10:48 -07:00
Yehuda Katz
e0ed4b7aa4 Make a couple more tests pass.
A large number of the remaining failing tests have to do with
  the semantics of filters that are Objects. The right solution
  is probably to just implement the filter/before/after semantics
  in NewCallbacks directly (the current semantics are based
  on the old AS::Callbacks specs)
2009-05-23 01:30:25 -07:00
Yehuda Katz
e22a3d893e Slightly modify things to get content type matching working without breaking other code 2009-05-23 00:39:32 -07:00
Pratik Naik
3ac6d8f8b0 Remove unnecessary asset_host initialization 2009-05-23 02:35:34 +02:00
Pratik Naik
9286d422f8 Add asset_host to Rails2Compatibility 2009-05-23 02:29:55 +02:00
Yehuda Katz + Carl Lerche
5097bd6241 Modify render_test's determine_layout to match RJS 2009-05-22 17:26:27 -07:00
Jeremy Kemper
fb64263c91 Restore some missing test constants 2009-05-22 17:22:37 -07:00
Pratik Naik
595107f22e Move html-scanner tests one dir up 2009-05-23 02:21:07 +02:00
Yehuda Katz + Carl Lerche
69a1ea8b5d Created an ActionController::Renderers::All that includes all the default render options (:json, :js, :rjs, :xml) 2009-05-22 17:17:16 -07:00
Jeremy Kemper
da9e53ec3b Move testing_sandbox to test/lib 2009-05-22 17:17:14 -07:00
Jeremy Kemper
8a03a999ef Cordon off missing filter methods 2009-05-22 17:16:03 -07:00
Yehuda Katz + Carl Lerche
7b3fb1d43f Got controller/render_js_test.rb to pass on new base 2009-05-22 17:08:58 -07:00
Pratik Naik
3a72b55229 Add missing selector_test to the list 2009-05-23 02:08:07 +02:00
Jeremy Kemper
f9dde8fe4e Port cookies to new base 2009-05-22 17:05:44 -07:00
Pratik Naik
c90f613ad6 Add Translation to the new base 2009-05-23 02:03:22 +02:00
Yehuda Katz + Carl Lerche
28dbeb3a64 Get controller/render_other_test.rb to pass on new base and fixed a bug in new base with regards to rendering layouts. 2009-05-22 16:55:27 -07:00
Yehuda Katz + Carl Lerche
63ed43cb99 Added render_other_test.rb to the new base test runner 2009-05-22 16:55:27 -07:00
Pratik Naik
b77602824a Add some more tests to the test_new_base_on_old_tests task 2009-05-23 01:46:37 +02:00
Pratik Naik
f766f66946 Make logging_test pass with the new base 2009-05-23 01:36:09 +02:00
Jeremy Kemper
a01d2a2586 Remove gratuitous filter_chain internal testing. Not part of the API and other tests are sufficient to catch regressions. 2009-05-22 16:25:49 -07:00
Jeremy Kemper
444480c9a5 Verbose test_new_base_on_old_tests 2009-05-22 16:23:48 -07:00
Jeremy Kemper
b7c031f52e Move active_record_unit to shared load path 2009-05-22 16:21:21 -07:00
Jeremy Kemper
ca72078388 Move fake controllers and models to a common load path 2009-05-22 16:11:54 -07:00
Jeremy Kemper
98f856d772 Set ENV['NEW'] to run any test task with the new Base. 2009-05-22 15:32:35 -07:00
Jeremy Kemper
3c13551aa2 Complain if new_base/abstract_unit was already loaded 2009-05-22 15:32:35 -07:00
Jeremy Kemper
df2d96a7f0 Move misplaced test 2009-05-22 15:32:35 -07:00
Pratik Naik
8a336d01d2 Use super wherever possible in ActionController::Helpers#helper 2009-05-23 00:30:32 +02:00
Yehuda Katz + Carl Lerche
72a574b507 Get controller/layout_test.rb running on new base except for ActionController::Base.exempt_from_layout which is going to be deprecated. 2009-05-22 15:25:13 -07:00
Yehuda Katz + Carl Lerche
01129534cd Cleaned up the #render_to_body chain by extracting determining the templates to render to a separate hook point. 2009-05-22 15:24:31 -07:00
Pratik Naik
e976c489e6 Add all the existing helpers related features to the new base 2009-05-23 00:17:10 +02:00
Pratik Naik
1d168afcb1 Move FilterParameterLogging to a stand alone module and make it work on new base 2009-05-22 19:51:17 +02:00
Pratik Naik
faaff383e6 Add assert_select tests to the new base 2009-05-22 19:03:27 +02:00
Pratik Naik
9d08f86cd4 Make assertion tests pass with the new base 2009-05-22 19:01:52 +02:00
Pratik Naik
d1d9a6c261 Require ruby-debug from new_base/abstract_unit 2009-05-22 18:15:43 +02:00
Jeremy Kemper
1fa7e3322d Ruby 1.9 compat: don't rely on lexical scoping since the included block is called from dependency_module 2009-05-21 20:54:28 -07:00
Jeremy Kemper
4c52ba278b Move Safari response-padding fix to Rails2Compatibility. Should be a Rack concern. 2009-05-21 20:27:24 -07:00
Jeremy Kemper
8f3cbb4773 Dead local 2009-05-21 20:27:24 -07:00
Jeremy Kemper
e0e124757a Fewer runs by default 2009-05-21 20:27:24 -07:00
Yehuda Katz + Carl Lerche
68a207ccf6 Implemented layout conditions in new base 2009-05-21 18:14:20 -07:00
Yehuda Katz + Carl Lerche
6923b392b7 Added the :rjs render option 2009-05-21 16:35:40 -07:00
Yehuda Katz + Carl Lerche
e773d0e68a Renamed #implicit_render to #default_render in new base to support the default_render API 2009-05-21 16:31:05 -07:00
Pratik Naik
1a52b246eb Add HTTP Authentication to the new base 2009-05-22 00:29:47 +02:00
Pratik Naik
d2cac9dd0e Add missing dependency in Streaming 2009-05-22 00:27:08 +02:00
Yehuda Katz + Carl Lerche
9d3d774670 Update render options to remove performance implications of many render options types 2009-05-21 15:23:52 -07:00
Yehuda Katz + Carl Lerche
ad1c90de3a Added the :xml render option 2009-05-21 14:51:29 -07:00
Yehuda Katz + Carl Lerche
2daac47d58 Added the ability to register methods to handle specific render option keys and render :json 2009-05-21 14:36:00 -07:00
Yehuda Katz + Carl Lerche
e693f45e15 Remove some response content type concepts from ActionView 2009-05-21 14:34:56 -07:00
Pratik Naik
386ff66e5e Add Streaming to new base 2009-05-21 21:48:42 +02:00
Pratik Naik
59b32f2883 RequestForgeryProtection now works with the new base 2009-05-21 21:48:42 +02:00
Jeremy Kemper
886eeed52e Clean up tools/profile_requires a bit 2009-05-21 10:22:35 -07:00
Chad Woolley
0f1b283e03 Fix eager association test related to different ordering on sqlite
[#2686 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-05-21 10:01:47 -07:00
Jeremy Kemper
e9a7545123 Avoid uninitialized instance variable warning 2009-05-20 18:12:45 -07:00
Jeremy Kemper
428829fc38 Single-require forward compatibility with new Ruby features like Object#tap, Enumerable#group_by, and Process.daemon. Code with the latest but run anywhere. 2009-05-20 18:12:45 -07:00
Jeremy Kemper
886aa2f0e1 Extract autoloads 2009-05-20 18:12:45 -07:00
Jeremy Kemper
5f222c524e Remove 'core' fluff. Hookable ActiveSupport.load_all! 2009-05-20 18:12:44 -07:00
Jeremy Kemper
3694227f24 Break out Symbol#to_proc as a future-ruby extension 2009-05-20 18:12:44 -07:00
Jeremy Kemper
6839883854 Break up misc Object extensions 2009-05-20 18:12:44 -07:00
Jeremy Kemper
429a00f225 Remove bad add 2009-05-20 18:12:44 -07:00
Pratik Naik
5a03645762 Allow Module#depends_on to accept multiple modules 2009-05-21 03:04:17 +02:00
Pratik Naik
e21d1614bb Made ActionController::Verification work with new_base 2009-05-21 02:55:25 +02:00
Yehuda Katz + Carl Lerche
7f7fdc407a Make controller/content_type_test.rb pass on new base 2009-05-20 17:42:04 -07:00
Yehuda Katz + Carl Lerche
c8eda9ade4 Fixed new_base tests on ruby 1.9 2009-05-20 17:22:29 -07:00
Yehuda Katz + Carl Lerche
c4a6109286 Got controller/mime_responds_test.rb running on the new base 2009-05-20 16:54:21 -07:00
Pratik Naik
8e7a87d299 Make ActionController::Flash work with new_base 2009-05-21 01:41:35 +02:00
Jeremy Kemper
205cfe2163 Massage setup for old tests on new base 2009-05-20 16:23:55 -07:00
Jeremy Kemper
c86ec82cf6 Wrap string body in an array 2009-05-20 16:01:21 -07:00
Jeremy Kemper
b46c9071c3 Ruby 1.9 stdlib gems don't recognize .pre yet 2009-05-20 16:01:21 -07:00
Yehuda Katz + Carl Lerche
77d955c517 Added passing old tests on new base to the main test runner 2009-05-20 15:54:29 -07:00
Yehuda Katz + Carl Lerche
01f032f256 Added responds_to to new base. 2009-05-20 15:34:26 -07:00
Pratik Naik
c03b0ca7eb Replace the class level Rack::Test DSL with the regular integration tests DSL 2009-05-20 21:15:06 +02:00
Joshua Peek
6761759a90 Temporarily bundle rack-test while MockSession is baking 2009-05-19 22:43:22 -05:00
Bryan Helmkamp
df0faea378 Refactor ActionController instantiation capture 2009-05-19 22:43:21 -05:00
Bryan Helmkamp
0029d5e594 Integrating Rack::MockSession (from Rack::Test) 2009-05-19 22:43:21 -05:00
Yehuda Katz + Carl Lerche
321168b17b Make old caching tests pass on new base. 2009-05-19 18:11:45 -07:00
Yehuda Katz + Carl Lerche
67cc021d01 Modified caching implementation to work with NewBase 2009-05-19 18:11:45 -07:00
Yehuda Katz + Carl Lerche
0e7da0e4a0 Include caching module into new base 2009-05-19 18:11:44 -07:00
Yehuda Katz + Carl Lerche
26f2be01c2 Modify caching to use new included helper 2009-05-19 18:11:44 -07:00
Yehuda Katz + Carl Lerche
67247ca8ee Corrected new callbacks semantics with regards to using objects for around filters. 2009-05-19 18:11:44 -07:00
Bryan Helmkamp
36058f4504 Use duck typing to also allow MemCache-like object when initializing a MemCacheStore
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-05-19 16:58:04 -07:00
Emilio Tagua
aa55122990 Merge commit 'rails/master' 2009-05-19 19:37:36 -03:00
Pratik Naik
d8fffe7b23 Replace ad hoc Rack::Test with ActionController::IntegrationTest 2009-05-20 00:06:14 +02:00
Pratik Naik
f503a5dc97 Missing CHANGELOG entry for 4a6f4b92ad 2009-05-19 23:57:49 +02:00
Pratik Naik
4a6f4b92ad Change integration test helpers to accept Rack environment instead of just HTTP Headers.
Before :  get '/path', {}, 'Accept' => 'text/javascript'
  After  :  get '/path', {}, 'HTTP_ACCEPT' => 'text/javascript'
2009-05-19 23:50:03 +02:00
Jeremy Kemper
0bdef30f35 Lazy-require Kernel#silence_warnings 2009-05-19 12:19:58 -07:00
Bryan Helmkamp
e2ed1a1ca4 Allow MemCacheStore to be initialized with a MemCache object instead of addresses and options 2009-05-19 10:54:56 -07:00
Chad Woolley
6dc3a6a954 Upgrade CI server to latest RubyGems [#2665 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-05-19 12:50:26 +02:00
Emilio Tagua
20deb677a2 Add missing models and fixtures [#2673 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-05-19 12:11:46 +02:00
Yehuda Katz + Carl Lerche
07f733c631 Ported simple benchmarking in new base 2009-05-18 17:33:45 -07:00
Emilio Tagua
1cc4459939 Merge commit 'rails/master'
Conflicts:

	activerecord/lib/active_record.rb

Updated:
  Arel submodule
2009-05-18 20:01:06 -03:00
Jeremy Kemper
ee5520a0a5 Merge branch 'master' of git@github.com:rails/rails 2009-05-18 15:02:15 -07:00
Jeremy Kemper
41e9414b60 Include acts_as_string? 2009-05-18 15:01:13 -07:00
Emilio Tagua
5463823df3 Remove unnecessary condition and local variable [#2602 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-05-18 22:46:37 +02:00
Joe Van Dyk
29550cc91f Add ability to get multiple memcached keys at the same time (via MemCacheStore#read_multi).
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-05-18 13:43:56 -07:00
Jeremy Kemper
3e2f0800e3 Merge branch 'master' of git@github.com:rails/rails 2009-05-18 13:43:44 -07:00
Ken Collins
87adecfef5 Reimplement Fixtures.identify so that it consistently generates identities across ruby versions.
[#2633 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-05-18 13:40:45 -07:00
Luca Guidi
cef76c8af4 Ensure HasManyThroughAssociation#destroy delete orphan records [#2251 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-05-18 22:30:43 +02:00
Jeremy Kemper
a69b28a8b1 Missing 1.8.7 backport extensions 2009-05-18 13:20:04 -07:00
Pratik Naik
c5e109bbe7 Make sure default_scope#create checks for options[:conditions] [#2181 state:resolved] [James Le Cuirot] 2009-05-18 21:27:42 +02:00
Jeremy Kemper
37453e11e9 Revert "Get AR CI passing again by requiring the entire core_ext"
This reverts commit 8e6a18d867.
2009-05-18 11:55:06 -07:00
Jeremy Kemper
cf6e025a45 Merge branch 'master' of git@github.com:rails/rails 2009-05-18 11:54:51 -07:00
Andy Stewart
5e190ef138 Truncate helper accepts a :separator for a more legible result [#1807 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-05-18 20:46:19 +02:00
Pratik Naik
195fadbfd3 Ensure HTTP Digest auth uses appropriate HTTP method [#2490 state:resolved] [Steve Madsen] 2009-05-18 16:59:37 +02:00
Emilio Tagua
3db44e938f Merge branch 'master' of git://github.com/rails/rails 2009-05-18 11:19:03 -03:00
Emilio Tagua
a04dedd563 Merge commit 'rails/master'
Conflicts:

	activerecord/lib/active_record/base.rb
	activerecord/lib/active_record/migration.rb
	activerecord/test/cases/helper.rb
2009-05-18 11:18:46 -03:00
Emilio Tagua
28f5cfe066 Add missing model and fixtures to finder_test [#2671 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-05-18 15:58:25 +02:00
Benjamin Floering
27de7f150b Fixed limited eager loading associations with numbers in the name [#2668 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-05-18 13:56:17 +02:00
Kerry Buckley
49afe81a13 Report errors in 'all project' rake tasks [#2224 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-05-18 11:13:51 +02:00
rick
e89241c92f load the JSON Backend lazily. If the JSON gem is already loaded, use the JSONGem backend by default. 2009-05-17 19:18:00 -07:00
Brian Lopez
b0de061e7b Allow ParamsParser to parse YAML from the request body IO directly
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-05-17 16:09:28 -05:00
Joshua Peek
01d7acd11d Fix reset_session with ActiveRecord store [#2200 state:resolved] 2009-05-17 14:42:36 -05:00
Mislav Marohnić
b33c0d9832 replace the aaa_create_tables_test hack with loading test database schema in the test helper [#2663 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-05-17 13:51:35 -05:00
Joshua Peek
092089015b Extract generic callbacks middleware from dispatcher 2009-05-17 13:39:55 -05:00
Mike Breen
edc9c226d1 Add tests for assert_template :template
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-05-17 19:50:00 +02:00
Joshua Peek
8118fca9be Merge Failsafe middleware into ShowExceptions 2009-05-17 12:24:59 -05:00
Joshua Peek
c3319504f0 Rescue hack was supposed to be removed. Some how it crept back in. 2009-05-17 12:24:59 -05:00
Travis Briggs
98eaa2c683 Ensure number_to_human_size does not strip zeros from the end [#1763 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-05-17 19:02:50 +02:00
Thomas E. Glasgow
e41984c5f7 Simplify filter_chain method implementation [#2327 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-05-17 18:56:07 +02:00
Chris Kampmeier
4e8c36a741 Implement #many? for NamedScope and AssociationCollection using #size [#1500 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-05-17 18:56:06 +02:00
Lance Ivy
11bac70078 Ensure auto_link does not ignore multiple trailing punctuations [#2504 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-05-17 18:56:06 +02:00
Brian Lopez
53dda29f8b Add support for parsing XML and JSON from an IO as well as a string [#2659 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-05-17 10:37:52 -05:00
Mike Gunderloy
344ee681d6 Remove obsolete wiki reference [#2291 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-05-17 15:15:43 +02:00
Paulo Schneider
34874b3bcd Fix typo in the generated routes.rb [#2433 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-05-17 15:00:05 +02:00
Jacob Kjeldahl
d6645a5e52 Supply valid ruby-prof parameters [#1804 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-05-17 14:53:06 +02:00
Daniel Guettler
25724eede9 has_one :through should not create a new association when assigned nil [#698 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-05-17 14:48:20 +02:00
Pratik Naik
a9e8c4b374 Ensure rake test does not run new base tests as that requires rack/test 2009-05-17 14:31:54 +02:00
Jeffrey Chupp
842dab0c29 Ensure WhiteListSanitizer allows dl tag [#2393 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-05-17 14:29:47 +02:00
Yehuda Katz
4fa871654d Get Railties passing again 2009-05-16 12:28:25 -07:00
Yehuda Katz
db1bf3650d Fix ActionMailer Symbol#to_proc instance 2009-05-16 12:13:41 -07:00
Yehuda Katz
8e6a18d867 Get AR CI passing again by requiring the entire core_ext
Note that this includes Time and Date; we should
  really figure out what parts of core_ext are really
  required for AR and require just those.
2009-05-16 12:09:25 -07:00
Bryan Helmkamp
59c4d9a5b4 Changelog 2009-05-16 14:18:10 -04:00
Bryan Helmkamp
7f318c3ec5 Instead of checking Rails.env.test? in Failsafe middleware, check env["rails.raise_exceptions"] 2009-05-16 14:15:26 -04:00
Pratik Naik
a6d8ca0f0e Include guides directory in the rails gem 2009-05-16 17:10:04 +02:00
Yehuda Katz + Carl Lerche
5a45446cff Ported Rescuable to new base 2009-05-15 17:49:11 -07:00
Yehuda Katz + Carl Lerche
7e10504bde Refactored AbstractController to provide better hook points for overriding aspects of action dispatching 2009-05-15 15:57:12 -07:00
José Valim
eb021707f5 Allow strings to be sent as collection to select.
Signed-off-by: Michael Koziarski <michael@koziarski.com>
2009-05-15 15:30:17 +12:00
Jeremy Kemper
628110d7ee Active Support dependencies 2009-05-14 17:42:20 -07:00
Yehuda Katz + Carl Lerche
b6bac73b28 Merge commit 'origin/master'
Conflicts:
	actionpack/lib/action_controller/abstract/base.rb
	actionpack/lib/action_controller/routing.rb
2009-05-14 17:38:30 -07:00
Yehuda Katz + Carl Lerche
da65320433 Got new base to pass controller/base_test.rb, implemented method_missing action semantics in compatibility mode, and fixed a few action_missing bugs. 2009-05-14 17:25:10 -07:00
Yehuda Katz + Carl Lerche
8fac2c88ca Cleaning up more render tests 2009-05-14 15:30:35 -07:00
Jeremy Kemper
c286952050 Minimal base/new_base comparison 2009-05-14 02:01:08 -07:00
Jeremy Kemper
5dd29c466c Cherry-picking Active Support extensions 2009-05-14 02:01:08 -07:00
Jeremy Kemper
29bd8f7b89 Simple example for require profiling 2009-05-14 02:01:08 -07:00
Peter Marklund
afcbdfc15f Changed ActiveRecord::Base#exists? to invoke find_initial so that it is compatible with, and doesn't lose, :include scopes (references to eager loaded tables)
Signed-off-by: Michael Koziarski <michael@koziarski.com>
[#2543 state:committed]
2009-05-14 20:42:00 +12:00
Yehuda Katz + Carl Lerche
49a84ff69c Ported over render :file tests. 2009-05-13 17:00:59 -07:00
Jeremy Kemper
4f291fa528 Simple examples for require profiling 2009-05-13 12:00:49 -07:00
Jeremy Kemper
e8550ee032 Cherry-pick core extensions 2009-05-13 12:00:15 -07:00
Jeremy Kemper
fa5da8ad54 isolated_test task 2009-05-13 11:43:03 -07:00
Jeremy Kemper
a7ccc7c79f Remove support for deprecated validation message interpolation format 2009-05-13 11:43:03 -07:00
Jeremy Kemper
e9c5750bd1 Preserve ordering 2009-05-13 11:43:03 -07:00
Jeremy Kemper
4c963972fd Defer rake/contrib requires so we can use the stdlib rake instead of the full gem 2009-05-13 11:43:03 -07:00
Yehuda Katz + Carl Lerche
216309c165 Implemented redirects and partial rendering in new base. 2009-05-12 16:21:34 -07:00
Emilio Tagua
0048897a41 Merge commit 'rails/master' 2009-05-12 16:13:00 -03:00
Yehuda Katz + Carl Lerche
72ca7c591c Fixed new callbacks to not call the action when a callback sets the response body 2009-05-12 10:53:00 -07:00
Jeremy Kemper
22c5667c2e Defer rake/contrib/sshpublisher require so we can use the stdlib rake instead of the full gem 2009-05-11 19:49:11 -07:00
Bryan Helmkamp
a2875bec9a Use DependencyModule for included hooks in ActiveRecord 2009-05-11 22:23:47 -04:00
Yehuda Katz + Carl Lerche
00a9d4b91c Merge branch 'master' into wip_abstract_controller
Conflicts:
	actionpack/lib/action_controller/abstract/callbacks.rb
	actionpack/lib/action_controller/abstract/renderer.rb
	actionpack/lib/action_controller/base/base.rb
	actionpack/lib/action_controller/dispatch/dispatcher.rb
	actionpack/lib/action_controller/routing/route_set.rb
	actionpack/lib/action_controller/testing/process.rb
	actionpack/test/abstract_controller/layouts_test.rb
	actionpack/test/controller/filters_test.rb
	actionpack/test/controller/helper_test.rb
	actionpack/test/controller/render_test.rb
	actionpack/test/new_base/test_helper.rb
2009-05-11 17:07:05 -07:00
Yehuda Katz + Carl Lerche
0cac68d3be Revert "Whitespace!"
This reverts commit a747ab5b20.
2009-05-11 15:03:24 -07:00
Yehuda Katz + Carl Lerche
0f6e764e40 Fixed a bug with handling render options 2009-05-11 14:48:58 -07:00
Yehuda Katz + Carl Lerche
6694bd46f5 Aliased AbstractController::ActionNotFound to ActionController::UnknownAction 2009-05-11 12:45:26 -07:00
Jeremy Kemper
ddbeb15a5e Revert "Fixed bug with polymorphic has_one :as pointing to an STI record"
[#2594 state:open]

This reverts commit 99c103be11.
2009-05-11 12:20:54 -07:00
Yehuda Katz + Carl Lerche
94ee9d2452 Ported ConditionalGet to new Base 2009-05-11 12:04:43 -07:00
Yehuda Katz + Carl Lerche
c1d120a71e Don't run the action if callbacks are halted.
In AbstractController, this means that response_body is not empty
2009-05-11 11:48:38 -07:00
Douglas F Shearer
e1854e0b19 ActiveSupport::OrderedHash[1,2,3,4] creates an OrderedHash instead of a Hash.
[#2615 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-05-11 11:45:57 -07:00
Jeremy Kemper
d45d0a1864 Merge branch 'master' of git@github.com:rails/rails 2009-05-11 11:43:30 -07:00
Yehuda Katz + Carl Lerche
34caf4f552 Merge branch 'master' into wip_abstract_controller 2009-05-11 10:58:30 -07:00
Yehuda Katz + Carl Lerche
a2f3684cec Ported fresh_when into a ConditionalGet module 2009-05-11 10:57:59 -07:00
Yehuda Katz
030dfe3f83 More community code review :) 2009-05-11 10:22:07 -07:00
David Heinemeier Hansson
4932f7b38f Added db/seeds.rb as a default file for storing seed data for the database. Can be loaded with rake db:seed (or created alongside the db with db:setup). (This is also known as the "Stop Putting Gawd Damn Seed Data In Your Migrations" feature) [DHH] 2009-05-11 19:08:13 +02:00
Alexander Dymo
2e7409f035 Change spelling of Kyev timezone to Kyiv [#2613 state:resolved] 2009-05-10 11:59:03 -05:00
Mike Breen
9010ed2755 Allow you to pass :all_blank to :reject_if option to automatically create a Proc that will reject any record with blank attributes. 2009-05-10 15:02:00 +12:00
Anthony Crumley
026b78f907 Fixed eager load error on find with include => [:table_name] and hash conditions like {:table_name => {:column => 'value'}}
Signed-off-by: Michael Koziarski <michael@koziarski.com>
2009-05-10 13:36:51 +12:00
Ken Collins
9e0cfdb7f9 ActiveSupport::OrderedHash#to_a method returns an ordered set of arrays. Matches ruby1.9's Hash#to_a.
Signed-off-by: Michael Koziarski <michael@koziarski.com>
[#2629 state:committed]
2009-05-10 13:04:46 +12:00
Frederick Cheung
235775de29 honour :inverse_of for joins based include
Signed-off-by: Michael Koziarski <michael@koziarski.com>
2009-05-10 12:50:03 +12:00
Frederick Cheung
ef6f22ab2a honour inverse_of when preloading associations
Signed-off-by: Michael Koziarski <michael@koziarski.com>
2009-05-10 12:50:02 +12:00
Emilio Tagua
6c7d8cb8ac Merge commit 'rails/master' 2009-05-09 13:07:30 -03:00
Jeremy Kemper
4817bf94d1 Check for date/time methods that moved upstream in 1.9 2009-05-07 18:39:03 -07:00
Jeremy Kemper
49ed452136 Defer rake/contrib/sshpublisher require so basic tasks don't need the full rake gem 2009-05-07 18:27:50 -07:00
Jeremy Kemper
8ee0c598db Tool for profiling resource usage in each require call.
$ ruby -Iactiveresource/lib tools/profile_requires.rb active_resource
91.84 KB       3220 obj      4.0 ms  active_resource
83.86 KB       3108 obj      3.3 ms   active_support
69.32 KB       2682 obj      2.6 ms    active_support/vendor
33.98 KB        651 obj      0.6 ms     i18n
94.40 KB        315 obj      4.0 ms  44 KB RSS
2009-05-07 12:10:26 -07:00
Joshua Peek
a747ab5b20 Whitespace! 2009-05-07 10:45:29 -05:00
Joshua Peek
af40fa6d03 Prefer "included" language over "setup" 2009-05-07 10:38:57 -05:00
Joshua Peek
2854535b02 Make module dependency DSL opt in 2009-05-07 10:29:22 -05:00
Joshua Peek
783deae99a Add test coverage to module setup extensions 2009-05-07 10:03:39 -05:00
Matt Jones
bfc1609a50 Remove stray call to gems:unpack in gems:build:force
[#2266 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-05-06 18:57:27 -07:00
Jeremy Kemper
201d8b1755 Fix tests on 1.8.6 2009-05-06 12:19:30 -07:00
Emilio Tagua
8885b2d6c1 Refactor to calculations. Migration's versions are string not integer. ARel submodule updated. 2009-05-06 14:16:03 -03:00
Emilio Tagua
118b19a9fa Merge branch 'master' of git://github.com/rails/rails 2009-05-06 11:32:14 -03:00
Jeremy Kemper
bd7659e014 Fix old reference to ActionController::Failsafe 2009-05-06 01:28:06 -07:00
Jeremy Kemper
6d4a4fabbb Cherry pick Active Support dependencies. Autoload. 2009-05-06 00:14:55 -07:00
Jeremy Kemper
c585e263ab Remove superfluous CGI require 2009-05-05 21:50:53 -07:00
Jeremy Kemper
a05cfb6df5 Prefer sibling Active Support 2009-05-05 21:44:02 -07:00
Jeremy Kemper
2f42433f0a Cherry-pick the inflector only 2009-05-05 21:40:53 -07:00
Emilio Tagua
a83a1cceba Merge commit 'rails/master' 2009-05-05 10:14:28 -03:00
Joshua Peek
d4402c5554 assert_redirect_to's partial hash matching was deprecated in 2-3 stable 7f1f16c01 2009-05-04 20:26:43 -05:00
Tim Connor
e3891601d1 fix problems with requires in metal choking under development reloading [#2579 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-05-04 20:11:24 -05:00
Joshua Peek
b9f9dd8fe9 Fix console 2009-05-04 20:02:14 -05:00
Emilio Tagua
d19d4d2f20 Fixes to have all test passing on PostgreSQL.
Calculations now use construct_calculation_arel, making construct_finder_arel less hackish.

Updated ARel to support PostgreSQL.
2009-05-04 21:53:29 -03:00
Murray Steele
ccea98389a Providing support for :inverse_of as an option to associations.
You can now add an :inverse_of option to has_one, has_many and belongs_to associations.  This is best described with an example:

class Man < ActiveRecord::Base
  has_one :face, :inverse_of => :man
end

class Face < ActiveRecord::Base
  belongs_to :man, :inverse_of => :face
end

m = Man.first
f = m.face

Without :inverse_of m and f.man would be different instances of the same object (f.man being pulled from the database again).  With these new :inverse_of options m and f.man are the same in memory instance.

Currently :inverse_of supports has_one and has_many (but not the :through variants) associations.  It also supplies inverse support for belongs_to associations where the inverse is a has_one and it's not a polymorphic.

Signed-off-by: Murray Steele <muz@h-lame.com>
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-05-04 15:27:39 -07:00
Emilio Tagua
d3042ef80c Merge commit 'rails/master' 2009-05-04 19:23:34 -03:00
codebrulee
eb201e64c0 Fixed Hash#from_xml with keys that are all caps.
Signed-off-by: Michael Koziarski <michael@koziarski.com>
2009-05-04 10:01:01 -07:00
Jeremy Kemper
8b6d2ef2f5 Merge branch 'master' of git@github.com:rails/rails 2009-05-04 08:35:35 -07:00
Chris Kampmeier
d3ee8756c8 Don't use #tap before Active Support is available, since older versions of ruby don't have native implementations
[#2603 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-05-04 08:32:25 -07:00
Joshua Peek
bcc4537f2a Wrap dispatcher callbacks around the whole middleware chain. Kill unnecessary Reloader middleware. 2009-05-03 09:41:40 -05:00
Joshua Peek
e066019280 Show lazy middleware args in pretty print 2009-05-03 09:24:32 -05:00
Joshua Peek
11af089cee Extract ActionController rescue templates into Rescue and ShowExceptions middleware.
This commit breaks all exception catching plugins like ExceptionNotifier. These plugins should be rewritten as middleware instead overriding Controller#rescue_action_in_public.
2009-05-02 23:02:22 -05:00
Jeremy Kemper
9047c9809d Fix implicit ordering expectation 2009-05-02 16:41:50 -07:00
Jeremy Kemper
1c6fcbfd2d Fix implicit ordering expectation 2009-05-02 15:30:00 -07:00
Jeremy Kemper
186fee48c7 Merge branch 'master' of git@github.com:rails/rails 2009-05-02 15:21:19 -07:00
Jeremy Kemper
945bf9c254 Check for sibling Active Support first 2009-05-02 15:16:12 -07:00
Joshua Peek
24affdc88c Deprecate Controller.process interface 2009-05-02 15:37:29 -05:00
Joshua Peek
f32cf44870 Switch functional tests to run through the rack interface instead of process 2009-05-02 15:29:18 -05:00
Joshua Peek
a8b75c480f Functional test runner finalizes response just like the integration test runner. In both runners, the @response object will now behave the same.
Some functional tests will need to be updated if they are relying on preprocessed data on the response.
2009-05-02 14:57:40 -05:00
Joshua Peek
3900f4007e Deprecate assert_redirect_to's partial hash matching 2009-05-02 14:23:44 -05:00
Emilio Tagua
d522b7ccf6 Revert "Work around count returning string (bug)"
This reverts commit 4bb6f77059.
2009-05-02 12:59:49 -03:00
Yehuda Katz
72160d9f89 Implement FooController.action(:name)
* Rails actions are now Rack endpoints, and can be retrieved
    via FooController.action(name) and called with an env
  * Updated some tests that relied on the old internal
    #process/#call implementation
2009-05-02 02:15:09 -07:00
Emilio Tagua
3fd467e9ed Refactor to use arel_table method, and also use the same method name for instance and class methods. 2009-05-02 04:02:09 -03:00
Emilio Tagua
c9896884a4 Removed ARel table assignment 2009-05-02 03:40:31 -03:00
Emilio Tagua
5e790d368c Merge commit 'rails/master' 2009-05-02 03:21:40 -03:00
Emilio Tagua
9f36431f58 Updated ARel 2009-05-02 03:15:19 -03:00
Yehuda Katz + Carl Lerche
ad2a1b5cb1 Get render :inline working 2009-05-01 18:17:08 -07:00
Yehuda Katz + Carl Lerche
7dd072d333 A few more tweaks to get new Base running old render tests again 2009-05-01 17:53:20 -07:00
Yehuda Katz + Carl Lerche
e046f36824 Renamed Base2 to Base and don't require old action_controller for new Base 2009-05-01 17:31:03 -07:00
Yehuda Katz + Carl Lerche
b1d34b3aa4 Starting to get new_base to run on old tests 2009-05-01 17:31:03 -07:00
Yehuda Katz + Carl Lerche
918b119bd3 Add support for stripping "layouts/" from the layout name 2009-05-01 17:31:02 -07:00
Yehuda Katz + Carl Lerche
b4903a8e34 Modify new_base to use String action_names for back-compat 2009-05-01 17:31:02 -07:00
Yehuda Katz + Carl Lerche
69fd669165 Committing the last changes before we start trying to get the old tests to pass on the new base 2009-05-01 17:31:02 -07:00
Yehuda Katz + Carl Lerche
4ee3e5b094 Ported over the concept of public instance methods on controller child classes as callable action methods 2009-05-01 17:31:02 -07:00
Yehuda Katz + Carl Lerche
d58b57a3ca Move ContentType inline for now.
Trying to avoid premature proliferation of modules.
2009-05-01 17:31:02 -07:00
Yehuda Katz + Carl Lerche
b98e496c03 Support implicit and explicit content types 2009-05-01 17:31:02 -07:00
Yehuda Katz + Carl Lerche
49834e088b Support implicit render and blank render 2009-05-01 17:31:02 -07:00
Yehuda Katz + Carl Lerche
0c3d9bc4c2 Ported over render :template tests 2009-05-01 17:31:01 -07:00
Yehuda Katz + Carl Lerche
4f68311685 Finished implementing render :text in Base2 2009-05-01 17:31:01 -07:00
Yehuda Katz + Carl Lerche
1b45991603 Renamed the new_base tests 2009-05-01 17:31:01 -07:00
Yehuda Katz + Carl Lerche
b692fceb6a Renamed ActionController::AbstractBase to ActionController::Http 2009-05-01 17:31:01 -07:00
Yehuda Katz + Carl Lerche
059afb3a3a Removed a stray method_missing in the new callbacks system 2009-05-01 17:31:01 -07:00
Yehuda Katz + Carl Lerche
8a4e77b420 OMG, a lot of work 2009-05-01 17:31:01 -07:00
Yehuda Katz + Carl Lerche
34509777fd Makes new callbacks support keys with special characters 2009-05-01 17:31:01 -07:00
Ruy Asan
3be3470fab Added routing test for irregular ID requirements and custom member action.
[#2595 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-05-01 15:02:32 -07:00
Ruy Asan
99c103be11 Fixed bug with polymorphic has_one :as pointing to an STI record
[#2594 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-05-01 14:47:56 -07:00
Alexander Podgorbunsky
db0bfe4ede Default scope :order should be overridden by named scopes.
[#2346 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-05-01 14:44:24 -07:00
Pratik Naik
853c229bbd Rename vendor/rack to vendor/rack-1.1.pre 2009-05-01 20:24:14 +01:00
Pratik Naik
432e631d5c Vendor Rack edge ( commit : 815342a8e15db564b766f209ffb1e340233f064f ) 2009-05-01 20:12:49 +01:00
steve
60a6284a46 Tests should use ActiveRecord::Base.connection.rollback_db_transaction to rollback a transaction
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-05-01 16:00:09 +01:00
steve
5501b99a19 Ensure ActiveRecord::Base.connection_pool.with_connection creates a new connection only when needed [#1752 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-05-01 14:58:10 +01:00
Ken Collins
b193f23390 Use table_exists? in #initialize_schema_migrations_table [#1923 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-05-01 14:24:40 +01:00
Joshua Peek
664ae187a9 Update some old tests to use AC TestProcess 2009-04-30 23:46:35 -05:00
Joshua Peek
05bd863c02 alias method chain process with test 2009-04-30 23:46:35 -05:00
Joshua Peek
1fcc7dbcc8 Move TestRequest#query_parameters into AD TestRequest 2009-04-30 23:46:34 -05:00
Jeremy Kemper
dc9f53b05b Selectively require rake sshpublisher so full gem isn't required 2009-04-30 21:02:23 -07:00
Jeremy Kemper
7a7382b213 Selectively require rake sshpublisher so full gem isn't required 2009-04-30 21:02:11 -07:00
Jeremy Kemper
9b852af497 Explicitly require builder for to_xml 2009-04-30 20:34:11 -07:00
Jeremy Kemper
509c389bf8 Explicitly require builder for to_xml 2009-04-30 20:33:50 -07:00
Jeremy Kemper
4bb6f77059 Work around count returning string (bug) 2009-04-30 20:32:19 -07:00
Jeremy Kemper
59b58dfa89 Use public submodule url 2009-04-30 20:31:47 -07:00
Jeremy Kemper
64c9a40137 Make ruby-debug optional 2009-04-30 20:31:32 -07:00
Joshua Peek
0fa1e75d41 Set rack.input instead of RAW_POST_DATA in TestRequest 2009-04-30 20:04:55 -05:00
Joshua Peek
261ec996de Missed stray @request_uri 2009-04-30 19:36:18 -05:00
Joshua Peek
a6fff94baf Move TestRequest cookies accessor into AD TestRequest 2009-04-30 19:23:50 -05:00
Joshua Peek
d54604c352 Depend on unreleased rack 1.1 2009-04-30 19:10:05 -05:00
Jeremy Kemper
6ae839bf48 Merge branch 'master' of git@github.com:rails/rails 2009-04-30 16:45:39 -07:00
John F. Douthat
e59835bd09 Fix action-cached exception responses.
Methods raising ActiveRecord::RecordNotFound were returning 404 on first request and 200 OK with blank body on subsequent requests.

[#2533 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-04-30 16:43:01 -07:00
Jeremy Kemper
f0b9e28619 Fix render :json => nil [#2589 state:resolved] 2009-04-30 16:34:00 -07:00
Joshua Peek
00d1a57e9f Start moving TestRequest and TestResponse into ActionDispatch 2009-04-30 17:26:03 -05:00
Joshua Peek
64e66cf161 Vendor new Rack::Mock changes 2009-04-30 14:40:46 -05:00
Joshua Peek
9bac470c7a Group integration test helpers and delegate other helpers to request and response objects 2009-04-30 14:28:42 -05:00
Joshua Peek
ba9887c9c0 Switch to action_dispatch rack namespace 2009-04-30 13:45:12 -05:00
Joshua Peek
7b3b7cb2ab Move generic assertions into ActionDispatch 2009-04-30 11:55:53 -05:00
Emilio Tagua
ca0530a53f exists? method now uses ARel 2009-04-30 13:47:51 -03:00
Joshua Peek
98dd726687 Test::Unit work arounds are handled by ActiveSupport 2009-04-30 11:42:01 -05:00
Joshua Peek
988513ac7a Framework backtrace cleaning is handled by ActiveSupport now 2009-04-30 11:42:01 -05:00
Emilio Tagua
5b61168aaf Added arel_attributes_values methods, refactored locking and AR#update to use this method 2009-04-30 13:21:13 -03:00
Emilio Tagua
0cf54f9dd8 Merge commit 'rails/master' 2009-04-30 10:10:42 -03:00
Jeremy Kemper
79420e71e0 Work around Float faux precision 2009-04-30 01:33:07 -07:00
Jeremy Kemper
7eef11eb65 Convert params keys to strings 2009-04-29 23:29:11 -07:00
Jeremy Kemper
091965c0fc Prefer behavior check to RUBY_VERSION to catch 1.8 backports 2009-04-29 23:12:34 -07:00
Emilio Tagua
b0bd4f45fa Merge commit 'rails/master' 2009-04-29 19:47:21 -03:00
Emilio Tagua
db892ea775 Fix duplicated test name
[#2581 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-04-29 15:46:43 -07:00
Emilio Tagua
19d2ff83db Calculations now use Arel to construct the query.
Implemented other methods in AR::Base with Arel support.
2009-04-29 19:39:53 -03:00
David Dollar
7149ddd2a1 Additional tests for the gem subsystem
* test_gem_ignores_development_dependencies
  * test_gem_guards_against_duplicate_unpacks
  * test_gem_does_not_unpack_framework_gems

[#2236 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-04-29 08:07:57 -07:00
Jeremy Kemper
d6c584618f Merge branch 'master' of git@github.com:rails/rails 2009-04-28 23:19:53 -07:00
David Dollar
599f2cfb4a Attempt to deal with more cases of gems with native components.
This commit adds a rudimentary check for 'unbuilt' gems, so that we can abort
the application load if there are any gems that have native components that
have not yet been built.

The rake task gems:build has now only builds 'unbuilt' gems as a result.

The rake task gems:build:force has been added to deal with cases of incomplete
builds, or any case where you need to force the build of all of your gems.

Changes the gems:build task to get its gem list by parsing directory entries
in vendor/gems, which sidesteps the chicken/egg issues involved with having a
gem unpacked into vendor/gems without before its native bits are compiled.

[#2266 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-04-28 23:16:47 -07:00
Joshua Peek
c0a372ba87 Deprecate template, session, assigns, and layout accessors on response object. Instead access them through the controller instance. This mainly affects functional test assertions. 2009-04-28 23:29:46 -05:00
Joshua Peek
8925e89c63 Deprecate response.assigns 2009-04-28 23:29:46 -05:00
Joshua Peek
d63b42da36 Move header injection back into integration tests 2009-04-28 23:29:46 -05:00
Joshua Peek
afa7d7ff05 Fix validate_request method name 2009-04-28 23:29:45 -05:00
Jeremy Kemper
acd5db300b Rejig active support dependencies to behave better with the boot process 2009-04-28 18:25:35 -07:00
Jeremy Kemper
b825bef74c Fix missing core extension dependencies 2009-04-28 17:58:51 -07:00
Emilio Tagua
4246a79a99 Show executed queries when assert_sql assertion fails [#2573 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-04-28 22:11:47 +01:00
Yehuda Katz + Carl Lerche
38bd60eae4 Makes new callbacks support keys with special characters 2009-04-27 18:16:55 -07:00
Yehuda Katz + Carl Lerche
ab83db9d06 Fixes ActionMailer to work with the ActionView refactoring 2009-04-27 12:34:25 -07:00
Yehuda Katz + Carl Lerche
cecafc52ee Refactor ActionView::Template
ActionView::Template is now completely independent from template
  storage, which allows different back ends such as the database.
  ActionView::Template's only responsibility is to take in the
  template source (passed in from ActionView::Path), compile it,
  and render it.
2009-04-27 11:49:11 -07:00
Eloy Duran
da3c21ead5 Ensure the parent record is always saved when the child is invalid. [#2249 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-04-27 19:25:27 +01:00
Joshua Peek
21aa32692c Delegate controller.session to request.session and deprecate response session 2009-04-27 13:11:17 -05:00
Jeremy Kemper
dde063507a Can't please them all 2009-04-27 09:29:17 -07:00
Jeremy Kemper
c2b4da1c42 Sufficient to test that multipart/mixed wasn't parsed to a hash 2009-04-27 00:17:02 -07:00
Jeremy Kemper
a88ddf8cc3 Don't return bare string as rack body 2009-04-27 00:00:03 -07:00
Jeremy Kemper
e44cd41620 Make it clearer that session is nil 2009-04-26 23:59:17 -07:00
Jeremy Kemper
6e3e00219b Fix differing rails_to_json arity 2009-04-26 20:26:44 -07:00
Jeremy Kemper
706f313231 Use Array.wrap 2009-04-26 20:24:45 -07:00
Jeremy Kemper
f58c322e7e Use __send__ for BasicObject friendliness 2009-04-26 20:05:17 -07:00
Jeremy Kemper
ee46ffedb8 Now that we have a separate internal rails_to_json, use a separate circular reference stack instead of sticking it in the options hash 2009-04-26 20:04:47 -07:00
Jeremy Kemper
678385d307 Use javascript_object_for 2009-04-26 19:59:22 -07:00
Jeremy Kemper
5cef0cbad2 Check for to_str rather than String 2009-04-26 19:08:04 -07:00
Jeremy Kemper
f5b4a9d02b Array splitting strings on newlines is deprecated 2009-04-26 18:27:41 -07:00
Jeremy Kemper
1850aea7fc Not sure why Request#session is missing 2009-04-26 18:26:06 -07:00
Jeremy Kemper
f7d7dc5aa8 Use session= writer methods 2009-04-26 17:19:14 -07:00
Jeremy Kemper
8aaed3d456 Convert encoding before escaping 2009-04-26 16:21:57 -07:00
Stephen Bannasch
1d71a34afa add JRuby-JDOM backend for XmlMini
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-04-26 16:13:55 -07:00
Jeremy Kemper
3f63202781 Don't assume :params is a Hash 2009-04-26 16:04:29 -07:00
Jeremy Kemper
c9d9bd7227 Check for to_str rather than String 2009-04-26 16:04:11 -07:00
Jeremy Kemper
ea712364e2 Don't undefine object_id 2009-04-26 15:56:08 -07:00
Jeremy Kemper
3bd32754e2 Privatize rails_to_json 2009-04-26 15:54:28 -07:00
Jeremy Kemper
4a8d2ef0a5 Extract json string escaping 2009-04-26 15:53:59 -07:00
Jeremy Kemper
5577d561f9 Merge branch 'master' of git@github.com:rails/rails 2009-04-26 15:18:51 -07:00
Jeremy Kemper
8d64085138 Only Object to_json alias is needed. Prefer nil options. 2009-04-26 15:18:33 -07:00
Jeremy Kemper
be7e21a85c Qualify toplevel constant references since we're in a BasicObject 2009-04-26 15:05:50 -07:00
Jeremy Kemper
da3a80dd4f Track object ids so the objects needn't respond to == 2009-04-26 15:04:02 -07:00
Joshua Peek
0494909679 Inherit TestSession from Session::AbstractStore and add indifferent access to Session::AbstractStore. 2009-04-26 14:33:57 -05:00
Joshua Peek
c8919f4c7c Require an ActionDispatch::Request to use response assertions 2009-04-26 11:52:45 -05:00
Joshua Peek
6940c0de12 Unify functional and integration tests cookie helpers 2009-04-26 11:37:11 -05:00
Hongli Lai (Phusion)
3cb97aeea8 Fix environment variable testing code in failsafe.rb.
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-04-26 11:23:10 -05:00
Hongli Lai (Phusion)
cd9bb88eef Remove reference to Rack::RewindableInput, which has been removed a while ago.
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-04-26 11:22:03 -05:00
Joshua Peek
82bc768dad Fix typo in stale session check [#2404 state:resolved] 2009-04-26 11:19:42 -05:00
Joshua Peek
5ea8d40156 Deprecate response.redirect_url_match?, use assert_match instead. 2009-04-26 11:16:14 -05:00
Joshua Peek
5352a2417b Move useful response test helpers into request 2009-04-26 11:12:33 -05:00
Joshua Peek
dbbe2e74ff Create a new file for response tests 2009-04-26 10:26:53 -05:00
Yehuda Katz
d0ace15c01 Updated for Rack 1.0 2009-04-25 12:33:14 -07:00
Joshua Peek
4f412a10b6 Remove RewindableInput middleware since all input MUST be rewindable according to a recent change in the Rack 1.0 SPEC 2009-04-25 14:04:03 -05:00
Joshua Peek
b69da86ea5 Remove vendored version of Rack 2009-04-25 13:56:37 -05:00
Joshua Peek
044794fc9e Remove pending rack specifications until they are official 2009-04-25 13:41:30 -05:00
Jeremy Kemper
dc2caea9dc test uses Pathname 2009-04-24 23:17:15 -07:00
Joshua Peek
dd2ed32418 Start to integrate some of the features in Rack::Test.
Eventually commit ActionDispatch::Test::MockRequest and ActionDispatch::Test:: UploadedFile upstream.
2009-04-24 20:24:54 -05:00
Emilio Tagua
090539604b construct_finder_sql now use Arel 2009-04-24 21:48:45 -03:00
Emilio Tagua
0e113a040d Refactored locking update 2009-04-24 17:32:16 -03:00
Emilio Tagua
649fd1058f Merge commit 'rails/master' 2009-04-24 17:28:31 -03:00
Emilio Tagua
345e686d83 Changed locking to use Arel. Arel updated 2009-04-24 17:27:05 -03:00
Emilio Tagua
c0f66b764e Added ruby-debug 2009-04-24 17:26:34 -03:00
Jeremy Kemper
cbcc0ca57b Use Symbol#to_proc in rails plugin internals 2009-04-24 10:41:45 -07:00
Emilio Tagua
a841cd2503 Fix models load order to be able to run unit tests.
[#2550 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
2009-04-23 16:02:11 -07:00
Emilio Tagua
e428c75d2b Remove connection method definition, since it's called just once. 2009-04-23 18:59:35 -03:00
Emilio Tagua
7958308ef6 More progress on migrations. Arel updated. 2009-04-23 18:54:04 -03:00
Emilio Tagua
d8f99c36ba Added Arel integration to migration's version update table 2009-04-23 13:55:42 -03:00
Emilio Tagua
0d9f1da955 Arel updated 2009-04-23 13:55:02 -03:00
Emilio Tagua
a934bbbb28 Removed blank lines 2009-04-23 13:54:38 -03:00
Emilio Tagua
fdcd81970e Require Arel 2009-04-23 13:54:00 -03:00
Emilio Tagua
3b43d1801e Added arel as a submodule. This is temporary and will make development/testing easier. 2009-04-23 13:50:18 -03:00
rick
3c4c6bd0df * Add pluggable JSON backends with support for the JSON gem. [rick]
Example: ActiveSupport::JSON.backend = "JSONGem"

  All internal Rails JSON encoding is now handled by ActiveSupport::JSON.encode().  Use of #to_json is not recommended, as it may clash with other libraries that overwrite it.  However, you can recover Rails specific functionality
  if you really want to use #to_json.

    gem 'json'
    ActiveSupport::JSON.backend = "JSONGem"

    class ActiveRecord::Base
      alias to_json rails_to_json
    end
2009-04-23 00:08:40 -07:00
Jeremy Kemper
bab2bfa692 Removed rest of Symbol#to_proc from railties tests 2009-04-22 19:52:28 -07:00
Jeremy Kemper
236169e85e Missed one 2009-04-22 19:50:24 -07:00
Jeremy Kemper
d23ab4fbb6 Remove Symbol#to_proc dependency 2009-04-22 19:35:58 -07:00
Jeremy Kemper
85b1a55f6d Merge branch 'master' of git@github.com:rails/rails 2009-04-22 18:54:55 -07:00
Jeremy Kemper
f28bd9557c Fix dependencies revealed by testing in isolation 2009-04-22 18:54:13 -07:00
Yehuda Katz + Carl Lerche
0a132c2fe1 Refactor ActionView::Path
* Decouple from ActionController and ActionMailer
  * Bring back localization support.
  * Prepare to decouple templates from the filesystem.
  * Prepare to decouple localization from ActionView
  * Fix ActionMailer to take advantage of ActionView::Path
2009-04-22 17:24:41 -07:00
Jeremy Kemper
5c4ba6e3fc new_callbacks core extensions 2009-04-22 17:17:31 -07:00
Jeremy Kemper
b2d6fdae35 Fix tests on 1.9 2009-04-22 17:07:04 -07:00
Jeremy Kemper
7f6779c1d5 Merge branch 'master' into cherry
Conflicts:
	activesupport/lib/active_support.rb
2009-04-22 16:53:58 -07:00
Jeremy Kemper
6fee981fa4 Opt in to JSON 2009-04-22 16:48:58 -07:00
Jeremy Kemper
f5d720fb96 Opt in to Dependencies 2009-04-22 16:42:14 -07:00
Jeremy Kemper
ab321268f8 No more free lunch 2009-04-22 16:10:49 -07:00
Jeremy Kemper
42a06d2d62 stdlib autoloads were hanging on 1.9.1 2009-04-22 09:10:48 -07:00
Pratik Naik
5f3f100ce2 Merge branch 'master' into active_model
Conflicts:
	activeresource/lib/active_resource/validations.rb
2009-04-22 15:26:03 +01:00
Jeremy Kemper
ca49299434 Get Active Model in the mix 2009-04-22 01:02:54 -07:00
Jeremy Kemper
a27192f49a Divert CoreExtensions mention in docs 2009-04-22 00:47:25 -07:00
Jeremy Kemper
b70239b0cf Convert string extension modules to class reopens 2009-04-22 00:45:39 -07:00
Jeremy Kemper
35afad620b ActiveSupport.core_ext bridge util no longer used 2009-04-22 00:34:24 -07:00
Jeremy Kemper
e6eb941d1b Switch last module core extension to class reopen 2009-04-22 00:33:00 -07:00
Jeremy Kemper
e9ed44af88 Merge branch 'master' into cherry 2009-04-22 00:23:47 -07:00
Jeremy Kemper
6ee8329af6 Merge branch 'master' of git@github.com:rails/rails 2009-04-22 00:22:25 -07:00
Jeremy Kemper
70c544df71 Rack::Utils.body_to_s doesn't exist in 1.0 2009-04-22 00:22:07 -07:00
Joshua Peek
380431e4ed Fix test_rescue_routing_exceptions when running with rake 2009-04-21 21:11:23 -05:00
Joshua Peek
0b92bb97c1 refactor some coupled rescue tests 2009-04-21 20:41:31 -05:00
Joshua Peek
fc5c1b0e90 Session tests belong under dispatch folder 2009-04-21 19:57:18 -05:00
Jeremy Kemper
5afc2abee6 Merge branch 'master' into cherry 2009-04-21 16:03:21 -07:00
Jeremy Kemper
f49e344128 Reinstate Base#render_to_string. Introduce AbstractController#render_to_string which stringifies render_to_body. 2009-04-21 16:02:30 -07:00
Alex Pooley
504d16ccdf Add microsecond support for sqlite adapter [#1982 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-04-21 18:05:07 +01:00
Stephen Celis
7a99dc0ac2 Update rails:template task to expand file paths [#2528 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-04-21 17:44:35 +01:00
Pratik Naik
d7d93cdb62 Fix nginx config in ci setup notes [Chad Woolley] [#2290 state:resolved] 2009-04-21 17:31:26 +01:00
Mike Gunderloy
398b07e655 Remove excess mocking from polymorphic_url tests [#2330 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-04-21 14:32:52 +01:00
Pratik Naik
2e6d1bf43e Change table to prevent copying indexes on sqlite2 2009-04-21 13:28:49 +01:00
Pratik Naik
2381f6f3dc Specify :group with the table name for it to work on sqlite3 2009-04-21 13:11:56 +01:00
Pratik Naik
6513dde490 Fix tests for sqlite3 3.6.xx 2009-04-21 13:06:26 +01:00
Max Lapshin
f3ac4f387d Fixed dumping from postgresql columns in index in wrong order. [#2515 state:resolved]
Signed-off-by: Tarmo Tänav <tarmo@itech.ee>
2009-04-21 11:44:13 +01:00
Scott Woods
64b33b6cf9 Quote table names when casting to regclass so that capitalized tables are supported. [#2418 state:resolved]
Signed-off-by: Tarmo Tänav <tarmo@itech.ee>
2009-04-21 11:43:38 +01:00
Max Lapshin
cdcd638c2f Fixed wrong quoting of index names in postgres [#2402 state:resolved]
Signed-off-by: Tarmo Tänav <tarmo@itech.ee>
2009-04-21 11:42:40 +01:00
Jeremy Kemper
696375ac62 Merge branch 'master' into cherry 2009-04-20 20:06:30 -07:00
Jeremy Kemper
b10fb7e7bc Merge branch 'master' of git@github.com:rails/rails 2009-04-20 18:34:43 -07:00
Jeremy Kemper
685a53a360 Merge branch 'master' into cherry
Conflicts:
	activesupport/CHANGELOG
	activesupport/lib/active_support/core_ext/class/delegating_attributes.rb
	activesupport/lib/active_support/core_ext/hash/conversions.rb
	activesupport/lib/active_support/core_ext/module/attribute_accessors.rb
	activesupport/lib/active_support/core_ext/string/multibyte.rb
	activesupport/lib/active_support/core_ext/time/calculations.rb
	activesupport/lib/active_support/deprecation.rb
2009-04-20 18:31:40 -07:00
Jeremy Kemper
db05c73fb6 Move AS::Duration autoload to core/time/autoload 2009-04-20 18:14:39 -07:00
Pratik Naik
de0ea38663 Ensure :dependent => :delete_all works for association with hash conditions 2009-04-20 18:12:40 +01:00
Pratik Naik
489abfd3b2 Ensure JoinAssociation uses aliased table name when multiple associations have hash conditions on the same table 2009-04-20 13:51:11 +01:00
Jeremy Kemper
164a94d0bc Clearer String#first and #last edge cases. Fix that 'foo'.first(0) == 'foo' instead of '' 2009-04-20 00:40:15 -07:00
Jeremy Kemper
5d84c732ee Treating strings as enumerable is deprecated 2009-04-20 00:32:14 -07:00
Jeremy Kemper
4f63e84843 Autoload I18n simple backend 2009-04-17 22:24:36 -07:00
Jeremy Kemper
f40eb52566 Autoload YAML and StringScanner for JSON decoding 2009-04-17 22:24:08 -07:00
Jeremy Kemper
2c5c2717cb Autoload StringScanner for pre-1.9 String#each_char 2009-04-17 21:58:18 -07:00
Jeremy Kemper
595e03336f Remove rarely-used DRb cache store 2009-04-17 21:53:17 -07:00
Jeremy Kemper
bd84b82018 Eliminate Pathname extensions 2009-04-17 21:49:57 -07:00
Jeremy Kemper
727e9dc18a Dice up ActiveSupport::Deprecation 2009-04-17 21:29:30 -07:00
Jeremy Kemper
3202671dc9 Fix core/all require of adjacent core features 2009-04-17 21:20:57 -07:00
Jeremy Kemper
151348824e Fix core/time require of DateTime core extensions 2009-04-17 21:17:55 -07:00
Mislav Marohnić
7ce0778a15 Always buffer rack.input if it is not rewindable
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-04-17 21:53:44 -05:00
Jeremy Kemper
a22a778f86 render_for_text pushes a body part instead of replacing the whole body 2009-04-17 21:33:09 -05:00
Mislav Marohnić
8423bb6a68 Improve rewindable input test coverage so tests fail when you remove the middleware
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-04-17 19:35:03 -05:00
Jeremy Kemper
1414e2afbb Don't set Content-Length in Base#response_body= since body may be any Rack-compatible body. Leave it up to the content length middleware. 2009-04-17 18:36:28 -05:00
Jeremy Kemper
df42d26f99 Rename render_to_string to render_to_body since it may return any Rack-compatible body, not just strings 2009-04-17 18:34:49 -05:00
Jeremy Kemper
ecdc0643f2 Merge branch 'master' of git@github.com:rails/rails 2009-04-17 13:45:18 -05:00
Jeremy Kemper
60896ca6f4 Clearer String#first and #last edge cases. Fix that foo.first(0) == instead of foo. 2009-04-17 13:44:59 -05:00
lifo
5b92dcb675 Merge docrails 2009-04-17 14:28:46 +01:00
David Heinemeier Hansson
abb899c54e Added :touch option to belongs_to associations that will touch the parent record when the current record is saved or destroyed [DHH] 2009-04-16 17:25:55 -05:00
David Heinemeier Hansson
fdb61f02c5 Added ActiveRecord::Base#touch to update the updated_at/on attributes with the current time [DHH] 2009-04-16 16:48:37 -05:00
Carl Lerche & Yehuda Katz
b49027e188 Make more Template methods public to make ActionMailer tests pass 2009-04-16 11:57:27 -07:00
Ross Kaffenburger and Bryan Helmkamp
256b0ee8e3 Don't check authenticity tokens for any AJAX requests 2009-04-15 16:04:21 -07:00
Carl Lerche & Yehuda Katz
3c1187699a Makes rails-dev-boost work again 2009-04-14 18:32:31 -07:00
Joshua Peek
109a3876f0 Move middleware stack out of utils folder 2009-04-14 18:32:31 -07:00
Joshua Peek
c2511f936e Make dispatcher instances immutable 2009-04-14 18:32:31 -07:00
Joshua Peek
d7751036fa Final blow to CGI 2009-04-14 18:32:31 -07:00
Joshua Peek
cf44788b06 We aren't using UploadedStringIO and UploadedTempfile anymore 2009-04-14 18:32:31 -07:00
Carl Lerche & Yehuda Katz
d39f5f18bb Move all Templates methods not used by other class into private to
define surface area of the class.
2009-04-14 18:32:31 -07:00
Joshua Peek
9954494397 Move MimeResponds into base folder 2009-04-14 17:08:38 -05:00
Joshua Peek
d7396b5ca9 Move reloader middleware in ActionDispatch 2009-04-14 17:06:32 -05:00
Joshua Peek
1d2686517c Session management belongs in base folder 2009-04-14 17:02:38 -05:00
Joshua Peek
97a88a91cb Move middleware stack out of utils folder 2009-04-14 16:56:45 -05:00
Joshua Peek
13bb6a9a99 Backwords compat alias for ActionController::Request and ActionController::Response 2009-04-14 16:55:10 -05:00
Joshua Peek
ef08aa45b1 Use rack's status code list as a base 2009-04-14 16:47:03 -05:00
Joshua Peek
c1b4a5eb56 Make dispatcher instances immutable 2009-04-14 16:21:06 -05:00
Joshua Peek
4a3afe0b4f Final blow to CGI 2009-04-14 16:18:24 -05:00
Joshua Peek
11d4bfb18c We aren't using UploadedStringIO and UploadedTempfile anymore 2009-04-14 15:56:13 -05:00
Joshua Peek
4839fe2e82 Move bundled rack into ActionDispatch 2009-04-14 15:52:23 -05:00
Jeremy Kemper
1120aaceae Fix requires so tests run 2009-04-14 10:53:46 -05:00
Carl Lerche & Yehuda Katz
d9afc51391 Rails server boots again 2009-04-13 17:16:07 -07:00
Carl Lerche & Yehuda Katz
647b83d50c Resurrecting 1.9 compatibility. 2009-04-13 16:56:04 -07:00
Carl Lerche & Yehuda Katz
906aebceed Bring abstract_controller up to date with rails/master
Resolved all the conflicts since 2.3.0 -> HEAD. Following is a list
of commits that could not be applied cleanly or are obviated with the
abstract_controller refactor. They all need to be revisited to ensure
that fixes made in 2.3 do not reappear in 3.0:

2259ecf368
AR not available
  * This will be reimplemented with ActionORM or equivalent

06182ea02e
implicitly rendering a js response should not use the default layout
[#1844 state:resolved]
  * This will be handled generically

893e9eb995
Improve view rendering performance in development mode and reinstate
template recompiling in production [#1909 state:resolved]
  * We will need to reimplement rails-dev-boost on top of the refactor;
    the changes here are very implementation specific and cannot be
    cleanly applied. The following commits are implicated:

      199e750d46
      3942cb406e
      f8ea9f85d4
      e3b166aab3
      ae9f258e03
      44423126c6

0cb020b4d6
workaround for picking layouts based on wrong view_paths
[#1974 state:resolved]
  * The specifics of this commit no longer apply. Since it is a two-line
    commit, we will reimplement this change.

8c5cc66a83
make action_controller/layouts pick templates from the current instance's
view_paths instead of the class view_paths [#1974 state:resolved]
  * This does not apply at all. It should be trivial to apply the feature
    to the reimplemented ActionController::Base.

87e8b16246
fix HTML fallback for explicit templates [#2052 state:resolved]
  * There were a number of patches related to this that simply compounded
    each other. Basically none of them apply cleanly, and the underlying
    issue needs to be revisited. After discussing the underlying problem
    with Koz, we will defer these fixes for further discussion.
2009-04-13 15:18:45 -07:00
Carl Lerche & Yehuda Katz
2036d3ba75 Revert rspec-runner change. TODO: Add back support for the rspec T::U runner. 2009-04-09 12:33:39 -07:00
Yehuda Katz and Carl Lerche
1aadafda8d Updated old AC::Base for small changes to AV 2009-04-08 17:33:41 -07:00
Yehuda Katz and Carl Lerche
6c05b5e938 Temporarily modifies setup to call super directly. This can support more T::U runners. 2009-04-08 17:33:41 -07:00
Yehuda Katz and Carl Lerche
91402bdd31 Reverts changes made to AS::TC 2009-04-08 10:10:06 -07:00
Jeremy Kemper
9cc8a75d84 Insert in sorted order to avoid TimeZone sort 2009-04-07 21:03:40 -07:00
Jeremy Kemper
f093088433 autoload Pathname 2009-04-07 20:52:57 -07:00
Jeremy Kemper
4a5f89fa64 Unneeded require 2009-04-07 20:18:09 -07:00
Yehuda Katz and Carl Lerche
3cecbc21e3 Get Base2 layouts to work :) 2009-04-07 17:57:20 -07:00
Yehuda Katz and Carl Lerche
95c9718118 Layouts work in AbstractController. Add support for the rspec runner for T::U 2009-04-07 15:54:02 -07:00
Yehuda Katz and Carl Lerche
c1aa5b0e14 Add depends_on, use, and setup to abstract up ideas about module inheritance. 2009-04-07 14:57:18 -07:00
Doug McInnes
c877857d59 Fix for TestResponse.cookies returning cookies unescaped [#1867 state:resolved]
Signed-off-by: David Heinemeier Hansson <david@loudthinking.com>
2009-04-07 13:21:41 -05:00
Kenny Ortmann
f448c70b3f added tests for session options being defaulted correctly to rack defaults [#2403 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-04-07 09:18:42 -05:00
Manfred Stienstra
f209d3898f Improve tests and code for Rails::InfoController and Rails::Info [#2411 state:resolved]
- Refactor Rails::InfoController tests.
- Return forbidden status from the InfoController for remote requests instead of a 500.
- Add tests for displaying middleware in Rails::Info.

Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-04-07 09:16:48 -05:00
Yehuda Katz and Carl Lerche
9c8eaf8e25 Merge branch 'abstract_controller' of git@github.com:wycats/rails into abstract_controller 2009-04-06 12:35:44 -07:00
Yehuda Katz and Carl Lerche
4d3cd9b43f Changes necessary to run the T::U tests with the rspec runner 2009-04-06 12:35:24 -07:00
Geoff Buesing
660fc93942 Test cleanup 2009-04-05 10:19:03 -05:00
Geoff Buesing
7685ea20b4 Hash::XML_TYPE_NAMES: no longer a need for a TimeWithZone entry; this class will now match "Time" 2009-04-05 10:15:54 -05:00
Geoff Buesing
c00f2d25de TimeWithZone.name returns 'Time', to further thwart type checking 2009-04-05 10:08:54 -05:00
Max Lapshin
70de8e64e3 Support multiple schemas in table names for postgresql [#390 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-04-05 12:36:36 +01:00
Pratik Naik
632bbbfe1c Merge docrails 2009-04-05 12:36:36 +01:00
José Valim
1ab7c37671 Object names with underscore do the wrong lookup in I18n on error_messages_for.
Signed-off-by: Michael Koziarski <michael@koziarski.com>
[#2390 state:committed]
2009-04-05 21:08:14 +12:00
Luca Guidi
42cdc7571d Ensure SqlBypass use ActiveRecord::Base connection
Signed-off-by: Michael Koziarski <michael@koziarski.com>
[#https://rails.lighthouseapp.com/attachments/106066/0001-Ensure-SqlBypass-use-ActiveRecord-Base-connection.patch state:committed]
2009-04-05 21:00:50 +12:00
Joshua Peek
0e9efae474 Nicer name for anonymous local cache middleware class 2009-04-02 12:05:21 -05:00
Cezary Baginski
44423126c6 Additional template render test for backup files [#2367 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-04-02 11:58:29 -05:00
Michael Schuerig
cad3e8b261 Show installed middleware in builtin rails info (/rails/info/properties) [#2396 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-04-02 11:54:52 -05:00
Jeremy Kemper
d848b7817f Encapsulate date/time core extensions and constant autoloads in active_support/core/time 2009-03-31 10:03:35 -07:00
Geoff Buesing
ea8077c642 Enhance Time #since and #ago DST tests. 2009-03-29 16:43:26 -05:00
Michael Curtis
5a8b481f71 Time.local instances: Adding 24.hours across the DST boundary adds 24 hours instead of one day [#2066 state:resolved] 2009-03-29 16:15:44 -05:00
Jeremy Kemper
48068bc1a4 Feature detection for Range#step extension 2009-03-29 02:43:13 -07:00
Jeremy Kemper
da8ade36b3 Convert Range step and include extension modules to class reopen 2009-03-29 02:31:08 -07:00
Jeremy Kemper
fe34d10f0c JRuby doesn't have UnboundMethod#name 2009-03-29 00:24:18 -07:00
Jeremy Kemper
d8bdc4ed92 Explicit test dependencies 2009-03-29 00:12:17 -07:00
Jeremy Kemper
b90f7757ce Explicit BigDecimal extension dependency 2009-03-29 00:11:20 -07:00
Jeremy Kemper
36e934a5ce Fix require 2009-03-29 00:10:32 -07:00
Jeremy Kemper
2e4db78e6f Explicit test dependencies 2009-03-29 00:08:35 -07:00
Jeremy Kemper
db214a1b5a Explicit File#atomic_write dependency 2009-03-29 00:08:22 -07:00
Jeremy Kemper
7bcfff4457 Explicit test dependencies 2009-03-28 23:56:14 -07:00
Jeremy Kemper
e0f56fc96d Distinguish missing memcache from missing memcache server 2009-03-28 23:55:43 -07:00
Jeremy Kemper
96af8b69a4 Avoid need for Enumerable#sum extension 2009-03-28 23:55:18 -07:00
Jeremy Kemper
fa5d5e0d16 Explicit dependency on Duration, numeric times, and date/time to_s extensions 2009-03-28 23:54:46 -07:00
Jeremy Kemper
148da357f0 Explicit dependency on Proc#bind extension 2009-03-28 23:54:00 -07:00
Jeremy Kemper
7269842080 Explicit dependency on OrderedHash 2009-03-28 23:53:04 -07:00
Jeremy Kemper
6f08440538 Explicit dependency on Hash#deep_merge extension 2009-03-28 23:52:46 -07:00
Jeremy Kemper
cb5b2ca5c1 Explicit dependency on Object#instance_values extension 2009-03-28 23:52:15 -07:00
Jeremy Kemper
b4af87317b Explicit dependency on Array#wrap extension 2009-03-28 23:51:37 -07:00
Jeremy Kemper
d41387fde7 Explicit dependency on String#start_with? extension 2009-03-28 23:51:20 -07:00
Jeremy Kemper
4d46455244 Explicit dependency on multibyte String extension 2009-03-28 23:50:50 -07:00
Jeremy Kemper
e70a9b8cd9 Explicit dependency on Module extensions 2009-03-28 23:50:31 -07:00
Jeremy Kemper
9231e32a07 Convert Time conversions extension module to class reopen 2009-03-28 23:50:06 -07:00
Jeremy Kemper
f8bc0bcff1 Explicit dependency on Date calculations extensions 2009-03-28 23:49:47 -07:00
Jeremy Kemper
83a89b8e85 Convert String conversions, filters, starts/ends_with, and multibyte extension modules to class reopen 2009-03-28 23:49:05 -07:00
Jeremy Kemper
fce68161a4 Convert Range conversions extension module to class reopen 2009-03-28 23:48:27 -07:00
Jeremy Kemper
5d5cde4b02 Convert Numeric bytes and time extension modules to class reopen 2009-03-28 23:48:02 -07:00
Jeremy Kemper
dc0c91656f Convert Module aliasing and introspection extension modules to class reopen 2009-03-28 23:47:42 -07:00
Jeremy Kemper
a1a040d3c8 Convert Integer time extension module to class reopen 2009-03-28 23:47:21 -07:00
Jeremy Kemper
9130c3147a Convert Hash conversions extension module to class reopen 2009-03-28 23:46:54 -07:00
Jeremy Kemper
dad8dabd31 Convert DateTime extensions to class reopens 2009-03-28 23:46:23 -07:00
Jeremy Kemper
092b5d125c Convert Date calculations and conversions extension modules to class reopens 2009-03-28 23:45:34 -07:00
Jeremy Kemper
609c1988d2 Tease out Object#acts_like? behaviors 2009-03-28 23:43:26 -07:00
Jeremy Kemper
389b081e37 Unneeded util require 2009-03-28 23:38:21 -07:00
Jeremy Kemper
699d2146fc Explicit class attribute accessor, benchmark, and NameError extension dependencies 2009-03-28 23:37:56 -07:00
Jeremy Kemper
1321b37212 Explict class attribute accessor dependency 2009-03-28 23:37:32 -07:00
Jeremy Kemper
47c7177ef5 Explicit Time/DateTime dependencies 2009-03-26 19:10:37 -07:00
Jeremy Kemper
4b921a5bdf Hack in env variable setting for Dependencies.mechanism 2009-03-26 19:10:13 -07:00
Jeremy Kemper
f3f5f40e44 Narrow dependencies 2009-03-26 19:08:40 -07:00
Jeremy Kemper
cf95f75695 Explicit NameError dependency 2009-03-26 19:08:13 -07:00
Jeremy Kemper
1c5a6944d3 Convert Time extension modules to class reopens 2009-03-26 19:07:44 -07:00
Jeremy Kemper
7985298948 Convert DateTime extension modules to class reopens 2009-03-26 19:03:37 -07:00
Jeremy Kemper
34929fed22 Fix timezone test 2009-03-26 19:02:11 -07:00
Jeremy Kemper
2a1ae9e8a1 Extract time fixes into separate extensions 2009-03-24 23:03:36 -07:00
Jeremy Kemper
af4c2375a2 Remove core ext dependency from test 2009-03-24 23:02:23 -07:00
Jeremy Kemper
9ea840f568 Explicitly require core extension under test 2009-03-24 23:01:52 -07:00
Jeremy Kemper
cecac31170 Explicit dependency on Inflector and Object#blank? 2009-03-24 19:47:11 -07:00
Jeremy Kemper
f8dbd416b6 Explicit dependency on class_inheritable_accessor 2009-03-24 19:46:42 -07:00
Jeremy Kemper
712baccef5 Remove unnecessary use of Kernel#silence_warnings 2009-03-24 19:46:07 -07:00
Jeremy Kemper
a27ee86c38 Explicit dependency on Array#extract_options! 2009-03-24 19:45:35 -07:00
Jeremy Kemper
3f7130aed8 Document NameError extensions 2009-03-24 17:04:27 -07:00
Jeremy Kemper
614fccd8c4 Don't require out of load path 2009-03-24 17:03:47 -07:00
Jeremy Kemper
1e72610e76 Condense to Kernel#with_warnings 2009-03-24 17:03:27 -07:00
Jeremy Kemper
fe7d3dbb02 Indentation, superfluous self 2009-03-24 17:02:58 -07:00
Ryan Angilly
dd2eb1ea7c adding session_options initialization and test [#2303 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-03-24 10:54:19 -05:00
thedarkone
ae9f258e03 Fix template extension parsing. [#2315 state:resolved] [#2284 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-03-24 10:54:18 -05:00
thedarkone
e3b166aab3 Simplify handling of absolute path templates. [#2276 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-03-24 10:54:17 -05:00
David Dollar
4c2f09f23a Updates tests to cause the tests for the Request class not to proxy through a fake TestRequest object [#2278 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-03-24 10:54:16 -05:00
Peter Marklund
8fa4275a72 Reset request_parameters in TestRequest#recycle! to avoid multiple posts clobbering each other [#2271 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
2009-03-24 10:54:15 -05:00
Joshua Peek
03700b4f01 just kill brittle test 2009-03-24 10:54:14 -05:00
Pratik Naik
f97832b1e4 Merge docrails 2009-03-24 12:15:43 +00:00
Jeremy Kemper
e094940c2b Move Numeric#to_utc_offset_s to TimeZone.seconds_to_utc_offset 2009-03-23 22:01:51 -07:00
Yehuda Katz and Carl Lerche
1d3e2c2b73 In the middle of some refactoring... some fails due to changes in AbstractController not yet reflected in ActionController tests 2009-03-23 18:06:47 -07:00
Yehuda Katz and Carl Lerche
a501638e9d Checkpoint 2009-03-23 15:45:01 -07:00
Yehuda Katz
34f058e082 Add a bunch of tests for various render :action, layout combinations 2009-03-23 12:07:34 -07:00
Carl Lerche
4a93148bfe Adding render :layout tests 2009-03-23 10:23:14 -07:00
Carl Lerche
ab17ecfe5d Finished implementing :layout for most of the render options 2009-03-23 10:23:14 -07:00
Carl Lerche
c6123c3703 Finished implementing layout for render :text 2009-03-23 10:23:14 -07:00
Carl Lerche
81e814adfa Working on being able to render :text with layouts 2009-03-23 10:23:14 -07:00
Carl Lerche
90c079a781 Modified the action layout tests to use the new FixtureTemplate class 2009-03-23 10:23:14 -07:00
Jeremy Kemper
0bd668fd88 Namespace HashWithIndifferentAccess 2009-03-21 18:45:09 -07:00
Jeremy Kemper
2133044fec Hide XmlMini backend details from rdoc 2009-03-21 18:44:00 -07:00
Pratik Naik
d758d996d1 Deprecate Model#validate/validate_on_create/validate_on_update. Use Model.validate :method and likewise 2009-03-21 19:07:15 +00:00
Pratik Naik
320933205e Deprecate Errors#on_base/add_to_base/invalid?/each_full 2009-03-21 18:34:05 +00:00
Jeremy Kemper
bca510cec2 try is an object extension 2009-03-21 04:39:54 -07:00
Jeremy Kemper
baf73e19a6 Convert Range extension module to a class reopen 2009-03-21 04:39:53 -07:00
Jeremy Kemper
b8d59b7f84 Convert Numeric extension module to a class reopen 2009-03-21 04:39:53 -07:00
Jeremy Kemper
d8cb94c75c Fix dangling Inflector reference 2009-03-21 04:39:53 -07:00
Jeremy Kemper
21de164f8a Convert LoadError extension modules to class reopens 2009-03-21 04:39:53 -07:00
Jeremy Kemper
54cf0fc476 Convert integer extension modules to class reopens 2009-03-21 04:39:53 -07:00
Jeremy Kemper
b4a1718832 Convert hash extension modules to class reopens 2009-03-21 04:39:53 -07:00
Jeremy Kemper
bc4e2aa931 Explicitly require set 2009-03-21 04:35:16 -07:00
Jeremy Kemper
8d1d813b66 Simplify Enumerable#each_with_object 2009-03-21 04:35:16 -07:00
Jeremy Kemper
051bab5bd2 Explicitly require pathname core extension 2009-03-21 04:35:16 -07:00
Jeremy Kemper
c43dec888a Convert date extension modules to class reopens 2009-03-21 04:35:16 -07:00
Jeremy Kemper
bd28c7b1b8 blank? and duplicable? are Object extensions 2009-03-21 04:35:16 -07:00
Jeremy Kemper
005b40194e Convert bigdecimal extension modules to class reopens 2009-03-21 04:35:16 -07:00
Jeremy Kemper
83fd1ae122 Convert array extension modules to class reopens 2009-03-21 04:35:16 -07:00
Jeremy Kemper
d5e87e3be0 Simple singleton. We don't need the full monty. 2009-03-21 04:35:16 -07:00
Jeremy Kemper
a970e32c91 Only require builder at startup if we need to monkey with its String#to_xs demands 2009-03-21 04:35:16 -07:00
Jeremy Kemper
dd15a3fee0 Prefer a less intrusive BlankSlate-alike that doesn't hook Object# and Kernel#method_added to remove future methods 2009-03-21 04:35:15 -07:00
Jeremy Kemper
a4e3aac40a * Introduce ActiveSupport.core_ext Integer, %w(conversions time etc)
* Convert some extension modules to simply reopening the class
* Remove deprecated Float time extensions
* Fold Base64 extension into ActiveSupport::Base64 since stdlib Base64 is gone
2009-03-21 04:35:15 -07:00
Pratik Naik
2bc4189faf Get rid of active_model/core and active_model/callbacks 2009-03-21 01:32:59 +00:00
Pratik Naik
e4b89b4680 Validation options dont need explicit :on => :save 2009-03-21 01:16:30 +00:00
Pratik Naik
379e468034 Remove DEFAULT_VALIDATION_OPTIONS from validations 2009-03-21 01:14:58 +00:00
Pratik Naik
22ad30ed60 Move validate_on_create and validate_on_update from ActiveModel to ActiveRecord 2009-03-21 01:11:38 +00:00
Pratik Naik
6173e5bfae Add ActiveModel::Validations tests for regular ruby classes 2009-03-20 22:21:27 +00:00
Yehuda Katz
dc96ba8043 Temporary runner 2009-03-20 15:02:12 -07:00
Pratik Naik
08a99d0eac Add I18n translations to ActiveModel and move more AR specific parts to ActiveRecord::Validations 2009-03-20 21:45:13 +00:00
Yehuda Katz
d1256f71d6 Hacked up fixture view paths to simplify tests for a bit 2009-03-20 14:05:10 -07:00
Pratik Naik
cc5e019f6b Include ActiveModel::Validations from ActiveRecord::Validations 2009-03-20 19:12:18 +00:00
Pratik Naik
09afbfd47f Fix ActiveResource::Errors deprecation messages 2009-03-20 18:51:01 +00:00
Pratik Naik
bc1dd0b82e Improve the deprecation message for Errors#on 2009-03-20 18:12:21 +00:00
Pratik Naik
7d187c193c Validation tests arent using any fixtures 2009-03-20 18:07:35 +00:00
Pratik Naik
78c9791729 ActiveModel.load_all! isn't really needed at this point 2009-03-20 18:02:50 +00:00
Pratik Naik
4a582aa7ca Use mattr_accessor in TestsDatabase instead of setup method 2009-03-20 17:56:46 +00:00
Pratik Naik
37283a6aae Deprecate Error#on(attribute) in favour of Errors#[attribute] 2009-03-20 17:36:22 +00:00
Pratik Naik
4367f39dea TestDatabase -> TestsDatabase 2009-03-20 16:02:12 +00:00
Pratik Naik
d01e639daf Remove unused columns from the ActiveModel test schema 2009-03-20 15:33:40 +00:00
Pratik Naik
cda984d314 Future deprecation message 2009-03-20 15:27:55 +00:00
Pratik Naik
60756ad4ec Move relevant validation tests from Active Record to Active Model 2009-03-20 15:07:49 +00:00
Pratik Naik
e945bcfe4a Add test sqlite3 db to .gitignore 2009-03-20 11:22:27 +00:00
Pratik Naik
5b1a1bf5bf Make Active Model test suite similar to Active Record 2009-03-20 10:32:24 +00:00
Pratik Naik
93e2d378df Autload ActiveModel::Observing 2009-03-20 01:13:24 +00:00
Pratik Naik
77acfefedf Make Active Resource use ActiveModel::Errors 2009-03-19 23:45:08 +00:00
Pratik Naik
638333b7a1 Move uniqueness and association validations to Active Record 2009-03-19 23:44:30 +00:00
Pratik Naik
8828b2ca67 Move all the Active Record validations to Active Model 2009-03-19 23:28:59 +00:00
Yehuda Katz
7a86f8ea90 Test controller layout 2009-03-19 16:11:20 -07:00
Jeremy Kemper
6ed42ebdff Merge branch 'master' into bodyparts 2009-03-19 16:03:41 -07:00
Yehuda Katz
890321e51e Get very basic layouts working.
* Required small architecture change
2009-03-19 15:45:48 -07:00
Yehuda Katz
8ab37c7660 Started implementing render :action 2009-03-19 13:35:39 -07:00
Jeremy Kemper
0d5b50ee3a pluginize concurrent block body part 2009-03-19 03:31:55 -07:00
Yehuda Katz
e0447023db Implemented basic template rendering in AC::Base2:
* Created several macros for writing simpler specs
* Finished making Rack::Test work right
* Implemented render_to_string
* Status Codes
* render :text => nil
2009-03-18 15:58:47 -07:00
Pratik Naik
93b98cb841 Ensure script/plugin doesn't show error message when svn externals are not there 2009-03-18 18:39:56 +00:00
Pratik Naik
11f53db216 Remove outdated script/plugin options 2009-03-18 18:33:44 +00:00
Jeremy Kemper
6335f5d518 Merge branch 'master' into bodyparts 2009-03-18 11:18:48 -07:00
Yehuda Katz
fb626ee390 Rework NewCallbacks to not require method_missing 2009-03-17 18:05:08 -07:00
Yehuda Katz
e6e3e3dfbc Temporarily reraise to simplify debugging 2009-03-17 18:04:41 -07:00
Yehuda Katz
f55514125c Working toward getting a basic AbstractController framework 2009-03-17 18:04:22 -07:00
Jeremy Kemper
70e3dfb2e9 Pare down unit test 2009-03-16 12:09:34 -07:00
Jeremy Kemper
4a7b11d5d8 Less ceremony 2009-03-13 18:49:53 -07:00
Jeremy Kemper
2f998fc81f Extract output buffer test 2009-03-13 03:23:13 -07:00
Jeremy Kemper
b2f98c13a3 Simplify parts and tests 2009-03-13 03:16:14 -07:00
Jeremy Kemper
d54d97b07c Fix tests 2009-03-13 03:01:47 -07:00
Jeremy Kemper
5d76dee329 Example using an edge side include body part to fetch queued rendering results 2009-03-13 02:55:24 -07:00
Jeremy Kemper
7c1714cbd0 Body parts: future rendering, threaded future, queued future, open-uri example 2009-03-13 02:36:15 -07:00
Jeremy Kemper
79b0b1a0ef Extract Response#string_body? 2009-03-13 02:15:51 -07:00
Jeremy Kemper
7e6c310b05 Merge branch 'master' into bodyparts
Conflicts:
	actionpack/lib/action_view/base.rb
2009-03-13 01:10:39 -07:00
Jeremy Kemper
3d260760f0 Introduce flush_output_buffer to append the buffer to the response body then start a new buffer. Useful for pushing custom parts to the response body without disrupting template rendering. 2009-03-13 00:25:05 -07:00
Jeremy Kemper
91d2740595 Return body parts directly to Rack rather than building a response string ourselves. Allows Rack middleware to orchestrate response building. 2009-03-12 21:47:34 -07:00
Jeremy Kemper
c8c2b3820e Eliminate internal render stack since we only need its head and tail 2009-03-12 12:34:22 -07:00
Yehuda Katz
a2637e9f1f Try to build a new AC::Base on top of AbstractController 2009-03-12 13:19:13 -06:00
Yehuda Katz
67f9b39bd0 Use extlib accessor for new callbacks 2009-03-12 13:18:31 -06:00
Yehuda Katz
72b365ece9 Move Abstract stuff to autoload 2009-03-12 13:18:15 -06:00
Yehuda Katz
0c92a51dad Handle nil QS 2009-03-12 13:17:57 -06:00
Yehuda Katz
f8088d7def memoize correctly ;) 2009-03-03 17:20:57 -08:00
Yehuda Katz
6001cea5d7 Helpers with an initial test 2009-03-03 16:42:20 -08:00
Yehuda Katz
cde9aab823 Callbacks test 2009-02-27 20:49:44 -08:00
Yehuda Katz
9510070f78 Fixes multiple conditions 2009-02-27 19:37:09 -08:00
Yehuda Katz
c16c7a8de4 Add support for callbacks 2009-02-27 19:25:45 -08:00
Yehuda Katz
ee80dad680 Initial hooks 2009-02-27 15:11:02 -08:00
Yehuda Katz
d1157e7242 AbstractController now supports layouts and rendering 2009-02-27 11:42:13 -08:00
Yehuda Katz
b1f078bddf First, very early, AbstractController code. More to come 2009-02-24 17:25:21 -08:00
Yehuda Katz
d6b9f8410c Remove errant debug code 2009-02-03 08:04:14 -08:00
Yehuda Katz
d4a817c066 Make tests pass 2009-02-02 14:01:29 -08:00
Yehuda Katz
ff68430077 Whoops. 2009-02-02 12:03:35 -08:00
Yehuda Katz
9744f687cc Add support for pending 2009-02-02 11:49:32 -08:00
Yehuda Katz
6faff0223b Merge commit 'rails/3-0-unstable' 2009-02-02 09:54:27 -08:00
Yehuda Katz
44cdf0c5fe Some merge cleanup 2009-02-02 09:54:23 -08:00
Jeremy Kemper
4945d92b03 Remove dead cgi_ext require 2009-01-31 14:46:02 -08:00
Jeremy Kemper
8da52b13b5 Remove duplicate ConcurrentHash 2009-01-31 14:44:04 -08:00
Yehuda Katz
3030bc90c9 Merge commit 'rails/3-0-unstable'
Conflicts:

	actionpack/lib/action_controller/base.rb
	actionpack/lib/action_dispatch/http/mime_type.rb
	actionpack/lib/action_dispatch/http/request.rb
	actionpack/lib/action_view/base.rb
	actionpack/lib/action_view/paths.rb
	actionpack/test/controller/session/cookie_store_test.rb
	actionpack/test/dispatch/rack_test.rb
	actionpack/test/dispatch/request_test.rb
2009-01-30 11:30:27 -08:00
Yehuda Katz
ae42163bf5 Merge branch 'master' of git@github.com:wycats/rails 2009-01-30 11:01:11 -08:00
Yehuda Katz
da10673e32 Sync 'rails/rails/master' 2009-01-30 10:53:19 -08:00
Joshua Peek
85750f22c9 Move dispatch related tests into test/dispatch 2009-01-28 22:50:46 -06:00
Joshua Peek
319ae4628f Move HTTP libs and middleware into ActionDispatch component 2009-01-27 18:54:01 -06:00
Joshua Peek
a0f2b1d95d Reorganize ActionController folder structure 2009-01-27 18:17:39 -06:00
Yehuda Katz
eb9af20b7c Begin unifying the interface between ActionController and ActionView 2009-01-22 16:18:10 -06:00
Joshua Peek
cc0b5fa993 Merge branch 'master' into 3-0-unstable
Conflicts:
	ci/cruise_config.rb
2009-01-22 15:13:47 -06:00
lholden
19f8bb2808 Merge branch 'master' of git://github.com/rails/rails 2009-01-21 16:17:24 -08:00
Yehuda Katz
b8fadd708b Sync 'rails/rails/master' 2009-01-14 16:48:57 -08:00
Yehuda Katz
f65333a4cf Sync 'rails/rails/master' 2009-01-13 14:24:14 -08:00
Yehuda Katz
0932b012fa Sync 'rails/rails/master' 2009-01-13 13:28:28 -08:00
Yehuda Katz
6fe739ad75 Sync 'rails/rails/master' 2009-01-11 13:02:44 -08:00
Yehuda Katz
e8980ad278 Sync 'rails/rails/master' 2009-01-09 18:58:47 -08:00
Jeremy Kemper
bb03719943 Fix test broken by test process changes 2009-01-09 00:14:28 -08:00
Jeremy Kemper
431e696b89 Remove Content-Length header from :no_content responses 2009-01-09 00:14:28 -08:00
Jeremy Kemper
72c9834666 Set assigns for integration tests also 2009-01-09 00:14:28 -08:00
Jeremy Kemper
d99b4ec57f Take care not to mix in public methods 2009-01-09 00:14:28 -08:00
Jeremy Kemper
e3be52c1dd Use instance_eval instead of adding an accessor to the class 2009-01-09 00:14:28 -08:00
Jeremy Kemper
cf09fa74f7 Include process methods in ActionController::TestCase only. No need to alias_method_chain :process either. 2009-01-09 00:14:27 -08:00
Jeremy Kemper
c2d23affad Object#tap for Ruby < 1.8.7 2009-01-09 00:14:27 -08:00
Pratik Naik
b1530545d2 Fix JSON decoder date-converter regexp [#1662 state:resolved] [Jonathan del Strother] 2009-01-09 00:14:27 -08:00
Michael Koziarski
84e6ad3fb9 Spam people with commit rights on test failures. 2009-01-09 00:14:27 -08:00
Mike Gunderloy
a08bbd6a4c Update CI configuration to reflect latest gems. 2009-01-09 00:14:27 -08:00
Mike Gunderloy
e57cb2629a Update CI configuration to reflect latest gems. 2009-01-07 16:59:06 +13:00
Yehuda Katz
dabf20d54b Sync 'rails/rails/master' 2009-01-06 17:43:58 -08:00
Yehuda Katz
3027f9f918 Sync 'rails/rails/master' 2009-01-05 17:21:29 -08:00
Yehuda Katz
db619c4a41 Sync 'rails/rails/master' 2009-01-05 01:10:55 -08:00
Yehuda Katz
ca54cc5df7 Sync 'rails/rails/master' 2009-01-04 00:56:52 -08:00
Yehuda Katz
a38c749d8b Sync 'rails/rails/master' 2009-01-02 22:16:48 -08:00
Jeremy Kemper
42b32938d9 Only silence backtrace from plugin lib dirs 2009-01-01 00:13:12 -08:00
Jeremy Kemper
658cf556d2 Test that exceptions raised in filters are properly rescued 2009-01-01 00:13:11 -08:00
Jeremy Kemper
6b3c702bd7 Fix formatted_* deprecation message 2009-01-01 00:13:11 -08:00
Jeremy Kemper
724151d881 Clean trailing / after rails root from backtraces 2009-01-01 00:13:11 -08:00
Mike Gunderloy
feb807dda1 Fix named scope tests for sqlite3 [#1667 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-01-01 00:13:11 -08:00
Mike Gunderloy
abfa46e3a6 Add transaction check to SQLite2 adapter to fix test_sqlite_add_column_in_transaction_raises_statement_invalid [#1669 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-01-01 00:13:11 -08:00
Joshua Peek
ab7c25d511 Clean up view path cruft and split path implementations into Template::Path and Template::EagerPath 2009-01-01 00:13:11 -08:00
Mike Gunderloy
860dd77006 Fix failing gem dependency tests [#1659 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-01-01 00:13:10 -08:00
Mike Gunderloy
c5e9aa0040 Fix FCGI dispatching tests
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
2009-01-01 00:13:10 -08:00
Mark Reginald James
ea20901764 Fixed incorrect parsing of query parameters with mixed-depth nesting inside an array [#1622 state:resolved]
Signed-off-by: Frederick Cheung <frederick.cheung@gmail.com>
2009-01-01 00:13:10 -08:00
Frederick Cheung
373e94a03f Fix to_sentence being used with options removed by 273c77 2009-01-01 00:13:10 -08:00
Roman Shterenzon
7276128fb4 Fix HasManyAssociation#create ignoring the :primary_key option [#1633 state:resolved]
Signed-off-by: Frederick Cheung <frederick.cheung@gmail.com>
2009-01-01 00:13:10 -08:00
Frederick Cheung
27cfeb7cbc Fix :include of has_one with :primary_key option 2009-01-01 00:13:10 -08:00
Frederick Cheung
3825f173d9 Fix :include of has_many associations with :primary_key option 2009-01-01 00:13:10 -08:00
Jeremy Kemper
15702104a5 Don't construct object deprecation proxy if unneeded 2009-01-01 00:13:09 -08:00
Michael S. Klishin
31fb733bae It was decided that Multibyte does not belong to as/mini. 2008-12-29 23:31:57 +03:00
Michael S. Klishin
069534af4f Sync with rails/rails/master 2008-12-29 00:50:18 +03:00
Michael S. Klishin
19208e7422 Pull up some other changes from rails/rails/master 2008-12-29 00:16:42 +03:00
Michael S. Klishin
bdba0b9a7a Sync i18n update from rails/rails/master 2008-12-28 23:48:18 +03:00
Michael S. Klishin
2b8750eba4 Sync with rails/rails/master, merge two metaprogramming annotation efforts 2008-12-28 23:47:29 +03:00
Michael S. Klishin
e523b43e20 Use active_support/mini instead of active_support/minimalistic 2008-12-28 22:18:03 +03:00
Michael S. Klishin
12bff2af40 Sync with wycats/rails/master 2008-12-28 22:05:43 +03:00
Michael S. Klishin
89e98955c7 active_support/minimalistic.rb => active_support/mini.rb 2008-12-28 21:41:48 +03:00
Michael S. Klishin
d77deb89d5 Annotated metaprogramming code across ActiveSupport 2008-12-28 13:21:10 +03:00
Michael S. Klishin
133925804f Introduce minimalistic package for ActiveSupport.
To simplify using of ActiveSupport in 3rd party libraries,
a simple way to require only minimum of commonly used extensions
(multibyte, inflections, array and hash extensions, #blank?, and a few
others) is needed. For exactly this reason some out-of-Rails-space
libraries adopted Extlib, originally from DataMapper.

To keep it 2067% backwards compatible, and still available
to everyone even in 2.x releases, active_support/minimalistic.rb
was added.

Use it like this:

gem 'active_support', '>=2.3'
require 'active_support/minimalistic'

instead of

require 'activesupport'

Right now this package with RubyGems uses about 10 megs of RAM
(10.01 or so). It can be further slimmed down though, once we simplify
multibyte implementation that right now uses advanced accessors
from Module extensions.

To compare RAM usage with previous ActiveSupport versions and Extlib,
at the time of writing, see http://gist.github.com/40401.
2008-12-28 11:26:57 +03:00
Yehuda Katz
5da3ba1215 Merge commit 'rails/master' 2008-12-26 23:16:52 -08:00
Yehuda Katz
9b2da52914 Merge commit 'rails/master' 2008-12-26 12:29:44 -08:00
Michael S. Klishin
e4314d4362 Inline the only call site of Mime::Type#browser_generated?
Signed-off-by: Michael S. Klishin <michael@novemberain.com>
2008-12-26 04:13:16 +03:00
Yehuda Katz
69e349f1bb Initial work to merge several places with similar logic 2008-12-25 17:12:33 -08:00
1911 changed files with 69020 additions and 91788 deletions

18
.gitignore vendored
View File

@@ -1,19 +1,21 @@
pkg
.bundle
debug.log
doc/rdoc
activemodel/doc
activeresource/doc
activerecord/doc
actionpack/doc
actionmailer/doc
activesupport/doc
activeresource/pkg
activerecord/pkg
actionpack/pkg
actionmailer/pkg
activesupport/pkg
railties/pkg
activemodel/test/fixtures/fixture_database.sqlite3
actionpack/test/tmp
activesupport/test/fixtures/isolation_test
railties/test/500.html
railties/test/fixtures/tmp
railties/test/initializer/root/log
railties/doc/guides/html/images
railties/doc/guides/html/stylesheets
railties/guides/output
railties/tmp
bin
.bundle
pkg

View File

@@ -1 +0,0 @@
2.0.0-github

36
Gemfile Normal file
View File

@@ -0,0 +1,36 @@
path File.expand_path('..', __FILE__)
source 'http://gemcutter.org'
gem "rails", "3.0.0.beta1"
gem "rake", ">= 0.8.7"
gem "mocha", ">= 0.9.8"
if RUBY_VERSION < '1.9'
gem "ruby-debug", ">= 0.10.3"
end
# AR
gem "sqlite3-ruby", ">= 1.2.5", :require => 'sqlite3'
group :test do
gem "pg", ">= 0.8.0"
gem "mysql", ">= 2.8.1"
end
# AP
gem "rack-test", "0.5.3", :require => 'rack/test'
gem "RedCloth", ">= 4.2.2"
if ENV['CI']
gem "nokogiri", ">= 1.4.0"
gem "memcache-client", ">= 1.7.6", :require => 'memcache'
# fcgi gem doesn't compile on 1.9
# avoid minitest strangeness on 1.9
if RUBY_VERSION < '1.9.0'
gem "fcgi", ">= 0.8.7"
else
gem "test-unit", ">= 2.0.5", :require => 'test/unit'
end
end

View File

@@ -1,7 +0,0 @@
gem install mocha -v=0.13.1
gem install rake -v=10.1.0
gem install rdoc -v=4.0.1
gem install sqlite3 -v=1.3.7
gem install rack -v=1.4.5
gem install erubis -v=2.7.0
gem install json -v=1.8.0

View File

@@ -1,6 +0,0 @@
# GitHub Rails
This is GitHub's fork of Rails 2.3.
Please note that this fork is **unsupported**. It is not guaranteed to receive security patches or remain stable. **Use at your own risk.**

View File

@@ -1,47 +1,83 @@
require 'rake'
require 'rdoc/task'
require 'rake/rdoctask'
require 'rake/gempackagetask'
env = %(PKG_BUILD="#{ENV['PKG_BUILD']}") if ENV['PKG_BUILD']
PROJECTS = %w(activesupport railties actionpack actionmailer activeresource activerecord)
PROJECTS = %w(activesupport activemodel actionpack actionmailer activeresource activerecord railties)
Dir["#{File.dirname(__FILE__)}/*/lib/*/version.rb"].each do |version_path|
require version_path
end
desc 'Run all tests by default'
task :default => :test
task :default => %w(test test:isolated)
%w(test rdoc pgem package release gem).each do |task_name|
%w(test test:isolated rdoc pgem package gem gemspec).each do |task_name|
desc "Run #{task_name} task for all projects"
task task_name do
passed = true
errors = []
PROJECTS.each do |project|
system %(cd #{project} && #{env} #{$0} #{task_name})
passed &&= $?.success?
system(%(cd #{project} && #{env} #{$0} #{task_name})) || errors << project
end
exit! passed
fail("Errors in #{errors.join(', ')}") unless errors.empty?
end
end
desc "Smoke-test all projects"
task :smoke do
(PROJECTS - %w(activerecord)).each do |project|
system %(cd #{project} && #{env} #{$0} test:isolated)
end
system %(cd activerecord && #{env} #{$0} sqlite3:isolated_test)
end
spec = eval(File.read('rails.gemspec'))
Rake::GemPackageTask.new(spec) do |pkg|
pkg.gem_spec = spec
end
desc "Release all gems to gemcutter. Package rails, package & push components, then push rails"
task :release => :release_projects do
require 'rake/gemcutter'
Rake::Gemcutter::Tasks.new(spec).define
Rake::Task['gem:push'].invoke
end
desc "Release all components to gemcutter."
task :release_projects => :package do
errors = []
PROJECTS.each do |project|
system(%(cd #{project} && #{env} #{$0} release)) || errors << project
end
fail("Errors in #{errors.join(', ')}") unless errors.empty?
end
task :install => :gem do
(PROJECTS - ["railties"]).each do |project|
puts "INSTALLING #{project}"
system("gem install #{project}/pkg/#{project}-#{ActionPack::VERSION::STRING}.gem --no-ri --no-rdoc")
end
system("gem install railties/pkg/railties-#{ActionPack::VERSION::STRING}.gem --no-ri --no-rdoc")
system("gem install pkg/rails-#{ActionPack::VERSION::STRING}.gem --no-ri --no-rdoc")
end
desc "Generate documentation for the Rails framework"
RDoc::Task.new do |rdoc|
Rake::RDocTask.new do |rdoc|
rdoc.rdoc_dir = 'doc/rdoc'
rdoc.title = "Ruby on Rails Documentation"
rdoc.main = "railties/README"
rdoc.options << '--line-numbers' << '--inline-source'
rdoc.options << '-A cattr_accessor=object'
rdoc.options << '--charset' << 'utf-8'
rdoc.options << '--main' << 'railties/README'
rdoc.template = ENV['template'] ? "#{ENV['template']}.rb" : './doc/template/horo'
rdoc.rdoc_files.include('railties/CHANGELOG')
rdoc.rdoc_files.include('railties/MIT-LICENSE')
rdoc.rdoc_files.include('railties/README')
rdoc.rdoc_files.include('railties/lib/{*.rb,commands/*.rb,rails/*.rb,rails_generator/*.rb}')
rdoc.rdoc_files.include('railties/lib/{*.rb,commands/*.rb,rails/*.rb,generators/*.rb}')
rdoc.rdoc_files.exclude('railties/lib/vendor/*')
rdoc.rdoc_files.include('activerecord/README')
rdoc.rdoc_files.include('activerecord/CHANGELOG')

View File

@@ -1,30 +1,27 @@
*2.3.11 (February 9, 2011)*
*2.3.10 (October 15, 2010)*
*2.3.9 (September 4, 2010)*
*2.3.8 (May 24, 2010)*
*2.3.7 (May 24, 2010)*
*Rails 3.0 (pending)*
* Version bump.
* Whole new API added with tests. See base.rb for full details. Old API is deprecated.
* The Mail::Message class has helped methods for all the field types that return 'common' defaults for the common use case, so to get the subject, mail.subject will give you a string, mail.date will give you a DateTime object, mail.from will give you an array of address specs (mikel@test.lindsaar.net) etc. If you want to access the field object itself, call mail[:field_name] which will return the field object you want, which you can then chain, like mail[:from].formatted
*2.3.6 (May 23, 2010)*
* Mail#content_type now returns the content_type field as a string. If you want the mime type of a mail, then you call Mail#mime_type (eg, text/plain), if you want the parameters of the content type field, you call Mail#content_type_parameters which gives you a hash, eg {'format' => 'flowed', 'charset' => 'utf-8'}
* Upgrade TMail from 1.2.3 to 1.2.7. [Mikel Lindsaar]
* ActionMailer::Base :default_implicit_parts_order now is in the sequence of the order you want, no reversing of ordering takes place. The default order now is text/plain, then text/enriched, then text/html and then any other part that is not one of these three.
* Mail does not have "quoted_body", "quoted_subject" etc. All of these are accessed via body.encoded, subject.encoded etc
*2.3.5 (November 25, 2009)*
* Every object in a Mail object returns an object, never a string. So Mail.body returns a Mail::Body class object, need to call #encoded or #decoded to get the string you want.
* Mail::Message#set_content_type does not exist, it is simply Mail::Message#content_type
* Minor Bug Fixes and deprecation warnings
* Every mail message gets a unique message_id unless you specify one, had to change all the tests that check for equality with expected.encoded == actual.encoded to first replace their message_ids with control values
* Mail now has a proper concept of parts, remove the ActionMailer::Part and ActionMailer::PartContainer classes
*2.3.4 (September 4, 2009)*
* Calling #encoded on any object returns it as a string ready to go into the output stream of an email, this means it includes the \r\n at the end of the lines and the object is pre-wrapped with \r\n\t if it is a header field. Also, the "encoded" value includes the field name if it is a header field.
* Minor bug fixes.
* Attachments are only the actual attachment, with filename etc. A part contains an attachment. The part has the content_type etc. So attachments.last.content_type is invalid. But parts.last.content_type
*2.3.3 (July 12, 2009)*
* No changes, just a version bump.
* There is no idea of a "sub_head" in Mail. A part is just a Message with some extra functionality, so it just has a "header" like a normal mail message
*2.3.2 [Final] (March 15, 2009)*

View File

@@ -5,51 +5,72 @@ are used to consolidate code for sending out forgotten passwords, welcome
wishes on signup, invoices for billing, and any other use case that requires
a written notification to either a person or another system.
Action Mailer is in essence a wrapper around Action Controller and the
Mail gem. It provides a way to make emails using templates in the same
way that Action Controller renders views using templates.
Additionally, an Action Mailer class can be used to process incoming email,
such as allowing a weblog to accept new posts from an email (which could even
have been sent from a phone).
== Sending emails
The framework works by setting up all the email details, except the body,
in methods on the service layer. Subject, recipients, sender, and timestamp
are all set up this way. An example of such a method:
The framework works by initializing any instance variables you want to be
available in the email template, followed by a call to +mail+ to deliver
the email.
def signed_up(recipient)
recipients recipient
subject "[Signed up] Welcome #{recipient}"
from "system@loudthinking.com"
body :recipient => recipient
This can be as simple as:
class Notifier < ActionMailer::Base
delivers_from 'system@loudthinking.com'
def welcome(recipient)
@recipient = recipient
mail(:to => recipient,
:subject => "[Signed up] Welcome #{recipient}")
end
end
The body of the email is created by using an Action View template (regular
ERb) that has the content of the body hash parameter available as instance variables.
ERb) that has the instance variables that are declared in the mailer action.
So the corresponding body template for the method above could look like this:
Hello there,
Mr. <%= @recipient %>
Thank you for signing up!
And if the recipient was given as "david@loudthinking.com", the email
generated would look like this:
Date: Sun, 12 Dec 2004 00:00:00 +0100
Date: Mon, 25 Jan 2010 22:48:09 +1100
From: system@loudthinking.com
To: david@loudthinking.com
Message-ID: <4b5d84f9dd6a5_7380800b81ac29578@void.loudthinking.com.mail>
Subject: [Signed up] Welcome david@loudthinking.com
Mime-Version: 1.0
Content-Type: text/plain;
charset="US-ASCII";
Content-Transfer-Encoding: 7bit
Hello there,
Mr. david@loudthinking.com
You never actually call the instance methods like signed_up directly. Instead,
you call class methods like deliver_* and create_* that are automatically
created for each instance method. So if the signed_up method sat on
ApplicationMailer, it would look like this:
In previous version of rails you would call <tt>create_method_name</tt> and
<tt>deliver_method_name</tt>. Rails 3.0 has a much simpler interface, you
simply call the method and optionally call +deliver+ on the return value.
ApplicationMailer.create_signed_up("david@loudthinking.com") # => tmail object for testing
ApplicationMailer.deliver_signed_up("david@loudthinking.com") # sends the email
ApplicationMailer.new.signed_up("david@loudthinking.com") # won't work!
Calling the method returns a Mail Message object:
message = Notifier.welcome #=> Returns a Mail::Message object
message.deliver #=> delivers the email
Or you can just chain the methods together like:
Notifier.welcome.deliver # Creates the email and sends it immediately
== Receiving emails
@@ -103,16 +124,13 @@ The Base class has the full list of configuration options. Here's an example:
Action Mailer requires that the Action Pack is either available to be required immediately
or is accessible as a GEM.
Additionally, Action Mailer requires the Mail gem, http://github.com/mikel/mail
== Bundled software
* tmail 0.10.8 by Minero Aoki released under LGPL
Read more on http://i.loveruby.net/en/prog/tmail.html
* Text::Format 0.63 by Austin Ziegler released under OpenSource
Read more on http://www.halostatue.ca/ruby/Text__Format.html
== Download
The latest version of Action Mailer can be found at

View File

@@ -1,9 +1,9 @@
require 'rubygems'
require 'rake'
require 'rake/testtask'
require 'rdoc/task'
require 'rake/rdoctask'
require 'rake/packagetask'
require 'rubygems/package_task'
require 'rake/gempackagetask'
require File.join(File.dirname(__FILE__), 'lib', 'action_mailer', 'version')
PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
@@ -22,12 +22,21 @@ task :default => [ :test ]
# Run the unit tests
Rake::TestTask.new { |t|
t.libs << "test"
t.pattern = 'test/*_test.rb'
t.pattern = 'test/**/*_test.rb'
t.warning = true
}
namespace :test do
task :isolated do
ruby = File.join(*RbConfig::CONFIG.values_at('bindir', 'RUBY_INSTALL_NAME'))
Dir.glob("test/**/*_test.rb").all? do |file|
system(ruby, '-Ilib:test', file)
end or raise "Failures"
end
end
# Generate the RDoc documentation
RDoc::Task.new { |rdoc|
Rake::RDocTask.new { |rdoc|
rdoc.rdoc_dir = 'doc'
rdoc.title = "Action Mailer -- Easy email delivery and testing"
rdoc.options << '--line-numbers' << '--inline-source' << '-A cattr_accessor=object'
@@ -36,60 +45,24 @@ RDoc::Task.new { |rdoc|
rdoc.rdoc_files.include('README', 'CHANGELOG')
rdoc.rdoc_files.include('lib/action_mailer.rb')
rdoc.rdoc_files.include('lib/action_mailer/*.rb')
rdoc.rdoc_files.include('lib/action_mailer/delivery_method/*.rb')
}
spec = eval(File.read('actionmailer.gemspec'))
# Create compressed packages
spec = Gem::Specification.new do |s|
s.platform = Gem::Platform::RUBY
s.name = PKG_NAME
s.summary = "Service layer for easy email delivery and testing."
s.description = %q{Makes it trivial to test and deliver emails sent from a single service layer.}
s.version = PKG_VERSION
s.author = "David Heinemeier Hansson"
s.email = "david@loudthinking.com"
s.rubyforge_project = "actionmailer"
s.homepage = "http://www.rubyonrails.org"
s.add_dependency('actionpack', '= 2.3.14' + PKG_BUILD)
s.requirements << 'none'
s.require_path = 'lib'
s.files = [ "Rakefile", "install.rb", "README", "CHANGELOG", "MIT-LICENSE" ]
s.files = s.files + Dir.glob( "lib/**/*" ).delete_if { |item| item.include?( "\.svn" ) }
s.files = s.files + Dir.glob( "test/**/*" ).delete_if { |item| item.include?( "\.svn" ) }
end
Gem::PackageTask.new(spec) do |p|
Rake::GemPackageTask.new(spec) do |p|
p.gem_spec = spec
p.need_tar = true
p.need_zip = true
end
desc "Publish the API documentation"
task :pgem => [:package] do
require 'rake/contrib/sshpublisher'
Rake::SshFilePublisher.new("gems.rubyonrails.org", "/u/sites/gems/gems", "pkg", "#{PKG_FILE_NAME}.gem").upload
`ssh gems.rubyonrails.org '/u/sites/gems/gemupdate.sh'`
desc "Release to gemcutter"
task :release => :package do
require 'rake/gemcutter'
Rake::Gemcutter::Tasks.new(spec).define
Rake::Task['gem:push'].invoke
end
desc "Publish the API documentation"
task :pdoc => [:rdoc] do
task :pdoc => [:rdoc] do
require 'rake/contrib/sshpublisher'
Rake::SshDirPublisher.new("wrath.rubyonrails.org", "public_html/am", "doc").upload
end
desc "Publish the release files to RubyForge."
task :release => [ :package ] do
require 'rubyforge'
require 'rake/contrib/rubyforgepublisher'
packages = %w( gem tgz zip ).collect{ |ext| "pkg/#{PKG_NAME}-#{PKG_VERSION}.#{ext}" }
rubyforge = RubyForge.new
rubyforge.login
rubyforge.add_release(PKG_NAME, PKG_NAME, "REL #{PKG_VERSION}", *packages)
end

View File

@@ -1,14 +1,22 @@
Gem::Specification.new do |s|
s.name = 'actionmailer'
s.version = '2.3.18'
s.summary = 'Service layer for easy email delivery and testing.'
s.description = 'Makes it trivial to test and deliver emails sent from a single service layer.'
s.platform = Gem::Platform::RUBY
s.name = 'actionmailer'
s.version = '3.0.0.beta1'
s.summary = 'Email composition, delivery, and recieval framework (part of Rails).'
s.description = 'Email composition, delivery, and recieval framework (part of Rails).'
s.author = 'David Heinemeier Hansson'
s.email = 'david@loudthinking.com'
s.homepage = 'http://www.rubyonrails.org'
s.author = 'David Heinemeier Hansson'
s.email = 'david@loudthinking.com'
s.homepage = 'http://www.rubyonrails.org'
s.rubyforge_project = 'actionmailer'
s.files = Dir['CHANGELOG', 'README', 'MIT-LICENSE', 'lib/**/*']
s.require_path = 'lib'
s.requirements << 'none'
s.add_dependency 'actionpack', '= 2.3.18'
s.has_rdoc = true
s.add_dependency('actionpack', '= 3.0.0.beta1')
s.add_dependency('mail', '~> 2.1.2')
s.add_dependency('text-format', '~> 1.0.0')
end

View File

@@ -21,40 +21,37 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#++
begin
require 'action_controller'
rescue LoadError
actionpack_path = "#{File.dirname(__FILE__)}/../../actionpack/lib"
if File.directory?(actionpack_path)
$:.unshift actionpack_path
require 'action_controller'
end
end
actionpack_path = File.expand_path('../../../actionpack/lib', __FILE__)
$:.unshift(actionpack_path) if File.directory?(actionpack_path) && !$:.include?(actionpack_path)
require 'abstract_controller'
require 'action_view'
module ActionMailer
def self.load_all!
[Base, Part, ::Text::Format, ::Net::SMTP]
end
# Common ActiveSupport usage in ActionMailer
require 'active_support/core_ext/class'
require 'active_support/core_ext/object/blank'
require 'active_support/core_ext/array/uniq_by'
require 'active_support/core_ext/module/attr_internal'
require 'active_support/core_ext/module/delegation'
require 'active_support/core_ext/string/inflections'
autoload :AdvAttrAccessor, 'action_mailer/adv_attr_accessor'
autoload :Base, 'action_mailer/base'
autoload :Helpers, 'action_mailer/helpers'
autoload :Part, 'action_mailer/part'
autoload :PartContainer, 'action_mailer/part_container'
autoload :Quoting, 'action_mailer/quoting'
autoload :TestCase, 'action_mailer/test_case'
autoload :TestHelper, 'action_mailer/test_helper'
autoload :Utils, 'action_mailer/utils'
module ActionMailer
extend ::ActiveSupport::Autoload
autoload :AdvAttrAccessor
autoload :Collector
autoload :Base
autoload :DeliveryMethods
autoload :DeprecatedApi
autoload :MailHelper
autoload :OldApi
autoload :Quoting
autoload :TestCase
autoload :TestHelper
end
module Text
autoload :Format, 'action_mailer/vendor/text_format'
end
extend ActiveSupport::Autoload
module Net
autoload :SMTP, 'net/smtp'
autoload :Format, 'text/format'
end
autoload :MailHelper, 'action_mailer/mail_helper'

View File

@@ -1,29 +1,25 @@
module ActionMailer
module AdvAttrAccessor #:nodoc:
def self.included(base)
base.extend(ClassMethods)
end
def adv_attr_accessor(*names)
names.each do |name|
ivar = "@#{name}"
module ClassMethods #:nodoc:
def adv_attr_accessor(*names)
names.each do |name|
ivar = "@#{name}"
define_method("#{name}=") do |value|
instance_variable_set(ivar, value)
class_eval <<-ACCESSORS, __FILE__, __LINE__ + 1
def #{name}=(value)
#{ivar} = value
end
define_method(name) do |*parameters|
raise ArgumentError, "expected 0 or 1 parameters" unless parameters.length <= 1
if parameters.empty?
if instance_variable_names.include?(ivar)
instance_variable_get(ivar)
end
def #{name}(*args)
raise ArgumentError, "expected 0 or 1 parameters" unless args.length <= 1
if args.empty?
#{ivar} if instance_variable_names.include?(#{ivar.inspect})
else
instance_variable_set(ivar, parameters.first)
#{ivar} = args.first
end
end
end
ACCESSORS
self.protected_instance_variables << ivar if self.respond_to?(:protected_instance_variables)
end
end
end

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,36 @@
require 'abstract_controller/collector'
require 'active_support/core_ext/hash/reverse_merge'
require 'active_support/core_ext/array/extract_options'
module ActionMailer #:nodoc:
class Collector
include AbstractController::Collector
attr_reader :responses
def initialize(context, &block)
@context = context
@responses = []
@default_render = block
@default_formats = context.formats
end
def any(*args, &block)
options = args.extract_options!
raise "You have to supply at least one format" if args.empty?
args.each { |type| send(type, options.dup, &block) }
end
alias :all :any
def custom(mime, options={}, &block)
options.reverse_merge!(:content_type => mime.to_s)
@context.formats = [mime.to_sym]
options[:body] = if block
block.call
else
@default_render.call
end
@responses << options
@context.formats = @default_formats
end
end
end

View File

@@ -0,0 +1,86 @@
require 'tmpdir'
module ActionMailer
# This modules handles everything related to the delivery, from registering new
# delivery methods to configuring the mail object to be sent.
module DeliveryMethods
extend ActiveSupport::Concern
included do
class_attribute :delivery_methods, :delivery_method
# Do not make this inheritable, because we always want it to propagate
cattr_accessor :raise_delivery_errors
self.raise_delivery_errors = true
cattr_accessor :perform_deliveries
self.perform_deliveries = true
self.delivery_methods = {}.freeze
self.delivery_method = :smtp
add_delivery_method :smtp, Mail::SMTP,
:address => "localhost",
:port => 25,
:domain => 'localhost.localdomain',
:user_name => nil,
:password => nil,
:authentication => nil,
:enable_starttls_auto => true
add_delivery_method :file, Mail::FileDelivery,
:location => defined?(Rails.root) ? "#{Rails.root}/tmp/mails" : "#{Dir.tmpdir}/mails"
add_delivery_method :sendmail, Mail::Sendmail,
:location => '/usr/sbin/sendmail',
:arguments => '-i -t'
add_delivery_method :test, Mail::TestMailer
end
module ClassMethods
# Provides a list of emails that have been delivered by Mail::TestMailer
delegate :deliveries, :deliveries=, :to => Mail::TestMailer
# Adds a new delivery method through the given class using the given symbol
# as alias and the default options supplied:
#
# Example:
#
# add_delivery_method :sendmail, Mail::Sendmail,
# :location => '/usr/sbin/sendmail',
# :arguments => '-i -t'
#
def add_delivery_method(symbol, klass, default_options={})
class_attribute(:"#{symbol}_settings") unless respond_to?(:"#{symbol}_settings")
send(:"#{symbol}_settings=", default_options)
self.delivery_methods = delivery_methods.merge(symbol.to_sym => klass).freeze
end
def wrap_delivery_behavior(mail, method=nil) #:nodoc:
method ||= self.delivery_method
mail.delivery_handler = self
case method
when NilClass
raise "Delivery method cannot be nil"
when Symbol
if klass = delivery_methods[method.to_sym]
mail.delivery_method(klass, send(:"#{method}_settings"))
else
raise "Invalid delivery method #{method.inspect}"
end
else
mail.delivery_method(method)
end
mail.perform_deliveries = perform_deliveries
mail.raise_delivery_errors = raise_delivery_errors
end
end
def wrap_delivery_behavior!(*args) #:nodoc:
self.class.wrap_delivery_behavior(message, *args)
end
end
end

View File

@@ -0,0 +1,139 @@
module ActionMailer
# This is the API which is deprecated and is going to be removed on Rails 3.1 release.
# Part of the old API will be deprecated after 3.1, for a smoother deprecation process.
# Chech those in OldApi instead.
module DeprecatedApi #:nodoc:
extend ActiveSupport::Concern
included do
[:charset, :content_type, :mime_version, :implicit_parts_order].each do |method|
class_eval <<-FILE, __FILE__, __LINE__ + 1
def self.default_#{method}
@@default_#{method}
end
def self.default_#{method}=(value)
ActiveSupport::Deprecation.warn "ActionMailer::Base.default_#{method}=value is deprecated, " <<
"use default :#{method} => value instead"
@@default_#{method} = value
end
@@default_#{method} = nil
FILE
end
end
module ClassMethods
# Deliver the given mail object directly. This can be used to deliver
# a preconstructed mail object, like:
#
# email = MyMailer.create_some_mail(parameters)
# email.set_some_obscure_header "frobnicate"
# MyMailer.deliver(email)
def deliver(mail, show_warning=true)
if show_warning
ActiveSupport::Deprecation.warn "#{self}.deliver is deprecated, call " <<
"deliver in the mailer instance instead", caller[0,2]
end
raise "no mail object available for delivery!" unless mail
wrap_delivery_behavior(mail)
mail.deliver
mail
end
def template_root
self.view_paths && self.view_paths.first
end
def template_root=(root)
ActiveSupport::Deprecation.warn "template_root= is deprecated, use prepend_view_path instead", caller[0,2]
self.view_paths = ActionView::Base.process_view_paths(root)
end
def respond_to?(method_symbol, include_private = false)
matches_dynamic_method?(method_symbol) || super
end
def method_missing(method_symbol, *parameters)
if match = matches_dynamic_method?(method_symbol)
case match[1]
when 'create'
ActiveSupport::Deprecation.warn "#{self}.create_#{match[2]} is deprecated, " <<
"use #{self}.#{match[2]} instead", caller[0,2]
new(match[2], *parameters).message
when 'deliver'
ActiveSupport::Deprecation.warn "#{self}.deliver_#{match[2]} is deprecated, " <<
"use #{self}.#{match[2]}.deliver instead", caller[0,2]
new(match[2], *parameters).message.deliver
else super
end
else
super
end
end
private
def matches_dynamic_method?(method_name)
method_name = method_name.to_s
/^(create|deliver)_([_a-z]\w*)/.match(method_name) || /^(new)$/.match(method_name)
end
end
# Delivers a Mail object. By default, it delivers the cached mail
# object (from the <tt>create!</tt> method). If no cached mail object exists, and
# no alternate has been given as the parameter, this will fail.
def deliver!(mail = @_message)
ActiveSupport::Deprecation.warn "Calling deliver in the AM::Base object is deprecated, " <<
"please call deliver in the Mail instance", caller[0,2]
self.class.deliver(mail, false)
end
alias :deliver :deliver!
def render(*args)
options = args.last.is_a?(Hash) ? args.last : {}
if options[:body].is_a?(Hash)
ActiveSupport::Deprecation.warn(':body in render deprecated. Please use instance ' <<
'variables as assigns instead', caller[0,1])
options[:body].each { |k,v| instance_variable_set(:"@#{k}", v) }
end
super
end
# Render a message but does not set it as mail body. Useful for rendering
# data for part and attachments.
#
# Examples:
#
# render_message "special_message"
# render_message :template => "special_message"
# render_message :inline => "<%= 'Hi!' %>"
#
def render_message(*args)
ActiveSupport::Deprecation.warn "render_message is deprecated, use render instead", caller[0,2]
render(*args)
end
private
def initialize_defaults(*)
@charset ||= self.class.default_charset.try(:dup)
@content_type ||= self.class.default_content_type.try(:dup)
@implicit_parts_order ||= self.class.default_implicit_parts_order.try(:dup)
@mime_version ||= self.class.default_mime_version.try(:dup)
super
end
def create_parts
if @body.is_a?(Hash) && !@body.empty?
ActiveSupport::Deprecation.warn "Giving a hash to body is deprecated, please use instance variables instead", caller[0,2]
@body.each { |k, v| instance_variable_set(:"@#{k}", v) }
end
super
end
end
end

View File

@@ -1,113 +0,0 @@
require 'active_support/dependencies'
module ActionMailer
module Helpers #:nodoc:
def self.included(base) #:nodoc:
# Initialize the base module to aggregate its helpers.
base.class_inheritable_accessor :master_helper_module
base.master_helper_module = Module.new
# Extend base with class methods to declare helpers.
base.extend(ClassMethods)
base.class_eval do
# Wrap inherited to create a new master helper module for subclasses.
class << self
alias_method_chain :inherited, :helper
end
# Wrap initialize_template_class to extend new template class
# instances with the master helper module.
alias_method_chain :initialize_template_class, :helper
end
end
module ClassMethods
# Makes all the (instance) methods in the helper module available to templates rendered through this controller.
# See ActionView::Helpers (link:classes/ActionView/Helpers.html) for more about making your own helper modules
# available to the templates.
def add_template_helper(helper_module) #:nodoc:
master_helper_module.module_eval "include #{helper_module}"
end
# Declare a helper:
# helper :foo
# requires 'foo_helper' and includes FooHelper in the template class.
# helper FooHelper
# includes FooHelper in the template class.
# helper { def foo() "#{bar} is the very best" end }
# evaluates the block in the template class, adding method +foo+.
# helper(:three, BlindHelper) { def mice() 'mice' end }
# does all three.
def helper(*args, &block)
args.flatten.each do |arg|
case arg
when Module
add_template_helper(arg)
when String, Symbol
file_name = arg.to_s.underscore + '_helper'
class_name = file_name.camelize
begin
require_dependency(file_name)
rescue LoadError => load_error
requiree = / -- (.*?)(\.rb)?$/.match(load_error.message).to_a[1]
msg = (requiree == file_name) ? "Missing helper file helpers/#{file_name}.rb" : "Can't load file: #{requiree}"
raise LoadError.new(msg).copy_blame!(load_error)
end
add_template_helper(class_name.constantize)
else
raise ArgumentError, 'helper expects String, Symbol, or Module argument'
end
end
# Evaluate block in template class if given.
master_helper_module.module_eval(&block) if block_given?
end
# Declare a controller method as a helper. For example,
# helper_method :link_to
# def link_to(name, options) ... end
# makes the link_to controller method available in the view.
def helper_method(*methods)
methods.flatten.each do |method|
master_helper_module.module_eval <<-end_eval
def #{method}(*args, &block)
controller.__send__(%(#{method}), *args, &block)
end
end_eval
end
end
# Declare a controller attribute as a helper. For example,
# helper_attr :name
# attr_accessor :name
# makes the name and name= controller methods available in the view.
# The is a convenience wrapper for helper_method.
def helper_attr(*attrs)
attrs.flatten.each { |attr| helper_method(attr, "#{attr}=") }
end
private
def inherited_with_helper(child)
inherited_without_helper(child)
begin
child.master_helper_module = Module.new
child.master_helper_module.__send__(:include, master_helper_module)
child.helper child.name.to_s.underscore
rescue MissingSourceFile => e
raise unless e.is_missing?("helpers/#{child.name.to_s.underscore}_helper")
end
end
end
private
# Extend the template class instance with our controller's helper module.
def initialize_template_class_with_helper(assigns)
initialize_template_class_without_helper(assigns).tap do |template|
template.extend self.class.master_helper_module
end
end
end
end

View File

@@ -1,17 +1,29 @@
module MailHelper
# Uses Text::Format to take the text and format it, indented two spaces for
# each line, and wrapped at 72 columns.
def block_format(text)
formatted = text.split(/\n\r\n/).collect { |paragraph|
Text::Format.new(
:columns => 72, :first_indent => 2, :body_indent => 2, :text => paragraph
).format
}.join("\n")
module ActionMailer
module MailHelper
# Uses Text::Format to take the text and format it, indented two spaces for
# each line, and wrapped at 72 columns.
def block_format(text)
formatted = text.split(/\n\r\n/).collect { |paragraph|
Text::Format.new(
:columns => 72, :first_indent => 2, :body_indent => 2, :text => paragraph
).format
}.join("\n")
# Make list points stand on their own line
formatted.gsub!(/[ ]*([*]+) ([^*]*)/) { |s| " #{$1} #{$2.strip}\n" }
formatted.gsub!(/[ ]*([#]+) ([^#]*)/) { |s| " #{$1} #{$2.strip}\n" }
# Make list points stand on their own line
formatted.gsub!(/[ ]*([*]+) ([^*]*)/) { |s| " #{$1} #{$2.strip}\n" }
formatted.gsub!(/[ ]*([#]+) ([^#]*)/) { |s| " #{$1} #{$2.strip}\n" }
formatted
end
formatted
# Access the mailer instance.
def mailer
@_controller
end
# Access the message instance.
def message
@_message
end
end
end

View File

@@ -0,0 +1,248 @@
require 'active_support/core_ext/object/try'
module ActionMailer
module OldApi #:nodoc:
extend ActiveSupport::Concern
included do
extend ActionMailer::AdvAttrAccessor
@@protected_instance_variables = %w(@parts)
cattr_reader :protected_instance_variables
# Specify the BCC addresses for the message
adv_attr_accessor :bcc
# Specify the CC addresses for the message.
adv_attr_accessor :cc
# Specify the charset to use for the message. This defaults to the
# +default_charset+ specified for ActionMailer::Base.
adv_attr_accessor :charset
# Specify the content type for the message. This defaults to <tt>text/plain</tt>
# in most cases, but can be automatically set in some situations.
adv_attr_accessor :content_type
# Specify the from address for the message.
adv_attr_accessor :from
# Specify the address (if different than the "from" address) to direct
# replies to this message.
adv_attr_accessor :reply_to
# Specify additional headers to be added to the message.
adv_attr_accessor :headers
# Specify the order in which parts should be sorted, based on content-type.
# This defaults to the value for the +default_implicit_parts_order+.
adv_attr_accessor :implicit_parts_order
# Defaults to "1.0", but may be explicitly given if needed.
adv_attr_accessor :mime_version
# The recipient addresses for the message, either as a string (for a single
# address) or an array (for multiple addresses).
adv_attr_accessor :recipients
# The date on which the message was sent. If not set (the default), the
# header will be set by the delivery agent.
adv_attr_accessor :sent_on
# Specify the subject of the message.
adv_attr_accessor :subject
# Specify the template name to use for current message. This is the "base"
# template name, without the extension or directory, and may be used to
# have multiple mailer methods share the same template.
adv_attr_accessor :template
# Override the mailer name, which defaults to an inflected version of the
# mailer's class name. If you want to use a template in a non-standard
# location, you can use this to specify that location.
adv_attr_accessor :mailer_name
# Define the body of the message. This is either a Hash (in which case it
# specifies the variables to pass to the template when it is rendered),
# or a string, in which case it specifies the actual text of the message.
adv_attr_accessor :body
# Alias controller_path to mailer_name so render :partial in views work.
alias :controller_path :mailer_name
end
def process(method_name, *args)
initialize_defaults(method_name)
super
unless @mail_was_called
create_parts
create_mail
end
@_message
end
# Add a part to a multipart message, with the given content-type. The
# part itself is yielded to the block so that other properties (charset,
# body, headers, etc.) can be set on it.
def part(params)
params = {:content_type => params} if String === params
if custom_headers = params.delete(:headers)
params.merge!(custom_headers)
end
part = Mail::Part.new(params)
yield part if block_given?
@parts << part
end
# Add an attachment to a multipart message. This is simply a part with the
# content-disposition set to "attachment".
def attachment(params, &block)
params = { :content_type => params } if String === params
params[:content] ||= params.delete(:data) || params.delete(:body)
if params[:filename]
params = normalize_file_hash(params)
else
params = normalize_nonfile_hash(params)
end
part(params, &block)
end
protected
def normalize_nonfile_hash(params)
content_disposition = "attachment;"
mime_type = params.delete(:mime_type)
if content_type = params.delete(:content_type)
content_type = "#{mime_type || content_type};"
end
params[:body] = params.delete(:data) if params[:data]
{ :content_type => content_type,
:content_disposition => content_disposition }.merge(params)
end
def normalize_file_hash(params)
filename = File.basename(params.delete(:filename))
content_disposition = "attachment; filename=\"#{File.basename(filename)}\""
mime_type = params.delete(:mime_type)
if (content_type = params.delete(:content_type)) && (content_type !~ /filename=/)
content_type = "#{mime_type || content_type}; filename=\"#{filename}\""
end
params[:body] = params.delete(:data) if params[:data]
{ :content_type => content_type,
:content_disposition => content_disposition }.merge(params)
end
def create_mail
m = @_message
quote_fields!({:subject => subject, :to => recipients, :from => from,
:bcc => bcc, :cc => cc, :reply_to => reply_to}, charset)
m.mime_version = mime_version unless mime_version.nil?
m.date = sent_on.to_time rescue sent_on if sent_on
@headers.each { |k, v| m[k] = v }
real_content_type, ctype_attrs = parse_content_type
main_type, sub_type = split_content_type(real_content_type)
if @parts.size == 1 && @parts.first.parts.empty?
m.content_type([main_type, sub_type, ctype_attrs])
m.body = @parts.first.body.encoded
else
@parts.each do |p|
m.add_part(p)
end
m.body.set_sort_order(@implicit_parts_order)
m.body.sort_parts!
if real_content_type =~ /multipart/
ctype_attrs.delete "charset"
m.content_type([main_type, sub_type, ctype_attrs])
end
end
wrap_delivery_behavior!
m.content_transfer_encoding = '8bit' unless m.body.only_us_ascii?
@_message
end
# Set up the default values for the various instance variables of this
# mailer. Subclasses may override this method to provide different
# defaults.
def initialize_defaults(method_name)
@charset ||= self.class.default[:charset].try(:dup)
@content_type ||= self.class.default[:content_type].try(:dup)
@implicit_parts_order ||= self.class.default[:parts_order].try(:dup)
@mime_version ||= self.class.default[:mime_version].try(:dup)
@mailer_name ||= self.class.mailer_name.dup
@template ||= method_name
@mail_was_called = false
@parts ||= []
@headers ||= {}
@sent_on ||= Time.now
@body ||= {}
end
def create_parts
if String === @body
@parts.unshift create_inline_part(@body)
elsif @parts.empty? || @parts.all? { |p| p.content_disposition =~ /^attachment/ }
self.class.view_paths.first.find_all(@template, {}, @mailer_name).each do |template|
@parts << create_inline_part(render_to_body(:_template => template), template.mime_type)
end
if @parts.size > 1
@content_type = "multipart/alternative" if @content_type !~ /^multipart/
end
# If this is a multipart e-mail add the mime_version if it is not
# already set.
@mime_version ||= "1.0" if !@parts.empty?
end
end
def create_inline_part(body, mime_type=nil)
ct = mime_type || "text/plain"
main_type, sub_type = split_content_type(ct.to_s)
Mail::Part.new(
:content_type => [main_type, sub_type, {:charset => charset}],
:content_disposition => "inline",
:body => body
)
end
def split_content_type(ct)
ct.to_s.split("/")
end
def parse_content_type(defaults=nil)
if @content_type.blank?
[ nil, {} ]
else
ctype, *attrs = @content_type.split(/;\s*/)
attrs = attrs.inject({}) { |h,s| k,v = s.split(/\=/, 2); h[k] = v; h }
[ctype, {"charset" => @charset}.merge(attrs)]
end
end
end
end

View File

@@ -1,107 +0,0 @@
module ActionMailer
# Represents a subpart of an email message. It shares many similar
# attributes of ActionMailer::Base. Although you can create parts manually
# and add them to the +parts+ list of the mailer, it is easier
# to use the helper methods in ActionMailer::PartContainer.
class Part
include AdvAttrAccessor, PartContainer, Utils
# Represents the body of the part, as a string. This should not be a
# Hash (like ActionMailer::Base), but if you want a template to be rendered
# into the body of a subpart you can do it with the mailer's +render+ method
# and assign the result here.
adv_attr_accessor :body
# Specify the charset for this subpart. By default, it will be the charset
# of the containing part or mailer.
adv_attr_accessor :charset
# The content disposition of this part, typically either "inline" or
# "attachment".
adv_attr_accessor :content_disposition
# The content type of the part.
adv_attr_accessor :content_type
# The filename to use for this subpart (usually for attachments).
adv_attr_accessor :filename
# Accessor for specifying additional headers to include with this part.
adv_attr_accessor :headers
# The transfer encoding to use for this subpart, like "base64" or
# "quoted-printable".
adv_attr_accessor :transfer_encoding
# Create a new part from the given +params+ hash. The valid params keys
# correspond to the accessors.
def initialize(params)
@content_type = params[:content_type]
@content_disposition = params[:disposition] || "inline"
@charset = params[:charset]
@body = params[:body]
@filename = params[:filename]
@transfer_encoding = params[:transfer_encoding] || "quoted-printable"
@headers = params[:headers] || {}
@parts = []
end
# Convert the part to a mail object which can be included in the parts
# list of another mail object.
def to_mail(defaults)
part = TMail::Mail.new
real_content_type, ctype_attrs = parse_content_type(defaults)
if @parts.empty?
part.content_transfer_encoding = transfer_encoding || "quoted-printable"
case (transfer_encoding || "").downcase
when "base64" then
part.body = TMail::Base64.folding_encode(body)
when "quoted-printable"
part.body = [normalize_new_lines(body)].pack("M*")
else
part.body = body
end
# Always set the content_type after setting the body and or parts!
# Also don't set filename and name when there is none (like in
# non-attachment parts)
if content_disposition == "attachment"
ctype_attrs.delete "charset"
part.set_content_type(real_content_type, nil,
squish("name" => filename).merge(ctype_attrs))
part.set_content_disposition(content_disposition,
squish("filename" => filename).merge(ctype_attrs))
else
part.set_content_type(real_content_type, nil, ctype_attrs)
part.set_content_disposition(content_disposition)
end
else
if String === body
@parts.unshift Part.new(:charset => charset, :body => @body, :content_type => 'text/plain')
@body = nil
end
@parts.each do |p|
prt = (TMail::Mail === p ? p : p.to_mail(defaults))
part.parts << prt
end
if real_content_type =~ /multipart/
ctype_attrs.delete 'charset'
part.set_content_type(real_content_type, nil, ctype_attrs)
end
end
headers.each { |k,v| part[k] = v }
part
end
private
def squish(values={})
values.delete_if { |k,v| v.nil? }
end
end
end

View File

@@ -1,55 +0,0 @@
module ActionMailer
# Accessors and helpers that ActionMailer::Base and ActionMailer::Part have
# in common. Using these helpers you can easily add subparts or attachments
# to your message:
#
# def my_mail_message(...)
# ...
# part "text/plain" do |p|
# p.body "hello, world"
# p.transfer_encoding "base64"
# end
#
# attachment "image/jpg" do |a|
# a.body = File.read("hello.jpg")
# a.filename = "hello.jpg"
# end
# end
module PartContainer
# The list of subparts of this container
attr_reader :parts
# Add a part to a multipart message, with the given content-type. The
# part itself is yielded to the block so that other properties (charset,
# body, headers, etc.) can be set on it.
def part(params)
params = {:content_type => params} if String === params
part = Part.new(params)
yield part if block_given?
@parts << part
end
# Add an attachment to a multipart message. This is simply a part with the
# content-disposition set to "attachment".
def attachment(params, &block)
params = { :content_type => params } if String === params
params = { :disposition => "attachment",
:transfer_encoding => "base64" }.merge(params)
part(params, &block)
end
private
def parse_content_type(defaults=nil)
if content_type.blank?
return defaults ?
[ defaults.content_type, { 'charset' => defaults.charset } ] :
[ nil, {} ]
end
ctype, *attrs = content_type.split(/;\s*/)
attrs = attrs.inject({}) { |h,s| k,v = s.split(/=/, 2); h[k] = v; h }
[ctype, {"charset" => charset || defaults && defaults.charset}.merge(attrs)]
end
end
end

View File

@@ -1,6 +1,8 @@
# encoding: us-ascii
module ActionMailer
module Quoting #:nodoc:
# TODO extract this into Mail itself.
#
#
# Convert the given text into quoted printable format, with an instruction
# that the text be eventually interpreted in the given charset.
def quoted_printable(text, charset)
@@ -44,7 +46,7 @@ module ActionMailer
# "to", "from", "cc", "bcc" and "reply-to" headers.
def quote_address_if_necessary(address, charset)
if Array === address
address.map { |a| quote_address_if_necessary(a, charset) }
address.map { |a| quote_address_if_necessary(a, charset) }.join(", ")
elsif address =~ /^(\S.*)\s+(<.*>)$/
address = $2
phrase = quote_if_necessary($1.gsub(/^['"](.*)['"]$/, '\1'), charset)

View File

@@ -0,0 +1,25 @@
require "action_mailer"
require "rails"
module ActionMailer
class Railtie < Rails::Railtie
railtie_name :action_mailer
initializer "action_mailer.url_for", :before => :load_environment_config do |app|
ActionMailer::Base.send(:include, ActionController::UrlFor) if defined?(ActionController)
end
require "action_mailer/railties/subscriber"
subscriber ActionMailer::Railties::Subscriber.new
initializer "action_mailer.logger" do
ActionMailer::Base.logger ||= Rails.logger
end
initializer "action_mailer.set_configs" do |app|
app.config.action_mailer.each do |k,v|
ActionMailer::Base.send "#{k}=", v
end
end
end
end

View File

@@ -0,0 +1,20 @@
module ActionMailer
module Railties
class Subscriber < Rails::Subscriber
def deliver(event)
recipients = Array(event.payload[:to]).join(', ')
info("\nSent mail to #{recipients} (%1.fms)" % event.duration)
debug(event.payload[:mail])
end
def receive(event)
info("\nReceived mail (%.1fms)" % event.duration)
debug(event.payload[:mail])
end
def logger
ActionMailer::Base.logger
end
end
end
end

View File

@@ -1,5 +1,3 @@
require 'active_support/test_case'
module ActionMailer
class NonInferrableMailerError < ::StandardError
def initialize(name)
@@ -39,14 +37,12 @@ module ActionMailer
def initialize_test_deliveries
ActionMailer::Base.delivery_method = :test
ActionMailer::Base.perform_deliveries = true
ActionMailer::Base.deliveries = []
ActionMailer::Base.deliveries.clear
end
def set_expected_mail
failed_pre_200
@expected = TMail::Mail.new
@expected.set_content_type "text", "plain", { "charset" => charset }
@expected = Mail.new
@expected.content_type ["text", "plain", { "charset" => charset }]
@expected.mime_version = '1.0'
end
@@ -60,7 +56,7 @@ module ActionMailer
end
def read_fixture(action)
IO.readlines(File.join(RAILS_ROOT, 'test', 'fixtures', self.class.mailer_class.name.underscore, action))
IO.readlines(File.join(Rails.root, 'test', 'fixtures', self.class.mailer_class.name.underscore, action))
end
end
end

View File

@@ -58,7 +58,6 @@ module ActionMailer
end
end
# TODO: Deprecate this
module Test
module Unit
class TestCase

View File

@@ -0,0 +1,34 @@
module Mail
class Message
def set_content_type(*args)
ActiveSupport::Deprecation.warn('Message#set_content_type is deprecated, please just call ' <<
'Message#content_type with the same arguments', caller[0,2])
content_type(*args)
end
alias :old_transfer_encoding :transfer_encoding
def transfer_encoding(value = nil)
if value
ActiveSupport::Deprecation.warn('Message#transfer_encoding is deprecated, please call ' <<
'Message#content_transfer_encoding with the same arguments', caller[0,2])
content_transfer_encoding(value)
else
old_transfer_encoding
end
end
def transfer_encoding=(value)
ActiveSupport::Deprecation.warn('Message#transfer_encoding= is deprecated, please call ' <<
'Message#content_transfer_encoding= with the same arguments', caller[0,2])
self.content_transfer_encoding = value
end
def original_filename
ActiveSupport::Deprecation.warn('Message#original_filename is deprecated, ' <<
'please call Message#filename', caller[0,2])
filename
end
end
end

View File

@@ -1,7 +0,0 @@
module ActionMailer
module Utils #:nodoc:
def normalize_new_lines(text)
text.to_s.gsub(/\r\n?/, "\n")
end
end
end

File diff suppressed because it is too large Load Diff

View File

@@ -1,10 +0,0 @@
# Prefer gems to the bundled libs.
require 'rubygems'
begin
gem 'text-format', '>= 0.6.3'
rescue Gem::LoadError
$:.unshift "#{File.dirname(__FILE__)}/text-format-0.6.3"
end
require 'text/format'

View File

@@ -1,6 +0,0 @@
require 'tmail/version'
require 'tmail/mail'
require 'tmail/mailbox'
require 'tmail/core_extensions'
require 'tmail/net'
require 'tmail/vendor/rchardet-1.3/lib/rchardet'

View File

@@ -1,3 +0,0 @@
parser.rb
output.parser
stringio.rb

View File

@@ -1,18 +0,0 @@
# lib/tmail/Makefile
#
debug:
rm -f parser.rb
make parser.rb DEBUG=true
parser.rb: parser.y
if [ "$(DEBUG)" = true ]; then \
racc -v -g -o$@ parser.y ;\
else \
racc -E -o$@ parser.y ;\
fi
clean:
rm -f parser.rb parser.output
distclean: clean

View File

@@ -1,392 +0,0 @@
=begin rdoc
= Address handling class
=end
#--
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Note: Originally licensed under LGPL v2+. Using MIT license for Rails
# with permission of Minero Aoki.
#++
require 'tmail/encode'
require 'tmail/parser'
module TMail
# = Class Address
#
# Provides a complete handling library for email addresses. Can parse a string of an
# address directly or take in preformatted addresses themselves. Allows you to add
# and remove phrases from the front of the address and provides a compare function for
# email addresses.
#
# == Parsing and Handling a Valid Address:
#
# Just pass the email address in as a string to Address.parse:
#
# email = TMail::Address.parse('Mikel Lindsaar <mikel@lindsaar.net>')
# #=> #<TMail::Address mikel@lindsaar.net>
# email.address
# #=> "mikel@lindsaar.net"
# email.local
# #=> "mikel"
# email.domain
# #=> "lindsaar.net"
# email.name # Aliased as phrase as well
# #=> "Mikel Lindsaar"
#
# == Detecting an Invalid Address
#
# If you want to check the syntactical validity of an email address, just pass it to
# Address.parse and catch any SyntaxError:
#
# begin
# TMail::Address.parse("mikel 2@@@@@ me .com")
# rescue TMail::SyntaxError
# puts("Invalid Email Address Detected")
# else
# puts("Address is valid")
# end
# #=> "Invalid Email Address Detected"
class Address
include TextUtils #:nodoc:
# Sometimes you need to parse an address, TMail can do it for you and provide you with
# a fairly robust method of detecting a valid address.
#
# Takes in a string, returns a TMail::Address object.
#
# Raises a TMail::SyntaxError on invalid email format
def Address.parse( str )
Parser.parse :ADDRESS, str
end
def address_group? #:nodoc:
false
end
# Address.new(local, domain)
#
# Accepts:
#
# * local - Left of the at symbol
#
# * domain - Array of the domain split at the periods.
#
# For example:
#
# Address.new("mikel", ["lindsaar", "net"])
# #=> "#<TMail::Address mikel@lindsaar.net>"
def initialize( local, domain )
if domain
domain.each do |s|
raise SyntaxError, 'empty word in domain' if s.empty?
end
end
# This is to catch an unquoted "@" symbol in the local part of the
# address. Handles addresses like <"@"@me.com> and makes sure they
# stay like <"@"@me.com> (previously were becoming <@@me.com>)
if local && (local.join == '@' || local.join =~ /\A[^"].*?@.*?[^"]\Z/)
@local = "\"#{local.join}\""
else
@local = local
end
@domain = domain
@name = nil
@routes = []
end
# Provides the name or 'phrase' of the email address.
#
# For Example:
#
# email = TMail::Address.parse("Mikel Lindsaar <mikel@lindsaar.net>")
# email.name
# #=> "Mikel Lindsaar"
def name
@name
end
# Setter method for the name or phrase of the email
#
# For Example:
#
# email = TMail::Address.parse("mikel@lindsaar.net")
# email.name
# #=> nil
# email.name = "Mikel Lindsaar"
# email.to_s
# #=> "Mikel Lindsaar <mikel@me.com>"
def name=( str )
@name = str
@name = nil if str and str.empty?
end
#:stopdoc:
alias phrase name
alias phrase= name=
#:startdoc:
# This is still here from RFC 822, and is now obsolete per RFC2822 Section 4.
#
# "When interpreting addresses, the route portion SHOULD be ignored."
#
# It is still here, so you can access it.
#
# Routes return the route portion at the front of the email address, if any.
#
# For Example:
# email = TMail::Address.parse( "<@sa,@another:Mikel@me.com>")
# => #<TMail::Address Mikel@me.com>
# email.to_s
# => "<@sa,@another:Mikel@me.com>"
# email.routes
# => ["sa", "another"]
def routes
@routes
end
def inspect #:nodoc:
"#<#{self.class} #{address()}>"
end
# Returns the local part of the email address
#
# For Example:
#
# email = TMail::Address.parse("mikel@lindsaar.net")
# email.local
# #=> "mikel"
def local
return nil unless @local
return '""' if @local.size == 1 and @local[0].empty?
# Check to see if it is an array before trying to map it
if @local.respond_to?(:map)
@local.map {|i| quote_atom(i) }.join('.')
else
quote_atom(@local)
end
end
# Returns the domain part of the email address
#
# For Example:
#
# email = TMail::Address.parse("mikel@lindsaar.net")
# email.local
# #=> "lindsaar.net"
def domain
return nil unless @domain
join_domain(@domain)
end
# Returns the full specific address itself
#
# For Example:
#
# email = TMail::Address.parse("mikel@lindsaar.net")
# email.address
# #=> "mikel@lindsaar.net"
def spec
s = self.local
d = self.domain
if s and d
s + '@' + d
else
s
end
end
alias address spec
# Provides == function to the email. Only checks the actual address
# and ignores the name/phrase component
#
# For Example
#
# addr1 = TMail::Address.parse("My Address <mikel@lindsaar.net>")
# #=> "#<TMail::Address mikel@lindsaar.net>"
# addr2 = TMail::Address.parse("Another <mikel@lindsaar.net>")
# #=> "#<TMail::Address mikel@lindsaar.net>"
# addr1 == addr2
# #=> true
def ==( other )
other.respond_to? :spec and self.spec == other.spec
end
alias eql? ==
# Provides a unique hash value for this record against the local and domain
# parts, ignores the name/phrase value
#
# email = TMail::Address.parse("mikel@lindsaar.net")
# email.hash
# #=> 18767598
def hash
@local.hash ^ @domain.hash
end
# Duplicates a TMail::Address object returning the duplicate
#
# addr1 = TMail::Address.parse("mikel@lindsaar.net")
# addr2 = addr1.dup
# addr1.id == addr2.id
# #=> false
def dup
obj = self.class.new(@local.dup, @domain.dup)
obj.name = @name.dup if @name
obj.routes.replace @routes
obj
end
include StrategyInterface #:nodoc:
def accept( strategy, dummy1 = nil, dummy2 = nil ) #:nodoc:
unless @local
strategy.meta '<>' # empty return-path
return
end
spec_p = (not @name and @routes.empty?)
if @name
strategy.phrase @name
strategy.space
end
tmp = spec_p ? '' : '<'
unless @routes.empty?
tmp << @routes.map {|i| '@' + i }.join(',') << ':'
end
tmp << self.spec
tmp << '>' unless spec_p
strategy.meta tmp
strategy.lwsp ''
end
end
class AddressGroup
include Enumerable
def address_group?
true
end
def initialize( name, addrs )
@name = name
@addresses = addrs
end
attr_reader :name
def ==( other )
other.respond_to? :to_a and @addresses == other.to_a
end
alias eql? ==
def hash
map {|i| i.hash }.hash
end
def []( idx )
@addresses[idx]
end
def size
@addresses.size
end
def empty?
@addresses.empty?
end
def each( &block )
@addresses.each(&block)
end
def to_a
@addresses.dup
end
alias to_ary to_a
def include?( a )
@addresses.include? a
end
def flatten
set = []
@addresses.each do |a|
if a.respond_to? :flatten
set.concat a.flatten
else
set.push a
end
end
set
end
def each_address( &block )
flatten.each(&block)
end
def add( a )
@addresses.push a
end
alias push add
def delete( a )
@addresses.delete a
end
include StrategyInterface
def accept( strategy, dummy1 = nil, dummy2 = nil )
strategy.phrase @name
strategy.meta ':'
strategy.space
first = true
each do |mbox|
if first
first = false
else
strategy.puts_meta ','
end
strategy.space
mbox.accept strategy
end
strategy.meta ';'
strategy.lwsp ''
end
end
end # module TMail

View File

@@ -1,65 +0,0 @@
=begin rdoc
= Attachment handling file
=end
require 'kconv'
require 'stringio'
module TMail
class Attachment < StringIO
attr_accessor :original_filename, :content_type
alias quoted_filename original_filename
end
class Mail
def has_attachments?
attachment?(self) || multipart? && parts.any? { |part| attachment?(part) }
end
# Returns true if this part's content main type is text, else returns false.
# By main type is meant "text/plain" is text. "text/html" is text
def text_content_type?
self.header['content-type'] && (self.header['content-type'].main_type == 'text')
end
def inline_attachment?(part)
part['content-id'] || (part['content-disposition'] && part['content-disposition'].disposition == 'inline' && !part.text_content_type?)
end
def attachment?(part)
part.disposition_is_attachment? || (!part.content_type.nil? && !part.text_content_type?) unless part.multipart?
end
def attachments
if multipart?
parts.collect { |part| attachment(part) }.flatten.compact
elsif attachment?(self)
[attachment(self)]
end
end
private
def attachment(part)
if part.multipart?
part.attachments
elsif attachment?(part)
content = part.body # unquoted automatically by TMail#body
file_name = (part['content-location'] && part['content-location'].body) ||
part.sub_header('content-type', 'name') ||
part.sub_header('content-disposition', 'filename') ||
'noname'
return if content.blank?
attachment = TMail::Attachment.new(content)
attachment.original_filename = file_name.strip unless file_name.blank?
attachment.content_type = part.content_type
attachment
end
end
end
end

View File

@@ -1,46 +0,0 @@
#--
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Note: Originally licensed under LGPL v2+. Using MIT license for Rails
# with permission of Minero Aoki.
#++
#:stopdoc:
module TMail
module Base64
module_function
def folding_encode( str, eol = "\n", limit = 60 )
[str].pack('m')
end
def encode( str )
[str].pack('m').tr( "\r\n", '' )
end
def decode( str, strict = false )
str.unpack('m').first
end
end
end
#:startdoc:

View File

@@ -1,41 +0,0 @@
#:stopdoc:
unless Enumerable.method_defined?(:map)
module Enumerable #:nodoc:
alias map collect
end
end
unless Enumerable.method_defined?(:select)
module Enumerable #:nodoc:
alias select find_all
end
end
unless Enumerable.method_defined?(:reject)
module Enumerable #:nodoc:
def reject
result = []
each do |i|
result.push i unless yield(i)
end
result
end
end
end
unless Enumerable.method_defined?(:sort_by)
module Enumerable #:nodoc:
def sort_by
map {|i| [yield(i), i] }.sort.map {|val, i| i }
end
end
end
unless File.respond_to?(:read)
def File.read(fname) #:nodoc:
File.open(fname) {|f|
return f.read
}
end
end
#:startdoc:

View File

@@ -1,67 +0,0 @@
#--
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Note: Originally licensed under LGPL v2+. Using MIT license for Rails
# with permission of Minero Aoki.
#++
#:stopdoc:
module TMail
class Config
def initialize( strict )
@strict_parse = strict
@strict_base64decode = strict
end
def strict_parse?
@strict_parse
end
attr_writer :strict_parse
def strict_base64decode?
@strict_base64decode
end
attr_writer :strict_base64decode
def new_body_port( mail )
StringPort.new
end
alias new_preamble_port new_body_port
alias new_part_port new_body_port
end
DEFAULT_CONFIG = Config.new(false)
DEFAULT_STRICT_CONFIG = Config.new(true)
def Config.to_config( arg )
return DEFAULT_STRICT_CONFIG if arg == true
return DEFAULT_CONFIG if arg == false
arg or DEFAULT_CONFIG
end
end
#:startdoc:

View File

@@ -1,63 +0,0 @@
#:stopdoc:
unless Object.respond_to?(:blank?)
class Object
# Check first to see if we are in a Rails environment, no need to
# define these methods if we are
# An object is blank if it's nil, empty, or a whitespace string.
# For example, "", " ", nil, [], and {} are blank.
#
# This simplifies
# if !address.nil? && !address.empty?
# to
# if !address.blank?
def blank?
if respond_to?(:empty?) && respond_to?(:strip)
empty? or strip.empty?
elsif respond_to?(:empty?)
empty?
else
!self
end
end
end
class NilClass
def blank?
true
end
end
class FalseClass
def blank?
true
end
end
class TrueClass
def blank?
false
end
end
class Array
alias_method :blank?, :empty?
end
class Hash
alias_method :blank?, :empty?
end
class String
def blank?
empty? || strip.empty?
end
end
class Numeric
def blank?
false
end
end
end
#:startdoc:

View File

@@ -1,590 +0,0 @@
#--
# = COPYRIGHT:
#
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Note: Originally licensed under LGPL v2+. Using MIT license for Rails
# with permission of Minero Aoki.
#++
#:stopdoc:
require 'nkf'
require 'tmail/base64'
require 'tmail/stringio'
require 'tmail/utils'
#:startdoc:
module TMail
#:stopdoc:
class << self
attr_accessor :KCODE
end
self.KCODE = 'NONE'
module StrategyInterface
def create_dest( obj )
case obj
when nil
StringOutput.new
when String
StringOutput.new(obj)
when IO, StringOutput
obj
else
raise TypeError, 'cannot handle this type of object for dest'
end
end
module_function :create_dest
#:startdoc:
# Returns the TMail object encoded and ready to be sent via SMTP etc.
# You should call this before you are packaging up your email to
# correctly escape all the values that need escaping in the email, line
# wrap the email etc.
#
# It is also a good idea to call this before you marshal or serialize
# a TMail object.
#
# For Example:
#
# email = TMail::Load(my_email_file)
# email_to_send = email.encoded
def encoded( eol = "\r\n", charset = 'j', dest = nil )
accept_strategy Encoder, eol, charset, dest
end
# Returns the TMail object decoded and ready to be used by you, your
# program etc.
#
# You should call this before you are packaging up your email to
# correctly escape all the values that need escaping in the email, line
# wrap the email etc.
#
# For Example:
#
# email = TMail::Load(my_email_file)
# email_to_send = email.encoded
def decoded( eol = "\n", charset = 'e', dest = nil )
# Turn the E-Mail into a string and return it with all
# encoded characters decoded. alias for to_s
accept_strategy Decoder, eol, charset, dest
end
alias to_s decoded
def accept_strategy( klass, eol, charset, dest = nil ) #:nodoc:
dest ||= ''
accept klass.new( create_dest(dest), charset, eol )
dest
end
end
#:stopdoc:
###
### MIME B encoding decoder
###
class Decoder
include TextUtils
encoded = '=\?(?:iso-2022-jp|euc-jp|shift_jis)\?[QB]\?[a-z0-9+/=]+\?='
ENCODED_WORDS = /#{encoded}(?:\s+#{encoded})*/i
SPACER = "\t"
OUTPUT_ENCODING = {
'EUC' => 'e',
'SJIS' => 's',
}
def self.decode( str, encoding = nil )
encoding ||= (OUTPUT_ENCODING[TMail.KCODE] || 'j')
opt = '-mS' + encoding
str.gsub(ENCODED_WORDS) {|s| NKF.nkf(opt, s) }
end
def initialize( dest, encoding = nil, eol = "\n" )
@f = StrategyInterface.create_dest(dest)
@encoding = (/\A[ejs]/ === encoding) ? encoding[0,1] : nil
@eol = eol
end
def decode( str )
self.class.decode(str, @encoding)
end
private :decode
def terminate
end
def header_line( str )
@f << decode(str)
end
def header_name( nm )
@f << nm << ': '
end
def header_body( str )
@f << decode(str)
end
def space
@f << ' '
end
alias spc space
def lwsp( str )
@f << str
end
def meta( str )
@f << str
end
def puts_meta( str )
@f << str
end
def text( str )
@f << decode(str)
end
def phrase( str )
@f << quote_phrase(decode(str))
end
def kv_pair( k, v )
v = dquote(v) unless token_safe?(v)
@f << k << '=' << v
end
def puts( str = nil )
@f << str if str
@f << @eol
end
def write( str )
@f << str
end
end
###
### MIME B-encoding encoder
###
#
# FIXME: This class can handle only (euc-jp/shift_jis -> iso-2022-jp).
#
class Encoder
include TextUtils
BENCODE_DEBUG = false unless defined?(BENCODE_DEBUG)
def Encoder.encode( str )
e = new()
e.header_body str
e.terminate
e.dest.string
end
SPACER = "\t"
MAX_LINE_LEN = 78
RFC_2822_MAX_LENGTH = 998
OPTIONS = {
'EUC' => '-Ej -m0',
'SJIS' => '-Sj -m0',
'UTF8' => nil, # FIXME
'NONE' => nil
}
def initialize( dest = nil, encoding = nil, eol = "\r\n", limit = nil )
@f = StrategyInterface.create_dest(dest)
@opt = OPTIONS[TMail.KCODE]
@eol = eol
@folded = false
@preserve_quotes = true
reset
end
def preserve_quotes=( bool )
@preserve_quotes
end
def preserve_quotes
@preserve_quotes
end
def normalize_encoding( str )
if @opt
then NKF.nkf(@opt, str)
else str
end
end
def reset
@text = ''
@lwsp = ''
@curlen = 0
end
def terminate
add_lwsp ''
reset
end
def dest
@f
end
def puts( str = nil )
@f << str if str
@f << @eol
end
def write( str )
@f << str
end
#
# add
#
def header_line( line )
scanadd line
end
def header_name( name )
add_text name.split(/-/).map {|i| i.capitalize }.join('-')
add_text ':'
add_lwsp ' '
end
def header_body( str )
scanadd normalize_encoding(str)
end
def space
add_lwsp ' '
end
alias spc space
def lwsp( str )
add_lwsp str.sub(/[\r\n]+[^\r\n]*\z/, '')
end
def meta( str )
add_text str
end
def puts_meta( str )
add_text str + @eol + SPACER
end
def text( str )
scanadd normalize_encoding(str)
end
def phrase( str )
str = normalize_encoding(str)
if CONTROL_CHAR === str
scanadd str
else
add_text quote_phrase(str)
end
end
# FIXME: implement line folding
#
def kv_pair( k, v )
return if v.nil?
v = normalize_encoding(v)
if token_safe?(v)
add_text k + '=' + v
elsif not CONTROL_CHAR === v
add_text k + '=' + quote_token(v)
else
# apply RFC2231 encoding
kv = k + '*=' + "iso-2022-jp'ja'" + encode_value(v)
add_text kv
end
end
def encode_value( str )
str.gsub(TOKEN_UNSAFE) {|s| '%%%02x' % s[0] }
end
private
def scanadd( str, force = false )
types = ''
strs = []
if str.respond_to?(:encoding)
enc = str.encoding
str.force_encoding(Encoding::ASCII_8BIT)
end
until str.empty?
if m = /\A[^\e\t\r\n ]+/.match(str)
types << (force ? 'j' : 'a')
if str.respond_to?(:encoding)
strs.push m[0].force_encoding(enc)
else
strs.push m[0]
end
elsif m = /\A[\t\r\n ]+/.match(str)
types << 's'
if str.respond_to?(:encoding)
strs.push m[0].force_encoding(enc)
else
strs.push m[0]
end
elsif m = /\A\e../.match(str)
esc = m[0]
str = m.post_match
if esc != "\e(B" and m = /\A[^\e]+/.match(str)
types << 'j'
if str.respond_to?(:encoding)
strs.push m[0].force_encoding(enc)
else
strs.push m[0]
end
end
else
raise 'TMail FATAL: encoder scan fail'
end
(str = m.post_match) unless m.nil?
end
do_encode types, strs
end
def do_encode( types, strs )
#
# result : (A|E)(S(A|E))*
# E : W(SW)*
# W : (J|A)+ but must contain J # (J|A)*J(J|A)*
# A : <<A character string not to be encoded>>
# J : <<A character string to be encoded>>
# S : <<LWSP>>
#
# An encoding unit is `E'.
# Input (parameter `types') is (J|A)(J|A|S)*(J|A)
#
if BENCODE_DEBUG
puts
puts '-- do_encode ------------'
puts types.split(//).join(' ')
p strs
end
e = /[ja]*j[ja]*(?:s[ja]*j[ja]*)*/
while m = e.match(types)
pre = m.pre_match
concat_A_S pre, strs[0, pre.size] unless pre.empty?
concat_E m[0], strs[m.begin(0) ... m.end(0)]
types = m.post_match
strs.slice! 0, m.end(0)
end
concat_A_S types, strs
end
def concat_A_S( types, strs )
if RUBY_VERSION < '1.9'
a = ?a; s = ?s
else
a = 'a'.ord; s = 's'.ord
end
i = 0
types.each_byte do |t|
case t
when a then add_text strs[i]
when s then add_lwsp strs[i]
else
raise "TMail FATAL: unknown flag: #{t.chr}"
end
i += 1
end
end
METHOD_ID = {
?j => :extract_J,
?e => :extract_E,
?a => :extract_A,
?s => :extract_S
}
def concat_E( types, strs )
if BENCODE_DEBUG
puts '---- concat_E'
puts "types=#{types.split(//).join(' ')}"
puts "strs =#{strs.inspect}"
end
flush() unless @text.empty?
chunk = ''
strs.each_with_index do |s,i|
mid = METHOD_ID[types[i]]
until s.empty?
unless c = __send__(mid, chunk.size, s)
add_with_encode chunk unless chunk.empty?
flush
chunk = ''
fold
c = __send__(mid, 0, s)
raise 'TMail FATAL: extract fail' unless c
end
chunk << c
end
end
add_with_encode chunk unless chunk.empty?
end
def extract_J( chunksize, str )
size = max_bytes(chunksize, str.size) - 6
size = (size % 2 == 0) ? (size) : (size - 1)
return nil if size <= 0
if str.respond_to?(:encoding)
enc = str.encoding
str.force_encoding(Encoding::ASCII_8BIT)
"\e$B#{str.slice!(0, size)}\e(B".force_encoding(enc)
else
"\e$B#{str.slice!(0, size)}\e(B"
end
end
def extract_A( chunksize, str )
size = max_bytes(chunksize, str.size)
return nil if size <= 0
str.slice!(0, size)
end
alias extract_S extract_A
def max_bytes( chunksize, ssize )
(restsize() - '=?iso-2022-jp?B??='.size) / 4 * 3 - chunksize
end
#
# free length buffer
#
def add_text( str )
@text << str
# puts '---- text -------------------------------------'
# puts "+ #{str.inspect}"
# puts "txt >>>#{@text.inspect}<<<"
end
def add_with_encode( str )
@text << "=?iso-2022-jp?B?#{Base64.encode(str)}?="
end
def add_lwsp( lwsp )
# puts '---- lwsp -------------------------------------'
# puts "+ #{lwsp.inspect}"
fold if restsize() <= 0
flush(@folded)
@lwsp = lwsp
end
def flush(folded = false)
# puts '---- flush ----'
# puts "spc >>>#{@lwsp.inspect}<<<"
# puts "txt >>>#{@text.inspect}<<<"
@f << @lwsp << @text
if folded
@curlen = 0
else
@curlen += (@lwsp.size + @text.size)
end
@text = ''
@lwsp = ''
end
def fold
# puts '---- fold ----'
unless @f.string =~ /^.*?:$/
@f << @eol
@lwsp = SPACER
else
fold_header
@folded = true
end
@curlen = 0
end
def fold_header
# Called because line is too long - so we need to wrap.
# First look for whitespace in the text
# if it has text, fold there
# check the remaining text, if too long, fold again
# if it doesn't, then don't fold unless the line goes beyond 998 chars
# Check the text to see if there is whitespace, or if not
@wrapped_text = []
until @text.blank?
fold_the_string
end
@text = @wrapped_text.join("#{@eol}#{SPACER}")
end
def fold_the_string
whitespace_location = @text =~ /\s/ || @text.length
# Is the location of the whitespace shorter than the RCF_2822_MAX_LENGTH?
# if there is no whitespace in the string, then this
unless mazsize(whitespace_location) <= 0
@text.strip!
@wrapped_text << @text.slice!(0...whitespace_location)
# If it is not less, we have to wrap it destructively
else
slice_point = RFC_2822_MAX_LENGTH - @curlen - @lwsp.length
@text.strip!
@wrapped_text << @text.slice!(0...slice_point)
end
end
def restsize
MAX_LINE_LEN - (@curlen + @lwsp.size + @text.size)
end
def mazsize(whitespace_location)
# Per RFC2822, the maximum length of a line is 998 chars
RFC_2822_MAX_LENGTH - (@curlen + @lwsp.size + whitespace_location)
end
end
#:startdoc:
end # module TMail

View File

@@ -1,962 +0,0 @@
#--
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Note: Originally licensed under LGPL v2+. Using MIT license for Rails
# with permission of Minero Aoki.
#++
require 'tmail/encode'
require 'tmail/address'
require 'tmail/parser'
require 'tmail/config'
require 'tmail/utils'
#:startdoc:
module TMail
# Provides methods to handle and manipulate headers in the email
class HeaderField
include TextUtils
class << self
alias newobj new
def new( name, body, conf = DEFAULT_CONFIG )
klass = FNAME_TO_CLASS[name.downcase] || UnstructuredHeader
klass.newobj body, conf
end
# Returns a HeaderField object matching the header you specify in the "name" param.
# Requires an initialized TMail::Port to be passed in.
#
# The method searches the header of the Port you pass into it to find a match on
# the header line you pass. Once a match is found, it will unwrap the matching line
# as needed to return an initialized HeaderField object.
#
# If you want to get the Envelope sender of the email object, pass in "EnvelopeSender",
# if you want the From address of the email itself, pass in 'From'.
#
# This is because a mailbox doesn't have the : after the From that designates the
# beginning of the envelope sender (which can be different to the from address of
# the email)
#
# Other fields can be passed as normal, "Reply-To", "Received" etc.
#
# Note: Change of behaviour in 1.2.1 => returns nil if it does not find the specified
# header field, otherwise returns an instantiated object of the correct header class
#
# For example:
# port = TMail::FilePort.new("/test/fixtures/raw_email_simple")
# h = TMail::HeaderField.new_from_port(port, "From")
# h.addrs.to_s #=> "Mikel Lindsaar <mikel@nowhere.com>"
# h = TMail::HeaderField.new_from_port(port, "EvelopeSender")
# h.addrs.to_s #=> "mike@anotherplace.com.au"
# h = TMail::HeaderField.new_from_port(port, "SomeWeirdHeaderField")
# h #=> nil
def new_from_port( port, name, conf = DEFAULT_CONFIG )
if name == "EnvelopeSender"
name = "From"
re = Regexp.new('\A(From) ', 'i')
else
re = Regexp.new('\A(' + Regexp.quote(name) + '):', 'i')
end
str = nil
port.ropen {|f|
f.each do |line|
if m = re.match(line) then str = m.post_match.strip
elsif str and /\A[\t ]/ === line then str << ' ' << line.strip
elsif /\A-*\s*\z/ === line then break
elsif str then break
end
end
}
new(name, str, Config.to_config(conf)) if str
end
def internal_new( name, conf )
FNAME_TO_CLASS[name].newobj('', conf, true)
end
end # class << self
def initialize( body, conf, intern = false )
@body = body
@config = conf
@illegal = false
@parsed = false
if intern
@parsed = true
parse_init
end
end
def inspect
"#<#{self.class} #{@body.inspect}>"
end
def illegal?
@illegal
end
def empty?
ensure_parsed
return true if @illegal
isempty?
end
private
def ensure_parsed
return if @parsed
@parsed = true
parse
end
# defabstract parse
# end
def clear_parse_status
@parsed = false
@illegal = false
end
public
def body
ensure_parsed
v = Decoder.new(s = '')
do_accept v
v.terminate
s
end
def body=( str )
@body = str
clear_parse_status
end
include StrategyInterface
def accept( strategy )
ensure_parsed
do_accept strategy
strategy.terminate
end
# abstract do_accept
end
class UnstructuredHeader < HeaderField
def body
ensure_parsed
@body
end
def body=( arg )
ensure_parsed
@body = arg
end
private
def parse_init
end
def parse
@body = Decoder.decode(@body.gsub(/\n|\r\n|\r/, ''))
end
def isempty?
not @body
end
def do_accept( strategy )
strategy.text @body
end
end
class StructuredHeader < HeaderField
def comments
ensure_parsed
if @comments[0]
[Decoder.decode(@comments[0])]
else
@comments
end
end
private
def parse
save = nil
begin
parse_init
do_parse
rescue SyntaxError
if not save and mime_encoded? @body
save = @body
@body = Decoder.decode(save)
retry
elsif save
@body = save
end
@illegal = true
raise if @config.strict_parse?
end
end
def parse_init
@comments = []
init
end
def do_parse
quote_boundary
quote_unquoted_name
quote_unquoted_bencode
obj = Parser.parse(self.class::PARSE_TYPE, @body, @comments)
set obj if obj
end
end
class DateTimeHeader < StructuredHeader
PARSE_TYPE = :DATETIME
def date
ensure_parsed
@date
end
def date=( arg )
ensure_parsed
@date = arg
end
private
def init
@date = nil
end
def set( t )
@date = t
end
def isempty?
not @date
end
def do_accept( strategy )
strategy.meta time2str(@date)
end
end
class AddressHeader < StructuredHeader
PARSE_TYPE = :MADDRESS
def addrs
ensure_parsed
@addrs
end
private
def init
@addrs = []
end
def set( a )
@addrs = a
end
def isempty?
@addrs.empty?
end
def do_accept( strategy )
first = true
@addrs.each do |a|
if first
first = false
else
strategy.puts_meta ','
strategy.space
end
a.accept strategy
end
@comments.each do |c|
strategy.space
strategy.meta '('
strategy.text c
strategy.meta ')'
end
end
end
class ReturnPathHeader < AddressHeader
PARSE_TYPE = :RETPATH
def addr
addrs()[0]
end
def spec
a = addr() or return nil
a.spec
end
def routes
a = addr() or return nil
a.routes
end
private
def do_accept( strategy )
a = addr()
strategy.meta '<'
unless a.routes.empty?
strategy.meta a.routes.map {|i| '@' + i }.join(',')
strategy.meta ':'
end
spec = a.spec
strategy.meta spec if spec
strategy.meta '>'
end
end
class SingleAddressHeader < AddressHeader
def addr
addrs()[0]
end
private
def do_accept( strategy )
a = addr()
a.accept strategy
@comments.each do |c|
strategy.space
strategy.meta '('
strategy.text c
strategy.meta ')'
end
end
end
class MessageIdHeader < StructuredHeader
def id
ensure_parsed
@id
end
def id=( arg )
ensure_parsed
@id = arg
end
private
def init
@id = nil
end
def isempty?
not @id
end
def do_parse
@id = @body.slice(MESSAGE_ID) or
raise SyntaxError, "wrong Message-ID format: #{@body}"
end
def do_accept( strategy )
strategy.meta @id
end
end
class ReferencesHeader < StructuredHeader
def refs
ensure_parsed
@refs
end
def each_id
self.refs.each do |i|
yield i if MESSAGE_ID === i
end
end
def ids
ensure_parsed
@ids
end
def each_phrase
self.refs.each do |i|
yield i unless MESSAGE_ID === i
end
end
def phrases
ret = []
each_phrase {|i| ret.push i }
ret
end
private
def init
@refs = []
@ids = []
end
def isempty?
@ids.empty?
end
def do_parse
str = @body
while m = MESSAGE_ID.match(str)
pre = m.pre_match.strip
@refs.push pre unless pre.empty?
@refs.push s = m[0]
@ids.push s
str = m.post_match
end
str = str.strip
@refs.push str unless str.empty?
end
def do_accept( strategy )
first = true
@ids.each do |i|
if first
first = false
else
strategy.space
end
strategy.meta i
end
end
end
class ReceivedHeader < StructuredHeader
PARSE_TYPE = :RECEIVED
def from
ensure_parsed
@from
end
def from=( arg )
ensure_parsed
@from = arg
end
def by
ensure_parsed
@by
end
def by=( arg )
ensure_parsed
@by = arg
end
def via
ensure_parsed
@via
end
def via=( arg )
ensure_parsed
@via = arg
end
def with
ensure_parsed
@with
end
def id
ensure_parsed
@id
end
def id=( arg )
ensure_parsed
@id = arg
end
def _for
ensure_parsed
@_for
end
def _for=( arg )
ensure_parsed
@_for = arg
end
def date
ensure_parsed
@date
end
def date=( arg )
ensure_parsed
@date = arg
end
private
def init
@from = @by = @via = @with = @id = @_for = nil
@with = []
@date = nil
end
def set( args )
@from, @by, @via, @with, @id, @_for, @date = *args
end
def isempty?
@with.empty? and not (@from or @by or @via or @id or @_for or @date)
end
def do_accept( strategy )
list = []
list.push 'from ' + @from if @from
list.push 'by ' + @by if @by
list.push 'via ' + @via if @via
@with.each do |i|
list.push 'with ' + i
end
list.push 'id ' + @id if @id
list.push 'for <' + @_for + '>' if @_for
first = true
list.each do |i|
strategy.space unless first
strategy.meta i
first = false
end
if @date
strategy.meta ';'
strategy.space
strategy.meta time2str(@date)
end
end
end
class KeywordsHeader < StructuredHeader
PARSE_TYPE = :KEYWORDS
def keys
ensure_parsed
@keys
end
private
def init
@keys = []
end
def set( a )
@keys = a
end
def isempty?
@keys.empty?
end
def do_accept( strategy )
first = true
@keys.each do |i|
if first
first = false
else
strategy.meta ','
end
strategy.meta i
end
end
end
class EncryptedHeader < StructuredHeader
PARSE_TYPE = :ENCRYPTED
def encrypter
ensure_parsed
@encrypter
end
def encrypter=( arg )
ensure_parsed
@encrypter = arg
end
def keyword
ensure_parsed
@keyword
end
def keyword=( arg )
ensure_parsed
@keyword = arg
end
private
def init
@encrypter = nil
@keyword = nil
end
def set( args )
@encrypter, @keyword = args
end
def isempty?
not (@encrypter or @keyword)
end
def do_accept( strategy )
if @key
strategy.meta @encrypter + ','
strategy.space
strategy.meta @keyword
else
strategy.meta @encrypter
end
end
end
class MimeVersionHeader < StructuredHeader
PARSE_TYPE = :MIMEVERSION
def major
ensure_parsed
@major
end
def major=( arg )
ensure_parsed
@major = arg
end
def minor
ensure_parsed
@minor
end
def minor=( arg )
ensure_parsed
@minor = arg
end
def version
sprintf('%d.%d', major, minor)
end
private
def init
@major = nil
@minor = nil
end
def set( args )
@major, @minor = *args
end
def isempty?
not (@major or @minor)
end
def do_accept( strategy )
strategy.meta sprintf('%d.%d', @major, @minor)
end
end
class ContentTypeHeader < StructuredHeader
PARSE_TYPE = :CTYPE
def main_type
ensure_parsed
@main
end
def main_type=( arg )
ensure_parsed
@main = arg.downcase
end
def sub_type
ensure_parsed
@sub
end
def sub_type=( arg )
ensure_parsed
@sub = arg.downcase
end
def content_type
ensure_parsed
@sub ? sprintf('%s/%s', @main, @sub) : @main
end
def params
ensure_parsed
unless @params.blank?
@params.each do |k, v|
@params[k] = unquote(v)
end
end
@params
end
def []( key )
ensure_parsed
@params and unquote(@params[key])
end
def []=( key, val )
ensure_parsed
(@params ||= {})[key] = val
end
private
def init
@main = @sub = @params = nil
end
def set( args )
@main, @sub, @params = *args
end
def isempty?
not (@main or @sub)
end
def do_accept( strategy )
if @sub
strategy.meta sprintf('%s/%s', @main, @sub)
else
strategy.meta @main
end
@params.each do |k,v|
if v
strategy.meta ';'
strategy.space
strategy.kv_pair k, unquote(v)
end
end
end
end
class ContentTransferEncodingHeader < StructuredHeader
PARSE_TYPE = :CENCODING
def encoding
ensure_parsed
@encoding
end
def encoding=( arg )
ensure_parsed
@encoding = arg
end
private
def init
@encoding = nil
end
def set( s )
@encoding = s
end
def isempty?
not @encoding
end
def do_accept( strategy )
strategy.meta @encoding.capitalize
end
end
class ContentDispositionHeader < StructuredHeader
PARSE_TYPE = :CDISPOSITION
def disposition
ensure_parsed
@disposition
end
def disposition=( str )
ensure_parsed
@disposition = str.downcase
end
def params
ensure_parsed
unless @params.blank?
@params.each do |k, v|
@params[k] = unquote(v)
end
end
@params
end
def []( key )
ensure_parsed
@params and unquote(@params[key])
end
def []=( key, val )
ensure_parsed
(@params ||= {})[key] = val
end
private
def init
@disposition = @params = nil
end
def set( args )
@disposition, @params = *args
end
def isempty?
not @disposition and (not @params or @params.empty?)
end
def do_accept( strategy )
strategy.meta @disposition
@params.each do |k,v|
strategy.meta ';'
strategy.space
strategy.kv_pair k, unquote(v)
end
end
end
class HeaderField # redefine
FNAME_TO_CLASS = {
'date' => DateTimeHeader,
'resent-date' => DateTimeHeader,
'to' => AddressHeader,
'cc' => AddressHeader,
'bcc' => AddressHeader,
'from' => AddressHeader,
'reply-to' => AddressHeader,
'resent-to' => AddressHeader,
'resent-cc' => AddressHeader,
'resent-bcc' => AddressHeader,
'resent-from' => AddressHeader,
'resent-reply-to' => AddressHeader,
'sender' => SingleAddressHeader,
'resent-sender' => SingleAddressHeader,
'return-path' => ReturnPathHeader,
'message-id' => MessageIdHeader,
'resent-message-id' => MessageIdHeader,
'in-reply-to' => ReferencesHeader,
'received' => ReceivedHeader,
'references' => ReferencesHeader,
'keywords' => KeywordsHeader,
'encrypted' => EncryptedHeader,
'mime-version' => MimeVersionHeader,
'content-type' => ContentTypeHeader,
'content-transfer-encoding' => ContentTransferEncodingHeader,
'content-disposition' => ContentDispositionHeader,
'content-id' => MessageIdHeader,
'subject' => UnstructuredHeader,
'comments' => UnstructuredHeader,
'content-description' => UnstructuredHeader
}
end
end # module TMail

View File

@@ -1,9 +0,0 @@
#:stopdoc:
# This is here for Rolls.
# Rolls uses this instead of lib/tmail.rb.
require 'tmail/version'
require 'tmail/mail'
require 'tmail/mailbox'
require 'tmail/core_extensions'
#:startdoc:

File diff suppressed because it is too large Load Diff

View File

@@ -1,3 +0,0 @@
#:stopdoc:
require 'tmail/mailbox'
#:startdoc:

View File

@@ -1,578 +0,0 @@
=begin rdoc
= Mail class
=end
#--
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Note: Originally licensed under LGPL v2+. Using MIT license for Rails
# with permission of Minero Aoki.
#++
require 'tmail/interface'
require 'tmail/encode'
require 'tmail/header'
require 'tmail/port'
require 'tmail/config'
require 'tmail/utils'
require 'tmail/attachments'
require 'tmail/quoting'
require 'socket'
module TMail
# == Mail Class
#
# Accessing a TMail object done via the TMail::Mail class. As email can be fairly complex
# creatures, you will find a large amount of accessor and setter methods in this class!
#
# Most of the below methods handle the header, in fact, what TMail does best is handle the
# header of the email object. There are only a few methods that deal directly with the body
# of the email, such as base64_encode and base64_decode.
#
# === Using TMail inside your code
#
# The usual way is to install the gem (see the {README}[link:/README] on how to do this) and
# then put at the top of your class:
#
# require 'tmail'
#
# You can then create a new TMail object in your code with:
#
# @email = TMail::Mail.new
#
# Or if you have an email as a string, you can initialize a new TMail::Mail object and get it
# to parse that string for you like so:
#
# @email = TMail::Mail.parse(email_text)
#
# You can also read a single email off the disk, for example:
#
# @email = TMail::Mail.load('filename.txt')
#
# Also, you can read a mailbox (usual unix mbox format) and end up with an array of TMail
# objects by doing something like this:
#
# # Note, we pass true as the last variable to open the mailbox read only
# mailbox = TMail::UNIXMbox.new("mailbox", nil, true)
# @emails = []
# mailbox.each_port { |m| @emails << TMail::Mail.new(m) }
#
class Mail
class << self
# Opens an email that has been saved out as a file by itself.
#
# This function will read a file non-destructively and then parse
# the contents and return a TMail::Mail object.
#
# Does not handle multiple email mailboxes (like a unix mbox) for that
# use the TMail::UNIXMbox class.
#
# Example:
# mail = TMail::Mail.load('filename')
#
def load( fname )
new(FilePort.new(fname))
end
alias load_from load
alias loadfrom load
# Parses an email from the supplied string and returns a TMail::Mail
# object.
#
# Example:
# require 'rubygems'; require 'tmail'
# email_string =<<HEREDOC
# To: mikel@lindsaar.net
# From: mikel@me.com
# Subject: This is a short Email
#
# Hello there Mikel!
#
# HEREDOC
# mail = TMail::Mail.parse(email_string)
# #=> #<TMail::Mail port=#<TMail::StringPort:id=0xa30ac0> bodyport=nil>
# mail.body
# #=> "Hello there Mikel!\n\n"
def parse( str )
new(StringPort.new(str))
end
end
def initialize( port = nil, conf = DEFAULT_CONFIG ) #:nodoc:
@port = port || StringPort.new
@config = Config.to_config(conf)
@header = {}
@body_port = nil
@body_parsed = false
@epilogue = ''
@parts = []
@port.ropen {|f|
parse_header f
parse_body f unless @port.reproducible?
}
end
# Provides access to the port this email is using to hold it's data
#
# Example:
# mail = TMail::Mail.parse(email_string)
# mail.port
# #=> #<TMail::StringPort:id=0xa2c952>
attr_reader :port
def inspect
"\#<#{self.class} port=#{@port.inspect} bodyport=#{@body_port.inspect}>"
end
#
# to_s interfaces
#
public
include StrategyInterface
def write_back( eol = "\n", charset = 'e' )
parse_body
@port.wopen {|stream| encoded eol, charset, stream }
end
def accept( strategy )
with_multipart_encoding(strategy) {
ordered_each do |name, field|
next if field.empty?
strategy.header_name canonical(name)
field.accept strategy
strategy.puts
end
strategy.puts
body_port().ropen {|r|
strategy.write r.read
}
}
end
private
def canonical( name )
name.split(/-/).map {|s| s.capitalize }.join('-')
end
def with_multipart_encoding( strategy )
if parts().empty? # DO NOT USE @parts
yield
else
bound = ::TMail.new_boundary
if @header.key? 'content-type'
@header['content-type'].params['boundary'] = bound
else
store 'Content-Type', %<multipart/mixed; boundary="#{bound}">
end
yield
parts().each do |tm|
strategy.puts
strategy.puts '--' + bound
tm.accept strategy
end
strategy.puts
strategy.puts '--' + bound + '--'
strategy.write epilogue()
end
end
###
### header
###
public
ALLOW_MULTIPLE = {
'received' => true,
'resent-date' => true,
'resent-from' => true,
'resent-sender' => true,
'resent-to' => true,
'resent-cc' => true,
'resent-bcc' => true,
'resent-message-id' => true,
'comments' => true,
'keywords' => true
}
USE_ARRAY = ALLOW_MULTIPLE
def header
@header.dup
end
# Returns a TMail::AddressHeader object of the field you are querying.
# Examples:
# @mail['from'] #=> #<TMail::AddressHeader "mikel@test.com.au">
# @mail['to'] #=> #<TMail::AddressHeader "mikel@test.com.au">
#
# You can get the string value of this by passing "to_s" to the query:
# Example:
# @mail['to'].to_s #=> "mikel@test.com.au"
def []( key )
@header[key.downcase]
end
def sub_header(key, param)
(hdr = self[key]) ? hdr[param] : nil
end
alias fetch []
# Allows you to set or delete TMail header objects at will.
# Examples:
# @mail = TMail::Mail.new
# @mail['to'].to_s # => 'mikel@test.com.au'
# @mail['to'] = 'mikel@elsewhere.org'
# @mail['to'].to_s # => 'mikel@elsewhere.org'
# @mail.encoded # => "To: mikel@elsewhere.org\r\n\r\n"
# @mail['to'] = nil
# @mail['to'].to_s # => nil
# @mail.encoded # => "\r\n"
#
# Note: setting mail[] = nil actually deletes the header field in question from the object,
# it does not just set the value of the hash to nil
def []=( key, val )
dkey = key.downcase
if val.nil?
@header.delete dkey
return nil
end
case val
when String
header = new_hf(key, val)
when HeaderField
;
when Array
ALLOW_MULTIPLE.include? dkey or
raise ArgumentError, "#{key}: Header must not be multiple"
@header[dkey] = val
return val
else
header = new_hf(key, val.to_s)
end
if ALLOW_MULTIPLE.include? dkey
(@header[dkey] ||= []).push header
else
@header[dkey] = header
end
val
end
alias store []=
# Allows you to loop through each header in the TMail::Mail object in a block
# Example:
# @mail['to'] = 'mikel@elsewhere.org'
# @mail['from'] = 'me@me.com'
# @mail.each_header { |k,v| puts "#{k} = #{v}" }
# # => from = me@me.com
# # => to = mikel@elsewhere.org
def each_header
@header.each do |key, val|
[val].flatten.each {|v| yield key, v }
end
end
alias each_pair each_header
def each_header_name( &block )
@header.each_key(&block)
end
alias each_key each_header_name
def each_field( &block )
@header.values.flatten.each(&block)
end
alias each_value each_field
FIELD_ORDER = %w(
return-path received
resent-date resent-from resent-sender resent-to
resent-cc resent-bcc resent-message-id
date from sender reply-to to cc bcc
message-id in-reply-to references
subject comments keywords
mime-version content-type content-transfer-encoding
content-disposition content-description
)
def ordered_each
list = @header.keys
FIELD_ORDER.each do |name|
if list.delete(name)
[@header[name]].flatten.each {|v| yield name, v }
end
end
list.each do |name|
[@header[name]].flatten.each {|v| yield name, v }
end
end
def clear
@header.clear
end
def delete( key )
@header.delete key.downcase
end
def delete_if
@header.delete_if do |key,val|
if Array === val
val.delete_if {|v| yield key, v }
val.empty?
else
yield key, val
end
end
end
def keys
@header.keys
end
def key?( key )
@header.key? key.downcase
end
def values_at( *args )
args.map {|k| @header[k.downcase] }.flatten
end
alias indexes values_at
alias indices values_at
private
def parse_header( f )
name = field = nil
unixfrom = nil
while line = f.gets
case line
when /\A[ \t]/ # continue from prev line
raise SyntaxError, 'mail is began by space' unless field
field << ' ' << line.strip
when /\A([^\: \t]+):\s*/ # new header line
add_hf name, field if field
name = $1
field = $' #.strip
when /\A\-*\s*\z/ # end of header
add_hf name, field if field
name = field = nil
break
when /\AFrom (\S+)/
unixfrom = $1
when /^charset=.*/
else
raise SyntaxError, "wrong mail header: '#{line.inspect}'"
end
end
add_hf name, field if name
if unixfrom
add_hf 'Return-Path', "<#{unixfrom}>" unless @header['return-path']
end
end
def add_hf( name, field )
key = name.downcase
field = new_hf(name, field)
if ALLOW_MULTIPLE.include? key
(@header[key] ||= []).push field
else
@header[key] = field
end
end
def new_hf( name, field )
HeaderField.new(name, field, @config)
end
###
### body
###
public
def body_port
parse_body
@body_port
end
def each( &block )
body_port().ropen {|f| f.each(&block) }
end
def quoted_body
body_port.ropen {|f| return f.read }
end
def quoted_body= str
body_port.wopen { |f| f.write str }
str
end
def body=( str )
# Sets the body of the email to a new (encoded) string.
#
# We also reparses the email if the body is ever reassigned, this is a performance hit, however when
# you assign the body, you usually want to be able to make sure that you can access the attachments etc.
#
# Usage:
#
# mail.body = "Hello, this is\nthe body text"
# # => "Hello, this is\nthe body"
# mail.body
# # => "Hello, this is\nthe body"
@body_parsed = false
parse_body(StringInput.new(str))
parse_body
@body_port.wopen {|f| f.write str }
str
end
alias preamble quoted_body
alias preamble= quoted_body=
def epilogue
parse_body
@epilogue.dup
end
def epilogue=( str )
parse_body
@epilogue = str
str
end
def parts
parse_body
@parts
end
def each_part( &block )
parts().each(&block)
end
# Returns true if the content type of this part of the email is
# a disposition attachment
def disposition_is_attachment?
(self['content-disposition'] && self['content-disposition'].disposition == "attachment")
end
# Returns true if this part's content main type is text, else returns false.
# By main type is meant "text/plain" is text. "text/html" is text
def content_type_is_text?
self.header['content-type'] && (self.header['content-type'].main_type != "text")
end
private
def parse_body( f = nil )
return if @body_parsed
if f
parse_body_0 f
else
@port.ropen {|f|
skip_header f
parse_body_0 f
}
end
@body_parsed = true
end
def skip_header( f )
while line = f.gets
return if /\A[\r\n]*\z/ === line
end
end
def parse_body_0( f )
if multipart?
read_multipart f
else
@body_port = @config.new_body_port(self)
@body_port.wopen {|w|
w.write f.read
}
end
end
def read_multipart( src )
bound = @header['content-type'].params['boundary'] || ::TMail.new_boundary
is_sep = /\A--#{Regexp.quote bound}(?:--)?[ \t]*(?:\n|\r\n|\r)/
lastbound = "--#{bound}--"
ports = [ @config.new_preamble_port(self) ]
begin
f = ports.last.wopen
while line = src.gets
if is_sep === line
f.close
break if line.strip == lastbound
ports.push @config.new_part_port(self)
f = ports.last.wopen
else
f << line
end
end
@epilogue = (src.read || '')
ensure
f.close if f and not f.closed?
end
@body_port = ports.shift
@parts = ports.map {|p| self.class.new(p, @config) }
end
end # class Mail
end # module TMail

View File

@@ -1,496 +0,0 @@
=begin rdoc
= Mailbox and Mbox interaction class
=end
#--
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Note: Originally licensed under LGPL v2+. Using MIT license for Rails
# with permission of Minero Aoki.
#++
require 'tmail/port'
require 'socket'
require 'mutex_m'
unless [].respond_to?(:sort_by)
module Enumerable#:nodoc:
def sort_by
map {|i| [yield(i), i] }.sort {|a,b| a.first <=> b.first }.map {|i| i[1] }
end
end
end
module TMail
class MhMailbox
PORT_CLASS = MhPort
def initialize( dir )
edir = File.expand_path(dir)
raise ArgumentError, "not directory: #{dir}"\
unless FileTest.directory? edir
@dirname = edir
@last_file = nil
@last_atime = nil
end
def directory
@dirname
end
alias dirname directory
attr_accessor :last_atime
def inspect
"#<#{self.class} #{@dirname}>"
end
def close
end
def new_port
PORT_CLASS.new(next_file_name())
end
def each_port
mail_files().each do |path|
yield PORT_CLASS.new(path)
end
@last_atime = Time.now
end
alias each each_port
def reverse_each_port
mail_files().reverse_each do |path|
yield PORT_CLASS.new(path)
end
@last_atime = Time.now
end
alias reverse_each reverse_each_port
# old #each_mail returns Port
#def each_mail
# each_port do |port|
# yield Mail.new(port)
# end
#end
def each_new_port( mtime = nil, &block )
mtime ||= @last_atime
return each_port(&block) unless mtime
return unless File.mtime(@dirname) >= mtime
mail_files().each do |path|
yield PORT_CLASS.new(path) if File.mtime(path) > mtime
end
@last_atime = Time.now
end
private
def mail_files
Dir.entries(@dirname)\
.select {|s| /\A\d+\z/ === s }\
.map {|s| s.to_i }\
.sort\
.map {|i| "#{@dirname}/#{i}" }\
.select {|path| FileTest.file? path }
end
def next_file_name
unless n = @last_file
n = 0
Dir.entries(@dirname)\
.select {|s| /\A\d+\z/ === s }\
.map {|s| s.to_i }.sort\
.each do |i|
next unless FileTest.file? "#{@dirname}/#{i}"
n = i
end
end
begin
n += 1
end while FileTest.exist? "#{@dirname}/#{n}"
@last_file = n
"#{@dirname}/#{n}"
end
end # MhMailbox
MhLoader = MhMailbox
class UNIXMbox
class << self
alias newobj new
end
# Creates a new mailbox object that you can iterate through to collect the
# emails from with "each_port".
#
# You need to pass it a filename of a unix mailbox format file, the format of this
# file can be researched at this page at {wikipedia}[link:http://en.wikipedia.org/wiki/Mbox]
#
# ==== Parameters
#
# +filename+: The filename of the mailbox you want to open
#
# +tmpdir+: Can be set to override TMail using the system environment's temp dir. TMail will first
# use the temp dir specified by you (if any) or then the temp dir specified in the Environment's TEMP
# value then the value in the Environment's TMP value or failing all of the above, '/tmp'
#
# +readonly+: If set to false, each email you take from the mail box will be removed from the mailbox.
# default is *false* - ie, it *WILL* truncate your mailbox file to ZERO once it has read the emails out.
#
# ==== Options:
#
# None
#
# ==== Examples:
#
# # First show using readonly true:
#
# require 'ftools'
# File.size("../test/fixtures/mailbox")
# #=> 20426
#
# mailbox = TMail::UNIXMbox.new("../test/fixtures/mailbox", nil, true)
# #=> #<TMail::UNIXMbox:0x14a2aa8 @readonly=true.....>
#
# mailbox.each_port do |port|
# mail = TMail::Mail.new(port)
# puts mail.subject
# end
# #Testing mailbox 1
# #Testing mailbox 2
# #Testing mailbox 3
# #Testing mailbox 4
# require 'ftools'
# File.size?("../test/fixtures/mailbox")
# #=> 20426
#
# # Now show with readonly set to the default false
#
# mailbox = TMail::UNIXMbox.new("../test/fixtures/mailbox")
# #=> #<TMail::UNIXMbox:0x14a2aa8 @readonly=false.....>
#
# mailbox.each_port do |port|
# mail = TMail::Mail.new(port)
# puts mail.subject
# end
# #Testing mailbox 1
# #Testing mailbox 2
# #Testing mailbox 3
# #Testing mailbox 4
#
# File.size?("../test/fixtures/mailbox")
# #=> nil
def UNIXMbox.new( filename, tmpdir = nil, readonly = false )
tmpdir = ENV['TEMP'] || ENV['TMP'] || '/tmp'
newobj(filename, "#{tmpdir}/ruby_tmail_#{$$}_#{rand()}", readonly, false)
end
def UNIXMbox.lock( fname )
begin
f = File.open(fname, 'r+')
f.flock File::LOCK_EX
yield f
ensure
f.flock File::LOCK_UN
f.close if f and not f.closed?
end
end
def UNIXMbox.static_new( fname, dir, readonly = false )
newobj(fname, dir, readonly, true)
end
def initialize( fname, mhdir, readonly, static )
@filename = fname
@readonly = readonly
@closed = false
Dir.mkdir mhdir
@real = MhMailbox.new(mhdir)
@finalizer = UNIXMbox.mkfinal(@real, @filename, !@readonly, !static)
ObjectSpace.define_finalizer self, @finalizer
end
def UNIXMbox.mkfinal( mh, mboxfile, writeback_p, cleanup_p )
lambda {
if writeback_p
lock(mboxfile) {|f|
mh.each_port do |port|
f.puts create_from_line(port)
port.ropen {|r|
f.puts r.read
}
end
}
end
if cleanup_p
Dir.foreach(mh.dirname) do |fname|
next if /\A\.\.?\z/ === fname
File.unlink "#{mh.dirname}/#{fname}"
end
Dir.rmdir mh.dirname
end
}
end
# make _From line
def UNIXMbox.create_from_line( port )
sprintf 'From %s %s',
fromaddr(), TextUtils.time2str(File.mtime(port.filename))
end
def UNIXMbox.fromaddr(port)
h = HeaderField.new_from_port(port, 'Return-Path') ||
HeaderField.new_from_port(port, 'From') ||
HeaderField.new_from_port(port, 'EnvelopeSender') or return 'nobody'
a = h.addrs[0] or return 'nobody'
a.spec
end
def close
return if @closed
ObjectSpace.undefine_finalizer self
@finalizer.call
@finalizer = nil
@real = nil
@closed = true
@updated = nil
end
def each_port( &block )
close_check
update
@real.each_port(&block)
end
alias each each_port
def reverse_each_port( &block )
close_check
update
@real.reverse_each_port(&block)
end
alias reverse_each reverse_each_port
# old #each_mail returns Port
#def each_mail( &block )
# each_port do |port|
# yield Mail.new(port)
# end
#end
def each_new_port( mtime = nil )
close_check
update
@real.each_new_port(mtime) {|p| yield p }
end
def new_port
close_check
@real.new_port
end
private
def close_check
@closed and raise ArgumentError, 'accessing already closed mbox'
end
def update
return if FileTest.zero?(@filename)
return if @updated and File.mtime(@filename) < @updated
w = nil
port = nil
time = nil
UNIXMbox.lock(@filename) {|f|
begin
f.each do |line|
if /\AFrom / === line
w.close if w
File.utime time, time, port.filename if time
port = @real.new_port
w = port.wopen
time = fromline2time(line)
else
w.print line if w
end
end
ensure
if w and not w.closed?
w.close
File.utime time, time, port.filename if time
end
end
f.truncate(0) unless @readonly
@updated = Time.now
}
end
def fromline2time( line )
m = /\AFrom \S+ \w+ (\w+) (\d+) (\d+):(\d+):(\d+) (\d+)/.match(line) or return nil
Time.local(m[6].to_i, m[1], m[2].to_i, m[3].to_i, m[4].to_i, m[5].to_i)
rescue
nil
end
end # UNIXMbox
MboxLoader = UNIXMbox
class Maildir
extend Mutex_m
PORT_CLASS = MaildirPort
@seq = 0
def Maildir.unique_number
synchronize {
@seq += 1
return @seq
}
end
def initialize( dir = nil )
@dirname = dir || ENV['MAILDIR']
raise ArgumentError, "not directory: #{@dirname}"\
unless FileTest.directory? @dirname
@new = "#{@dirname}/new"
@tmp = "#{@dirname}/tmp"
@cur = "#{@dirname}/cur"
end
def directory
@dirname
end
def inspect
"#<#{self.class} #{@dirname}>"
end
def close
end
def each_port
mail_files(@cur).each do |path|
yield PORT_CLASS.new(path)
end
end
alias each each_port
def reverse_each_port
mail_files(@cur).reverse_each do |path|
yield PORT_CLASS.new(path)
end
end
alias reverse_each reverse_each_port
def new_port
fname = nil
tmpfname = nil
newfname = nil
begin
fname = "#{Time.now.to_i}.#{$$}_#{Maildir.unique_number}.#{Socket.gethostname}"
tmpfname = "#{@tmp}/#{fname}"
newfname = "#{@new}/#{fname}"
end while FileTest.exist? tmpfname
if block_given?
File.open(tmpfname, 'w') {|f| yield f }
File.rename tmpfname, newfname
PORT_CLASS.new(newfname)
else
File.open(tmpfname, 'w') {|f| f.write "\n\n" }
PORT_CLASS.new(tmpfname)
end
end
def each_new_port
mail_files(@new).each do |path|
dest = @cur + '/' + File.basename(path)
File.rename path, dest
yield PORT_CLASS.new(dest)
end
check_tmp
end
TOO_OLD = 60 * 60 * 36 # 36 hour
def check_tmp
old = Time.now.to_i - TOO_OLD
each_filename(@tmp) do |full, fname|
if FileTest.file? full and
File.stat(full).mtime.to_i < old
File.unlink full
end
end
end
private
def mail_files( dir )
Dir.entries(dir)\
.select {|s| s[0] != ?. }\
.sort_by {|s| s.slice(/\A\d+/).to_i }\
.map {|s| "#{dir}/#{s}" }\
.select {|path| FileTest.file? path }
end
def each_filename( dir )
Dir.foreach(dir) do |fname|
path = "#{dir}/#{fname}"
if fname[0] != ?. and FileTest.file? path
yield path, fname
end
end
end
end # Maildir
MaildirLoader = Maildir
end # module TMail

View File

@@ -1,6 +0,0 @@
#:stopdoc:
require 'tmail/version'
require 'tmail/mail'
require 'tmail/mailbox'
require 'tmail/core_extensions'
#:startdoc:

View File

@@ -1,3 +0,0 @@
#:stopdoc:
require 'tmail/mailbox'
#:startdoc:

View File

@@ -1,250 +0,0 @@
#--
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Note: Originally licensed under LGPL v2+. Using MIT license for Rails
# with permission of Minero Aoki.
#++
#:stopdoc:
require 'nkf'
#:startdoc:
module TMail
class Mail
def send_to( smtp )
do_send_to(smtp) do
ready_to_send
end
end
def send_text_to( smtp )
do_send_to(smtp) do
ready_to_send
mime_encode
end
end
def do_send_to( smtp )
from = from_address or raise ArgumentError, 'no from address'
(dests = destinations).empty? and raise ArgumentError, 'no receipient'
yield
send_to_0 smtp, from, dests
end
private :do_send_to
def send_to_0( smtp, from, to )
smtp.ready(from, to) do |f|
encoded "\r\n", 'j', f, ''
end
end
def ready_to_send
delete_no_send_fields
add_message_id
add_date
end
NOSEND_FIELDS = %w(
received
bcc
)
def delete_no_send_fields
NOSEND_FIELDS.each do |nm|
delete nm
end
delete_if {|n,v| v.empty? }
end
def add_message_id( fqdn = nil )
unless @message_id_enforced
self.message_id = ::TMail::new_message_id(fqdn)
end
end
def add_date
self.date = Time.now
end
def mime_encode
if parts.empty?
mime_encode_singlepart
else
mime_encode_multipart true
end
end
def mime_encode_singlepart
self.mime_version = '1.0'
b = body
if NKF.guess(b) != NKF::BINARY
mime_encode_text b
else
mime_encode_binary b
end
end
def mime_encode_text( body )
self.body = NKF.nkf('-j -m0', body)
self.set_content_type 'text', 'plain', {'charset' => 'iso-2022-jp'}
self.encoding = '7bit'
end
def mime_encode_binary( body )
self.body = [body].pack('m')
self.set_content_type 'application', 'octet-stream'
self.encoding = 'Base64'
end
def mime_encode_multipart( top = true )
self.mime_version = '1.0' if top
self.set_content_type 'multipart', 'mixed'
e = encoding(nil)
if e and not /\A(?:7bit|8bit|binary)\z/i === e
raise ArgumentError,
'using C.T.Encoding with multipart mail is not permitted'
end
end
end
#:stopdoc:
class DeleteFields
NOSEND_FIELDS = %w(
received
bcc
)
def initialize( nosend = nil, delempty = true )
@no_send_fields = nosend || NOSEND_FIELDS.dup
@delete_empty_fields = delempty
end
attr :no_send_fields
attr :delete_empty_fields, true
def exec( mail )
@no_send_fields.each do |nm|
delete nm
end
delete_if {|n,v| v.empty? } if @delete_empty_fields
end
end
#:startdoc:
#:stopdoc:
class AddMessageId
def initialize( fqdn = nil )
@fqdn = fqdn
end
attr :fqdn, true
def exec( mail )
mail.message_id = ::TMail::new_msgid(@fqdn)
end
end
#:startdoc:
#:stopdoc:
class AddDate
def exec( mail )
mail.date = Time.now
end
end
#:startdoc:
#:stopdoc:
class MimeEncodeAuto
def initialize( s = nil, m = nil )
@singlepart_composer = s || MimeEncodeSingle.new
@multipart_composer = m || MimeEncodeMulti.new
end
attr :singlepart_composer
attr :multipart_composer
def exec( mail )
if mail._builtin_multipart?
then @multipart_composer
else @singlepart_composer end.exec mail
end
end
#:startdoc:
#:stopdoc:
class MimeEncodeSingle
def exec( mail )
mail.mime_version = '1.0'
b = mail.body
if NKF.guess(b) != NKF::BINARY
on_text b
else
on_binary b
end
end
def on_text( body )
mail.body = NKF.nkf('-j -m0', body)
mail.set_content_type 'text', 'plain', {'charset' => 'iso-2022-jp'}
mail.encoding = '7bit'
end
def on_binary( body )
mail.body = [body].pack('m')
mail.set_content_type 'application', 'octet-stream'
mail.encoding = 'Base64'
end
end
#:startdoc:
#:stopdoc:
class MimeEncodeMulti
def exec( mail, top = true )
mail.mime_version = '1.0' if top
mail.set_content_type 'multipart', 'mixed'
e = encoding(nil)
if e and not /\A(?:7bit|8bit|binary)\z/i === e
raise ArgumentError,
'using C.T.Encoding with multipart mail is not permitted'
end
mail.parts.each do |m|
exec m, false if m._builtin_multipart?
end
end
end
#:startdoc:
end # module TMail

View File

@@ -1,132 +0,0 @@
=begin rdoc
= Obsolete methods that are depriciated
If you really want to see them, go to lib/tmail/obsolete.rb and view to your
heart's content.
=end
#--
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Note: Originally licensed under LGPL v2+. Using MIT license for Rails
# with permission of Minero Aoki.
#++
#:stopdoc:
module TMail #:nodoc:
class Mail
alias include? key?
alias has_key? key?
def values
ret = []
each_field {|v| ret.push v }
ret
end
def value?( val )
HeaderField === val or return false
[ @header[val.name.downcase] ].flatten.include? val
end
alias has_value? value?
end
class Mail
def from_addr( default = nil )
addr, = from_addrs(nil)
addr || default
end
def from_address( default = nil )
if a = from_addr(nil)
a.spec
else
default
end
end
alias from_address= from_addrs=
def from_phrase( default = nil )
if a = from_addr(nil)
a.phrase
else
default
end
end
alias msgid message_id
alias msgid= message_id=
alias each_dest each_destination
end
class Address
alias route routes
alias addr spec
def spec=( str )
@local, @domain = str.split(/@/,2).map {|s| s.split(/\./) }
end
alias addr= spec=
alias address= spec=
end
class MhMailbox
alias new_mail new_port
alias each_mail each_port
alias each_newmail each_new_port
end
class UNIXMbox
alias new_mail new_port
alias each_mail each_port
alias each_newmail each_new_port
end
class Maildir
alias new_mail new_port
alias each_mail each_port
alias each_newmail each_new_port
end
extend TextUtils
class << self
alias msgid? message_id?
alias boundary new_boundary
alias msgid new_message_id
alias new_msgid new_message_id
end
def Mail.boundary
::TMail.new_boundary
end
def Mail.msgid
::TMail.new_message_id
end
end # module TMail
#:startdoc:

File diff suppressed because it is too large Load Diff

View File

@@ -1,416 +0,0 @@
#
# parser.y
#
# Copyright (c) 1998-2007 Minero Aoki
#
# This program is free software.
# You can distribute/modify this program under the terms of
# the GNU Lesser General Public License version 2.1.
#
class TMail::Parser
options no_result_var
rule
content : DATETIME datetime { val[1] }
| RECEIVED received { val[1] }
| MADDRESS addrs_TOP { val[1] }
| RETPATH retpath { val[1] }
| KEYWORDS keys { val[1] }
| ENCRYPTED enc { val[1] }
| MIMEVERSION version { val[1] }
| CTYPE ctype { val[1] }
| CENCODING cencode { val[1] }
| CDISPOSITION cdisp { val[1] }
| ADDRESS addr_TOP { val[1] }
| MAILBOX mbox { val[1] }
datetime : day DIGIT ATOM DIGIT hour zone
# 0 1 2 3 4 5
# date month year
{
t = Time.gm(val[3].to_i, val[2], val[1].to_i, 0, 0, 0)
(t + val[4] - val[5]).localtime
}
day : /* none */
| ATOM ','
hour : DIGIT ':' DIGIT
{
(val[0].to_i * 60 * 60) +
(val[2].to_i * 60)
}
| DIGIT ':' DIGIT ':' DIGIT
{
(val[0].to_i * 60 * 60) +
(val[2].to_i * 60) +
(val[4].to_i)
}
zone : ATOM
{
timezone_string_to_unixtime(val[0])
}
received : from by via with id for received_datetime
{
val
}
from : /* none */
| FROM received_domain
{
val[1]
}
by : /* none */
| BY received_domain
{
val[1]
}
received_domain
: domain
{
join_domain(val[0])
}
| domain '@' domain
{
join_domain(val[2])
}
| domain DOMLIT
{
join_domain(val[0])
}
via : /* none */
| VIA ATOM
{
val[1]
}
with : /* none */
{
[]
}
| with WITH ATOM
{
val[0].push val[2]
val[0]
}
id : /* none */
| ID msgid
{
val[1]
}
| ID ATOM
{
val[1]
}
for : /* none */
| FOR received_addrspec
{
val[1]
}
received_addrspec
: routeaddr
{
val[0].spec
}
| spec
{
val[0].spec
}
received_datetime
: /* none */
| ';' datetime
{
val[1]
}
addrs_TOP : addrs
| group_bare
| addrs commas group_bare
addr_TOP : mbox
| group
| group_bare
retpath : addrs_TOP
| '<' '>' { [ Address.new(nil, nil) ] }
addrs : addr
{
val
}
| addrs commas addr
{
val[0].push val[2]
val[0]
}
addr : mbox
| group
mboxes : mbox
{
val
}
| mboxes commas mbox
{
val[0].push val[2]
val[0]
}
mbox : spec
| routeaddr
| addr_phrase routeaddr
{
val[1].phrase = Decoder.decode(val[0])
val[1]
}
group : group_bare ';'
group_bare: addr_phrase ':' mboxes
{
AddressGroup.new(val[0], val[2])
}
| addr_phrase ':' { AddressGroup.new(val[0], []) }
addr_phrase
: local_head { val[0].join('.') }
| addr_phrase local_head { val[0] << ' ' << val[1].join('.') }
routeaddr : '<' routes spec '>'
{
val[2].routes.replace val[1]
val[2]
}
| '<' spec '>'
{
val[1]
}
routes : at_domains ':'
at_domains: '@' domain { [ val[1].join('.') ] }
| at_domains ',' '@' domain { val[0].push val[3].join('.'); val[0] }
spec : local '@' domain { Address.new( val[0], val[2] ) }
| local { Address.new( val[0], nil ) }
local: local_head
| local_head '.' { val[0].push ''; val[0] }
local_head: word
{ val }
| local_head dots word
{
val[1].times do
val[0].push ''
end
val[0].push val[2]
val[0]
}
domain : domword
{ val }
| domain dots domword
{
val[1].times do
val[0].push ''
end
val[0].push val[2]
val[0]
}
dots : '.' { 0 }
| dots '.' { val[0] + 1 }
word : atom
| QUOTED
| DIGIT
domword : atom
| DOMLIT
| DIGIT
commas : ','
| commas ','
msgid : '<' spec '>'
{
val[1] = val[1].spec
val.join('')
}
keys : phrase { val }
| keys ',' phrase { val[0].push val[2]; val[0] }
phrase : word
| phrase word { val[0] << ' ' << val[1] }
enc : word
{
val.push nil
val
}
| word word
{
val
}
version : DIGIT '.' DIGIT
{
[ val[0].to_i, val[2].to_i ]
}
ctype : TOKEN '/' TOKEN params opt_semicolon
{
[ val[0].downcase, val[2].downcase, decode_params(val[3]) ]
}
| TOKEN params opt_semicolon
{
[ val[0].downcase, nil, decode_params(val[1]) ]
}
params : /* none */
{
{}
}
| params ';' TOKEN '=' QUOTED
{
val[0][ val[2].downcase ] = ('"' + val[4].to_s + '"')
val[0]
}
| params ';' TOKEN '=' TOKEN
{
val[0][ val[2].downcase ] = val[4]
val[0]
}
cencode : TOKEN
{
val[0].downcase
}
cdisp : TOKEN params opt_semicolon
{
[ val[0].downcase, decode_params(val[1]) ]
}
opt_semicolon
:
| ';'
atom : ATOM
| FROM
| BY
| VIA
| WITH
| ID
| FOR
end
---- header
#
# parser.rb
#
# Copyright (c) 1998-2007 Minero Aoki
#
# This program is free software.
# You can distribute/modify this program under the terms of
# the GNU Lesser General Public License version 2.1.
#
require 'tmail/scanner'
require 'tmail/utils'
---- inner
include TextUtils
def self.parse( ident, str, cmt = nil )
str = special_quote_address(str) if ident.to_s =~ /M?ADDRESS/
new.parse(ident, str, cmt)
end
def self.special_quote_address(str) #:nodoc:
# Takes a string which is an address and adds quotation marks to special
# edge case methods that the RACC parser can not handle.
#
# Right now just handles two edge cases:
#
# Full stop as the last character of the display name:
# Mikel L. <mikel@me.com>
# Returns:
# "Mikel L." <mikel@me.com>
#
# Unquoted @ symbol in the display name:
# mikel@me.com <mikel@me.com>
# Returns:
# "mikel@me.com" <mikel@me.com>
#
# Any other address not matching these patterns just gets returned as is.
case
# This handles the missing "" in an older version of Apple Mail.app
# around the display name when the display name contains a '@'
# like 'mikel@me.com <mikel@me.com>'
# Just quotes it to: '"mikel@me.com" <mikel@me.com>'
when str =~ /\A([^"].+@.+[^"])\s(<.*?>)\Z/
return "\"#{$1}\" #{$2}"
# This handles cases where 'Mikel A. <mikel@me.com>' which is a trailing
# full stop before the address section. Just quotes it to
# '"Mikel A." <mikel@me.com>'
when str =~ /\A(.*?\.)\s(<.*?>)\s*\Z/
return "\"#{$1}\" #{$2}"
else
str
end
end
MAILP_DEBUG = false
def initialize
self.debug = MAILP_DEBUG
end
def debug=( flag )
@yydebug = flag && Racc_debug_parser
@scanner_debug = flag
end
def debug
@yydebug
end
def parse( ident, str, comments = nil )
@scanner = Scanner.new(str, ident, comments)
@scanner.debug = @scanner_debug
@first = [ident, ident]
result = yyparse(self, :parse_in)
comments.map! {|c| to_kcode(c) } if comments
result
end
private
def parse_in( &block )
yield @first
@scanner.scan(&block)
end
def on_error( t, val, vstack )
raise TMail::SyntaxError, "parse error on token #{racc_token2str t}"
end

View File

@@ -1,379 +0,0 @@
=begin rdoc
= Port class
=end
#--
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Note: Originally licensed under LGPL v2+. Using MIT license for Rails
# with permission of Minero Aoki.
#++
require 'tmail/stringio'
module TMail
class Port
def reproducible?
false
end
end
###
### FilePort
###
class FilePort < Port
def initialize( fname )
@filename = File.expand_path(fname)
super()
end
attr_reader :filename
alias ident filename
def ==( other )
other.respond_to?(:filename) and @filename == other.filename
end
alias eql? ==
def hash
@filename.hash
end
def inspect
"#<#{self.class}:#{@filename}>"
end
def reproducible?
true
end
def size
File.size @filename
end
def ropen( &block )
File.open(@filename, &block)
end
def wopen( &block )
File.open(@filename, 'w', &block)
end
def aopen( &block )
File.open(@filename, 'a', &block)
end
def read_all
ropen {|f|
return f.read
}
end
def remove
File.unlink @filename
end
def move_to( port )
begin
File.link @filename, port.filename
rescue Errno::EXDEV
copy_to port
end
File.unlink @filename
end
alias mv move_to
def copy_to( port )
if FilePort === port
copy_file @filename, port.filename
else
File.open(@filename) {|r|
port.wopen {|w|
while s = r.sysread(4096)
w.write << s
end
} }
end
end
alias cp copy_to
private
# from fileutils.rb
def copy_file( src, dest )
st = r = w = nil
File.open(src, 'rb') {|r|
File.open(dest, 'wb') {|w|
st = r.stat
begin
while true
w.write r.sysread(st.blksize)
end
rescue EOFError
end
} }
end
end
module MailFlags
def seen=( b )
set_status 'S', b
end
def seen?
get_status 'S'
end
def replied=( b )
set_status 'R', b
end
def replied?
get_status 'R'
end
def flagged=( b )
set_status 'F', b
end
def flagged?
get_status 'F'
end
private
def procinfostr( str, tag, true_p )
a = str.upcase.split(//)
a.push true_p ? tag : nil
a.delete tag unless true_p
a.compact.sort.join('').squeeze
end
end
class MhPort < FilePort
include MailFlags
private
def set_status( tag, flag )
begin
tmpfile = @filename + '.tmailtmp.' + $$.to_s
File.open(tmpfile, 'w') {|f|
write_status f, tag, flag
}
File.unlink @filename
File.link tmpfile, @filename
ensure
File.unlink tmpfile
end
end
def write_status( f, tag, flag )
stat = ''
File.open(@filename) {|r|
while line = r.gets
if line.strip.empty?
break
elsif m = /\AX-TMail-Status:/i.match(line)
stat = m.post_match.strip
else
f.print line
end
end
s = procinfostr(stat, tag, flag)
f.puts 'X-TMail-Status: ' + s unless s.empty?
f.puts
while s = r.read(2048)
f.write s
end
}
end
def get_status( tag )
File.foreach(@filename) {|line|
return false if line.strip.empty?
if m = /\AX-TMail-Status:/i.match(line)
return m.post_match.strip.include?(tag[0])
end
}
false
end
end
class MaildirPort < FilePort
def move_to_new
new = replace_dir(@filename, 'new')
File.rename @filename, new
@filename = new
end
def move_to_cur
new = replace_dir(@filename, 'cur')
File.rename @filename, new
@filename = new
end
def replace_dir( path, dir )
"#{File.dirname File.dirname(path)}/#{dir}/#{File.basename path}"
end
private :replace_dir
include MailFlags
private
MAIL_FILE = /\A(\d+\.[\d_]+\.[^:]+)(?:\:(\d),(\w+)?)?\z/
def set_status( tag, flag )
if m = MAIL_FILE.match(File.basename(@filename))
s, uniq, type, info, = m.to_a
return if type and type != '2' # do not change anything
newname = File.dirname(@filename) + '/' +
uniq + ':2,' + procinfostr(info.to_s, tag, flag)
else
newname = @filename + ':2,' + tag
end
File.link @filename, newname
File.unlink @filename
@filename = newname
end
def get_status( tag )
m = MAIL_FILE.match(File.basename(@filename)) or return false
m[2] == '2' and m[3].to_s.include?(tag[0])
end
end
###
### StringPort
###
class StringPort < Port
def initialize( str = '' )
@buffer = str
super()
end
def string
@buffer
end
def to_s
@buffer.dup
end
alias read_all to_s
def size
@buffer.size
end
def ==( other )
StringPort === other and @buffer.equal? other.string
end
alias eql? ==
def hash
@buffer.object_id.hash
end
def inspect
"#<#{self.class}:id=#{sprintf '0x%x', @buffer.object_id}>"
end
def reproducible?
true
end
def ropen( &block )
@buffer or raise Errno::ENOENT, "#{inspect} is already removed"
StringInput.open(@buffer, &block)
end
def wopen( &block )
@buffer = ''
StringOutput.new(@buffer, &block)
end
def aopen( &block )
@buffer ||= ''
StringOutput.new(@buffer, &block)
end
def remove
@buffer = nil
end
alias rm remove
def copy_to( port )
port.wopen {|f|
f.write @buffer
}
end
alias cp copy_to
def move_to( port )
if StringPort === port
str = @buffer
port.instance_eval { @buffer = str }
else
copy_to port
end
remove
end
end
end # module TMail

View File

@@ -1,164 +0,0 @@
=begin rdoc
= Quoting methods
=end
module TMail
class Mail
def subject(to_charset = 'utf-8')
Unquoter.unquote_and_convert_to(quoted_subject, to_charset)
end
def unquoted_body(to_charset = 'utf-8')
from_charset = charset
case (content_transfer_encoding || "7bit").downcase
when "quoted-printable"
# the default charset is set to iso-8859-1 instead of 'us-ascii'.
# This is needed as many mailer do not set the charset but send in ISO. This is only used if no charset is set.
if !from_charset.blank? && from_charset.downcase == 'us-ascii'
from_charset = 'iso-8859-1'
end
Unquoter.unquote_quoted_printable_and_convert_to(quoted_body,
to_charset, from_charset, true)
when "base64"
Unquoter.unquote_base64_and_convert_to(quoted_body, to_charset,
from_charset)
when "7bit", "8bit"
Unquoter.convert_to(quoted_body, to_charset, from_charset)
when "binary"
quoted_body
else
quoted_body
end
end
def body(to_charset = 'utf-8', &block)
attachment_presenter = block || Proc.new { |file_name| "Attachment: #{file_name}\n" }
if multipart?
parts.collect { |part|
header = part["content-type"]
if part.multipart?
part.body(to_charset, &attachment_presenter)
elsif header.nil?
""
elsif !attachment?(part)
part.unquoted_body(to_charset)
else
attachment_presenter.call(header["name"] || "(unnamed)")
end
}.join
else
unquoted_body(to_charset)
end
end
end
class Attachment
include TextUtils
def quoted?(string)
!!((string =~ /.+'\w\w'.+/) || (string =~ /=\?.+\?.\?.+\?=/))
end
# Only unquote if quoted
def original_filename(to_charset = 'utf-8')
if quoted?(quoted_filename)
Unquoter.unquote_and_convert_to(quoted_filename, to_charset).chomp
else
quoted_filename
end
end
end
class Unquoter
class << self
def unquote_and_convert_to(text, to_charset, from_charset = "iso-8859-1", preserve_underscores=false)
return "" if text.nil?
text.gsub!(/\?=(\s*)=\?/, '?==?') # Remove whitespaces between 'encoded-word's
text.gsub(/(.*?)(?:(?:=\?(.*?)\?(.)\?(.*?)\?=)|$)/) do
before = $1
from_charset = $2
quoting_method = $3
text = $4
before = convert_to(before, to_charset, from_charset) if before.length > 0
before + case quoting_method
when "q", "Q" then
unquote_quoted_printable_and_convert_to(text, to_charset, from_charset, preserve_underscores)
when "b", "B" then
unquote_base64_and_convert_to(text, to_charset, from_charset)
when nil then
# will be nil at the end of the string, due to the nature of
# the regex used.
""
else
raise "unknown quoting method #{quoting_method.inspect}"
end
end
end
def convert_to_with_fallback_on_iso_8859_1(text, to, from)
return text if to == 'utf-8' and text.isutf8
if from.blank? and !text.is_binary_data?
from = CharDet.detect(text)['encoding']
# Chardet ususally detects iso-8859-2 (aka windows-1250), but the text is
# iso-8859-1 (aka windows-1252 and Latin1). http://en.wikipedia.org/wiki/ISO/IEC_8859-2
# This can cause unwanted characters, like ŕ instead of à.
# (I know, could be a very bad decision...)
from = 'iso-8859-1' if from =~ /iso-8859-2/i
end
begin
convert_to_without_fallback_on_iso_8859_1(text, to, from)
rescue Iconv::InvalidCharacter
unless from == 'iso-8859-1'
from = 'iso-8859-1'
retry
end
end
end
def unquote_quoted_printable_and_convert_to(text, to, from, preserve_underscores=false)
text = text.gsub(/_/, " ") unless preserve_underscores
text = text.gsub(/\r\n|\r/, "\n") # normalize newlines
convert_to(text.unpack("M*").first, to, from)
end
def unquote_base64_and_convert_to(text, to, from)
convert_to(Base64.decode(text), to, from)
end
begin
require 'iconv'
def convert_to(text, to, from)
return text unless to && from
text ? Iconv.iconv(to, from, text).first : ""
rescue Iconv::IllegalSequence, Iconv::InvalidEncoding, Errno::EINVAL
# the 'from' parameter specifies a charset other than what the text
# actually is...not much we can do in this case but just return the
# unconverted text.
#
# Ditto if either parameter represents an unknown charset, like
# X-UNKNOWN.
text
end
rescue LoadError
# Not providing quoting support
def convert_to(text, to, from)
warn "Action Mailer: iconv not loaded; ignoring conversion from #{from} to #{to} (#{__FILE__}:#{__LINE__})"
text
end
end
alias_method :convert_to_without_fallback_on_iso_8859_1, :convert_to
alias_method :convert_to, :convert_to_with_fallback_on_iso_8859_1
end
end
end

View File

@@ -1,58 +0,0 @@
#:stopdoc:
require 'rbconfig'
# Attempts to require anative extension.
# Falls back to pure-ruby version, if it fails.
#
# This uses Config::CONFIG['arch'] from rbconfig.
def require_arch(fname)
arch = Config::CONFIG['arch']
begin
path = File.join("tmail", arch, fname)
require path
rescue LoadError => e
# try pre-built Windows binaries
if arch =~ /mswin/
require File.join("tmail", 'mswin32', fname)
else
raise e
end
end
end
# def require_arch(fname)
# dext = Config::CONFIG['DLEXT']
# begin
# if File.extname(fname) == dext
# path = fname
# else
# path = File.join("tmail","#{fname}.#{dext}")
# end
# require path
# rescue LoadError => e
# begin
# arch = Config::CONFIG['arch']
# path = File.join("tmail", arch, "#{fname}.#{dext}")
# require path
# rescue LoadError
# case path
# when /i686/
# path.sub!('i686', 'i586')
# when /i586/
# path.sub!('i586', 'i486')
# when /i486/
# path.sub!('i486', 'i386')
# else
# begin
# require fname + '.rb'
# rescue LoadError
# raise e
# end
# end
# retry
# end
# end
# end
#:startdoc:

View File

@@ -1,49 +0,0 @@
=begin rdoc
= Scanner for TMail
=end
#--
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Note: Originally licensed under LGPL v2+. Using MIT license for Rails
# with permission of Minero Aoki.
#++
#:stopdoc:
#require 'tmail/require_arch'
require 'tmail/utils'
require 'tmail/config'
module TMail
# NOTE: It woiuld be nice if these two libs could boith be called "tmailscanner", and
# the native extension would have precedence. However RubyGems boffs that up b/c
# it does not gaurantee load_path order.
begin
raise LoadError, 'Turned off native extentions by user choice' if ENV['NORUBYEXT']
require('tmail/tmailscanner') # c extension
Scanner = TMailScanner
rescue LoadError
require 'tmail/scanner_r'
Scanner = TMailScanner
end
end
#:stopdoc:

View File

@@ -1,262 +0,0 @@
# encoding: us-ascii
# scanner_r.rb
#
#--
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Note: Originally licensed under LGPL v2+. Using MIT license for Rails
# with permission of Minero Aoki.
#++
#:stopdoc:
require 'tmail/config'
module TMail
class TMailScanner
Version = '1.2.3'
Version.freeze
MIME_HEADERS = {
:CTYPE => true,
:CENCODING => true,
:CDISPOSITION => true
}
alnum = 'a-zA-Z0-9'
atomsyms = %q[ _#!$%&`'*+-{|}~^/=? ].strip
tokensyms = %q[ _#!$%&`'*+-{|}~^@. ].strip
atomchars = alnum + Regexp.quote(atomsyms)
tokenchars = alnum + Regexp.quote(tokensyms)
iso2022str = '\e(?!\(B)..(?:[^\e]+|\e(?!\(B)..)*\e\(B'
eucstr = "(?:[\xa1-\xfe][\xa1-\xfe])+"
sjisstr = "(?:[\x81-\x9f\xe0-\xef][\x40-\x7e\x80-\xfc])+"
utf8str = "(?:[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf][\x80-\xbf])+"
quoted_with_iso2022 = /\A(?:[^\\\e"]+|#{iso2022str})+/n
domlit_with_iso2022 = /\A(?:[^\\\e\]]+|#{iso2022str})+/n
comment_with_iso2022 = /\A(?:[^\\\e()]+|#{iso2022str})+/n
quoted_without_iso2022 = /\A[^\\"]+/n
domlit_without_iso2022 = /\A[^\\\]]+/n
comment_without_iso2022 = /\A[^\\()]+/n
PATTERN_TABLE = {}
PATTERN_TABLE['EUC'] =
[
/\A(?:[#{atomchars}]+|#{iso2022str}|#{eucstr})+/n,
/\A(?:[#{tokenchars}]+|#{iso2022str}|#{eucstr})+/n,
quoted_with_iso2022,
domlit_with_iso2022,
comment_with_iso2022
]
PATTERN_TABLE['SJIS'] =
[
/\A(?:[#{atomchars}]+|#{iso2022str}|#{sjisstr})+/n,
/\A(?:[#{tokenchars}]+|#{iso2022str}|#{sjisstr})+/n,
quoted_with_iso2022,
domlit_with_iso2022,
comment_with_iso2022
]
PATTERN_TABLE['UTF8'] =
[
/\A(?:[#{atomchars}]+|#{utf8str})+/n,
/\A(?:[#{tokenchars}]+|#{utf8str})+/n,
quoted_without_iso2022,
domlit_without_iso2022,
comment_without_iso2022
]
PATTERN_TABLE['NONE'] =
[
/\A[#{atomchars}]+/n,
/\A[#{tokenchars}]+/n,
quoted_without_iso2022,
domlit_without_iso2022,
comment_without_iso2022
]
def initialize( str, scantype, comments )
init_scanner str
@comments = comments || []
@debug = false
# fix scanner mode
@received = (scantype == :RECEIVED)
@is_mime_header = MIME_HEADERS[scantype]
atom, token, @quoted_re, @domlit_re, @comment_re = PATTERN_TABLE[TMail.KCODE]
@word_re = (MIME_HEADERS[scantype] ? token : atom)
end
attr_accessor :debug
def scan( &block )
if @debug
scan_main do |arr|
s, v = arr
printf "%7d %-10s %s\n",
rest_size(),
s.respond_to?(:id2name) ? s.id2name : s.inspect,
v.inspect
yield arr
end
else
scan_main(&block)
end
end
private
RECV_TOKEN = {
'from' => :FROM,
'by' => :BY,
'via' => :VIA,
'with' => :WITH,
'id' => :ID,
'for' => :FOR
}
def scan_main
until eof?
if skip(/\A[\n\r\t ]+/n) # LWSP
break if eof?
end
if s = readstr(@word_re)
if @is_mime_header
yield [:TOKEN, s]
else
# atom
if /\A\d+\z/ === s
yield [:DIGIT, s]
elsif @received
yield [RECV_TOKEN[s.downcase] || :ATOM, s]
else
yield [:ATOM, s]
end
end
elsif skip(/\A"/)
yield [:QUOTED, scan_quoted_word()]
elsif skip(/\A\[/)
yield [:DOMLIT, scan_domain_literal()]
elsif skip(/\A\(/)
@comments.push scan_comment()
else
c = readchar()
yield [c, c]
end
end
yield [false, '$']
end
def scan_quoted_word
scan_qstr(@quoted_re, /\A"/, 'quoted-word')
end
def scan_domain_literal
'[' + scan_qstr(@domlit_re, /\A\]/, 'domain-literal') + ']'
end
def scan_qstr( pattern, terminal, type )
result = ''
until eof?
if s = readstr(pattern) then result << s
elsif skip(terminal) then return result
elsif skip(/\A\\/) then result << readchar()
else
raise "TMail FATAL: not match in #{type}"
end
end
scan_error! "found unterminated #{type}"
end
def scan_comment
result = ''
nest = 1
content = @comment_re
until eof?
if s = readstr(content) then result << s
elsif skip(/\A\)/) then nest -= 1
return result if nest == 0
result << ')'
elsif skip(/\A\(/) then nest += 1
result << '('
elsif skip(/\A\\/) then result << readchar()
else
raise 'TMail FATAL: not match in comment'
end
end
scan_error! 'found unterminated comment'
end
# string scanner
def init_scanner( str )
@src = str
end
def eof?
@src.empty?
end
def rest_size
@src.size
end
def readstr( re )
if m = re.match(@src)
@src = m.post_match
m[0]
else
nil
end
end
def readchar
readstr(/\A./)
end
def skip( re )
if m = re.match(@src)
@src = m.post_match
true
else
false
end
end
def scan_error!( msg )
raise SyntaxError, msg
end
end
end # module TMail
#:startdoc:

View File

@@ -1,280 +0,0 @@
# encoding: utf-8
=begin rdoc
= String handling class
=end
#--
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Note: Originally licensed under LGPL v2+. Using MIT license for Rails
# with permission of Minero Aoki.
#++
class StringInput#:nodoc:
include Enumerable
class << self
def new( str )
if block_given?
begin
f = super
yield f
ensure
f.close if f
end
else
super
end
end
alias open new
end
def initialize( str )
@src = str
@pos = 0
@closed = false
@lineno = 0
end
attr_reader :lineno
def string
@src
end
def inspect
"#<#{self.class}:#{@closed ? 'closed' : 'open'},src=#{@src[0,30].inspect}>"
end
def close
stream_check!
@pos = nil
@closed = true
end
def closed?
@closed
end
def pos
stream_check!
[@pos, @src.size].min
end
alias tell pos
def seek( offset, whence = IO::SEEK_SET )
stream_check!
case whence
when IO::SEEK_SET
@pos = offset
when IO::SEEK_CUR
@pos += offset
when IO::SEEK_END
@pos = @src.size - offset
else
raise ArgumentError, "unknown seek flag: #{whence}"
end
@pos = 0 if @pos < 0
@pos = [@pos, @src.size + 1].min
offset
end
def rewind
stream_check!
@pos = 0
end
def eof?
stream_check!
@pos > @src.size
end
def each( &block )
stream_check!
begin
@src.each(&block)
ensure
@pos = 0
end
end
def gets
stream_check!
if idx = @src.index(?\n, @pos)
idx += 1 # "\n".size
line = @src[ @pos ... idx ]
@pos = idx
@pos += 1 if @pos == @src.size
else
line = @src[ @pos .. -1 ]
@pos = @src.size + 1
end
@lineno += 1
line
end
def getc
stream_check!
ch = @src[@pos]
@pos += 1
@pos += 1 if @pos == @src.size
ch
end
def read( len = nil )
stream_check!
return read_all unless len
str = @src[@pos, len]
@pos += len
@pos += 1 if @pos == @src.size
str
end
alias sysread read
def read_all
stream_check!
return nil if eof?
rest = @src[@pos ... @src.size]
@pos = @src.size + 1
rest
end
def stream_check!
@closed and raise IOError, 'closed stream'
end
end
class StringOutput#:nodoc:
class << self
def new( str = '' )
if block_given?
begin
f = super
yield f
ensure
f.close if f
end
else
super
end
end
alias open new
end
def initialize( str = '' )
@dest = str
@closed = false
end
def close
@closed = true
end
def closed?
@closed
end
def string
@dest
end
alias value string
alias to_str string
def size
@dest.size
end
alias pos size
def inspect
"#<#{self.class}:#{@dest ? 'open' : 'closed'},#{object_id}>"
end
def print( *args )
stream_check!
raise ArgumentError, 'wrong # of argument (0 for >1)' if args.empty?
args.each do |s|
raise ArgumentError, 'nil not allowed' if s.nil?
@dest << s.to_s
end
nil
end
def puts( *args )
stream_check!
args.each do |str|
@dest << (s = str.to_s)
@dest << "\n" unless s[-1] == ?\n
end
@dest << "\n" if args.empty?
nil
end
def putc( ch )
stream_check!
@dest << ch.chr
nil
end
def printf( *args )
stream_check!
@dest << sprintf(*args)
nil
end
def write( str )
stream_check!
s = str.to_s
@dest << s
s.size
end
alias syswrite write
def <<( str )
stream_check!
@dest << str.to_s
self
end
private
def stream_check!
@closed and raise IOError, 'closed stream'
end
end

View File

@@ -1,362 +0,0 @@
# encoding: us-ascii
#--
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Note: Originally licensed under LGPL v2+. Using MIT license for Rails
# with permission of Minero Aoki.
#++
# = TMail - The EMail Swiss Army Knife for Ruby
#
# The TMail library provides you with a very complete way to handle and manipulate EMails
# from within your Ruby programs.
#
# Used as the backbone for email handling by the Ruby on Rails and Nitro web frameworks as
# well as a bunch of other Ruby apps including the Ruby-Talk mailing list to newsgroup email
# gateway, it is a proven and reliable email handler that won't let you down.
#
# Originally created by Minero Aoki, TMail has been recently picked up by Mikel Lindsaar and
# is being actively maintained. Numerous backlogged bug fixes have been applied as well as
# Ruby 1.9 compatibility and a swath of documentation to boot.
#
# TMail allows you to treat an email totally as an object and allow you to get on with your
# own programming without having to worry about crafting the perfect email address validation
# parser, or assembling an email from all it's component parts.
#
# TMail handles the most complex part of the email - the header. It generates and parses
# headers and provides you with instant access to their innards through simple and logically
# named accessor and setter methods.
#
# TMail also provides a wrapper to Net/SMTP as well as Unix Mailbox handling methods to
# directly read emails from your unix mailbox, parse them and use them.
#
# Following is the comprehensive list of methods to access TMail::Mail objects. You can also
# check out TMail::Mail, TMail::Address and TMail::Headers for other lists.
module TMail
# Provides an exception to throw on errors in Syntax within TMail's parsers
class SyntaxError < StandardError; end
# Provides a new email boundary to separate parts of the email. This is a random
# string based off the current time, so should be fairly unique.
#
# For Example:
#
# TMail.new_boundary
# #=> "mimepart_47bf656968207_25a8fbb80114"
# TMail.new_boundary
# #=> "mimepart_47bf66051de4_25a8fbb80240"
def TMail.new_boundary
'mimepart_' + random_tag
end
# Provides a new email message ID. You can use this to generate unique email message
# id's for your email so you can track them.
#
# Optionally takes a fully qualified domain name (default to the current hostname
# returned by Socket.gethostname) that will be appended to the message ID.
#
# For Example:
#
# email.message_id = TMail.new_message_id
# #=> "<47bf66845380e_25a8fbb80332@baci.local.tmail>"
# email.to_s
# #=> "Message-Id: <47bf668b633f1_25a8fbb80475@baci.local.tmail>\n\n"
# email.message_id = TMail.new_message_id("lindsaar.net")
# #=> "<47bf668b633f1_25a8fbb80475@lindsaar.net.tmail>"
# email.to_s
# #=> "Message-Id: <47bf668b633f1_25a8fbb80475@lindsaar.net.tmail>\n\n"
def TMail.new_message_id( fqdn = nil )
fqdn ||= ::Socket.gethostname
"<#{random_tag()}@#{fqdn}.tmail>"
end
#:stopdoc:
def TMail.random_tag #:nodoc:
@uniq += 1
t = Time.now
sprintf('%x%x_%x%x%d%x',
t.to_i, t.tv_usec,
$$, Thread.current.object_id, @uniq, rand(255))
end
private_class_method :random_tag
@uniq = 0
#:startdoc:
# Text Utils provides a namespace to define TOKENs, ATOMs, PHRASEs and CONTROL characters that
# are OK per RFC 2822.
#
# It also provides methods you can call to determine if a string is safe
module TextUtils
aspecial = %Q|()<>[]:;.\\,"|
tspecial = %Q|()<>[];:\\,"/?=|
lwsp = %Q| \t\r\n|
control = %Q|\x00-\x1f\x7f-\xff|
CONTROL_CHAR = /[#{control}]/n
ATOM_UNSAFE = /[#{Regexp.quote aspecial}#{control}#{lwsp}]/n
PHRASE_UNSAFE = /[#{Regexp.quote aspecial}#{control}]/n
TOKEN_UNSAFE = /[#{Regexp.quote tspecial}#{control}#{lwsp}]/n
# Returns true if the string supplied is free from characters not allowed as an ATOM
def atom_safe?( str )
not ATOM_UNSAFE === str
end
# If the string supplied has ATOM unsafe characters in it, will return the string quoted
# in double quotes, otherwise returns the string unmodified
def quote_atom( str )
(ATOM_UNSAFE === str) ? dquote(str) : str
end
# If the string supplied has PHRASE unsafe characters in it, will return the string quoted
# in double quotes, otherwise returns the string unmodified
def quote_phrase( str )
(PHRASE_UNSAFE === str) ? dquote(str) : str
end
# Returns true if the string supplied is free from characters not allowed as a TOKEN
def token_safe?( str )
not TOKEN_UNSAFE === str
end
# If the string supplied has TOKEN unsafe characters in it, will return the string quoted
# in double quotes, otherwise returns the string unmodified
def quote_token( str )
(TOKEN_UNSAFE === str) ? dquote(str) : str
end
# Wraps supplied string in double quotes unless it is already wrapped
# Returns double quoted string
def dquote( str ) #:nodoc:
unless str =~ /^".*?"$/
'"' + str.gsub(/["\\]/n) {|s| '\\' + s } + '"'
else
str
end
end
private :dquote
# Unwraps supplied string from inside double quotes
# Returns unquoted string
def unquote( str )
str =~ /^"(.*?)"$/m ? $1 : str
end
# Provides a method to join a domain name by it's parts and also makes it
# ATOM safe by quoting it as needed
def join_domain( arr )
arr.map {|i|
if /\A\[.*\]\z/ === i
i
else
quote_atom(i)
end
}.join('.')
end
#:stopdoc:
ZONESTR_TABLE = {
'jst' => 9 * 60,
'eet' => 2 * 60,
'bst' => 1 * 60,
'met' => 1 * 60,
'gmt' => 0,
'utc' => 0,
'ut' => 0,
'nst' => -(3 * 60 + 30),
'ast' => -4 * 60,
'edt' => -4 * 60,
'est' => -5 * 60,
'cdt' => -5 * 60,
'cst' => -6 * 60,
'mdt' => -6 * 60,
'mst' => -7 * 60,
'pdt' => -7 * 60,
'pst' => -8 * 60,
'a' => -1 * 60,
'b' => -2 * 60,
'c' => -3 * 60,
'd' => -4 * 60,
'e' => -5 * 60,
'f' => -6 * 60,
'g' => -7 * 60,
'h' => -8 * 60,
'i' => -9 * 60,
# j not use
'k' => -10 * 60,
'l' => -11 * 60,
'm' => -12 * 60,
'n' => 1 * 60,
'o' => 2 * 60,
'p' => 3 * 60,
'q' => 4 * 60,
'r' => 5 * 60,
's' => 6 * 60,
't' => 7 * 60,
'u' => 8 * 60,
'v' => 9 * 60,
'w' => 10 * 60,
'x' => 11 * 60,
'y' => 12 * 60,
'z' => 0 * 60
}
#:startdoc:
# Takes a time zone string from an EMail and converts it to Unix Time (seconds)
def timezone_string_to_unixtime( str )
if m = /([\+\-])(\d\d?)(\d\d)/.match(str)
sec = (m[2].to_i * 60 + m[3].to_i) * 60
m[1] == '-' ? -sec : sec
else
min = ZONESTR_TABLE[str.downcase] or
raise SyntaxError, "wrong timezone format '#{str}'"
min * 60
end
end
#:stopdoc:
WDAY = %w( Sun Mon Tue Wed Thu Fri Sat TMailBUG )
MONTH = %w( TMailBUG Jan Feb Mar Apr May Jun
Jul Aug Sep Oct Nov Dec TMailBUG )
def time2str( tm )
# [ruby-list:7928]
gmt = Time.at(tm.to_i)
gmt.gmtime
offset = tm.to_i - Time.local(*gmt.to_a[0,6].reverse).to_i
# DO NOT USE strftime: setlocale() breaks it
sprintf '%s, %s %s %d %02d:%02d:%02d %+.2d%.2d',
WDAY[tm.wday], tm.mday, MONTH[tm.month],
tm.year, tm.hour, tm.min, tm.sec,
*(offset / 60).divmod(60)
end
MESSAGE_ID = /<[^\@>]+\@[^>]+>/
def message_id?( str )
MESSAGE_ID === str
end
MIME_ENCODED = /=\?[^\s?=]+\?[QB]\?[^\s?=]+\?=/i
def mime_encoded?( str )
MIME_ENCODED === str
end
def decode_params( hash )
new = Hash.new
encoded = nil
hash.each do |key, value|
if m = /\*(?:(\d+)\*)?\z/.match(key)
((encoded ||= {})[m.pre_match] ||= [])[(m[1] || 0).to_i] = value
else
new[key] = to_kcode(value)
end
end
if encoded
encoded.each do |key, strings|
new[key] = decode_RFC2231(strings.join(''))
end
end
new
end
NKF_FLAGS = {
'EUC' => '-e -m',
'SJIS' => '-s -m'
}
def to_kcode( str )
flag = NKF_FLAGS[TMail.KCODE] or return str
NKF.nkf(flag, str)
end
RFC2231_ENCODED = /\A(?:iso-2022-jp|euc-jp|shift_jis|us-ascii)?'[a-z]*'/in
def decode_RFC2231( str )
m = RFC2231_ENCODED.match(str) or return str
begin
to_kcode(m.post_match.gsub(/%[\da-f]{2}/in) {|s| s[1,2].hex.chr })
rescue
m.post_match.gsub(/%[\da-f]{2}/in, "")
end
end
def quote_boundary
# Make sure the Content-Type boundary= parameter is quoted if it contains illegal characters
# (to ensure any special characters in the boundary text are escaped from the parser
# (such as = in MS Outlook's boundary text))
if @body =~ /^(.*)boundary=(.*)$/m
preamble = $1
remainder = $2
if remainder =~ /;/
remainder =~ /^(.*?)(;.*)$/m
boundary_text = $1
post = $2.chomp
else
boundary_text = remainder.chomp
end
if boundary_text =~ /[\/\?\=]/
boundary_text = "\"#{boundary_text}\"" unless boundary_text =~ /^".*?"$/
@body = "#{preamble}boundary=#{boundary_text}#{post}"
end
end
end
# AppleMail generates illegal character contained Content-Type parameter like:
# name==?ISO-2022-JP?B?...=?=
# so quote. (This case is only value fits in one line.)
def quote_unquoted_bencode
@body = @body.gsub(%r"(;\s+[-a-z]+=)(=\?.+?)([;\r\n ]|\z)"m) {
head, should_quoted, tail = $~.captures
# head: "; name="
# should_quoted: "=?ISO-2022-JP?B?...=?="
head << quote_token(should_quoted) << tail
}
end
# AppleMail generates name=filename attributes in the content type that
# contain spaces. Need to handle this so the TMail Parser can.
def quote_unquoted_name
@body = @body.gsub(%r|(name=)([\w\s.]+)(.*)|m) {
head, should_quoted, tail = $~.captures
# head: "; name="
# should_quoted: "=?ISO-2022-JP?B?...=?="
head << quote_token(should_quoted) << tail
}
end
#:startdoc:
end
end

View File

@@ -1,504 +0,0 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 2.1, February 1999
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
[This is the first released version of the Lesser GPL. It also counts
as the successor of the GNU Library Public License, version 2, hence
the version number 2.1.]
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.
This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it. You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.
When we speak of free software, we are referring to freedom of use,
not price. Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.
To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights. These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.
For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you. You must make sure that they, too, receive or can get the source
code. If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it. And you must show them these terms so they know their rights.
We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.
To protect each distributor, we want to make it very clear that
there is no warranty for the free library. Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.
Finally, software patents pose a constant threat to the existence of
any free program. We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder. Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.
Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License. This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License. We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.
When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library. The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom. The Lesser General
Public License permits more lax criteria for linking other code with
the library.
We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License. It also provides other free software developers Less
of an advantage over competing non-free programs. These disadvantages
are the reason we use the ordinary General Public License for many
libraries. However, the Lesser license provides advantages in certain
special circumstances.
For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard. To achieve this, non-free programs must be
allowed to use the library. A more frequent case is that a free
library does the same job as widely used non-free libraries. In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.
In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software. For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.
Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.
The precise terms and conditions for copying, distribution and
modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.
GNU LESSER GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".
A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.
The "Library", below, refers to any such software library or work
which has been distributed under these terms. A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language. (Hereinafter, translation is
included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for
making modifications to it. For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it). Whether that is true depends on what the Library does
and what the program that uses the Library does.
1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.
You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.
2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) The modified work must itself be a software library.
b) You must cause the files modified to carry prominent notices
stating that you changed the files and the date of any change.
c) You must cause the whole of the work to be licensed at no
charge to all third parties under the terms of this License.
d) If a facility in the modified Library refers to a function or a
table of data to be supplied by an application program that uses
the facility, other than as an argument passed when the facility
is invoked, then you must make a good faith effort to ensure that,
in the event an application does not supply such function or
table, the facility still operates, and performs whatever part of
its purpose remains meaningful.
(For example, a function in a library to compute square roots has
a purpose that is entirely well-defined independent of the
application. Therefore, Subsection 2d requires that any
application-supplied function or table used by this function must
be optional: if the application does not supply it, the square
root function must still compute square roots.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.
In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library. To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.
4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.
If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.
5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library". Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.
However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library". The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.
When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library. The
threshold for this to be true is not precisely defined by law.
If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work. (Executables containing this object code plus portions of the
Library will still fall under Section 6.)
Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License. You must supply a copy of this License. If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License. Also, you must do one
of these things:
a) Accompany the work with the complete corresponding
machine-readable source code for the Library including whatever
changes were used in the work (which must be distributed under
Sections 1 and 2 above); and, if the work is an executable linked
with the Library, with the complete machine-readable "work that
uses the Library", as object code and/or source code, so that the
user can modify the Library and then relink to produce a modified
executable containing the modified Library. (It is understood
that the user who changes the contents of definitions files in the
Library will not necessarily be able to recompile the application
to use the modified definitions.)
b) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (1) uses at run time a
copy of the library already present on the user's computer system,
rather than copying library functions into the executable, and (2)
will operate properly with a modified version of the library, if
the user installs one, as long as the modified version is
interface-compatible with the version that the work was made with.
c) Accompany the work with a written offer, valid for at
least three years, to give the same user the materials
specified in Subsection 6a, above, for a charge no more
than the cost of performing this distribution.
d) If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above
specified materials from the same place.
e) Verify that the user has already received a copy of these
materials or that you have already sent this user a copy.
For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it. However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.
It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:
a) Accompany the combined library with a copy of the same work
based on the Library, uncombined with any other library
facilities. This must be distributed under the terms of the
Sections above.
b) Give prominent notice with the combined library of the fact
that part of it is a work based on the Library, and explaining
where to find the accompanying uncombined form of the same work.
8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License. Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License. However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.
9. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Library or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.
10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.
11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all. For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded. In such case, this License incorporates the limitation as if
written in the body of this License.
13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this. Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.
NO WARRANTY
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change. You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).
To apply these terms, attach the following notices to the library. It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the library's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Also add information on how to contact you by electronic and paper mail.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
<signature of Ty Coon>, 1 April 1990
Ty Coon, President of Vice
That's all there is to it!

View File

@@ -1,12 +0,0 @@
Usage:
require 'rubygems'
require 'rchardet'
cd = CharDet.detect(some_data)
encoding = cd['encoding']
confidence = cd['confidence'] # 0.0 <= confidence <= 1.0
Project page:
http://rubyforge.org/projects/rchardet
Made for rFeedParser <http://rfeedparser.rubyforge.org>.

View File

@@ -1,67 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__))
require 'rchardet/charsetprober'
require 'rchardet/mbcharsetprober'
require 'rchardet/big5freq'
require 'rchardet/big5prober'
require 'rchardet/chardistribution'
require 'rchardet/charsetgroupprober'
require 'rchardet/codingstatemachine'
require 'rchardet/constants'
require 'rchardet/escprober'
require 'rchardet/escsm'
require 'rchardet/eucjpprober'
require 'rchardet/euckrfreq'
require 'rchardet/euckrprober'
require 'rchardet/euctwfreq'
require 'rchardet/euctwprober'
require 'rchardet/gb2312freq'
require 'rchardet/gb2312prober'
require 'rchardet/hebrewprober'
require 'rchardet/jisfreq'
require 'rchardet/jpcntx'
require 'rchardet/langbulgarianmodel'
require 'rchardet/langcyrillicmodel'
require 'rchardet/langgreekmodel'
require 'rchardet/langhebrewmodel'
require 'rchardet/langhungarianmodel'
require 'rchardet/langthaimodel'
require 'rchardet/latin1prober'
require 'rchardet/mbcsgroupprober'
require 'rchardet/mbcssm'
require 'rchardet/sbcharsetprober'
require 'rchardet/sbcsgroupprober'
require 'rchardet/sjisprober'
require 'rchardet/universaldetector'
require 'rchardet/utf8prober'
module CharDet
VERSION = "1.3"
def CharDet.detect(aBuf)
u = UniversalDetector.new
u.reset
u.feed(aBuf)
u.close
u.result
end
end

View File

@@ -1,927 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is Mozilla Communicator client code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
# Big5 frequency table
# by Taiwan's Mandarin Promotion Council
# <http://www.edu.tw:81/mandr/>
#
# 128 --> 0.42261
# 256 --> 0.57851
# 512 --> 0.74851
# 1024 --> 0.89384
# 2048 --> 0.97583
#
# Ideal Distribution Ratio = 0.74851/(1-0.74851) =2.98
# Random Distribution Ration = 512/(5401-512)=0.105
#
# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR
module CharDet
BIG5_TYPICAL_DISTRIBUTION_RATIO = 0.75
#Char to FreqOrder table
BIG5_TABLE_SIZE = 5376
Big5CharToFreqOrder = [
1,1801,1506, 255,1431, 198, 9, 82, 6,5008, 177, 202,3681,1256,2821, 110, # 16
3814, 33,3274, 261, 76, 44,2114, 16,2946,2187,1176, 659,3971, 26,3451,2653, # 32
1198,3972,3350,4202, 410,2215, 302, 590, 361,1964, 8, 204, 58,4510,5009,1932, # 48
63,5010,5011, 317,1614, 75, 222, 159,4203,2417,1480,5012,3555,3091, 224,2822, # 64
3682, 3, 10,3973,1471, 29,2787,1135,2866,1940, 873, 130,3275,1123, 312,5013, # 80
4511,2052, 507, 252, 682,5014, 142,1915, 124, 206,2947, 34,3556,3204, 64, 604, # 96
5015,2501,1977,1978, 155,1991, 645, 641,1606,5016,3452, 337, 72, 406,5017, 80, # 112
630, 238,3205,1509, 263, 939,1092,2654, 756,1440,1094,3453, 449, 69,2987, 591, # 128
179,2096, 471, 115,2035,1844, 60, 50,2988, 134, 806,1869, 734,2036,3454, 180, # 144
995,1607, 156, 537,2907, 688,5018, 319,1305, 779,2145, 514,2379, 298,4512, 359, # 160
2502, 90,2716,1338, 663, 11, 906,1099,2553, 20,2441, 182, 532,1716,5019, 732, # 176
1376,4204,1311,1420,3206, 25,2317,1056, 113, 399, 382,1950, 242,3455,2474, 529, # 192
3276, 475,1447,3683,5020, 117, 21, 656, 810,1297,2300,2334,3557,5021, 126,4205, # 208
706, 456, 150, 613,4513, 71,1118,2037,4206, 145,3092, 85, 835, 486,2115,1246, # 224
1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,5022,2128,2359, 347,3815, 221, # 240
3558,3135,5023,1956,1153,4207, 83, 296,1199,3093, 192, 624, 93,5024, 822,1898, # 256
2823,3136, 795,2065, 991,1554,1542,1592, 27, 43,2867, 859, 139,1456, 860,4514, # 272
437, 712,3974, 164,2397,3137, 695, 211,3037,2097, 195,3975,1608,3559,3560,3684, # 288
3976, 234, 811,2989,2098,3977,2233,1441,3561,1615,2380, 668,2077,1638, 305, 228, # 304
1664,4515, 467, 415,5025, 262,2099,1593, 239, 108, 300, 200,1033, 512,1247,2078, # 320
5026,5027,2176,3207,3685,2682, 593, 845,1062,3277, 88,1723,2038,3978,1951, 212, # 336
266, 152, 149, 468,1899,4208,4516, 77, 187,5028,3038, 37, 5,2990,5029,3979, # 352
5030,5031, 39,2524,4517,2908,3208,2079, 55, 148, 74,4518, 545, 483,1474,1029, # 368
1665, 217,1870,1531,3138,1104,2655,4209, 24, 172,3562, 900,3980,3563,3564,4519, # 384
32,1408,2824,1312, 329, 487,2360,2251,2717, 784,2683, 4,3039,3351,1427,1789, # 400
188, 109, 499,5032,3686,1717,1790, 888,1217,3040,4520,5033,3565,5034,3352,1520, # 416
3687,3981, 196,1034, 775,5035,5036, 929,1816, 249, 439, 38,5037,1063,5038, 794, # 432
3982,1435,2301, 46, 178,3278,2066,5039,2381,5040, 214,1709,4521, 804, 35, 707, # 448
324,3688,1601,2554, 140, 459,4210,5041,5042,1365, 839, 272, 978,2262,2580,3456, # 464
2129,1363,3689,1423, 697, 100,3094, 48, 70,1231, 495,3139,2196,5043,1294,5044, # 480
2080, 462, 586,1042,3279, 853, 256, 988, 185,2382,3457,1698, 434,1084,5045,3458, # 496
314,2625,2788,4522,2335,2336, 569,2285, 637,1817,2525, 757,1162,1879,1616,3459, # 512
287,1577,2116, 768,4523,1671,2868,3566,2526,1321,3816, 909,2418,5046,4211, 933, # 528
3817,4212,2053,2361,1222,4524, 765,2419,1322, 786,4525,5047,1920,1462,1677,2909, # 544
1699,5048,4526,1424,2442,3140,3690,2600,3353,1775,1941,3460,3983,4213, 309,1369, # 560
1130,2825, 364,2234,1653,1299,3984,3567,3985,3986,2656, 525,1085,3041, 902,2001, # 576
1475, 964,4527, 421,1845,1415,1057,2286, 940,1364,3141, 376,4528,4529,1381, 7, # 592
2527, 983,2383, 336,1710,2684,1846, 321,3461, 559,1131,3042,2752,1809,1132,1313, # 608
265,1481,1858,5049, 352,1203,2826,3280, 167,1089, 420,2827, 776, 792,1724,3568, # 624
4214,2443,3281,5050,4215,5051, 446, 229, 333,2753, 901,3818,1200,1557,4530,2657, # 640
1921, 395,2754,2685,3819,4216,1836, 125, 916,3209,2626,4531,5052,5053,3820,5054, # 656
5055,5056,4532,3142,3691,1133,2555,1757,3462,1510,2318,1409,3569,5057,2146, 438, # 672
2601,2910,2384,3354,1068, 958,3043, 461, 311,2869,2686,4217,1916,3210,4218,1979, # 688
383, 750,2755,2627,4219, 274, 539, 385,1278,1442,5058,1154,1965, 384, 561, 210, # 704
98,1295,2556,3570,5059,1711,2420,1482,3463,3987,2911,1257, 129,5060,3821, 642, # 720
523,2789,2790,2658,5061, 141,2235,1333, 68, 176, 441, 876, 907,4220, 603,2602, # 736
710, 171,3464, 404, 549, 18,3143,2398,1410,3692,1666,5062,3571,4533,2912,4534, # 752
5063,2991, 368,5064, 146, 366, 99, 871,3693,1543, 748, 807,1586,1185, 22,2263, # 768
379,3822,3211,5065,3212, 505,1942,2628,1992,1382,2319,5066, 380,2362, 218, 702, # 784
1818,1248,3465,3044,3572,3355,3282,5067,2992,3694, 930,3283,3823,5068, 59,5069, # 800
585, 601,4221, 497,3466,1112,1314,4535,1802,5070,1223,1472,2177,5071, 749,1837, # 816
690,1900,3824,1773,3988,1476, 429,1043,1791,2236,2117, 917,4222, 447,1086,1629, # 832
5072, 556,5073,5074,2021,1654, 844,1090, 105, 550, 966,1758,2828,1008,1783, 686, # 848
1095,5075,2287, 793,1602,5076,3573,2603,4536,4223,2948,2302,4537,3825, 980,2503, # 864
544, 353, 527,4538, 908,2687,2913,5077, 381,2629,1943,1348,5078,1341,1252, 560, # 880
3095,5079,3467,2870,5080,2054, 973, 886,2081, 143,4539,5081,5082, 157,3989, 496, # 896
4224, 57, 840, 540,2039,4540,4541,3468,2118,1445, 970,2264,1748,1966,2082,4225, # 912
3144,1234,1776,3284,2829,3695, 773,1206,2130,1066,2040,1326,3990,1738,1725,4226, # 928
279,3145, 51,1544,2604, 423,1578,2131,2067, 173,4542,1880,5083,5084,1583, 264, # 944
610,3696,4543,2444, 280, 154,5085,5086,5087,1739, 338,1282,3096, 693,2871,1411, # 960
1074,3826,2445,5088,4544,5089,5090,1240, 952,2399,5091,2914,1538,2688, 685,1483, # 976
4227,2475,1436, 953,4228,2055,4545, 671,2400, 79,4229,2446,3285, 608, 567,2689, # 992
3469,4230,4231,1691, 393,1261,1792,2401,5092,4546,5093,5094,5095,5096,1383,1672, # 1008
3827,3213,1464, 522,1119, 661,1150, 216, 675,4547,3991,1432,3574, 609,4548,2690, # 1024
2402,5097,5098,5099,4232,3045, 0,5100,2476, 315, 231,2447, 301,3356,4549,2385, # 1040
5101, 233,4233,3697,1819,4550,4551,5102, 96,1777,1315,2083,5103, 257,5104,1810, # 1056
3698,2718,1139,1820,4234,2022,1124,2164,2791,1778,2659,5105,3097, 363,1655,3214, # 1072
5106,2993,5107,5108,5109,3992,1567,3993, 718, 103,3215, 849,1443, 341,3357,2949, # 1088
1484,5110,1712, 127, 67, 339,4235,2403, 679,1412, 821,5111,5112, 834, 738, 351, # 1104
2994,2147, 846, 235,1497,1881, 418,1993,3828,2719, 186,1100,2148,2756,3575,1545, # 1120
1355,2950,2872,1377, 583,3994,4236,2581,2995,5113,1298,3699,1078,2557,3700,2363, # 1136
78,3829,3830, 267,1289,2100,2002,1594,4237, 348, 369,1274,2197,2178,1838,4552, # 1152
1821,2830,3701,2757,2288,2003,4553,2951,2758, 144,3358, 882,4554,3995,2759,3470, # 1168
4555,2915,5114,4238,1726, 320,5115,3996,3046, 788,2996,5116,2831,1774,1327,2873, # 1184
3997,2832,5117,1306,4556,2004,1700,3831,3576,2364,2660, 787,2023, 506, 824,3702, # 1200
534, 323,4557,1044,3359,2024,1901, 946,3471,5118,1779,1500,1678,5119,1882,4558, # 1216
165, 243,4559,3703,2528, 123, 683,4239, 764,4560, 36,3998,1793, 589,2916, 816, # 1232
626,1667,3047,2237,1639,1555,1622,3832,3999,5120,4000,2874,1370,1228,1933, 891, # 1248
2084,2917, 304,4240,5121, 292,2997,2720,3577, 691,2101,4241,1115,4561, 118, 662, # 1264
5122, 611,1156, 854,2386,1316,2875, 2, 386, 515,2918,5123,5124,3286, 868,2238, # 1280
1486, 855,2661, 785,2216,3048,5125,1040,3216,3578,5126,3146, 448,5127,1525,5128, # 1296
2165,4562,5129,3833,5130,4242,2833,3579,3147, 503, 818,4001,3148,1568, 814, 676, # 1312
1444, 306,1749,5131,3834,1416,1030, 197,1428, 805,2834,1501,4563,5132,5133,5134, # 1328
1994,5135,4564,5136,5137,2198, 13,2792,3704,2998,3149,1229,1917,5138,3835,2132, # 1344
5139,4243,4565,2404,3580,5140,2217,1511,1727,1120,5141,5142, 646,3836,2448, 307, # 1360
5143,5144,1595,3217,5145,5146,5147,3705,1113,1356,4002,1465,2529,2530,5148, 519, # 1376
5149, 128,2133, 92,2289,1980,5150,4003,1512, 342,3150,2199,5151,2793,2218,1981, # 1392
3360,4244, 290,1656,1317, 789, 827,2365,5152,3837,4566, 562, 581,4004,5153, 401, # 1408
4567,2252, 94,4568,5154,1399,2794,5155,1463,2025,4569,3218,1944,5156, 828,1105, # 1424
4245,1262,1394,5157,4246, 605,4570,5158,1784,2876,5159,2835, 819,2102, 578,2200, # 1440
2952,5160,1502, 436,3287,4247,3288,2836,4005,2919,3472,3473,5161,2721,2320,5162, # 1456
5163,2337,2068, 23,4571, 193, 826,3838,2103, 699,1630,4248,3098, 390,1794,1064, # 1472
3581,5164,1579,3099,3100,1400,5165,4249,1839,1640,2877,5166,4572,4573, 137,4250, # 1488
598,3101,1967, 780, 104, 974,2953,5167, 278, 899, 253, 402, 572, 504, 493,1339, # 1504
5168,4006,1275,4574,2582,2558,5169,3706,3049,3102,2253, 565,1334,2722, 863, 41, # 1520
5170,5171,4575,5172,1657,2338, 19, 463,2760,4251, 606,5173,2999,3289,1087,2085, # 1536
1323,2662,3000,5174,1631,1623,1750,4252,2691,5175,2878, 791,2723,2663,2339, 232, # 1552
2421,5176,3001,1498,5177,2664,2630, 755,1366,3707,3290,3151,2026,1609, 119,1918, # 1568
3474, 862,1026,4253,5178,4007,3839,4576,4008,4577,2265,1952,2477,5179,1125, 817, # 1584
4254,4255,4009,1513,1766,2041,1487,4256,3050,3291,2837,3840,3152,5180,5181,1507, # 1600
5182,2692, 733, 40,1632,1106,2879, 345,4257, 841,2531, 230,4578,3002,1847,3292, # 1616
3475,5183,1263, 986,3476,5184, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562, # 1632
4010,4011,2954, 967,2761,2665,1349, 592,2134,1692,3361,3003,1995,4258,1679,4012, # 1648
1902,2188,5185, 739,3708,2724,1296,1290,5186,4259,2201,2202,1922,1563,2605,2559, # 1664
1871,2762,3004,5187, 435,5188, 343,1108, 596, 17,1751,4579,2239,3477,3709,5189, # 1680
4580, 294,3582,2955,1693, 477, 979, 281,2042,3583, 643,2043,3710,2631,2795,2266, # 1696
1031,2340,2135,2303,3584,4581, 367,1249,2560,5190,3585,5191,4582,1283,3362,2005, # 1712
240,1762,3363,4583,4584, 836,1069,3153, 474,5192,2149,2532, 268,3586,5193,3219, # 1728
1521,1284,5194,1658,1546,4260,5195,3587,3588,5196,4261,3364,2693,1685,4262, 961, # 1744
1673,2632, 190,2006,2203,3841,4585,4586,5197, 570,2504,3711,1490,5198,4587,2633, # 1760
3293,1957,4588, 584,1514, 396,1045,1945,5199,4589,1968,2449,5200,5201,4590,4013, # 1776
619,5202,3154,3294, 215,2007,2796,2561,3220,4591,3221,4592, 763,4263,3842,4593, # 1792
5203,5204,1958,1767,2956,3365,3712,1174, 452,1477,4594,3366,3155,5205,2838,1253, # 1808
2387,2189,1091,2290,4264, 492,5206, 638,1169,1825,2136,1752,4014, 648, 926,1021, # 1824
1324,4595, 520,4596, 997, 847,1007, 892,4597,3843,2267,1872,3713,2405,1785,4598, # 1840
1953,2957,3103,3222,1728,4265,2044,3714,4599,2008,1701,3156,1551, 30,2268,4266, # 1856
5207,2027,4600,3589,5208, 501,5209,4267, 594,3478,2166,1822,3590,3479,3591,3223, # 1872
829,2839,4268,5210,1680,3157,1225,4269,5211,3295,4601,4270,3158,2341,5212,4602, # 1888
4271,5213,4015,4016,5214,1848,2388,2606,3367,5215,4603, 374,4017, 652,4272,4273, # 1904
375,1140, 798,5216,5217,5218,2366,4604,2269, 546,1659, 138,3051,2450,4605,5219, # 1920
2254, 612,1849, 910, 796,3844,1740,1371, 825,3845,3846,5220,2920,2562,5221, 692, # 1936
444,3052,2634, 801,4606,4274,5222,1491, 244,1053,3053,4275,4276, 340,5223,4018, # 1952
1041,3005, 293,1168, 87,1357,5224,1539, 959,5225,2240, 721, 694,4277,3847, 219, # 1968
1478, 644,1417,3368,2666,1413,1401,1335,1389,4019,5226,5227,3006,2367,3159,1826, # 1984
730,1515, 184,2840, 66,4607,5228,1660,2958, 246,3369, 378,1457, 226,3480, 975, # 2000
4020,2959,1264,3592, 674, 696,5229, 163,5230,1141,2422,2167, 713,3593,3370,4608, # 2016
4021,5231,5232,1186, 15,5233,1079,1070,5234,1522,3224,3594, 276,1050,2725, 758, # 2032
1126, 653,2960,3296,5235,2342, 889,3595,4022,3104,3007, 903,1250,4609,4023,3481, # 2048
3596,1342,1681,1718, 766,3297, 286, 89,2961,3715,5236,1713,5237,2607,3371,3008, # 2064
5238,2962,2219,3225,2880,5239,4610,2505,2533, 181, 387,1075,4024, 731,2190,3372, # 2080
5240,3298, 310, 313,3482,2304, 770,4278, 54,3054, 189,4611,3105,3848,4025,5241, # 2096
1230,1617,1850, 355,3597,4279,4612,3373, 111,4280,3716,1350,3160,3483,3055,4281, # 2112
2150,3299,3598,5242,2797,4026,4027,3009, 722,2009,5243,1071, 247,1207,2343,2478, # 2128
1378,4613,2010, 864,1437,1214,4614, 373,3849,1142,2220, 667,4615, 442,2763,2563, # 2144
3850,4028,1969,4282,3300,1840, 837, 170,1107, 934,1336,1883,5244,5245,2119,4283, # 2160
2841, 743,1569,5246,4616,4284, 582,2389,1418,3484,5247,1803,5248, 357,1395,1729, # 2176
3717,3301,2423,1564,2241,5249,3106,3851,1633,4617,1114,2086,4285,1532,5250, 482, # 2192
2451,4618,5251,5252,1492, 833,1466,5253,2726,3599,1641,2842,5254,1526,1272,3718, # 2208
4286,1686,1795, 416,2564,1903,1954,1804,5255,3852,2798,3853,1159,2321,5256,2881, # 2224
4619,1610,1584,3056,2424,2764, 443,3302,1163,3161,5257,5258,4029,5259,4287,2506, # 2240
3057,4620,4030,3162,2104,1647,3600,2011,1873,4288,5260,4289, 431,3485,5261, 250, # 2256
97, 81,4290,5262,1648,1851,1558, 160, 848,5263, 866, 740,1694,5264,2204,2843, # 2272
3226,4291,4621,3719,1687, 950,2479, 426, 469,3227,3720,3721,4031,5265,5266,1188, # 2288
424,1996, 861,3601,4292,3854,2205,2694, 168,1235,3602,4293,5267,2087,1674,4622, # 2304
3374,3303, 220,2565,1009,5268,3855, 670,3010, 332,1208, 717,5269,5270,3603,2452, # 2320
4032,3375,5271, 513,5272,1209,2882,3376,3163,4623,1080,5273,5274,5275,5276,2534, # 2336
3722,3604, 815,1587,4033,4034,5277,3605,3486,3856,1254,4624,1328,3058,1390,4035, # 2352
1741,4036,3857,4037,5278, 236,3858,2453,3304,5279,5280,3723,3859,1273,3860,4625, # 2368
5281, 308,5282,4626, 245,4627,1852,2480,1307,2583, 430, 715,2137,2454,5283, 270, # 2384
199,2883,4038,5284,3606,2727,1753, 761,1754, 725,1661,1841,4628,3487,3724,5285, # 2400
5286, 587, 14,3305, 227,2608, 326, 480,2270, 943,2765,3607, 291, 650,1884,5287, # 2416
1702,1226, 102,1547, 62,3488, 904,4629,3489,1164,4294,5288,5289,1224,1548,2766, # 2432
391, 498,1493,5290,1386,1419,5291,2056,1177,4630, 813, 880,1081,2368, 566,1145, # 2448
4631,2291,1001,1035,2566,2609,2242, 394,1286,5292,5293,2069,5294, 86,1494,1730, # 2464
4039, 491,1588, 745, 897,2963, 843,3377,4040,2767,2884,3306,1768, 998,2221,2070, # 2480
397,1827,1195,1970,3725,3011,3378, 284,5295,3861,2507,2138,2120,1904,5296,4041, # 2496
2151,4042,4295,1036,3490,1905, 114,2567,4296, 209,1527,5297,5298,2964,2844,2635, # 2512
2390,2728,3164, 812,2568,5299,3307,5300,1559, 737,1885,3726,1210, 885, 28,2695, # 2528
3608,3862,5301,4297,1004,1780,4632,5302, 346,1982,2222,2696,4633,3863,1742, 797, # 2544
1642,4043,1934,1072,1384,2152, 896,4044,3308,3727,3228,2885,3609,5303,2569,1959, # 2560
4634,2455,1786,5304,5305,5306,4045,4298,1005,1308,3728,4299,2729,4635,4636,1528, # 2576
2610, 161,1178,4300,1983, 987,4637,1101,4301, 631,4046,1157,3229,2425,1343,1241, # 2592
1016,2243,2570, 372, 877,2344,2508,1160, 555,1935, 911,4047,5307, 466,1170, 169, # 2608
1051,2921,2697,3729,2481,3012,1182,2012,2571,1251,2636,5308, 992,2345,3491,1540, # 2624
2730,1201,2071,2406,1997,2482,5309,4638, 528,1923,2191,1503,1874,1570,2369,3379, # 2640
3309,5310, 557,1073,5311,1828,3492,2088,2271,3165,3059,3107, 767,3108,2799,4639, # 2656
1006,4302,4640,2346,1267,2179,3730,3230, 778,4048,3231,2731,1597,2667,5312,4641, # 2672
5313,3493,5314,5315,5316,3310,2698,1433,3311, 131, 95,1504,4049, 723,4303,3166, # 2688
1842,3610,2768,2192,4050,2028,2105,3731,5317,3013,4051,1218,5318,3380,3232,4052, # 2704
4304,2584, 248,1634,3864, 912,5319,2845,3732,3060,3865, 654, 53,5320,3014,5321, # 2720
1688,4642, 777,3494,1032,4053,1425,5322, 191, 820,2121,2846, 971,4643, 931,3233, # 2736
135, 664, 783,3866,1998, 772,2922,1936,4054,3867,4644,2923,3234, 282,2732, 640, # 2752
1372,3495,1127, 922, 325,3381,5323,5324, 711,2045,5325,5326,4055,2223,2800,1937, # 2768
4056,3382,2224,2255,3868,2305,5327,4645,3869,1258,3312,4057,3235,2139,2965,4058, # 2784
4059,5328,2225, 258,3236,4646, 101,1227,5329,3313,1755,5330,1391,3314,5331,2924, # 2800
2057, 893,5332,5333,5334,1402,4305,2347,5335,5336,3237,3611,5337,5338, 878,1325, # 2816
1781,2801,4647, 259,1385,2585, 744,1183,2272,4648,5339,4060,2509,5340, 684,1024, # 2832
4306,5341, 472,3612,3496,1165,3315,4061,4062, 322,2153, 881, 455,1695,1152,1340, # 2848
660, 554,2154,4649,1058,4650,4307, 830,1065,3383,4063,4651,1924,5342,1703,1919, # 2864
5343, 932,2273, 122,5344,4652, 947, 677,5345,3870,2637, 297,1906,1925,2274,4653, # 2880
2322,3316,5346,5347,4308,5348,4309, 84,4310, 112, 989,5349, 547,1059,4064, 701, # 2896
3613,1019,5350,4311,5351,3497, 942, 639, 457,2306,2456, 993,2966, 407, 851, 494, # 2912
4654,3384, 927,5352,1237,5353,2426,3385, 573,4312, 680, 921,2925,1279,1875, 285, # 2928
790,1448,1984, 719,2168,5354,5355,4655,4065,4066,1649,5356,1541, 563,5357,1077, # 2944
5358,3386,3061,3498, 511,3015,4067,4068,3733,4069,1268,2572,3387,3238,4656,4657, # 2960
5359, 535,1048,1276,1189,2926,2029,3167,1438,1373,2847,2967,1134,2013,5360,4313, # 2976
1238,2586,3109,1259,5361, 700,5362,2968,3168,3734,4314,5363,4315,1146,1876,1907, # 2992
4658,2611,4070, 781,2427, 132,1589, 203, 147, 273,2802,2407, 898,1787,2155,4071, # 3008
4072,5364,3871,2803,5365,5366,4659,4660,5367,3239,5368,1635,3872, 965,5369,1805, # 3024
2699,1516,3614,1121,1082,1329,3317,4073,1449,3873, 65,1128,2848,2927,2769,1590, # 3040
3874,5370,5371, 12,2668, 45, 976,2587,3169,4661, 517,2535,1013,1037,3240,5372, # 3056
3875,2849,5373,3876,5374,3499,5375,2612, 614,1999,2323,3877,3110,2733,2638,5376, # 3072
2588,4316, 599,1269,5377,1811,3735,5378,2700,3111, 759,1060, 489,1806,3388,3318, # 3088
1358,5379,5380,2391,1387,1215,2639,2256, 490,5381,5382,4317,1759,2392,2348,5383, # 3104
4662,3878,1908,4074,2640,1807,3241,4663,3500,3319,2770,2349, 874,5384,5385,3501, # 3120
3736,1859, 91,2928,3737,3062,3879,4664,5386,3170,4075,2669,5387,3502,1202,1403, # 3136
3880,2969,2536,1517,2510,4665,3503,2511,5388,4666,5389,2701,1886,1495,1731,4076, # 3152
2370,4667,5390,2030,5391,5392,4077,2702,1216, 237,2589,4318,2324,4078,3881,4668, # 3168
4669,2703,3615,3504, 445,4670,5393,5394,5395,5396,2771, 61,4079,3738,1823,4080, # 3184
5397, 687,2046, 935, 925, 405,2670, 703,1096,1860,2734,4671,4081,1877,1367,2704, # 3200
3389, 918,2106,1782,2483, 334,3320,1611,1093,4672, 564,3171,3505,3739,3390, 945, # 3216
2641,2058,4673,5398,1926, 872,4319,5399,3506,2705,3112, 349,4320,3740,4082,4674, # 3232
3882,4321,3741,2156,4083,4675,4676,4322,4677,2408,2047, 782,4084, 400, 251,4323, # 3248
1624,5400,5401, 277,3742, 299,1265, 476,1191,3883,2122,4324,4325,1109, 205,5402, # 3264
2590,1000,2157,3616,1861,5403,5404,5405,4678,5406,4679,2573, 107,2484,2158,4085, # 3280
3507,3172,5407,1533, 541,1301, 158, 753,4326,2886,3617,5408,1696, 370,1088,4327, # 3296
4680,3618, 579, 327, 440, 162,2244, 269,1938,1374,3508, 968,3063, 56,1396,3113, # 3312
2107,3321,3391,5409,1927,2159,4681,3016,5410,3619,5411,5412,3743,4682,2485,5413, # 3328
2804,5414,1650,4683,5415,2613,5416,5417,4086,2671,3392,1149,3393,4087,3884,4088, # 3344
5418,1076, 49,5419, 951,3242,3322,3323, 450,2850, 920,5420,1812,2805,2371,4328, # 3360
1909,1138,2372,3885,3509,5421,3243,4684,1910,1147,1518,2428,4685,3886,5422,4686, # 3376
2393,2614, 260,1796,3244,5423,5424,3887,3324, 708,5425,3620,1704,5426,3621,1351, # 3392
1618,3394,3017,1887, 944,4329,3395,4330,3064,3396,4331,5427,3744, 422, 413,1714, # 3408
3325, 500,2059,2350,4332,2486,5428,1344,1911, 954,5429,1668,5430,5431,4089,2409, # 3424
4333,3622,3888,4334,5432,2307,1318,2512,3114, 133,3115,2887,4687, 629, 31,2851, # 3440
2706,3889,4688, 850, 949,4689,4090,2970,1732,2089,4335,1496,1853,5433,4091, 620, # 3456
3245, 981,1242,3745,3397,1619,3746,1643,3326,2140,2457,1971,1719,3510,2169,5434, # 3472
3246,5435,5436,3398,1829,5437,1277,4690,1565,2048,5438,1636,3623,3116,5439, 869, # 3488
2852, 655,3890,3891,3117,4092,3018,3892,1310,3624,4691,5440,5441,5442,1733, 558, # 3504
4692,3747, 335,1549,3065,1756,4336,3748,1946,3511,1830,1291,1192, 470,2735,2108, # 3520
2806, 913,1054,4093,5443,1027,5444,3066,4094,4693, 982,2672,3399,3173,3512,3247, # 3536
3248,1947,2807,5445, 571,4694,5446,1831,5447,3625,2591,1523,2429,5448,2090, 984, # 3552
4695,3749,1960,5449,3750, 852, 923,2808,3513,3751, 969,1519, 999,2049,2325,1705, # 3568
5450,3118, 615,1662, 151, 597,4095,2410,2326,1049, 275,4696,3752,4337, 568,3753, # 3584
3626,2487,4338,3754,5451,2430,2275, 409,3249,5452,1566,2888,3514,1002, 769,2853, # 3600
194,2091,3174,3755,2226,3327,4339, 628,1505,5453,5454,1763,2180,3019,4096, 521, # 3616
1161,2592,1788,2206,2411,4697,4097,1625,4340,4341, 412, 42,3119, 464,5455,2642, # 3632
4698,3400,1760,1571,2889,3515,2537,1219,2207,3893,2643,2141,2373,4699,4700,3328, # 3648
1651,3401,3627,5456,5457,3628,2488,3516,5458,3756,5459,5460,2276,2092, 460,5461, # 3664
4701,5462,3020, 962, 588,3629, 289,3250,2644,1116, 52,5463,3067,1797,5464,5465, # 3680
5466,1467,5467,1598,1143,3757,4342,1985,1734,1067,4702,1280,3402, 465,4703,1572, # 3696
510,5468,1928,2245,1813,1644,3630,5469,4704,3758,5470,5471,2673,1573,1534,5472, # 3712
5473, 536,1808,1761,3517,3894,3175,2645,5474,5475,5476,4705,3518,2929,1912,2809, # 3728
5477,3329,1122, 377,3251,5478, 360,5479,5480,4343,1529, 551,5481,2060,3759,1769, # 3744
2431,5482,2930,4344,3330,3120,2327,2109,2031,4706,1404, 136,1468,1479, 672,1171, # 3760
3252,2308, 271,3176,5483,2772,5484,2050, 678,2736, 865,1948,4707,5485,2014,4098, # 3776
2971,5486,2737,2227,1397,3068,3760,4708,4709,1735,2931,3403,3631,5487,3895, 509, # 3792
2854,2458,2890,3896,5488,5489,3177,3178,4710,4345,2538,4711,2309,1166,1010, 552, # 3808
681,1888,5490,5491,2972,2973,4099,1287,1596,1862,3179, 358, 453, 736, 175, 478, # 3824
1117, 905,1167,1097,5492,1854,1530,5493,1706,5494,2181,3519,2292,3761,3520,3632, # 3840
4346,2093,4347,5495,3404,1193,2489,4348,1458,2193,2208,1863,1889,1421,3331,2932, # 3856
3069,2182,3521, 595,2123,5496,4100,5497,5498,4349,1707,2646, 223,3762,1359, 751, # 3872
3121, 183,3522,5499,2810,3021, 419,2374, 633, 704,3897,2394, 241,5500,5501,5502, # 3888
838,3022,3763,2277,2773,2459,3898,1939,2051,4101,1309,3122,2246,1181,5503,1136, # 3904
2209,3899,2375,1446,4350,2310,4712,5504,5505,4351,1055,2615, 484,3764,5506,4102, # 3920
625,4352,2278,3405,1499,4353,4103,5507,4104,4354,3253,2279,2280,3523,5508,5509, # 3936
2774, 808,2616,3765,3406,4105,4355,3123,2539, 526,3407,3900,4356, 955,5510,1620, # 3952
4357,2647,2432,5511,1429,3766,1669,1832, 994, 928,5512,3633,1260,5513,5514,5515, # 3968
1949,2293, 741,2933,1626,4358,2738,2460, 867,1184, 362,3408,1392,5516,5517,4106, # 3984
4359,1770,1736,3254,2934,4713,4714,1929,2707,1459,1158,5518,3070,3409,2891,1292, # 4000
1930,2513,2855,3767,1986,1187,2072,2015,2617,4360,5519,2574,2514,2170,3768,2490, # 4016
3332,5520,3769,4715,5521,5522, 666,1003,3023,1022,3634,4361,5523,4716,1814,2257, # 4032
574,3901,1603, 295,1535, 705,3902,4362, 283, 858, 417,5524,5525,3255,4717,4718, # 4048
3071,1220,1890,1046,2281,2461,4107,1393,1599, 689,2575, 388,4363,5526,2491, 802, # 4064
5527,2811,3903,2061,1405,2258,5528,4719,3904,2110,1052,1345,3256,1585,5529, 809, # 4080
5530,5531,5532, 575,2739,3524, 956,1552,1469,1144,2328,5533,2329,1560,2462,3635, # 4096
3257,4108, 616,2210,4364,3180,2183,2294,5534,1833,5535,3525,4720,5536,1319,3770, # 4112
3771,1211,3636,1023,3258,1293,2812,5537,5538,5539,3905, 607,2311,3906, 762,2892, # 4128
1439,4365,1360,4721,1485,3072,5540,4722,1038,4366,1450,2062,2648,4367,1379,4723, # 4144
2593,5541,5542,4368,1352,1414,2330,2935,1172,5543,5544,3907,3908,4724,1798,1451, # 4160
5545,5546,5547,5548,2936,4109,4110,2492,2351, 411,4111,4112,3637,3333,3124,4725, # 4176
1561,2674,1452,4113,1375,5549,5550, 47,2974, 316,5551,1406,1591,2937,3181,5552, # 4192
1025,2142,3125,3182, 354,2740, 884,2228,4369,2412, 508,3772, 726,3638, 996,2433, # 4208
3639, 729,5553, 392,2194,1453,4114,4726,3773,5554,5555,2463,3640,2618,1675,2813, # 4224
919,2352,2975,2353,1270,4727,4115, 73,5556,5557, 647,5558,3259,2856,2259,1550, # 4240
1346,3024,5559,1332, 883,3526,5560,5561,5562,5563,3334,2775,5564,1212, 831,1347, # 4256
4370,4728,2331,3909,1864,3073, 720,3910,4729,4730,3911,5565,4371,5566,5567,4731, # 4272
5568,5569,1799,4732,3774,2619,4733,3641,1645,2376,4734,5570,2938, 669,2211,2675, # 4288
2434,5571,2893,5572,5573,1028,3260,5574,4372,2413,5575,2260,1353,5576,5577,4735, # 4304
3183, 518,5578,4116,5579,4373,1961,5580,2143,4374,5581,5582,3025,2354,2355,3912, # 4320
516,1834,1454,4117,2708,4375,4736,2229,2620,1972,1129,3642,5583,2776,5584,2976, # 4336
1422, 577,1470,3026,1524,3410,5585,5586, 432,4376,3074,3527,5587,2594,1455,2515, # 4352
2230,1973,1175,5588,1020,2741,4118,3528,4737,5589,2742,5590,1743,1361,3075,3529, # 4368
2649,4119,4377,4738,2295, 895, 924,4378,2171, 331,2247,3076, 166,1627,3077,1098, # 4384
5591,1232,2894,2231,3411,4739, 657, 403,1196,2377, 542,3775,3412,1600,4379,3530, # 4400
5592,4740,2777,3261, 576, 530,1362,4741,4742,2540,2676,3776,4120,5593, 842,3913, # 4416
5594,2814,2032,1014,4121, 213,2709,3413, 665, 621,4380,5595,3777,2939,2435,5596, # 4432
2436,3335,3643,3414,4743,4381,2541,4382,4744,3644,1682,4383,3531,1380,5597, 724, # 4448
2282, 600,1670,5598,1337,1233,4745,3126,2248,5599,1621,4746,5600, 651,4384,5601, # 4464
1612,4385,2621,5602,2857,5603,2743,2312,3078,5604, 716,2464,3079, 174,1255,2710, # 4480
4122,3645, 548,1320,1398, 728,4123,1574,5605,1891,1197,3080,4124,5606,3081,3082, # 4496
3778,3646,3779, 747,5607, 635,4386,4747,5608,5609,5610,4387,5611,5612,4748,5613, # 4512
3415,4749,2437, 451,5614,3780,2542,2073,4388,2744,4389,4125,5615,1764,4750,5616, # 4528
4390, 350,4751,2283,2395,2493,5617,4391,4126,2249,1434,4127, 488,4752, 458,4392, # 4544
4128,3781, 771,1330,2396,3914,2576,3184,2160,2414,1553,2677,3185,4393,5618,2494, # 4560
2895,2622,1720,2711,4394,3416,4753,5619,2543,4395,5620,3262,4396,2778,5621,2016, # 4576
2745,5622,1155,1017,3782,3915,5623,3336,2313, 201,1865,4397,1430,5624,4129,5625, # 4592
5626,5627,5628,5629,4398,1604,5630, 414,1866, 371,2595,4754,4755,3532,2017,3127, # 4608
4756,1708, 960,4399, 887, 389,2172,1536,1663,1721,5631,2232,4130,2356,2940,1580, # 4624
5632,5633,1744,4757,2544,4758,4759,5634,4760,5635,2074,5636,4761,3647,3417,2896, # 4640
4400,5637,4401,2650,3418,2815, 673,2712,2465, 709,3533,4131,3648,4402,5638,1148, # 4656
502, 634,5639,5640,1204,4762,3649,1575,4763,2623,3783,5641,3784,3128, 948,3263, # 4672
121,1745,3916,1110,5642,4403,3083,2516,3027,4132,3785,1151,1771,3917,1488,4133, # 4688
1987,5643,2438,3534,5644,5645,2094,5646,4404,3918,1213,1407,2816, 531,2746,2545, # 4704
3264,1011,1537,4764,2779,4405,3129,1061,5647,3786,3787,1867,2897,5648,2018, 120, # 4720
4406,4407,2063,3650,3265,2314,3919,2678,3419,1955,4765,4134,5649,3535,1047,2713, # 4736
1266,5650,1368,4766,2858, 649,3420,3920,2546,2747,1102,2859,2679,5651,5652,2000, # 4752
5653,1111,3651,2977,5654,2495,3921,3652,2817,1855,3421,3788,5655,5656,3422,2415, # 4768
2898,3337,3266,3653,5657,2577,5658,3654,2818,4135,1460, 856,5659,3655,5660,2899, # 4784
2978,5661,2900,3922,5662,4408, 632,2517, 875,3923,1697,3924,2296,5663,5664,4767, # 4800
3028,1239, 580,4768,4409,5665, 914, 936,2075,1190,4136,1039,2124,5666,5667,5668, # 4816
5669,3423,1473,5670,1354,4410,3925,4769,2173,3084,4137, 915,3338,4411,4412,3339, # 4832
1605,1835,5671,2748, 398,3656,4413,3926,4138, 328,1913,2860,4139,3927,1331,4414, # 4848
3029, 937,4415,5672,3657,4140,4141,3424,2161,4770,3425, 524, 742, 538,3085,1012, # 4864
5673,5674,3928,2466,5675, 658,1103, 225,3929,5676,5677,4771,5678,4772,5679,3267, # 4880
1243,5680,4142, 963,2250,4773,5681,2714,3658,3186,5682,5683,2596,2332,5684,4774, # 4896
5685,5686,5687,3536, 957,3426,2547,2033,1931,2941,2467, 870,2019,3659,1746,2780, # 4912
2781,2439,2468,5688,3930,5689,3789,3130,3790,3537,3427,3791,5690,1179,3086,5691, # 4928
3187,2378,4416,3792,2548,3188,3131,2749,4143,5692,3428,1556,2549,2297, 977,2901, # 4944
2034,4144,1205,3429,5693,1765,3430,3189,2125,1271, 714,1689,4775,3538,5694,2333, # 4960
3931, 533,4417,3660,2184, 617,5695,2469,3340,3539,2315,5696,5697,3190,5698,5699, # 4976
3932,1988, 618, 427,2651,3540,3431,5700,5701,1244,1690,5702,2819,4418,4776,5703, # 4992
3541,4777,5704,2284,1576, 473,3661,4419,3432, 972,5705,3662,5706,3087,5707,5708, # 5008
4778,4779,5709,3793,4145,4146,5710, 153,4780, 356,5711,1892,2902,4420,2144, 408, # 5024
803,2357,5712,3933,5713,4421,1646,2578,2518,4781,4782,3934,5714,3935,4422,5715, # 5040
2416,3433, 752,5716,5717,1962,3341,2979,5718, 746,3030,2470,4783,4423,3794, 698, # 5056
4784,1893,4424,3663,2550,4785,3664,3936,5719,3191,3434,5720,1824,1302,4147,2715, # 5072
3937,1974,4425,5721,4426,3192, 823,1303,1288,1236,2861,3542,4148,3435, 774,3938, # 5088
5722,1581,4786,1304,2862,3939,4787,5723,2440,2162,1083,3268,4427,4149,4428, 344, # 5104
1173, 288,2316, 454,1683,5724,5725,1461,4788,4150,2597,5726,5727,4789, 985, 894, # 5120
5728,3436,3193,5729,1914,2942,3795,1989,5730,2111,1975,5731,4151,5732,2579,1194, # 5136
425,5733,4790,3194,1245,3796,4429,5734,5735,2863,5736, 636,4791,1856,3940, 760, # 5152
1800,5737,4430,2212,1508,4792,4152,1894,1684,2298,5738,5739,4793,4431,4432,2213, # 5168
479,5740,5741, 832,5742,4153,2496,5743,2980,2497,3797, 990,3132, 627,1815,2652, # 5184
4433,1582,4434,2126,2112,3543,4794,5744, 799,4435,3195,5745,4795,2113,1737,3031, # 5200
1018, 543, 754,4436,3342,1676,4796,4797,4154,4798,1489,5746,3544,5747,2624,2903, # 5216
4155,5748,5749,2981,5750,5751,5752,5753,3196,4799,4800,2185,1722,5754,3269,3270, # 5232
1843,3665,1715, 481, 365,1976,1857,5755,5756,1963,2498,4801,5757,2127,3666,3271, # 5248
433,1895,2064,2076,5758, 602,2750,5759,5760,5761,5762,5763,3032,1628,3437,5764, # 5264
3197,4802,4156,2904,4803,2519,5765,2551,2782,5766,5767,5768,3343,4804,2905,5769, # 5280
4805,5770,2864,4806,4807,1221,2982,4157,2520,5771,5772,5773,1868,1990,5774,5775, # 5296
5776,1896,5777,5778,4808,1897,4158, 318,5779,2095,4159,4437,5780,5781, 485,5782, # 5312
938,3941, 553,2680, 116,5783,3942,3667,5784,3545,2681,2783,3438,3344,2820,5785, # 5328
3668,2943,4160,1747,2944,2983,5786,5787, 207,5788,4809,5789,4810,2521,5790,3033, # 5344
890,3669,3943,5791,1878,3798,3439,5792,2186,2358,3440,1652,5793,5794,5795, 941, # 5360
2299, 208,3546,4161,2020, 330,4438,3944,2906,2499,3799,4439,4811,5796,5797,5798, # 5376 #last 512
#Everything below is of no interest for detection purpose
2522,1613,4812,5799,3345,3945,2523,5800,4162,5801,1637,4163,2471,4813,3946,5802, # 5392
2500,3034,3800,5803,5804,2195,4814,5805,2163,5806,5807,5808,5809,5810,5811,5812, # 5408
5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824,5825,5826,5827,5828, # 5424
5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844, # 5440
5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856,5857,5858,5859,5860, # 5456
5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872,5873,5874,5875,5876, # 5472
5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888,5889,5890,5891,5892, # 5488
5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904,5905,5906,5907,5908, # 5504
5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920,5921,5922,5923,5924, # 5520
5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940, # 5536
5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952,5953,5954,5955,5956, # 5552
5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968,5969,5970,5971,5972, # 5568
5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984,5985,5986,5987,5988, # 5584
5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004, # 5600
6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020, # 5616
6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032,6033,6034,6035,6036, # 5632
6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052, # 5648
6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068, # 5664
6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084, # 5680
6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100, # 5696
6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116, # 5712
6117,6118,6119,6120,6121,6122,6123,6124,6125,6126,6127,6128,6129,6130,6131,6132, # 5728
6133,6134,6135,6136,6137,6138,6139,6140,6141,6142,6143,6144,6145,6146,6147,6148, # 5744
6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163,6164, # 5760
6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179,6180, # 5776
6181,6182,6183,6184,6185,6186,6187,6188,6189,6190,6191,6192,6193,6194,6195,6196, # 5792
6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,6211,6212, # 5808
6213,6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,3670,6224,6225,6226,6227, # 5824
6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241,6242,6243, # 5840
6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,6254,6255,6256,6257,6258,6259, # 5856
6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6274,6275, # 5872
6276,6277,6278,6279,6280,6281,6282,6283,6284,6285,4815,6286,6287,6288,6289,6290, # 5888
6291,6292,4816,6293,6294,6295,6296,6297,6298,6299,6300,6301,6302,6303,6304,6305, # 5904
6306,6307,6308,6309,6310,6311,4817,4818,6312,6313,6314,6315,6316,6317,6318,4819, # 5920
6319,6320,6321,6322,6323,6324,6325,6326,6327,6328,6329,6330,6331,6332,6333,6334, # 5936
6335,6336,6337,4820,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349, # 5952
6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365, # 5968
6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381, # 5984
6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,6396,6397, # 6000
6398,6399,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,3441,6411,6412, # 6016
6413,6414,6415,6416,6417,6418,6419,6420,6421,6422,6423,6424,6425,4440,6426,6427, # 6032
6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,6439,6440,6441,6442,6443, # 6048
6444,6445,6446,6447,6448,6449,6450,6451,6452,6453,6454,4821,6455,6456,6457,6458, # 6064
6459,6460,6461,6462,6463,6464,6465,6466,6467,6468,6469,6470,6471,6472,6473,6474, # 6080
6475,6476,6477,3947,3948,6478,6479,6480,6481,3272,4441,6482,6483,6484,6485,4442, # 6096
6486,6487,6488,6489,6490,6491,6492,6493,6494,6495,6496,4822,6497,6498,6499,6500, # 6112
6501,6502,6503,6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516, # 6128
6517,6518,6519,6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532, # 6144
6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548, # 6160
6549,6550,6551,6552,6553,6554,6555,6556,2784,6557,4823,6558,6559,6560,6561,6562, # 6176
6563,6564,6565,6566,6567,6568,6569,3949,6570,6571,6572,4824,6573,6574,6575,6576, # 6192
6577,6578,6579,6580,6581,6582,6583,4825,6584,6585,6586,3950,2785,6587,6588,6589, # 6208
6590,6591,6592,6593,6594,6595,6596,6597,6598,6599,6600,6601,6602,6603,6604,6605, # 6224
6606,6607,6608,6609,6610,6611,6612,4826,6613,6614,6615,4827,6616,6617,6618,6619, # 6240
6620,6621,6622,6623,6624,6625,4164,6626,6627,6628,6629,6630,6631,6632,6633,6634, # 6256
3547,6635,4828,6636,6637,6638,6639,6640,6641,6642,3951,2984,6643,6644,6645,6646, # 6272
6647,6648,6649,4165,6650,4829,6651,6652,4830,6653,6654,6655,6656,6657,6658,6659, # 6288
6660,6661,6662,4831,6663,6664,6665,6666,6667,6668,6669,6670,6671,4166,6672,4832, # 6304
3952,6673,6674,6675,6676,4833,6677,6678,6679,4167,6680,6681,6682,3198,6683,6684, # 6320
6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6695,6696,6697,4834,6698,6699, # 6336
6700,6701,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6712,6713,6714,6715, # 6352
6716,6717,6718,6719,6720,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731, # 6368
6732,6733,6734,4443,6735,6736,6737,6738,6739,6740,6741,6742,6743,6744,6745,4444, # 6384
6746,6747,6748,6749,6750,6751,6752,6753,6754,6755,6756,6757,6758,6759,6760,6761, # 6400
6762,6763,6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776,6777, # 6416
6778,6779,6780,6781,4168,6782,6783,3442,6784,6785,6786,6787,6788,6789,6790,6791, # 6432
4169,6792,6793,6794,6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806, # 6448
6807,6808,6809,6810,6811,4835,6812,6813,6814,4445,6815,6816,4446,6817,6818,6819, # 6464
6820,6821,6822,6823,6824,6825,6826,6827,6828,6829,6830,6831,6832,6833,6834,6835, # 6480
3548,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6846,4836,6847,6848,6849, # 6496
6850,6851,6852,6853,6854,3953,6855,6856,6857,6858,6859,6860,6861,6862,6863,6864, # 6512
6865,6866,6867,6868,6869,6870,6871,6872,6873,6874,6875,6876,6877,3199,6878,6879, # 6528
6880,6881,6882,4447,6883,6884,6885,6886,6887,6888,6889,6890,6891,6892,6893,6894, # 6544
6895,6896,6897,6898,6899,6900,6901,6902,6903,6904,4170,6905,6906,6907,6908,6909, # 6560
6910,6911,6912,6913,6914,6915,6916,6917,6918,6919,6920,6921,6922,6923,6924,6925, # 6576
6926,6927,4837,6928,6929,6930,6931,6932,6933,6934,6935,6936,3346,6937,6938,4838, # 6592
6939,6940,6941,4448,6942,6943,6944,6945,6946,4449,6947,6948,6949,6950,6951,6952, # 6608
6953,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,6967,6968, # 6624
6969,6970,6971,6972,6973,6974,6975,6976,6977,6978,6979,6980,6981,6982,6983,6984, # 6640
6985,6986,6987,6988,6989,6990,6991,6992,6993,6994,3671,6995,6996,6997,6998,4839, # 6656
6999,7000,7001,7002,3549,7003,7004,7005,7006,7007,7008,7009,7010,7011,7012,7013, # 6672
7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027,7028,7029, # 6688
7030,4840,7031,7032,7033,7034,7035,7036,7037,7038,4841,7039,7040,7041,7042,7043, # 6704
7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058,7059, # 6720
7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,2985,7071,7072,7073,7074, # 6736
7075,7076,7077,7078,7079,7080,4842,7081,7082,7083,7084,7085,7086,7087,7088,7089, # 6752
7090,7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105, # 6768
7106,7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,4450,7119,7120, # 6784
7121,7122,7123,7124,7125,7126,7127,7128,7129,7130,7131,7132,7133,7134,7135,7136, # 6800
7137,7138,7139,7140,7141,7142,7143,4843,7144,7145,7146,7147,7148,7149,7150,7151, # 6816
7152,7153,7154,7155,7156,7157,7158,7159,7160,7161,7162,7163,7164,7165,7166,7167, # 6832
7168,7169,7170,7171,7172,7173,7174,7175,7176,7177,7178,7179,7180,7181,7182,7183, # 6848
7184,7185,7186,7187,7188,4171,4172,7189,7190,7191,7192,7193,7194,7195,7196,7197, # 6864
7198,7199,7200,7201,7202,7203,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213, # 6880
7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229, # 6896
7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245, # 6912
7246,7247,7248,7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261, # 6928
7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277, # 6944
7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293, # 6960
7294,7295,7296,4844,7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308, # 6976
7309,7310,7311,7312,7313,7314,7315,7316,4451,7317,7318,7319,7320,7321,7322,7323, # 6992
7324,7325,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339, # 7008
7340,7341,7342,7343,7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,4173,7354, # 7024
7355,4845,7356,7357,7358,7359,7360,7361,7362,7363,7364,7365,7366,7367,7368,7369, # 7040
7370,7371,7372,7373,7374,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385, # 7056
7386,7387,7388,4846,7389,7390,7391,7392,7393,7394,7395,7396,7397,7398,7399,7400, # 7072
7401,7402,7403,7404,7405,3672,7406,7407,7408,7409,7410,7411,7412,7413,7414,7415, # 7088
7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431, # 7104
7432,7433,7434,7435,7436,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447, # 7120
7448,7449,7450,7451,7452,7453,4452,7454,3200,7455,7456,7457,7458,7459,7460,7461, # 7136
7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,4847,7475,7476, # 7152
7477,3133,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491, # 7168
7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,3347,7503,7504,7505,7506, # 7184
7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7521,4848, # 7200
7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535,7536,7537, # 7216
7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,3801,4849,7550,7551, # 7232
7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567, # 7248
7568,7569,3035,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582, # 7264
7583,7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598, # 7280
7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614, # 7296
7615,7616,4850,7617,7618,3802,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628, # 7312
7629,7630,7631,7632,4851,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643, # 7328
7644,7645,7646,7647,7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659, # 7344
7660,7661,7662,7663,7664,7665,7666,7667,7668,7669,7670,4453,7671,7672,7673,7674, # 7360
7675,7676,7677,7678,7679,7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690, # 7376
7691,7692,7693,7694,7695,7696,7697,3443,7698,7699,7700,7701,7702,4454,7703,7704, # 7392
7705,7706,7707,7708,7709,7710,7711,7712,7713,2472,7714,7715,7716,7717,7718,7719, # 7408
7720,7721,7722,7723,7724,7725,7726,7727,7728,7729,7730,7731,3954,7732,7733,7734, # 7424
7735,7736,7737,7738,7739,7740,7741,7742,7743,7744,7745,7746,7747,7748,7749,7750, # 7440
3134,7751,7752,4852,7753,7754,7755,4853,7756,7757,7758,7759,7760,4174,7761,7762, # 7456
7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,7777,7778, # 7472
7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793,7794, # 7488
7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,4854,7806,7807,7808,7809, # 7504
7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824,7825, # 7520
4855,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840, # 7536
7841,7842,7843,7844,7845,7846,7847,3955,7848,7849,7850,7851,7852,7853,7854,7855, # 7552
7856,7857,7858,7859,7860,3444,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870, # 7568
7871,7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886, # 7584
7887,7888,7889,7890,7891,4175,7892,7893,7894,7895,7896,4856,4857,7897,7898,7899, # 7600
7900,2598,7901,7902,7903,7904,7905,7906,7907,7908,4455,7909,7910,7911,7912,7913, # 7616
7914,3201,7915,7916,7917,7918,7919,7920,7921,4858,7922,7923,7924,7925,7926,7927, # 7632
7928,7929,7930,7931,7932,7933,7934,7935,7936,7937,7938,7939,7940,7941,7942,7943, # 7648
7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7957,7958,7959, # 7664
7960,7961,7962,7963,7964,7965,7966,7967,7968,7969,7970,7971,7972,7973,7974,7975, # 7680
7976,7977,7978,7979,7980,7981,4859,7982,7983,7984,7985,7986,7987,7988,7989,7990, # 7696
7991,7992,7993,7994,7995,7996,4860,7997,7998,7999,8000,8001,8002,8003,8004,8005, # 7712
8006,8007,8008,8009,8010,8011,8012,8013,8014,8015,8016,4176,8017,8018,8019,8020, # 7728
8021,8022,8023,4861,8024,8025,8026,8027,8028,8029,8030,8031,8032,8033,8034,8035, # 7744
8036,4862,4456,8037,8038,8039,8040,4863,8041,8042,8043,8044,8045,8046,8047,8048, # 7760
8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063,8064, # 7776
8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079,8080, # 7792
8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095,8096, # 7808
8097,8098,8099,4864,4177,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110, # 7824
8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,4178,8121,8122,8123,8124,8125, # 7840
8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141, # 7856
8142,8143,8144,8145,4865,4866,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155, # 7872
8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,4179,8166,8167,8168,8169,8170, # 7888
8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,4457,8182,8183,8184,8185, # 7904
8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201, # 7920
8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213,8214,8215,8216,8217, # 7936
8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229,8230,8231,8232,8233, # 7952
8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245,8246,8247,8248,8249, # 7968
8250,8251,8252,8253,8254,8255,8256,3445,8257,8258,8259,8260,8261,8262,4458,8263, # 7984
8264,8265,8266,8267,8268,8269,8270,8271,8272,4459,8273,8274,8275,8276,3550,8277, # 8000
8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,4460,8290,8291,8292, # 8016
8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,4867, # 8032
8308,8309,8310,8311,8312,3551,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322, # 8048
8323,8324,8325,8326,4868,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337, # 8064
8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353, # 8080
8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,4869,4461,8364,8365,8366,8367, # 8096
8368,8369,8370,4870,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382, # 8112
8383,8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398, # 8128
8399,8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,4871,8411,8412,8413, # 8144
8414,8415,8416,8417,8418,8419,8420,8421,8422,4462,8423,8424,8425,8426,8427,8428, # 8160
8429,8430,8431,8432,8433,2986,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443, # 8176
8444,8445,8446,8447,8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459, # 8192
8460,8461,8462,8463,8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475, # 8208
8476,8477,8478,4180,8479,8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490, # 8224
8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506, # 8240
8507,8508,8509,8510,8511,8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522, # 8256
8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533,8534,8535,8536,8537,8538, # 8272
8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554, # 8288
8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,4872,8565,8566,8567,8568,8569, # 8304
8570,8571,8572,8573,4873,8574,8575,8576,8577,8578,8579,8580,8581,8582,8583,8584, # 8320
8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597,8598,8599,8600, # 8336
8601,8602,8603,8604,8605,3803,8606,8607,8608,8609,8610,8611,8612,8613,4874,3804, # 8352
8614,8615,8616,8617,8618,8619,8620,8621,3956,8622,8623,8624,8625,8626,8627,8628, # 8368
8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,2865,8639,8640,8641,8642,8643, # 8384
8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,4463,8657,8658, # 8400
8659,4875,4876,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672, # 8416
8673,8674,8675,8676,8677,8678,8679,8680,8681,4464,8682,8683,8684,8685,8686,8687, # 8432
8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703, # 8448
8704,8705,8706,8707,8708,8709,2261,8710,8711,8712,8713,8714,8715,8716,8717,8718, # 8464
8719,8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,4181, # 8480
8734,8735,8736,8737,8738,8739,8740,8741,8742,8743,8744,8745,8746,8747,8748,8749, # 8496
8750,8751,8752,8753,8754,8755,8756,8757,8758,8759,8760,8761,8762,8763,4877,8764, # 8512
8765,8766,8767,8768,8769,8770,8771,8772,8773,8774,8775,8776,8777,8778,8779,8780, # 8528
8781,8782,8783,8784,8785,8786,8787,8788,4878,8789,4879,8790,8791,8792,4880,8793, # 8544
8794,8795,8796,8797,8798,8799,8800,8801,4881,8802,8803,8804,8805,8806,8807,8808, # 8560
8809,8810,8811,8812,8813,8814,8815,3957,8816,8817,8818,8819,8820,8821,8822,8823, # 8576
8824,8825,8826,8827,8828,8829,8830,8831,8832,8833,8834,8835,8836,8837,8838,8839, # 8592
8840,8841,8842,8843,8844,8845,8846,8847,4882,8848,8849,8850,8851,8852,8853,8854, # 8608
8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870, # 8624
8871,8872,8873,8874,8875,8876,8877,8878,8879,8880,8881,8882,8883,8884,3202,8885, # 8640
8886,8887,8888,8889,8890,8891,8892,8893,8894,8895,8896,8897,8898,8899,8900,8901, # 8656
8902,8903,8904,8905,8906,8907,8908,8909,8910,8911,8912,8913,8914,8915,8916,8917, # 8672
8918,8919,8920,8921,8922,8923,8924,4465,8925,8926,8927,8928,8929,8930,8931,8932, # 8688
4883,8933,8934,8935,8936,8937,8938,8939,8940,8941,8942,8943,2214,8944,8945,8946, # 8704
8947,8948,8949,8950,8951,8952,8953,8954,8955,8956,8957,8958,8959,8960,8961,8962, # 8720
8963,8964,8965,4884,8966,8967,8968,8969,8970,8971,8972,8973,8974,8975,8976,8977, # 8736
8978,8979,8980,8981,8982,8983,8984,8985,8986,8987,8988,8989,8990,8991,8992,4885, # 8752
8993,8994,8995,8996,8997,8998,8999,9000,9001,9002,9003,9004,9005,9006,9007,9008, # 8768
9009,9010,9011,9012,9013,9014,9015,9016,9017,9018,9019,9020,9021,4182,9022,9023, # 8784
9024,9025,9026,9027,9028,9029,9030,9031,9032,9033,9034,9035,9036,9037,9038,9039, # 8800
9040,9041,9042,9043,9044,9045,9046,9047,9048,9049,9050,9051,9052,9053,9054,9055, # 8816
9056,9057,9058,9059,9060,9061,9062,9063,4886,9064,9065,9066,9067,9068,9069,4887, # 8832
9070,9071,9072,9073,9074,9075,9076,9077,9078,9079,9080,9081,9082,9083,9084,9085, # 8848
9086,9087,9088,9089,9090,9091,9092,9093,9094,9095,9096,9097,9098,9099,9100,9101, # 8864
9102,9103,9104,9105,9106,9107,9108,9109,9110,9111,9112,9113,9114,9115,9116,9117, # 8880
9118,9119,9120,9121,9122,9123,9124,9125,9126,9127,9128,9129,9130,9131,9132,9133, # 8896
9134,9135,9136,9137,9138,9139,9140,9141,3958,9142,9143,9144,9145,9146,9147,9148, # 8912
9149,9150,9151,4888,9152,9153,9154,9155,9156,9157,9158,9159,9160,9161,9162,9163, # 8928
9164,9165,9166,9167,9168,9169,9170,9171,9172,9173,9174,9175,4889,9176,9177,9178, # 8944
9179,9180,9181,9182,9183,9184,9185,9186,9187,9188,9189,9190,9191,9192,9193,9194, # 8960
9195,9196,9197,9198,9199,9200,9201,9202,9203,4890,9204,9205,9206,9207,9208,9209, # 8976
9210,9211,9212,9213,9214,9215,9216,9217,9218,9219,9220,9221,9222,4466,9223,9224, # 8992
9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240, # 9008
9241,9242,9243,9244,9245,4891,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255, # 9024
9256,9257,4892,9258,9259,9260,9261,4893,4894,9262,9263,9264,9265,9266,9267,9268, # 9040
9269,9270,9271,9272,9273,4467,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283, # 9056
9284,9285,3673,9286,9287,9288,9289,9290,9291,9292,9293,9294,9295,9296,9297,9298, # 9072
9299,9300,9301,9302,9303,9304,9305,9306,9307,9308,9309,9310,9311,9312,9313,9314, # 9088
9315,9316,9317,9318,9319,9320,9321,9322,4895,9323,9324,9325,9326,9327,9328,9329, # 9104
9330,9331,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345, # 9120
9346,9347,4468,9348,9349,9350,9351,9352,9353,9354,9355,9356,9357,9358,9359,9360, # 9136
9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9372,9373,4896,9374,4469, # 9152
9375,9376,9377,9378,9379,4897,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389, # 9168
9390,9391,9392,9393,9394,9395,9396,9397,9398,9399,9400,9401,9402,9403,9404,9405, # 9184
9406,4470,9407,2751,9408,9409,3674,3552,9410,9411,9412,9413,9414,9415,9416,9417, # 9200
9418,9419,9420,9421,4898,9422,9423,9424,9425,9426,9427,9428,9429,3959,9430,9431, # 9216
9432,9433,9434,9435,9436,4471,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446, # 9232
9447,9448,9449,9450,3348,9451,9452,9453,9454,9455,9456,9457,9458,9459,9460,9461, # 9248
9462,9463,9464,9465,9466,9467,9468,9469,9470,9471,9472,4899,9473,9474,9475,9476, # 9264
9477,4900,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,3349,9489,9490, # 9280
9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506, # 9296
9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,4901,9521, # 9312
9522,9523,9524,9525,9526,4902,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536, # 9328
9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,9548,9549,9550,9551,9552, # 9344
9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568, # 9360
9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584, # 9376
3805,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599, # 9392
9600,9601,9602,4903,9603,9604,9605,9606,9607,4904,9608,9609,9610,9611,9612,9613, # 9408
9614,4905,9615,9616,9617,9618,9619,9620,9621,9622,9623,9624,9625,9626,9627,9628, # 9424
9629,9630,9631,9632,4906,9633,9634,9635,9636,9637,9638,9639,9640,9641,9642,9643, # 9440
4907,9644,9645,9646,9647,9648,9649,9650,9651,9652,9653,9654,9655,9656,9657,9658, # 9456
9659,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,4183,9673, # 9472
9674,9675,9676,9677,4908,9678,9679,9680,9681,4909,9682,9683,9684,9685,9686,9687, # 9488
9688,9689,9690,4910,9691,9692,9693,3675,9694,9695,9696,2945,9697,9698,9699,9700, # 9504
9701,9702,9703,9704,9705,4911,9706,9707,9708,9709,9710,9711,9712,9713,9714,9715, # 9520
9716,9717,9718,9719,9720,9721,9722,9723,9724,9725,9726,9727,9728,9729,9730,9731, # 9536
9732,9733,9734,9735,4912,9736,9737,9738,9739,9740,4913,9741,9742,9743,9744,9745, # 9552
9746,9747,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,4914,9759,9760, # 9568
9761,9762,9763,9764,9765,9766,9767,9768,9769,9770,9771,9772,9773,9774,9775,9776, # 9584
9777,9778,9779,9780,9781,9782,4915,9783,9784,9785,9786,9787,9788,9789,9790,9791, # 9600
9792,9793,4916,9794,9795,9796,9797,9798,9799,9800,9801,9802,9803,9804,9805,9806, # 9616
9807,9808,9809,9810,9811,9812,9813,9814,9815,9816,9817,9818,9819,9820,9821,9822, # 9632
9823,9824,9825,9826,9827,9828,9829,9830,9831,9832,9833,9834,9835,9836,9837,9838, # 9648
9839,9840,9841,9842,9843,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854, # 9664
9855,9856,9857,9858,9859,9860,9861,9862,9863,9864,9865,9866,9867,9868,4917,9869, # 9680
9870,9871,9872,9873,9874,9875,9876,9877,9878,9879,9880,9881,9882,9883,9884,9885, # 9696
9886,9887,9888,9889,9890,9891,9892,4472,9893,9894,9895,9896,9897,3806,9898,9899, # 9712
9900,9901,9902,9903,9904,9905,9906,9907,9908,9909,9910,9911,9912,9913,9914,4918, # 9728
9915,9916,9917,4919,9918,9919,9920,9921,4184,9922,9923,9924,9925,9926,9927,9928, # 9744
9929,9930,9931,9932,9933,9934,9935,9936,9937,9938,9939,9940,9941,9942,9943,9944, # 9760
9945,9946,4920,9947,9948,9949,9950,9951,9952,9953,9954,9955,4185,9956,9957,9958, # 9776
9959,9960,9961,9962,9963,9964,9965,4921,9966,9967,9968,4473,9969,9970,9971,9972, # 9792
9973,9974,9975,9976,9977,4474,9978,9979,9980,9981,9982,9983,9984,9985,9986,9987, # 9808
9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10002,10003, # 9824
10004,10005,10006,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10019, # 9840
10020,10021,4922,10022,4923,10023,10024,10025,10026,10027,10028,10029,10030,10031,10032,10033, # 9856
10034,10035,10036,10037,10038,10039,10040,10041,10042,10043,10044,10045,10046,10047,10048,4924, # 9872
10049,10050,10051,10052,10053,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10064, # 9888
10065,10066,10067,10068,10069,10070,10071,10072,10073,10074,10075,10076,10077,10078,10079,10080, # 9904
10081,10082,10083,10084,10085,10086,10087,4475,10088,10089,10090,10091,10092,10093,10094,10095, # 9920
10096,10097,4476,10098,10099,10100,10101,10102,10103,10104,10105,10106,10107,10108,10109,10110, # 9936
10111,2174,10112,10113,10114,10115,10116,10117,10118,10119,10120,10121,10122,10123,10124,10125, # 9952
10126,10127,10128,10129,10130,10131,10132,10133,10134,10135,10136,10137,10138,10139,10140,3807, # 9968
4186,4925,10141,10142,10143,10144,10145,10146,10147,4477,4187,10148,10149,10150,10151,10152, # 9984
10153,4188,10154,10155,10156,10157,10158,10159,10160,10161,4926,10162,10163,10164,10165,10166, #10000
10167,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182, #10016
10183,10184,10185,10186,10187,10188,10189,10190,10191,10192,3203,10193,10194,10195,10196,10197, #10032
10198,10199,10200,4478,10201,10202,10203,10204,4479,10205,10206,10207,10208,10209,10210,10211, #10048
10212,10213,10214,10215,10216,10217,10218,10219,10220,10221,10222,10223,10224,10225,10226,10227, #10064
10228,10229,10230,10231,10232,10233,10234,4927,10235,10236,10237,10238,10239,10240,10241,10242, #10080
10243,10244,10245,10246,10247,10248,10249,10250,10251,10252,10253,10254,10255,10256,10257,10258, #10096
10259,10260,10261,10262,10263,10264,10265,10266,10267,10268,10269,10270,10271,10272,10273,4480, #10112
4928,4929,10274,10275,10276,10277,10278,10279,10280,10281,10282,10283,10284,10285,10286,10287, #10128
10288,10289,10290,10291,10292,10293,10294,10295,10296,10297,10298,10299,10300,10301,10302,10303, #10144
10304,10305,10306,10307,10308,10309,10310,10311,10312,10313,10314,10315,10316,10317,10318,10319, #10160
10320,10321,10322,10323,10324,10325,10326,10327,10328,10329,10330,10331,10332,10333,10334,4930, #10176
10335,10336,10337,10338,10339,10340,10341,10342,4931,10343,10344,10345,10346,10347,10348,10349, #10192
10350,10351,10352,10353,10354,10355,3088,10356,2786,10357,10358,10359,10360,4189,10361,10362, #10208
10363,10364,10365,10366,10367,10368,10369,10370,10371,10372,10373,10374,10375,4932,10376,10377, #10224
10378,10379,10380,10381,10382,10383,10384,10385,10386,10387,10388,10389,10390,10391,10392,4933, #10240
10393,10394,10395,4934,10396,10397,10398,10399,10400,10401,10402,10403,10404,10405,10406,10407, #10256
10408,10409,10410,10411,10412,3446,10413,10414,10415,10416,10417,10418,10419,10420,10421,10422, #10272
10423,4935,10424,10425,10426,10427,10428,10429,10430,4936,10431,10432,10433,10434,10435,10436, #10288
10437,10438,10439,10440,10441,10442,10443,4937,10444,10445,10446,10447,4481,10448,10449,10450, #10304
10451,10452,10453,10454,10455,10456,10457,10458,10459,10460,10461,10462,10463,10464,10465,10466, #10320
10467,10468,10469,10470,10471,10472,10473,10474,10475,10476,10477,10478,10479,10480,10481,10482, #10336
10483,10484,10485,10486,10487,10488,10489,10490,10491,10492,10493,10494,10495,10496,10497,10498, #10352
10499,10500,10501,10502,10503,10504,10505,4938,10506,10507,10508,10509,10510,2552,10511,10512, #10368
10513,10514,10515,10516,3447,10517,10518,10519,10520,10521,10522,10523,10524,10525,10526,10527, #10384
10528,10529,10530,10531,10532,10533,10534,10535,10536,10537,10538,10539,10540,10541,10542,10543, #10400
4482,10544,4939,10545,10546,10547,10548,10549,10550,10551,10552,10553,10554,10555,10556,10557, #10416
10558,10559,10560,10561,10562,10563,10564,10565,10566,10567,3676,4483,10568,10569,10570,10571, #10432
10572,3448,10573,10574,10575,10576,10577,10578,10579,10580,10581,10582,10583,10584,10585,10586, #10448
10587,10588,10589,10590,10591,10592,10593,10594,10595,10596,10597,10598,10599,10600,10601,10602, #10464
10603,10604,10605,10606,10607,10608,10609,10610,10611,10612,10613,10614,10615,10616,10617,10618, #10480
10619,10620,10621,10622,10623,10624,10625,10626,10627,4484,10628,10629,10630,10631,10632,4940, #10496
10633,10634,10635,10636,10637,10638,10639,10640,10641,10642,10643,10644,10645,10646,10647,10648, #10512
10649,10650,10651,10652,10653,10654,10655,10656,4941,10657,10658,10659,2599,10660,10661,10662, #10528
10663,10664,10665,10666,3089,10667,10668,10669,10670,10671,10672,10673,10674,10675,10676,10677, #10544
10678,10679,10680,4942,10681,10682,10683,10684,10685,10686,10687,10688,10689,10690,10691,10692, #10560
10693,10694,10695,10696,10697,4485,10698,10699,10700,10701,10702,10703,10704,4943,10705,3677, #10576
10706,10707,10708,10709,10710,10711,10712,4944,10713,10714,10715,10716,10717,10718,10719,10720, #10592
10721,10722,10723,10724,10725,10726,10727,10728,4945,10729,10730,10731,10732,10733,10734,10735, #10608
10736,10737,10738,10739,10740,10741,10742,10743,10744,10745,10746,10747,10748,10749,10750,10751, #10624
10752,10753,10754,10755,10756,10757,10758,10759,10760,10761,4946,10762,10763,10764,10765,10766, #10640
10767,4947,4948,10768,10769,10770,10771,10772,10773,10774,10775,10776,10777,10778,10779,10780, #10656
10781,10782,10783,10784,10785,10786,10787,10788,10789,10790,10791,10792,10793,10794,10795,10796, #10672
10797,10798,10799,10800,10801,10802,10803,10804,10805,10806,10807,10808,10809,10810,10811,10812, #10688
10813,10814,10815,10816,10817,10818,10819,10820,10821,10822,10823,10824,10825,10826,10827,10828, #10704
10829,10830,10831,10832,10833,10834,10835,10836,10837,10838,10839,10840,10841,10842,10843,10844, #10720
10845,10846,10847,10848,10849,10850,10851,10852,10853,10854,10855,10856,10857,10858,10859,10860, #10736
10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10871,10872,10873,10874,10875,10876, #10752
10877,10878,4486,10879,10880,10881,10882,10883,10884,10885,4949,10886,10887,10888,10889,10890, #10768
10891,10892,10893,10894,10895,10896,10897,10898,10899,10900,10901,10902,10903,10904,10905,10906, #10784
10907,10908,10909,10910,10911,10912,10913,10914,10915,10916,10917,10918,10919,4487,10920,10921, #10800
10922,10923,10924,10925,10926,10927,10928,10929,10930,10931,10932,4950,10933,10934,10935,10936, #10816
10937,10938,10939,10940,10941,10942,10943,10944,10945,10946,10947,10948,10949,4488,10950,10951, #10832
10952,10953,10954,10955,10956,10957,10958,10959,4190,10960,10961,10962,10963,10964,10965,10966, #10848
10967,10968,10969,10970,10971,10972,10973,10974,10975,10976,10977,10978,10979,10980,10981,10982, #10864
10983,10984,10985,10986,10987,10988,10989,10990,10991,10992,10993,10994,10995,10996,10997,10998, #10880
10999,11000,11001,11002,11003,11004,11005,11006,3960,11007,11008,11009,11010,11011,11012,11013, #10896
11014,11015,11016,11017,11018,11019,11020,11021,11022,11023,11024,11025,11026,11027,11028,11029, #10912
11030,11031,11032,4951,11033,11034,11035,11036,11037,11038,11039,11040,11041,11042,11043,11044, #10928
11045,11046,11047,4489,11048,11049,11050,11051,4952,11052,11053,11054,11055,11056,11057,11058, #10944
4953,11059,11060,11061,11062,11063,11064,11065,11066,11067,11068,11069,11070,11071,4954,11072, #10960
11073,11074,11075,11076,11077,11078,11079,11080,11081,11082,11083,11084,11085,11086,11087,11088, #10976
11089,11090,11091,11092,11093,11094,11095,11096,11097,11098,11099,11100,11101,11102,11103,11104, #10992
11105,11106,11107,11108,11109,11110,11111,11112,11113,11114,11115,3808,11116,11117,11118,11119, #11008
11120,11121,11122,11123,11124,11125,11126,11127,11128,11129,11130,11131,11132,11133,11134,4955, #11024
11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148,11149,11150, #11040
11151,11152,11153,11154,11155,11156,11157,11158,11159,11160,11161,4956,11162,11163,11164,11165, #11056
11166,11167,11168,11169,11170,11171,11172,11173,11174,11175,11176,11177,11178,11179,11180,4957, #11072
11181,11182,11183,11184,11185,11186,4958,11187,11188,11189,11190,11191,11192,11193,11194,11195, #11088
11196,11197,11198,11199,11200,3678,11201,11202,11203,11204,11205,11206,4191,11207,11208,11209, #11104
11210,11211,11212,11213,11214,11215,11216,11217,11218,11219,11220,11221,11222,11223,11224,11225, #11120
11226,11227,11228,11229,11230,11231,11232,11233,11234,11235,11236,11237,11238,11239,11240,11241, #11136
11242,11243,11244,11245,11246,11247,11248,11249,11250,11251,4959,11252,11253,11254,11255,11256, #11152
11257,11258,11259,11260,11261,11262,11263,11264,11265,11266,11267,11268,11269,11270,11271,11272, #11168
11273,11274,11275,11276,11277,11278,11279,11280,11281,11282,11283,11284,11285,11286,11287,11288, #11184
11289,11290,11291,11292,11293,11294,11295,11296,11297,11298,11299,11300,11301,11302,11303,11304, #11200
11305,11306,11307,11308,11309,11310,11311,11312,11313,11314,3679,11315,11316,11317,11318,4490, #11216
11319,11320,11321,11322,11323,11324,11325,11326,11327,11328,11329,11330,11331,11332,11333,11334, #11232
11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,4960,11348,11349, #11248
11350,11351,11352,11353,11354,11355,11356,11357,11358,11359,11360,11361,11362,11363,11364,11365, #11264
11366,11367,11368,11369,11370,11371,11372,11373,11374,11375,11376,11377,3961,4961,11378,11379, #11280
11380,11381,11382,11383,11384,11385,11386,11387,11388,11389,11390,11391,11392,11393,11394,11395, #11296
11396,11397,4192,11398,11399,11400,11401,11402,11403,11404,11405,11406,11407,11408,11409,11410, #11312
11411,4962,11412,11413,11414,11415,11416,11417,11418,11419,11420,11421,11422,11423,11424,11425, #11328
11426,11427,11428,11429,11430,11431,11432,11433,11434,11435,11436,11437,11438,11439,11440,11441, #11344
11442,11443,11444,11445,11446,11447,11448,11449,11450,11451,11452,11453,11454,11455,11456,11457, #11360
11458,11459,11460,11461,11462,11463,11464,11465,11466,11467,11468,11469,4963,11470,11471,4491, #11376
11472,11473,11474,11475,4964,11476,11477,11478,11479,11480,11481,11482,11483,11484,11485,11486, #11392
11487,11488,11489,11490,11491,11492,4965,11493,11494,11495,11496,11497,11498,11499,11500,11501, #11408
11502,11503,11504,11505,11506,11507,11508,11509,11510,11511,11512,11513,11514,11515,11516,11517, #11424
11518,11519,11520,11521,11522,11523,11524,11525,11526,11527,11528,11529,3962,11530,11531,11532, #11440
11533,11534,11535,11536,11537,11538,11539,11540,11541,11542,11543,11544,11545,11546,11547,11548, #11456
11549,11550,11551,11552,11553,11554,11555,11556,11557,11558,11559,11560,11561,11562,11563,11564, #11472
4193,4194,11565,11566,11567,11568,11569,11570,11571,11572,11573,11574,11575,11576,11577,11578, #11488
11579,11580,11581,11582,11583,11584,11585,11586,11587,11588,11589,11590,11591,4966,4195,11592, #11504
11593,11594,11595,11596,11597,11598,11599,11600,11601,11602,11603,11604,3090,11605,11606,11607, #11520
11608,11609,11610,4967,11611,11612,11613,11614,11615,11616,11617,11618,11619,11620,11621,11622, #11536
11623,11624,11625,11626,11627,11628,11629,11630,11631,11632,11633,11634,11635,11636,11637,11638, #11552
11639,11640,11641,11642,11643,11644,11645,11646,11647,11648,11649,11650,11651,11652,11653,11654, #11568
11655,11656,11657,11658,11659,11660,11661,11662,11663,11664,11665,11666,11667,11668,11669,11670, #11584
11671,11672,11673,11674,4968,11675,11676,11677,11678,11679,11680,11681,11682,11683,11684,11685, #11600
11686,11687,11688,11689,11690,11691,11692,11693,3809,11694,11695,11696,11697,11698,11699,11700, #11616
11701,11702,11703,11704,11705,11706,11707,11708,11709,11710,11711,11712,11713,11714,11715,11716, #11632
11717,11718,3553,11719,11720,11721,11722,11723,11724,11725,11726,11727,11728,11729,11730,4969, #11648
11731,11732,11733,11734,11735,11736,11737,11738,11739,11740,4492,11741,11742,11743,11744,11745, #11664
11746,11747,11748,11749,11750,11751,11752,4970,11753,11754,11755,11756,11757,11758,11759,11760, #11680
11761,11762,11763,11764,11765,11766,11767,11768,11769,11770,11771,11772,11773,11774,11775,11776, #11696
11777,11778,11779,11780,11781,11782,11783,11784,11785,11786,11787,11788,11789,11790,4971,11791, #11712
11792,11793,11794,11795,11796,11797,4972,11798,11799,11800,11801,11802,11803,11804,11805,11806, #11728
11807,11808,11809,11810,4973,11811,11812,11813,11814,11815,11816,11817,11818,11819,11820,11821, #11744
11822,11823,11824,11825,11826,11827,11828,11829,11830,11831,11832,11833,11834,3680,3810,11835, #11760
11836,4974,11837,11838,11839,11840,11841,11842,11843,11844,11845,11846,11847,11848,11849,11850, #11776
11851,11852,11853,11854,11855,11856,11857,11858,11859,11860,11861,11862,11863,11864,11865,11866, #11792
11867,11868,11869,11870,11871,11872,11873,11874,11875,11876,11877,11878,11879,11880,11881,11882, #11808
11883,11884,4493,11885,11886,11887,11888,11889,11890,11891,11892,11893,11894,11895,11896,11897, #11824
11898,11899,11900,11901,11902,11903,11904,11905,11906,11907,11908,11909,11910,11911,11912,11913, #11840
11914,11915,4975,11916,11917,11918,11919,11920,11921,11922,11923,11924,11925,11926,11927,11928, #11856
11929,11930,11931,11932,11933,11934,11935,11936,11937,11938,11939,11940,11941,11942,11943,11944, #11872
11945,11946,11947,11948,11949,4976,11950,11951,11952,11953,11954,11955,11956,11957,11958,11959, #11888
11960,11961,11962,11963,11964,11965,11966,11967,11968,11969,11970,11971,11972,11973,11974,11975, #11904
11976,11977,11978,11979,11980,11981,11982,11983,11984,11985,11986,11987,4196,11988,11989,11990, #11920
11991,11992,4977,11993,11994,11995,11996,11997,11998,11999,12000,12001,12002,12003,12004,12005, #11936
12006,12007,12008,12009,12010,12011,12012,12013,12014,12015,12016,12017,12018,12019,12020,12021, #11952
12022,12023,12024,12025,12026,12027,12028,12029,12030,12031,12032,12033,12034,12035,12036,12037, #11968
12038,12039,12040,12041,12042,12043,12044,12045,12046,12047,12048,12049,12050,12051,12052,12053, #11984
12054,12055,12056,12057,12058,12059,12060,12061,4978,12062,12063,12064,12065,12066,12067,12068, #12000
12069,12070,12071,12072,12073,12074,12075,12076,12077,12078,12079,12080,12081,12082,12083,12084, #12016
12085,12086,12087,12088,12089,12090,12091,12092,12093,12094,12095,12096,12097,12098,12099,12100, #12032
12101,12102,12103,12104,12105,12106,12107,12108,12109,12110,12111,12112,12113,12114,12115,12116, #12048
12117,12118,12119,12120,12121,12122,12123,4979,12124,12125,12126,12127,12128,4197,12129,12130, #12064
12131,12132,12133,12134,12135,12136,12137,12138,12139,12140,12141,12142,12143,12144,12145,12146, #12080
12147,12148,12149,12150,12151,12152,12153,12154,4980,12155,12156,12157,12158,12159,12160,4494, #12096
12161,12162,12163,12164,3811,12165,12166,12167,12168,12169,4495,12170,12171,4496,12172,12173, #12112
12174,12175,12176,3812,12177,12178,12179,12180,12181,12182,12183,12184,12185,12186,12187,12188, #12128
12189,12190,12191,12192,12193,12194,12195,12196,12197,12198,12199,12200,12201,12202,12203,12204, #12144
12205,12206,12207,12208,12209,12210,12211,12212,12213,12214,12215,12216,12217,12218,12219,12220, #12160
12221,4981,12222,12223,12224,12225,12226,12227,12228,12229,12230,12231,12232,12233,12234,12235, #12176
4982,12236,12237,12238,12239,12240,12241,12242,12243,12244,12245,4983,12246,12247,12248,12249, #12192
4984,12250,12251,12252,12253,12254,12255,12256,12257,12258,12259,12260,12261,12262,12263,12264, #12208
4985,12265,4497,12266,12267,12268,12269,12270,12271,12272,12273,12274,12275,12276,12277,12278, #12224
12279,12280,12281,12282,12283,12284,12285,12286,12287,4986,12288,12289,12290,12291,12292,12293, #12240
12294,12295,12296,2473,12297,12298,12299,12300,12301,12302,12303,12304,12305,12306,12307,12308, #12256
12309,12310,12311,12312,12313,12314,12315,12316,12317,12318,12319,3963,12320,12321,12322,12323, #12272
12324,12325,12326,12327,12328,12329,12330,12331,12332,4987,12333,12334,12335,12336,12337,12338, #12288
12339,12340,12341,12342,12343,12344,12345,12346,12347,12348,12349,12350,12351,12352,12353,12354, #12304
12355,12356,12357,12358,12359,3964,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369, #12320
12370,3965,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384, #12336
12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400, #12352
12401,12402,12403,12404,12405,12406,12407,12408,4988,12409,12410,12411,12412,12413,12414,12415, #12368
12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431, #12384
12432,12433,12434,12435,12436,12437,12438,3554,12439,12440,12441,12442,12443,12444,12445,12446, #12400
12447,12448,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462, #12416
12463,12464,4989,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477, #12432
12478,12479,12480,4990,12481,12482,12483,12484,12485,12486,12487,12488,12489,4498,12490,12491, #12448
12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507, #12464
12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523, #12480
12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,12535,12536,12537,12538,12539, #12496
12540,12541,12542,12543,12544,12545,12546,12547,12548,12549,12550,12551,4991,12552,12553,12554, #12512
12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570, #12528
12571,12572,12573,12574,12575,12576,12577,12578,3036,12579,12580,12581,12582,12583,3966,12584, #12544
12585,12586,12587,12588,12589,12590,12591,12592,12593,12594,12595,12596,12597,12598,12599,12600, #12560
12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616, #12576
12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632, #12592
12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,4499,12647, #12608
12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663, #12624
12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679, #12640
12680,12681,12682,12683,12684,12685,12686,12687,12688,12689,12690,12691,12692,12693,12694,12695, #12656
12696,12697,12698,4992,12699,12700,12701,12702,12703,12704,12705,12706,12707,12708,12709,12710, #12672
12711,12712,12713,12714,12715,12716,12717,12718,12719,12720,12721,12722,12723,12724,12725,12726, #12688
12727,12728,12729,12730,12731,12732,12733,12734,12735,12736,12737,12738,12739,12740,12741,12742, #12704
12743,12744,12745,12746,12747,12748,12749,12750,12751,12752,12753,12754,12755,12756,12757,12758, #12720
12759,12760,12761,12762,12763,12764,12765,12766,12767,12768,12769,12770,12771,12772,12773,12774, #12736
12775,12776,12777,12778,4993,2175,12779,12780,12781,12782,12783,12784,12785,12786,4500,12787, #12752
12788,12789,12790,12791,12792,12793,12794,12795,12796,12797,12798,12799,12800,12801,12802,12803, #12768
12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,12815,12816,12817,12818,12819, #12784
12820,12821,12822,12823,12824,12825,12826,4198,3967,12827,12828,12829,12830,12831,12832,12833, #12800
12834,12835,12836,12837,12838,12839,12840,12841,12842,12843,12844,12845,12846,12847,12848,12849, #12816
12850,12851,12852,12853,12854,12855,12856,12857,12858,12859,12860,12861,4199,12862,12863,12864, #12832
12865,12866,12867,12868,12869,12870,12871,12872,12873,12874,12875,12876,12877,12878,12879,12880, #12848
12881,12882,12883,12884,12885,12886,12887,4501,12888,12889,12890,12891,12892,12893,12894,12895, #12864
12896,12897,12898,12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,12911, #12880
12912,4994,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,12923,12924,12925,12926, #12896
12927,12928,12929,12930,12931,12932,12933,12934,12935,12936,12937,12938,12939,12940,12941,12942, #12912
12943,12944,12945,12946,12947,12948,12949,12950,12951,12952,12953,12954,12955,12956,1772,12957, #12928
12958,12959,12960,12961,12962,12963,12964,12965,12966,12967,12968,12969,12970,12971,12972,12973, #12944
12974,12975,12976,12977,12978,12979,12980,12981,12982,12983,12984,12985,12986,12987,12988,12989, #12960
12990,12991,12992,12993,12994,12995,12996,12997,4502,12998,4503,12999,13000,13001,13002,13003, #12976
4504,13004,13005,13006,13007,13008,13009,13010,13011,13012,13013,13014,13015,13016,13017,13018, #12992
13019,13020,13021,13022,13023,13024,13025,13026,13027,13028,13029,3449,13030,13031,13032,13033, #13008
13034,13035,13036,13037,13038,13039,13040,13041,13042,13043,13044,13045,13046,13047,13048,13049, #13024
13050,13051,13052,13053,13054,13055,13056,13057,13058,13059,13060,13061,13062,13063,13064,13065, #13040
13066,13067,13068,13069,13070,13071,13072,13073,13074,13075,13076,13077,13078,13079,13080,13081, #13056
13082,13083,13084,13085,13086,13087,13088,13089,13090,13091,13092,13093,13094,13095,13096,13097, #13072
13098,13099,13100,13101,13102,13103,13104,13105,13106,13107,13108,13109,13110,13111,13112,13113, #13088
13114,13115,13116,13117,13118,3968,13119,4995,13120,13121,13122,13123,13124,13125,13126,13127, #13104
4505,13128,13129,13130,13131,13132,13133,13134,4996,4506,13135,13136,13137,13138,13139,4997, #13120
13140,13141,13142,13143,13144,13145,13146,13147,13148,13149,13150,13151,13152,13153,13154,13155, #13136
13156,13157,13158,13159,4998,13160,13161,13162,13163,13164,13165,13166,13167,13168,13169,13170, #13152
13171,13172,13173,13174,13175,13176,4999,13177,13178,13179,13180,13181,13182,13183,13184,13185, #13168
13186,13187,13188,13189,13190,13191,13192,13193,13194,13195,13196,13197,13198,13199,13200,13201, #13184
13202,13203,13204,13205,13206,5000,13207,13208,13209,13210,13211,13212,13213,13214,13215,13216, #13200
13217,13218,13219,13220,13221,13222,13223,13224,13225,13226,13227,4200,5001,13228,13229,13230, #13216
13231,13232,13233,13234,13235,13236,13237,13238,13239,13240,3969,13241,13242,13243,13244,3970, #13232
13245,13246,13247,13248,13249,13250,13251,13252,13253,13254,13255,13256,13257,13258,13259,13260, #13248
13261,13262,13263,13264,13265,13266,13267,13268,3450,13269,13270,13271,13272,13273,13274,13275, #13264
13276,5002,13277,13278,13279,13280,13281,13282,13283,13284,13285,13286,13287,13288,13289,13290, #13280
13291,13292,13293,13294,13295,13296,13297,13298,13299,13300,13301,13302,3813,13303,13304,13305, #13296
13306,13307,13308,13309,13310,13311,13312,13313,13314,13315,13316,13317,13318,13319,13320,13321, #13312
13322,13323,13324,13325,13326,13327,13328,4507,13329,13330,13331,13332,13333,13334,13335,13336, #13328
13337,13338,13339,13340,13341,5003,13342,13343,13344,13345,13346,13347,13348,13349,13350,13351, #13344
13352,13353,13354,13355,13356,13357,13358,13359,13360,13361,13362,13363,13364,13365,13366,13367, #13360
5004,13368,13369,13370,13371,13372,13373,13374,13375,13376,13377,13378,13379,13380,13381,13382, #13376
13383,13384,13385,13386,13387,13388,13389,13390,13391,13392,13393,13394,13395,13396,13397,13398, #13392
13399,13400,13401,13402,13403,13404,13405,13406,13407,13408,13409,13410,13411,13412,13413,13414, #13408
13415,13416,13417,13418,13419,13420,13421,13422,13423,13424,13425,13426,13427,13428,13429,13430, #13424
13431,13432,4508,13433,13434,13435,4201,13436,13437,13438,13439,13440,13441,13442,13443,13444, #13440
13445,13446,13447,13448,13449,13450,13451,13452,13453,13454,13455,13456,13457,5005,13458,13459, #13456
13460,13461,13462,13463,13464,13465,13466,13467,13468,13469,13470,4509,13471,13472,13473,13474, #13472
13475,13476,13477,13478,13479,13480,13481,13482,13483,13484,13485,13486,13487,13488,13489,13490, #13488
13491,13492,13493,13494,13495,13496,13497,13498,13499,13500,13501,13502,13503,13504,13505,13506, #13504
13507,13508,13509,13510,13511,13512,13513,13514,13515,13516,13517,13518,13519,13520,13521,13522, #13520
13523,13524,13525,13526,13527,13528,13529,13530,13531,13532,13533,13534,13535,13536,13537,13538, #13536
13539,13540,13541,13542,13543,13544,13545,13546,13547,13548,13549,13550,13551,13552,13553,13554, #13552
13555,13556,13557,13558,13559,13560,13561,13562,13563,13564,13565,13566,13567,13568,13569,13570, #13568
13571,13572,13573,13574,13575,13576,13577,13578,13579,13580,13581,13582,13583,13584,13585,13586, #13584
13587,13588,13589,13590,13591,13592,13593,13594,13595,13596,13597,13598,13599,13600,13601,13602, #13600
13603,13604,13605,13606,13607,13608,13609,13610,13611,13612,13613,13614,13615,13616,13617,13618, #13616
13619,13620,13621,13622,13623,13624,13625,13626,13627,13628,13629,13630,13631,13632,13633,13634, #13632
13635,13636,13637,13638,13639,13640,13641,13642,5006,13643,13644,13645,13646,13647,13648,13649, #13648
13650,13651,5007,13652,13653,13654,13655,13656,13657,13658,13659,13660,13661,13662,13663,13664, #13664
13665,13666,13667,13668,13669,13670,13671,13672,13673,13674,13675,13676,13677,13678,13679,13680, #13680
13681,13682,13683,13684,13685,13686,13687,13688,13689,13690,13691,13692,13693,13694,13695,13696, #13696
13697,13698,13699,13700,13701,13702,13703,13704,13705,13706,13707,13708,13709,13710,13711,13712, #13712
13713,13714,13715,13716,13717,13718,13719,13720,13721,13722,13723,13724,13725,13726,13727,13728, #13728
13729,13730,13731,13732,13733,13734,13735,13736,13737,13738,13739,13740,13741,13742,13743,13744, #13744
13745,13746,13747,13748,13749,13750,13751,13752,13753,13754,13755,13756,13757,13758,13759,13760, #13760
13761,13762,13763,13764,13765,13766,13767,13768,13769,13770,13771,13772,13773,13774,3273,13775, #13776
13776,13777,13778,13779,13780,13781,13782,13783,13784,13785,13786,13787,13788,13789,13790,13791, #13792
13792,13793,13794,13795,13796,13797,13798,13799,13800,13801,13802,13803,13804,13805,13806,13807, #13808
13808,13809,13810,13811,13812,13813,13814,13815,13816,13817,13818,13819,13820,13821,13822,13823, #13824
13824,13825,13826,13827,13828,13829,13830,13831,13832,13833,13834,13835,13836,13837,13838,13839, #13840
13840,13841,13842,13843,13844,13845,13846,13847,13848,13849,13850,13851,13852,13853,13854,13855, #13856
13856,13857,13858,13859,13860,13861,13862,13863,13864,13865,13866,13867,13868,13869,13870,13871, #13872
13872,13873,13874,13875,13876,13877,13878,13879,13880,13881,13882,13883,13884,13885,13886,13887, #13888
13888,13889,13890,13891,13892,13893,13894,13895,13896,13897,13898,13899,13900,13901,13902,13903, #13904
13904,13905,13906,13907,13908,13909,13910,13911,13912,13913,13914,13915,13916,13917,13918,13919, #13920
13920,13921,13922,13923,13924,13925,13926,13927,13928,13929,13930,13931,13932,13933,13934,13935, #13936
13936,13937,13938,13939,13940,13941,13942,13943,13944,13945,13946,13947,13948,13949,13950,13951, #13952
13952,13953,13954,13955,13956,13957,13958,13959,13960,13961,13962,13963,13964,13965,13966,13967, #13968
13968,13969,13970,13971,13972] #13973
end

View File

@@ -1,42 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is Mozilla Communicator client code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
module CharDet
class Big5Prober < MultiByteCharSetProber
def initialize
super
@_mCodingSM = CodingStateMachine.new(Big5SMModel)
@_mDistributionAnalyzer = Big5DistributionAnalysis.new()
reset()
end
def get_charset_name
return "Big5"
end
end
end

View File

@@ -1,238 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is Mozilla Communicator client code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998
# the Initial Developer. All Rights Reserved.
#
# Contributor(s)
# Jeff Hodges
# Mark Pilgrim - port to Python
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
module CharDet
ENOUGH_DATA_THRESHOLD = 1024
SURE_YES = 0.99
SURE_NO = 0.01
class CharDistributionAnalysis
def initialize
@_mCharToFreqOrder = nil # Mapping table to get frequency order from char order (get from GetOrder())
@_mTableSize = nil # Size of above table
@_mTypicalDistributionRatio = nil # This is a constant value which varies from language to language, used in calculating confidence. See http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html for further detail.
reset()
end
def reset
# # """reset analyser, clear any state"""
@_mDone = false # If this flag is set to constants.True, detection is done and conclusion has been made
@_mTotalChars = 0 # Total characters encountered
@_mFreqChars = 0 # The number of characters whose frequency order is less than 512
end
def feed(aStr, aCharLen)
# # """feed a character with known length"""
if aCharLen == 2
# we only care about 2-bytes character in our distribution analysis
order = get_order(aStr)
else
order = -1
end
if order >= 0
@_mTotalChars += 1
# order is valid
if order < @_mTableSize
if 512 > @_mCharToFreqOrder[order]
@_mFreqChars += 1
end
end
end
end
def get_confidence
# """return confidence based on existing data"""
# if we didn't receive any character in our consideration range, return negative answer
if @_mTotalChars <= 0
return SURE_NO
end
if @_mTotalChars != @_mFreqChars
r = @_mFreqChars / ((@_mTotalChars - @_mFreqChars) * @_mTypicalDistributionRatio)
if r < SURE_YES
return r
end
end
# normalize confidence (we don't want to be 100% sure)
return SURE_YES
end
def got_enough_data
# It is not necessary to receive all data to draw conclusion. For charset detection,
# certain amount of data is enough
return @_mTotalChars > ENOUGH_DATA_THRESHOLD
end
def get_order(aStr)
# We do not handle characters based on the original encoding string, but
# convert this encoding string to a number, here called order.
# This allows multiple encodings of a language to share one frequency table.
return -1
end
end
class EUCTWDistributionAnalysis < CharDistributionAnalysis
def initialize
super()
@_mCharToFreqOrder = EUCTWCharToFreqOrder
@_mTableSize = EUCTW_TABLE_SIZE
@_mTypicalDistributionRatio = EUCTW_TYPICAL_DISTRIBUTION_RATIO
end
def get_order(aStr)
# for euc-TW encoding, we are interested
# first byte range: 0xc4 -- 0xfe
# second byte range: 0xa1 -- 0xfe
# no validation needed here. State machine has done that
if aStr[0..0] >= "\xC4"
return 94 * (aStr[0] - 0xC4) + aStr[1] - 0xA1
else
return -1
end
end
end
class EUCKRDistributionAnalysis < CharDistributionAnalysis
def initialize
super()
@_mCharToFreqOrder = EUCKRCharToFreqOrder
@_mTableSize = EUCKR_TABLE_SIZE
@_mTypicalDistributionRatio = EUCKR_TYPICAL_DISTRIBUTION_RATIO
end
def get_order(aStr)
# for euc-KR encoding, we are interested
# first byte range: 0xb0 -- 0xfe
# second byte range: 0xa1 -- 0xfe
# no validation needed here. State machine has done that
if aStr[0..0] >= "\xB0"
return 94 * (aStr[0] - 0xB0) + aStr[1] - 0xA1
else
return -1
end
end
end
class GB2312DistributionAnalysis < CharDistributionAnalysis
def initialize
super()
@_mCharToFreqOrder = GB2312CharToFreqOrder
@_mTableSize = GB2312_TABLE_SIZE
@_mTypicalDistributionRatio = GB2312_TYPICAL_DISTRIBUTION_RATIO
end
def get_order(aStr)
# for GB2312 encoding, we are interested
# first byte range: 0xb0 -- 0xfe
# second byte range: 0xa1 -- 0xfe
# no validation needed here. State machine has done that
if (aStr[0..0] >= "\xB0") and (aStr[1..1] >= "\xA1")
return 94 * (aStr[0] - 0xB0) + aStr[1] - 0xA1
else
return -1
end
end
end
class Big5DistributionAnalysis < CharDistributionAnalysis
def initialize
super
@_mCharToFreqOrder = Big5CharToFreqOrder
@_mTableSize = BIG5_TABLE_SIZE
@_mTypicalDistributionRatio = BIG5_TYPICAL_DISTRIBUTION_RATIO
end
def get_order(aStr)
# for big5 encoding, we are interested
# first byte range: 0xa4 -- 0xfe
# second byte range: 0x40 -- 0x7e , 0xa1 -- 0xfe
# no validation needed here. State machine has done that
if aStr[0..0] >= "\xA4"
if aStr[1..1] >= "\xA1"
return 157 * (aStr[0] - 0xA4) + aStr[1] - 0xA1 + 63
else
return 157 * (aStr[0] - 0xA4) + aStr[1] - 0x40
end
else
return -1
end
end
end
class SJISDistributionAnalysis < CharDistributionAnalysis
def initialize
super()
@_mCharToFreqOrder = JISCharToFreqOrder
@_mTableSize = JIS_TABLE_SIZE
@_mTypicalDistributionRatio = JIS_TYPICAL_DISTRIBUTION_RATIO
end
def get_order(aStr)
# for sjis encoding, we are interested
# first byte range: 0x81 -- 0x9f , 0xe0 -- 0xfe
# second byte range: 0x40 -- 0x7e, 0x81 -- oxfe
# no validation needed here. State machine has done that
aStr = aStr[0..1].join if aStr.class == Array
if (aStr[0..0] >= "\x81") and (aStr[0..0] <= "\x9F")
order = 188 * (aStr[0] - 0x81)
elsif (aStr[0..0] >= "\xE0") and (aStr[0..0] <= "\xEF")
order = 188 * (aStr[0] - 0xE0 + 31)
else
return -1
end
order = order + aStr[1] - 0x40
if aStr[1..1] > "\x7F"
order =- 1
end
return order
end
end
class EUCJPDistributionAnalysis < CharDistributionAnalysis
def initialize
super()
@_mCharToFreqOrder = JISCharToFreqOrder
@_mTableSize = JIS_TABLE_SIZE
@_mTypicalDistributionRatio = JIS_TYPICAL_DISTRIBUTION_RATIO
end
def get_order(aStr)
# for euc-JP encoding, we are interested
# first byte range: 0xa0 -- 0xfe
# second byte range: 0xa1 -- 0xfe
# no validation needed here. State machine has done that
if aStr[0..0] >= "\xA0"
return 94 * (aStr[0] - 0xA1) + aStr[1] - 0xa1
else
return -1
end
end
end
end

View File

@@ -1,112 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is Mozilla Communicator client code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998
# the Initial Developer. All Rights Reserved.
#
# Contributor(s)
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
module CharDet
class CharSetGroupProber < CharSetProber
attr_accessor :_mProbers
def initialize
super
@_mActiveNum = 0
@_mProbers = []
@_mBestGuessProber = nil
end
def reset
super
@_mActiveNum = 0
for prober in @_mProbers
if prober
prober.reset()
prober.active = true
@_mActiveNum += 1
end
end
@_mBestGuessProber = nil
end
def get_charset_name
if not @_mBestGuessProber
get_confidence()
return nil unless @_mBestGuessProber
# self._mBestGuessProber = self._mProbers[0]
end
return @_mBestGuessProber.get_charset_name()
end
def feed(aBuf)
for prober in @_mProbers
next unless prober
next unless prober.active
st = prober.feed(aBuf)
next unless st
if st == EFoundIt
@_mBestGuessProber = prober
return get_state()
elsif st == ENotMe
prober.active = false
@_mActiveNum -= 1
if @_mActiveNum <= 0
@_mState = ENotMe
return get_state()
end
end
end
return get_state()
end
def get_confidence()
st = get_state()
if st == EFoundIt
return 0.99
elsif st == ENotMe
return 0.01
end
bestConf = 0.0
@_mBestGuessProber = nil
for prober in @_mProbers
next unless prober
unless prober.active
$stderr << "#{prober.get_charset_name()} not active\n" if $debug
next
end
cf = prober.get_confidence()
$stderr << "#{prober.get_charset_name} confidence = #{cf}\n" if $debug
if bestConf < cf
bestConf = cf
@_mBestGuessProber = prober
end
end
return 0.0 unless @_mBestGuessProber
return bestConf
# else
# self._mBestGuessProber = self._mProbers[0]
# return self._mBestGuessProber.get_confidence()
end
end
end

View File

@@ -1,75 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is Mozilla Universal charset detector code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 2001
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
# Shy Shalom - original C code
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
module CharDet
class CharSetProber
attr_accessor :active
def initialize
end
def reset
@_mState = EDetecting
end
def get_charset_name
return nil
end
def feed(aBuf)
end
def get_state
return @_mState
end
def get_confidence
return 0.0
end
def filter_high_bit_only(aBuf)
# DO NOT USE `gsub!`
# It will remove all characters from the buffer that is later used by
# other probers. This is because gsub! removes data from the instance variable
# that will be passed to later probers, while gsub makes a new instance variable
# that will not.
newBuf = aBuf.gsub(/([\x00-\x7F])+/, ' ')
return newBuf
end
def filter_without_english_letters(aBuf)
newBuf = aBuf.gsub(/([A-Za-z])+/,' ')
return newBuf
end
def filter_with_english_letters(aBuf)
# TODO
return aBuf
end
end
end

View File

@@ -1,64 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
module CharDet
class CodingStateMachine
def initialize(sm)
@_mModel = sm
@_mCurrentBytePos = 0
@_mCurrentCharLen = 0
reset()
end
def reset
@_mCurrentState = EStart
end
def next_state(c)
# for each byte we get its class
# if it is first byte, we also get byte length
byteCls = @_mModel['classTable'][c[0]]
if @_mCurrentState == EStart
@_mCurrentBytePos = 0
@_mCurrentCharLen = @_mModel['charLenTable'][byteCls]
end
# from byte's class and stateTable, we get its next state
@_mCurrentState = @_mModel['stateTable'][@_mCurrentState * @_mModel['classFactor'] + byteCls]
@_mCurrentBytePos += 1
return @_mCurrentState
end
def get_current_charlen
return @_mCurrentCharLen
end
def get_coding_state_machine
return @_mModel['name']
end
end
end

View File

@@ -1,42 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is Mozilla Universal charset detector code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 2001
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
# Shy Shalom - original C code
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
module CharDet
$debug = false
EDetecting = 0
EFoundIt = 1
ENotMe = 2
EStart = 0
EError = 1
EItsMe = 2
SHORTCUT_THRESHOLD = 0.95
end

View File

@@ -1,89 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
module CharDet
class EscCharSetProber < CharSetProber
def initialize
super()
@_mCodingSM = [ CodingStateMachine.new(HZSMModel),
CodingStateMachine.new(ISO2022CNSMModel),
CodingStateMachine.new(ISO2022JPSMModel),
CodingStateMachine.new(ISO2022KRSMModel) ]
reset()
end
def reset
super()
for codingSM in @_mCodingSM
next if not codingSM
codingSM.active = true
codingSM.reset()
end
@_mActiveSM = @_mCodingSM.length
@_mDetectedCharset = nil
end
def get_charset_name
return @_mDetectedCharset
end
def get_confidence
if @_mDetectedCharset
return 0.99
else
return 0.00
end
end
def feed(aBuf)
aBuf.each_byte do |b|
c = b.chr
for codingSM in @_mCodingSM
next unless codingSM
next unless codingSM.active
codingState = codingSM.next_state(c)
if codingState == EError
codingSM.active = false
@_mActiveSM -= 1
if @_mActiveSM <= 0
@_mState = ENotMe
return get_state()
end
elsif codingState == EItsMe
@_mState = EFoundIt
@_mDetectedCharset = codingSM.get_coding_state_machine()
return get_state()
end
end
end
return get_state()
end
end
end

View File

@@ -1,244 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Mark Pilgrim - port to Python
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
module CharDet
HZ_cls = [
1,0,0,0,0,0,0,0, # 00 - 07
0,0,0,0,0,0,0,0, # 08 - 0f
0,0,0,0,0,0,0,0, # 10 - 17
0,0,0,1,0,0,0,0, # 18 - 1f
0,0,0,0,0,0,0,0, # 20 - 27
0,0,0,0,0,0,0,0, # 28 - 2f
0,0,0,0,0,0,0,0, # 30 - 37
0,0,0,0,0,0,0,0, # 38 - 3f
0,0,0,0,0,0,0,0, # 40 - 47
0,0,0,0,0,0,0,0, # 48 - 4f
0,0,0,0,0,0,0,0, # 50 - 57
0,0,0,0,0,0,0,0, # 58 - 5f
0,0,0,0,0,0,0,0, # 60 - 67
0,0,0,0,0,0,0,0, # 68 - 6f
0,0,0,0,0,0,0,0, # 70 - 77
0,0,0,4,0,5,2,0, # 78 - 7f
1,1,1,1,1,1,1,1, # 80 - 87
1,1,1,1,1,1,1,1, # 88 - 8f
1,1,1,1,1,1,1,1, # 90 - 97
1,1,1,1,1,1,1,1, # 98 - 9f
1,1,1,1,1,1,1,1, # a0 - a7
1,1,1,1,1,1,1,1, # a8 - af
1,1,1,1,1,1,1,1, # b0 - b7
1,1,1,1,1,1,1,1, # b8 - bf
1,1,1,1,1,1,1,1, # c0 - c7
1,1,1,1,1,1,1,1, # c8 - cf
1,1,1,1,1,1,1,1, # d0 - d7
1,1,1,1,1,1,1,1, # d8 - df
1,1,1,1,1,1,1,1, # e0 - e7
1,1,1,1,1,1,1,1, # e8 - ef
1,1,1,1,1,1,1,1, # f0 - f7
1,1,1,1,1,1,1,1, # f8 - ff
]
HZ_st = [
EStart,EError, 3,EStart,EStart,EStart,EError,EError,# 00-07
EError,EError,EError,EError,EItsMe,EItsMe,EItsMe,EItsMe,# 08-0f
EItsMe,EItsMe,EError,EError,EStart,EStart, 4,EError,# 10-17
5,EError, 6,EError, 5, 5, 4,EError,# 18-1f
4,EError, 4, 4, 4,EError, 4,EError,# 20-27
4,EItsMe,EStart,EStart,EStart,EStart,EStart,EStart,# 28-2f
]
HZCharLenTable = [0, 0, 0, 0, 0, 0]
HZSMModel = {'classTable' => HZ_cls,
'classFactor' => 6,
'stateTable' => HZ_st,
'charLenTable' => HZCharLenTable,
'name' => "HZ-GB-2312"
}
ISO2022CN_cls = [
2,0,0,0,0,0,0,0, # 00 - 07
0,0,0,0,0,0,0,0, # 08 - 0f
0,0,0,0,0,0,0,0, # 10 - 17
0,0,0,1,0,0,0,0, # 18 - 1f
0,0,0,0,0,0,0,0, # 20 - 27
0,3,0,0,0,0,0,0, # 28 - 2f
0,0,0,0,0,0,0,0, # 30 - 37
0,0,0,0,0,0,0,0, # 38 - 3f
0,0,0,4,0,0,0,0, # 40 - 47
0,0,0,0,0,0,0,0, # 48 - 4f
0,0,0,0,0,0,0,0, # 50 - 57
0,0,0,0,0,0,0,0, # 58 - 5f
0,0,0,0,0,0,0,0, # 60 - 67
0,0,0,0,0,0,0,0, # 68 - 6f
0,0,0,0,0,0,0,0, # 70 - 77
0,0,0,0,0,0,0,0, # 78 - 7f
2,2,2,2,2,2,2,2, # 80 - 87
2,2,2,2,2,2,2,2, # 88 - 8f
2,2,2,2,2,2,2,2, # 90 - 97
2,2,2,2,2,2,2,2, # 98 - 9f
2,2,2,2,2,2,2,2, # a0 - a7
2,2,2,2,2,2,2,2, # a8 - af
2,2,2,2,2,2,2,2, # b0 - b7
2,2,2,2,2,2,2,2, # b8 - bf
2,2,2,2,2,2,2,2, # c0 - c7
2,2,2,2,2,2,2,2, # c8 - cf
2,2,2,2,2,2,2,2, # d0 - d7
2,2,2,2,2,2,2,2, # d8 - df
2,2,2,2,2,2,2,2, # e0 - e7
2,2,2,2,2,2,2,2, # e8 - ef
2,2,2,2,2,2,2,2, # f0 - f7
2,2,2,2,2,2,2,2, # f8 - ff
]
ISO2022CN_st = [
EStart, 3,EError,EStart,EStart,EStart,EStart,EStart,# 00-07
EStart,EError,EError,EError,EError,EError,EError,EError,# 08-0f
EError,EError,EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,# 10-17
EItsMe,EItsMe,EItsMe,EError,EError,EError, 4,EError,# 18-1f
EError,EError,EError,EItsMe,EError,EError,EError,EError,# 20-27
5, 6,EError,EError,EError,EError,EError,EError,# 28-2f
EError,EError,EError,EItsMe,EError,EError,EError,EError,# 30-37
EError,EError,EError,EError,EError,EItsMe,EError,EStart,# 38-3f
]
ISO2022CNCharLenTable = [0, 0, 0, 0, 0, 0, 0, 0, 0]
ISO2022CNSMModel = {'classTable' => ISO2022CN_cls,
'classFactor' => 9,
'stateTable' => ISO2022CN_st,
'charLenTable' => ISO2022CNCharLenTable,
'name' => "ISO-2022-CN"
}
ISO2022JP_cls = [
2,0,0,0,0,0,0,0, # 00 - 07
0,0,0,0,0,0,2,2, # 08 - 0f
0,0,0,0,0,0,0,0, # 10 - 17
0,0,0,1,0,0,0,0, # 18 - 1f
0,0,0,0,7,0,0,0, # 20 - 27
3,0,0,0,0,0,0,0, # 28 - 2f
0,0,0,0,0,0,0,0, # 30 - 37
0,0,0,0,0,0,0,0, # 38 - 3f
6,0,4,0,8,0,0,0, # 40 - 47
0,9,5,0,0,0,0,0, # 48 - 4f
0,0,0,0,0,0,0,0, # 50 - 57
0,0,0,0,0,0,0,0, # 58 - 5f
0,0,0,0,0,0,0,0, # 60 - 67
0,0,0,0,0,0,0,0, # 68 - 6f
0,0,0,0,0,0,0,0, # 70 - 77
0,0,0,0,0,0,0,0, # 78 - 7f
2,2,2,2,2,2,2,2, # 80 - 87
2,2,2,2,2,2,2,2, # 88 - 8f
2,2,2,2,2,2,2,2, # 90 - 97
2,2,2,2,2,2,2,2, # 98 - 9f
2,2,2,2,2,2,2,2, # a0 - a7
2,2,2,2,2,2,2,2, # a8 - af
2,2,2,2,2,2,2,2, # b0 - b7
2,2,2,2,2,2,2,2, # b8 - bf
2,2,2,2,2,2,2,2, # c0 - c7
2,2,2,2,2,2,2,2, # c8 - cf
2,2,2,2,2,2,2,2, # d0 - d7
2,2,2,2,2,2,2,2, # d8 - df
2,2,2,2,2,2,2,2, # e0 - e7
2,2,2,2,2,2,2,2, # e8 - ef
2,2,2,2,2,2,2,2, # f0 - f7
2,2,2,2,2,2,2,2, # f8 - ff
]
ISO2022JP_st = [
EStart, 3,EError,EStart,EStart,EStart,EStart,EStart,# 00-07
EStart,EStart,EError,EError,EError,EError,EError,EError,# 08-0f
EError,EError,EError,EError,EItsMe,EItsMe,EItsMe,EItsMe,# 10-17
EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,EError,EError,# 18-1f
EError, 5,EError,EError,EError, 4,EError,EError,# 20-27
EError,EError,EError, 6,EItsMe,EError,EItsMe,EError,# 28-2f
EError,EError,EError,EError,EError,EError,EItsMe,EItsMe,# 30-37
EError,EError,EError,EItsMe,EError,EError,EError,EError,# 38-3f
EError,EError,EError,EError,EItsMe,EError,EStart,EStart,# 40-47
]
ISO2022JPCharLenTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
ISO2022JPSMModel = {'classTable' => ISO2022JP_cls,
'classFactor' => 10,
'stateTable' => ISO2022JP_st,
'charLenTable' => ISO2022JPCharLenTable,
'name' => "ISO-2022-JP"
}
ISO2022KR_cls = [
2,0,0,0,0,0,0,0, # 00 - 07
0,0,0,0,0,0,0,0, # 08 - 0f
0,0,0,0,0,0,0,0, # 10 - 17
0,0,0,1,0,0,0,0, # 18 - 1f
0,0,0,0,3,0,0,0, # 20 - 27
0,4,0,0,0,0,0,0, # 28 - 2f
0,0,0,0,0,0,0,0, # 30 - 37
0,0,0,0,0,0,0,0, # 38 - 3f
0,0,0,5,0,0,0,0, # 40 - 47
0,0,0,0,0,0,0,0, # 48 - 4f
0,0,0,0,0,0,0,0, # 50 - 57
0,0,0,0,0,0,0,0, # 58 - 5f
0,0,0,0,0,0,0,0, # 60 - 67
0,0,0,0,0,0,0,0, # 68 - 6f
0,0,0,0,0,0,0,0, # 70 - 77
0,0,0,0,0,0,0,0, # 78 - 7f
2,2,2,2,2,2,2,2, # 80 - 87
2,2,2,2,2,2,2,2, # 88 - 8f
2,2,2,2,2,2,2,2, # 90 - 97
2,2,2,2,2,2,2,2, # 98 - 9f
2,2,2,2,2,2,2,2, # a0 - a7
2,2,2,2,2,2,2,2, # a8 - af
2,2,2,2,2,2,2,2, # b0 - b7
2,2,2,2,2,2,2,2, # b8 - bf
2,2,2,2,2,2,2,2, # c0 - c7
2,2,2,2,2,2,2,2, # c8 - cf
2,2,2,2,2,2,2,2, # d0 - d7
2,2,2,2,2,2,2,2, # d8 - df
2,2,2,2,2,2,2,2, # e0 - e7
2,2,2,2,2,2,2,2, # e8 - ef
2,2,2,2,2,2,2,2, # f0 - f7
2,2,2,2,2,2,2,2, # f8 - ff
]
ISO2022KR_st = [
EStart, 3,EError,EStart,EStart,EStart,EError,EError,# 00-07
EError,EError,EError,EError,EItsMe,EItsMe,EItsMe,EItsMe,# 08-0f
EItsMe,EItsMe,EError,EError,EError, 4,EError,EError,# 10-17
EError,EError,EError,EError, 5,EError,EError,EError,# 18-1f
EError,EError,EError,EItsMe,EStart,EStart,EStart,EStart,# 20-27
]
ISO2022KRCharLenTable = [0, 0, 0, 0, 0, 0]
ISO2022KRSMModel = {'classTable' => ISO2022KR_cls,
'classFactor' => 6,
'stateTable' => ISO2022KR_st,
'charLenTable' => ISO2022KRCharLenTable,
'name' => "ISO-2022-KR"
}
end

View File

@@ -1,88 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
module CharDet
class EUCJPProber < MultiByteCharSetProber
def initialize
super()
@_mCodingSM = CodingStateMachine.new(EUCJPSMModel)
@_mDistributionAnalyzer = EUCJPDistributionAnalysis.new()
@_mContextAnalyzer = EUCJPContextAnalysis.new()
reset
end
def reset
super()
@_mContextAnalyzer.reset()
end
def get_charset_name
return "EUC-JP"
end
def feed(aBuf)
aLen = aBuf.length
for i in (0...aLen)
codingState = @_mCodingSM.next_state(aBuf[i..i])
if codingState == EError
$stderr << "#{get_charset_name} prober hit error at byte #{i}\n" if $debug
@_mState = ENotMe
break
elsif codingState == EItsMe
@_mState = EFoundIt
break
elsif codingState == EStart
charLen = @_mCodingSM.get_current_charlen()
if i == 0
@_mLastChar[1] = aBuf[0..0]
@_mContextAnalyzer.feed(@_mLastChar, charLen)
@_mDistributionAnalyzer.feed(@_mLastChar, charLen)
else
@_mContextAnalyzer.feed(aBuf[i-1...i+1], charLen)
@_mDistributionAnalyzer.feed(aBuf[i-1...i+1], charLen)
end
end
end
@_mLastChar[0] = aBuf[aLen-1..aLen-1]
if get_state() == EDetecting
if @_mContextAnalyzer.got_enough_data() and (get_confidence() > SHORTCUT_THRESHOLD)
@_mState = EFoundIt
end
end
return get_state()
end
def get_confidence
l = [@_mContextAnalyzer.get_confidence,@_mDistributionAnalyzer.get_confidence]
return l.max
end
end
end

View File

@@ -1,596 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is Mozilla Communicator client code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Mark Pilgrim - port to Python
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
# Sampling from about 20M text materials include literature and computer technology
# 128 --> 0.79
# 256 --> 0.92
# 512 --> 0.986
# 1024 --> 0.99944
# 2048 --> 0.99999
#
# Idea Distribution Ratio = 0.98653 / (1-0.98653) = 73.24
# Random Distribution Ration = 512 / (2350-512) = 0.279.
#
# Typical Distribution Ratio
module CharDet
EUCKR_TYPICAL_DISTRIBUTION_RATIO = 6.0
EUCKR_TABLE_SIZE = 2352
# Char to FreqOrder table ,
EUCKRCharToFreqOrder = [
13, 130, 120,1396, 481,1719,1720, 328, 609, 212,1721, 707, 400, 299,1722, 87,
1397,1723, 104, 536,1117,1203,1724,1267, 685,1268, 508,1725,1726,1727,1728,1398,
1399,1729,1730,1731, 141, 621, 326,1057, 368,1732, 267, 488, 20,1733,1269,1734,
945,1400,1735, 47, 904,1270,1736,1737, 773, 248,1738, 409, 313, 786, 429,1739,
116, 987, 813,1401, 683, 75,1204, 145,1740,1741,1742,1743, 16, 847, 667, 622,
708,1744,1745,1746, 966, 787, 304, 129,1747, 60, 820, 123, 676,1748,1749,1750,
1751, 617,1752, 626,1753,1754,1755,1756, 653,1757,1758,1759,1760,1761,1762, 856,
344,1763,1764,1765,1766, 89, 401, 418, 806, 905, 848,1767,1768,1769, 946,1205,
709,1770,1118,1771, 241,1772,1773,1774,1271,1775, 569,1776, 999,1777,1778,1779,
1780, 337, 751,1058, 28, 628, 254,1781, 177, 906, 270, 349, 891,1079,1782, 19,
1783, 379,1784, 315,1785, 629, 754,1402, 559,1786, 636, 203,1206,1787, 710, 567,
1788, 935, 814,1789,1790,1207, 766, 528,1791,1792,1208,1793,1794,1795,1796,1797,
1403,1798,1799, 533,1059,1404,1405,1156,1406, 936, 884,1080,1800, 351,1801,1802,
1803,1804,1805, 801,1806,1807,1808,1119,1809,1157, 714, 474,1407,1810, 298, 899,
885,1811,1120, 802,1158,1812, 892,1813,1814,1408, 659,1815,1816,1121,1817,1818,
1819,1820,1821,1822, 319,1823, 594, 545,1824, 815, 937,1209,1825,1826, 573,1409,
1022,1827,1210,1828,1829,1830,1831,1832,1833, 556, 722, 807,1122,1060,1834, 697,
1835, 900, 557, 715,1836,1410, 540,1411, 752,1159, 294, 597,1211, 976, 803, 770,
1412,1837,1838, 39, 794,1413, 358,1839, 371, 925,1840, 453, 661, 788, 531, 723,
544,1023,1081, 869, 91,1841, 392, 430, 790, 602,1414, 677,1082, 457,1415,1416,
1842,1843, 475, 327,1024,1417, 795, 121,1844, 733, 403,1418,1845,1846,1847, 300,
119, 711,1212, 627,1848,1272, 207,1849,1850, 796,1213, 382,1851, 519,1852,1083,
893,1853,1854,1855, 367, 809, 487, 671,1856, 663,1857,1858, 956, 471, 306, 857,
1859,1860,1160,1084,1861,1862,1863,1864,1865,1061,1866,1867,1868,1869,1870,1871,
282, 96, 574,1872, 502,1085,1873,1214,1874, 907,1875,1876, 827, 977,1419,1420,
1421, 268,1877,1422,1878,1879,1880, 308,1881, 2, 537,1882,1883,1215,1884,1885,
127, 791,1886,1273,1423,1887, 34, 336, 404, 643,1888, 571, 654, 894, 840,1889,
0, 886,1274, 122, 575, 260, 908, 938,1890,1275, 410, 316,1891,1892, 100,1893,
1894,1123, 48,1161,1124,1025,1895, 633, 901,1276,1896,1897, 115, 816,1898, 317,
1899, 694,1900, 909, 734,1424, 572, 866,1425, 691, 85, 524,1010, 543, 394, 841,
1901,1902,1903,1026,1904,1905,1906,1907,1908,1909, 30, 451, 651, 988, 310,1910,
1911,1426, 810,1216, 93,1912,1913,1277,1217,1914, 858, 759, 45, 58, 181, 610,
269,1915,1916, 131,1062, 551, 443,1000, 821,1427, 957, 895,1086,1917,1918, 375,
1919, 359,1920, 687,1921, 822,1922, 293,1923,1924, 40, 662, 118, 692, 29, 939,
887, 640, 482, 174,1925, 69,1162, 728,1428, 910,1926,1278,1218,1279, 386, 870,
217, 854,1163, 823,1927,1928,1929,1930, 834,1931, 78,1932, 859,1933,1063,1934,
1935,1936,1937, 438,1164, 208, 595,1938,1939,1940,1941,1219,1125,1942, 280, 888,
1429,1430,1220,1431,1943,1944,1945,1946,1947,1280, 150, 510,1432,1948,1949,1950,
1951,1952,1953,1954,1011,1087,1955,1433,1043,1956, 881,1957, 614, 958,1064,1065,
1221,1958, 638,1001, 860, 967, 896,1434, 989, 492, 553,1281,1165,1959,1282,1002,
1283,1222,1960,1961,1962,1963, 36, 383, 228, 753, 247, 454,1964, 876, 678,1965,
1966,1284, 126, 464, 490, 835, 136, 672, 529, 940,1088,1435, 473,1967,1968, 467,
50, 390, 227, 587, 279, 378, 598, 792, 968, 240, 151, 160, 849, 882,1126,1285,
639,1044, 133, 140, 288, 360, 811, 563,1027, 561, 142, 523,1969,1970,1971, 7,
103, 296, 439, 407, 506, 634, 990,1972,1973,1974,1975, 645,1976,1977,1978,1979,
1980,1981, 236,1982,1436,1983,1984,1089, 192, 828, 618, 518,1166, 333,1127,1985,
818,1223,1986,1987,1988,1989,1990,1991,1992,1993, 342,1128,1286, 746, 842,1994,
1995, 560, 223,1287, 98, 8, 189, 650, 978,1288,1996,1437,1997, 17, 345, 250,
423, 277, 234, 512, 226, 97, 289, 42, 167,1998, 201,1999,2000, 843, 836, 824,
532, 338, 783,1090, 182, 576, 436,1438,1439, 527, 500,2001, 947, 889,2002,2003,
2004,2005, 262, 600, 314, 447,2006, 547,2007, 693, 738,1129,2008, 71,1440, 745,
619, 688,2009, 829,2010,2011, 147,2012, 33, 948,2013,2014, 74, 224,2015, 61,
191, 918, 399, 637,2016,1028,1130, 257, 902,2017,2018,2019,2020,2021,2022,2023,
2024,2025,2026, 837,2027,2028,2029,2030, 179, 874, 591, 52, 724, 246,2031,2032,
2033,2034,1167, 969,2035,1289, 630, 605, 911,1091,1168,2036,2037,2038,1441, 912,
2039, 623,2040,2041, 253,1169,1290,2042,1442, 146, 620, 611, 577, 433,2043,1224,
719,1170, 959, 440, 437, 534, 84, 388, 480,1131, 159, 220, 198, 679,2044,1012,
819,1066,1443, 113,1225, 194, 318,1003,1029,2045,2046,2047,2048,1067,2049,2050,
2051,2052,2053, 59, 913, 112,2054, 632,2055, 455, 144, 739,1291,2056, 273, 681,
499,2057, 448,2058,2059, 760,2060,2061, 970, 384, 169, 245,1132,2062,2063, 414,
1444,2064,2065, 41, 235,2066, 157, 252, 877, 568, 919, 789, 580,2067, 725,2068,
2069,1292,2070,2071,1445,2072,1446,2073,2074, 55, 588, 66,1447, 271,1092,2075,
1226,2076, 960,1013, 372,2077,2078,2079,2080,2081,1293,2082,2083,2084,2085, 850,
2086,2087,2088,2089,2090, 186,2091,1068, 180,2092,2093,2094, 109,1227, 522, 606,
2095, 867,1448,1093, 991,1171, 926, 353,1133,2096, 581,2097,2098,2099,1294,1449,
1450,2100, 596,1172,1014,1228,2101,1451,1295,1173,1229,2102,2103,1296,1134,1452,
949,1135,2104,2105,1094,1453,1454,1455,2106,1095,2107,2108,2109,2110,2111,2112,
2113,2114,2115,2116,2117, 804,2118,2119,1230,1231, 805,1456, 405,1136,2120,2121,
2122,2123,2124, 720, 701,1297, 992,1457, 927,1004,2125,2126,2127,2128,2129,2130,
22, 417,2131, 303,2132, 385,2133, 971, 520, 513,2134,1174, 73,1096, 231, 274,
962,1458, 673,2135,1459,2136, 152,1137,2137,2138,2139,2140,1005,1138,1460,1139,
2141,2142,2143,2144, 11, 374, 844,2145, 154,1232, 46,1461,2146, 838, 830, 721,
1233, 106,2147, 90, 428, 462, 578, 566,1175, 352,2148,2149, 538,1234, 124,1298,
2150,1462, 761, 565,2151, 686,2152, 649,2153, 72, 173,2154, 460, 415,2155,1463,
2156,1235, 305,2157,2158,2159,2160,2161,2162, 579,2163,2164,2165,2166,2167, 747,
2168,2169,2170,2171,1464, 669,2172,2173,2174,2175,2176,1465,2177, 23, 530, 285,
2178, 335, 729,2179, 397,2180,2181,2182,1030,2183,2184, 698,2185,2186, 325,2187,
2188, 369,2189, 799,1097,1015, 348,2190,1069, 680,2191, 851,1466,2192,2193, 10,
2194, 613, 424,2195, 979, 108, 449, 589, 27, 172, 81,1031, 80, 774, 281, 350,
1032, 525, 301, 582,1176,2196, 674,1045,2197,2198,1467, 730, 762,2199,2200,2201,
2202,1468,2203, 993,2204,2205, 266,1070, 963,1140,2206,2207,2208, 664,1098, 972,
2209,2210,2211,1177,1469,1470, 871,2212,2213,2214,2215,2216,1471,2217,2218,2219,
2220,2221,2222,2223,2224,2225,2226,2227,1472,1236,2228,2229,2230,2231,2232,2233,
2234,2235,1299,2236,2237, 200,2238, 477, 373,2239,2240, 731, 825, 777,2241,2242,
2243, 521, 486, 548,2244,2245,2246,1473,1300, 53, 549, 137, 875, 76, 158,2247,
1301,1474, 469, 396,1016, 278, 712,2248, 321, 442, 503, 767, 744, 941,1237,1178,
1475,2249, 82, 178,1141,1179, 973,2250,1302,2251, 297,2252,2253, 570,2254,2255,
2256, 18, 450, 206,2257, 290, 292,1142,2258, 511, 162, 99, 346, 164, 735,2259,
1476,1477, 4, 554, 343, 798,1099,2260,1100,2261, 43, 171,1303, 139, 215,2262,
2263, 717, 775,2264,1033, 322, 216,2265, 831,2266, 149,2267,1304,2268,2269, 702,
1238, 135, 845, 347, 309,2270, 484,2271, 878, 655, 238,1006,1478,2272, 67,2273,
295,2274,2275, 461,2276, 478, 942, 412,2277,1034,2278,2279,2280, 265,2281, 541,
2282,2283,2284,2285,2286, 70, 852,1071,2287,2288,2289,2290, 21, 56, 509, 117,
432,2291,2292, 331, 980, 552,1101, 148, 284, 105, 393,1180,1239, 755,2293, 187,
2294,1046,1479,2295, 340,2296, 63,1047, 230,2297,2298,1305, 763,1306, 101, 800,
808, 494,2299,2300,2301, 903,2302, 37,1072, 14, 5,2303, 79, 675,2304, 312,
2305,2306,2307,2308,2309,1480, 6,1307,2310,2311,2312, 1, 470, 35, 24, 229,
2313, 695, 210, 86, 778, 15, 784, 592, 779, 32, 77, 855, 964,2314, 259,2315,
501, 380,2316,2317, 83, 981, 153, 689,1308,1481,1482,1483,2318,2319, 716,1484,
2320,2321,2322,2323,2324,2325,1485,2326,2327, 128, 57, 68, 261,1048, 211, 170,
1240, 31,2328, 51, 435, 742,2329,2330,2331, 635,2332, 264, 456,2333,2334,2335,
425,2336,1486, 143, 507, 263, 943,2337, 363, 920,1487, 256,1488,1102, 243, 601,
1489,2338,2339,2340,2341,2342,2343,2344, 861,2345,2346,2347,2348,2349,2350, 395,
2351,1490,1491, 62, 535, 166, 225,2352,2353, 668, 419,1241, 138, 604, 928,2354,
1181,2355,1492,1493,2356,2357,2358,1143,2359, 696,2360, 387, 307,1309, 682, 476,
2361,2362, 332, 12, 222, 156,2363, 232,2364, 641, 276, 656, 517,1494,1495,1035,
416, 736,1496,2365,1017, 586,2366,2367,2368,1497,2369, 242,2370,2371,2372,1498,
2373, 965, 713,2374,2375,2376,2377, 740, 982,1499, 944,1500,1007,2378,2379,1310,
1501,2380,2381,2382, 785, 329,2383,2384,1502,2385,2386,2387, 932,2388,1503,2389,
2390,2391,2392,1242,2393,2394,2395,2396,2397, 994, 950,2398,2399,2400,2401,1504,
1311,2402,2403,2404,2405,1049, 749,2406,2407, 853, 718,1144,1312,2408,1182,1505,
2409,2410, 255, 516, 479, 564, 550, 214,1506,1507,1313, 413, 239, 444, 339,1145,
1036,1508,1509,1314,1037,1510,1315,2411,1511,2412,2413,2414, 176, 703, 497, 624,
593, 921, 302,2415, 341, 165,1103,1512,2416,1513,2417,2418,2419, 376,2420, 700,
2421,2422,2423, 258, 768,1316,2424,1183,2425, 995, 608,2426,2427,2428,2429, 221,
2430,2431,2432,2433,2434,2435,2436,2437, 195, 323, 726, 188, 897, 983,1317, 377,
644,1050, 879,2438, 452,2439,2440,2441,2442,2443,2444, 914,2445,2446,2447,2448,
915, 489,2449,1514,1184,2450,2451, 515, 64, 427, 495,2452, 583,2453, 483, 485,
1038, 562, 213,1515, 748, 666,2454,2455,2456,2457, 334,2458, 780, 996,1008, 705,
1243,2459,2460,2461,2462,2463, 114,2464, 493,1146, 366, 163,1516, 961,1104,2465,
291,2466,1318,1105,2467,1517, 365,2468, 355, 951,1244,2469,1319,2470, 631,2471,
2472, 218,1320, 364, 320, 756,1518,1519,1321,1520,1322,2473,2474,2475,2476, 997,
2477,2478,2479,2480, 665,1185,2481, 916,1521,2482,2483,2484, 584, 684,2485,2486,
797,2487,1051,1186,2488,2489,2490,1522,2491,2492, 370,2493,1039,1187, 65,2494,
434, 205, 463,1188,2495, 125, 812, 391, 402, 826, 699, 286, 398, 155, 781, 771,
585,2496, 590, 505,1073,2497, 599, 244, 219, 917,1018, 952, 646,1523,2498,1323,
2499,2500, 49, 984, 354, 741,2501, 625,2502,1324,2503,1019, 190, 357, 757, 491,
95, 782, 868,2504,2505,2506,2507,2508,2509, 134,1524,1074, 422,1525, 898,2510,
161,2511,2512,2513,2514, 769,2515,1526,2516,2517, 411,1325,2518, 472,1527,2519,
2520,2521,2522,2523,2524, 985,2525,2526,2527,2528,2529,2530, 764,2531,1245,2532,
2533, 25, 204, 311,2534, 496,2535,1052,2536,2537,2538,2539,2540,2541,2542, 199,
704, 504, 468, 758, 657,1528, 196, 44, 839,1246, 272, 750,2543, 765, 862,2544,
2545,1326,2546, 132, 615, 933,2547, 732,2548,2549,2550,1189,1529,2551, 283,1247,
1053, 607, 929,2552,2553,2554, 930, 183, 872, 616,1040,1147,2555,1148,1020, 441,
249,1075,2556,2557,2558, 466, 743,2559,2560,2561, 92, 514, 426, 420, 526,2562,
2563,2564,2565,2566,2567,2568, 185,2569,2570,2571,2572, 776,1530, 658,2573, 362,
2574, 361, 922,1076, 793,2575,2576,2577,2578,2579,2580,1531, 251,2581,2582,2583,
2584,1532, 54, 612, 237,1327,2585,2586, 275, 408, 647, 111,2587,1533,1106, 465,
3, 458, 9, 38,2588, 107, 110, 890, 209, 26, 737, 498,2589,1534,2590, 431,
202, 88,1535, 356, 287,1107, 660,1149,2591, 381,1536, 986,1150, 445,1248,1151,
974,2592,2593, 846,2594, 446, 953, 184,1249,1250, 727,2595, 923, 193, 883,2596,
2597,2598, 102, 324, 539, 817,2599, 421,1041,2600, 832,2601, 94, 175, 197, 406,
2602, 459,2603,2604,2605,2606,2607, 330, 555,2608,2609,2610, 706,1108, 389,2611,
2612,2613,2614, 233,2615, 833, 558, 931, 954,1251,2616,2617,1537, 546,2618,2619,
1009,2620,2621,2622,1538, 690,1328,2623, 955,2624,1539,2625,2626, 772,2627,2628,
2629,2630,2631, 924, 648, 863, 603,2632,2633, 934,1540, 864, 865,2634, 642,1042,
670,1190,2635,2636,2637,2638, 168,2639, 652, 873, 542,1054,1541,2640,2641,2642, # 512, 256
#Everything below is of no interest for detection purpose
2643,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2657,2658,
2659,2660,2661,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674,
2675,2676,2677,2678,2679,2680,2681,2682,2683,2684,2685,2686,2687,2688,2689,2690,
2691,2692,2693,2694,2695,2696,2697,2698,2699,1542, 880,2700,2701,2702,2703,2704,
2705,2706,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720,
2721,2722,2723,2724,2725,1543,2726,2727,2728,2729,2730,2731,2732,1544,2733,2734,
2735,2736,2737,2738,2739,2740,2741,2742,2743,2744,2745,2746,2747,2748,2749,2750,
2751,2752,2753,2754,1545,2755,2756,2757,2758,2759,2760,2761,2762,2763,2764,2765,
2766,1546,2767,1547,2768,2769,2770,2771,2772,2773,2774,2775,2776,2777,2778,2779,
2780,2781,2782,2783,2784,2785,2786,1548,2787,2788,2789,1109,2790,2791,2792,2793,
2794,2795,2796,2797,2798,2799,2800,2801,2802,2803,2804,2805,2806,2807,2808,2809,
2810,2811,2812,1329,2813,2814,2815,2816,2817,2818,2819,2820,2821,2822,2823,2824,
2825,2826,2827,2828,2829,2830,2831,2832,2833,2834,2835,2836,2837,2838,2839,2840,
2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856,
1549,2857,2858,2859,2860,1550,2861,2862,1551,2863,2864,2865,2866,2867,2868,2869,
2870,2871,2872,2873,2874,1110,1330,2875,2876,2877,2878,2879,2880,2881,2882,2883,
2884,2885,2886,2887,2888,2889,2890,2891,2892,2893,2894,2895,2896,2897,2898,2899,
2900,2901,2902,2903,2904,2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915,
2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,1331,
2931,2932,2933,2934,2935,2936,2937,2938,2939,2940,2941,2942,2943,1552,2944,2945,
2946,2947,2948,2949,2950,2951,2952,2953,2954,2955,2956,2957,2958,2959,2960,2961,
2962,2963,2964,1252,2965,2966,2967,2968,2969,2970,2971,2972,2973,2974,2975,2976,
2977,2978,2979,2980,2981,2982,2983,2984,2985,2986,2987,2988,2989,2990,2991,2992,
2993,2994,2995,2996,2997,2998,2999,3000,3001,3002,3003,3004,3005,3006,3007,3008,
3009,3010,3011,3012,1553,3013,3014,3015,3016,3017,1554,3018,1332,3019,3020,3021,
3022,3023,3024,3025,3026,3027,3028,3029,3030,3031,3032,3033,3034,3035,3036,3037,
3038,3039,3040,3041,3042,3043,3044,3045,3046,3047,3048,3049,3050,1555,3051,3052,
3053,1556,1557,3054,3055,3056,3057,3058,3059,3060,3061,3062,3063,3064,3065,3066,
3067,1558,3068,3069,3070,3071,3072,3073,3074,3075,3076,1559,3077,3078,3079,3080,
3081,3082,3083,1253,3084,3085,3086,3087,3088,3089,3090,3091,3092,3093,3094,3095,
3096,3097,3098,3099,3100,3101,3102,3103,3104,3105,3106,3107,3108,1152,3109,3110,
3111,3112,3113,1560,3114,3115,3116,3117,1111,3118,3119,3120,3121,3122,3123,3124,
3125,3126,3127,3128,3129,3130,3131,3132,3133,3134,3135,3136,3137,3138,3139,3140,
3141,3142,3143,3144,3145,3146,3147,3148,3149,3150,3151,3152,3153,3154,3155,3156,
3157,3158,3159,3160,3161,3162,3163,3164,3165,3166,3167,3168,3169,3170,3171,3172,
3173,3174,3175,3176,1333,3177,3178,3179,3180,3181,3182,3183,3184,3185,3186,3187,
3188,3189,1561,3190,3191,1334,3192,3193,3194,3195,3196,3197,3198,3199,3200,3201,
3202,3203,3204,3205,3206,3207,3208,3209,3210,3211,3212,3213,3214,3215,3216,3217,
3218,3219,3220,3221,3222,3223,3224,3225,3226,3227,3228,3229,3230,3231,3232,3233,
3234,1562,3235,3236,3237,3238,3239,3240,3241,3242,3243,3244,3245,3246,3247,3248,
3249,3250,3251,3252,3253,3254,3255,3256,3257,3258,3259,3260,3261,3262,3263,3264,
3265,3266,3267,3268,3269,3270,3271,3272,3273,3274,3275,3276,3277,1563,3278,3279,
3280,3281,3282,3283,3284,3285,3286,3287,3288,3289,3290,3291,3292,3293,3294,3295,
3296,3297,3298,3299,3300,3301,3302,3303,3304,3305,3306,3307,3308,3309,3310,3311,
3312,3313,3314,3315,3316,3317,3318,3319,3320,3321,3322,3323,3324,3325,3326,3327,
3328,3329,3330,3331,3332,3333,3334,3335,3336,3337,3338,3339,3340,3341,3342,3343,
3344,3345,3346,3347,3348,3349,3350,3351,3352,3353,3354,3355,3356,3357,3358,3359,
3360,3361,3362,3363,3364,1335,3365,3366,3367,3368,3369,3370,3371,3372,3373,3374,
3375,3376,3377,3378,3379,3380,3381,3382,3383,3384,3385,3386,3387,1336,3388,3389,
3390,3391,3392,3393,3394,3395,3396,3397,3398,3399,3400,3401,3402,3403,3404,3405,
3406,3407,3408,3409,3410,3411,3412,3413,3414,1337,3415,3416,3417,3418,3419,1338,
3420,3421,3422,1564,1565,3423,3424,3425,3426,3427,3428,3429,3430,3431,1254,3432,
3433,3434,1339,3435,3436,3437,3438,3439,1566,3440,3441,3442,3443,3444,3445,3446,
3447,3448,3449,3450,3451,3452,3453,3454,1255,3455,3456,3457,3458,3459,1567,1191,
3460,1568,1569,3461,3462,3463,1570,3464,3465,3466,3467,3468,1571,3469,3470,3471,
3472,3473,1572,3474,3475,3476,3477,3478,3479,3480,3481,3482,3483,3484,3485,3486,
1340,3487,3488,3489,3490,3491,3492,1021,3493,3494,3495,3496,3497,3498,1573,3499,
1341,3500,3501,3502,3503,3504,3505,3506,3507,3508,3509,3510,3511,1342,3512,3513,
3514,3515,3516,1574,1343,3517,3518,3519,1575,3520,1576,3521,3522,3523,3524,3525,
3526,3527,3528,3529,3530,3531,3532,3533,3534,3535,3536,3537,3538,3539,3540,3541,
3542,3543,3544,3545,3546,3547,3548,3549,3550,3551,3552,3553,3554,3555,3556,3557,
3558,3559,3560,3561,3562,3563,3564,3565,3566,3567,3568,3569,3570,3571,3572,3573,
3574,3575,3576,3577,3578,3579,3580,1577,3581,3582,1578,3583,3584,3585,3586,3587,
3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,
3604,1579,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,
3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,1580,3630,3631,1581,3632,
3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,3643,3644,3645,3646,3647,3648,
3649,3650,3651,3652,3653,3654,3655,3656,1582,3657,3658,3659,3660,3661,3662,3663,
3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,3676,3677,3678,3679,
3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,3691,3692,3693,3694,3695,
3696,3697,3698,3699,3700,1192,3701,3702,3703,3704,1256,3705,3706,3707,3708,1583,
1257,3709,3710,3711,3712,3713,3714,3715,3716,1584,3717,3718,3719,3720,3721,3722,
3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734,3735,3736,3737,3738,
3739,3740,3741,3742,3743,3744,3745,1344,3746,3747,3748,3749,3750,3751,3752,3753,
3754,3755,3756,1585,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,1586,3767,
3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,1345,3779,3780,3781,3782,
3783,3784,3785,3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,1346,1587,3796,
3797,1588,3798,3799,3800,3801,3802,3803,3804,3805,3806,1347,3807,3808,3809,3810,
3811,1589,3812,3813,3814,3815,3816,3817,3818,3819,3820,3821,1590,3822,3823,1591,
1348,3824,3825,3826,3827,3828,3829,3830,1592,3831,3832,1593,3833,3834,3835,3836,
3837,3838,3839,3840,3841,3842,3843,3844,1349,3845,3846,3847,3848,3849,3850,3851,
3852,3853,3854,3855,3856,3857,3858,1594,3859,3860,3861,3862,3863,3864,3865,3866,
3867,3868,3869,1595,3870,3871,3872,3873,1596,3874,3875,3876,3877,3878,3879,3880,
3881,3882,3883,3884,3885,3886,1597,3887,3888,3889,3890,3891,3892,3893,3894,3895,
1598,3896,3897,3898,1599,1600,3899,1350,3900,1351,3901,3902,1352,3903,3904,3905,
3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921,
3922,3923,3924,1258,3925,3926,3927,3928,3929,3930,3931,1193,3932,1601,3933,3934,
3935,3936,3937,3938,3939,3940,3941,3942,3943,1602,3944,3945,3946,3947,3948,1603,
3949,3950,3951,3952,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964,
3965,1604,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,3976,3977,1353,3978,
3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,1354,3992,3993,
3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009,
4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022,4023,1355,4024,
4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040,
1605,4041,4042,4043,4044,4045,4046,4047,4048,4049,4050,4051,4052,4053,4054,4055,
4056,4057,4058,4059,4060,1606,4061,4062,4063,4064,1607,4065,4066,4067,4068,4069,
4070,4071,4072,4073,4074,4075,4076,1194,4077,4078,1608,4079,4080,4081,4082,4083,
4084,4085,4086,4087,1609,4088,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098,
4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,1259,4109,4110,4111,4112,4113,
4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,1195,4125,4126,4127,1610,
4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,1356,4138,4139,4140,4141,4142,
4143,4144,1611,4145,4146,4147,4148,4149,4150,4151,4152,4153,4154,4155,4156,4157,
4158,4159,4160,4161,4162,4163,4164,4165,4166,4167,4168,4169,4170,4171,4172,4173,
4174,4175,4176,4177,4178,4179,4180,4181,4182,4183,4184,4185,4186,4187,4188,4189,
4190,4191,4192,4193,4194,4195,4196,4197,4198,4199,4200,4201,4202,4203,4204,4205,
4206,4207,4208,4209,4210,4211,4212,4213,4214,4215,4216,4217,4218,4219,1612,4220,
4221,4222,4223,4224,4225,4226,4227,1357,4228,1613,4229,4230,4231,4232,4233,4234,
4235,4236,4237,4238,4239,4240,4241,4242,4243,1614,4244,4245,4246,4247,4248,4249,
4250,4251,4252,4253,4254,4255,4256,4257,4258,4259,4260,4261,4262,4263,4264,4265,
4266,4267,4268,4269,4270,1196,1358,4271,4272,4273,4274,4275,4276,4277,4278,4279,
4280,4281,4282,4283,4284,4285,4286,4287,1615,4288,4289,4290,4291,4292,4293,4294,
4295,4296,4297,4298,4299,4300,4301,4302,4303,4304,4305,4306,4307,4308,4309,4310,
4311,4312,4313,4314,4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,4325,4326,
4327,4328,4329,4330,4331,4332,4333,4334,1616,4335,4336,4337,4338,4339,4340,4341,
4342,4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357,
4358,4359,4360,1617,4361,4362,4363,4364,4365,1618,4366,4367,4368,4369,4370,4371,
4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387,
4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403,
4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,1619,4417,4418,
4419,4420,4421,4422,4423,4424,4425,1112,4426,4427,4428,4429,4430,1620,4431,4432,
4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,1260,1261,4443,4444,4445,4446,
4447,4448,4449,4450,4451,4452,4453,4454,4455,1359,4456,4457,4458,4459,4460,4461,
4462,4463,4464,4465,1621,4466,4467,4468,4469,4470,4471,4472,4473,4474,4475,4476,
4477,4478,4479,4480,4481,4482,4483,4484,4485,4486,4487,4488,4489,1055,4490,4491,
4492,4493,4494,4495,4496,4497,4498,4499,4500,4501,4502,4503,4504,4505,4506,4507,
4508,4509,4510,4511,4512,4513,4514,4515,4516,4517,4518,1622,4519,4520,4521,1623,
4522,4523,4524,4525,4526,4527,4528,4529,4530,4531,4532,4533,4534,4535,1360,4536,
4537,4538,4539,4540,4541,4542,4543, 975,4544,4545,4546,4547,4548,4549,4550,4551,
4552,4553,4554,4555,4556,4557,4558,4559,4560,4561,4562,4563,4564,4565,4566,4567,
4568,4569,4570,4571,1624,4572,4573,4574,4575,4576,1625,4577,4578,4579,4580,4581,
4582,4583,4584,1626,4585,4586,4587,4588,4589,4590,4591,4592,4593,4594,4595,1627,
4596,4597,4598,4599,4600,4601,4602,4603,4604,4605,4606,4607,4608,4609,4610,4611,
4612,4613,4614,4615,1628,4616,4617,4618,4619,4620,4621,4622,4623,4624,4625,4626,
4627,4628,4629,4630,4631,4632,4633,4634,4635,4636,4637,4638,4639,4640,4641,4642,
4643,4644,4645,4646,4647,4648,4649,1361,4650,4651,4652,4653,4654,4655,4656,4657,
4658,4659,4660,4661,1362,4662,4663,4664,4665,4666,4667,4668,4669,4670,4671,4672,
4673,4674,4675,4676,4677,4678,4679,4680,4681,4682,1629,4683,4684,4685,4686,4687,
1630,4688,4689,4690,4691,1153,4692,4693,4694,1113,4695,4696,4697,4698,4699,4700,
4701,4702,4703,4704,4705,4706,4707,4708,4709,4710,4711,1197,4712,4713,4714,4715,
4716,4717,4718,4719,4720,4721,4722,4723,4724,4725,4726,4727,4728,4729,4730,4731,
4732,4733,4734,4735,1631,4736,1632,4737,4738,4739,4740,4741,4742,4743,4744,1633,
4745,4746,4747,4748,4749,1262,4750,4751,4752,4753,4754,1363,4755,4756,4757,4758,
4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,1634,4769,4770,4771,4772,4773,
4774,4775,4776,4777,4778,1635,4779,4780,4781,4782,4783,4784,4785,4786,4787,4788,
4789,1636,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803,
4804,4805,4806,1637,4807,4808,4809,1638,4810,4811,4812,4813,4814,4815,4816,4817,
4818,1639,4819,4820,4821,4822,4823,4824,4825,4826,4827,4828,4829,4830,4831,4832,
4833,1077,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847,
4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863,
4864,4865,4866,4867,4868,4869,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879,
4880,4881,4882,4883,1640,4884,4885,1641,4886,4887,4888,4889,4890,4891,4892,4893,
4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,
4910,4911,1642,4912,4913,4914,1364,4915,4916,4917,4918,4919,4920,4921,4922,4923,
4924,4925,4926,4927,4928,4929,4930,4931,1643,4932,4933,4934,4935,4936,4937,4938,
4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,
4955,4956,4957,4958,4959,4960,4961,4962,4963,4964,4965,4966,4967,4968,4969,4970,
4971,4972,4973,4974,4975,4976,4977,4978,4979,4980,1644,4981,4982,4983,4984,1645,
4985,4986,1646,4987,4988,4989,4990,4991,4992,4993,4994,4995,4996,4997,4998,4999,
5000,5001,5002,5003,5004,5005,1647,5006,1648,5007,5008,5009,5010,5011,5012,1078,
5013,5014,5015,5016,5017,5018,5019,5020,5021,5022,5023,5024,5025,5026,5027,5028,
1365,5029,5030,5031,5032,5033,5034,5035,5036,5037,5038,5039,1649,5040,5041,5042,
5043,5044,5045,1366,5046,5047,5048,5049,5050,5051,5052,5053,5054,5055,1650,5056,
5057,5058,5059,5060,5061,5062,5063,5064,5065,5066,5067,5068,5069,5070,5071,5072,
5073,5074,5075,5076,5077,1651,5078,5079,5080,5081,5082,5083,5084,5085,5086,5087,
5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102,5103,
5104,5105,5106,5107,5108,5109,5110,1652,5111,5112,5113,5114,5115,5116,5117,5118,
1367,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,1653,5130,5131,5132,
5133,5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,
5149,1368,5150,1654,5151,1369,5152,5153,5154,5155,5156,5157,5158,5159,5160,5161,
5162,5163,5164,5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,5176,5177,
5178,1370,5179,5180,5181,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192,
5193,5194,5195,5196,5197,5198,1655,5199,5200,5201,5202,1656,5203,5204,5205,5206,
1371,5207,1372,5208,5209,5210,5211,1373,5212,5213,1374,5214,5215,5216,5217,5218,
5219,5220,5221,5222,5223,5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,
5235,5236,5237,5238,5239,5240,5241,5242,5243,5244,5245,5246,5247,1657,5248,5249,
5250,5251,1658,1263,5252,5253,5254,5255,5256,1375,5257,5258,5259,5260,5261,5262,
5263,5264,5265,5266,5267,5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,
5279,5280,5281,5282,5283,1659,5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,
5294,5295,5296,5297,5298,5299,5300,1660,5301,5302,5303,5304,5305,5306,5307,5308,
5309,5310,5311,5312,5313,5314,5315,5316,5317,5318,5319,5320,5321,1376,5322,5323,
5324,5325,5326,5327,5328,5329,5330,5331,5332,5333,1198,5334,5335,5336,5337,5338,
5339,5340,5341,5342,5343,1661,5344,5345,5346,5347,5348,5349,5350,5351,5352,5353,
5354,5355,5356,5357,5358,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369,
5370,5371,5372,5373,5374,5375,5376,5377,5378,5379,5380,5381,5382,5383,5384,5385,
5386,5387,5388,5389,5390,5391,5392,5393,5394,5395,5396,5397,5398,1264,5399,5400,
5401,5402,5403,5404,5405,5406,5407,5408,5409,5410,5411,5412,1662,5413,5414,5415,
5416,1663,5417,5418,5419,5420,5421,5422,5423,5424,5425,5426,5427,5428,5429,5430,
5431,5432,5433,5434,5435,5436,5437,5438,1664,5439,5440,5441,5442,5443,5444,5445,
5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456,5457,5458,5459,5460,5461,
5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472,5473,5474,5475,5476,5477,
5478,1154,5479,5480,5481,5482,5483,5484,5485,1665,5486,5487,5488,5489,5490,5491,
5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504,5505,5506,5507,
5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520,5521,5522,5523,
5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536,5537,5538,5539,
5540,5541,5542,5543,5544,5545,5546,5547,5548,1377,5549,5550,5551,5552,5553,5554,
5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568,5569,5570,
1114,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584,5585,
5586,5587,5588,5589,5590,5591,5592,1378,5593,5594,5595,5596,5597,5598,5599,5600,
5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,1379,5615,
5616,5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,
5632,5633,5634,1380,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,
5647,5648,5649,1381,1056,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,
1666,5661,5662,5663,5664,5665,5666,5667,5668,1667,5669,1668,5670,5671,5672,5673,
5674,5675,5676,5677,5678,1155,5679,5680,5681,5682,5683,5684,5685,5686,5687,5688,
5689,5690,5691,5692,5693,5694,5695,5696,5697,5698,1669,5699,5700,5701,5702,5703,
5704,5705,1670,5706,5707,5708,5709,5710,1671,5711,5712,5713,5714,1382,5715,5716,
5717,5718,5719,5720,5721,5722,5723,5724,5725,1672,5726,5727,1673,1674,5728,5729,
5730,5731,5732,5733,5734,5735,5736,1675,5737,5738,5739,5740,5741,5742,5743,5744,
1676,5745,5746,5747,5748,5749,5750,5751,1383,5752,5753,5754,5755,5756,5757,5758,
5759,5760,5761,5762,5763,5764,5765,5766,5767,5768,1677,5769,5770,5771,5772,5773,
1678,5774,5775,5776, 998,5777,5778,5779,5780,5781,5782,5783,5784,5785,1384,5786,
5787,5788,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,1679,5801,
5802,5803,1115,1116,5804,5805,5806,5807,5808,5809,5810,5811,5812,5813,5814,5815,
5816,5817,5818,5819,5820,5821,5822,5823,5824,5825,5826,5827,5828,5829,5830,5831,
5832,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844,5845,5846,5847,
5848,5849,5850,5851,5852,5853,5854,5855,1680,5856,5857,5858,5859,5860,5861,5862,
5863,5864,1681,5865,5866,5867,1682,5868,5869,5870,5871,5872,5873,5874,5875,5876,
5877,5878,5879,1683,5880,1684,5881,5882,5883,5884,1685,5885,5886,5887,5888,5889,
5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904,5905,
5906,5907,1686,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920,
5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,1687,
5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,
5952,1688,1689,5953,1199,5954,5955,5956,5957,5958,5959,5960,5961,1690,5962,5963,
5964,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,
5980,5981,1385,5982,1386,5983,5984,5985,5986,5987,5988,5989,5990,5991,5992,5993,
5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004,6005,6006,6007,6008,6009,
6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020,6021,6022,6023,6024,6025,
6026,6027,1265,6028,6029,1691,6030,6031,6032,6033,6034,6035,6036,6037,6038,6039,
6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053,6054,6055,
6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071,
6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084,1692,6085,6086,
6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100,6101,6102,
6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116,6117,6118,
6119,6120,6121,6122,6123,6124,6125,6126,6127,6128,6129,6130,6131,1693,6132,6133,
6134,6135,6136,1694,6137,6138,6139,6140,6141,1695,6142,6143,6144,6145,6146,6147,
6148,6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163,
6164,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179,
6180,6181,6182,6183,6184,6185,1696,6186,6187,6188,6189,6190,6191,6192,6193,6194,
6195,6196,6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,
6211,6212,6213,6214,6215,6216,6217,6218,6219,1697,6220,6221,6222,6223,6224,6225,
6226,6227,6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241,
6242,6243,6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,1698,6254,6255,6256,
6257,6258,6259,6260,6261,6262,6263,1200,6264,6265,6266,6267,6268,6269,6270,6271, #1024
6272,6273,6274,6275,6276,6277,6278,6279,6280,6281,6282,6283,6284,6285,6286,6287,
6288,6289,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6300,6301,6302,1699,
6303,6304,1700,6305,6306,6307,6308,6309,6310,6311,6312,6313,6314,6315,6316,6317,
6318,6319,6320,6321,6322,6323,6324,6325,6326,6327,6328,6329,6330,6331,6332,6333,
6334,6335,6336,6337,6338,6339,1701,6340,6341,6342,6343,6344,1387,6345,6346,6347,
6348,6349,6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363,
6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,
6380,6381,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,
6396,6397,6398,6399,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,6411,
6412,6413,1702,6414,6415,6416,6417,6418,6419,6420,6421,6422,1703,6423,6424,6425,
6426,6427,6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,1704,6439,6440,
6441,6442,6443,6444,6445,6446,6447,6448,6449,6450,6451,6452,6453,6454,6455,6456,
6457,6458,6459,6460,6461,6462,6463,6464,6465,6466,6467,6468,6469,6470,6471,6472,
6473,6474,6475,6476,6477,6478,6479,6480,6481,6482,6483,6484,6485,6486,6487,6488,
6489,6490,6491,6492,6493,6494,6495,6496,6497,6498,6499,6500,6501,6502,6503,1266,
6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516,6517,6518,6519,
6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535,
6536,6537,6538,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548,6549,6550,6551,
1705,1706,6552,6553,6554,6555,6556,6557,6558,6559,6560,6561,6562,6563,6564,6565,
6566,6567,6568,6569,6570,6571,6572,6573,6574,6575,6576,6577,6578,6579,6580,6581,
6582,6583,6584,6585,6586,6587,6588,6589,6590,6591,6592,6593,6594,6595,6596,6597,
6598,6599,6600,6601,6602,6603,6604,6605,6606,6607,6608,6609,6610,6611,6612,6613,
6614,6615,6616,6617,6618,6619,6620,6621,6622,6623,6624,6625,6626,6627,6628,6629,
6630,6631,6632,6633,6634,6635,6636,6637,1388,6638,6639,6640,6641,6642,6643,6644,
1707,6645,6646,6647,6648,6649,6650,6651,6652,6653,6654,6655,6656,6657,6658,6659,
6660,6661,6662,6663,1708,6664,6665,6666,6667,6668,6669,6670,6671,6672,6673,6674,
1201,6675,6676,6677,6678,6679,6680,6681,6682,6683,6684,6685,6686,6687,6688,6689,
6690,6691,6692,6693,6694,6695,6696,6697,6698,6699,6700,6701,6702,6703,6704,6705,
6706,6707,6708,6709,6710,6711,6712,6713,6714,6715,6716,6717,6718,6719,6720,6721,
6722,6723,6724,6725,1389,6726,6727,6728,6729,6730,6731,6732,6733,6734,6735,6736,
1390,1709,6737,6738,6739,6740,6741,6742,1710,6743,6744,6745,6746,1391,6747,6748,
6749,6750,6751,6752,6753,6754,6755,6756,6757,1392,6758,6759,6760,6761,6762,6763,
6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776,6777,6778,6779,
6780,1202,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6794,
6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806,6807,6808,6809,1711,
6810,6811,6812,6813,6814,6815,6816,6817,6818,6819,6820,6821,6822,6823,6824,6825,
6826,6827,6828,6829,6830,6831,6832,6833,6834,6835,6836,1393,6837,6838,6839,6840,
6841,6842,6843,6844,6845,6846,6847,6848,6849,6850,6851,6852,6853,6854,6855,6856,
6857,6858,6859,6860,6861,6862,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872,
6873,6874,6875,6876,6877,6878,6879,6880,6881,6882,6883,6884,6885,6886,6887,6888,
6889,6890,6891,6892,6893,6894,6895,6896,6897,6898,6899,6900,6901,6902,1712,6903,
6904,6905,6906,6907,6908,6909,6910,1713,6911,6912,6913,6914,6915,6916,6917,6918,
6919,6920,6921,6922,6923,6924,6925,6926,6927,6928,6929,6930,6931,6932,6933,6934,
6935,6936,6937,6938,6939,6940,6941,6942,6943,6944,6945,6946,6947,6948,6949,6950,
6951,6952,6953,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,
6967,6968,6969,6970,6971,6972,6973,6974,1714,6975,6976,6977,6978,6979,6980,6981,
6982,6983,6984,6985,6986,6987,6988,1394,6989,6990,6991,6992,6993,6994,6995,6996,
6997,6998,6999,7000,1715,7001,7002,7003,7004,7005,7006,7007,7008,7009,7010,7011,
7012,7013,7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027,
7028,1716,7029,7030,7031,7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042,
7043,7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058,
7059,7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,7071,7072,7073,7074,
7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7086,7087,7088,7089,7090,
7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105,7106,
7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,7119,7120,7121,7122,
7123,7124,7125,7126,7127,7128,7129,7130,7131,7132,7133,7134,7135,7136,7137,7138,
7139,7140,7141,7142,7143,7144,7145,7146,7147,7148,7149,7150,7151,7152,7153,7154,
7155,7156,7157,7158,7159,7160,7161,7162,7163,7164,7165,7166,7167,7168,7169,7170,
7171,7172,7173,7174,7175,7176,7177,7178,7179,7180,7181,7182,7183,7184,7185,7186,
7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202,
7203,7204,7205,7206,7207,1395,7208,7209,7210,7211,7212,7213,1717,7214,7215,7216,
7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229,7230,7231,7232,
7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248,
7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264,
7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277,7278,7279,7280,
7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,7296,
7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308,7309,7310,7311,7312,
7313,1718,7314,7315,7316,7317,7318,7319,7320,7321,7322,7323,7324,7325,7326,7327,
7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343,
7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,7354,7355,7356,7357,7358,7359,
7360,7361,7362,7363,7364,7365,7366,7367,7368,7369,7370,7371,7372,7373,7374,7375,
7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390,7391,
7392,7393,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407,
7408,7409,7410,7411,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,
7424,7425,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7437,7438,7439,
7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7452,7453,7454,7455,
7456,7457,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,
7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,
7488,7489,7490,7491,7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,7503,
7504,7505,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,
7520,7521,7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535,
7536,7537,7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551,
7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567,
7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7583,
7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599,
7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,
7616,7617,7618,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628,7629,7630,7631,
7632,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643,7644,7645,7646,7647,
7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659,7660,7661,7662,7663,
7664,7665,7666,7667,7668,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,
7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,
7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,
7712,7713,7714,7715,7716,7717,7718,7719,7720,7721,7722,7723,7724,7725,7726,7727,
7728,7729,7730,7731,7732,7733,7734,7735,7736,7737,7738,7739,7740,7741,7742,7743,
7744,7745,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7757,7758,7759,
7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,
7776,7777,7778,7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791,
7792,7793,7794,7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,7806,7807,
7808,7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,
7824,7825,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,
7840,7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,
7856,7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871,
7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887,
7888,7889,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903,
7904,7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919,
7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935,
7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951,
7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967,
7968,7969,7970,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983,
7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999,
8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015,
8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031,
8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047,
8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063,
8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079,
8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095,
8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111,
8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127,
8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,
8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,
8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,
8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,
8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,
8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223,
8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,
8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255,
8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,
8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,
8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,
8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,8318,8319,
8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,8333,8334,8335,
8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,
8352,8353,8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,
8368,8369,8370,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382,8383,
8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398,8399,
8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,8411,8412,8413,8414,8415,
8416,8417,8418,8419,8420,8421,8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,
8432,8433,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,
8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,
8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,
8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490,8491,8492,8493,8494,8495,
8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506,8507,8508,8509,8510,8511,
8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,
8528,8529,8530,8531,8532,8533,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,
8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,
8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570,8571,8572,8573,8574,8575,
8576,8577,8578,8579,8580,8581,8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,
8592,8593,8594,8595,8596,8597,8598,8599,8600,8601,8602,8603,8604,8605,8606,8607,
8608,8609,8610,8611,8612,8613,8614,8615,8616,8617,8618,8619,8620,8621,8622,8623,
8624,8625,8626,8627,8628,8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,8639,
8640,8641,8642,8643,8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,
8656,8657,8658,8659,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,
8672,8673,8674,8675,8676,8677,8678,8679,8680,8681,8682,8683,8684,8685,8686,8687,
8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,
8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,
8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,
8736,8737,8738,8739,8740,8741
]
end

View File

@@ -1,42 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
module CharDet
class EUCKRProber < MultiByteCharSetProber
def initialize
super()
@_mCodingSM = CodingStateMachine.new(EUCKRSMModel)
@_mDistributionAnalyzer = EUCKRDistributionAnalysis.new()
reset()
end
def get_charset_name
return "EUC-KR"
end
end
end

View File

@@ -1,430 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is Mozilla Communicator client code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
# EUCTW frequency table
# Converted from big5 work
# by Taiwan's Mandarin Promotion Council
# <http:#www.edu.tw:81/mandr/>
# 128 --> 0.42261
# 256 --> 0.57851
# 512 --> 0.74851
# 1024 --> 0.89384
# 2048 --> 0.97583
#
# Idea Distribution Ratio = 0.74851/(1-0.74851) =2.98
# Random Distribution Ration = 512/(5401-512)=0.105
#
# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR
module CharDet
EUCTW_TYPICAL_DISTRIBUTION_RATIO = 0.75
# Char to FreqOrder table ,
EUCTW_TABLE_SIZE = 8102
EUCTWCharToFreqOrder = [
1,1800,1506, 255,1431, 198, 9, 82, 6,7310, 177, 202,3615,1256,2808, 110, # 2742
3735, 33,3241, 261, 76, 44,2113, 16,2931,2184,1176, 659,3868, 26,3404,2643, # 2758
1198,3869,3313,4060, 410,2211, 302, 590, 361,1963, 8, 204, 58,4296,7311,1931, # 2774
63,7312,7313, 317,1614, 75, 222, 159,4061,2412,1480,7314,3500,3068, 224,2809, # 2790
3616, 3, 10,3870,1471, 29,2774,1135,2852,1939, 873, 130,3242,1123, 312,7315, # 2806
4297,2051, 507, 252, 682,7316, 142,1914, 124, 206,2932, 34,3501,3173, 64, 604, # 2822
7317,2494,1976,1977, 155,1990, 645, 641,1606,7318,3405, 337, 72, 406,7319, 80, # 2838
630, 238,3174,1509, 263, 939,1092,2644, 756,1440,1094,3406, 449, 69,2969, 591, # 2854
179,2095, 471, 115,2034,1843, 60, 50,2970, 134, 806,1868, 734,2035,3407, 180, # 2870
995,1607, 156, 537,2893, 688,7320, 319,1305, 779,2144, 514,2374, 298,4298, 359, # 2886
2495, 90,2707,1338, 663, 11, 906,1099,2545, 20,2436, 182, 532,1716,7321, 732, # 2902
1376,4062,1311,1420,3175, 25,2312,1056, 113, 399, 382,1949, 242,3408,2467, 529, # 2918
3243, 475,1447,3617,7322, 117, 21, 656, 810,1297,2295,2329,3502,7323, 126,4063, # 2934
706, 456, 150, 613,4299, 71,1118,2036,4064, 145,3069, 85, 835, 486,2114,1246, # 2950
1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,7324,2127,2354, 347,3736, 221, # 2966
3503,3110,7325,1955,1153,4065, 83, 296,1199,3070, 192, 624, 93,7326, 822,1897, # 2982
2810,3111, 795,2064, 991,1554,1542,1592, 27, 43,2853, 859, 139,1456, 860,4300, # 2998
437, 712,3871, 164,2392,3112, 695, 211,3017,2096, 195,3872,1608,3504,3505,3618, # 3014
3873, 234, 811,2971,2097,3874,2229,1441,3506,1615,2375, 668,2076,1638, 305, 228, # 3030
1664,4301, 467, 415,7327, 262,2098,1593, 239, 108, 300, 200,1033, 512,1247,2077, # 3046
7328,7329,2173,3176,3619,2673, 593, 845,1062,3244, 88,1723,2037,3875,1950, 212, # 3062
266, 152, 149, 468,1898,4066,4302, 77, 187,7330,3018, 37, 5,2972,7331,3876, # 3078
7332,7333, 39,2517,4303,2894,3177,2078, 55, 148, 74,4304, 545, 483,1474,1029, # 3094
1665, 217,1869,1531,3113,1104,2645,4067, 24, 172,3507, 900,3877,3508,3509,4305, # 3110
32,1408,2811,1312, 329, 487,2355,2247,2708, 784,2674, 4,3019,3314,1427,1788, # 3126
188, 109, 499,7334,3620,1717,1789, 888,1217,3020,4306,7335,3510,7336,3315,1520, # 3142
3621,3878, 196,1034, 775,7337,7338, 929,1815, 249, 439, 38,7339,1063,7340, 794, # 3158
3879,1435,2296, 46, 178,3245,2065,7341,2376,7342, 214,1709,4307, 804, 35, 707, # 3174
324,3622,1601,2546, 140, 459,4068,7343,7344,1365, 839, 272, 978,2257,2572,3409, # 3190
2128,1363,3623,1423, 697, 100,3071, 48, 70,1231, 495,3114,2193,7345,1294,7346, # 3206
2079, 462, 586,1042,3246, 853, 256, 988, 185,2377,3410,1698, 434,1084,7347,3411, # 3222
314,2615,2775,4308,2330,2331, 569,2280, 637,1816,2518, 757,1162,1878,1616,3412, # 3238
287,1577,2115, 768,4309,1671,2854,3511,2519,1321,3737, 909,2413,7348,4069, 933, # 3254
3738,7349,2052,2356,1222,4310, 765,2414,1322, 786,4311,7350,1919,1462,1677,2895, # 3270
1699,7351,4312,1424,2437,3115,3624,2590,3316,1774,1940,3413,3880,4070, 309,1369, # 3286
1130,2812, 364,2230,1653,1299,3881,3512,3882,3883,2646, 525,1085,3021, 902,2000, # 3302
1475, 964,4313, 421,1844,1415,1057,2281, 940,1364,3116, 376,4314,4315,1381, 7, # 3318
2520, 983,2378, 336,1710,2675,1845, 321,3414, 559,1131,3022,2742,1808,1132,1313, # 3334
265,1481,1857,7352, 352,1203,2813,3247, 167,1089, 420,2814, 776, 792,1724,3513, # 3350
4071,2438,3248,7353,4072,7354, 446, 229, 333,2743, 901,3739,1200,1557,4316,2647, # 3366
1920, 395,2744,2676,3740,4073,1835, 125, 916,3178,2616,4317,7355,7356,3741,7357, # 3382
7358,7359,4318,3117,3625,1133,2547,1757,3415,1510,2313,1409,3514,7360,2145, 438, # 3398
2591,2896,2379,3317,1068, 958,3023, 461, 311,2855,2677,4074,1915,3179,4075,1978, # 3414
383, 750,2745,2617,4076, 274, 539, 385,1278,1442,7361,1154,1964, 384, 561, 210, # 3430
98,1295,2548,3515,7362,1711,2415,1482,3416,3884,2897,1257, 129,7363,3742, 642, # 3446
523,2776,2777,2648,7364, 141,2231,1333, 68, 176, 441, 876, 907,4077, 603,2592, # 3462
710, 171,3417, 404, 549, 18,3118,2393,1410,3626,1666,7365,3516,4319,2898,4320, # 3478
7366,2973, 368,7367, 146, 366, 99, 871,3627,1543, 748, 807,1586,1185, 22,2258, # 3494
379,3743,3180,7368,3181, 505,1941,2618,1991,1382,2314,7369, 380,2357, 218, 702, # 3510
1817,1248,3418,3024,3517,3318,3249,7370,2974,3628, 930,3250,3744,7371, 59,7372, # 3526
585, 601,4078, 497,3419,1112,1314,4321,1801,7373,1223,1472,2174,7374, 749,1836, # 3542
690,1899,3745,1772,3885,1476, 429,1043,1790,2232,2116, 917,4079, 447,1086,1629, # 3558
7375, 556,7376,7377,2020,1654, 844,1090, 105, 550, 966,1758,2815,1008,1782, 686, # 3574
1095,7378,2282, 793,1602,7379,3518,2593,4322,4080,2933,2297,4323,3746, 980,2496, # 3590
544, 353, 527,4324, 908,2678,2899,7380, 381,2619,1942,1348,7381,1341,1252, 560, # 3606
3072,7382,3420,2856,7383,2053, 973, 886,2080, 143,4325,7384,7385, 157,3886, 496, # 3622
4081, 57, 840, 540,2038,4326,4327,3421,2117,1445, 970,2259,1748,1965,2081,4082, # 3638
3119,1234,1775,3251,2816,3629, 773,1206,2129,1066,2039,1326,3887,1738,1725,4083, # 3654
279,3120, 51,1544,2594, 423,1578,2130,2066, 173,4328,1879,7386,7387,1583, 264, # 3670
610,3630,4329,2439, 280, 154,7388,7389,7390,1739, 338,1282,3073, 693,2857,1411, # 3686
1074,3747,2440,7391,4330,7392,7393,1240, 952,2394,7394,2900,1538,2679, 685,1483, # 3702
4084,2468,1436, 953,4085,2054,4331, 671,2395, 79,4086,2441,3252, 608, 567,2680, # 3718
3422,4087,4088,1691, 393,1261,1791,2396,7395,4332,7396,7397,7398,7399,1383,1672, # 3734
3748,3182,1464, 522,1119, 661,1150, 216, 675,4333,3888,1432,3519, 609,4334,2681, # 3750
2397,7400,7401,7402,4089,3025, 0,7403,2469, 315, 231,2442, 301,3319,4335,2380, # 3766
7404, 233,4090,3631,1818,4336,4337,7405, 96,1776,1315,2082,7406, 257,7407,1809, # 3782
3632,2709,1139,1819,4091,2021,1124,2163,2778,1777,2649,7408,3074, 363,1655,3183, # 3798
7409,2975,7410,7411,7412,3889,1567,3890, 718, 103,3184, 849,1443, 341,3320,2934, # 3814
1484,7413,1712, 127, 67, 339,4092,2398, 679,1412, 821,7414,7415, 834, 738, 351, # 3830
2976,2146, 846, 235,1497,1880, 418,1992,3749,2710, 186,1100,2147,2746,3520,1545, # 3846
1355,2935,2858,1377, 583,3891,4093,2573,2977,7416,1298,3633,1078,2549,3634,2358, # 3862
78,3750,3751, 267,1289,2099,2001,1594,4094, 348, 369,1274,2194,2175,1837,4338, # 3878
1820,2817,3635,2747,2283,2002,4339,2936,2748, 144,3321, 882,4340,3892,2749,3423, # 3894
4341,2901,7417,4095,1726, 320,7418,3893,3026, 788,2978,7419,2818,1773,1327,2859, # 3910
3894,2819,7420,1306,4342,2003,1700,3752,3521,2359,2650, 787,2022, 506, 824,3636, # 3926
534, 323,4343,1044,3322,2023,1900, 946,3424,7421,1778,1500,1678,7422,1881,4344, # 3942
165, 243,4345,3637,2521, 123, 683,4096, 764,4346, 36,3895,1792, 589,2902, 816, # 3958
626,1667,3027,2233,1639,1555,1622,3753,3896,7423,3897,2860,1370,1228,1932, 891, # 3974
2083,2903, 304,4097,7424, 292,2979,2711,3522, 691,2100,4098,1115,4347, 118, 662, # 3990
7425, 611,1156, 854,2381,1316,2861, 2, 386, 515,2904,7426,7427,3253, 868,2234, # 4006
1486, 855,2651, 785,2212,3028,7428,1040,3185,3523,7429,3121, 448,7430,1525,7431, # 4022
2164,4348,7432,3754,7433,4099,2820,3524,3122, 503, 818,3898,3123,1568, 814, 676, # 4038
1444, 306,1749,7434,3755,1416,1030, 197,1428, 805,2821,1501,4349,7435,7436,7437, # 4054
1993,7438,4350,7439,7440,2195, 13,2779,3638,2980,3124,1229,1916,7441,3756,2131, # 4070
7442,4100,4351,2399,3525,7443,2213,1511,1727,1120,7444,7445, 646,3757,2443, 307, # 4086
7446,7447,1595,3186,7448,7449,7450,3639,1113,1356,3899,1465,2522,2523,7451, 519, # 4102
7452, 128,2132, 92,2284,1979,7453,3900,1512, 342,3125,2196,7454,2780,2214,1980, # 4118
3323,7455, 290,1656,1317, 789, 827,2360,7456,3758,4352, 562, 581,3901,7457, 401, # 4134
4353,2248, 94,4354,1399,2781,7458,1463,2024,4355,3187,1943,7459, 828,1105,4101, # 4150
1262,1394,7460,4102, 605,4356,7461,1783,2862,7462,2822, 819,2101, 578,2197,2937, # 4166
7463,1502, 436,3254,4103,3255,2823,3902,2905,3425,3426,7464,2712,2315,7465,7466, # 4182
2332,2067, 23,4357, 193, 826,3759,2102, 699,1630,4104,3075, 390,1793,1064,3526, # 4198
7467,1579,3076,3077,1400,7468,4105,1838,1640,2863,7469,4358,4359, 137,4106, 598, # 4214
3078,1966, 780, 104, 974,2938,7470, 278, 899, 253, 402, 572, 504, 493,1339,7471, # 4230
3903,1275,4360,2574,2550,7472,3640,3029,3079,2249, 565,1334,2713, 863, 41,7473, # 4246
7474,4361,7475,1657,2333, 19, 463,2750,4107, 606,7476,2981,3256,1087,2084,1323, # 4262
2652,2982,7477,1631,1623,1750,4108,2682,7478,2864, 791,2714,2653,2334, 232,2416, # 4278
7479,2983,1498,7480,2654,2620, 755,1366,3641,3257,3126,2025,1609, 119,1917,3427, # 4294
862,1026,4109,7481,3904,3760,4362,3905,4363,2260,1951,2470,7482,1125, 817,4110, # 4310
4111,3906,1513,1766,2040,1487,4112,3030,3258,2824,3761,3127,7483,7484,1507,7485, # 4326
2683, 733, 40,1632,1106,2865, 345,4113, 841,2524, 230,4364,2984,1846,3259,3428, # 4342
7486,1263, 986,3429,7487, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562,3907, # 4358
3908,2939, 967,2751,2655,1349, 592,2133,1692,3324,2985,1994,4114,1679,3909,1901, # 4374
2185,7488, 739,3642,2715,1296,1290,7489,4115,2198,2199,1921,1563,2595,2551,1870, # 4390
2752,2986,7490, 435,7491, 343,1108, 596, 17,1751,4365,2235,3430,3643,7492,4366, # 4406
294,3527,2940,1693, 477, 979, 281,2041,3528, 643,2042,3644,2621,2782,2261,1031, # 4422
2335,2134,2298,3529,4367, 367,1249,2552,7493,3530,7494,4368,1283,3325,2004, 240, # 4438
1762,3326,4369,4370, 836,1069,3128, 474,7495,2148,2525, 268,3531,7496,3188,1521, # 4454
1284,7497,1658,1546,4116,7498,3532,3533,7499,4117,3327,2684,1685,4118, 961,1673, # 4470
2622, 190,2005,2200,3762,4371,4372,7500, 570,2497,3645,1490,7501,4373,2623,3260, # 4486
1956,4374, 584,1514, 396,1045,1944,7502,4375,1967,2444,7503,7504,4376,3910, 619, # 4502
7505,3129,3261, 215,2006,2783,2553,3189,4377,3190,4378, 763,4119,3763,4379,7506, # 4518
7507,1957,1767,2941,3328,3646,1174, 452,1477,4380,3329,3130,7508,2825,1253,2382, # 4534
2186,1091,2285,4120, 492,7509, 638,1169,1824,2135,1752,3911, 648, 926,1021,1324, # 4550
4381, 520,4382, 997, 847,1007, 892,4383,3764,2262,1871,3647,7510,2400,1784,4384, # 4566
1952,2942,3080,3191,1728,4121,2043,3648,4385,2007,1701,3131,1551, 30,2263,4122, # 4582
7511,2026,4386,3534,7512, 501,7513,4123, 594,3431,2165,1821,3535,3432,3536,3192, # 4598
829,2826,4124,7514,1680,3132,1225,4125,7515,3262,4387,4126,3133,2336,7516,4388, # 4614
4127,7517,3912,3913,7518,1847,2383,2596,3330,7519,4389, 374,3914, 652,4128,4129, # 4630
375,1140, 798,7520,7521,7522,2361,4390,2264, 546,1659, 138,3031,2445,4391,7523, # 4646
2250, 612,1848, 910, 796,3765,1740,1371, 825,3766,3767,7524,2906,2554,7525, 692, # 4662
444,3032,2624, 801,4392,4130,7526,1491, 244,1053,3033,4131,4132, 340,7527,3915, # 4678
1041,2987, 293,1168, 87,1357,7528,1539, 959,7529,2236, 721, 694,4133,3768, 219, # 4694
1478, 644,1417,3331,2656,1413,1401,1335,1389,3916,7530,7531,2988,2362,3134,1825, # 4710
730,1515, 184,2827, 66,4393,7532,1660,2943, 246,3332, 378,1457, 226,3433, 975, # 4726
3917,2944,1264,3537, 674, 696,7533, 163,7534,1141,2417,2166, 713,3538,3333,4394, # 4742
3918,7535,7536,1186, 15,7537,1079,1070,7538,1522,3193,3539, 276,1050,2716, 758, # 4758
1126, 653,2945,3263,7539,2337, 889,3540,3919,3081,2989, 903,1250,4395,3920,3434, # 4774
3541,1342,1681,1718, 766,3264, 286, 89,2946,3649,7540,1713,7541,2597,3334,2990, # 4790
7542,2947,2215,3194,2866,7543,4396,2498,2526, 181, 387,1075,3921, 731,2187,3335, # 4806
7544,3265, 310, 313,3435,2299, 770,4134, 54,3034, 189,4397,3082,3769,3922,7545, # 4822
1230,1617,1849, 355,3542,4135,4398,3336, 111,4136,3650,1350,3135,3436,3035,4137, # 4838
2149,3266,3543,7546,2784,3923,3924,2991, 722,2008,7547,1071, 247,1207,2338,2471, # 4854
1378,4399,2009, 864,1437,1214,4400, 373,3770,1142,2216, 667,4401, 442,2753,2555, # 4870
3771,3925,1968,4138,3267,1839, 837, 170,1107, 934,1336,1882,7548,7549,2118,4139, # 4886
2828, 743,1569,7550,4402,4140, 582,2384,1418,3437,7551,1802,7552, 357,1395,1729, # 4902
3651,3268,2418,1564,2237,7553,3083,3772,1633,4403,1114,2085,4141,1532,7554, 482, # 4918
2446,4404,7555,7556,1492, 833,1466,7557,2717,3544,1641,2829,7558,1526,1272,3652, # 4934
4142,1686,1794, 416,2556,1902,1953,1803,7559,3773,2785,3774,1159,2316,7560,2867, # 4950
4405,1610,1584,3036,2419,2754, 443,3269,1163,3136,7561,7562,3926,7563,4143,2499, # 4966
3037,4406,3927,3137,2103,1647,3545,2010,1872,4144,7564,4145, 431,3438,7565, 250, # 4982
97, 81,4146,7566,1648,1850,1558, 160, 848,7567, 866, 740,1694,7568,2201,2830, # 4998
3195,4147,4407,3653,1687, 950,2472, 426, 469,3196,3654,3655,3928,7569,7570,1188, # 5014
424,1995, 861,3546,4148,3775,2202,2685, 168,1235,3547,4149,7571,2086,1674,4408, # 5030
3337,3270, 220,2557,1009,7572,3776, 670,2992, 332,1208, 717,7573,7574,3548,2447, # 5046
3929,3338,7575, 513,7576,1209,2868,3339,3138,4409,1080,7577,7578,7579,7580,2527, # 5062
3656,3549, 815,1587,3930,3931,7581,3550,3439,3777,1254,4410,1328,3038,1390,3932, # 5078
1741,3933,3778,3934,7582, 236,3779,2448,3271,7583,7584,3657,3780,1273,3781,4411, # 5094
7585, 308,7586,4412, 245,4413,1851,2473,1307,2575, 430, 715,2136,2449,7587, 270, # 5110
199,2869,3935,7588,3551,2718,1753, 761,1754, 725,1661,1840,4414,3440,3658,7589, # 5126
7590, 587, 14,3272, 227,2598, 326, 480,2265, 943,2755,3552, 291, 650,1883,7591, # 5142
1702,1226, 102,1547, 62,3441, 904,4415,3442,1164,4150,7592,7593,1224,1548,2756, # 5158
391, 498,1493,7594,1386,1419,7595,2055,1177,4416, 813, 880,1081,2363, 566,1145, # 5174
4417,2286,1001,1035,2558,2599,2238, 394,1286,7596,7597,2068,7598, 86,1494,1730, # 5190
3936, 491,1588, 745, 897,2948, 843,3340,3937,2757,2870,3273,1768, 998,2217,2069, # 5206
397,1826,1195,1969,3659,2993,3341, 284,7599,3782,2500,2137,2119,1903,7600,3938, # 5222
2150,3939,4151,1036,3443,1904, 114,2559,4152, 209,1527,7601,7602,2949,2831,2625, # 5238
2385,2719,3139, 812,2560,7603,3274,7604,1559, 737,1884,3660,1210, 885, 28,2686, # 5254
3553,3783,7605,4153,1004,1779,4418,7606, 346,1981,2218,2687,4419,3784,1742, 797, # 5270
1642,3940,1933,1072,1384,2151, 896,3941,3275,3661,3197,2871,3554,7607,2561,1958, # 5286
4420,2450,1785,7608,7609,7610,3942,4154,1005,1308,3662,4155,2720,4421,4422,1528, # 5302
2600, 161,1178,4156,1982, 987,4423,1101,4157, 631,3943,1157,3198,2420,1343,1241, # 5318
1016,2239,2562, 372, 877,2339,2501,1160, 555,1934, 911,3944,7611, 466,1170, 169, # 5334
1051,2907,2688,3663,2474,2994,1182,2011,2563,1251,2626,7612, 992,2340,3444,1540, # 5350
2721,1201,2070,2401,1996,2475,7613,4424, 528,1922,2188,1503,1873,1570,2364,3342, # 5366
3276,7614, 557,1073,7615,1827,3445,2087,2266,3140,3039,3084, 767,3085,2786,4425, # 5382
1006,4158,4426,2341,1267,2176,3664,3199, 778,3945,3200,2722,1597,2657,7616,4427, # 5398
7617,3446,7618,7619,7620,3277,2689,1433,3278, 131, 95,1504,3946, 723,4159,3141, # 5414
1841,3555,2758,2189,3947,2027,2104,3665,7621,2995,3948,1218,7622,3343,3201,3949, # 5430
4160,2576, 248,1634,3785, 912,7623,2832,3666,3040,3786, 654, 53,7624,2996,7625, # 5446
1688,4428, 777,3447,1032,3950,1425,7626, 191, 820,2120,2833, 971,4429, 931,3202, # 5462
135, 664, 783,3787,1997, 772,2908,1935,3951,3788,4430,2909,3203, 282,2723, 640, # 5478
1372,3448,1127, 922, 325,3344,7627,7628, 711,2044,7629,7630,3952,2219,2787,1936, # 5494
3953,3345,2220,2251,3789,2300,7631,4431,3790,1258,3279,3954,3204,2138,2950,3955, # 5510
3956,7632,2221, 258,3205,4432, 101,1227,7633,3280,1755,7634,1391,3281,7635,2910, # 5526
2056, 893,7636,7637,7638,1402,4161,2342,7639,7640,3206,3556,7641,7642, 878,1325, # 5542
1780,2788,4433, 259,1385,2577, 744,1183,2267,4434,7643,3957,2502,7644, 684,1024, # 5558
4162,7645, 472,3557,3449,1165,3282,3958,3959, 322,2152, 881, 455,1695,1152,1340, # 5574
660, 554,2153,4435,1058,4436,4163, 830,1065,3346,3960,4437,1923,7646,1703,1918, # 5590
7647, 932,2268, 122,7648,4438, 947, 677,7649,3791,2627, 297,1905,1924,2269,4439, # 5606
2317,3283,7650,7651,4164,7652,4165, 84,4166, 112, 989,7653, 547,1059,3961, 701, # 5622
3558,1019,7654,4167,7655,3450, 942, 639, 457,2301,2451, 993,2951, 407, 851, 494, # 5638
4440,3347, 927,7656,1237,7657,2421,3348, 573,4168, 680, 921,2911,1279,1874, 285, # 5654
790,1448,1983, 719,2167,7658,7659,4441,3962,3963,1649,7660,1541, 563,7661,1077, # 5670
7662,3349,3041,3451, 511,2997,3964,3965,3667,3966,1268,2564,3350,3207,4442,4443, # 5686
7663, 535,1048,1276,1189,2912,2028,3142,1438,1373,2834,2952,1134,2012,7664,4169, # 5702
1238,2578,3086,1259,7665, 700,7666,2953,3143,3668,4170,7667,4171,1146,1875,1906, # 5718
4444,2601,3967, 781,2422, 132,1589, 203, 147, 273,2789,2402, 898,1786,2154,3968, # 5734
3969,7668,3792,2790,7669,7670,4445,4446,7671,3208,7672,1635,3793, 965,7673,1804, # 5750
2690,1516,3559,1121,1082,1329,3284,3970,1449,3794, 65,1128,2835,2913,2759,1590, # 5766
3795,7674,7675, 12,2658, 45, 976,2579,3144,4447, 517,2528,1013,1037,3209,7676, # 5782
3796,2836,7677,3797,7678,3452,7679,2602, 614,1998,2318,3798,3087,2724,2628,7680, # 5798
2580,4172, 599,1269,7681,1810,3669,7682,2691,3088, 759,1060, 489,1805,3351,3285, # 5814
1358,7683,7684,2386,1387,1215,2629,2252, 490,7685,7686,4173,1759,2387,2343,7687, # 5830
4448,3799,1907,3971,2630,1806,3210,4449,3453,3286,2760,2344, 874,7688,7689,3454, # 5846
3670,1858, 91,2914,3671,3042,3800,4450,7690,3145,3972,2659,7691,3455,1202,1403, # 5862
3801,2954,2529,1517,2503,4451,3456,2504,7692,4452,7693,2692,1885,1495,1731,3973, # 5878
2365,4453,7694,2029,7695,7696,3974,2693,1216, 237,2581,4174,2319,3975,3802,4454, # 5894
4455,2694,3560,3457, 445,4456,7697,7698,7699,7700,2761, 61,3976,3672,1822,3977, # 5910
7701, 687,2045, 935, 925, 405,2660, 703,1096,1859,2725,4457,3978,1876,1367,2695, # 5926
3352, 918,2105,1781,2476, 334,3287,1611,1093,4458, 564,3146,3458,3673,3353, 945, # 5942
2631,2057,4459,7702,1925, 872,4175,7703,3459,2696,3089, 349,4176,3674,3979,4460, # 5958
3803,4177,3675,2155,3980,4461,4462,4178,4463,2403,2046, 782,3981, 400, 251,4179, # 5974
1624,7704,7705, 277,3676, 299,1265, 476,1191,3804,2121,4180,4181,1109, 205,7706, # 5990
2582,1000,2156,3561,1860,7707,7708,7709,4464,7710,4465,2565, 107,2477,2157,3982, # 6006
3460,3147,7711,1533, 541,1301, 158, 753,4182,2872,3562,7712,1696, 370,1088,4183, # 6022
4466,3563, 579, 327, 440, 162,2240, 269,1937,1374,3461, 968,3043, 56,1396,3090, # 6038
2106,3288,3354,7713,1926,2158,4467,2998,7714,3564,7715,7716,3677,4468,2478,7717, # 6054
2791,7718,1650,4469,7719,2603,7720,7721,3983,2661,3355,1149,3356,3984,3805,3985, # 6070
7722,1076, 49,7723, 951,3211,3289,3290, 450,2837, 920,7724,1811,2792,2366,4184, # 6086
1908,1138,2367,3806,3462,7725,3212,4470,1909,1147,1518,2423,4471,3807,7726,4472, # 6102
2388,2604, 260,1795,3213,7727,7728,3808,3291, 708,7729,3565,1704,7730,3566,1351, # 6118
1618,3357,2999,1886, 944,4185,3358,4186,3044,3359,4187,7731,3678, 422, 413,1714, # 6134
3292, 500,2058,2345,4188,2479,7732,1344,1910, 954,7733,1668,7734,7735,3986,2404, # 6150
4189,3567,3809,4190,7736,2302,1318,2505,3091, 133,3092,2873,4473, 629, 31,2838, # 6166
2697,3810,4474, 850, 949,4475,3987,2955,1732,2088,4191,1496,1852,7737,3988, 620, # 6182
3214, 981,1242,3679,3360,1619,3680,1643,3293,2139,2452,1970,1719,3463,2168,7738, # 6198
3215,7739,7740,3361,1828,7741,1277,4476,1565,2047,7742,1636,3568,3093,7743, 869, # 6214
2839, 655,3811,3812,3094,3989,3000,3813,1310,3569,4477,7744,7745,7746,1733, 558, # 6230
4478,3681, 335,1549,3045,1756,4192,3682,1945,3464,1829,1291,1192, 470,2726,2107, # 6246
2793, 913,1054,3990,7747,1027,7748,3046,3991,4479, 982,2662,3362,3148,3465,3216, # 6262
3217,1946,2794,7749, 571,4480,7750,1830,7751,3570,2583,1523,2424,7752,2089, 984, # 6278
4481,3683,1959,7753,3684, 852, 923,2795,3466,3685, 969,1519, 999,2048,2320,1705, # 6294
7754,3095, 615,1662, 151, 597,3992,2405,2321,1049, 275,4482,3686,4193, 568,3687, # 6310
3571,2480,4194,3688,7755,2425,2270, 409,3218,7756,1566,2874,3467,1002, 769,2840, # 6326
194,2090,3149,3689,2222,3294,4195, 628,1505,7757,7758,1763,2177,3001,3993, 521, # 6342
1161,2584,1787,2203,2406,4483,3994,1625,4196,4197, 412, 42,3096, 464,7759,2632, # 6358
4484,3363,1760,1571,2875,3468,2530,1219,2204,3814,2633,2140,2368,4485,4486,3295, # 6374
1651,3364,3572,7760,7761,3573,2481,3469,7762,3690,7763,7764,2271,2091, 460,7765, # 6390
4487,7766,3002, 962, 588,3574, 289,3219,2634,1116, 52,7767,3047,1796,7768,7769, # 6406
7770,1467,7771,1598,1143,3691,4198,1984,1734,1067,4488,1280,3365, 465,4489,1572, # 6422
510,7772,1927,2241,1812,1644,3575,7773,4490,3692,7774,7775,2663,1573,1534,7776, # 6438
7777,4199, 536,1807,1761,3470,3815,3150,2635,7778,7779,7780,4491,3471,2915,1911, # 6454
2796,7781,3296,1122, 377,3220,7782, 360,7783,7784,4200,1529, 551,7785,2059,3693, # 6470
1769,2426,7786,2916,4201,3297,3097,2322,2108,2030,4492,1404, 136,1468,1479, 672, # 6486
1171,3221,2303, 271,3151,7787,2762,7788,2049, 678,2727, 865,1947,4493,7789,2013, # 6502
3995,2956,7790,2728,2223,1397,3048,3694,4494,4495,1735,2917,3366,3576,7791,3816, # 6518
509,2841,2453,2876,3817,7792,7793,3152,3153,4496,4202,2531,4497,2304,1166,1010, # 6534
552, 681,1887,7794,7795,2957,2958,3996,1287,1596,1861,3154, 358, 453, 736, 175, # 6550
478,1117, 905,1167,1097,7796,1853,1530,7797,1706,7798,2178,3472,2287,3695,3473, # 6566
3577,4203,2092,4204,7799,3367,1193,2482,4205,1458,2190,2205,1862,1888,1421,3298, # 6582
2918,3049,2179,3474, 595,2122,7800,3997,7801,7802,4206,1707,2636, 223,3696,1359, # 6598
751,3098, 183,3475,7803,2797,3003, 419,2369, 633, 704,3818,2389, 241,7804,7805, # 6614
7806, 838,3004,3697,2272,2763,2454,3819,1938,2050,3998,1309,3099,2242,1181,7807, # 6630
1136,2206,3820,2370,1446,4207,2305,4498,7808,7809,4208,1055,2605, 484,3698,7810, # 6646
3999, 625,4209,2273,3368,1499,4210,4000,7811,4001,4211,3222,2274,2275,3476,7812, # 6662
7813,2764, 808,2606,3699,3369,4002,4212,3100,2532, 526,3370,3821,4213, 955,7814, # 6678
1620,4214,2637,2427,7815,1429,3700,1669,1831, 994, 928,7816,3578,1260,7817,7818, # 6694
7819,1948,2288, 741,2919,1626,4215,2729,2455, 867,1184, 362,3371,1392,7820,7821, # 6710
4003,4216,1770,1736,3223,2920,4499,4500,1928,2698,1459,1158,7822,3050,3372,2877, # 6726
1292,1929,2506,2842,3701,1985,1187,2071,2014,2607,4217,7823,2566,2507,2169,3702, # 6742
2483,3299,7824,3703,4501,7825,7826, 666,1003,3005,1022,3579,4218,7827,4502,1813, # 6758
2253, 574,3822,1603, 295,1535, 705,3823,4219, 283, 858, 417,7828,7829,3224,4503, # 6774
4504,3051,1220,1889,1046,2276,2456,4004,1393,1599, 689,2567, 388,4220,7830,2484, # 6790
802,7831,2798,3824,2060,1405,2254,7832,4505,3825,2109,1052,1345,3225,1585,7833, # 6806
809,7834,7835,7836, 575,2730,3477, 956,1552,1469,1144,2323,7837,2324,1560,2457, # 6822
3580,3226,4005, 616,2207,3155,2180,2289,7838,1832,7839,3478,4506,7840,1319,3704, # 6838
3705,1211,3581,1023,3227,1293,2799,7841,7842,7843,3826, 607,2306,3827, 762,2878, # 6854
1439,4221,1360,7844,1485,3052,7845,4507,1038,4222,1450,2061,2638,4223,1379,4508, # 6870
2585,7846,7847,4224,1352,1414,2325,2921,1172,7848,7849,3828,3829,7850,1797,1451, # 6886
7851,7852,7853,7854,2922,4006,4007,2485,2346, 411,4008,4009,3582,3300,3101,4509, # 6902
1561,2664,1452,4010,1375,7855,7856, 47,2959, 316,7857,1406,1591,2923,3156,7858, # 6918
1025,2141,3102,3157, 354,2731, 884,2224,4225,2407, 508,3706, 726,3583, 996,2428, # 6934
3584, 729,7859, 392,2191,1453,4011,4510,3707,7860,7861,2458,3585,2608,1675,2800, # 6950
919,2347,2960,2348,1270,4511,4012, 73,7862,7863, 647,7864,3228,2843,2255,1550, # 6966
1346,3006,7865,1332, 883,3479,7866,7867,7868,7869,3301,2765,7870,1212, 831,1347, # 6982
4226,4512,2326,3830,1863,3053, 720,3831,4513,4514,3832,7871,4227,7872,7873,4515, # 6998
7874,7875,1798,4516,3708,2609,4517,3586,1645,2371,7876,7877,2924, 669,2208,2665, # 7014
2429,7878,2879,7879,7880,1028,3229,7881,4228,2408,7882,2256,1353,7883,7884,4518, # 7030
3158, 518,7885,4013,7886,4229,1960,7887,2142,4230,7888,7889,3007,2349,2350,3833, # 7046
516,1833,1454,4014,2699,4231,4519,2225,2610,1971,1129,3587,7890,2766,7891,2961, # 7062
1422, 577,1470,3008,1524,3373,7892,7893, 432,4232,3054,3480,7894,2586,1455,2508, # 7078
2226,1972,1175,7895,1020,2732,4015,3481,4520,7896,2733,7897,1743,1361,3055,3482, # 7094
2639,4016,4233,4521,2290, 895, 924,4234,2170, 331,2243,3056, 166,1627,3057,1098, # 7110
7898,1232,2880,2227,3374,4522, 657, 403,1196,2372, 542,3709,3375,1600,4235,3483, # 7126
7899,4523,2767,3230, 576, 530,1362,7900,4524,2533,2666,3710,4017,7901, 842,3834, # 7142
7902,2801,2031,1014,4018, 213,2700,3376, 665, 621,4236,7903,3711,2925,2430,7904, # 7158
2431,3302,3588,3377,7905,4237,2534,4238,4525,3589,1682,4239,3484,1380,7906, 724, # 7174
2277, 600,1670,7907,1337,1233,4526,3103,2244,7908,1621,4527,7909, 651,4240,7910, # 7190
1612,4241,2611,7911,2844,7912,2734,2307,3058,7913, 716,2459,3059, 174,1255,2701, # 7206
4019,3590, 548,1320,1398, 728,4020,1574,7914,1890,1197,3060,4021,7915,3061,3062, # 7222
3712,3591,3713, 747,7916, 635,4242,4528,7917,7918,7919,4243,7920,7921,4529,7922, # 7238
3378,4530,2432, 451,7923,3714,2535,2072,4244,2735,4245,4022,7924,1764,4531,7925, # 7254
4246, 350,7926,2278,2390,2486,7927,4247,4023,2245,1434,4024, 488,4532, 458,4248, # 7270
4025,3715, 771,1330,2391,3835,2568,3159,2159,2409,1553,2667,3160,4249,7928,2487, # 7286
2881,2612,1720,2702,4250,3379,4533,7929,2536,4251,7930,3231,4252,2768,7931,2015, # 7302
2736,7932,1155,1017,3716,3836,7933,3303,2308, 201,1864,4253,1430,7934,4026,7935, # 7318
7936,7937,7938,7939,4254,1604,7940, 414,1865, 371,2587,4534,4535,3485,2016,3104, # 7334
4536,1708, 960,4255, 887, 389,2171,1536,1663,1721,7941,2228,4027,2351,2926,1580, # 7350
7942,7943,7944,1744,7945,2537,4537,4538,7946,4539,7947,2073,7948,7949,3592,3380, # 7366
2882,4256,7950,4257,2640,3381,2802, 673,2703,2460, 709,3486,4028,3593,4258,7951, # 7382
1148, 502, 634,7952,7953,1204,4540,3594,1575,4541,2613,3717,7954,3718,3105, 948, # 7398
3232, 121,1745,3837,1110,7955,4259,3063,2509,3009,4029,3719,1151,1771,3838,1488, # 7414
4030,1986,7956,2433,3487,7957,7958,2093,7959,4260,3839,1213,1407,2803, 531,2737, # 7430
2538,3233,1011,1537,7960,2769,4261,3106,1061,7961,3720,3721,1866,2883,7962,2017, # 7446
120,4262,4263,2062,3595,3234,2309,3840,2668,3382,1954,4542,7963,7964,3488,1047, # 7462
2704,1266,7965,1368,4543,2845, 649,3383,3841,2539,2738,1102,2846,2669,7966,7967, # 7478
1999,7968,1111,3596,2962,7969,2488,3842,3597,2804,1854,3384,3722,7970,7971,3385, # 7494
2410,2884,3304,3235,3598,7972,2569,7973,3599,2805,4031,1460, 856,7974,3600,7975, # 7510
2885,2963,7976,2886,3843,7977,4264, 632,2510, 875,3844,1697,3845,2291,7978,7979, # 7526
4544,3010,1239, 580,4545,4265,7980, 914, 936,2074,1190,4032,1039,2123,7981,7982, # 7542
7983,3386,1473,7984,1354,4266,3846,7985,2172,3064,4033, 915,3305,4267,4268,3306, # 7558
1605,1834,7986,2739, 398,3601,4269,3847,4034, 328,1912,2847,4035,3848,1331,4270, # 7574
3011, 937,4271,7987,3602,4036,4037,3387,2160,4546,3388, 524, 742, 538,3065,1012, # 7590
7988,7989,3849,2461,7990, 658,1103, 225,3850,7991,7992,4547,7993,4548,7994,3236, # 7606
1243,7995,4038, 963,2246,4549,7996,2705,3603,3161,7997,7998,2588,2327,7999,4550, # 7622
8000,8001,8002,3489,3307, 957,3389,2540,2032,1930,2927,2462, 870,2018,3604,1746, # 7638
2770,2771,2434,2463,8003,3851,8004,3723,3107,3724,3490,3390,3725,8005,1179,3066, # 7654
8006,3162,2373,4272,3726,2541,3163,3108,2740,4039,8007,3391,1556,2542,2292, 977, # 7670
2887,2033,4040,1205,3392,8008,1765,3393,3164,2124,1271,1689, 714,4551,3491,8009, # 7686
2328,3852, 533,4273,3605,2181, 617,8010,2464,3308,3492,2310,8011,8012,3165,8013, # 7702
8014,3853,1987, 618, 427,2641,3493,3394,8015,8016,1244,1690,8017,2806,4274,4552, # 7718
8018,3494,8019,8020,2279,1576, 473,3606,4275,3395, 972,8021,3607,8022,3067,8023, # 7734
8024,4553,4554,8025,3727,4041,4042,8026, 153,4555, 356,8027,1891,2888,4276,2143, # 7750
408, 803,2352,8028,3854,8029,4277,1646,2570,2511,4556,4557,3855,8030,3856,4278, # 7766
8031,2411,3396, 752,8032,8033,1961,2964,8034, 746,3012,2465,8035,4279,3728, 698, # 7782
4558,1892,4280,3608,2543,4559,3609,3857,8036,3166,3397,8037,1823,1302,4043,2706, # 7798
3858,1973,4281,8038,4282,3167, 823,1303,1288,1236,2848,3495,4044,3398, 774,3859, # 7814
8039,1581,4560,1304,2849,3860,4561,8040,2435,2161,1083,3237,4283,4045,4284, 344, # 7830
1173, 288,2311, 454,1683,8041,8042,1461,4562,4046,2589,8043,8044,4563, 985, 894, # 7846
8045,3399,3168,8046,1913,2928,3729,1988,8047,2110,1974,8048,4047,8049,2571,1194, # 7862
425,8050,4564,3169,1245,3730,4285,8051,8052,2850,8053, 636,4565,1855,3861, 760, # 7878
1799,8054,4286,2209,1508,4566,4048,1893,1684,2293,8055,8056,8057,4287,4288,2210, # 7894
479,8058,8059, 832,8060,4049,2489,8061,2965,2490,3731, 990,3109, 627,1814,2642, # 7910
4289,1582,4290,2125,2111,3496,4567,8062, 799,4291,3170,8063,4568,2112,1737,3013, # 7926
1018, 543, 754,4292,3309,1676,4569,4570,4050,8064,1489,8065,3497,8066,2614,2889, # 7942
4051,8067,8068,2966,8069,8070,8071,8072,3171,4571,4572,2182,1722,8073,3238,3239, # 7958
1842,3610,1715, 481, 365,1975,1856,8074,8075,1962,2491,4573,8076,2126,3611,3240, # 7974
433,1894,2063,2075,8077, 602,2741,8078,8079,8080,8081,8082,3014,1628,3400,8083, # 7990
3172,4574,4052,2890,4575,2512,8084,2544,2772,8085,8086,8087,3310,4576,2891,8088, # 8006
4577,8089,2851,4578,4579,1221,2967,4053,2513,8090,8091,8092,1867,1989,8093,8094, # 8022
8095,1895,8096,8097,4580,1896,4054, 318,8098,2094,4055,4293,8099,8100, 485,8101, # 8038
938,3862, 553,2670, 116,8102,3863,3612,8103,3498,2671,2773,3401,3311,2807,8104, # 8054
3613,2929,4056,1747,2930,2968,8105,8106, 207,8107,8108,2672,4581,2514,8109,3015, # 8070
890,3614,3864,8110,1877,3732,3402,8111,2183,2353,3403,1652,8112,8113,8114, 941, # 8086
2294, 208,3499,4057,2019, 330,4294,3865,2892,2492,3733,4295,8115,8116,8117,8118, # 8102
#Everything below is of no interest for detection purpose
2515,1613,4582,8119,3312,3866,2516,8120,4058,8121,1637,4059,2466,4583,3867,8122, # 8118
2493,3016,3734,8123,8124,2192,8125,8126,2162,8127,8128,8129,8130,8131,8132,8133, # 8134
8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149, # 8150
8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165, # 8166
8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181, # 8182
8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197, # 8198
8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213, # 8214
8214,8215,8216,8217,8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229, # 8230
8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245, # 8246
8246,8247,8248,8249,8250,8251,8252,8253,8254,8255,8256,8257,8258,8259,8260,8261, # 8262
8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277, # 8278
8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,8290,8291,8292,8293, # 8294
8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309, # 8310
8310,8311,8312,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322,8323,8324,8325, # 8326
8326,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337,8338,8339,8340,8341, # 8342
8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353,8354,8355,8356,8357, # 8358
8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,8368,8369,8370,8371,8372,8373, # 8374
8374,8375,8376,8377,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389, # 8390
8390,8391,8392,8393,8394,8395,8396,8397,8398,8399,8400,8401,8402,8403,8404,8405, # 8406
8406,8407,8408,8409,8410,8411,8412,8413,8414,8415,8416,8417,8418,8419,8420,8421, # 8422
8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,8436,8437, # 8438
8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,8448,8449,8450,8451,8452,8453, # 8454
8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467,8468,8469, # 8470
8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,8480,8481,8482,8483,8484,8485, # 8486
8486,8487,8488,8489,8490,8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501, # 8502
8502,8503,8504,8505,8506,8507,8508,8509,8510,8511,8512,8513,8514,8515,8516,8517, # 8518
8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533, # 8534
8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549, # 8550
8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565, # 8566
8566,8567,8568,8569,8570,8571,8572,8573,8574,8575,8576,8577,8578,8579,8580,8581, # 8582
8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597, # 8598
8598,8599,8600,8601,8602,8603,8604,8605,8606,8607,8608,8609,8610,8611,8612,8613, # 8614
8614,8615,8616,8617,8618,8619,8620,8621,8622,8623,8624,8625,8626,8627,8628,8629, # 8630
8630,8631,8632,8633,8634,8635,8636,8637,8638,8639,8640,8641,8642,8643,8644,8645, # 8646
8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661, # 8662
8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672,8673,8674,8675,8676,8677, # 8678
8678,8679,8680,8681,8682,8683,8684,8685,8686,8687,8688,8689,8690,8691,8692,8693, # 8694
8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8705,8706,8707,8708,8709, # 8710
8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8722,8723,8724,8725, # 8726
8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,8736,8737,8738,8739,8740,8741] # 8742
end

View File

@@ -1,42 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
module CharDet
class EUCTWProber < MultiByteCharSetProber
def initialize
super()
@_mCodingSM = CodingStateMachine.new(EUCTWSMModel)
@_mDistributionAnalyzer = EUCTWDistributionAnalysis.new()
reset()
end
def get_charset_name
return "EUC-TW"
end
end
end

View File

@@ -1,474 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is Mozilla Communicator client code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
# GB2312 most frequently used character table
#
# Char to FreqOrder table , from hz6763
# 512 --> 0.79 -- 0.79
# 1024 --> 0.92 -- 0.13
# 2048 --> 0.98 -- 0.06
# 6768 --> 1.00 -- 0.02
#
# Ideal Distribution Ratio = 0.79135/(1-0.79135) = 3.79
# Random Distribution Ration = 512 / (3755 - 512) = 0.157
#
# Typical Distribution Ratio about 25% of Ideal one, still much higher that RDR
module CharDet
GB2312_TYPICAL_DISTRIBUTION_RATIO = 0.9
GB2312_TABLE_SIZE = 3760
GB2312CharToFreqOrder = [
1671, 749,1443,2364,3924,3807,2330,3921,1704,3463,2691,1511,1515, 572,3191,2205,
2361, 224,2558, 479,1711, 963,3162, 440,4060,1905,2966,2947,3580,2647,3961,3842,
2204, 869,4207, 970,2678,5626,2944,2956,1479,4048, 514,3595, 588,1346,2820,3409,
249,4088,1746,1873,2047,1774, 581,1813, 358,1174,3590,1014,1561,4844,2245, 670,
1636,3112, 889,1286, 953, 556,2327,3060,1290,3141, 613, 185,3477,1367, 850,3820,
1715,2428,2642,2303,2732,3041,2562,2648,3566,3946,1349, 388,3098,2091,1360,3585,
152,1687,1539, 738,1559, 59,1232,2925,2267,1388,1249,1741,1679,2960, 151,1566,
1125,1352,4271, 924,4296, 385,3166,4459, 310,1245,2850, 70,3285,2729,3534,3575,
2398,3298,3466,1960,2265, 217,3647, 864,1909,2084,4401,2773,1010,3269,5152, 853,
3051,3121,1244,4251,1895, 364,1499,1540,2313,1180,3655,2268, 562, 715,2417,3061,
544, 336,3768,2380,1752,4075, 950, 280,2425,4382, 183,2759,3272, 333,4297,2155,
1688,2356,1444,1039,4540, 736,1177,3349,2443,2368,2144,2225, 565, 196,1482,3406,
927,1335,4147, 692, 878,1311,1653,3911,3622,1378,4200,1840,2969,3149,2126,1816,
2534,1546,2393,2760, 737,2494, 13, 447, 245,2747, 38,2765,2129,2589,1079, 606,
360, 471,3755,2890, 404, 848, 699,1785,1236, 370,2221,1023,3746,2074,2026,2023,
2388,1581,2119, 812,1141,3091,2536,1519, 804,2053, 406,1596,1090, 784, 548,4414,
1806,2264,2936,1100, 343,4114,5096, 622,3358, 743,3668,1510,1626,5020,3567,2513,
3195,4115,5627,2489,2991, 24,2065,2697,1087,2719, 48,1634, 315, 68, 985,2052,
198,2239,1347,1107,1439, 597,2366,2172, 871,3307, 919,2487,2790,1867, 236,2570,
1413,3794, 906,3365,3381,1701,1982,1818,1524,2924,1205, 616,2586,2072,2004, 575,
253,3099, 32,1365,1182, 197,1714,2454,1201, 554,3388,3224,2748, 756,2587, 250,
2567,1507,1517,3529,1922,2761,2337,3416,1961,1677,2452,2238,3153, 615, 911,1506,
1474,2495,1265,1906,2749,3756,3280,2161, 898,2714,1759,3450,2243,2444, 563, 26,
3286,2266,3769,3344,2707,3677, 611,1402, 531,1028,2871,4548,1375, 261,2948, 835,
1190,4134, 353, 840,2684,1900,3082,1435,2109,1207,1674, 329,1872,2781,4055,2686,
2104, 608,3318,2423,2957,2768,1108,3739,3512,3271,3985,2203,1771,3520,1418,2054,
1681,1153, 225,1627,2929, 162,2050,2511,3687,1954, 124,1859,2431,1684,3032,2894,
585,4805,3969,2869,2704,2088,2032,2095,3656,2635,4362,2209, 256, 518,2042,2105,
3777,3657, 643,2298,1148,1779, 190, 989,3544, 414, 11,2135,2063,2979,1471, 403,
3678, 126, 770,1563, 671,2499,3216,2877, 600,1179, 307,2805,4937,1268,1297,2694,
252,4032,1448,1494,1331,1394, 127,2256, 222,1647,1035,1481,3056,1915,1048, 873,
3651, 210, 33,1608,2516, 200,1520, 415, 102, 0,3389,1287, 817, 91,3299,2940,
836,1814, 549,2197,1396,1669,2987,3582,2297,2848,4528,1070, 687, 20,1819, 121,
1552,1364,1461,1968,2617,3540,2824,2083, 177, 948,4938,2291, 110,4549,2066, 648,
3359,1755,2110,2114,4642,4845,1693,3937,3308,1257,1869,2123, 208,1804,3159,2992,
2531,2549,3361,2418,1350,2347,2800,2568,1291,2036,2680, 72, 842,1990, 212,1233,
1154,1586, 75,2027,3410,4900,1823,1337,2710,2676, 728,2810,1522,3026,4995, 157,
755,1050,4022, 710, 785,1936,2194,2085,1406,2777,2400, 150,1250,4049,1206, 807,
1910, 534, 529,3309,1721,1660, 274, 39,2827, 661,2670,1578, 925,3248,3815,1094,
4278,4901,4252, 41,1150,3747,2572,2227,4501,3658,4902,3813,3357,3617,2884,2258,
887, 538,4187,3199,1294,2439,3042,2329,2343,2497,1255, 107, 543,1527, 521,3478,
3568, 194,5062, 15, 961,3870,1241,1192,2664, 66,5215,3260,2111,1295,1127,2152,
3805,4135, 901,1164,1976, 398,1278, 530,1460, 748, 904,1054,1966,1426, 53,2909,
509, 523,2279,1534, 536,1019, 239,1685, 460,2353, 673,1065,2401,3600,4298,2272,
1272,2363, 284,1753,3679,4064,1695, 81, 815,2677,2757,2731,1386, 859, 500,4221,
2190,2566, 757,1006,2519,2068,1166,1455, 337,2654,3203,1863,1682,1914,3025,1252,
1409,1366, 847, 714,2834,2038,3209, 964,2970,1901, 885,2553,1078,1756,3049, 301,
1572,3326, 688,2130,1996,2429,1805,1648,2930,3421,2750,3652,3088, 262,1158,1254,
389,1641,1812, 526,1719, 923,2073,1073,1902, 468, 489,4625,1140, 857,2375,3070,
3319,2863, 380, 116,1328,2693,1161,2244, 273,1212,1884,2769,3011,1775,1142, 461,
3066,1200,2147,2212, 790, 702,2695,4222,1601,1058, 434,2338,5153,3640, 67,2360,
4099,2502, 618,3472,1329, 416,1132, 830,2782,1807,2653,3211,3510,1662, 192,2124,
296,3979,1739,1611,3684, 23, 118, 324, 446,1239,1225, 293,2520,3814,3795,2535,
3116, 17,1074, 467,2692,2201, 387,2922, 45,1326,3055,1645,3659,2817, 958, 243,
1903,2320,1339,2825,1784,3289, 356, 576, 865,2315,2381,3377,3916,1088,3122,1713,
1655, 935, 628,4689,1034,1327, 441, 800, 720, 894,1979,2183,1528,5289,2702,1071,
4046,3572,2399,1571,3281, 79, 761,1103, 327, 134, 758,1899,1371,1615, 879, 442,
215,2605,2579, 173,2048,2485,1057,2975,3317,1097,2253,3801,4263,1403,1650,2946,
814,4968,3487,1548,2644,1567,1285, 2, 295,2636, 97, 946,3576, 832, 141,4257,
3273, 760,3821,3521,3156,2607, 949,1024,1733,1516,1803,1920,2125,2283,2665,3180,
1501,2064,3560,2171,1592, 803,3518,1416, 732,3897,4258,1363,1362,2458, 119,1427,
602,1525,2608,1605,1639,3175, 694,3064, 10, 465, 76,2000,4846,4208, 444,3781,
1619,3353,2206,1273,3796, 740,2483, 320,1723,2377,3660,2619,1359,1137,1762,1724,
2345,2842,1850,1862, 912, 821,1866, 612,2625,1735,2573,3369,1093, 844, 89, 937,
930,1424,3564,2413,2972,1004,3046,3019,2011, 711,3171,1452,4178, 428, 801,1943,
432, 445,2811, 206,4136,1472, 730, 349, 73, 397,2802,2547, 998,1637,1167, 789,
396,3217, 154,1218, 716,1120,1780,2819,4826,1931,3334,3762,2139,1215,2627, 552,
3664,3628,3232,1405,2383,3111,1356,2652,3577,3320,3101,1703, 640,1045,1370,1246,
4996, 371,1575,2436,1621,2210, 984,4033,1734,2638, 16,4529, 663,2755,3255,1451,
3917,2257,1253,1955,2234,1263,2951, 214,1229, 617, 485, 359,1831,1969, 473,2310,
750,2058, 165, 80,2864,2419, 361,4344,2416,2479,1134, 796,3726,1266,2943, 860,
2715, 938, 390,2734,1313,1384, 248, 202, 877,1064,2854, 522,3907, 279,1602, 297,
2357, 395,3740, 137,2075, 944,4089,2584,1267,3802, 62,1533,2285, 178, 176, 780,
2440, 201,3707, 590, 478,1560,4354,2117,1075, 30, 74,4643,4004,1635,1441,2745,
776,2596, 238,1077,1692,1912,2844, 605, 499,1742,3947, 241,3053, 980,1749, 936,
2640,4511,2582, 515,1543,2162,5322,2892,2993, 890,2148,1924, 665,1827,3581,1032,
968,3163, 339,1044,1896, 270, 583,1791,1720,4367,1194,3488,3669, 43,2523,1657,
163,2167, 290,1209,1622,3378, 550, 634,2508,2510, 695,2634,2384,2512,1476,1414,
220,1469,2341,2138,2852,3183,2900,4939,2865,3502,1211,3680, 854,3227,1299,2976,
3172, 186,2998,1459, 443,1067,3251,1495, 321,1932,3054, 909, 753,1410,1828, 436,
2441,1119,1587,3164,2186,1258, 227, 231,1425,1890,3200,3942, 247, 959, 725,5254,
2741, 577,2158,2079, 929, 120, 174, 838,2813, 591,1115, 417,2024, 40,3240,1536,
1037, 291,4151,2354, 632,1298,2406,2500,3535,1825,1846,3451, 205,1171, 345,4238,
18,1163, 811, 685,2208,1217, 425,1312,1508,1175,4308,2552,1033, 587,1381,3059,
2984,3482, 340,1316,4023,3972, 792,3176, 519, 777,4690, 918, 933,4130,2981,3741,
90,3360,2911,2200,5184,4550, 609,3079,2030, 272,3379,2736, 363,3881,1130,1447,
286, 779, 357,1169,3350,3137,1630,1220,2687,2391, 747,1277,3688,2618,2682,2601,
1156,3196,5290,4034,3102,1689,3596,3128, 874, 219,2783, 798, 508,1843,2461, 269,
1658,1776,1392,1913,2983,3287,2866,2159,2372, 829,4076, 46,4253,2873,1889,1894,
915,1834,1631,2181,2318, 298, 664,2818,3555,2735, 954,3228,3117, 527,3511,2173,
681,2712,3033,2247,2346,3467,1652, 155,2164,3382, 113,1994, 450, 899, 494, 994,
1237,2958,1875,2336,1926,3727, 545,1577,1550, 633,3473, 204,1305,3072,2410,1956,
2471, 707,2134, 841,2195,2196,2663,3843,1026,4940, 990,3252,4997, 368,1092, 437,
3212,3258,1933,1829, 675,2977,2893, 412, 943,3723,4644,3294,3283,2230,2373,5154,
2389,2241,2661,2323,1404,2524, 593, 787, 677,3008,1275,2059, 438,2709,2609,2240,
2269,2246,1446, 36,1568,1373,3892,1574,2301,1456,3962, 693,2276,5216,2035,1143,
2720,1919,1797,1811,2763,4137,2597,1830,1699,1488,1198,2090, 424,1694, 312,3634,
3390,4179,3335,2252,1214, 561,1059,3243,2295,2561, 975,5155,2321,2751,3772, 472,
1537,3282,3398,1047,2077,2348,2878,1323,3340,3076, 690,2906, 51, 369, 170,3541,
1060,2187,2688,3670,2541,1083,1683, 928,3918, 459, 109,4427, 599,3744,4286, 143,
2101,2730,2490, 82,1588,3036,2121, 281,1860, 477,4035,1238,2812,3020,2716,3312,
1530,2188,2055,1317, 843, 636,1808,1173,3495, 649, 181,1002, 147,3641,1159,2414,
3750,2289,2795, 813,3123,2610,1136,4368, 5,3391,4541,2174, 420, 429,1728, 754,
1228,2115,2219, 347,2223,2733, 735,1518,3003,2355,3134,1764,3948,3329,1888,2424,
1001,1234,1972,3321,3363,1672,1021,1450,1584, 226, 765, 655,2526,3404,3244,2302,
3665, 731, 594,2184, 319,1576, 621, 658,2656,4299,2099,3864,1279,2071,2598,2739,
795,3086,3699,3908,1707,2352,2402,1382,3136,2475,1465,4847,3496,3865,1085,3004,
2591,1084, 213,2287,1963,3565,2250, 822, 793,4574,3187,1772,1789,3050, 595,1484,
1959,2770,1080,2650, 456, 422,2996, 940,3322,4328,4345,3092,2742, 965,2784, 739,
4124, 952,1358,2498,2949,2565, 332,2698,2378, 660,2260,2473,4194,3856,2919, 535,
1260,2651,1208,1428,1300,1949,1303,2942, 433,2455,2450,1251,1946, 614,1269, 641,
1306,1810,2737,3078,2912, 564,2365,1419,1415,1497,4460,2367,2185,1379,3005,1307,
3218,2175,1897,3063, 682,1157,4040,4005,1712,1160,1941,1399, 394, 402,2952,1573,
1151,2986,2404, 862, 299,2033,1489,3006, 346, 171,2886,3401,1726,2932, 168,2533,
47,2507,1030,3735,1145,3370,1395,1318,1579,3609,4560,2857,4116,1457,2529,1965,
504,1036,2690,2988,2405, 745,5871, 849,2397,2056,3081, 863,2359,3857,2096, 99,
1397,1769,2300,4428,1643,3455,1978,1757,3718,1440, 35,4879,3742,1296,4228,2280,
160,5063,1599,2013, 166, 520,3479,1646,3345,3012, 490,1937,1545,1264,2182,2505,
1096,1188,1369,1436,2421,1667,2792,2460,1270,2122, 727,3167,2143, 806,1706,1012,
1800,3037, 960,2218,1882, 805, 139,2456,1139,1521, 851,1052,3093,3089, 342,2039,
744,5097,1468,1502,1585,2087, 223, 939, 326,2140,2577, 892,2481,1623,4077, 982,
3708, 135,2131, 87,2503,3114,2326,1106, 876,1616, 547,2997,2831,2093,3441,4530,
4314, 9,3256,4229,4148, 659,1462,1986,1710,2046,2913,2231,4090,4880,5255,3392,
3274,1368,3689,4645,1477, 705,3384,3635,1068,1529,2941,1458,3782,1509, 100,1656,
2548, 718,2339, 408,1590,2780,3548,1838,4117,3719,1345,3530, 717,3442,2778,3220,
2898,1892,4590,3614,3371,2043,1998,1224,3483, 891, 635, 584,2559,3355, 733,1766,
1729,1172,3789,1891,2307, 781,2982,2271,1957,1580,5773,2633,2005,4195,3097,1535,
3213,1189,1934,5693,3262, 586,3118,1324,1598, 517,1564,2217,1868,1893,4445,3728,
2703,3139,1526,1787,1992,3882,2875,1549,1199,1056,2224,1904,2711,5098,4287, 338,
1993,3129,3489,2689,1809,2815,1997, 957,1855,3898,2550,3275,3057,1105,1319, 627,
1505,1911,1883,3526, 698,3629,3456,1833,1431, 746, 77,1261,2017,2296,1977,1885,
125,1334,1600, 525,1798,1109,2222,1470,1945, 559,2236,1186,3443,2476,1929,1411,
2411,3135,1777,3372,2621,1841,1613,3229, 668,1430,1839,2643,2916, 195,1989,2671,
2358,1387, 629,3205,2293,5256,4439, 123,1310, 888,1879,4300,3021,3605,1003,1162,
3192,2910,2010, 140,2395,2859, 55,1082,2012,2901, 662, 419,2081,1438, 680,2774,
4654,3912,1620,1731,1625,5035,4065,2328, 512,1344, 802,5443,2163,2311,2537, 524,
3399, 98,1155,2103,1918,2606,3925,2816,1393,2465,1504,3773,2177,3963,1478,4346,
180,1113,4655,3461,2028,1698, 833,2696,1235,1322,1594,4408,3623,3013,3225,2040,
3022, 541,2881, 607,3632,2029,1665,1219, 639,1385,1686,1099,2803,3231,1938,3188,
2858, 427, 676,2772,1168,2025, 454,3253,2486,3556, 230,1950, 580, 791,1991,1280,
1086,1974,2034, 630, 257,3338,2788,4903,1017, 86,4790, 966,2789,1995,1696,1131,
259,3095,4188,1308, 179,1463,5257, 289,4107,1248, 42,3413,1725,2288, 896,1947,
774,4474,4254, 604,3430,4264, 392,2514,2588, 452, 237,1408,3018, 988,4531,1970,
3034,3310, 540,2370,1562,1288,2990, 502,4765,1147, 4,1853,2708, 207, 294,2814,
4078,2902,2509, 684, 34,3105,3532,2551, 644, 709,2801,2344, 573,1727,3573,3557,
2021,1081,3100,4315,2100,3681, 199,2263,1837,2385, 146,3484,1195,2776,3949, 997,
1939,3973,1008,1091,1202,1962,1847,1149,4209,5444,1076, 493, 117,5400,2521, 972,
1490,2934,1796,4542,2374,1512,2933,2657, 413,2888,1135,2762,2314,2156,1355,2369,
766,2007,2527,2170,3124,2491,2593,2632,4757,2437, 234,3125,3591,1898,1750,1376,
1942,3468,3138, 570,2127,2145,3276,4131, 962, 132,1445,4196, 19, 941,3624,3480,
3366,1973,1374,4461,3431,2629, 283,2415,2275, 808,2887,3620,2112,2563,1353,3610,
955,1089,3103,1053, 96, 88,4097, 823,3808,1583, 399, 292,4091,3313, 421,1128,
642,4006, 903,2539,1877,2082, 596, 29,4066,1790, 722,2157, 130, 995,1569, 769,
1485, 464, 513,2213, 288,1923,1101,2453,4316, 133, 486,2445, 50, 625, 487,2207,
57, 423, 481,2962, 159,3729,1558, 491, 303, 482, 501, 240,2837, 112,3648,2392,
1783, 362, 8,3433,3422, 610,2793,3277,1390,1284,1654, 21,3823, 734, 367, 623,
193, 287, 374,1009,1483, 816, 476, 313,2255,2340,1262,2150,2899,1146,2581, 782,
2116,1659,2018,1880, 255,3586,3314,1110,2867,2137,2564, 986,2767,5185,2006, 650,
158, 926, 762, 881,3157,2717,2362,3587, 306,3690,3245,1542,3077,2427,1691,2478,
2118,2985,3490,2438, 539,2305, 983, 129,1754, 355,4201,2386, 827,2923, 104,1773,
2838,2771, 411,2905,3919, 376, 767, 122,1114, 828,2422,1817,3506, 266,3460,1007,
1609,4998, 945,2612,4429,2274, 726,1247,1964,2914,2199,2070,4002,4108, 657,3323,
1422, 579, 455,2764,4737,1222,2895,1670, 824,1223,1487,2525, 558, 861,3080, 598,
2659,2515,1967, 752,2583,2376,2214,4180, 977, 704,2464,4999,2622,4109,1210,2961,
819,1541, 142,2284, 44, 418, 457,1126,3730,4347,4626,1644,1876,3671,1864, 302,
1063,5694, 624, 723,1984,3745,1314,1676,2488,1610,1449,3558,3569,2166,2098, 409,
1011,2325,3704,2306, 818,1732,1383,1824,1844,3757, 999,2705,3497,1216,1423,2683,
2426,2954,2501,2726,2229,1475,2554,5064,1971,1794,1666,2014,1343, 783, 724, 191,
2434,1354,2220,5065,1763,2752,2472,4152, 131, 175,2885,3434, 92,1466,4920,2616,
3871,3872,3866, 128,1551,1632, 669,1854,3682,4691,4125,1230, 188,2973,3290,1302,
1213, 560,3266, 917, 763,3909,3249,1760, 868,1958, 764,1782,2097, 145,2277,3774,
4462, 64,1491,3062, 971,2132,3606,2442, 221,1226,1617, 218, 323,1185,3207,3147,
571, 619,1473,1005,1744,2281, 449,1887,2396,3685, 275, 375,3816,1743,3844,3731,
845,1983,2350,4210,1377, 773, 967,3499,3052,3743,2725,4007,1697,1022,3943,1464,
3264,2855,2722,1952,1029,2839,2467, 84,4383,2215, 820,1391,2015,2448,3672, 377,
1948,2168, 797,2545,3536,2578,2645, 94,2874,1678, 405,1259,3071, 771, 546,1315,
470,1243,3083, 895,2468, 981, 969,2037, 846,4181, 653,1276,2928, 14,2594, 557,
3007,2474, 156, 902,1338,1740,2574, 537,2518, 973,2282,2216,2433,1928, 138,2903,
1293,2631,1612, 646,3457, 839,2935, 111, 496,2191,2847, 589,3186, 149,3994,2060,
4031,2641,4067,3145,1870, 37,3597,2136,1025,2051,3009,3383,3549,1121,1016,3261,
1301, 251,2446,2599,2153, 872,3246, 637, 334,3705, 831, 884, 921,3065,3140,4092,
2198,1944, 246,2964, 108,2045,1152,1921,2308,1031, 203,3173,4170,1907,3890, 810,
1401,2003,1690, 506, 647,1242,2828,1761,1649,3208,2249,1589,3709,2931,5156,1708,
498, 666,2613, 834,3817,1231, 184,2851,1124, 883,3197,2261,3710,1765,1553,2658,
1178,2639,2351, 93,1193, 942,2538,2141,4402, 235,1821, 870,1591,2192,1709,1871,
3341,1618,4126,2595,2334, 603, 651, 69, 701, 268,2662,3411,2555,1380,1606, 503,
448, 254,2371,2646, 574,1187,2309,1770, 322,2235,1292,1801, 305, 566,1133, 229,
2067,2057, 706, 167, 483,2002,2672,3295,1820,3561,3067, 316, 378,2746,3452,1112,
136,1981, 507,1651,2917,1117, 285,4591, 182,2580,3522,1304, 335,3303,1835,2504,
1795,1792,2248, 674,1018,2106,2449,1857,2292,2845, 976,3047,1781,2600,2727,1389,
1281, 52,3152, 153, 265,3950, 672,3485,3951,4463, 430,1183, 365, 278,2169, 27,
1407,1336,2304, 209,1340,1730,2202,1852,2403,2883, 979,1737,1062, 631,2829,2542,
3876,2592, 825,2086,2226,3048,3625, 352,1417,3724, 542, 991, 431,1351,3938,1861,
2294, 826,1361,2927,3142,3503,1738, 463,2462,2723, 582,1916,1595,2808, 400,3845,
3891,2868,3621,2254, 58,2492,1123, 910,2160,2614,1372,1603,1196,1072,3385,1700,
3267,1980, 696, 480,2430, 920, 799,1570,2920,1951,2041,4047,2540,1321,4223,2469,
3562,2228,1271,2602, 401,2833,3351,2575,5157, 907,2312,1256, 410, 263,3507,1582,
996, 678,1849,2316,1480, 908,3545,2237, 703,2322, 667,1826,2849,1531,2604,2999,
2407,3146,2151,2630,1786,3711, 469,3542, 497,3899,2409, 858, 837,4446,3393,1274,
786, 620,1845,2001,3311, 484, 308,3367,1204,1815,3691,2332,1532,2557,1842,2020,
2724,1927,2333,4440, 567, 22,1673,2728,4475,1987,1858,1144,1597, 101,1832,3601,
12, 974,3783,4391, 951,1412, 1,3720, 453,4608,4041, 528,1041,1027,3230,2628,
1129, 875,1051,3291,1203,2262,1069,2860,2799,2149,2615,3278, 144,1758,3040, 31,
475,1680, 366,2685,3184, 311,1642,4008,2466,5036,1593,1493,2809, 216,1420,1668,
233, 304,2128,3284, 232,1429,1768,1040,2008,3407,2740,2967,2543, 242,2133, 778,
1565,2022,2620, 505,2189,2756,1098,2273, 372,1614, 708, 553,2846,2094,2278, 169,
3626,2835,4161, 228,2674,3165, 809,1454,1309, 466,1705,1095, 900,3423, 880,2667,
3751,5258,2317,3109,2571,4317,2766,1503,1342, 866,4447,1118, 63,2076, 314,1881,
1348,1061, 172, 978,3515,1747, 532, 511,3970, 6, 601, 905,2699,3300,1751, 276,
1467,3725,2668, 65,4239,2544,2779,2556,1604, 578,2451,1802, 992,2331,2624,1320,
3446, 713,1513,1013, 103,2786,2447,1661, 886,1702, 916, 654,3574,2031,1556, 751,
2178,2821,2179,1498,1538,2176, 271, 914,2251,2080,1325, 638,1953,2937,3877,2432,
2754, 95,3265,1716, 260,1227,4083, 775, 106,1357,3254, 426,1607, 555,2480, 772,
1985, 244,2546, 474, 495,1046,2611,1851,2061, 71,2089,1675,2590, 742,3758,2843,
3222,1433, 267,2180,2576,2826,2233,2092,3913,2435, 956,1745,3075, 856,2113,1116,
451, 3,1988,2896,1398, 993,2463,1878,2049,1341,2718,2721,2870,2108, 712,2904,
4363,2753,2324, 277,2872,2349,2649, 384, 987, 435, 691,3000, 922, 164,3939, 652,
1500,1184,4153,2482,3373,2165,4848,2335,3775,3508,3154,2806,2830,1554,2102,1664,
2530,1434,2408, 893,1547,2623,3447,2832,2242,2532,3169,2856,3223,2078, 49,3770,
3469, 462, 318, 656,2259,3250,3069, 679,1629,2758, 344,1138,1104,3120,1836,1283,
3115,2154,1437,4448, 934, 759,1999, 794,2862,1038, 533,2560,1722,2342, 855,2626,
1197,1663,4476,3127, 85,4240,2528, 25,1111,1181,3673, 407,3470,4561,2679,2713,
768,1925,2841,3986,1544,1165, 932, 373,1240,2146,1930,2673, 721,4766, 354,4333,
391,2963, 187, 61,3364,1442,1102, 330,1940,1767, 341,3809,4118, 393,2496,2062,
2211, 105, 331, 300, 439, 913,1332, 626, 379,3304,1557, 328, 689,3952, 309,1555,
931, 317,2517,3027, 325, 569, 686,2107,3084, 60,1042,1333,2794, 264,3177,4014,
1628, 258,3712, 7,4464,1176,1043,1778, 683, 114,1975, 78,1492, 383,1886, 510,
386, 645,5291,2891,2069,3305,4138,3867,2939,2603,2493,1935,1066,1848,3588,1015,
1282,1289,4609, 697,1453,3044,2666,3611,1856,2412, 54, 719,1330, 568,3778,2459,
1748, 788, 492, 551,1191,1000, 488,3394,3763, 282,1799, 348,2016,1523,3155,2390,
1049, 382,2019,1788,1170, 729,2968,3523, 897,3926,2785,2938,3292, 350,2319,3238,
1718,1717,2655,3453,3143,4465, 161,2889,2980,2009,1421, 56,1908,1640,2387,2232,
1917,1874,2477,4921, 148, 83,3438, 592,4245,2882,1822,1055, 741, 115,1496,1624,
381,1638,4592,1020, 516,3214, 458, 947,4575,1432, 211,1514,2926,1865,2142, 189,
852,1221,1400,1486, 882,2299,4036, 351, 28,1122, 700,6479,6480,6481,6482,6483, # last 512
#Everything below is of no interest for detection purpose
5508,6484,3900,3414,3974,4441,4024,3537,4037,5628,5099,3633,6485,3148,6486,3636,
5509,3257,5510,5973,5445,5872,4941,4403,3174,4627,5873,6276,2286,4230,5446,5874,
5122,6102,6103,4162,5447,5123,5323,4849,6277,3980,3851,5066,4246,5774,5067,6278,
3001,2807,5695,3346,5775,5974,5158,5448,6487,5975,5976,5776,3598,6279,5696,4806,
4211,4154,6280,6488,6489,6490,6281,4212,5037,3374,4171,6491,4562,4807,4722,4827,
5977,6104,4532,4079,5159,5324,5160,4404,3858,5359,5875,3975,4288,4610,3486,4512,
5325,3893,5360,6282,6283,5560,2522,4231,5978,5186,5449,2569,3878,6284,5401,3578,
4415,6285,4656,5124,5979,2506,4247,4449,3219,3417,4334,4969,4329,6492,4576,4828,
4172,4416,4829,5402,6286,3927,3852,5361,4369,4830,4477,4867,5876,4173,6493,6105,
4657,6287,6106,5877,5450,6494,4155,4868,5451,3700,5629,4384,6288,6289,5878,3189,
4881,6107,6290,6495,4513,6496,4692,4515,4723,5100,3356,6497,6291,3810,4080,5561,
3570,4430,5980,6498,4355,5697,6499,4724,6108,6109,3764,4050,5038,5879,4093,3226,
6292,5068,5217,4693,3342,5630,3504,4831,4377,4466,4309,5698,4431,5777,6293,5778,
4272,3706,6110,5326,3752,4676,5327,4273,5403,4767,5631,6500,5699,5880,3475,5039,
6294,5562,5125,4348,4301,4482,4068,5126,4593,5700,3380,3462,5981,5563,3824,5404,
4970,5511,3825,4738,6295,6501,5452,4516,6111,5881,5564,6502,6296,5982,6503,4213,
4163,3454,6504,6112,4009,4450,6113,4658,6297,6114,3035,6505,6115,3995,4904,4739,
4563,4942,4110,5040,3661,3928,5362,3674,6506,5292,3612,4791,5565,4149,5983,5328,
5259,5021,4725,4577,4564,4517,4364,6298,5405,4578,5260,4594,4156,4157,5453,3592,
3491,6507,5127,5512,4709,4922,5984,5701,4726,4289,6508,4015,6116,5128,4628,3424,
4241,5779,6299,4905,6509,6510,5454,5702,5780,6300,4365,4923,3971,6511,5161,3270,
3158,5985,4100, 867,5129,5703,6117,5363,3695,3301,5513,4467,6118,6512,5455,4232,
4242,4629,6513,3959,4478,6514,5514,5329,5986,4850,5162,5566,3846,4694,6119,5456,
4869,5781,3779,6301,5704,5987,5515,4710,6302,5882,6120,4392,5364,5705,6515,6121,
6516,6517,3736,5988,5457,5989,4695,2457,5883,4551,5782,6303,6304,6305,5130,4971,
6122,5163,6123,4870,3263,5365,3150,4871,6518,6306,5783,5069,5706,3513,3498,4409,
5330,5632,5366,5458,5459,3991,5990,4502,3324,5991,5784,3696,4518,5633,4119,6519,
4630,5634,4417,5707,4832,5992,3418,6124,5993,5567,4768,5218,6520,4595,3458,5367,
6125,5635,6126,4202,6521,4740,4924,6307,3981,4069,4385,6308,3883,2675,4051,3834,
4302,4483,5568,5994,4972,4101,5368,6309,5164,5884,3922,6127,6522,6523,5261,5460,
5187,4164,5219,3538,5516,4111,3524,5995,6310,6311,5369,3181,3386,2484,5188,3464,
5569,3627,5708,6524,5406,5165,4677,4492,6312,4872,4851,5885,4468,5996,6313,5709,
5710,6128,2470,5886,6314,5293,4882,5785,3325,5461,5101,6129,5711,5786,6525,4906,
6526,6527,4418,5887,5712,4808,2907,3701,5713,5888,6528,3765,5636,5331,6529,6530,
3593,5889,3637,4943,3692,5714,5787,4925,6315,6130,5462,4405,6131,6132,6316,5262,
6531,6532,5715,3859,5716,5070,4696,5102,3929,5788,3987,4792,5997,6533,6534,3920,
4809,5000,5998,6535,2974,5370,6317,5189,5263,5717,3826,6536,3953,5001,4883,3190,
5463,5890,4973,5999,4741,6133,6134,3607,5570,6000,4711,3362,3630,4552,5041,6318,
6001,2950,2953,5637,4646,5371,4944,6002,2044,4120,3429,6319,6537,5103,4833,6538,
6539,4884,4647,3884,6003,6004,4758,3835,5220,5789,4565,5407,6540,6135,5294,4697,
4852,6320,6321,3206,4907,6541,6322,4945,6542,6136,6543,6323,6005,4631,3519,6544,
5891,6545,5464,3784,5221,6546,5571,4659,6547,6324,6137,5190,6548,3853,6549,4016,
4834,3954,6138,5332,3827,4017,3210,3546,4469,5408,5718,3505,4648,5790,5131,5638,
5791,5465,4727,4318,6325,6326,5792,4553,4010,4698,3439,4974,3638,4335,3085,6006,
5104,5042,5166,5892,5572,6327,4356,4519,5222,5573,5333,5793,5043,6550,5639,5071,
4503,6328,6139,6551,6140,3914,3901,5372,6007,5640,4728,4793,3976,3836,4885,6552,
4127,6553,4451,4102,5002,6554,3686,5105,6555,5191,5072,5295,4611,5794,5296,6556,
5893,5264,5894,4975,5466,5265,4699,4976,4370,4056,3492,5044,4886,6557,5795,4432,
4769,4357,5467,3940,4660,4290,6141,4484,4770,4661,3992,6329,4025,4662,5022,4632,
4835,4070,5297,4663,4596,5574,5132,5409,5895,6142,4504,5192,4664,5796,5896,3885,
5575,5797,5023,4810,5798,3732,5223,4712,5298,4084,5334,5468,6143,4052,4053,4336,
4977,4794,6558,5335,4908,5576,5224,4233,5024,4128,5469,5225,4873,6008,5045,4729,
4742,4633,3675,4597,6559,5897,5133,5577,5003,5641,5719,6330,6560,3017,2382,3854,
4406,4811,6331,4393,3964,4946,6561,2420,3722,6562,4926,4378,3247,1736,4442,6332,
5134,6333,5226,3996,2918,5470,4319,4003,4598,4743,4744,4485,3785,3902,5167,5004,
5373,4394,5898,6144,4874,1793,3997,6334,4085,4214,5106,5642,4909,5799,6009,4419,
4189,3330,5899,4165,4420,5299,5720,5227,3347,6145,4081,6335,2876,3930,6146,3293,
3786,3910,3998,5900,5300,5578,2840,6563,5901,5579,6147,3531,5374,6564,6565,5580,
4759,5375,6566,6148,3559,5643,6336,6010,5517,6337,6338,5721,5902,3873,6011,6339,
6567,5518,3868,3649,5722,6568,4771,4947,6569,6149,4812,6570,2853,5471,6340,6341,
5644,4795,6342,6012,5723,6343,5724,6013,4349,6344,3160,6150,5193,4599,4514,4493,
5168,4320,6345,4927,3666,4745,5169,5903,5005,4928,6346,5725,6014,4730,4203,5046,
4948,3395,5170,6015,4150,6016,5726,5519,6347,5047,3550,6151,6348,4197,4310,5904,
6571,5581,2965,6152,4978,3960,4291,5135,6572,5301,5727,4129,4026,5905,4853,5728,
5472,6153,6349,4533,2700,4505,5336,4678,3583,5073,2994,4486,3043,4554,5520,6350,
6017,5800,4487,6351,3931,4103,5376,6352,4011,4321,4311,4190,5136,6018,3988,3233,
4350,5906,5645,4198,6573,5107,3432,4191,3435,5582,6574,4139,5410,6353,5411,3944,
5583,5074,3198,6575,6354,4358,6576,5302,4600,5584,5194,5412,6577,6578,5585,5413,
5303,4248,5414,3879,4433,6579,4479,5025,4854,5415,6355,4760,4772,3683,2978,4700,
3797,4452,3965,3932,3721,4910,5801,6580,5195,3551,5907,3221,3471,3029,6019,3999,
5908,5909,5266,5267,3444,3023,3828,3170,4796,5646,4979,4259,6356,5647,5337,3694,
6357,5648,5338,4520,4322,5802,3031,3759,4071,6020,5586,4836,4386,5048,6581,3571,
4679,4174,4949,6154,4813,3787,3402,3822,3958,3215,3552,5268,4387,3933,4950,4359,
6021,5910,5075,3579,6358,4234,4566,5521,6359,3613,5049,6022,5911,3375,3702,3178,
4911,5339,4521,6582,6583,4395,3087,3811,5377,6023,6360,6155,4027,5171,5649,4421,
4249,2804,6584,2270,6585,4000,4235,3045,6156,5137,5729,4140,4312,3886,6361,4330,
6157,4215,6158,3500,3676,4929,4331,3713,4930,5912,4265,3776,3368,5587,4470,4855,
3038,4980,3631,6159,6160,4132,4680,6161,6362,3923,4379,5588,4255,6586,4121,6587,
6363,4649,6364,3288,4773,4774,6162,6024,6365,3543,6588,4274,3107,3737,5050,5803,
4797,4522,5589,5051,5730,3714,4887,5378,4001,4523,6163,5026,5522,4701,4175,2791,
3760,6589,5473,4224,4133,3847,4814,4815,4775,3259,5416,6590,2738,6164,6025,5304,
3733,5076,5650,4816,5590,6591,6165,6592,3934,5269,6593,3396,5340,6594,5804,3445,
3602,4042,4488,5731,5732,3525,5591,4601,5196,6166,6026,5172,3642,4612,3202,4506,
4798,6366,3818,5108,4303,5138,5139,4776,3332,4304,2915,3415,4434,5077,5109,4856,
2879,5305,4817,6595,5913,3104,3144,3903,4634,5341,3133,5110,5651,5805,6167,4057,
5592,2945,4371,5593,6596,3474,4182,6367,6597,6168,4507,4279,6598,2822,6599,4777,
4713,5594,3829,6169,3887,5417,6170,3653,5474,6368,4216,2971,5228,3790,4579,6369,
5733,6600,6601,4951,4746,4555,6602,5418,5475,6027,3400,4665,5806,6171,4799,6028,
5052,6172,3343,4800,4747,5006,6370,4556,4217,5476,4396,5229,5379,5477,3839,5914,
5652,5807,4714,3068,4635,5808,6173,5342,4192,5078,5419,5523,5734,6174,4557,6175,
4602,6371,6176,6603,5809,6372,5735,4260,3869,5111,5230,6029,5112,6177,3126,4681,
5524,5915,2706,3563,4748,3130,6178,4018,5525,6604,6605,5478,4012,4837,6606,4534,
4193,5810,4857,3615,5479,6030,4082,3697,3539,4086,5270,3662,4508,4931,5916,4912,
5811,5027,3888,6607,4397,3527,3302,3798,2775,2921,2637,3966,4122,4388,4028,4054,
1633,4858,5079,3024,5007,3982,3412,5736,6608,3426,3236,5595,3030,6179,3427,3336,
3279,3110,6373,3874,3039,5080,5917,5140,4489,3119,6374,5812,3405,4494,6031,4666,
4141,6180,4166,6032,5813,4981,6609,5081,4422,4982,4112,3915,5653,3296,3983,6375,
4266,4410,5654,6610,6181,3436,5082,6611,5380,6033,3819,5596,4535,5231,5306,5113,
6612,4952,5918,4275,3113,6613,6376,6182,6183,5814,3073,4731,4838,5008,3831,6614,
4888,3090,3848,4280,5526,5232,3014,5655,5009,5737,5420,5527,6615,5815,5343,5173,
5381,4818,6616,3151,4953,6617,5738,2796,3204,4360,2989,4281,5739,5174,5421,5197,
3132,5141,3849,5142,5528,5083,3799,3904,4839,5480,2880,4495,3448,6377,6184,5271,
5919,3771,3193,6034,6035,5920,5010,6036,5597,6037,6378,6038,3106,5422,6618,5423,
5424,4142,6619,4889,5084,4890,4313,5740,6620,3437,5175,5307,5816,4199,5198,5529,
5817,5199,5656,4913,5028,5344,3850,6185,2955,5272,5011,5818,4567,4580,5029,5921,
3616,5233,6621,6622,6186,4176,6039,6379,6380,3352,5200,5273,2908,5598,5234,3837,
5308,6623,6624,5819,4496,4323,5309,5201,6625,6626,4983,3194,3838,4167,5530,5922,
5274,6381,6382,3860,3861,5599,3333,4292,4509,6383,3553,5481,5820,5531,4778,6187,
3955,3956,4324,4389,4218,3945,4325,3397,2681,5923,4779,5085,4019,5482,4891,5382,
5383,6040,4682,3425,5275,4094,6627,5310,3015,5483,5657,4398,5924,3168,4819,6628,
5925,6629,5532,4932,4613,6041,6630,4636,6384,4780,4204,5658,4423,5821,3989,4683,
5822,6385,4954,6631,5345,6188,5425,5012,5384,3894,6386,4490,4104,6632,5741,5053,
6633,5823,5926,5659,5660,5927,6634,5235,5742,5824,4840,4933,4820,6387,4859,5928,
4955,6388,4143,3584,5825,5346,5013,6635,5661,6389,5014,5484,5743,4337,5176,5662,
6390,2836,6391,3268,6392,6636,6042,5236,6637,4158,6638,5744,5663,4471,5347,3663,
4123,5143,4293,3895,6639,6640,5311,5929,5826,3800,6189,6393,6190,5664,5348,3554,
3594,4749,4603,6641,5385,4801,6043,5827,4183,6642,5312,5426,4761,6394,5665,6191,
4715,2669,6643,6644,5533,3185,5427,5086,5930,5931,5386,6192,6044,6645,4781,4013,
5745,4282,4435,5534,4390,4267,6045,5746,4984,6046,2743,6193,3501,4087,5485,5932,
5428,4184,4095,5747,4061,5054,3058,3862,5933,5600,6646,5144,3618,6395,3131,5055,
5313,6396,4650,4956,3855,6194,3896,5202,4985,4029,4225,6195,6647,5828,5486,5829,
3589,3002,6648,6397,4782,5276,6649,6196,6650,4105,3803,4043,5237,5830,6398,4096,
3643,6399,3528,6651,4453,3315,4637,6652,3984,6197,5535,3182,3339,6653,3096,2660,
6400,6654,3449,5934,4250,4236,6047,6401,5831,6655,5487,3753,4062,5832,6198,6199,
6656,3766,6657,3403,4667,6048,6658,4338,2897,5833,3880,2797,3780,4326,6659,5748,
5015,6660,5387,4351,5601,4411,6661,3654,4424,5935,4339,4072,5277,4568,5536,6402,
6662,5238,6663,5349,5203,6200,5204,6201,5145,4536,5016,5056,4762,5834,4399,4957,
6202,6403,5666,5749,6664,4340,6665,5936,5177,5667,6666,6667,3459,4668,6404,6668,
6669,4543,6203,6670,4276,6405,4480,5537,6671,4614,5205,5668,6672,3348,2193,4763,
6406,6204,5937,5602,4177,5669,3419,6673,4020,6205,4443,4569,5388,3715,3639,6407,
6049,4058,6206,6674,5938,4544,6050,4185,4294,4841,4651,4615,5488,6207,6408,6051,
5178,3241,3509,5835,6208,4958,5836,4341,5489,5278,6209,2823,5538,5350,5206,5429,
6675,4638,4875,4073,3516,4684,4914,4860,5939,5603,5389,6052,5057,3237,5490,3791,
6676,6409,6677,4821,4915,4106,5351,5058,4243,5539,4244,5604,4842,4916,5239,3028,
3716,5837,5114,5605,5390,5940,5430,6210,4332,6678,5540,4732,3667,3840,6053,4305,
3408,5670,5541,6410,2744,5240,5750,6679,3234,5606,6680,5607,5671,3608,4283,4159,
4400,5352,4783,6681,6411,6682,4491,4802,6211,6412,5941,6413,6414,5542,5751,6683,
4669,3734,5942,6684,6415,5943,5059,3328,4670,4144,4268,6685,6686,6687,6688,4372,
3603,6689,5944,5491,4373,3440,6416,5543,4784,4822,5608,3792,4616,5838,5672,3514,
5391,6417,4892,6690,4639,6691,6054,5673,5839,6055,6692,6056,5392,6212,4038,5544,
5674,4497,6057,6693,5840,4284,5675,4021,4545,5609,6418,4454,6419,6213,4113,4472,
5314,3738,5087,5279,4074,5610,4959,4063,3179,4750,6058,6420,6214,3476,4498,4716,
5431,4960,4685,6215,5241,6694,6421,6216,6695,5841,5945,6422,3748,5946,5179,3905,
5752,5545,5947,4374,6217,4455,6423,4412,6218,4803,5353,6696,3832,5280,6219,4327,
4702,6220,6221,6059,4652,5432,6424,3749,4751,6425,5753,4986,5393,4917,5948,5030,
5754,4861,4733,6426,4703,6697,6222,4671,5949,4546,4961,5180,6223,5031,3316,5281,
6698,4862,4295,4934,5207,3644,6427,5842,5950,6428,6429,4570,5843,5282,6430,6224,
5088,3239,6060,6699,5844,5755,6061,6431,2701,5546,6432,5115,5676,4039,3993,3327,
4752,4425,5315,6433,3941,6434,5677,4617,4604,3074,4581,6225,5433,6435,6226,6062,
4823,5756,5116,6227,3717,5678,4717,5845,6436,5679,5846,6063,5847,6064,3977,3354,
6437,3863,5117,6228,5547,5394,4499,4524,6229,4605,6230,4306,4500,6700,5951,6065,
3693,5952,5089,4366,4918,6701,6231,5548,6232,6702,6438,4704,5434,6703,6704,5953,
4168,6705,5680,3420,6706,5242,4407,6066,3812,5757,5090,5954,4672,4525,3481,5681,
4618,5395,5354,5316,5955,6439,4962,6707,4526,6440,3465,4673,6067,6441,5682,6708,
5435,5492,5758,5683,4619,4571,4674,4804,4893,4686,5493,4753,6233,6068,4269,6442,
6234,5032,4705,5146,5243,5208,5848,6235,6443,4963,5033,4640,4226,6236,5849,3387,
6444,6445,4436,4437,5850,4843,5494,4785,4894,6709,4361,6710,5091,5956,3331,6237,
4987,5549,6069,6711,4342,3517,4473,5317,6070,6712,6071,4706,6446,5017,5355,6713,
6714,4988,5436,6447,4734,5759,6715,4735,4547,4456,4754,6448,5851,6449,6450,3547,
5852,5318,6451,6452,5092,4205,6716,6238,4620,4219,5611,6239,6072,4481,5760,5957,
5958,4059,6240,6453,4227,4537,6241,5761,4030,4186,5244,5209,3761,4457,4876,3337,
5495,5181,6242,5959,5319,5612,5684,5853,3493,5854,6073,4169,5613,5147,4895,6074,
5210,6717,5182,6718,3830,6243,2798,3841,6075,6244,5855,5614,3604,4606,5496,5685,
5118,5356,6719,6454,5960,5357,5961,6720,4145,3935,4621,5119,5962,4261,6721,6455,
4786,5963,4375,4582,6245,6246,6247,6076,5437,4877,5856,3376,4380,6248,4160,6722,
5148,6456,5211,6457,6723,4718,6458,6724,6249,5358,4044,3297,6459,6250,5857,5615,
5497,5245,6460,5498,6725,6251,6252,5550,3793,5499,2959,5396,6461,6462,4572,5093,
5500,5964,3806,4146,6463,4426,5762,5858,6077,6253,4755,3967,4220,5965,6254,4989,
5501,6464,4352,6726,6078,4764,2290,5246,3906,5438,5283,3767,4964,2861,5763,5094,
6255,6256,4622,5616,5859,5860,4707,6727,4285,4708,4824,5617,6257,5551,4787,5212,
4965,4935,4687,6465,6728,6466,5686,6079,3494,4413,2995,5247,5966,5618,6729,5967,
5764,5765,5687,5502,6730,6731,6080,5397,6467,4990,6258,6732,4538,5060,5619,6733,
4719,5688,5439,5018,5149,5284,5503,6734,6081,4607,6259,5120,3645,5861,4583,6260,
4584,4675,5620,4098,5440,6261,4863,2379,3306,4585,5552,5689,4586,5285,6735,4864,
6736,5286,6082,6737,4623,3010,4788,4381,4558,5621,4587,4896,3698,3161,5248,4353,
4045,6262,3754,5183,4588,6738,6263,6739,6740,5622,3936,6741,6468,6742,6264,5095,
6469,4991,5968,6743,4992,6744,6083,4897,6745,4256,5766,4307,3108,3968,4444,5287,
3889,4343,6084,4510,6085,4559,6086,4898,5969,6746,5623,5061,4919,5249,5250,5504,
5441,6265,5320,4878,3242,5862,5251,3428,6087,6747,4237,5624,5442,6266,5553,4539,
6748,2585,3533,5398,4262,6088,5150,4736,4438,6089,6267,5505,4966,6749,6268,6750,
6269,5288,5554,3650,6090,6091,4624,6092,5690,6751,5863,4270,5691,4277,5555,5864,
6752,5692,4720,4865,6470,5151,4688,4825,6753,3094,6754,6471,3235,4653,6755,5213,
5399,6756,3201,4589,5865,4967,6472,5866,6473,5019,3016,6757,5321,4756,3957,4573,
6093,4993,5767,4721,6474,6758,5625,6759,4458,6475,6270,6760,5556,4994,5214,5252,
6271,3875,5768,6094,5034,5506,4376,5769,6761,2120,6476,5253,5770,6762,5771,5970,
3990,5971,5557,5558,5772,6477,6095,2787,4641,5972,5121,6096,6097,6272,6763,3703,
5867,5507,6273,4206,6274,4789,6098,6764,3619,3646,3833,3804,2394,3788,4936,3978,
4866,4899,6099,6100,5559,6478,6765,3599,5868,6101,5869,5870,6275,6766,4527,6767]
end

View File

@@ -1,42 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
module CharDet
class GB2312Prober < MultiByteCharSetProber
def initialize
super
@_mCodingSM = CodingStateMachine.new(GB2312SMModel)
@_mDistributionAnalyzer = GB2312DistributionAnalysis.new()
reset()
end
def get_charset_name
return "GB2312"
end
end
end

View File

@@ -1,289 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is Mozilla Universal charset detector code.
#
# The Initial Developer of the Original Code is
# Shy Shalom
# Portions created by the Initial Developer are Copyright (C) 2005
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
# This prober doesn't actually recognize a language or a charset.
# It is a helper prober for the use of the Hebrew model probers
### General ideas of the Hebrew charset recognition ###
#
# Four main charsets exist in Hebrew:
# "ISO-8859-8" - Visual Hebrew
# "windows-1255" - Logical Hebrew
# "ISO-8859-8-I" - Logical Hebrew
# "x-mac-hebrew" - ?? Logical Hebrew ??
#
# Both "ISO" charsets use a completely identical set of code points, whereas
# "windows-1255" and "x-mac-hebrew" are two different proper supersets of
# these code points. windows-1255 defines additional characters in the range
# 0x80-0x9F as some misc punctuation marks as well as some Hebrew-specific
# diacritics and additional 'Yiddish' ligature letters in the range 0xc0-0xd6.
# x-mac-hebrew defines similar additional code points but with a different
# mapping.
#
# As far as an average Hebrew text with no diacritics is concerned, all four
# charsets are identical with respect to code points. Meaning that for the
# main Hebrew alphabet, all four map the same values to all 27 Hebrew letters
# (including final letters).
#
# The dominant difference between these charsets is their directionality.
# "Visual" directionality means that the text is ordered as if the renderer is
# not aware of a BIDI rendering algorithm. The renderer sees the text and
# draws it from left to right. The text itself when ordered naturally is read
# backwards. A buffer of Visual Hebrew generally looks like so:
# "[last word of first line spelled backwards] [whole line ordered backwards
# and spelled backwards] [first word of first line spelled backwards]
# [end of line] [last word of second line] ... etc' "
# adding punctuation marks, numbers and English text to visual text is
# naturally also "visual" and from left to right.
#
# "Logical" directionality means the text is ordered "naturally" according to
# the order it is read. It is the responsibility of the renderer to display
# the text from right to left. A BIDI algorithm is used to place general
# punctuation marks, numbers and English text in the text.
#
# Texts in x-mac-hebrew are almost impossible to find on the Internet. From
# what little evidence I could find, it seems that its general directionality
# is Logical.
#
# To sum up all of the above, the Hebrew probing mechanism knows about two
# charsets:
# Visual Hebrew - "ISO-8859-8" - backwards text - Words and sentences are
# backwards while line order is natural. For charset recognition purposes
# the line order is unimportant (In fact, for this implementation, even
# word order is unimportant).
# Logical Hebrew - "windows-1255" - normal, naturally ordered text.
#
# "ISO-8859-8-I" is a subset of windows-1255 and doesn't need to be
# specifically identified.
# "x-mac-hebrew" is also identified as windows-1255. A text in x-mac-hebrew
# that contain special punctuation marks or diacritics is displayed with
# some unconverted characters showing as question marks. This problem might
# be corrected using another model prober for x-mac-hebrew. Due to the fact
# that x-mac-hebrew texts are so rare, writing another model prober isn't
# worth the effort and performance hit.
#
#### The Prober ####
#
# The prober is divided between two SBCharSetProbers and a HebrewProber,
# all of which are managed, created, fed data, inquired and deleted by the
# SBCSGroupProber. The two SBCharSetProbers identify that the text is in
# fact some kind of Hebrew, Logical or Visual. The final decision about which
# one is it is made by the HebrewProber by combining final-letter scores
# with the scores of the two SBCharSetProbers to produce a final answer.
#
# The SBCSGroupProber is responsible for stripping the original text of HTML
# tags, English characters, numbers, low-ASCII punctuation characters, spaces
# and new lines. It reduces any sequence of such characters to a single space.
# The buffer fed to each prober in the SBCS group prober is pure text in
# high-ASCII.
# The two SBCharSetProbers (model probers) share the same language model:
# Win1255Model.
# The first SBCharSetProber uses the model normally as any other
# SBCharSetProber does, to recognize windows-1255, upon which this model was
# built. The second SBCharSetProber is told to make the pair-of-letter
# lookup in the language model backwards. This in practice exactly simulates
# a visual Hebrew model using the windows-1255 logical Hebrew model.
#
# The HebrewProber is not using any language model. All it does is look for
# final-letter evidence suggesting the text is either logical Hebrew or visual
# Hebrew. Disjointed from the model probers, the results of the HebrewProber
# alone are meaningless. HebrewProber always returns 0.00 as confidence
# since it never identifies a charset by itself. Instead, the pointer to the
# HebrewProber is passed to the model probers as a helper "Name Prober".
# When the Group prober receives a positive identification from any prober,
# it asks for the name of the charset identified. If the prober queried is a
# Hebrew model prober, the model prober forwards the call to the
# HebrewProber to make the final decision. In the HebrewProber, the
# decision is made according to the final-letters scores maintained and Both
# model probers scores. The answer is returned in the form of the name of the
# charset identified, either "windows-1255" or "ISO-8859-8".
# windows-1255 / ISO-8859-8 code points of interest
module CharDet
FINAL_KAF = "\xea"
NORMAL_KAF = "\xeb"
FINAL_MEM = "\xed"
NORMAL_MEM = "\xee"
FINAL_NUN = "\xef"
NORMAL_NUN = "\xf0"
FINAL_PE = "\xf3"
NORMAL_PE = "\xf4"
FINAL_TSADI = "\xf5"
NORMAL_TSADI = "\xf6"
# Minimum Visual vs Logical final letter score difference.
# If the difference is below this, don't rely solely on the final letter score distance.
MIN_FINAL_CHAR_DISTANCE = 5
# Minimum Visual vs Logical model score difference.
# If the difference is below this, don't rely at all on the model score distance.
MIN_MODEL_DISTANCE = 0.01
VISUAL_HEBREW_NAME = "ISO-8859-8"
LOGICAL_HEBREW_NAME = "windows-1255"
class HebrewProber < CharSetProber
def initialize
super()
@_mLogicalProber = nil
@_mVisualProber = nil
reset()
end
def reset
@_mFinalCharLogicalScore = 0
@_mFinalCharVisualScore = 0
# The two last characters seen in the previous buffer,
# mPrev and mBeforePrev are initialized to space in order to simulate a word
# delimiter at the beginning of the data
@_mPrev = ' '
@_mBeforePrev = ' '
# These probers are owned by the group prober.
end
def set_model_probers(logicalProber, visualProber)
@_mLogicalProber = logicalProber
@_mVisualProber = visualProber
end
def is_final(c)
return [FINAL_KAF, FINAL_MEM, FINAL_NUN, FINAL_PE, FINAL_TSADI].include?(c)
end
def is_non_final(c)
# The normal Tsadi is not a good Non-Final letter due to words like
# 'lechotet' (to chat) containing an apostrophe after the tsadi. This
# apostrophe is converted to a space in FilterWithoutEnglishLetters causing
# the Non-Final tsadi to appear at an end of a word even though this is not
# the case in the original text.
# The letters Pe and Kaf rarely display a related behavior of not being a
# good Non-Final letter. Words like 'Pop', 'Winamp' and 'Mubarak' for
# example legally end with a Non-Final Pe or Kaf. However, the benefit of
# these letters as Non-Final letters outweighs the damage since these words
# are quite rare.
return [NORMAL_KAF, NORMAL_MEM, NORMAL_NUN, NORMAL_PE].include?(c)
end
def feed(aBuf)
# Final letter analysis for logical-visual decision.
# Look for evidence that the received buffer is either logical Hebrew or
# visual Hebrew.
# The following cases are checked:
# 1) A word longer than 1 letter, ending with a final letter. This is an
# indication that the text is laid out "naturally" since the final letter
# really appears at the end. +1 for logical score.
# 2) A word longer than 1 letter, ending with a Non-Final letter. In normal
# Hebrew, words ending with Kaf, Mem, Nun, Pe or Tsadi, should not end with
# the Non-Final form of that letter. Exceptions to this rule are mentioned
# above in isNonFinal(). This is an indication that the text is laid out
# backwards. +1 for visual score
# 3) A word longer than 1 letter, starting with a final letter. Final letters
# should not appear at the beginning of a word. This is an indication that
# the text is laid out backwards. +1 for visual score.
#
# The visual score and logical score are accumulated throughout the text and
# are finally checked against each other in GetCharSetName().
# No checking for final letters in the middle of words is done since that case
# is not an indication for either Logical or Visual text.
#
# We automatically filter out all 7-bit characters (replace them with spaces)
# so the word boundary detection works properly. [MAP]
if get_state() == ENotMe
# Both model probers say it's not them. No reason to continue.
return ENotMe
end
aBuf = filter_high_bit_only(aBuf)
for cur in aBuf.split(' ')
if cur == ' '
# We stand on a space - a word just ended
if @_mBeforePrev != ' '
# next-to-last char was not a space so self._mPrev is not a 1 letter word
if is_final(@_mPrev)
# case (1) [-2:not space][-1:final letter][cur:space]
@_mFinalCharLogicalScore += 1
elsif is_non_final(@_mPrev)
# case (2) [-2:not space][-1:Non-Final letter][cur:space]
@_mFinalCharVisualScore += 1
end
end
else
# Not standing on a space
if (@_mBeforePrev == ' ') and (is_final(@_mPrev)) and (cur != ' ')
# case (3) [-2:space][-1:final letter][cur:not space]
@_mFinalCharVisualScore += 1
end
end
@_mBeforePrev = @_mPrev
@_mPrev = cur
end
# Forever detecting, till the end or until both model probers return eNotMe (handled above)
return EDetecting
end
def get_charset_name
# Make the decision: is it Logical or Visual?
# If the final letter score distance is dominant enough, rely on it.
finalsub = @_mFinalCharLogicalScore - @_mFinalCharVisualScore
if finalsub >= MIN_FINAL_CHAR_DISTANCE
return LOGICAL_HEBREW_NAME
end
if finalsub <= -MIN_FINAL_CHAR_DISTANCE
return VISUAL_HEBREW_NAME
end
# It's not dominant enough, try to rely on the model scores instead.
modelsub = @_mLogicalProber.get_confidence() - @_mVisualProber.get_confidence()
if modelsub > MIN_MODEL_DISTANCE
return LOGICAL_HEBREW_NAME
end
if modelsub < -MIN_MODEL_DISTANCE
return VISUAL_HEBREW_NAME
end
# Still no good, back to final letter distance, maybe it'll save the day.
if finalsub < 0.0
return VISUAL_HEBREW_NAME
end
# (finalsub > 0 - Logical) or (don't know what to do) default to Logical.
return LOGICAL_HEBREW_NAME
end
def get_state
# Remain active as long as any of the model probers are active.
if (@_mLogicalProber.get_state() == ENotMe) and (@_mVisualProber.get_state() == ENotMe)
return ENotMe
end
return EDetecting
end
end
end

View File

@@ -1,570 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is Mozilla Communicator client code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
# Sampling from about 20M text materials include literature and computer technology
#
# Japanese frequency table, applied to both S-JIS and EUC-JP
# They are sorted in order.
# 128 --> 0.77094
# 256 --> 0.85710
# 512 --> 0.92635
# 1024 --> 0.97130
# 2048 --> 0.99431
#
# Ideal Distribution Ratio = 0.92635 / (1-0.92635) = 12.58
# Random Distribution Ration = 512 / (2965+62+83+86-512) = 0.191
#
# Typical Distribution Ratio, 25% of IDR
module CharDet
JIS_TYPICAL_DISTRIBUTION_RATIO = 3.0
# Char to FreqOrder table ,
JIS_TABLE_SIZE = 4368
JISCharToFreqOrder = [
40, 1, 6, 182, 152, 180, 295,2127, 285, 381,3295,4304,3068,4606,3165,3510, # 16
3511,1822,2785,4607,1193,2226,5070,4608, 171,2996,1247, 18, 179,5071, 856,1661, # 32
1262,5072, 619, 127,3431,3512,3230,1899,1700, 232, 228,1294,1298, 284, 283,2041, # 48
2042,1061,1062, 48, 49, 44, 45, 433, 434,1040,1041, 996, 787,2997,1255,4305, # 64
2108,4609,1684,1648,5073,5074,5075,5076,5077,5078,3687,5079,4610,5080,3927,3928, # 80
5081,3296,3432, 290,2285,1471,2187,5082,2580,2825,1303,2140,1739,1445,2691,3375, # 96
1691,3297,4306,4307,4611, 452,3376,1182,2713,3688,3069,4308,5083,5084,5085,5086, # 112
5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102, # 128
5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,4097,5113,5114,5115,5116,5117, # 144
5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133, # 160
5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149, # 176
5150,5151,5152,4612,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164, # 192
5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,1472, 598, 618, 820,1205, # 208
1309,1412,1858,1307,1692,5176,5177,5178,5179,5180,5181,5182,1142,1452,1234,1172, # 224
1875,2043,2149,1793,1382,2973, 925,2404,1067,1241, 960,1377,2935,1491, 919,1217, # 240
1865,2030,1406,1499,2749,4098,5183,5184,5185,5186,5187,5188,2561,4099,3117,1804, # 256
2049,3689,4309,3513,1663,5189,3166,3118,3298,1587,1561,3433,5190,3119,1625,2998, # 272
3299,4613,1766,3690,2786,4614,5191,5192,5193,5194,2161, 26,3377, 2,3929, 20, # 288
3691, 47,4100, 50, 17, 16, 35, 268, 27, 243, 42, 155, 24, 154, 29, 184, # 304
4, 91, 14, 92, 53, 396, 33, 289, 9, 37, 64, 620, 21, 39, 321, 5, # 320
12, 11, 52, 13, 3, 208, 138, 0, 7, 60, 526, 141, 151,1069, 181, 275, # 336
1591, 83, 132,1475, 126, 331, 829, 15, 69, 160, 59, 22, 157, 55,1079, 312, # 352
109, 38, 23, 25, 10, 19, 79,5195, 61, 382,1124, 8, 30,5196,5197,5198, # 368
5199,5200,5201,5202,5203,5204,5205,5206, 89, 62, 74, 34,2416, 112, 139, 196, # 384
271, 149, 84, 607, 131, 765, 46, 88, 153, 683, 76, 874, 101, 258, 57, 80, # 400
32, 364, 121,1508, 169,1547, 68, 235, 145,2999, 41, 360,3027, 70, 63, 31, # 416
43, 259, 262,1383, 99, 533, 194, 66, 93, 846, 217, 192, 56, 106, 58, 565, # 432
280, 272, 311, 256, 146, 82, 308, 71, 100, 128, 214, 655, 110, 261, 104,1140, # 448
54, 51, 36, 87, 67,3070, 185,2618,2936,2020, 28,1066,2390,2059,5207,5208, # 464
5209,5210,5211,5212,5213,5214,5215,5216,4615,5217,5218,5219,5220,5221,5222,5223, # 480
5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,3514,5237,5238, # 496
5239,5240,5241,5242,5243,5244,2297,2031,4616,4310,3692,5245,3071,5246,3598,5247, # 512
4617,3231,3515,5248,4101,4311,4618,3808,4312,4102,5249,4103,4104,3599,5250,5251, # 528
5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267, # 544
5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283, # 560
5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299, # 576
5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315, # 592
5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331, # 608
5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,5346,5347, # 624
5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363, # 640
5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379, # 656
5380,5381, 363, 642,2787,2878,2788,2789,2316,3232,2317,3434,2011, 165,1942,3930, # 672
3931,3932,3933,5382,4619,5383,4620,5384,5385,5386,5387,5388,5389,5390,5391,5392, # 688
5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408, # 704
5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424, # 720
5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440, # 736
5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456, # 752
5457,5458,5459,5460,5461,5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472, # 768
5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488, # 784
5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504, # 800
5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520, # 816
5521,5522,5523,5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536, # 832
5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552, # 848
5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568, # 864
5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584, # 880
5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600, # 896
5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616, # 912
5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632, # 928
5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648, # 944
5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664, # 960
5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680, # 976
5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696, # 992
5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712, # 1008
5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728, # 1024
5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,5740,5741,5742,5743,5744, # 1040
5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,5759,5760, # 1056
5761,5762,5763,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5776, # 1072
5777,5778,5779,5780,5781,5782,5783,5784,5785,5786,5787,5788,5789,5790,5791,5792, # 1088
5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5808, # 1104
5809,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824, # 1120
5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840, # 1136
5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856, # 1152
5857,5858,5859,5860,5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872, # 1168
5873,5874,5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888, # 1184
5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904, # 1200
5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920, # 1216
5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936, # 1232
5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952, # 1248
5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968, # 1264
5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984, # 1280
5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000, # 1296
6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016, # 1312
6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032, # 1328
6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048, # 1344
6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064, # 1360
6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080, # 1376
6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096, # 1392
6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112, # 1408
6113,6114,2044,2060,4621, 997,1235, 473,1186,4622, 920,3378,6115,6116, 379,1108, # 1424
4313,2657,2735,3934,6117,3809, 636,3233, 573,1026,3693,3435,2974,3300,2298,4105, # 1440
854,2937,2463, 393,2581,2417, 539, 752,1280,2750,2480, 140,1161, 440, 708,1569, # 1456
665,2497,1746,1291,1523,3000, 164,1603, 847,1331, 537,1997, 486, 508,1693,2418, # 1472
1970,2227, 878,1220, 299,1030, 969, 652,2751, 624,1137,3301,2619, 65,3302,2045, # 1488
1761,1859,3120,1930,3694,3516, 663,1767, 852, 835,3695, 269, 767,2826,2339,1305, # 1504
896,1150, 770,1616,6118, 506,1502,2075,1012,2519, 775,2520,2975,2340,2938,4314, # 1520
3028,2086,1224,1943,2286,6119,3072,4315,2240,1273,1987,3935,1557, 175, 597, 985, # 1536
3517,2419,2521,1416,3029, 585, 938,1931,1007,1052,1932,1685,6120,3379,4316,4623, # 1552
804, 599,3121,1333,2128,2539,1159,1554,2032,3810, 687,2033,2904, 952, 675,1467, # 1568
3436,6121,2241,1096,1786,2440,1543,1924, 980,1813,2228, 781,2692,1879, 728,1918, # 1584
3696,4624, 548,1950,4625,1809,1088,1356,3303,2522,1944, 502, 972, 373, 513,2827, # 1600
586,2377,2391,1003,1976,1631,6122,2464,1084, 648,1776,4626,2141, 324, 962,2012, # 1616
2177,2076,1384, 742,2178,1448,1173,1810, 222, 102, 301, 445, 125,2420, 662,2498, # 1632
277, 200,1476,1165,1068, 224,2562,1378,1446, 450,1880, 659, 791, 582,4627,2939, # 1648
3936,1516,1274, 555,2099,3697,1020,1389,1526,3380,1762,1723,1787,2229, 412,2114, # 1664
1900,2392,3518, 512,2597, 427,1925,2341,3122,1653,1686,2465,2499, 697, 330, 273, # 1680
380,2162, 951, 832, 780, 991,1301,3073, 965,2270,3519, 668,2523,2636,1286, 535, # 1696
1407, 518, 671, 957,2658,2378, 267, 611,2197,3030,6123, 248,2299, 967,1799,2356, # 1712
850,1418,3437,1876,1256,1480,2828,1718,6124,6125,1755,1664,2405,6126,4628,2879, # 1728
2829, 499,2179, 676,4629, 557,2329,2214,2090, 325,3234, 464, 811,3001, 992,2342, # 1744
2481,1232,1469, 303,2242, 466,1070,2163, 603,1777,2091,4630,2752,4631,2714, 322, # 1760
2659,1964,1768, 481,2188,1463,2330,2857,3600,2092,3031,2421,4632,2318,2070,1849, # 1776
2598,4633,1302,2254,1668,1701,2422,3811,2905,3032,3123,2046,4106,1763,1694,4634, # 1792
1604, 943,1724,1454, 917, 868,2215,1169,2940, 552,1145,1800,1228,1823,1955, 316, # 1808
1080,2510, 361,1807,2830,4107,2660,3381,1346,1423,1134,4108,6127, 541,1263,1229, # 1824
1148,2540, 545, 465,1833,2880,3438,1901,3074,2482, 816,3937, 713,1788,2500, 122, # 1840
1575, 195,1451,2501,1111,6128, 859, 374,1225,2243,2483,4317, 390,1033,3439,3075, # 1856
2524,1687, 266, 793,1440,2599, 946, 779, 802, 507, 897,1081, 528,2189,1292, 711, # 1872
1866,1725,1167,1640, 753, 398,2661,1053, 246, 348,4318, 137,1024,3440,1600,2077, # 1888
2129, 825,4319, 698, 238, 521, 187,2300,1157,2423,1641,1605,1464,1610,1097,2541, # 1904
1260,1436, 759,2255,1814,2150, 705,3235, 409,2563,3304, 561,3033,2005,2564, 726, # 1920
1956,2343,3698,4109, 949,3812,3813,3520,1669, 653,1379,2525, 881,2198, 632,2256, # 1936
1027, 778,1074, 733,1957, 514,1481,2466, 554,2180, 702,3938,1606,1017,1398,6129, # 1952
1380,3521, 921, 993,1313, 594, 449,1489,1617,1166, 768,1426,1360, 495,1794,3601, # 1968
1177,3602,1170,4320,2344, 476, 425,3167,4635,3168,1424, 401,2662,1171,3382,1998, # 1984
1089,4110, 477,3169, 474,6130,1909, 596,2831,1842, 494, 693,1051,1028,1207,3076, # 2000
606,2115, 727,2790,1473,1115, 743,3522, 630, 805,1532,4321,2021, 366,1057, 838, # 2016
684,1114,2142,4322,2050,1492,1892,1808,2271,3814,2424,1971,1447,1373,3305,1090, # 2032
1536,3939,3523,3306,1455,2199, 336, 369,2331,1035, 584,2393, 902, 718,2600,6131, # 2048
2753, 463,2151,1149,1611,2467, 715,1308,3124,1268, 343,1413,3236,1517,1347,2663, # 2064
2093,3940,2022,1131,1553,2100,2941,1427,3441,2942,1323,2484,6132,1980, 872,2368, # 2080
2441,2943, 320,2369,2116,1082, 679,1933,3941,2791,3815, 625,1143,2023, 422,2200, # 2096
3816,6133, 730,1695, 356,2257,1626,2301,2858,2637,1627,1778, 937, 883,2906,2693, # 2112
3002,1769,1086, 400,1063,1325,3307,2792,4111,3077, 456,2345,1046, 747,6134,1524, # 2128
884,1094,3383,1474,2164,1059, 974,1688,2181,2258,1047, 345,1665,1187, 358, 875, # 2144
3170, 305, 660,3524,2190,1334,1135,3171,1540,1649,2542,1527, 927, 968,2793, 885, # 2160
1972,1850, 482, 500,2638,1218,1109,1085,2543,1654,2034, 876, 78,2287,1482,1277, # 2176
861,1675,1083,1779, 724,2754, 454, 397,1132,1612,2332, 893, 672,1237, 257,2259, # 2192
2370, 135,3384, 337,2244, 547, 352, 340, 709,2485,1400, 788,1138,2511, 540, 772, # 2208
1682,2260,2272,2544,2013,1843,1902,4636,1999,1562,2288,4637,2201,1403,1533, 407, # 2224
576,3308,1254,2071, 978,3385, 170, 136,1201,3125,2664,3172,2394, 213, 912, 873, # 2240
3603,1713,2202, 699,3604,3699, 813,3442, 493, 531,1054, 468,2907,1483, 304, 281, # 2256
4112,1726,1252,2094, 339,2319,2130,2639, 756,1563,2944, 748, 571,2976,1588,2425, # 2272
2715,1851,1460,2426,1528,1392,1973,3237, 288,3309, 685,3386, 296, 892,2716,2216, # 2288
1570,2245, 722,1747,2217, 905,3238,1103,6135,1893,1441,1965, 251,1805,2371,3700, # 2304
2601,1919,1078, 75,2182,1509,1592,1270,2640,4638,2152,6136,3310,3817, 524, 706, # 2320
1075, 292,3818,1756,2602, 317, 98,3173,3605,3525,1844,2218,3819,2502, 814, 567, # 2336
385,2908,1534,6137, 534,1642,3239, 797,6138,1670,1529, 953,4323, 188,1071, 538, # 2352
178, 729,3240,2109,1226,1374,2000,2357,2977, 731,2468,1116,2014,2051,6139,1261, # 2368
1593, 803,2859,2736,3443, 556, 682, 823,1541,6140,1369,2289,1706,2794, 845, 462, # 2384
2603,2665,1361, 387, 162,2358,1740, 739,1770,1720,1304,1401,3241,1049, 627,1571, # 2400
2427,3526,1877,3942,1852,1500, 431,1910,1503, 677, 297,2795, 286,1433,1038,1198, # 2416
2290,1133,1596,4113,4639,2469,1510,1484,3943,6141,2442, 108, 712,4640,2372, 866, # 2432
3701,2755,3242,1348, 834,1945,1408,3527,2395,3243,1811, 824, 994,1179,2110,1548, # 2448
1453, 790,3003, 690,4324,4325,2832,2909,3820,1860,3821, 225,1748, 310, 346,1780, # 2464
2470, 821,1993,2717,2796, 828, 877,3528,2860,2471,1702,2165,2910,2486,1789, 453, # 2480
359,2291,1676, 73,1164,1461,1127,3311, 421, 604, 314,1037, 589, 116,2487, 737, # 2496
837,1180, 111, 244, 735,6142,2261,1861,1362, 986, 523, 418, 581,2666,3822, 103, # 2512
855, 503,1414,1867,2488,1091, 657,1597, 979, 605,1316,4641,1021,2443,2078,2001, # 2528
1209, 96, 587,2166,1032, 260,1072,2153, 173, 94, 226,3244, 819,2006,4642,4114, # 2544
2203, 231,1744, 782, 97,2667, 786,3387, 887, 391, 442,2219,4326,1425,6143,2694, # 2560
633,1544,1202, 483,2015, 592,2052,1958,2472,1655, 419, 129,4327,3444,3312,1714, # 2576
1257,3078,4328,1518,1098, 865,1310,1019,1885,1512,1734, 469,2444, 148, 773, 436, # 2592
1815,1868,1128,1055,4329,1245,2756,3445,2154,1934,1039,4643, 579,1238, 932,2320, # 2608
353, 205, 801, 115,2428, 944,2321,1881, 399,2565,1211, 678, 766,3944, 335,2101, # 2624
1459,1781,1402,3945,2737,2131,1010, 844, 981,1326,1013, 550,1816,1545,2620,1335, # 2640
1008, 371,2881, 936,1419,1613,3529,1456,1395,2273,1834,2604,1317,2738,2503, 416, # 2656
1643,4330, 806,1126, 229, 591,3946,1314,1981,1576,1837,1666, 347,1790, 977,3313, # 2672
764,2861,1853, 688,2429,1920,1462, 77, 595, 415,2002,3034, 798,1192,4115,6144, # 2688
2978,4331,3035,2695,2582,2072,2566, 430,2430,1727, 842,1396,3947,3702, 613, 377, # 2704
278, 236,1417,3388,3314,3174, 757,1869, 107,3530,6145,1194, 623,2262, 207,1253, # 2720
2167,3446,3948, 492,1117,1935, 536,1838,2757,1246,4332, 696,2095,2406,1393,1572, # 2736
3175,1782, 583, 190, 253,1390,2230, 830,3126,3389, 934,3245,1703,1749,2979,1870, # 2752
2545,1656,2204, 869,2346,4116,3176,1817, 496,1764,4644, 942,1504, 404,1903,1122, # 2768
1580,3606,2945,1022, 515, 372,1735, 955,2431,3036,6146,2797,1110,2302,2798, 617, # 2784
6147, 441, 762,1771,3447,3607,3608,1904, 840,3037, 86, 939,1385, 572,1370,2445, # 2800
1336, 114,3703, 898, 294, 203,3315, 703,1583,2274, 429, 961,4333,1854,1951,3390, # 2816
2373,3704,4334,1318,1381, 966,1911,2322,1006,1155, 309, 989, 458,2718,1795,1372, # 2832
1203, 252,1689,1363,3177, 517,1936, 168,1490, 562, 193,3823,1042,4117,1835, 551, # 2848
470,4645, 395, 489,3448,1871,1465,2583,2641, 417,1493, 279,1295, 511,1236,1119, # 2864
72,1231,1982,1812,3004, 871,1564, 984,3449,1667,2696,2096,4646,2347,2833,1673, # 2880
3609, 695,3246,2668, 807,1183,4647, 890, 388,2333,1801,1457,2911,1765,1477,1031, # 2896
3316,3317,1278,3391,2799,2292,2526, 163,3450,4335,2669,1404,1802,6148,2323,2407, # 2912
1584,1728,1494,1824,1269, 298, 909,3318,1034,1632, 375, 776,1683,2061, 291, 210, # 2928
1123, 809,1249,1002,2642,3038, 206,1011,2132, 144, 975, 882,1565, 342, 667, 754, # 2944
1442,2143,1299,2303,2062, 447, 626,2205,1221,2739,2912,1144,1214,2206,2584, 760, # 2960
1715, 614, 950,1281,2670,2621, 810, 577,1287,2546,4648, 242,2168, 250,2643, 691, # 2976
123,2644, 647, 313,1029, 689,1357,2946,1650, 216, 771,1339,1306, 808,2063, 549, # 2992
913,1371,2913,2914,6149,1466,1092,1174,1196,1311,2605,2396,1783,1796,3079, 406, # 3008
2671,2117,3949,4649, 487,1825,2220,6150,2915, 448,2348,1073,6151,2397,1707, 130, # 3024
900,1598, 329, 176,1959,2527,1620,6152,2275,4336,3319,1983,2191,3705,3610,2155, # 3040
3706,1912,1513,1614,6153,1988, 646, 392,2304,1589,3320,3039,1826,1239,1352,1340, # 3056
2916, 505,2567,1709,1437,2408,2547, 906,6154,2672, 384,1458,1594,1100,1329, 710, # 3072
423,3531,2064,2231,2622,1989,2673,1087,1882, 333, 841,3005,1296,2882,2379, 580, # 3088
1937,1827,1293,2585, 601, 574, 249,1772,4118,2079,1120, 645, 901,1176,1690, 795, # 3104
2207, 478,1434, 516,1190,1530, 761,2080, 930,1264, 355, 435,1552, 644,1791, 987, # 3120
220,1364,1163,1121,1538, 306,2169,1327,1222, 546,2645, 218, 241, 610,1704,3321, # 3136
1984,1839,1966,2528, 451,6155,2586,3707,2568, 907,3178, 254,2947, 186,1845,4650, # 3152
745, 432,1757, 428,1633, 888,2246,2221,2489,3611,2118,1258,1265, 956,3127,1784, # 3168
4337,2490, 319, 510, 119, 457,3612, 274,2035,2007,4651,1409,3128, 970,2758, 590, # 3184
2800, 661,2247,4652,2008,3950,1420,1549,3080,3322,3951,1651,1375,2111, 485,2491, # 3200
1429,1156,6156,2548,2183,1495, 831,1840,2529,2446, 501,1657, 307,1894,3247,1341, # 3216
666, 899,2156,1539,2549,1559, 886, 349,2208,3081,2305,1736,3824,2170,2759,1014, # 3232
1913,1386, 542,1397,2948, 490, 368, 716, 362, 159, 282,2569,1129,1658,1288,1750, # 3248
2674, 276, 649,2016, 751,1496, 658,1818,1284,1862,2209,2087,2512,3451, 622,2834, # 3264
376, 117,1060,2053,1208,1721,1101,1443, 247,1250,3179,1792,3952,2760,2398,3953, # 3280
6157,2144,3708, 446,2432,1151,2570,3452,2447,2761,2835,1210,2448,3082, 424,2222, # 3296
1251,2449,2119,2836, 504,1581,4338, 602, 817, 857,3825,2349,2306, 357,3826,1470, # 3312
1883,2883, 255, 958, 929,2917,3248, 302,4653,1050,1271,1751,2307,1952,1430,2697, # 3328
2719,2359, 354,3180, 777, 158,2036,4339,1659,4340,4654,2308,2949,2248,1146,2232, # 3344
3532,2720,1696,2623,3827,6158,3129,1550,2698,1485,1297,1428, 637, 931,2721,2145, # 3360
914,2550,2587, 81,2450, 612, 827,2646,1242,4655,1118,2884, 472,1855,3181,3533, # 3376
3534, 569,1353,2699,1244,1758,2588,4119,2009,2762,2171,3709,1312,1531,6159,1152, # 3392
1938, 134,1830, 471,3710,2276,1112,1535,3323,3453,3535, 982,1337,2950, 488, 826, # 3408
674,1058,1628,4120,2017, 522,2399, 211, 568,1367,3454, 350, 293,1872,1139,3249, # 3424
1399,1946,3006,1300,2360,3324, 588, 736,6160,2606, 744, 669,3536,3828,6161,1358, # 3440
199, 723, 848, 933, 851,1939,1505,1514,1338,1618,1831,4656,1634,3613, 443,2740, # 3456
3829, 717,1947, 491,1914,6162,2551,1542,4121,1025,6163,1099,1223, 198,3040,2722, # 3472
370, 410,1905,2589, 998,1248,3182,2380, 519,1449,4122,1710, 947, 928,1153,4341, # 3488
2277, 344,2624,1511, 615, 105, 161,1212,1076,1960,3130,2054,1926,1175,1906,2473, # 3504
414,1873,2801,6164,2309, 315,1319,3325, 318,2018,2146,2157, 963, 631, 223,4342, # 3520
4343,2675, 479,3711,1197,2625,3712,2676,2361,6165,4344,4123,6166,2451,3183,1886, # 3536
2184,1674,1330,1711,1635,1506, 799, 219,3250,3083,3954,1677,3713,3326,2081,3614, # 3552
1652,2073,4657,1147,3041,1752, 643,1961, 147,1974,3955,6167,1716,2037, 918,3007, # 3568
1994, 120,1537, 118, 609,3184,4345, 740,3455,1219, 332,1615,3830,6168,1621,2980, # 3584
1582, 783, 212, 553,2350,3714,1349,2433,2082,4124, 889,6169,2310,1275,1410, 973, # 3600
166,1320,3456,1797,1215,3185,2885,1846,2590,2763,4658, 629, 822,3008, 763, 940, # 3616
1990,2862, 439,2409,1566,1240,1622, 926,1282,1907,2764, 654,2210,1607, 327,1130, # 3632
3956,1678,1623,6170,2434,2192, 686, 608,3831,3715, 903,3957,3042,6171,2741,1522, # 3648
1915,1105,1555,2552,1359, 323,3251,4346,3457, 738,1354,2553,2311,2334,1828,2003, # 3664
3832,1753,2351,1227,6172,1887,4125,1478,6173,2410,1874,1712,1847, 520,1204,2607, # 3680
264,4659, 836,2677,2102, 600,4660,3833,2278,3084,6174,4347,3615,1342, 640, 532, # 3696
543,2608,1888,2400,2591,1009,4348,1497, 341,1737,3616,2723,1394, 529,3252,1321, # 3712
983,4661,1515,2120, 971,2592, 924, 287,1662,3186,4349,2700,4350,1519, 908,1948, # 3728
2452, 156, 796,1629,1486,2223,2055, 694,4126,1259,1036,3392,1213,2249,2742,1889, # 3744
1230,3958,1015, 910, 408, 559,3617,4662, 746, 725, 935,4663,3959,3009,1289, 563, # 3760
867,4664,3960,1567,2981,2038,2626, 988,2263,2381,4351, 143,2374, 704,1895,6175, # 3776
1188,3716,2088, 673,3085,2362,4352, 484,1608,1921,2765,2918, 215, 904,3618,3537, # 3792
894, 509, 976,3043,2701,3961,4353,2837,2982, 498,6176,6177,1102,3538,1332,3393, # 3808
1487,1636,1637, 233, 245,3962, 383, 650, 995,3044, 460,1520,1206,2352, 749,3327, # 3824
530, 700, 389,1438,1560,1773,3963,2264, 719,2951,2724,3834, 870,1832,1644,1000, # 3840
839,2474,3717, 197,1630,3394, 365,2886,3964,1285,2133, 734, 922, 818,1106, 732, # 3856
480,2083,1774,3458, 923,2279,1350, 221,3086, 85,2233,2234,3835,1585,3010,2147, # 3872
1387,1705,2382,1619,2475, 133, 239,2802,1991,1016,2084,2383, 411,2838,1113, 651, # 3888
1985,1160,3328, 990,1863,3087,1048,1276,2647, 265,2627,1599,3253,2056, 150, 638, # 3904
2019, 656, 853, 326,1479, 680,1439,4354,1001,1759, 413,3459,3395,2492,1431, 459, # 3920
4355,1125,3329,2265,1953,1450,2065,2863, 849, 351,2678,3131,3254,3255,1104,1577, # 3936
227,1351,1645,2453,2193,1421,2887, 812,2121, 634, 95,2435, 201,2312,4665,1646, # 3952
1671,2743,1601,2554,2702,2648,2280,1315,1366,2089,3132,1573,3718,3965,1729,1189, # 3968
328,2679,1077,1940,1136, 558,1283, 964,1195, 621,2074,1199,1743,3460,3619,1896, # 3984
1916,1890,3836,2952,1154,2112,1064, 862, 378,3011,2066,2113,2803,1568,2839,6178, # 4000
3088,2919,1941,1660,2004,1992,2194, 142, 707,1590,1708,1624,1922,1023,1836,1233, # 4016
1004,2313, 789, 741,3620,6179,1609,2411,1200,4127,3719,3720,4666,2057,3721, 593, # 4032
2840, 367,2920,1878,6180,3461,1521, 628,1168, 692,2211,2649, 300, 720,2067,2571, # 4048
2953,3396, 959,2504,3966,3539,3462,1977, 701,6181, 954,1043, 800, 681, 183,3722, # 4064
1803,1730,3540,4128,2103, 815,2314, 174, 467, 230,2454,1093,2134, 755,3541,3397, # 4080
1141,1162,6182,1738,2039, 270,3256,2513,1005,1647,2185,3837, 858,1679,1897,1719, # 4096
2954,2324,1806, 402, 670, 167,4129,1498,2158,2104, 750,6183, 915, 189,1680,1551, # 4112
455,4356,1501,2455, 405,1095,2955, 338,1586,1266,1819, 570, 641,1324, 237,1556, # 4128
2650,1388,3723,6184,1368,2384,1343,1978,3089,2436, 879,3724, 792,1191, 758,3012, # 4144
1411,2135,1322,4357, 240,4667,1848,3725,1574,6185, 420,3045,1546,1391, 714,4358, # 4160
1967, 941,1864, 863, 664, 426, 560,1731,2680,1785,2864,1949,2363, 403,3330,1415, # 4176
1279,2136,1697,2335, 204, 721,2097,3838, 90,6186,2085,2505, 191,3967, 124,2148, # 4192
1376,1798,1178,1107,1898,1405, 860,4359,1243,1272,2375,2983,1558,2456,1638, 113, # 4208
3621, 578,1923,2609, 880, 386,4130, 784,2186,2266,1422,2956,2172,1722, 497, 263, # 4224
2514,1267,2412,2610, 177,2703,3542, 774,1927,1344, 616,1432,1595,1018, 172,4360, # 4240
2325, 911,4361, 438,1468,3622, 794,3968,2024,2173,1681,1829,2957, 945, 895,3090, # 4256
575,2212,2476, 475,2401,2681, 785,2744,1745,2293,2555,1975,3133,2865, 394,4668, # 4272
3839, 635,4131, 639, 202,1507,2195,2766,1345,1435,2572,3726,1908,1184,1181,2457, # 4288
3727,3134,4362, 843,2611, 437, 916,4669, 234, 769,1884,3046,3047,3623, 833,6187, # 4304
1639,2250,2402,1355,1185,2010,2047, 999, 525,1732,1290,1488,2612, 948,1578,3728, # 4320
2413,2477,1216,2725,2159, 334,3840,1328,3624,2921,1525,4132, 564,1056, 891,4363, # 4336
1444,1698,2385,2251,3729,1365,2281,2235,1717,6188, 864,3841,2515, 444, 527,2767, # 4352
2922,3625, 544, 461,6189, 566, 209,2437,3398,2098,1065,2068,3331,3626,3257,2137, # 4368 #last 512
#Everything below is of no interest for detection purpose
2138,2122,3730,2888,1995,1820,1044,6190,6191,6192,6193,6194,6195,6196,6197,6198, # 4384
6199,6200,6201,6202,6203,6204,6205,4670,6206,6207,6208,6209,6210,6211,6212,6213, # 4400
6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,6224,6225,6226,6227,6228,6229, # 4416
6230,6231,6232,6233,6234,6235,6236,6237,3187,6238,6239,3969,6240,6241,6242,6243, # 4432
6244,4671,6245,6246,4672,6247,6248,4133,6249,6250,4364,6251,2923,2556,2613,4673, # 4448
4365,3970,6252,6253,6254,6255,4674,6256,6257,6258,2768,2353,4366,4675,4676,3188, # 4464
4367,3463,6259,4134,4677,4678,6260,2267,6261,3842,3332,4368,3543,6262,6263,6264, # 4480
3013,1954,1928,4135,4679,6265,6266,2478,3091,6267,4680,4369,6268,6269,1699,6270, # 4496
3544,4136,4681,6271,4137,6272,4370,2804,6273,6274,2593,3971,3972,4682,6275,2236, # 4512
4683,6276,6277,4684,6278,6279,4138,3973,4685,6280,6281,3258,6282,6283,6284,6285, # 4528
3974,4686,2841,3975,6286,6287,3545,6288,6289,4139,4687,4140,6290,4141,6291,4142, # 4544
6292,6293,3333,6294,6295,6296,4371,6297,3399,6298,6299,4372,3976,6300,6301,6302, # 4560
4373,6303,6304,3843,3731,6305,4688,4374,6306,6307,3259,2294,6308,3732,2530,4143, # 4576
6309,4689,6310,6311,6312,3048,6313,6314,4690,3733,2237,6315,6316,2282,3334,6317, # 4592
6318,3844,6319,6320,4691,6321,3400,4692,6322,4693,6323,3049,6324,4375,6325,3977, # 4608
6326,6327,6328,3546,6329,4694,3335,6330,4695,4696,6331,6332,6333,6334,4376,3978, # 4624
6335,4697,3979,4144,6336,3980,4698,6337,6338,6339,6340,6341,4699,4700,4701,6342, # 4640
6343,4702,6344,6345,4703,6346,6347,4704,6348,4705,4706,3135,6349,4707,6350,4708, # 4656
6351,4377,6352,4709,3734,4145,6353,2506,4710,3189,6354,3050,4711,3981,6355,3547, # 4672
3014,4146,4378,3735,2651,3845,3260,3136,2224,1986,6356,3401,6357,4712,2594,3627, # 4688
3137,2573,3736,3982,4713,3628,4714,4715,2682,3629,4716,6358,3630,4379,3631,6359, # 4704
6360,6361,3983,6362,6363,6364,6365,4147,3846,4717,6366,6367,3737,2842,6368,4718, # 4720
2628,6369,3261,6370,2386,6371,6372,3738,3984,4719,3464,4720,3402,6373,2924,3336, # 4736
4148,2866,6374,2805,3262,4380,2704,2069,2531,3138,2806,2984,6375,2769,6376,4721, # 4752
4722,3403,6377,6378,3548,6379,6380,2705,3092,1979,4149,2629,3337,2889,6381,3338, # 4768
4150,2557,3339,4381,6382,3190,3263,3739,6383,4151,4723,4152,2558,2574,3404,3191, # 4784
6384,6385,4153,6386,4724,4382,6387,6388,4383,6389,6390,4154,6391,4725,3985,6392, # 4800
3847,4155,6393,6394,6395,6396,6397,3465,6398,4384,6399,6400,6401,6402,6403,6404, # 4816
4156,6405,6406,6407,6408,2123,6409,6410,2326,3192,4726,6411,6412,6413,6414,4385, # 4832
4157,6415,6416,4158,6417,3093,3848,6418,3986,6419,6420,3849,6421,6422,6423,4159, # 4848
6424,6425,4160,6426,3740,6427,6428,6429,6430,3987,6431,4727,6432,2238,6433,6434, # 4864
4386,3988,6435,6436,3632,6437,6438,2843,6439,6440,6441,6442,3633,6443,2958,6444, # 4880
6445,3466,6446,2364,4387,3850,6447,4388,2959,3340,6448,3851,6449,4728,6450,6451, # 4896
3264,4729,6452,3193,6453,4389,4390,2706,3341,4730,6454,3139,6455,3194,6456,3051, # 4912
2124,3852,1602,4391,4161,3853,1158,3854,4162,3989,4392,3990,4731,4732,4393,2040, # 4928
4163,4394,3265,6457,2807,3467,3855,6458,6459,6460,3991,3468,4733,4734,6461,3140, # 4944
2960,6462,4735,6463,6464,6465,6466,4736,4737,4738,4739,6467,6468,4164,2403,3856, # 4960
6469,6470,2770,2844,6471,4740,6472,6473,6474,6475,6476,6477,6478,3195,6479,4741, # 4976
4395,6480,2867,6481,4742,2808,6482,2493,4165,6483,6484,6485,6486,2295,4743,6487, # 4992
6488,6489,3634,6490,6491,6492,6493,6494,6495,6496,2985,4744,6497,6498,4745,6499, # 5008
6500,2925,3141,4166,6501,6502,4746,6503,6504,4747,6505,6506,6507,2890,6508,6509, # 5024
6510,6511,6512,6513,6514,6515,6516,6517,6518,6519,3469,4167,6520,6521,6522,4748, # 5040
4396,3741,4397,4749,4398,3342,2125,4750,6523,4751,4752,4753,3052,6524,2961,4168, # 5056
6525,4754,6526,4755,4399,2926,4169,6527,3857,6528,4400,4170,6529,4171,6530,6531, # 5072
2595,6532,6533,6534,6535,3635,6536,6537,6538,6539,6540,6541,6542,4756,6543,6544, # 5088
6545,6546,6547,6548,4401,6549,6550,6551,6552,4402,3405,4757,4403,6553,6554,6555, # 5104
4172,3742,6556,6557,6558,3992,3636,6559,6560,3053,2726,6561,3549,4173,3054,4404, # 5120
6562,6563,3993,4405,3266,3550,2809,4406,6564,6565,6566,4758,4759,6567,3743,6568, # 5136
4760,3744,4761,3470,6569,6570,6571,4407,6572,3745,4174,6573,4175,2810,4176,3196, # 5152
4762,6574,4177,6575,6576,2494,2891,3551,6577,6578,3471,6579,4408,6580,3015,3197, # 5168
6581,3343,2532,3994,3858,6582,3094,3406,4409,6583,2892,4178,4763,4410,3016,4411, # 5184
6584,3995,3142,3017,2683,6585,4179,6586,6587,4764,4412,6588,6589,4413,6590,2986, # 5200
6591,2962,3552,6592,2963,3472,6593,6594,4180,4765,6595,6596,2225,3267,4414,6597, # 5216
3407,3637,4766,6598,6599,3198,6600,4415,6601,3859,3199,6602,3473,4767,2811,4416, # 5232
1856,3268,3200,2575,3996,3997,3201,4417,6603,3095,2927,6604,3143,6605,2268,6606, # 5248
3998,3860,3096,2771,6607,6608,3638,2495,4768,6609,3861,6610,3269,2745,4769,4181, # 5264
3553,6611,2845,3270,6612,6613,6614,3862,6615,6616,4770,4771,6617,3474,3999,4418, # 5280
4419,6618,3639,3344,6619,4772,4182,6620,2126,6621,6622,6623,4420,4773,6624,3018, # 5296
6625,4774,3554,6626,4183,2025,3746,6627,4184,2707,6628,4421,4422,3097,1775,4185, # 5312
3555,6629,6630,2868,6631,6632,4423,6633,6634,4424,2414,2533,2928,6635,4186,2387, # 5328
6636,4775,6637,4187,6638,1891,4425,3202,3203,6639,6640,4776,6641,3345,6642,6643, # 5344
3640,6644,3475,3346,3641,4000,6645,3144,6646,3098,2812,4188,3642,3204,6647,3863, # 5360
3476,6648,3864,6649,4426,4001,6650,6651,6652,2576,6653,4189,4777,6654,6655,6656, # 5376
2846,6657,3477,3205,4002,6658,4003,6659,3347,2252,6660,6661,6662,4778,6663,6664, # 5392
6665,6666,6667,6668,6669,4779,4780,2048,6670,3478,3099,6671,3556,3747,4004,6672, # 5408
6673,6674,3145,4005,3748,6675,6676,6677,6678,6679,3408,6680,6681,6682,6683,3206, # 5424
3207,6684,6685,4781,4427,6686,4782,4783,4784,6687,6688,6689,4190,6690,6691,3479, # 5440
6692,2746,6693,4428,6694,6695,6696,6697,6698,6699,4785,6700,6701,3208,2727,6702, # 5456
3146,6703,6704,3409,2196,6705,4429,6706,6707,6708,2534,1996,6709,6710,6711,2747, # 5472
6712,6713,6714,4786,3643,6715,4430,4431,6716,3557,6717,4432,4433,6718,6719,6720, # 5488
6721,3749,6722,4006,4787,6723,6724,3644,4788,4434,6725,6726,4789,2772,6727,6728, # 5504
6729,6730,6731,2708,3865,2813,4435,6732,6733,4790,4791,3480,6734,6735,6736,6737, # 5520
4436,3348,6738,3410,4007,6739,6740,4008,6741,6742,4792,3411,4191,6743,6744,6745, # 5536
6746,6747,3866,6748,3750,6749,6750,6751,6752,6753,6754,6755,3867,6756,4009,6757, # 5552
4793,4794,6758,2814,2987,6759,6760,6761,4437,6762,6763,6764,6765,3645,6766,6767, # 5568
3481,4192,6768,3751,6769,6770,2174,6771,3868,3752,6772,6773,6774,4193,4795,4438, # 5584
3558,4796,4439,6775,4797,6776,6777,4798,6778,4799,3559,4800,6779,6780,6781,3482, # 5600
6782,2893,6783,6784,4194,4801,4010,6785,6786,4440,6787,4011,6788,6789,6790,6791, # 5616
6792,6793,4802,6794,6795,6796,4012,6797,6798,6799,6800,3349,4803,3483,6801,4804, # 5632
4195,6802,4013,6803,6804,4196,6805,4014,4015,6806,2847,3271,2848,6807,3484,6808, # 5648
6809,6810,4441,6811,4442,4197,4443,3272,4805,6812,3412,4016,1579,6813,6814,4017, # 5664
6815,3869,6816,2964,6817,4806,6818,6819,4018,3646,6820,6821,4807,4019,4020,6822, # 5680
6823,3560,6824,6825,4021,4444,6826,4198,6827,6828,4445,6829,6830,4199,4808,6831, # 5696
6832,6833,3870,3019,2458,6834,3753,3413,3350,6835,4809,3871,4810,3561,4446,6836, # 5712
6837,4447,4811,4812,6838,2459,4448,6839,4449,6840,6841,4022,3872,6842,4813,4814, # 5728
6843,6844,4815,4200,4201,4202,6845,4023,6846,6847,4450,3562,3873,6848,6849,4816, # 5744
4817,6850,4451,4818,2139,6851,3563,6852,6853,3351,6854,6855,3352,4024,2709,3414, # 5760
4203,4452,6856,4204,6857,6858,3874,3875,6859,6860,4819,6861,6862,6863,6864,4453, # 5776
3647,6865,6866,4820,6867,6868,6869,6870,4454,6871,2869,6872,6873,4821,6874,3754, # 5792
6875,4822,4205,6876,6877,6878,3648,4206,4455,6879,4823,6880,4824,3876,6881,3055, # 5808
4207,6882,3415,6883,6884,6885,4208,4209,6886,4210,3353,6887,3354,3564,3209,3485, # 5824
2652,6888,2728,6889,3210,3755,6890,4025,4456,6891,4825,6892,6893,6894,6895,4211, # 5840
6896,6897,6898,4826,6899,6900,4212,6901,4827,6902,2773,3565,6903,4828,6904,6905, # 5856
6906,6907,3649,3650,6908,2849,3566,6909,3567,3100,6910,6911,6912,6913,6914,6915, # 5872
4026,6916,3355,4829,3056,4457,3756,6917,3651,6918,4213,3652,2870,6919,4458,6920, # 5888
2438,6921,6922,3757,2774,4830,6923,3356,4831,4832,6924,4833,4459,3653,2507,6925, # 5904
4834,2535,6926,6927,3273,4027,3147,6928,3568,6929,6930,6931,4460,6932,3877,4461, # 5920
2729,3654,6933,6934,6935,6936,2175,4835,2630,4214,4028,4462,4836,4215,6937,3148, # 5936
4216,4463,4837,4838,4217,6938,6939,2850,4839,6940,4464,6941,6942,6943,4840,6944, # 5952
4218,3274,4465,6945,6946,2710,6947,4841,4466,6948,6949,2894,6950,6951,4842,6952, # 5968
4219,3057,2871,6953,6954,6955,6956,4467,6957,2711,6958,6959,6960,3275,3101,4843, # 5984
6961,3357,3569,6962,4844,6963,6964,4468,4845,3570,6965,3102,4846,3758,6966,4847, # 6000
3878,4848,4849,4029,6967,2929,3879,4850,4851,6968,6969,1733,6970,4220,6971,6972, # 6016
6973,6974,6975,6976,4852,6977,6978,6979,6980,6981,6982,3759,6983,6984,6985,3486, # 6032
3487,6986,3488,3416,6987,6988,6989,6990,6991,6992,6993,6994,6995,6996,6997,4853, # 6048
6998,6999,4030,7000,7001,3211,7002,7003,4221,7004,7005,3571,4031,7006,3572,7007, # 6064
2614,4854,2577,7008,7009,2965,3655,3656,4855,2775,3489,3880,4222,4856,3881,4032, # 6080
3882,3657,2730,3490,4857,7010,3149,7011,4469,4858,2496,3491,4859,2283,7012,7013, # 6096
7014,2365,4860,4470,7015,7016,3760,7017,7018,4223,1917,7019,7020,7021,4471,7022, # 6112
2776,4472,7023,7024,7025,7026,4033,7027,3573,4224,4861,4034,4862,7028,7029,1929, # 6128
3883,4035,7030,4473,3058,7031,2536,3761,3884,7032,4036,7033,2966,2895,1968,4474, # 6144
3276,4225,3417,3492,4226,2105,7034,7035,1754,2596,3762,4227,4863,4475,3763,4864, # 6160
3764,2615,2777,3103,3765,3658,3418,4865,2296,3766,2815,7036,7037,7038,3574,2872, # 6176
3277,4476,7039,4037,4477,7040,7041,4038,7042,7043,7044,7045,7046,7047,2537,7048, # 6192
7049,7050,7051,7052,7053,7054,4478,7055,7056,3767,3659,4228,3575,7057,7058,4229, # 6208
7059,7060,7061,3660,7062,3212,7063,3885,4039,2460,7064,7065,7066,7067,7068,7069, # 6224
7070,7071,7072,7073,7074,4866,3768,4867,7075,7076,7077,7078,4868,3358,3278,2653, # 6240
7079,7080,4479,3886,7081,7082,4869,7083,7084,7085,7086,7087,7088,2538,7089,7090, # 6256
7091,4040,3150,3769,4870,4041,2896,3359,4230,2930,7092,3279,7093,2967,4480,3213, # 6272
4481,3661,7094,7095,7096,7097,7098,7099,7100,7101,7102,2461,3770,7103,7104,4231, # 6288
3151,7105,7106,7107,4042,3662,7108,7109,4871,3663,4872,4043,3059,7110,7111,7112, # 6304
3493,2988,7113,4873,7114,7115,7116,3771,4874,7117,7118,4232,4875,7119,3576,2336, # 6320
4876,7120,4233,3419,4044,4877,4878,4482,4483,4879,4484,4234,7121,3772,4880,1045, # 6336
3280,3664,4881,4882,7122,7123,7124,7125,4883,7126,2778,7127,4485,4486,7128,4884, # 6352
3214,3887,7129,7130,3215,7131,4885,4045,7132,7133,4046,7134,7135,7136,7137,7138, # 6368
7139,7140,7141,7142,7143,4235,7144,4886,7145,7146,7147,4887,7148,7149,7150,4487, # 6384
4047,4488,7151,7152,4888,4048,2989,3888,7153,3665,7154,4049,7155,7156,7157,7158, # 6400
7159,7160,2931,4889,4890,4489,7161,2631,3889,4236,2779,7162,7163,4891,7164,3060, # 6416
7165,1672,4892,7166,4893,4237,3281,4894,7167,7168,3666,7169,3494,7170,7171,4050, # 6432
7172,7173,3104,3360,3420,4490,4051,2684,4052,7174,4053,7175,7176,7177,2253,4054, # 6448
7178,7179,4895,7180,3152,3890,3153,4491,3216,7181,7182,7183,2968,4238,4492,4055, # 6464
7184,2990,7185,2479,7186,7187,4493,7188,7189,7190,7191,7192,4896,7193,4897,2969, # 6480
4494,4898,7194,3495,7195,7196,4899,4495,7197,3105,2731,7198,4900,7199,7200,7201, # 6496
4056,7202,3361,7203,7204,4496,4901,4902,7205,4497,7206,7207,2315,4903,7208,4904, # 6512
7209,4905,2851,7210,7211,3577,7212,3578,4906,7213,4057,3667,4907,7214,4058,2354, # 6528
3891,2376,3217,3773,7215,7216,7217,7218,7219,4498,7220,4908,3282,2685,7221,3496, # 6544
4909,2632,3154,4910,7222,2337,7223,4911,7224,7225,7226,4912,4913,3283,4239,4499, # 6560
7227,2816,7228,7229,7230,7231,7232,7233,7234,4914,4500,4501,7235,7236,7237,2686, # 6576
7238,4915,7239,2897,4502,7240,4503,7241,2516,7242,4504,3362,3218,7243,7244,7245, # 6592
4916,7246,7247,4505,3363,7248,7249,7250,7251,3774,4506,7252,7253,4917,7254,7255, # 6608
3284,2991,4918,4919,3219,3892,4920,3106,3497,4921,7256,7257,7258,4922,7259,4923, # 6624
3364,4507,4508,4059,7260,4240,3498,7261,7262,4924,7263,2992,3893,4060,3220,7264, # 6640
7265,7266,7267,7268,7269,4509,3775,7270,2817,7271,4061,4925,4510,3776,7272,4241, # 6656
4511,3285,7273,7274,3499,7275,7276,7277,4062,4512,4926,7278,3107,3894,7279,7280, # 6672
4927,7281,4513,7282,7283,3668,7284,7285,4242,4514,4243,7286,2058,4515,4928,4929, # 6688
4516,7287,3286,4244,7288,4517,7289,7290,7291,3669,7292,7293,4930,4931,4932,2355, # 6704
4933,7294,2633,4518,7295,4245,7296,7297,4519,7298,7299,4520,4521,4934,7300,4246, # 6720
4522,7301,7302,7303,3579,7304,4247,4935,7305,4936,7306,7307,7308,7309,3777,7310, # 6736
4523,7311,7312,7313,4248,3580,7314,4524,3778,4249,7315,3581,7316,3287,7317,3221, # 6752
7318,4937,7319,7320,7321,7322,7323,7324,4938,4939,7325,4525,7326,7327,7328,4063, # 6768
7329,7330,4940,7331,7332,4941,7333,4526,7334,3500,2780,1741,4942,2026,1742,7335, # 6784
7336,3582,4527,2388,7337,7338,7339,4528,7340,4250,4943,7341,7342,7343,4944,7344, # 6800
7345,7346,3020,7347,4945,7348,7349,7350,7351,3895,7352,3896,4064,3897,7353,7354, # 6816
7355,4251,7356,7357,3898,7358,3779,7359,3780,3288,7360,7361,4529,7362,4946,4530, # 6832
2027,7363,3899,4531,4947,3222,3583,7364,4948,7365,7366,7367,7368,4949,3501,4950, # 6848
3781,4951,4532,7369,2517,4952,4252,4953,3155,7370,4954,4955,4253,2518,4533,7371, # 6864
7372,2712,4254,7373,7374,7375,3670,4956,3671,7376,2389,3502,4065,7377,2338,7378, # 6880
7379,7380,7381,3061,7382,4957,7383,7384,7385,7386,4958,4534,7387,7388,2993,7389, # 6896
3062,7390,4959,7391,7392,7393,4960,3108,4961,7394,4535,7395,4962,3421,4536,7396, # 6912
4963,7397,4964,1857,7398,4965,7399,7400,2176,3584,4966,7401,7402,3422,4537,3900, # 6928
3585,7403,3782,7404,2852,7405,7406,7407,4538,3783,2654,3423,4967,4539,7408,3784, # 6944
3586,2853,4540,4541,7409,3901,7410,3902,7411,7412,3785,3109,2327,3903,7413,7414, # 6960
2970,4066,2932,7415,7416,7417,3904,3672,3424,7418,4542,4543,4544,7419,4968,7420, # 6976
7421,4255,7422,7423,7424,7425,7426,4067,7427,3673,3365,4545,7428,3110,2559,3674, # 6992
7429,7430,3156,7431,7432,3503,7433,3425,4546,7434,3063,2873,7435,3223,4969,4547, # 7008
4548,2898,4256,4068,7436,4069,3587,3786,2933,3787,4257,4970,4971,3788,7437,4972, # 7024
3064,7438,4549,7439,7440,7441,7442,7443,4973,3905,7444,2874,7445,7446,7447,7448, # 7040
3021,7449,4550,3906,3588,4974,7450,7451,3789,3675,7452,2578,7453,4070,7454,7455, # 7056
7456,4258,3676,7457,4975,7458,4976,4259,3790,3504,2634,4977,3677,4551,4260,7459, # 7072
7460,7461,7462,3907,4261,4978,7463,7464,7465,7466,4979,4980,7467,7468,2213,4262, # 7088
7469,7470,7471,3678,4981,7472,2439,7473,4263,3224,3289,7474,3908,2415,4982,7475, # 7104
4264,7476,4983,2655,7477,7478,2732,4552,2854,2875,7479,7480,4265,7481,4553,4984, # 7120
7482,7483,4266,7484,3679,3366,3680,2818,2781,2782,3367,3589,4554,3065,7485,4071, # 7136
2899,7486,7487,3157,2462,4072,4555,4073,4985,4986,3111,4267,2687,3368,4556,4074, # 7152
3791,4268,7488,3909,2783,7489,2656,1962,3158,4557,4987,1963,3159,3160,7490,3112, # 7168
4988,4989,3022,4990,4991,3792,2855,7491,7492,2971,4558,7493,7494,4992,7495,7496, # 7184
7497,7498,4993,7499,3426,4559,4994,7500,3681,4560,4269,4270,3910,7501,4075,4995, # 7200
4271,7502,7503,4076,7504,4996,7505,3225,4997,4272,4077,2819,3023,7506,7507,2733, # 7216
4561,7508,4562,7509,3369,3793,7510,3590,2508,7511,7512,4273,3113,2994,2616,7513, # 7232
7514,7515,7516,7517,7518,2820,3911,4078,2748,7519,7520,4563,4998,7521,7522,7523, # 7248
7524,4999,4274,7525,4564,3682,2239,4079,4565,7526,7527,7528,7529,5000,7530,7531, # 7264
5001,4275,3794,7532,7533,7534,3066,5002,4566,3161,7535,7536,4080,7537,3162,7538, # 7280
7539,4567,7540,7541,7542,7543,7544,7545,5003,7546,4568,7547,7548,7549,7550,7551, # 7296
7552,7553,7554,7555,7556,5004,7557,7558,7559,5005,7560,3795,7561,4569,7562,7563, # 7312
7564,2821,3796,4276,4277,4081,7565,2876,7566,5006,7567,7568,2900,7569,3797,3912, # 7328
7570,7571,7572,4278,7573,7574,7575,5007,7576,7577,5008,7578,7579,4279,2934,7580, # 7344
7581,5009,7582,4570,7583,4280,7584,7585,7586,4571,4572,3913,7587,4573,3505,7588, # 7360
5010,7589,7590,7591,7592,3798,4574,7593,7594,5011,7595,4281,7596,7597,7598,4282, # 7376
5012,7599,7600,5013,3163,7601,5014,7602,3914,7603,7604,2734,4575,4576,4577,7605, # 7392
7606,7607,7608,7609,3506,5015,4578,7610,4082,7611,2822,2901,2579,3683,3024,4579, # 7408
3507,7612,4580,7613,3226,3799,5016,7614,7615,7616,7617,7618,7619,7620,2995,3290, # 7424
7621,4083,7622,5017,7623,7624,7625,7626,7627,4581,3915,7628,3291,7629,5018,7630, # 7440
7631,7632,7633,4084,7634,7635,3427,3800,7636,7637,4582,7638,5019,4583,5020,7639, # 7456
3916,7640,3801,5021,4584,4283,7641,7642,3428,3591,2269,7643,2617,7644,4585,3592, # 7472
7645,4586,2902,7646,7647,3227,5022,7648,4587,7649,4284,7650,7651,7652,4588,2284, # 7488
7653,5023,7654,7655,7656,4589,5024,3802,7657,7658,5025,3508,4590,7659,7660,7661, # 7504
1969,5026,7662,7663,3684,1821,2688,7664,2028,2509,4285,7665,2823,1841,7666,2689, # 7520
3114,7667,3917,4085,2160,5027,5028,2972,7668,5029,7669,7670,7671,3593,4086,7672, # 7536
4591,4087,5030,3803,7673,7674,7675,7676,7677,7678,7679,4286,2366,4592,4593,3067, # 7552
2328,7680,7681,4594,3594,3918,2029,4287,7682,5031,3919,3370,4288,4595,2856,7683, # 7568
3509,7684,7685,5032,5033,7686,7687,3804,2784,7688,7689,7690,7691,3371,7692,7693, # 7584
2877,5034,7694,7695,3920,4289,4088,7696,7697,7698,5035,7699,5036,4290,5037,5038, # 7600
5039,7700,7701,7702,5040,5041,3228,7703,1760,7704,5042,3229,4596,2106,4089,7705, # 7616
4597,2824,5043,2107,3372,7706,4291,4090,5044,7707,4091,7708,5045,3025,3805,4598, # 7632
4292,4293,4294,3373,7709,4599,7710,5046,7711,7712,5047,5048,3806,7713,7714,7715, # 7648
5049,7716,7717,7718,7719,4600,5050,7720,7721,7722,5051,7723,4295,3429,7724,7725, # 7664
7726,7727,3921,7728,3292,5052,4092,7729,7730,7731,7732,7733,7734,7735,5053,5054, # 7680
7736,7737,7738,7739,3922,3685,7740,7741,7742,7743,2635,5055,7744,5056,4601,7745, # 7696
7746,2560,7747,7748,7749,7750,3923,7751,7752,7753,7754,7755,4296,2903,7756,7757, # 7712
7758,7759,7760,3924,7761,5057,4297,7762,7763,5058,4298,7764,4093,7765,7766,5059, # 7728
3925,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,3595,7777,4299,5060,4094, # 7744
7778,3293,5061,7779,7780,4300,7781,7782,4602,7783,3596,7784,7785,3430,2367,7786, # 7760
3164,5062,5063,4301,7787,7788,4095,5064,5065,7789,3374,3115,7790,7791,7792,7793, # 7776
7794,7795,7796,3597,4603,7797,7798,3686,3116,3807,5066,7799,7800,5067,7801,7802, # 7792
4604,4302,5068,4303,4096,7803,7804,3294,7805,7806,5069,4605,2690,7807,3026,7808, # 7808
7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824, # 7824
7825,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840, # 7840
7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856, # 7856
7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871,7872, # 7872
7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887,7888, # 7888
7889,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903,7904, # 7904
7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919,7920, # 7920
7921,7922,7923,7924,3926,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935, # 7936
7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951, # 7952
7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967, # 7968
7968,7969,7970,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983, # 7984
7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999, # 8000
8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015, # 8016
8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031, # 8032
8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047, # 8048
8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063, # 8064
8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079, # 8080
8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095, # 8096
8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111, # 8112
8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127, # 8128
8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143, # 8144
8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159, # 8160
8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175, # 8176
8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191, # 8192
8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207, # 8208
8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223, # 8224
8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239, # 8240
8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255, # 8256
8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271] # 8272
end

View File

@@ -1,229 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is Mozilla Communicator client code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
module CharDet
NUM_OF_CATEGORY = 6
DONT_KNOW = -1
ENOUGH_REL_THRESHOLD = 100
MAX_REL_THRESHOLD = 1000
MINIMUM_DATA_THRESHOLD = 4
# This is hiragana 2-char sequence table, the number in each cell represents its frequency category
jp2CharContext = [
[0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1],
[2,4,0,4,0,3,0,4,0,3,4,4,4,2,4,3,3,4,3,2,3,3,4,2,3,3,3,2,4,1,4,3,3,1,5,4,3,4,3,4,3,5,3,0,3,5,4,2,0,3,1,0,3,3,0,3,3,0,1,1,0,4,3,0,3,3,0,4,0,2,0,3,5,5,5,5,4,0,4,1,0,3,4],
[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2],
[0,4,0,5,0,5,0,4,0,4,5,4,4,3,5,3,5,1,5,3,4,3,4,4,3,4,3,3,4,3,5,4,4,3,5,5,3,5,5,5,3,5,5,3,4,5,5,3,1,3,2,0,3,4,0,4,2,0,4,2,1,5,3,2,3,5,0,4,0,2,0,5,4,4,5,4,5,0,4,0,0,4,4],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,3,0,4,0,3,0,3,0,4,5,4,3,3,3,3,4,3,5,4,4,3,5,4,4,3,4,3,4,4,4,4,5,3,4,4,3,4,5,5,4,5,5,1,4,5,4,3,0,3,3,1,3,3,0,4,4,0,3,3,1,5,3,3,3,5,0,4,0,3,0,4,4,3,4,3,3,0,4,1,1,3,4],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,4,0,3,0,3,0,4,0,3,4,4,3,2,2,1,2,1,3,1,3,3,3,3,3,4,3,1,3,3,5,3,3,0,4,3,0,5,4,3,3,5,4,4,3,4,4,5,0,1,2,0,1,2,0,2,2,0,1,0,0,5,2,2,1,4,0,3,0,1,0,4,4,3,5,4,3,0,2,1,0,4,3],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,3,0,5,0,4,0,2,1,4,4,2,4,1,4,2,4,2,4,3,3,3,4,3,3,3,3,1,4,2,3,3,3,1,4,4,1,1,1,4,3,3,2,0,2,4,3,2,0,3,3,0,3,1,1,0,0,0,3,3,0,4,2,2,3,4,0,4,0,3,0,4,4,5,3,4,4,0,3,0,0,1,4],
[1,4,0,4,0,4,0,4,0,3,5,4,4,3,4,3,5,4,3,3,4,3,5,4,4,4,4,3,4,2,4,3,3,1,5,4,3,2,4,5,4,5,5,4,4,5,4,4,0,3,2,2,3,3,0,4,3,1,3,2,1,4,3,3,4,5,0,3,0,2,0,4,5,5,4,5,4,0,4,0,0,5,4],
[0,5,0,5,0,4,0,3,0,4,4,3,4,3,3,3,4,0,4,4,4,3,4,3,4,3,3,1,4,2,4,3,4,0,5,4,1,4,5,4,4,5,3,2,4,3,4,3,2,4,1,3,3,3,2,3,2,0,4,3,3,4,3,3,3,4,0,4,0,3,0,4,5,4,4,4,3,0,4,1,0,1,3],
[0,3,1,4,0,3,0,2,0,3,4,4,3,1,4,2,3,3,4,3,4,3,4,3,4,4,3,2,3,1,5,4,4,1,4,4,3,5,4,4,3,5,5,4,3,4,4,3,1,2,3,1,2,2,0,3,2,0,3,1,0,5,3,3,3,4,3,3,3,3,4,4,4,4,5,4,2,0,3,3,2,4,3],
[0,2,0,3,0,1,0,1,0,0,3,2,0,0,2,0,1,0,2,1,3,3,3,1,2,3,1,0,1,0,4,2,1,1,3,3,0,4,3,3,1,4,3,3,0,3,3,2,0,0,0,0,1,0,0,2,0,0,0,0,0,4,1,0,2,3,2,2,2,1,3,3,3,4,4,3,2,0,3,1,0,3,3],
[0,4,0,4,0,3,0,3,0,4,4,4,3,3,3,3,3,3,4,3,4,2,4,3,4,3,3,2,4,3,4,5,4,1,4,5,3,5,4,5,3,5,4,0,3,5,5,3,1,3,3,2,2,3,0,3,4,1,3,3,2,4,3,3,3,4,0,4,0,3,0,4,5,4,4,5,3,0,4,1,0,3,4],
[0,2,0,3,0,3,0,0,0,2,2,2,1,0,1,0,0,0,3,0,3,0,3,0,1,3,1,0,3,1,3,3,3,1,3,3,3,0,1,3,1,3,4,0,0,3,1,1,0,3,2,0,0,0,0,1,3,0,1,0,0,3,3,2,0,3,0,0,0,0,0,3,4,3,4,3,3,0,3,0,0,2,3],
[2,3,0,3,0,2,0,1,0,3,3,4,3,1,3,1,1,1,3,1,4,3,4,3,3,3,0,0,3,1,5,4,3,1,4,3,2,5,5,4,4,4,4,3,3,4,4,4,0,2,1,1,3,2,0,1,2,0,0,1,0,4,1,3,3,3,0,3,0,1,0,4,4,4,5,5,3,0,2,0,0,4,4],
[0,2,0,1,0,3,1,3,0,2,3,3,3,0,3,1,0,0,3,0,3,2,3,1,3,2,1,1,0,0,4,2,1,0,2,3,1,4,3,2,0,4,4,3,1,3,1,3,0,1,0,0,1,0,0,0,1,0,0,0,0,4,1,1,1,2,0,3,0,0,0,3,4,2,4,3,2,0,1,0,0,3,3],
[0,1,0,4,0,5,0,4,0,2,4,4,2,3,3,2,3,3,5,3,3,3,4,3,4,2,3,0,4,3,3,3,4,1,4,3,2,1,5,5,3,4,5,1,3,5,4,2,0,3,3,0,1,3,0,4,2,0,1,3,1,4,3,3,3,3,0,3,0,1,0,3,4,4,4,5,5,0,3,0,1,4,5],
[0,2,0,3,0,3,0,0,0,2,3,1,3,0,4,0,1,1,3,0,3,4,3,2,3,1,0,3,3,2,3,1,3,0,2,3,0,2,1,4,1,2,2,0,0,3,3,0,0,2,0,0,0,1,0,0,0,0,2,2,0,3,2,1,3,3,0,2,0,2,0,0,3,3,1,2,4,0,3,0,2,2,3],
[2,4,0,5,0,4,0,4,0,2,4,4,4,3,4,3,3,3,1,2,4,3,4,3,4,4,5,0,3,3,3,3,2,0,4,3,1,4,3,4,1,4,4,3,3,4,4,3,1,2,3,0,4,2,0,4,1,0,3,3,0,4,3,3,3,4,0,4,0,2,0,3,5,3,4,5,2,0,3,0,0,4,5],
[0,3,0,4,0,1,0,1,0,1,3,2,2,1,3,0,3,0,2,0,2,0,3,0,2,0,0,0,1,0,1,1,0,0,3,1,0,0,0,4,0,3,1,0,2,1,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,4,2,2,3,1,0,3,0,0,0,1,4,4,4,3,0,0,4,0,0,1,4],
[1,4,1,5,0,3,0,3,0,4,5,4,4,3,5,3,3,4,4,3,4,1,3,3,3,3,2,1,4,1,5,4,3,1,4,4,3,5,4,4,3,5,4,3,3,4,4,4,0,3,3,1,2,3,0,3,1,0,3,3,0,5,4,4,4,4,4,4,3,3,5,4,4,3,3,5,4,0,3,2,0,4,4],
[0,2,0,3,0,1,0,0,0,1,3,3,3,2,4,1,3,0,3,1,3,0,2,2,1,1,0,0,2,0,4,3,1,0,4,3,0,4,4,4,1,4,3,1,1,3,3,1,0,2,0,0,1,3,0,0,0,0,2,0,0,4,3,2,4,3,5,4,3,3,3,4,3,3,4,3,3,0,2,1,0,3,3],
[0,2,0,4,0,3,0,2,0,2,5,5,3,4,4,4,4,1,4,3,3,0,4,3,4,3,1,3,3,2,4,3,0,3,4,3,0,3,4,4,2,4,4,0,4,5,3,3,2,2,1,1,1,2,0,1,5,0,3,3,2,4,3,3,3,4,0,3,0,2,0,4,4,3,5,5,0,0,3,0,2,3,3],
[0,3,0,4,0,3,0,1,0,3,4,3,3,1,3,3,3,0,3,1,3,0,4,3,3,1,1,0,3,0,3,3,0,0,4,4,0,1,5,4,3,3,5,0,3,3,4,3,0,2,0,1,1,1,0,1,3,0,1,2,1,3,3,2,3,3,0,3,0,1,0,1,3,3,4,4,1,0,1,2,2,1,3],
[0,1,0,4,0,4,0,3,0,1,3,3,3,2,3,1,1,0,3,0,3,3,4,3,2,4,2,0,1,0,4,3,2,0,4,3,0,5,3,3,2,4,4,4,3,3,3,4,0,1,3,0,0,1,0,0,1,0,0,0,0,4,2,3,3,3,0,3,0,0,0,4,4,4,5,3,2,0,3,3,0,3,5],
[0,2,0,3,0,0,0,3,0,1,3,0,2,0,0,0,1,0,3,1,1,3,3,0,0,3,0,0,3,0,2,3,1,0,3,1,0,3,3,2,0,4,2,2,0,2,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,2,1,2,0,1,0,1,0,0,0,1,3,1,2,0,0,0,1,0,0,1,4],
[0,3,0,3,0,5,0,1,0,2,4,3,1,3,3,2,1,1,5,2,1,0,5,1,2,0,0,0,3,3,2,2,3,2,4,3,0,0,3,3,1,3,3,0,2,5,3,4,0,3,3,0,1,2,0,2,2,0,3,2,0,2,2,3,3,3,0,2,0,1,0,3,4,4,2,5,4,0,3,0,0,3,5],
[0,3,0,3,0,3,0,1,0,3,3,3,3,0,3,0,2,0,2,1,1,0,2,0,1,0,0,0,2,1,0,0,1,0,3,2,0,0,3,3,1,2,3,1,0,3,3,0,0,1,0,0,0,0,0,2,0,0,0,0,0,2,3,1,2,3,0,3,0,1,0,3,2,1,0,4,3,0,1,1,0,3,3],
[0,4,0,5,0,3,0,3,0,4,5,5,4,3,5,3,4,3,5,3,3,2,5,3,4,4,4,3,4,3,4,5,5,3,4,4,3,4,4,5,4,4,4,3,4,5,5,4,2,3,4,2,3,4,0,3,3,1,4,3,2,4,3,3,5,5,0,3,0,3,0,5,5,5,5,4,4,0,4,0,1,4,4],
[0,4,0,4,0,3,0,3,0,3,5,4,4,2,3,2,5,1,3,2,5,1,4,2,3,2,3,3,4,3,3,3,3,2,5,4,1,3,3,5,3,4,4,0,4,4,3,1,1,3,1,0,2,3,0,2,3,0,3,0,0,4,3,1,3,4,0,3,0,2,0,4,4,4,3,4,5,0,4,0,0,3,4],
[0,3,0,3,0,3,1,2,0,3,4,4,3,3,3,0,2,2,4,3,3,1,3,3,3,1,1,0,3,1,4,3,2,3,4,4,2,4,4,4,3,4,4,3,2,4,4,3,1,3,3,1,3,3,0,4,1,0,2,2,1,4,3,2,3,3,5,4,3,3,5,4,4,3,3,0,4,0,3,2,2,4,4],
[0,2,0,1,0,0,0,0,0,1,2,1,3,0,0,0,0,0,2,0,1,2,1,0,0,1,0,0,0,0,3,0,0,1,0,1,1,3,1,0,0,0,1,1,0,1,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,1,2,2,0,3,4,0,0,0,1,1,0,0,1,0,0,0,0,0,1,1],
[0,1,0,0,0,1,0,0,0,0,4,0,4,1,4,0,3,0,4,0,3,0,4,0,3,0,3,0,4,1,5,1,4,0,0,3,0,5,0,5,2,0,1,0,0,0,2,1,4,0,1,3,0,0,3,0,0,3,1,1,4,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0],
[1,4,0,5,0,3,0,2,0,3,5,4,4,3,4,3,5,3,4,3,3,0,4,3,3,3,3,3,3,2,4,4,3,1,3,4,4,5,4,4,3,4,4,1,3,5,4,3,3,3,1,2,2,3,3,1,3,1,3,3,3,5,3,3,4,5,0,3,0,3,0,3,4,3,4,4,3,0,3,0,2,4,3],
[0,1,0,4,0,0,0,0,0,1,4,0,4,1,4,2,4,0,3,0,1,0,1,0,0,0,0,0,2,0,3,1,1,1,0,3,0,0,0,1,2,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,3,0,0,0,0,3,2,0,2,2,0,1,0,0,0,2,3,2,3,3,0,0,0,0,2,1,0],
[0,5,1,5,0,3,0,3,0,5,4,4,5,1,5,3,3,0,4,3,4,3,5,3,4,3,3,2,4,3,4,3,3,0,3,3,1,4,4,3,4,4,4,3,4,5,5,3,2,3,1,1,3,3,1,3,1,1,3,3,2,4,5,3,3,5,0,4,0,3,0,4,4,3,5,3,3,0,3,4,0,4,3],
[0,5,0,5,0,3,0,2,0,4,4,3,5,2,4,3,3,3,4,4,4,3,5,3,5,3,3,1,4,0,4,3,3,0,3,3,0,4,4,4,4,5,4,3,3,5,5,3,2,3,1,2,3,2,0,1,0,0,3,2,2,4,4,3,1,5,0,4,0,3,0,4,3,1,3,2,1,0,3,3,0,3,3],
[0,4,0,5,0,5,0,4,0,4,5,5,5,3,4,3,3,2,5,4,4,3,5,3,5,3,4,0,4,3,4,4,3,2,4,4,3,4,5,4,4,5,5,0,3,5,5,4,1,3,3,2,3,3,1,3,1,0,4,3,1,4,4,3,4,5,0,4,0,2,0,4,3,4,4,3,3,0,4,0,0,5,5],
[0,4,0,4,0,5,0,1,1,3,3,4,4,3,4,1,3,0,5,1,3,0,3,1,3,1,1,0,3,0,3,3,4,0,4,3,0,4,4,4,3,4,4,0,3,5,4,1,0,3,0,0,2,3,0,3,1,0,3,1,0,3,2,1,3,5,0,3,0,1,0,3,2,3,3,4,4,0,2,2,0,4,4],
[2,4,0,5,0,4,0,3,0,4,5,5,4,3,5,3,5,3,5,3,5,2,5,3,4,3,3,4,3,4,5,3,2,1,5,4,3,2,3,4,5,3,4,1,2,5,4,3,0,3,3,0,3,2,0,2,3,0,4,1,0,3,4,3,3,5,0,3,0,1,0,4,5,5,5,4,3,0,4,2,0,3,5],
[0,5,0,4,0,4,0,2,0,5,4,3,4,3,4,3,3,3,4,3,4,2,5,3,5,3,4,1,4,3,4,4,4,0,3,5,0,4,4,4,4,5,3,1,3,4,5,3,3,3,3,3,3,3,0,2,2,0,3,3,2,4,3,3,3,5,3,4,1,3,3,5,3,2,0,0,0,0,4,3,1,3,3],
[0,1,0,3,0,3,0,1,0,1,3,3,3,2,3,3,3,0,3,0,0,0,3,1,3,0,0,0,2,2,2,3,0,0,3,2,0,1,2,4,1,3,3,0,0,3,3,3,0,1,0,0,2,1,0,0,3,0,3,1,0,3,0,0,1,3,0,2,0,1,0,3,3,1,3,3,0,0,1,1,0,3,3],
[0,2,0,3,0,2,1,4,0,2,2,3,1,1,3,1,1,0,2,0,3,1,2,3,1,3,0,0,1,0,4,3,2,3,3,3,1,4,2,3,3,3,3,1,0,3,1,4,0,1,1,0,1,2,0,1,1,0,1,1,0,3,1,3,2,2,0,1,0,0,0,2,3,3,3,1,0,0,0,0,0,2,3],
[0,5,0,4,0,5,0,2,0,4,5,5,3,3,4,3,3,1,5,4,4,2,4,4,4,3,4,2,4,3,5,5,4,3,3,4,3,3,5,5,4,5,5,1,3,4,5,3,1,4,3,1,3,3,0,3,3,1,4,3,1,4,5,3,3,5,0,4,0,3,0,5,3,3,1,4,3,0,4,0,1,5,3],
[0,5,0,5,0,4,0,2,0,4,4,3,4,3,3,3,3,3,5,4,4,4,4,4,4,5,3,3,5,2,4,4,4,3,4,4,3,3,4,4,5,5,3,3,4,3,4,3,3,4,3,3,3,3,1,2,2,1,4,3,3,5,4,4,3,4,0,4,0,3,0,4,4,4,4,4,1,0,4,2,0,2,4],
[0,4,0,4,0,3,0,1,0,3,5,2,3,0,3,0,2,1,4,2,3,3,4,1,4,3,3,2,4,1,3,3,3,0,3,3,0,0,3,3,3,5,3,3,3,3,3,2,0,2,0,0,2,0,0,2,0,0,1,0,0,3,1,2,2,3,0,3,0,2,0,4,4,3,3,4,1,0,3,0,0,2,4],
[0,0,0,4,0,0,0,0,0,0,1,0,1,0,2,0,0,0,0,0,1,0,2,0,1,0,0,0,0,0,3,1,3,0,3,2,0,0,0,1,0,3,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,2,0,0,0,0,0,0,2],
[0,2,1,3,0,2,0,2,0,3,3,3,3,1,3,1,3,3,3,3,3,3,4,2,2,1,2,1,4,0,4,3,1,3,3,3,2,4,3,5,4,3,3,3,3,3,3,3,0,1,3,0,2,0,0,1,0,0,1,0,0,4,2,0,2,3,0,3,3,0,3,3,4,2,3,1,4,0,1,2,0,2,3],
[0,3,0,3,0,1,0,3,0,2,3,3,3,0,3,1,2,0,3,3,2,3,3,2,3,2,3,1,3,0,4,3,2,0,3,3,1,4,3,3,2,3,4,3,1,3,3,1,1,0,1,1,0,1,0,1,0,1,0,0,0,4,1,1,0,3,0,3,1,0,2,3,3,3,3,3,1,0,0,2,0,3,3],
[0,0,0,0,0,0,0,0,0,0,3,0,2,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,3,0,3,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,2,0,2,3,0,0,0,0,0,0,0,0,3],
[0,2,0,3,1,3,0,3,0,2,3,3,3,1,3,1,3,1,3,1,3,3,3,1,3,0,2,3,1,1,4,3,3,2,3,3,1,2,2,4,1,3,3,0,1,4,2,3,0,1,3,0,3,0,0,1,3,0,2,0,0,3,3,2,1,3,0,3,0,2,0,3,4,4,4,3,1,0,3,0,0,3,3],
[0,2,0,1,0,2,0,0,0,1,3,2,2,1,3,0,1,1,3,0,3,2,3,1,2,0,2,0,1,1,3,3,3,0,3,3,1,1,2,3,2,3,3,1,2,3,2,0,0,1,0,0,0,0,0,0,3,0,1,0,0,2,1,2,1,3,0,3,0,0,0,3,4,4,4,3,2,0,2,0,0,2,4],
[0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,3,1,0,0,0,0,0,0,0,3],
[0,3,0,3,0,2,0,3,0,3,3,3,2,3,2,2,2,0,3,1,3,3,3,2,3,3,0,0,3,0,3,2,2,0,2,3,1,4,3,4,3,3,2,3,1,5,4,4,0,3,1,2,1,3,0,3,1,1,2,0,2,3,1,3,1,3,0,3,0,1,0,3,3,4,4,2,1,0,2,1,0,2,4],
[0,1,0,3,0,1,0,2,0,1,4,2,5,1,4,0,2,0,2,1,3,1,4,0,2,1,0,0,2,1,4,1,1,0,3,3,0,5,1,3,2,3,3,1,0,3,2,3,0,1,0,0,0,0,0,0,1,0,0,0,0,4,0,1,0,3,0,2,0,1,0,3,3,3,4,3,3,0,0,0,0,2,3],
[0,0,0,1,0,0,0,0,0,0,2,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,0,1,0,0,0,0,0,3],
[0,1,0,3,0,4,0,3,0,2,4,3,1,0,3,2,2,1,3,1,2,2,3,1,1,1,2,1,3,0,1,2,0,1,3,2,1,3,0,5,5,1,0,0,1,3,2,1,0,3,0,0,1,0,0,0,0,0,3,4,0,1,1,1,3,2,0,2,0,1,0,2,3,3,1,2,3,0,1,0,1,0,4],
[0,0,0,1,0,3,0,3,0,2,2,1,0,0,4,0,3,0,3,1,3,0,3,0,3,0,1,0,3,0,3,1,3,0,3,3,0,0,1,2,1,1,1,0,1,2,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2,2,1,2,0,0,2,0,0,0,0,2,3,3,3,3,0,0,0,0,1,4],
[0,0,0,3,0,3,0,0,0,0,3,1,1,0,3,0,1,0,2,0,1,0,0,0,0,0,0,0,1,0,3,0,2,0,2,3,0,0,2,2,3,1,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,2,3],
[2,4,0,5,0,5,0,4,0,3,4,3,3,3,4,3,3,3,4,3,4,4,5,4,5,5,5,2,3,0,5,5,4,1,5,4,3,1,5,4,3,4,4,3,3,4,3,3,0,3,2,0,2,3,0,3,0,0,3,3,0,5,3,2,3,3,0,3,0,3,0,3,4,5,4,5,3,0,4,3,0,3,4],
[0,3,0,3,0,3,0,3,0,3,3,4,3,2,3,2,3,0,4,3,3,3,3,3,3,3,3,0,3,2,4,3,3,1,3,4,3,4,4,4,3,4,4,3,2,4,4,1,0,2,0,0,1,1,0,2,0,0,3,1,0,5,3,2,1,3,0,3,0,1,2,4,3,2,4,3,3,0,3,2,0,4,4],
[0,3,0,3,0,1,0,0,0,1,4,3,3,2,3,1,3,1,4,2,3,2,4,2,3,4,3,0,2,2,3,3,3,0,3,3,3,0,3,4,1,3,3,0,3,4,3,3,0,1,1,0,1,0,0,0,4,0,3,0,0,3,1,2,1,3,0,4,0,1,0,4,3,3,4,3,3,0,2,0,0,3,3],
[0,3,0,4,0,1,0,3,0,3,4,3,3,0,3,3,3,1,3,1,3,3,4,3,3,3,0,0,3,1,5,3,3,1,3,3,2,5,4,3,3,4,5,3,2,5,3,4,0,1,0,0,0,0,0,2,0,0,1,1,0,4,2,2,1,3,0,3,0,2,0,4,4,3,5,3,2,0,1,1,0,3,4],
[0,5,0,4,0,5,0,2,0,4,4,3,3,2,3,3,3,1,4,3,4,1,5,3,4,3,4,0,4,2,4,3,4,1,5,4,0,4,4,4,4,5,4,1,3,5,4,2,1,4,1,1,3,2,0,3,1,0,3,2,1,4,3,3,3,4,0,4,0,3,0,4,4,4,3,3,3,0,4,2,0,3,4],
[1,4,0,4,0,3,0,1,0,3,3,3,1,1,3,3,2,2,3,3,1,0,3,2,2,1,2,0,3,1,2,1,2,0,3,2,0,2,2,3,3,4,3,0,3,3,1,2,0,1,1,3,1,2,0,0,3,0,1,1,0,3,2,2,3,3,0,3,0,0,0,2,3,3,4,3,3,0,1,0,0,1,4],
[0,4,0,4,0,4,0,0,0,3,4,4,3,1,4,2,3,2,3,3,3,1,4,3,4,0,3,0,4,2,3,3,2,2,5,4,2,1,3,4,3,4,3,1,3,3,4,2,0,2,1,0,3,3,0,0,2,0,3,1,0,4,4,3,4,3,0,4,0,1,0,2,4,4,4,4,4,0,3,2,0,3,3],
[0,0,0,1,0,4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,3,2,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,2],
[0,2,0,3,0,4,0,4,0,1,3,3,3,0,4,0,2,1,2,1,1,1,2,0,3,1,1,0,1,0,3,1,0,0,3,3,2,0,1,1,0,0,0,0,0,1,0,2,0,2,2,0,3,1,0,0,1,0,1,1,0,1,2,0,3,0,0,0,0,1,0,0,3,3,4,3,1,0,1,0,3,0,2],
[0,0,0,3,0,5,0,0,0,0,1,0,2,0,3,1,0,1,3,0,0,0,2,0,0,0,1,0,0,0,1,1,0,0,4,0,0,0,2,3,0,1,4,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,3,0,0,0,0,0,3],
[0,2,0,5,0,5,0,1,0,2,4,3,3,2,5,1,3,2,3,3,3,0,4,1,2,0,3,0,4,0,2,2,1,1,5,3,0,0,1,4,2,3,2,0,3,3,3,2,0,2,4,1,1,2,0,1,1,0,3,1,0,1,3,1,2,3,0,2,0,0,0,1,3,5,4,4,4,0,3,0,0,1,3],
[0,4,0,5,0,4,0,4,0,4,5,4,3,3,4,3,3,3,4,3,4,4,5,3,4,5,4,2,4,2,3,4,3,1,4,4,1,3,5,4,4,5,5,4,4,5,5,5,2,3,3,1,4,3,1,3,3,0,3,3,1,4,3,4,4,4,0,3,0,4,0,3,3,4,4,5,0,0,4,3,0,4,5],
[0,4,0,4,0,3,0,3,0,3,4,4,4,3,3,2,4,3,4,3,4,3,5,3,4,3,2,1,4,2,4,4,3,1,3,4,2,4,5,5,3,4,5,4,1,5,4,3,0,3,2,2,3,2,1,3,1,0,3,3,3,5,3,3,3,5,4,4,2,3,3,4,3,3,3,2,1,0,3,2,1,4,3],
[0,4,0,5,0,4,0,3,0,3,5,5,3,2,4,3,4,0,5,4,4,1,4,4,4,3,3,3,4,3,5,5,2,3,3,4,1,2,5,5,3,5,5,2,3,5,5,4,0,3,2,0,3,3,1,1,5,1,4,1,0,4,3,2,3,5,0,4,0,3,0,5,4,3,4,3,0,0,4,1,0,4,4],
[1,3,0,4,0,2,0,2,0,2,5,5,3,3,3,3,3,0,4,2,3,4,4,4,3,4,0,0,3,4,5,4,3,3,3,3,2,5,5,4,5,5,5,4,3,5,5,5,1,3,1,0,1,0,0,3,2,0,4,2,0,5,2,3,2,4,1,3,0,3,0,4,5,4,5,4,3,0,4,2,0,5,4],
[0,3,0,4,0,5,0,3,0,3,4,4,3,2,3,2,3,3,3,3,3,2,4,3,3,2,2,0,3,3,3,3,3,1,3,3,3,0,4,4,3,4,4,1,1,4,4,2,0,3,1,0,1,1,0,4,1,0,2,3,1,3,3,1,3,4,0,3,0,1,0,3,1,3,0,0,1,0,2,0,0,4,4],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,3,0,3,0,2,0,3,0,1,5,4,3,3,3,1,4,2,1,2,3,4,4,2,4,4,5,0,3,1,4,3,4,0,4,3,3,3,2,3,2,5,3,4,3,2,2,3,0,0,3,0,2,1,0,1,2,0,0,0,0,2,1,1,3,1,0,2,0,4,0,3,4,4,4,5,2,0,2,0,0,1,3],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,0,0,0,4,2,1,1,0,1,0,3,2,0,0,3,1,1,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,1,0,0,0,2,0,0,0,1,4,0,4,2,1,0,0,0,0,0,1],
[0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,3,1,0,0,0,2,0,2,1,0,0,1,2,1,0,1,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,1,3,1,0,0,0,0,0,1,0,0,2,1,0,0,0,0,0,0,0,0,2],
[0,4,0,4,0,4,0,3,0,4,4,3,4,2,4,3,2,0,4,4,4,3,5,3,5,3,3,2,4,2,4,3,4,3,1,4,0,2,3,4,4,4,3,3,3,4,4,4,3,4,1,3,4,3,2,1,2,1,3,3,3,4,4,3,3,5,0,4,0,3,0,4,3,3,3,2,1,0,3,0,0,3,3],
[0,4,0,3,0,3,0,3,0,3,5,5,3,3,3,3,4,3,4,3,3,3,4,4,4,3,3,3,3,4,3,5,3,3,1,3,2,4,5,5,5,5,4,3,4,5,5,3,2,2,3,3,3,3,2,3,3,1,2,3,2,4,3,3,3,4,0,4,0,2,0,4,3,2,2,1,2,0,3,0,0,4,1],
]
class JapaneseContextAnalysis
def initialize
reset()
end
def reset
@_mTotalRel = 0 # total sequence received
@_mRelSample = [0] * NUM_OF_CATEGORY # category counters, each interger counts sequence in its category
@_mNeedToSkipCharNum = 0 # if last byte in current buffer is not the last byte of a character, we need to know how many bytes to skip in next buffer
@_mLastCharOrder = -1 # The order of previous char
@_mDone = false # If this flag is set to constants.True, detection is done and conclusion has been made
end
def feed(aBuf, aLen)
return if @_mDone
# The buffer we got is byte oriented, and a character may span in more than one
# buffers. In case the last one or two byte in last buffer is not complete, we
# record how many byte needed to complete that character and skip these bytes here.
# We can choose to record those bytes as well and analyse the character once it
# is complete, but since a character will not make much difference, by simply skipping
# this character will simply our logic and improve performance.
i = @_mNeedToSkipCharNum
while i < aLen
order, charLen = get_order(aBuf[i...i+2])
i += charLen
if i > aLen
@_mNeedToSkipCharNum = i - aLen
@_mLastCharOrder = -1
else
if (order != -1) and (@_mLastCharOrder != -1)
@_mTotalRel += 1
if @_mTotalRel > MAX_REL_THRESHOLD
@_mDone = true
break
end
@_mRelSample[jp2CharContext[@_mLastCharOrder][order]] += 1
end
@_mLastCharOrder = order
end
end
end
def got_enough_data
return @_mTotalRel > ENOUGH_REL_THRESHOLD
end
def get_confidence
# This is just one way to calculate confidence. It works well for me.
if @_mTotalRel > MINIMUM_DATA_THRESHOLD
return (@_mTotalRel - @_mRelSample[0]) / @_mTotalRel
else
return DONT_KNOW
end
end
def get_order(aStr)
return -1, 1
end
end
class SJISContextAnalysis < JapaneseContextAnalysis
def get_order(aStr)
return -1, 1 if not aStr
# find out current char's byte length
aStr = aStr[0..1].join if aStr.class == Array
if ((aStr[0..0] >= "\x81") and (aStr[0..0] <= "\x9F")) or ((aStr[0..0] >= "\xE0") and (aStr[0..0] <= "\xFC"))
charLen = 2
else
charLen = 1
end
# return its order if it is hiragana
if aStr.length > 1
if (aStr[0..0] == "\202") and (aStr[1..1] >= "\x9F") and (aStr[1..1] <= "\xF1")
return aStr[1] - 0x9F, charLen
end
end
return -1, charLen
end
end
class EUCJPContextAnalysis < JapaneseContextAnalysis
def get_order(aStr)
return -1, 1 unless aStr
# find out current char's byte length
aStr = aStr[0..1].join if aStr.class == Array
if (aStr[0..0] == "\x8E") or ((aStr[0..0] >= "\xA1") and (aStr[0..0] <= "\xFE"))
charLen = 2
elsif aStr[0..0] == "\x8F"
charLen = 3
else
charLen = 1
end
# return its order if it is hiragana
if aStr.length > 1
if (aStr[0..0] == "\xA4") and (aStr[1..1] >= "\xA1") and (aStr[1..1] <= "\xF3")
return aStr[1] - 0xA1, charLen
end
end
return -1, charLen
end
end
end

View File

@@ -1,229 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is Mozilla Communicator client code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
# 255: Control characters that usually does not exist in any text
# 254: Carriage/Return
# 253: symbol (punctuation) that does not belong to word
# 252: 0 - 9
# Character Mapping Table:
# this table is modified base on win1251BulgarianCharToOrderMap, so
# only number <64 is sure valid
module CharDet
Latin5_BulgarianCharToOrderMap = [
255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, # 40
110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, # 50
253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, # 60
116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, # 70
194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209, # 80
210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225, # 90
81,226,227,228,229,230,105,231,232,233,234,235,236, 45,237,238, # a0
31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, # b0
39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,239, 67,240, 60, 56, # c0
1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, # d0
7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,241, 42, 16, # e0
62,242,243,244, 58,245, 98,246,247,248,249,250,251, 91,252,253, # f0
]
win1251BulgarianCharToOrderMap = [
255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, # 40
110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, # 50
253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, # 60
116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, # 70
206,207,208,209,210,211,212,213,120,214,215,216,217,218,219,220, # 80
221, 78, 64, 83,121, 98,117,105,222,223,224,225,226,227,228,229, # 90
88,230,231,232,233,122, 89,106,234,235,236,237,238, 45,239,240, # a0
73, 80,118,114,241,242,243,244,245, 62, 58,246,247,248,249,250, # b0
31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, # c0
39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,251, 67,252, 60, 56, # d0
1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, # e0
7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,253, 42, 16, # f0
]
# Model Table:
# total sequences: 100%
# first 512 sequences: 96.9392%
# first 1024 sequences:3.0618%
# rest sequences: 0.2992%
# negative sequences: 0.0020%
BulgarianLangModel = [
0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,3,3,3,3,3,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,2,2,1,2,2,
3,1,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,0,1,
0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,0,3,1,0,
0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0,
0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0,
0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,1,3,3,3,3,2,2,2,1,1,2,0,1,0,1,0,0,
0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,
3,3,3,3,3,3,3,2,3,2,2,3,3,1,1,2,3,3,2,3,3,3,3,2,1,2,0,2,0,3,0,0,
0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,
3,3,3,3,3,3,3,1,3,3,3,3,3,2,3,2,3,3,3,3,3,2,3,3,1,3,0,3,0,2,0,0,
0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
3,3,3,3,3,3,3,3,1,3,3,2,3,3,3,1,3,3,2,3,2,2,2,0,0,2,0,2,0,2,0,0,
0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,
3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,3,3,1,2,2,3,2,1,1,2,0,2,0,0,0,0,
1,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
3,3,3,3,3,3,3,2,3,3,1,2,3,2,2,2,3,3,3,3,3,2,2,3,1,2,0,2,1,2,0,0,
0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,
3,3,3,3,3,1,3,3,3,3,3,2,3,3,3,2,3,3,2,3,2,2,2,3,1,2,0,1,0,1,0,0,
0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
3,3,3,3,3,3,3,3,3,3,3,1,1,1,2,2,1,3,1,3,2,2,3,0,0,1,0,1,0,1,0,0,
0,0,0,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
3,3,3,3,3,2,2,3,2,2,3,1,2,1,1,1,2,3,1,3,1,2,2,0,1,1,1,1,0,1,0,0,
0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
3,3,3,3,3,1,3,2,2,3,3,1,2,3,1,1,3,3,3,3,1,2,2,1,1,1,0,2,0,2,0,1,
0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,2,3,3,3,2,2,1,1,2,0,2,0,1,0,0,
0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
3,0,1,2,1,3,3,2,3,3,3,3,3,2,3,2,1,0,3,1,2,1,2,1,2,3,2,1,0,1,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,1,1,2,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,1,3,3,2,3,3,2,2,2,0,1,0,0,
0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2,3,3,3,3,0,3,3,3,3,3,2,1,1,2,1,3,3,0,3,1,1,1,1,3,2,0,1,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,1,1,3,1,3,3,2,3,2,2,2,3,0,2,0,0,
0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,3,3,3,3,2,3,3,2,2,3,2,1,1,1,1,1,3,1,3,1,1,0,0,0,1,0,0,0,1,0,0,
0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,
3,3,3,3,3,2,3,2,0,3,2,0,3,0,2,0,0,2,1,3,1,0,0,1,0,0,0,1,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
3,3,3,3,2,1,1,1,1,2,1,1,2,1,1,1,2,2,1,2,1,1,1,0,1,1,0,1,0,1,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
3,3,3,3,2,1,3,1,1,2,1,3,2,1,1,0,1,2,3,2,1,1,1,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2,3,3,3,3,2,2,1,0,1,0,0,1,0,0,0,2,1,0,3,0,0,1,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
3,3,3,2,3,2,3,3,1,3,2,1,1,1,2,1,1,2,1,3,0,1,0,0,0,1,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,1,1,2,2,3,3,2,3,2,2,2,3,1,2,2,1,1,2,1,1,2,2,0,1,1,0,1,0,2,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,3,3,3,2,1,3,1,0,2,2,1,3,2,1,0,0,2,0,2,0,1,0,0,0,0,0,0,0,1,0,0,
0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
3,3,3,3,3,3,1,2,0,2,3,1,2,3,2,0,1,3,1,2,1,1,1,0,0,1,0,0,2,2,2,3,
2,2,2,2,1,2,1,1,2,2,1,1,2,0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1,
3,3,3,3,3,2,1,2,2,1,2,0,2,0,1,0,1,2,1,2,1,1,0,0,0,1,0,1,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,
3,3,2,3,3,1,1,3,1,0,3,2,1,0,0,0,1,2,0,2,0,1,0,0,0,1,0,1,2,1,2,2,
1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,0,1,2,1,1,1,0,0,0,0,0,1,1,0,0,
3,1,0,1,0,2,3,2,2,2,3,2,2,2,2,2,1,0,2,1,2,1,1,1,0,1,2,1,2,2,2,1,
1,1,2,2,2,2,1,2,1,1,0,1,2,1,2,2,2,1,1,1,0,1,1,1,1,2,0,1,0,0,0,0,
2,3,2,3,3,0,0,2,1,0,2,1,0,0,0,0,2,3,0,2,0,0,0,0,0,1,0,0,2,0,1,2,
2,1,2,1,2,2,1,1,1,2,1,1,1,0,1,2,2,1,1,1,1,1,0,1,1,1,0,0,1,2,0,0,
3,3,2,2,3,0,2,3,1,1,2,0,0,0,1,0,0,2,0,2,0,0,0,1,0,1,0,1,2,0,2,2,
1,1,1,1,2,1,0,1,2,2,2,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,
2,3,2,3,3,0,0,3,0,1,1,0,1,0,0,0,2,2,1,2,0,0,0,0,0,0,0,0,2,0,1,2,
2,2,1,1,1,1,1,2,2,2,1,0,2,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0,
3,3,3,3,2,2,2,2,2,0,2,1,1,1,1,2,1,2,1,1,0,2,0,1,0,1,0,0,2,0,1,2,
1,1,1,1,1,1,1,2,2,1,1,0,2,0,1,0,2,0,0,1,1,1,0,0,2,0,0,0,1,1,0,0,
2,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0,0,0,0,1,2,0,1,2,
2,2,2,1,1,2,1,1,2,2,2,1,2,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,0,0,
2,3,3,3,3,0,2,2,0,2,1,0,0,0,1,1,1,2,0,2,0,0,0,3,0,0,0,0,2,0,2,2,
1,1,1,2,1,2,1,1,2,2,2,1,2,0,1,1,1,0,1,1,1,1,0,2,1,0,0,0,1,1,0,0,
2,3,3,3,3,0,2,1,0,0,2,0,0,0,0,0,1,2,0,2,0,0,0,0,0,0,0,0,2,0,1,2,
1,1,1,2,1,1,1,1,2,2,2,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,
3,3,2,2,3,0,1,0,1,0,0,0,0,0,0,0,1,1,0,3,0,0,0,0,0,0,0,0,1,0,2,2,
1,1,1,1,1,2,1,1,2,2,1,2,2,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,1,1,0,0,
3,1,0,1,0,2,2,2,2,3,2,1,1,1,2,3,0,0,1,0,2,1,1,0,1,1,1,1,2,1,1,1,
1,2,2,1,2,1,2,2,1,1,0,1,2,1,2,2,1,1,1,0,0,1,1,1,2,1,0,1,0,0,0,0,
2,1,0,1,0,3,1,2,2,2,2,1,2,2,1,1,1,0,2,1,2,2,1,1,2,1,1,0,2,1,1,1,
1,2,2,2,2,2,2,2,1,2,0,1,1,0,2,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,0,0,
2,1,1,1,1,2,2,2,2,1,2,2,2,1,2,2,1,1,2,1,2,3,2,2,1,1,1,1,0,1,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2,2,2,3,2,0,1,2,0,1,2,1,1,0,1,0,1,2,1,2,0,0,0,1,1,0,0,0,1,0,0,2,
1,1,0,0,1,1,0,1,1,1,1,0,2,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,
2,0,0,0,0,1,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,1,1,1,
1,2,2,2,2,1,1,2,1,2,1,1,1,0,2,1,2,1,1,1,0,2,1,1,1,1,0,1,0,0,0,0,
3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,
1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2,2,2,3,2,0,0,0,0,1,0,0,0,0,0,0,1,1,0,2,0,0,0,0,0,0,0,0,1,0,1,2,
1,1,1,1,1,1,0,0,2,2,2,2,2,0,1,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,
2,3,1,2,1,0,1,1,0,2,2,2,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,2,
1,1,1,1,2,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,
2,2,2,2,2,0,0,2,0,0,2,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,0,2,2,
1,1,1,1,1,0,0,1,2,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,
1,2,2,2,2,0,0,2,0,1,1,0,0,0,1,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,1,1,
0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,
1,2,2,3,2,0,0,1,0,0,1,0,0,0,0,0,0,1,0,2,0,0,0,1,0,0,0,0,0,0,0,2,
1,1,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,
2,1,2,2,2,1,2,1,2,2,1,1,2,1,1,1,0,1,1,1,1,2,0,1,0,1,1,1,1,0,1,1,
1,1,2,1,1,1,1,1,1,0,0,1,2,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,
1,0,0,1,3,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2,2,2,2,1,0,0,1,0,2,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,2,0,0,1,
0,2,0,1,0,0,1,1,2,0,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,
1,2,2,2,2,0,1,1,0,2,1,0,1,1,1,0,0,1,0,2,0,1,0,0,0,0,0,0,0,0,0,1,
0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,
2,2,2,2,2,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,
0,1,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,
2,0,1,0,0,1,2,1,1,1,1,1,1,2,2,1,0,0,1,0,1,0,0,0,0,1,1,1,1,0,0,0,
1,1,2,1,1,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2,2,1,2,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,
0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,
0,1,1,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,
1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,2,0,0,2,0,1,0,0,1,0,0,1,
1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,
1,1,1,1,1,1,1,2,0,0,0,0,0,0,2,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,0,1,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
]
Latin5BulgarianModel = {
'charToOrderMap' => Latin5_BulgarianCharToOrderMap,
'precedenceMatrix' => BulgarianLangModel,
'mTypicalPositiveRatio' => 0.969392,
'keepEnglishLetter' => false,
'charsetName' => "ISO-8859-5"
}
Win1251BulgarianModel = {
'charToOrderMap' => win1251BulgarianCharToOrderMap,
'precedenceMatrix' => BulgarianLangModel,
'mTypicalPositiveRatio' => 0.969392,
'keepEnglishLetter' => false,
'charsetName' => "windows-1251"
}
end

View File

@@ -1,330 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is Mozilla Communicator client code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
module CharDet
# KOI8-R language model
# Character Mapping Table:
KOI8R_CharToOrderMap = [
255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40
155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50
253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60
67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70
191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, # 80
207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, # 90
223,224,225, 68,226,227,228,229,230,231,232,233,234,235,236,237, # a0
238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253, # b0
27, 3, 21, 28, 13, 2, 39, 19, 26, 4, 23, 11, 8, 12, 5, 1, # c0
15, 16, 9, 7, 6, 14, 24, 10, 17, 18, 20, 25, 30, 29, 22, 54, # d0
59, 37, 44, 58, 41, 48, 53, 46, 55, 42, 60, 36, 49, 38, 31, 34, # e0
35, 43, 45, 32, 40, 52, 56, 33, 61, 62, 51, 57, 47, 63, 50, 70, # f0
]
win1251_CharToOrderMap = [
255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40
155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50
253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60
67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70
191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,
207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,
223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,
239,240,241,242,243,244,245,246, 68,247,248,249,250,251,252,253,
37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35,
45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43,
3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15,
9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16,
]
latin5_CharToOrderMap = [
255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40
155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50
253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60
67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70
191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,
207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,
223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,
37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35,
45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43,
3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15,
9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16,
239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255,
]
macCyrillic_CharToOrderMap = [
255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40
155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50
253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60
67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70
37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35,
45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43,
191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,
207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,
223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,
239,240,241,242,243,244,245,246,247,248,249,250,251,252, 68, 16,
3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15,
9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27,255,
]
IBM855_CharToOrderMap = [
255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40
155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50
253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60
67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70
191,192,193,194, 68,195,196,197,198,199,200,201,202,203,204,205,
206,207,208,209,210,211,212,213,214,215,216,217, 27, 59, 54, 70,
3, 37, 21, 44, 28, 58, 13, 41, 2, 48, 39, 53, 19, 46,218,219,
220,221,222,223,224, 26, 55, 4, 42,225,226,227,228, 23, 60,229,
230,231,232,233,234,235, 11, 36,236,237,238,239,240,241,242,243,
8, 49, 12, 38, 5, 31, 1, 34, 15,244,245,246,247, 35, 16,248,
43, 9, 45, 7, 32, 6, 40, 14, 52, 24, 56, 10, 33, 17, 61,249,
250, 18, 62, 20, 51, 25, 57, 30, 47, 29, 63, 22, 50,251,252,255,
]
IBM866_CharToOrderMap = [
255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40
155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50
253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60
67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70
37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35,
45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43,
3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15,
191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,
207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,
223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,
9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16,
239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255,
]
# Model Table:
# total sequences: 100%
# first 512 sequences: 97.6601%
# first 1024 sequences: 2.3389%
# rest sequences: 0.1237%
# negative sequences: 0.0009%
RussianLangModel = [
0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,3,3,3,3,1,3,3,3,2,3,2,3,3,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,2,2,2,2,2,0,0,2,
3,3,3,2,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,2,3,2,0,
0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,3,3,2,2,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,2,3,3,1,0,
0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1,
0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1,
0,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,3,3,3,3,3,3,3,2,2,2,3,1,3,3,1,3,3,3,3,2,2,3,0,2,2,2,3,3,2,1,0,
0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
3,3,3,3,3,3,2,3,3,3,3,3,2,2,3,2,3,3,3,2,1,2,2,0,1,2,2,2,2,2,2,0,
0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,0,2,2,3,3,2,1,2,0,
0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,
3,3,3,3,3,3,2,3,3,1,2,3,2,2,3,2,3,3,3,3,2,2,3,0,3,2,2,3,1,1,1,0,
0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,3,3,3,3,2,2,2,0,3,3,3,2,2,2,2,0,
0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,2,3,2,2,0,1,3,2,1,2,2,1,0,
0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,
3,3,3,3,3,3,3,3,3,3,3,2,1,1,3,0,1,1,1,1,2,1,1,0,2,2,2,1,2,0,1,0,
0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,3,3,3,3,3,2,3,3,2,2,2,2,1,3,2,3,2,3,2,1,2,2,0,1,1,2,1,2,1,2,0,
0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,3,3,3,2,2,2,2,0,2,2,2,2,3,1,1,0,
0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,
3,2,3,2,2,3,3,3,3,3,3,3,3,3,1,3,2,0,0,3,3,3,3,2,3,3,3,3,2,3,2,0,
0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2,3,3,3,3,3,2,2,3,3,0,2,1,0,3,2,3,2,3,0,0,1,2,0,0,1,0,1,2,1,1,0,
0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,0,3,0,2,3,3,3,3,2,3,3,3,3,1,2,2,0,0,2,3,2,2,2,3,2,3,2,2,3,0,0,
0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,2,3,0,2,3,2,3,0,1,2,3,3,2,0,2,3,0,0,2,3,2,2,0,1,3,1,3,2,2,1,0,
0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,1,3,0,2,3,3,3,3,3,3,3,3,2,1,3,2,0,0,2,2,3,3,3,2,3,3,0,2,2,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,3,3,3,3,3,2,2,3,3,2,2,2,3,3,0,0,1,1,1,1,1,2,0,0,1,1,1,1,0,1,0,
0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,0,3,2,3,3,2,3,2,0,2,1,0,1,1,0,1,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,
3,3,3,3,3,3,2,3,3,3,2,2,2,2,3,1,3,2,3,1,1,2,1,0,2,2,2,2,1,3,1,0,
0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,
2,2,3,3,3,3,3,1,2,2,1,3,1,0,3,0,0,3,0,0,0,1,1,0,1,2,1,0,0,0,0,0,
0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,2,2,1,1,3,3,3,2,2,1,2,2,3,1,1,2,0,0,2,2,1,3,0,0,2,1,1,2,1,1,0,
0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,2,3,3,3,3,1,2,2,2,1,2,1,3,3,1,1,2,1,2,1,2,2,0,2,0,0,1,1,0,1,0,
0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2,3,3,3,3,3,2,1,3,2,2,3,2,0,3,2,0,3,0,1,0,1,1,0,0,1,1,1,1,0,1,0,
0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,3,2,3,3,3,2,2,2,3,3,1,2,1,2,1,0,1,0,1,1,0,1,0,0,2,1,1,1,0,1,0,
0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
3,1,1,2,1,2,3,3,2,2,1,2,2,3,0,2,1,0,0,2,2,3,2,1,2,2,2,2,2,3,1,0,
0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,3,3,3,3,1,1,0,1,1,2,2,1,1,3,0,0,1,3,1,1,1,0,0,0,1,0,1,1,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2,1,3,3,3,2,0,0,0,2,1,0,1,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2,0,1,0,0,2,3,2,2,2,1,2,2,2,1,2,1,0,0,1,1,1,0,2,0,1,1,1,0,0,1,1,
1,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,
2,3,3,3,3,0,0,0,0,1,0,0,0,0,3,0,1,2,1,0,0,0,0,0,0,0,1,1,0,0,1,1,
1,0,1,0,1,2,0,0,1,1,2,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0,
2,2,3,2,2,2,3,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,0,1,1,1,0,2,1,
1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,0,1,1,0,
3,3,3,2,2,2,2,3,2,2,1,1,2,2,2,2,1,1,3,1,2,1,2,0,0,1,1,0,1,0,2,1,
1,1,1,1,1,2,1,0,1,1,1,1,0,1,0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,1,1,0,
2,0,0,1,0,3,2,2,2,2,1,2,1,2,1,2,0,0,0,2,1,2,2,1,1,2,2,0,1,1,0,2,
1,1,1,1,1,0,1,1,1,2,1,1,1,2,1,0,1,2,1,1,1,1,0,1,1,1,0,0,1,0,0,1,
1,3,2,2,2,1,1,1,2,3,0,0,0,0,2,0,2,2,1,0,0,0,0,0,0,1,0,0,0,0,1,1,
1,0,1,1,0,1,0,1,1,0,1,1,0,2,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,
2,3,2,3,2,1,2,2,2,2,1,0,0,0,2,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,2,1,
1,1,2,1,0,2,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,
3,0,0,1,0,2,2,2,3,2,2,2,2,2,2,2,0,0,0,2,1,2,1,1,1,2,2,0,0,0,1,2,
1,1,1,1,1,0,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,
2,3,2,3,3,2,0,1,1,1,0,0,1,0,2,0,1,1,3,1,0,0,0,0,0,0,0,1,0,0,2,1,
1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,0,
2,3,3,3,3,1,2,2,2,2,0,1,1,0,2,1,1,1,2,1,0,1,1,0,0,1,0,1,0,0,2,0,
0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2,3,3,3,2,0,0,1,1,2,2,1,0,0,2,0,1,1,3,0,0,1,0,0,0,0,0,1,0,1,2,1,
1,1,2,0,1,1,1,0,1,0,1,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,0,
1,3,2,3,2,1,0,0,2,2,2,0,1,0,2,0,1,1,1,0,1,0,0,0,3,0,1,1,0,0,2,1,
1,1,1,0,1,1,0,0,0,0,1,1,0,1,0,0,2,1,1,0,1,0,0,0,1,0,1,0,0,1,1,0,
3,1,2,1,1,2,2,2,2,2,2,1,2,2,1,1,0,0,0,2,2,2,0,0,0,1,2,1,0,1,0,1,
2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,2,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1,
3,0,0,0,0,2,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,1,
1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,
1,3,3,2,2,0,0,0,2,2,0,0,0,1,2,0,1,1,2,0,0,0,0,0,0,0,0,1,0,0,2,1,
0,1,1,0,0,1,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,
2,3,2,3,2,0,0,0,0,1,1,0,0,0,2,0,2,0,2,0,0,0,0,0,1,0,0,1,0,0,1,1,
1,1,2,0,1,2,1,0,1,1,2,1,1,1,1,1,2,1,1,0,1,0,0,1,1,1,1,1,0,1,1,0,
1,3,2,2,2,1,0,0,2,2,1,0,1,2,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,
0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,
1,0,0,1,0,2,3,1,2,2,2,2,2,2,1,1,0,0,0,1,0,1,0,2,1,1,1,0,0,0,0,1,
1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,
2,0,2,0,0,1,0,3,2,1,2,1,2,2,0,1,0,0,0,2,1,0,0,2,1,1,1,1,0,2,0,2,
2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,0,1,
1,2,2,2,2,1,0,0,1,0,0,0,0,0,2,0,1,1,1,1,0,0,0,0,1,0,1,2,0,0,2,0,
1,0,1,1,1,2,1,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,0,
2,1,2,2,2,0,3,0,1,1,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,
1,2,2,3,2,2,0,0,1,1,2,0,1,2,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,
0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,
2,2,1,1,2,1,2,2,2,2,2,1,2,2,0,1,0,0,0,1,2,2,2,1,2,1,1,1,1,1,2,1,
1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,0,1,
1,2,2,2,2,0,1,0,2,2,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,
0,0,1,0,0,1,0,0,0,0,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,
0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,2,2,2,2,0,0,0,2,2,2,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,2,2,2,2,0,0,0,0,1,0,0,1,1,2,0,0,0,0,1,0,1,0,0,1,0,0,2,0,0,0,1,
0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,
1,2,2,2,1,1,2,0,2,1,1,1,1,0,2,2,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,
0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,
1,0,2,1,2,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,
0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,
1,0,0,0,0,2,0,1,2,1,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1,
0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,
2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,1,0,1,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,0,0,
0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
]
Koi8rModel = {
'charToOrderMap' => KOI8R_CharToOrderMap,
'precedenceMatrix' => RussianLangModel,
'mTypicalPositiveRatio' => 0.976601,
'keepEnglishLetter' => false,
'charsetName' => "KOI8-R"
}
Win1251CyrillicModel = {
'charToOrderMap' => win1251_CharToOrderMap,
'precedenceMatrix' => RussianLangModel,
'mTypicalPositiveRatio' => 0.976601,
'keepEnglishLetter' => false,
'charsetName' => "windows-1251"
}
Latin5CyrillicModel = {
'charToOrderMap' => latin5_CharToOrderMap,
'precedenceMatrix' => RussianLangModel,
'mTypicalPositiveRatio' => 0.976601,
'keepEnglishLetter' => false,
'charsetName' => "ISO-8859-5"
}
MacCyrillicModel = {
'charToOrderMap' => macCyrillic_CharToOrderMap,
'precedenceMatrix' => RussianLangModel,
'mTypicalPositiveRatio' => 0.976601,
'keepEnglishLetter' => false,
'charsetName' => "MacCyrillic"
}
Ibm866Model = {
'charToOrderMap' => IBM866_CharToOrderMap,
'precedenceMatrix' => RussianLangModel,
'mTypicalPositiveRatio' => 0.976601,
'keepEnglishLetter' => false,
'charsetName' => "IBM866"
}
Ibm855Model = {
'charToOrderMap' => IBM855_CharToOrderMap,
'precedenceMatrix' => RussianLangModel,
'mTypicalPositiveRatio' => 0.976601,
'keepEnglishLetter' => false,
'charsetName' => "IBM855"
}
end

View File

@@ -1,227 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is Mozilla Communicator client code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
module CharDet
# 255: Control characters that usually does not exist in any text
# 254: Carriage/Return
# 253: symbol (punctuation) that does not belong to word
# 252: 0 - 9
# Character Mapping Table:
Latin7_CharToOrderMap = [
255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, # 40
79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, # 50
253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, # 60
78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, # 70
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 80
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 90
253,233, 90,253,253,253,253,253,253,253,253,253,253, 74,253,253, # a0
253,253,253,253,247,248, 61, 36, 46, 71, 73,253, 54,253,108,123, # b0
110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, # c0
35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, # d0
124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, # e0
9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253, # f0
]
Win1253_CharToOrderMap = [
255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, # 40
79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, # 50
253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, # 60
78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, # 70
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 80
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 90
253,233, 61,253,253,253,253,253,253,253,253,253,253, 74,253,253, # a0
253,253,253,253,247,253,253, 36, 46, 71, 73,253, 54,253,108,123, # b0
110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, # c0
35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, # d0
124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, # e0
9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253, # f0
]
# Model Table:
# total sequences: 100%
# first 512 sequences: 98.2851%
# first 1024 sequences:1.7001%
# rest sequences: 0.0359%
# negative sequences: 0.0148%
GreekLangModel = [
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,3,2,2,3,3,3,3,3,3,3,3,1,3,3,3,0,2,2,3,3,0,3,0,3,2,0,3,3,3,0,
3,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,3,3,3,3,3,0,3,3,0,3,2,3,3,0,3,2,3,3,3,0,0,3,0,3,0,3,3,2,0,0,0,
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,
0,2,3,2,2,3,3,3,3,3,3,3,3,0,3,3,3,3,0,2,3,3,0,3,3,3,3,2,3,3,3,0,
2,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,2,1,3,3,3,3,2,3,3,2,3,3,2,0,
0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,2,3,3,0,
2,0,1,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
0,3,3,3,3,3,2,3,0,0,0,0,3,3,0,3,1,3,3,3,0,3,3,0,3,3,3,3,0,0,0,0,
2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,3,3,3,3,3,0,3,0,3,3,3,3,3,0,3,2,2,2,3,0,2,3,3,3,3,3,2,3,3,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,3,3,3,3,3,3,2,2,2,3,3,3,3,0,3,1,3,3,3,3,2,3,3,3,3,3,3,3,2,2,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,3,3,3,3,3,2,0,3,0,0,0,3,3,2,3,3,3,3,3,0,0,3,2,3,0,2,3,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,3,0,3,3,3,3,0,0,3,3,0,2,3,0,3,0,3,3,3,0,0,3,0,3,0,2,2,3,3,0,0,
0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,3,3,3,3,3,2,0,3,2,3,3,3,3,0,3,3,3,3,3,0,3,3,2,3,2,3,3,2,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,3,3,2,3,2,3,3,3,3,3,3,0,2,3,2,3,2,2,2,3,2,3,3,2,3,0,2,2,2,3,0,
2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,3,0,0,0,3,3,3,2,3,3,0,0,3,0,3,0,0,0,3,2,0,3,0,3,0,0,2,0,2,0,
0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,0,0,0,3,3,0,3,3,3,0,0,1,2,3,0,
3,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,3,3,3,3,3,2,0,0,3,2,2,3,3,0,3,3,3,3,3,2,1,3,0,3,2,3,3,2,1,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,3,3,0,2,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,3,0,3,2,3,0,0,3,3,3,0,
3,0,0,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,3,3,3,3,0,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,2,0,3,2,3,0,0,3,2,3,0,
2,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,3,1,2,2,3,3,3,3,3,3,0,2,3,0,3,0,0,0,3,3,0,3,0,2,0,0,2,3,1,0,
2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,3,0,3,3,3,3,0,3,0,3,3,2,3,0,3,3,3,3,3,3,0,3,3,3,0,2,3,0,0,3,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,3,0,3,3,3,0,0,3,0,0,0,3,3,0,3,0,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,3,0,0,0,3,3,3,3,3,3,0,0,3,0,2,0,0,0,3,3,0,3,0,3,0,0,2,0,2,0,
0,0,0,0,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,3,3,3,3,3,3,0,3,0,2,0,3,2,0,3,2,3,2,3,0,0,3,2,3,2,3,3,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,3,0,0,2,3,3,3,3,3,0,0,0,3,0,2,1,0,0,3,2,2,2,0,3,0,0,2,2,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,3,0,3,3,3,2,0,3,0,3,0,3,3,0,2,1,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,2,3,3,3,0,3,3,3,3,3,3,0,2,3,0,3,0,0,0,2,1,0,2,2,3,0,0,2,2,2,0,
0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,3,0,0,2,3,3,3,2,3,0,0,1,3,0,2,0,0,0,0,3,0,1,0,2,0,0,1,1,1,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,3,3,3,3,3,1,0,3,0,0,0,3,2,0,3,2,3,3,3,0,0,3,0,3,2,2,2,1,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,3,0,3,3,3,0,0,3,0,0,0,0,2,0,2,3,3,2,2,2,2,3,0,2,0,2,2,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,3,3,3,3,2,0,0,0,0,0,0,2,3,0,2,0,2,3,2,0,0,3,0,3,0,3,1,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,3,2,3,3,2,2,3,0,2,0,3,0,0,0,2,0,0,0,0,1,2,0,2,0,2,0,
0,2,0,2,0,2,2,0,0,1,0,2,2,2,0,2,2,2,0,2,2,2,0,0,2,0,0,1,0,0,0,0,
0,2,0,3,3,2,0,0,0,0,0,0,1,3,0,2,0,2,2,2,0,0,2,0,3,0,0,2,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,3,0,2,3,2,0,2,2,0,2,0,2,2,0,2,0,2,2,2,0,0,0,0,0,0,2,3,0,0,0,2,
0,1,2,0,0,0,0,2,2,0,0,0,2,1,0,2,2,0,0,0,0,0,0,1,0,2,0,0,0,0,0,0,
0,0,2,1,0,2,3,2,2,3,2,3,2,0,0,3,3,3,0,0,3,2,0,0,0,1,1,0,2,0,2,2,
0,2,0,2,0,2,2,0,0,2,0,2,2,2,0,2,2,2,2,0,0,2,0,0,0,2,0,1,0,0,0,0,
0,3,0,3,3,2,2,0,3,0,0,0,2,2,0,2,2,2,1,2,0,0,1,2,2,0,0,3,0,0,0,2,
0,1,2,0,0,0,1,2,0,0,0,0,0,0,0,2,2,0,1,0,0,2,0,0,0,2,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,2,3,3,2,2,0,0,0,2,0,2,3,3,0,2,0,0,0,0,0,0,2,2,2,0,2,2,0,2,0,2,
0,2,2,0,0,2,2,2,2,1,0,0,2,2,0,2,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,
0,2,0,3,2,3,0,0,0,3,0,0,2,2,0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,0,2,
0,0,2,2,0,0,2,2,2,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,2,0,0,3,2,0,2,2,2,2,2,0,0,0,2,0,0,0,0,2,0,1,0,0,2,0,1,0,0,0,
0,2,2,2,0,2,2,0,1,2,0,2,2,2,0,2,2,2,2,1,2,2,0,0,2,0,0,0,0,0,0,0,
0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
0,2,0,2,0,2,2,0,0,0,0,1,2,1,0,0,2,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,3,2,3,0,0,2,0,0,0,2,2,0,2,0,0,0,1,0,0,2,0,2,0,2,2,0,0,0,0,
0,0,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,
0,2,2,3,2,2,0,0,0,0,0,0,1,3,0,2,0,2,2,0,0,0,1,0,2,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,2,0,2,0,3,2,0,2,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
0,0,2,0,0,0,0,1,1,0,0,2,1,2,0,2,2,0,1,0,0,1,0,0,0,2,0,0,0,0,0,0,
0,3,0,2,2,2,0,0,2,0,0,0,2,0,0,0,2,3,0,2,0,0,0,0,0,0,2,2,0,0,0,2,
0,1,2,0,0,0,1,2,2,1,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,2,1,2,0,2,2,0,2,0,0,2,0,0,0,0,1,2,1,0,2,1,0,0,0,0,0,0,0,0,0,0,
0,0,2,0,0,0,3,1,2,2,0,2,0,0,0,0,2,0,0,0,2,0,0,3,0,0,0,0,2,2,2,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,2,1,0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,2,
0,2,2,0,0,2,2,2,2,2,0,1,2,0,0,0,2,2,0,1,0,2,0,0,2,2,0,0,0,0,0,0,
0,0,0,0,1,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,2,
0,1,2,0,0,0,0,2,2,1,0,1,0,1,0,2,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0,
0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,2,0,0,2,2,0,0,0,0,1,0,0,0,0,0,0,2,
0,2,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,
0,2,2,2,2,0,0,0,3,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,1,
0,0,2,0,0,0,0,1,2,0,0,0,0,0,0,2,2,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,
0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,2,2,2,0,0,0,2,0,0,0,0,0,0,0,0,2,
0,0,1,0,0,0,0,2,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,
0,3,0,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,2,
0,0,2,0,0,0,0,2,2,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,2,0,2,2,1,0,0,0,0,0,0,2,0,0,2,0,2,2,2,0,0,0,0,0,0,2,0,0,0,0,2,
0,0,2,0,0,2,0,2,2,0,0,0,0,2,0,2,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,
0,0,3,0,0,0,2,2,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0,
0,2,2,2,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,
0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
0,2,0,0,0,2,0,0,0,0,0,1,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,2,0,0,0,
0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,2,0,2,0,0,0,
0,0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
]
Latin7GreekModel = {
'charToOrderMap' => Latin7_CharToOrderMap,
'precedenceMatrix' => GreekLangModel,
'mTypicalPositiveRatio' => 0.982851,
'keepEnglishLetter' => false,
'charsetName' => "ISO-8859-7"
}
Win1253GreekModel = {
'charToOrderMap' => Win1253_CharToOrderMap,
'precedenceMatrix' => GreekLangModel,
'mTypicalPositiveRatio' => 0.982851,
'keepEnglishLetter' => false,
'charsetName' => "windows-1253"
}
end

View File

@@ -1,202 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is Mozilla Universal charset detector code.
#
# The Initial Developer of the Original Code is
# Simon Montagu
# Portions created by the Initial Developer are Copyright (C) 2005
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
# Shy Shalom - original C code
# Shoshannah Forbes - original C code (?)
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
module CharDet
# 255: Control characters that usually does not exist in any text
# 254: Carriage/Return
# 253: symbol (punctuation) that does not belong to word
# 252: 0 - 9
# Windows-1255 language model
# Character Mapping Table:
Win1255_CharToOrderMap = [
255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
253, 69, 91, 79, 80, 92, 89, 97, 90, 68,111,112, 82, 73, 95, 85, # 40
78,121, 86, 71, 67,102,107, 84,114,103,115,253,253,253,253,253, # 50
253, 50, 74, 60, 61, 42, 76, 70, 64, 53,105, 93, 56, 65, 54, 49, # 60
66,110, 51, 43, 44, 63, 81, 77, 98, 75,108,253,253,253,253,253, # 70
124,202,203,204,205, 40, 58,206,207,208,209,210,211,212,213,214,
215, 83, 52, 47, 46, 72, 32, 94,216,113,217,109,218,219,220,221,
34,116,222,118,100,223,224,117,119,104,125,225,226, 87, 99,227,
106,122,123,228, 55,229,230,101,231,232,120,233, 48, 39, 57,234,
30, 59, 41, 88, 33, 37, 36, 31, 29, 35,235, 62, 28,236,126,237,
238, 38, 45,239,240,241,242,243,127,244,245,246,247,248,249,250,
9, 8, 20, 16, 3, 2, 24, 14, 22, 1, 25, 15, 4, 11, 6, 23,
12, 19, 13, 26, 18, 27, 21, 17, 7, 10, 5,251,252,128, 96,253,
]
# Model Table:
# total sequences: 100%
# first 512 sequences: 98.4004%
# first 1024 sequences: 1.5981%
# rest sequences: 0.087%
# negative sequences: 0.0015%
HebrewLangModel = [
0,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,3,2,1,2,0,1,0,0,
3,0,3,1,0,0,1,3,2,0,1,1,2,0,2,2,2,1,1,1,1,2,1,1,1,2,0,0,2,2,0,1,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,
1,2,1,2,1,2,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,
1,2,1,3,1,1,0,0,2,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,1,2,2,1,3,
1,2,1,1,2,2,0,0,2,2,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,3,2,
1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,2,2,3,2,2,2,1,2,2,2,2,
1,2,1,1,2,2,0,1,2,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,0,2,2,2,2,2,
0,2,0,2,2,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,0,2,2,2,
0,2,1,2,2,2,0,0,2,1,0,0,0,0,1,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,
3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,1,2,3,2,2,2,
1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,
3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,2,0,2,
0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,2,0,0,1,0,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,2,2,3,2,1,2,1,1,1,
0,1,1,1,1,1,3,0,1,0,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,0,
0,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,
0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
3,3,3,3,3,3,3,3,3,2,3,3,3,2,1,2,3,3,2,3,3,3,3,2,3,2,1,2,0,2,1,2,
0,2,0,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,
3,3,3,3,3,3,3,3,3,2,3,3,3,1,2,2,3,3,2,3,2,3,2,2,3,1,2,2,0,2,2,2,
0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,
3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,2,3,3,3,3,1,3,2,2,2,
0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,2,3,2,2,2,1,2,2,0,2,2,2,2,
0,2,0,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,1,3,2,3,3,2,3,3,2,2,1,2,2,2,2,2,2,
0,2,1,2,1,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,
3,3,3,3,3,3,2,3,2,3,3,2,3,3,3,3,2,3,2,3,3,3,3,3,2,2,2,2,2,2,2,1,
0,2,0,1,2,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,
3,3,3,3,3,3,3,3,3,2,1,2,3,3,3,3,3,3,3,2,3,2,3,2,1,2,3,0,2,1,2,2,
0,2,1,1,2,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2,0,
3,3,3,3,3,3,3,3,3,2,3,3,3,3,2,1,3,1,2,2,2,1,2,3,3,1,2,1,2,2,2,2,
0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,
3,3,3,3,3,3,3,3,3,3,0,2,3,3,3,1,3,3,3,1,2,2,2,2,1,1,2,2,2,2,2,2,
0,2,0,1,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,
3,3,3,3,3,3,2,3,3,3,2,2,3,3,3,2,1,2,3,2,3,2,2,2,2,1,2,1,1,1,2,2,
0,2,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,
1,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,3,3,3,3,2,3,3,2,3,1,2,2,2,2,3,2,3,1,1,2,2,1,2,2,1,1,0,2,2,2,2,
0,1,0,1,2,2,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,
3,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,0,
0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,0,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,
0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
3,2,2,1,2,2,2,2,2,2,2,1,2,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,0,3,3,3,
0,3,0,2,2,2,2,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,1,1,1,2,0,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,0,0,0,0,0,
0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2,3,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,0,2,1,0,
0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
0,3,1,1,2,2,2,2,2,1,2,2,2,1,1,2,2,2,2,2,2,2,1,2,2,1,0,1,1,1,1,0,
0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,2,1,1,1,1,2,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,
0,0,2,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,0,0,
2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,2,1,2,1,1,1,1,0,0,0,0,
0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,2,1,2,2,2,2,2,2,2,2,2,2,1,2,1,2,1,1,2,1,1,1,2,1,2,1,2,0,1,0,1,
0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,3,1,2,2,2,1,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,2,1,2,1,1,0,1,0,1,
0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2,1,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,
0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,2,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,0,
0,1,1,1,2,1,2,2,2,0,2,0,2,0,1,1,2,1,1,1,1,2,1,0,1,1,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,0,1,0,0,0,0,0,1,0,1,2,2,0,1,0,0,1,1,2,2,1,2,0,2,0,0,0,1,2,0,1,
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,2,0,2,1,2,0,2,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1,
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,1,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,1,2,2,0,0,1,0,0,0,1,0,0,1,
1,1,2,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,2,1,
0,2,0,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1,
2,0,1,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,2,1,1,2,0,1,0,0,0,1,1,0,1,
1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,0,0,2,1,1,2,0,2,0,0,0,1,1,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,2,2,1,2,1,1,0,1,0,0,0,1,1,0,1,
2,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,1,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,2,1,1,1,0,2,1,1,0,0,0,2,1,0,1,
1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,0,2,1,1,0,1,0,0,0,1,1,0,1,
2,2,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,0,1,2,1,0,2,0,0,0,1,1,0,1,
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,
0,1,0,0,2,0,2,1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,1,0,0,1,
1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,2,1,1,1,1,1,0,1,0,0,0,0,1,0,1,
0,1,1,1,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,1,2,1,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,0,
]
Win1255HebrewModel = {
'charToOrderMap' => Win1255_CharToOrderMap,
'precedenceMatrix' => HebrewLangModel,
'mTypicalPositiveRatio' => 0.984004,
'keepEnglishLetter' => false,
'charsetName' => "windows-1255"
}
end

View File

@@ -1,226 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is Mozilla Communicator client code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
module CharDet
# 255: Control characters that usually does not exist in any text
# 254: Carriage/Return
# 253: symbol (punctuation) that does not belong to word
# 252: 0 - 9
# Character Mapping Table:
Latin2_HungarianCharToOrderMap = [
255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
253, 28, 40, 54, 45, 32, 50, 49, 38, 39, 53, 36, 41, 34, 35, 47,
46, 71, 43, 33, 37, 57, 48, 64, 68, 55, 52,253,253,253,253,253,
253, 2, 18, 26, 17, 1, 27, 12, 20, 9, 22, 7, 6, 13, 4, 8,
23, 67, 10, 5, 3, 21, 19, 65, 62, 16, 11,253,253,253,253,253,
159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,
175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,
191,192,193,194,195,196,197, 75,198,199,200,201,202,203,204,205,
79,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,
221, 51, 81,222, 78,223,224,225,226, 44,227,228,229, 61,230,231,
232,233,234, 58,235, 66, 59,236,237,238, 60, 69, 63,239,240,241,
82, 14, 74,242, 70, 80,243, 72,244, 15, 83, 77, 84, 30, 76, 85,
245,246,247, 25, 73, 42, 24,248,249,250, 31, 56, 29,251,252,253,
]
Win1250HungarianCharToOrderMap = [
255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
253, 28, 40, 54, 45, 32, 50, 49, 38, 39, 53, 36, 41, 34, 35, 47,
46, 72, 43, 33, 37, 57, 48, 64, 68, 55, 52,253,253,253,253,253,
253, 2, 18, 26, 17, 1, 27, 12, 20, 9, 22, 7, 6, 13, 4, 8,
23, 67, 10, 5, 3, 21, 19, 65, 62, 16, 11,253,253,253,253,253,
161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,
177,178,179,180, 78,181, 69,182,183,184,185,186,187,188,189,190,
191,192,193,194,195,196,197, 76,198,199,200,201,202,203,204,205,
81,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,
221, 51, 83,222, 80,223,224,225,226, 44,227,228,229, 61,230,231,
232,233,234, 58,235, 66, 59,236,237,238, 60, 70, 63,239,240,241,
84, 14, 75,242, 71, 82,243, 73,244, 15, 85, 79, 86, 30, 77, 87,
245,246,247, 25, 74, 42, 24,248,249,250, 31, 56, 29,251,252,253,
]
# Model Table:
# total sequences: 100%
# first 512 sequences: 94.7368%
# first 1024 sequences:5.2623%
# rest sequences: 0.8894%
# negative sequences: 0.0009%
HungarianLangModel = [
0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,2,3,3,1,1,2,2,2,2,2,1,2,
3,2,2,3,3,3,3,3,2,3,3,3,3,3,3,1,2,3,3,3,3,2,3,3,1,1,3,3,0,1,1,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,
3,2,1,3,3,3,3,3,2,3,3,3,3,3,1,1,2,3,3,3,3,3,3,3,1,1,3,2,0,1,1,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
3,3,3,3,3,3,3,3,3,3,3,1,1,2,3,3,3,1,3,3,3,3,3,1,3,3,2,2,0,3,2,3,
0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,
3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,3,3,2,3,3,2,2,3,2,3,2,0,3,2,2,
0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,
3,3,3,3,3,3,2,3,3,3,3,3,2,3,3,3,1,2,3,2,2,3,1,2,3,3,2,2,0,3,3,3,
0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,2,3,3,3,3,2,3,3,3,3,0,2,3,2,
0,0,0,1,1,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
3,3,3,3,3,3,3,3,3,3,3,1,1,1,3,3,2,1,3,2,2,3,2,1,3,2,2,1,0,3,3,1,
0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
3,2,2,3,3,3,3,3,1,2,3,3,3,3,1,2,1,3,3,3,3,2,2,3,1,1,3,2,0,1,1,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,1,3,3,3,3,3,2,2,1,3,3,3,0,1,1,2,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,2,0,3,2,3,
0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,1,0,
3,3,3,3,3,3,2,3,3,3,2,3,2,3,3,3,1,3,2,2,2,3,1,1,3,3,1,1,0,3,3,2,
0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
3,3,3,3,3,3,3,2,3,3,3,2,3,2,3,3,3,2,3,3,3,3,3,1,2,3,2,2,0,2,2,2,
0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
3,3,3,2,2,2,3,1,3,3,2,2,1,3,3,3,1,1,3,1,2,3,2,3,2,2,2,1,0,2,2,2,
0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,
3,1,1,3,3,3,3,3,1,2,3,3,3,3,1,2,1,3,3,3,2,2,3,2,1,0,3,2,0,1,1,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,1,1,3,3,3,3,3,1,2,3,3,3,3,1,1,0,3,3,3,3,0,2,3,0,0,2,1,0,1,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,3,3,3,3,3,2,2,3,3,2,2,2,2,3,3,0,1,2,3,2,3,2,2,3,2,1,2,0,2,2,2,
0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,
3,3,3,3,3,3,1,2,3,3,3,2,1,2,3,3,2,2,2,3,2,3,3,1,3,3,1,1,0,2,3,2,
0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
3,3,3,1,2,2,2,2,3,3,3,1,1,1,3,3,1,1,3,1,1,3,2,1,2,3,1,1,0,2,2,2,
0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
3,3,3,2,1,2,1,1,3,3,1,1,1,1,3,3,1,1,2,2,1,2,1,1,2,2,1,1,0,2,2,1,
0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
3,3,3,1,1,2,1,1,3,3,1,0,1,1,3,3,2,0,1,1,2,3,1,0,2,2,1,0,0,1,3,2,
0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
3,2,1,3,3,3,3,3,1,2,3,2,3,3,2,1,1,3,2,3,2,1,2,2,0,1,2,1,0,0,1,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
3,3,3,3,2,2,2,2,3,1,2,2,1,1,3,3,0,3,2,1,2,3,2,1,3,3,1,1,0,2,1,3,
0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
3,3,3,2,2,2,3,2,3,3,3,2,1,1,3,3,1,1,1,2,2,3,2,3,2,2,2,1,0,2,2,1,
0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
1,0,0,3,3,3,3,3,0,0,3,3,2,3,0,0,0,2,3,3,1,0,1,2,0,0,1,1,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,1,2,3,3,3,3,3,1,2,3,3,2,2,1,1,0,3,3,2,2,1,2,2,1,0,2,2,0,1,1,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,3,2,2,1,3,1,2,3,3,2,2,1,1,2,2,1,1,1,1,3,2,1,1,1,1,2,1,0,1,2,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
2,3,3,1,1,1,1,1,3,3,3,0,1,1,3,3,1,1,1,1,1,2,2,0,3,1,1,2,0,2,1,1,
0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
3,1,0,1,2,1,2,2,0,1,2,3,1,2,0,0,0,2,1,1,1,1,1,2,0,0,1,1,0,0,0,0,
1,2,1,2,2,2,1,2,1,2,0,2,0,2,2,1,1,2,1,1,2,1,1,1,0,1,0,0,0,1,1,0,
1,1,1,2,3,2,3,3,0,1,2,2,3,1,0,1,0,2,1,2,2,0,1,1,0,0,1,1,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,0,0,3,3,2,2,1,0,0,3,2,3,2,0,0,0,1,1,3,0,0,1,1,0,0,2,1,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,1,1,2,2,3,3,1,0,1,3,2,3,1,1,1,0,1,1,1,1,1,3,1,0,0,2,2,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,1,1,1,2,2,2,1,0,1,2,3,3,2,0,0,0,2,1,1,1,2,1,1,1,0,1,1,1,0,0,0,
1,2,2,2,2,2,1,1,1,2,0,2,1,1,1,1,1,2,1,1,1,1,1,1,0,1,1,1,0,0,1,1,
3,2,2,1,0,0,1,1,2,2,0,3,0,1,2,1,1,0,0,1,1,1,0,1,1,1,1,0,2,1,1,1,
2,2,1,1,1,2,1,2,1,1,1,1,1,1,1,2,1,1,1,2,3,1,1,1,1,1,1,1,1,1,0,1,
2,3,3,0,1,0,0,0,3,3,1,0,0,1,2,2,1,0,0,0,0,2,0,0,1,1,1,0,2,1,1,1,
2,1,1,1,1,1,1,2,1,1,0,1,1,0,1,1,1,0,1,2,1,1,0,1,1,1,1,1,1,1,0,1,
2,3,3,0,1,0,0,0,2,2,0,0,0,0,1,2,2,0,0,0,0,1,0,0,1,1,0,0,2,0,1,0,
2,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,0,1,
3,2,2,0,1,0,1,0,2,3,2,0,0,1,2,2,1,0,0,1,1,1,0,0,2,1,0,1,2,2,1,1,
2,1,1,1,1,1,1,2,1,1,1,1,1,1,0,2,1,0,1,1,0,1,1,1,0,1,1,2,1,1,0,1,
2,2,2,0,0,1,0,0,2,2,1,1,0,0,2,1,1,0,0,0,1,2,0,0,2,1,0,0,2,1,1,1,
2,1,1,1,1,2,1,2,1,1,1,2,2,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1,
1,2,3,0,0,0,1,0,3,2,1,0,0,1,2,1,1,0,0,0,0,2,1,0,1,1,0,0,2,1,2,1,
1,1,0,0,0,1,0,1,1,1,1,1,2,0,0,1,0,0,0,2,0,0,1,1,1,1,1,1,1,1,0,1,
3,0,0,2,1,2,2,1,0,0,2,1,2,2,0,0,0,2,1,1,1,0,1,1,0,0,1,1,2,0,0,0,
1,2,1,2,2,1,1,2,1,2,0,1,1,1,1,1,1,1,1,1,2,1,1,0,0,1,1,1,1,0,0,1,
1,3,2,0,0,0,1,0,2,2,2,0,0,0,2,2,1,0,0,0,0,3,1,1,1,1,0,0,2,1,1,1,
2,1,0,1,1,1,0,1,1,1,1,1,1,1,0,2,1,0,0,1,0,1,1,0,1,1,1,1,1,1,0,1,
2,3,2,0,0,0,1,0,2,2,0,0,0,0,2,1,1,0,0,0,0,2,1,0,1,1,0,0,2,1,1,0,
2,1,1,1,1,2,1,2,1,2,0,1,1,1,0,2,1,1,1,2,1,1,1,1,0,1,1,1,1,1,0,1,
3,1,1,2,2,2,3,2,1,1,2,2,1,1,0,1,0,2,2,1,1,1,1,1,0,0,1,1,0,1,1,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2,2,2,0,0,0,0,0,2,2,0,0,0,0,2,2,1,0,0,0,1,1,0,0,1,2,0,0,2,1,1,1,
2,2,1,1,1,2,1,2,1,1,0,1,1,1,1,2,1,1,1,2,1,1,1,1,0,1,2,1,1,1,0,1,
1,0,0,1,2,3,2,1,0,0,2,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0,
1,2,1,2,1,2,1,1,1,2,0,2,1,1,1,0,1,2,0,0,1,1,1,0,0,0,0,0,0,0,0,0,
2,3,2,0,0,0,0,0,1,1,2,1,0,0,1,1,1,0,0,0,0,2,0,0,1,1,0,0,2,1,1,1,
2,1,1,1,1,1,1,2,1,0,1,1,1,1,0,2,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,
1,2,2,0,1,1,1,0,2,2,2,0,0,0,3,2,1,0,0,0,1,1,0,0,1,1,0,1,1,1,0,0,
1,1,0,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,0,0,1,1,1,0,1,0,1,
2,1,0,2,1,1,2,2,1,1,2,1,1,1,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,
1,2,2,2,2,2,1,1,1,2,0,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,1,0,
1,2,3,0,0,0,1,0,2,2,0,0,0,0,2,2,0,0,0,0,0,1,0,0,1,0,0,0,2,0,1,0,
2,1,1,1,1,1,0,2,0,0,0,1,2,1,1,1,1,0,1,2,0,1,0,1,0,1,1,1,0,1,0,1,
2,2,2,0,0,0,1,0,2,1,2,0,0,0,1,1,2,0,0,0,0,1,0,0,1,1,0,0,2,1,0,1,
2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,0,1,
1,2,2,0,0,0,1,0,2,2,2,0,0,0,1,1,0,0,0,0,0,1,1,0,2,0,0,1,1,1,0,1,
1,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,0,0,0,1,
1,0,0,1,0,1,2,1,0,0,1,1,1,2,0,0,0,1,1,0,1,0,1,1,0,0,1,0,0,0,0,0,
0,2,1,2,1,1,1,1,1,2,0,2,0,1,1,0,1,2,1,0,1,1,1,0,0,0,0,0,0,1,0,0,
2,1,1,0,1,2,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,2,1,0,1,
2,2,1,1,1,1,1,2,1,1,0,1,1,1,1,2,1,1,1,2,1,1,0,1,0,1,1,1,1,1,0,1,
1,2,2,0,0,0,0,0,1,1,0,0,0,0,2,1,0,0,0,0,0,2,0,0,2,2,0,0,2,0,0,1,
2,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,
1,1,2,0,0,3,1,0,2,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0,
1,2,1,0,1,1,1,2,1,1,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,0,1,0,0,
2,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,2,0,0,0,
2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,1,1,0,0,1,1,1,1,1,0,1,
2,1,1,1,2,1,1,1,0,1,1,2,1,0,0,0,0,1,1,1,1,0,1,0,0,0,0,1,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,1,0,1,1,1,1,1,0,0,1,1,2,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,1,0,0,0,
1,2,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,
2,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,2,0,0,1,0,0,1,0,1,0,0,0,
0,1,1,1,1,1,1,1,1,2,0,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,
1,0,0,1,1,1,1,1,0,0,2,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,
0,1,1,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,
1,0,0,1,1,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,
0,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,
0,0,0,1,0,0,0,0,0,0,1,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,
2,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,
0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,
]
Latin2HungarianModel = {
'charToOrderMap' => Latin2_HungarianCharToOrderMap,
'precedenceMatrix' => HungarianLangModel,
'mTypicalPositiveRatio' => 0.947368,
'keepEnglishLetter' => true,
'charsetName' => "ISO-8859-2"
}
Win1250HungarianModel = {
'charToOrderMap' => Win1250HungarianCharToOrderMap,
'precedenceMatrix' => HungarianLangModel,
'mTypicalPositiveRatio' => 0.947368,
'keepEnglishLetter' => true,
'charsetName' => "windows-1250"
}
end

View File

@@ -1,201 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is Mozilla Communicator client code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
module CharDet
# 255: Control characters that usually does not exist in any text
# 254: Carriage/Return
# 253: symbol (punctuation) that does not belong to word
# 252: 0 - 9
# The following result for thai was collected from a limited sample (1M).
# Character Mapping Table:
TIS620CharToOrderMap = [
255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
253,182,106,107,100,183,184,185,101, 94,186,187,108,109,110,111, # 40
188,189,190, 89, 95,112,113,191,192,193,194,253,253,253,253,253, # 50
253, 64, 72, 73,114, 74,115,116,102, 81,201,117, 90,103, 78, 82, # 60
96,202, 91, 79, 84,104,105, 97, 98, 92,203,253,253,253,253,253, # 70
209,210,211,212,213, 88,214,215,216,217,218,219,220,118,221,222,
223,224, 99, 85, 83,225,226,227,228,229,230,231,232,233,234,235,
236, 5, 30,237, 24,238, 75, 8, 26, 52, 34, 51,119, 47, 58, 57,
49, 53, 55, 43, 20, 19, 44, 14, 48, 3, 17, 25, 39, 62, 31, 54,
45, 9, 16, 2, 61, 15,239, 12, 42, 46, 18, 21, 76, 4, 66, 63,
22, 10, 1, 36, 23, 13, 40, 27, 32, 35, 86,240,241,242,243,244,
11, 28, 41, 29, 33,245, 50, 37, 6, 7, 67, 77, 38, 93,246,247,
68, 56, 59, 65, 69, 60, 70, 80, 71, 87,248,249,250,251,252,253,
]
# Model Table:
# total sequences: 100%
# first 512 sequences: 92.6386%
# first 1024 sequences:7.3177%
# rest sequences: 1.0230%
# negative sequences: 0.0436%
ThaiLangModel = [
0,1,3,3,3,3,0,0,3,3,0,3,3,0,3,3,3,3,3,3,3,3,0,0,3,3,3,0,3,3,3,3,
0,3,3,0,0,0,1,3,0,3,3,2,3,3,0,1,2,3,3,3,3,0,2,0,2,0,0,3,2,1,2,2,
3,0,3,3,2,3,0,0,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,0,3,2,3,0,2,2,2,3,
0,2,3,0,0,0,0,1,0,1,2,3,1,1,3,2,2,0,1,1,0,0,1,0,0,0,0,0,0,0,1,1,
3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,2,3,2,3,3,2,2,2,
3,1,2,3,0,3,3,2,2,1,2,3,3,1,2,0,1,3,0,1,0,0,1,0,0,0,0,0,0,0,1,1,
3,3,2,2,3,3,3,3,1,2,3,3,3,3,3,2,2,2,2,3,3,2,2,3,3,2,2,3,2,3,2,2,
3,3,1,2,3,1,2,2,3,3,1,0,2,1,0,0,3,1,2,1,0,0,1,0,0,0,0,0,0,1,0,1,
3,3,3,3,3,3,2,2,3,3,3,3,2,3,2,2,3,3,2,2,3,2,2,2,2,1,1,3,1,2,1,1,
3,2,1,0,2,1,0,1,0,1,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,
3,3,3,2,3,2,3,3,2,2,3,2,3,3,2,3,1,1,2,3,2,2,2,3,2,2,2,2,2,1,2,1,
2,2,1,1,3,3,2,1,0,1,2,2,0,1,3,0,0,0,1,1,0,0,0,0,0,2,3,0,0,2,1,1,
3,3,2,3,3,2,0,0,3,3,0,3,3,0,2,2,3,1,2,2,1,1,1,0,2,2,2,0,2,2,1,1,
0,2,1,0,2,0,0,2,0,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,
3,3,2,3,3,2,0,0,3,3,0,2,3,0,2,1,2,2,2,2,1,2,0,0,2,2,2,0,2,2,1,1,
0,2,1,0,2,0,0,2,0,1,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,
3,3,2,3,2,3,2,0,2,2,1,3,2,1,3,2,1,2,3,2,2,3,0,2,3,2,2,1,2,2,2,2,
1,2,2,0,0,0,0,2,0,1,2,0,1,1,1,0,1,0,3,1,1,0,0,0,0,0,0,0,0,0,1,0,
3,3,2,3,3,2,3,2,2,2,3,2,2,3,2,2,1,2,3,2,2,3,1,3,2,2,2,3,2,2,2,3,
3,2,1,3,0,1,1,1,0,2,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,2,0,0,
1,0,0,3,0,3,3,3,3,3,0,0,3,0,2,2,3,3,3,3,3,0,0,0,1,1,3,0,0,0,0,2,
0,0,1,0,0,0,0,0,0,0,2,3,0,0,0,3,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,
2,0,3,3,3,3,0,0,2,3,0,0,3,0,3,3,2,3,3,3,3,3,0,0,3,3,3,0,0,0,3,3,
0,0,3,0,0,0,0,2,0,0,2,1,1,3,0,0,1,0,0,2,3,0,1,0,0,0,0,0,0,0,1,0,
3,3,3,3,2,3,3,3,3,3,3,3,1,2,1,3,3,2,2,1,2,2,2,3,1,1,2,0,2,1,2,1,
2,2,1,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,
3,0,2,1,2,3,3,3,0,2,0,2,2,0,2,1,3,2,2,1,2,1,0,0,2,2,1,0,2,1,2,2,
0,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,3,3,3,2,1,3,3,1,1,3,0,2,3,1,1,3,2,1,1,2,0,2,2,3,2,1,1,1,1,1,2,
3,0,0,1,3,1,2,1,2,0,3,0,0,0,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
3,3,1,1,3,2,3,3,3,1,3,2,1,3,2,1,3,2,2,2,2,1,3,3,1,2,1,3,1,2,3,0,
2,1,1,3,2,2,2,1,2,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,
3,3,2,3,2,3,3,2,3,2,3,2,3,3,2,1,0,3,2,2,2,1,2,2,2,1,2,2,1,2,1,1,
2,2,2,3,0,1,3,1,1,1,1,0,1,1,0,2,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,3,3,3,2,3,2,2,1,1,3,2,3,2,3,2,0,3,2,2,1,2,0,2,2,2,1,2,2,2,2,1,
3,2,1,2,2,1,0,2,0,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,1,
3,3,3,3,3,2,3,1,2,3,3,2,2,3,0,1,1,2,0,3,3,2,2,3,0,1,1,3,0,0,0,0,
3,1,0,3,3,0,2,0,2,1,0,0,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,3,3,2,3,2,3,3,0,1,3,1,1,2,1,2,1,1,3,1,1,0,2,3,1,1,1,1,1,1,1,1,
3,1,1,2,2,2,2,1,1,1,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
3,2,2,1,1,2,1,3,3,2,3,2,2,3,2,2,3,1,2,2,1,2,0,3,2,1,2,2,2,2,2,1,
3,2,1,2,2,2,1,1,1,1,0,0,1,1,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,3,3,3,3,3,3,3,1,3,3,0,2,1,0,3,2,0,0,3,1,0,1,1,0,1,0,0,0,0,0,1,
1,0,0,1,0,3,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,0,2,2,2,3,0,0,1,3,0,3,2,0,3,2,2,3,3,3,3,3,1,0,2,2,2,0,2,2,1,2,
0,2,3,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
3,0,2,3,1,3,3,2,3,3,0,3,3,0,3,2,2,3,2,3,3,3,0,0,2,2,3,0,1,1,1,3,
0,0,3,0,0,0,2,2,0,1,3,0,1,2,2,2,3,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,
3,2,3,3,2,0,3,3,2,2,3,1,3,2,1,3,2,0,1,2,2,0,2,3,2,1,0,3,0,0,0,0,
3,0,0,2,3,1,3,0,0,3,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,1,3,2,2,2,1,2,0,1,3,1,1,3,1,3,0,0,2,1,1,1,1,2,1,1,1,0,2,1,0,1,
1,2,0,0,0,3,1,1,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,3,1,0,0,0,1,0,
3,3,3,3,2,2,2,2,2,1,3,1,1,1,2,0,1,1,2,1,2,1,3,2,0,0,3,1,1,1,1,1,
3,1,0,2,3,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,2,3,0,3,3,0,2,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0,
0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,2,3,1,3,0,0,1,2,0,0,2,0,3,3,2,3,3,3,2,3,0,0,2,2,2,0,0,0,2,2,
0,0,1,0,0,0,0,3,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,
0,0,0,3,0,2,0,0,0,0,0,0,0,0,0,0,1,2,3,1,3,3,0,0,1,0,3,0,0,0,0,0,
0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,3,1,2,3,1,2,3,1,0,3,0,2,2,1,0,2,1,1,2,0,1,0,0,1,1,1,1,0,1,0,0,
1,0,0,0,0,1,1,0,3,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,3,3,3,2,1,0,1,1,1,3,1,2,2,2,2,2,2,1,1,1,1,0,3,1,0,1,3,1,1,1,1,
1,1,0,2,0,1,3,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,1,
3,0,2,2,1,3,3,2,3,3,0,1,1,0,2,2,1,2,1,3,3,1,0,0,3,2,0,0,0,0,2,1,
0,1,0,0,0,0,1,2,0,1,1,3,1,1,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
0,0,3,0,0,1,0,0,0,3,0,0,3,0,3,1,0,1,1,1,3,2,0,0,0,3,0,0,0,0,2,0,
0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,
3,3,1,3,2,1,3,3,1,2,2,0,1,2,1,0,1,2,0,0,0,0,0,3,0,0,0,3,0,0,0,0,
3,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,0,1,2,0,3,3,3,2,2,0,1,1,0,1,3,0,0,0,2,2,0,0,0,0,3,1,0,1,0,0,0,
0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,0,2,3,1,2,0,0,2,1,0,3,1,0,1,2,0,1,1,1,1,3,0,0,3,1,1,0,2,2,1,1,
0,2,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,0,0,3,1,2,0,0,2,2,0,1,2,0,1,0,1,3,1,2,1,0,0,0,2,0,3,0,0,0,1,0,
0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,0,1,1,2,2,0,0,0,2,0,2,1,0,1,1,0,1,1,1,2,1,0,0,1,1,1,0,2,1,1,1,
0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,
0,0,0,2,0,1,3,1,1,1,1,0,0,0,0,3,2,0,1,0,0,0,1,2,0,0,0,1,0,0,0,0,
0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,0,2,3,2,2,0,0,0,1,0,0,0,0,2,3,2,1,2,2,3,0,0,0,2,3,1,0,0,0,1,1,
0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,
3,3,2,2,0,1,0,0,0,0,2,0,2,0,1,0,0,0,1,1,0,0,0,2,1,0,1,0,1,1,0,0,
0,1,0,2,0,0,1,0,3,0,1,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,3,1,0,0,1,0,0,0,0,0,1,1,2,0,0,0,0,1,0,0,1,3,1,0,0,0,0,1,1,0,0,
0,1,0,0,0,0,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,
3,3,1,1,1,1,2,3,0,0,2,1,1,1,1,1,0,2,1,1,0,0,0,2,1,0,1,2,1,1,0,1,
2,1,0,3,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,3,1,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,
0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,3,2,0,0,0,0,0,0,1,2,1,0,1,1,0,2,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,2,0,0,0,1,3,0,1,0,0,0,2,0,0,0,0,0,0,0,1,2,0,0,0,0,0,
3,3,0,0,1,1,2,0,0,1,2,1,0,1,1,1,0,1,1,0,0,2,1,1,0,1,0,0,1,1,1,0,
0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
2,2,2,1,0,0,0,0,1,0,0,0,0,3,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,
2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2,3,0,0,1,1,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,1,0,1,2,0,1,2,0,0,1,1,0,2,0,1,0,0,1,0,0,0,0,1,0,0,0,2,0,0,0,0,
1,0,0,1,0,1,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,2,1,3,0,0,0,0,1,1,0,0,0,0,0,0,0,3,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2,0,1,0,1,0,0,2,0,0,2,0,0,1,1,2,0,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0,
1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,
1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0,
2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,3,0,0,0,
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,
1,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,1,1,0,0,2,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
]
TIS620ThaiModel = {
'charToOrderMap' => TIS620CharToOrderMap,
'precedenceMatrix' => ThaiLangModel,
'mTypicalPositiveRatio' => 0.926386,
'keepEnglishLetter' => false,
'charsetName' => "TIS-620"
}
end

View File

@@ -1,147 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is Mozilla Universal charset detector code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 2001
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
# Shy Shalom - original C code
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
module CharDet
FREQ_CAT_NUM = 4
UDF = 0 # undefined
OTH = 1 # other
ASC = 2 # ascii capital letter
ASS = 3 # ascii small letter
ACV = 4 # accent capital vowel
ACO = 5 # accent capital other
ASV = 6 # accent small vowel
ASO = 7 # accent small other
CLASS_NUM = 8 # total classes
Latin1_CharToClass = [
OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 00 - 07
OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 08 - 0F
OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 10 - 17
OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 18 - 1F
OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 20 - 27
OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 28 - 2F
OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 30 - 37
OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 38 - 3F
OTH, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 40 - 47
ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 48 - 4F
ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 50 - 57
ASC, ASC, ASC, OTH, OTH, OTH, OTH, OTH, # 58 - 5F
OTH, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 60 - 67
ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 68 - 6F
ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 70 - 77
ASS, ASS, ASS, OTH, OTH, OTH, OTH, OTH, # 78 - 7F
OTH, UDF, OTH, ASO, OTH, OTH, OTH, OTH, # 80 - 87
OTH, OTH, ACO, OTH, ACO, UDF, ACO, UDF, # 88 - 8F
UDF, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 90 - 97
OTH, OTH, ASO, OTH, ASO, UDF, ASO, ACO, # 98 - 9F
OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A0 - A7
OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A8 - AF
OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B0 - B7
OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B8 - BF
ACV, ACV, ACV, ACV, ACV, ACV, ACO, ACO, # C0 - C7
ACV, ACV, ACV, ACV, ACV, ACV, ACV, ACV, # C8 - CF
ACO, ACO, ACV, ACV, ACV, ACV, ACV, OTH, # D0 - D7
ACV, ACV, ACV, ACV, ACV, ACO, ACO, ACO, # D8 - DF
ASV, ASV, ASV, ASV, ASV, ASV, ASO, ASO, # E0 - E7
ASV, ASV, ASV, ASV, ASV, ASV, ASV, ASV, # E8 - EF
ASO, ASO, ASV, ASV, ASV, ASV, ASV, OTH, # F0 - F7
ASV, ASV, ASV, ASV, ASV, ASO, ASO, ASO, # F8 - FF
]
# 0 : illegal
# 1 : very unlikely
# 2 : normal
# 3 : very likely
Latin1ClassModel = [
# UDF OTH ASC ASS ACV ACO ASV ASO
0, 0, 0, 0, 0, 0, 0, 0, # UDF
0, 3, 3, 3, 3, 3, 3, 3, # OTH
0, 3, 3, 3, 3, 3, 3, 3, # ASC
0, 3, 3, 3, 1, 1, 3, 3, # ASS
0, 3, 3, 3, 1, 2, 1, 2, # ACV
0, 3, 3, 3, 3, 3, 3, 3, # ACO
0, 3, 1, 3, 1, 1, 1, 3, # ASV
0, 3, 1, 3, 1, 1, 3, 3, # ASO
]
class Latin1Prober < CharSetProber
def initialize
super
reset()
end
def reset
@_mLastCharClass = OTH
@_mFreqCounter = [0] * FREQ_CAT_NUM
super
end
def get_charset_name
return "windows-1252"
end
def feed(aBuf)
aBuf = filter_with_english_letters(aBuf)
aBuf.each_byte do |b|
c = b.chr
charClass = Latin1_CharToClass[c[0]]
freq = Latin1ClassModel[(@_mLastCharClass * CLASS_NUM) + charClass]
if freq == 0
@_mState = ENotMe
break
end
@_mFreqCounter[freq] += 1
@_mLastCharClass = charClass
end
return get_state()
end
def get_confidence
if get_state() == ENotMe
return 0.01
end
total = @_mFreqCounter.inject{|a,b| a+b}
if total < 0.01
confidence = 0.0
else
confidence = (@_mFreqCounter[3] / total) - (@_mFreqCounter[1] * 20.0 / total)
end
if confidence < 0.0
confidence = 0.0
end
# lower the confidence of latin1 so that other more accurate detector
# can take priority.
confidence = confidence * 0.5
return confidence
end
end
end

View File

@@ -1,89 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is Mozilla Universal charset detector code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 2001
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
# Shy Shalom - original C code
# Proofpoint, Inc.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
module CharDet
class MultiByteCharSetProber < CharSetProber
def initialize
super
@_mDistributionAnalyzer = nil
@_mCodingSM = nil
@_mLastChar = "\x00\x00"
end
def reset
super
if @_mCodingSM
@_mCodingSM.reset()
end
if @_mDistributionAnalyzer
@_mDistributionAnalyzer.reset()
end
@_mLastChar = "\x00\x00"
end
def get_charset_name
end
def feed(aBuf)
aLen = aBuf.length
for i in (0...aLen)
codingState = @_mCodingSM.next_state(aBuf[i..i])
if codingState == EError
$stderr << "#{get_charset_name} prober hit error at byte #{i}\n" if $debug
@_mState = ENotMe
break
elsif codingState == EItsMe
@_mState = EFoundIt
break
elsif codingState == EStart
charLen = @_mCodingSM.get_current_charlen()
if i == 0
@_mLastChar[1] = aBuf[0..0]
@_mDistributionAnalyzer.feed(@_mLastChar, charLen)
else
@_mDistributionAnalyzer.feed(aBuf[i-1...i+1], charLen)
end
end
end
@_mLastChar[0] = aBuf[aLen-1..aLen-1]
if get_state() == EDetecting
if @_mDistributionAnalyzer.got_enough_data() and (get_confidence() > SHORTCUT_THRESHOLD)
@_mState = EFoundIt
end
end
return get_state()
end
def get_confidence
return @_mDistributionAnalyzer.get_confidence()
end
end
end

View File

@@ -1,45 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is Mozilla Universal charset detector code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 2001
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
# Shy Shalom - original C code
# Proofpoint, Inc.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
module CharDet
class MBCSGroupProber < CharSetGroupProber
def initialize
super
@_mProbers = [ UTF8Prober.new,
SJISProber.new,
EUCJPProber.new,
GB2312Prober.new,
EUCKRProber.new,
Big5Prober.new,
EUCTWProber.new ]
reset()
end
end
end

View File

@@ -1,542 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
module CharDet
# BIG5
BIG5_cls = [
1,1,1,1,1,1,1,1, # 00 - 07 #allow 0x00 as legal value
1,1,1,1,1,1,0,0, # 08 - 0f
1,1,1,1,1,1,1,1, # 10 - 17
1,1,1,0,1,1,1,1, # 18 - 1f
1,1,1,1,1,1,1,1, # 20 - 27
1,1,1,1,1,1,1,1, # 28 - 2f
1,1,1,1,1,1,1,1, # 30 - 37
1,1,1,1,1,1,1,1, # 38 - 3f
2,2,2,2,2,2,2,2, # 40 - 47
2,2,2,2,2,2,2,2, # 48 - 4f
2,2,2,2,2,2,2,2, # 50 - 57
2,2,2,2,2,2,2,2, # 58 - 5f
2,2,2,2,2,2,2,2, # 60 - 67
2,2,2,2,2,2,2,2, # 68 - 6f
2,2,2,2,2,2,2,2, # 70 - 77
2,2,2,2,2,2,2,1, # 78 - 7f
4,4,4,4,4,4,4,4, # 80 - 87
4,4,4,4,4,4,4,4, # 88 - 8f
4,4,4,4,4,4,4,4, # 90 - 97
4,4,4,4,4,4,4,4, # 98 - 9f
4,3,3,3,3,3,3,3, # a0 - a7
3,3,3,3,3,3,3,3, # a8 - af
3,3,3,3,3,3,3,3, # b0 - b7
3,3,3,3,3,3,3,3, # b8 - bf
3,3,3,3,3,3,3,3, # c0 - c7
3,3,3,3,3,3,3,3, # c8 - cf
3,3,3,3,3,3,3,3, # d0 - d7
3,3,3,3,3,3,3,3, # d8 - df
3,3,3,3,3,3,3,3, # e0 - e7
3,3,3,3,3,3,3,3, # e8 - ef
3,3,3,3,3,3,3,3, # f0 - f7
3,3,3,3,3,3,3,0 # f8 - ff
]
BIG5_st = [
EError,EStart,EStart, 3,EError,EError,EError,EError,#00-07
EError,EError,EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,EError,#08-0f
EError,EStart,EStart,EStart,EStart,EStart,EStart,EStart #10-17
]
Big5CharLenTable = [0, 1, 1, 2, 0]
Big5SMModel = {'classTable' => BIG5_cls,
'classFactor' => 5,
'stateTable' => BIG5_st,
'charLenTable' => Big5CharLenTable,
'name' => 'Big5'
}
# EUC-JP
EUCJP_cls = [
4,4,4,4,4,4,4,4, # 00 - 07
4,4,4,4,4,4,5,5, # 08 - 0f
4,4,4,4,4,4,4,4, # 10 - 17
4,4,4,5,4,4,4,4, # 18 - 1f
4,4,4,4,4,4,4,4, # 20 - 27
4,4,4,4,4,4,4,4, # 28 - 2f
4,4,4,4,4,4,4,4, # 30 - 37
4,4,4,4,4,4,4,4, # 38 - 3f
4,4,4,4,4,4,4,4, # 40 - 47
4,4,4,4,4,4,4,4, # 48 - 4f
4,4,4,4,4,4,4,4, # 50 - 57
4,4,4,4,4,4,4,4, # 58 - 5f
4,4,4,4,4,4,4,4, # 60 - 67
4,4,4,4,4,4,4,4, # 68 - 6f
4,4,4,4,4,4,4,4, # 70 - 77
4,4,4,4,4,4,4,4, # 78 - 7f
5,5,5,5,5,5,5,5, # 80 - 87
5,5,5,5,5,5,1,3, # 88 - 8f
5,5,5,5,5,5,5,5, # 90 - 97
5,5,5,5,5,5,5,5, # 98 - 9f
5,2,2,2,2,2,2,2, # a0 - a7
2,2,2,2,2,2,2,2, # a8 - af
2,2,2,2,2,2,2,2, # b0 - b7
2,2,2,2,2,2,2,2, # b8 - bf
2,2,2,2,2,2,2,2, # c0 - c7
2,2,2,2,2,2,2,2, # c8 - cf
2,2,2,2,2,2,2,2, # d0 - d7
2,2,2,2,2,2,2,2, # d8 - df
0,0,0,0,0,0,0,0, # e0 - e7
0,0,0,0,0,0,0,0, # e8 - ef
0,0,0,0,0,0,0,0, # f0 - f7
0,0,0,0,0,0,0,5 # f8 - ff
]
EUCJP_st = [
3, 4, 3, 5,EStart,EError,EError,EError,#00-07
EError,EError,EError,EError,EItsMe,EItsMe,EItsMe,EItsMe,#08-0f
EItsMe,EItsMe,EStart,EError,EStart,EError,EError,EError,#10-17
EError,EError,EStart,EError,EError,EError, 3,EError,#18-1f
3,EError,EError,EError,EStart,EStart,EStart,EStart #20-27
]
EUCJPCharLenTable = [2, 2, 2, 3, 1, 0]
EUCJPSMModel = {'classTable' => EUCJP_cls,
'classFactor' => 6,
'stateTable' => EUCJP_st,
'charLenTable' => EUCJPCharLenTable,
'name' => 'EUC-JP'
}
# EUC-KR
EUCKR_cls = [
1,1,1,1,1,1,1,1, # 00 - 07
1,1,1,1,1,1,0,0, # 08 - 0f
1,1,1,1,1,1,1,1, # 10 - 17
1,1,1,0,1,1,1,1, # 18 - 1f
1,1,1,1,1,1,1,1, # 20 - 27
1,1,1,1,1,1,1,1, # 28 - 2f
1,1,1,1,1,1,1,1, # 30 - 37
1,1,1,1,1,1,1,1, # 38 - 3f
1,1,1,1,1,1,1,1, # 40 - 47
1,1,1,1,1,1,1,1, # 48 - 4f
1,1,1,1,1,1,1,1, # 50 - 57
1,1,1,1,1,1,1,1, # 58 - 5f
1,1,1,1,1,1,1,1, # 60 - 67
1,1,1,1,1,1,1,1, # 68 - 6f
1,1,1,1,1,1,1,1, # 70 - 77
1,1,1,1,1,1,1,1, # 78 - 7f
0,0,0,0,0,0,0,0, # 80 - 87
0,0,0,0,0,0,0,0, # 88 - 8f
0,0,0,0,0,0,0,0, # 90 - 97
0,0,0,0,0,0,0,0, # 98 - 9f
0,2,2,2,2,2,2,2, # a0 - a7
2,2,2,2,2,3,3,3, # a8 - af
2,2,2,2,2,2,2,2, # b0 - b7
2,2,2,2,2,2,2,2, # b8 - bf
2,2,2,2,2,2,2,2, # c0 - c7
2,3,2,2,2,2,2,2, # c8 - cf
2,2,2,2,2,2,2,2, # d0 - d7
2,2,2,2,2,2,2,2, # d8 - df
2,2,2,2,2,2,2,2, # e0 - e7
2,2,2,2,2,2,2,2, # e8 - ef
2,2,2,2,2,2,2,2, # f0 - f7
2,2,2,2,2,2,2,0 # f8 - ff
]
EUCKR_st = [
EError,EStart, 3,EError,EError,EError,EError,EError,#00-07
EItsMe,EItsMe,EItsMe,EItsMe,EError,EError,EStart,EStart#08-0f
]
EUCKRCharLenTable = [0, 1, 2, 0]
EUCKRSMModel = {'classTable' => EUCKR_cls,
'classFactor' => 4,
'stateTable' => EUCKR_st,
'charLenTable' => EUCKRCharLenTable,
'name' => 'EUC-KR'
}
# EUC-TW
EUCTW_cls = [
2,2,2,2,2,2,2,2, # 00 - 07
2,2,2,2,2,2,0,0, # 08 - 0f
2,2,2,2,2,2,2,2, # 10 - 17
2,2,2,0,2,2,2,2, # 18 - 1f
2,2,2,2,2,2,2,2, # 20 - 27
2,2,2,2,2,2,2,2, # 28 - 2f
2,2,2,2,2,2,2,2, # 30 - 37
2,2,2,2,2,2,2,2, # 38 - 3f
2,2,2,2,2,2,2,2, # 40 - 47
2,2,2,2,2,2,2,2, # 48 - 4f
2,2,2,2,2,2,2,2, # 50 - 57
2,2,2,2,2,2,2,2, # 58 - 5f
2,2,2,2,2,2,2,2, # 60 - 67
2,2,2,2,2,2,2,2, # 68 - 6f
2,2,2,2,2,2,2,2, # 70 - 77
2,2,2,2,2,2,2,2, # 78 - 7f
0,0,0,0,0,0,0,0, # 80 - 87
0,0,0,0,0,0,6,0, # 88 - 8f
0,0,0,0,0,0,0,0, # 90 - 97
0,0,0,0,0,0,0,0, # 98 - 9f
0,3,4,4,4,4,4,4, # a0 - a7
5,5,1,1,1,1,1,1, # a8 - af
1,1,1,1,1,1,1,1, # b0 - b7
1,1,1,1,1,1,1,1, # b8 - bf
1,1,3,1,3,3,3,3, # c0 - c7
3,3,3,3,3,3,3,3, # c8 - cf
3,3,3,3,3,3,3,3, # d0 - d7
3,3,3,3,3,3,3,3, # d8 - df
3,3,3,3,3,3,3,3, # e0 - e7
3,3,3,3,3,3,3,3, # e8 - ef
3,3,3,3,3,3,3,3, # f0 - f7
3,3,3,3,3,3,3,0 # f8 - ff
]
EUCTW_st = [
EError,EError,EStart, 3, 3, 3, 4,EError,#00-07
EError,EError,EError,EError,EError,EError,EItsMe,EItsMe,#08-0f
EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,EError,EStart,EError,#10-17
EStart,EStart,EStart,EError,EError,EError,EError,EError,#18-1f
5,EError,EError,EError,EStart,EError,EStart,EStart,#20-27
EStart,EError,EStart,EStart,EStart,EStart,EStart,EStart #28-2f
]
EUCTWCharLenTable = [0, 0, 1, 2, 2, 2, 3]
EUCTWSMModel = {'classTable' => EUCTW_cls,
'classFactor' => 7,
'stateTable' => EUCTW_st,
'charLenTable' => EUCTWCharLenTable,
'name' => 'x-euc-tw'
}
# GB2312
GB2312_cls = [
1,1,1,1,1,1,1,1, # 00 - 07
1,1,1,1,1,1,0,0, # 08 - 0f
1,1,1,1,1,1,1,1, # 10 - 17
1,1,1,0,1,1,1,1, # 18 - 1f
1,1,1,1,1,1,1,1, # 20 - 27
1,1,1,1,1,1,1,1, # 28 - 2f
3,3,3,3,3,3,3,3, # 30 - 37
3,3,1,1,1,1,1,1, # 38 - 3f
2,2,2,2,2,2,2,2, # 40 - 47
2,2,2,2,2,2,2,2, # 48 - 4f
2,2,2,2,2,2,2,2, # 50 - 57
2,2,2,2,2,2,2,2, # 58 - 5f
2,2,2,2,2,2,2,2, # 60 - 67
2,2,2,2,2,2,2,2, # 68 - 6f
2,2,2,2,2,2,2,2, # 70 - 77
2,2,2,2,2,2,2,4, # 78 - 7f
5,6,6,6,6,6,6,6, # 80 - 87
6,6,6,6,6,6,6,6, # 88 - 8f
6,6,6,6,6,6,6,6, # 90 - 97
6,6,6,6,6,6,6,6, # 98 - 9f
6,6,6,6,6,6,6,6, # a0 - a7
6,6,6,6,6,6,6,6, # a8 - af
6,6,6,6,6,6,6,6, # b0 - b7
6,6,6,6,6,6,6,6, # b8 - bf
6,6,6,6,6,6,6,6, # c0 - c7
6,6,6,6,6,6,6,6, # c8 - cf
6,6,6,6,6,6,6,6, # d0 - d7
6,6,6,6,6,6,6,6, # d8 - df
6,6,6,6,6,6,6,6, # e0 - e7
6,6,6,6,6,6,6,6, # e8 - ef
6,6,6,6,6,6,6,6, # f0 - f7
6,6,6,6,6,6,6,0 # f8 - ff
]
GB2312_st = [
EError,EStart,EStart,EStart,EStart,EStart, 3,EError,#00-07
EError,EError,EError,EError,EError,EError,EItsMe,EItsMe,#08-0f
EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,EError,EError,EStart,#10-17
4,EError,EStart,EStart,EError,EError,EError,EError,#18-1f
EError,EError, 5,EError,EError,EError,EItsMe,EError,#20-27
EError,EError,EStart,EStart,EStart,EStart,EStart,EStart#28-2f
]
# To be accurate, the length of class 6 can be either 2 or 4.
# But it is not necessary to discriminate between the two since
# it is used for frequency analysis only, and we are validing
# each code range there as well. So it is safe to set it to be
# 2 here.
GB2312CharLenTable = [0, 1, 1, 1, 1, 1, 2]
GB2312SMModel = {'classTable' => GB2312_cls,
'classFactor' => 7,
'stateTable' => GB2312_st,
'charLenTable' => GB2312CharLenTable,
'name' => 'GB2312'
}
# Shift_JIS
SJIS_cls = [
1,1,1,1,1,1,1,1, # 00 - 07
1,1,1,1,1,1,0,0, # 08 - 0f
1,1,1,1,1,1,1,1, # 10 - 17
1,1,1,0,1,1,1,1, # 18 - 1f
1,1,1,1,1,1,1,1, # 20 - 27
1,1,1,1,1,1,1,1, # 28 - 2f
1,1,1,1,1,1,1,1, # 30 - 37
1,1,1,1,1,1,1,1, # 38 - 3f
2,2,2,2,2,2,2,2, # 40 - 47
2,2,2,2,2,2,2,2, # 48 - 4f
2,2,2,2,2,2,2,2, # 50 - 57
2,2,2,2,2,2,2,2, # 58 - 5f
2,2,2,2,2,2,2,2, # 60 - 67
2,2,2,2,2,2,2,2, # 68 - 6f
2,2,2,2,2,2,2,2, # 70 - 77
2,2,2,2,2,2,2,1, # 78 - 7f
3,3,3,3,3,3,3,3, # 80 - 87
3,3,3,3,3,3,3,3, # 88 - 8f
3,3,3,3,3,3,3,3, # 90 - 97
3,3,3,3,3,3,3,3, # 98 - 9f
#0xa0 is illegal in sjis encoding, but some pages does
#contain such byte. We need to be more error forgiven.
2,2,2,2,2,2,2,2, # a0 - a7
2,2,2,2,2,2,2,2, # a8 - af
2,2,2,2,2,2,2,2, # b0 - b7
2,2,2,2,2,2,2,2, # b8 - bf
2,2,2,2,2,2,2,2, # c0 - c7
2,2,2,2,2,2,2,2, # c8 - cf
2,2,2,2,2,2,2,2, # d0 - d7
2,2,2,2,2,2,2,2, # d8 - df
3,3,3,3,3,3,3,3, # e0 - e7
3,3,3,3,3,4,4,4, # e8 - ef
4,4,4,4,4,4,4,4, # f0 - f7
4,4,4,4,4,0,0,0 # f8 - ff
]
SJIS_st = [
EError,EStart,EStart, 3,EError,EError,EError,EError,#00-07
EError,EError,EError,EError,EItsMe,EItsMe,EItsMe,EItsMe,#08-0f
EItsMe,EItsMe,EError,EError,EStart,EStart,EStart,EStart#10-17
]
SJISCharLenTable = [0, 1, 1, 2, 0, 0]
SJISSMModel = {'classTable' => SJIS_cls,
'classFactor' => 6,
'stateTable' => SJIS_st,
'charLenTable' => SJISCharLenTable,
'name' => 'Shift_JIS'
}
# UCS2-BE
UCS2BE_cls = [
0,0,0,0,0,0,0,0, # 00 - 07
0,0,1,0,0,2,0,0, # 08 - 0f
0,0,0,0,0,0,0,0, # 10 - 17
0,0,0,3,0,0,0,0, # 18 - 1f
0,0,0,0,0,0,0,0, # 20 - 27
0,3,3,3,3,3,0,0, # 28 - 2f
0,0,0,0,0,0,0,0, # 30 - 37
0,0,0,0,0,0,0,0, # 38 - 3f
0,0,0,0,0,0,0,0, # 40 - 47
0,0,0,0,0,0,0,0, # 48 - 4f
0,0,0,0,0,0,0,0, # 50 - 57
0,0,0,0,0,0,0,0, # 58 - 5f
0,0,0,0,0,0,0,0, # 60 - 67
0,0,0,0,0,0,0,0, # 68 - 6f
0,0,0,0,0,0,0,0, # 70 - 77
0,0,0,0,0,0,0,0, # 78 - 7f
0,0,0,0,0,0,0,0, # 80 - 87
0,0,0,0,0,0,0,0, # 88 - 8f
0,0,0,0,0,0,0,0, # 90 - 97
0,0,0,0,0,0,0,0, # 98 - 9f
0,0,0,0,0,0,0,0, # a0 - a7
0,0,0,0,0,0,0,0, # a8 - af
0,0,0,0,0,0,0,0, # b0 - b7
0,0,0,0,0,0,0,0, # b8 - bf
0,0,0,0,0,0,0,0, # c0 - c7
0,0,0,0,0,0,0,0, # c8 - cf
0,0,0,0,0,0,0,0, # d0 - d7
0,0,0,0,0,0,0,0, # d8 - df
0,0,0,0,0,0,0,0, # e0 - e7
0,0,0,0,0,0,0,0, # e8 - ef
0,0,0,0,0,0,0,0, # f0 - f7
0,0,0,0,0,0,4,5 # f8 - ff
]
UCS2BE_st = [
5, 7, 7,EError, 4, 3,EError,EError,#00-07
EError,EError,EError,EError,EItsMe,EItsMe,EItsMe,EItsMe,#08-0f
EItsMe,EItsMe, 6, 6, 6, 6,EError,EError,#10-17
6, 6, 6, 6, 6,EItsMe, 6, 6,#18-1f
6, 6, 6, 6, 5, 7, 7,EError,#20-27
5, 8, 6, 6,EError, 6, 6, 6,#28-2f
6, 6, 6, 6,EError,EError,EStart,EStart#30-37
]
UCS2BECharLenTable = [2, 2, 2, 0, 2, 2]
UCS2BESMModel = {'classTable' => UCS2BE_cls,
'classFactor' => 6,
'stateTable' => UCS2BE_st,
'charLenTable' => UCS2BECharLenTable,
'name' => 'UTF-16BE'
}
# UCS2-LE
UCS2LE_cls = [
0,0,0,0,0,0,0,0, # 00 - 07
0,0,1,0,0,2,0,0, # 08 - 0f
0,0,0,0,0,0,0,0, # 10 - 17
0,0,0,3,0,0,0,0, # 18 - 1f
0,0,0,0,0,0,0,0, # 20 - 27
0,3,3,3,3,3,0,0, # 28 - 2f
0,0,0,0,0,0,0,0, # 30 - 37
0,0,0,0,0,0,0,0, # 38 - 3f
0,0,0,0,0,0,0,0, # 40 - 47
0,0,0,0,0,0,0,0, # 48 - 4f
0,0,0,0,0,0,0,0, # 50 - 57
0,0,0,0,0,0,0,0, # 58 - 5f
0,0,0,0,0,0,0,0, # 60 - 67
0,0,0,0,0,0,0,0, # 68 - 6f
0,0,0,0,0,0,0,0, # 70 - 77
0,0,0,0,0,0,0,0, # 78 - 7f
0,0,0,0,0,0,0,0, # 80 - 87
0,0,0,0,0,0,0,0, # 88 - 8f
0,0,0,0,0,0,0,0, # 90 - 97
0,0,0,0,0,0,0,0, # 98 - 9f
0,0,0,0,0,0,0,0, # a0 - a7
0,0,0,0,0,0,0,0, # a8 - af
0,0,0,0,0,0,0,0, # b0 - b7
0,0,0,0,0,0,0,0, # b8 - bf
0,0,0,0,0,0,0,0, # c0 - c7
0,0,0,0,0,0,0,0, # c8 - cf
0,0,0,0,0,0,0,0, # d0 - d7
0,0,0,0,0,0,0,0, # d8 - df
0,0,0,0,0,0,0,0, # e0 - e7
0,0,0,0,0,0,0,0, # e8 - ef
0,0,0,0,0,0,0,0, # f0 - f7
0,0,0,0,0,0,4,5 # f8 - ff
]
UCS2LE_st = [
6, 6, 7, 6, 4, 3,EError,EError,#00-07
EError,EError,EError,EError,EItsMe,EItsMe,EItsMe,EItsMe,#08-0f
EItsMe,EItsMe, 5, 5, 5,EError,EItsMe,EError,#10-17
5, 5, 5,EError, 5,EError, 6, 6,#18-1f
7, 6, 8, 8, 5, 5, 5,EError,#20-27
5, 5, 5,EError,EError,EError, 5, 5,#28-2f
5, 5, 5,EError, 5,EError,EStart,EStart#30-37
]
UCS2LECharLenTable = [2, 2, 2, 2, 2, 2]
UCS2LESMModel = {'classTable' => UCS2LE_cls,
'classFactor' => 6,
'stateTable' => UCS2LE_st,
'charLenTable' => UCS2LECharLenTable,
'name' => 'UTF-16LE'
}
# UTF-8
UTF8_cls = [
1,1,1,1,1,1,1,1, # 00 - 07 #allow 0x00 as a legal value
1,1,1,1,1,1,0,0, # 08 - 0f
1,1,1,1,1,1,1,1, # 10 - 17
1,1,1,0,1,1,1,1, # 18 - 1f
1,1,1,1,1,1,1,1, # 20 - 27
1,1,1,1,1,1,1,1, # 28 - 2f
1,1,1,1,1,1,1,1, # 30 - 37
1,1,1,1,1,1,1,1, # 38 - 3f
1,1,1,1,1,1,1,1, # 40 - 47
1,1,1,1,1,1,1,1, # 48 - 4f
1,1,1,1,1,1,1,1, # 50 - 57
1,1,1,1,1,1,1,1, # 58 - 5f
1,1,1,1,1,1,1,1, # 60 - 67
1,1,1,1,1,1,1,1, # 68 - 6f
1,1,1,1,1,1,1,1, # 70 - 77
1,1,1,1,1,1,1,1, # 78 - 7f
2,2,2,2,3,3,3,3, # 80 - 87
4,4,4,4,4,4,4,4, # 88 - 8f
4,4,4,4,4,4,4,4, # 90 - 97
4,4,4,4,4,4,4,4, # 98 - 9f
5,5,5,5,5,5,5,5, # a0 - a7
5,5,5,5,5,5,5,5, # a8 - af
5,5,5,5,5,5,5,5, # b0 - b7
5,5,5,5,5,5,5,5, # b8 - bf
0,0,6,6,6,6,6,6, # c0 - c7
6,6,6,6,6,6,6,6, # c8 - cf
6,6,6,6,6,6,6,6, # d0 - d7
6,6,6,6,6,6,6,6, # d8 - df
7,8,8,8,8,8,8,8, # e0 - e7
8,8,8,8,8,9,8,8, # e8 - ef
10,11,11,11,11,11,11,11, # f0 - f7
12,13,13,13,14,15,0,0 # f8 - ff
]
UTF8_st = [
EError,EStart,EError,EError,EError,EError, 12, 10,#00-07
9, 11, 8, 7, 6, 5, 4, 3,#08-0f
EError,EError,EError,EError,EError,EError,EError,EError,#10-17
EError,EError,EError,EError,EError,EError,EError,EError,#18-1f
EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,#20-27
EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,#28-2f
EError,EError, 5, 5, 5, 5,EError,EError,#30-37
EError,EError,EError,EError,EError,EError,EError,EError,#38-3f
EError,EError,EError, 5, 5, 5,EError,EError,#40-47
EError,EError,EError,EError,EError,EError,EError,EError,#48-4f
EError,EError, 7, 7, 7, 7,EError,EError,#50-57
EError,EError,EError,EError,EError,EError,EError,EError,#58-5f
EError,EError,EError,EError, 7, 7,EError,EError,#60-67
EError,EError,EError,EError,EError,EError,EError,EError,#68-6f
EError,EError, 9, 9, 9, 9,EError,EError,#70-77
EError,EError,EError,EError,EError,EError,EError,EError,#78-7f
EError,EError,EError,EError,EError, 9,EError,EError,#80-87
EError,EError,EError,EError,EError,EError,EError,EError,#88-8f
EError,EError, 12, 12, 12, 12,EError,EError,#90-97
EError,EError,EError,EError,EError,EError,EError,EError,#98-9f
EError,EError,EError,EError,EError, 12,EError,EError,#a0-a7
EError,EError,EError,EError,EError,EError,EError,EError,#a8-af
EError,EError, 12, 12, 12,EError,EError,EError,#b0-b7
EError,EError,EError,EError,EError,EError,EError,EError,#b8-bf
EError,EError,EStart,EStart,EStart,EStart,EError,EError,#c0-c7
EError,EError,EError,EError,EError,EError,EError,EError#c8-cf
]
UTF8CharLenTable = [0, 1, 0, 0, 0, 0, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6]
UTF8SMModel = {'classTable' => UTF8_cls,
'classFactor' => 16,
'stateTable' => UTF8_st,
'charLenTable' => UTF8CharLenTable,
'name' => 'UTF-8'
}
end

View File

@@ -1,124 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is Mozilla Universal charset detector code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 2001
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
# Shy Shalom - original C code
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
module CharDet
SAMPLE_SIZE = 64
SB_ENOUGH_REL_THRESHOLD = 1024
POSITIVE_SHORTCUT_THRESHOLD = 0.95
NEGATIVE_SHORTCUT_THRESHOLD = 0.05
SYMBOL_CAT_ORDER = 250
NUMBER_OF_SEQ_CAT = 4
POSITIVE_CAT = NUMBER_OF_SEQ_CAT - 1
#NEGATIVE_CAT = 0
class SingleByteCharSetProber < CharSetProber
def initialize(model, reversed=false, nameProber=nil)
super()
@_mModel = model
@_mReversed = reversed # TRUE if we need to reverse every pair in the model lookup
@_mNameProber = nameProber # Optional auxiliary prober for name decision
reset()
end
def reset
super()
@_mLastOrder = 255 # char order of last character
@_mSeqCounters = [0] * NUMBER_OF_SEQ_CAT
@_mTotalSeqs = 0
@_mTotalChar = 0
@_mFreqChar = 0 # characters that fall in our sampling range
end
def get_charset_name
if @_mNameProber
return @_mNameProber.get_charset_name()
else
return @_mModel['charsetName']
end
end
def feed(aBuf)
if not @_mModel['keepEnglishLetter']
aBuf = filter_without_english_letters(aBuf)
end
aLen = aBuf.length
if not aLen
return get_state()
end
aBuf.each_byte do |b|
c = b.chr
order = @_mModel['charToOrderMap'][c[0]]
if order < SYMBOL_CAT_ORDER
@_mTotalChar += 1
end
if order < SAMPLE_SIZE
@_mFreqChar += 1
if @_mLastOrder < SAMPLE_SIZE
@_mTotalSeqs += 1
if not @_mReversed
@_mSeqCounters[@_mModel['precedenceMatrix'][(@_mLastOrder * SAMPLE_SIZE) + order]] += 1
else # reverse the order of the letters in the lookup
@_mSeqCounters[@_mModel['precedenceMatrix'][(order * SAMPLE_SIZE) + @_mLastOrder]] += 1
end
end
end
@_mLastOrder = order
end
if get_state() == EDetecting
if @_mTotalSeqs > SB_ENOUGH_REL_THRESHOLD
cf = get_confidence()
if cf > POSITIVE_SHORTCUT_THRESHOLD
$stderr << "#{@_mModel['charsetName']} confidence = #{cf}, we have a winner\n" if $debug
@_mState = EFoundIt
elsif cf < NEGATIVE_SHORTCUT_THRESHOLD
$stderr << "#{@_mModel['charsetName']} confidence = #{cf}, below negative shortcut threshold #{NEGATIVE_SHORTCUT_THRESHOLD}\n" if $debug
@_mState = ENotMe
end
end
end
return get_state()
end
def get_confidence
r = 0.01
if @_mTotalSeqs > 0
# print self._mSeqCounters[POSITIVE_CAT], self._mTotalSeqs, self._mModel['mTypicalPositiveRatio']
r = (1.0 * @_mSeqCounters[POSITIVE_CAT]) / @_mTotalSeqs / @_mModel['mTypicalPositiveRatio']
# print r, self._mFreqChar, self._mTotalChar
r = r * @_mFreqChar / @_mTotalChar
if r >= 1.0
r = 0.99
end
end
return r
end
end
end

View File

@@ -1,56 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is Mozilla Universal charset detector code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 2001
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
# Shy Shalom - original C code
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
module CharDet
class SBCSGroupProber < CharSetGroupProber
def initialize
super
@_mProbers = [ SingleByteCharSetProber.new(Win1251CyrillicModel),
SingleByteCharSetProber.new(Koi8rModel),
SingleByteCharSetProber.new(Latin5CyrillicModel),
SingleByteCharSetProber.new(MacCyrillicModel),
SingleByteCharSetProber.new(Ibm866Model),
SingleByteCharSetProber.new(Ibm855Model),
SingleByteCharSetProber.new(Latin7GreekModel),
SingleByteCharSetProber.new(Win1253GreekModel),
SingleByteCharSetProber.new(Latin5BulgarianModel),
SingleByteCharSetProber.new(Win1251BulgarianModel),
SingleByteCharSetProber.new(Latin2HungarianModel),
SingleByteCharSetProber.new(Win1250HungarianModel),
SingleByteCharSetProber.new(TIS620ThaiModel) ]
hebrewProber = HebrewProber.new()
logicalHebrewProber = SingleByteCharSetProber.new(Win1255HebrewModel, false, hebrewProber)
visualHebrewProber = SingleByteCharSetProber.new(Win1255HebrewModel, true, hebrewProber)
hebrewProber.set_model_probers(logicalHebrewProber, visualHebrewProber)
@_mProbers += [hebrewProber, logicalHebrewProber, visualHebrewProber]
reset()
end
end
end

View File

@@ -1,88 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
module CharDet
class SJISProber < MultiByteCharSetProber
def initialize
super()
@_mCodingSM = CodingStateMachine.new(SJISSMModel)
@_mDistributionAnalyzer = SJISDistributionAnalysis.new()
@_mContextAnalyzer = SJISContextAnalysis.new()
reset()
end
def reset
super()
@_mContextAnalyzer.reset()
end
def get_charset_name
return "SHIFT_JIS"
end
def feed(aBuf)
aLen = aBuf.length
for i in (0...aLen)
codingState = @_mCodingSM.next_state(aBuf[i..i])
if codingState == EError
$stderr << "#{get_charset_name} prober hit error at byte #{i}\n" if $debug
@_mState = ENotMe
break
elsif codingState == EItsMe
@_mState = EFoundIt
break
elsif codingState == EStart
charLen = @_mCodingSM.get_current_charlen()
if i == 0
@_mLastChar[1] = aBuf[0..0]
@_mContextAnalyzer.feed(@_mLastChar[2 - charLen..-1], charLen)
@_mDistributionAnalyzer.feed(@_mLastChar, charLen)
else
@_mContextAnalyzer.feed(aBuf[i + 1 - charLen ... i + 3 - charLen], charLen)
@_mDistributionAnalyzer.feed(aBuf[i - 1 ... i + 1], charLen)
end
end
end
@_mLastChar[0] = aBuf[aLen - 1.. aLen-1]
if get_state() == EDetecting
if @_mContextAnalyzer.got_enough_data() and (get_confidence() > SHORTCUT_THRESHOLD)
@_mState = EFoundIt
end
end
return get_state()
end
def get_confidence
l = [@_mContextAnalyzer.get_confidence(), @_mDistributionAnalyzer.get_confidence()]
return l.max
end
end
end

View File

@@ -1,168 +0,0 @@
# encoding: us-ascii
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is Mozilla Universal charset detector code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 2001
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
# Shy Shalom - original C code
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
module CharDet
MINIMUM_THRESHOLD = 0.20
EPureAscii = 0
EEscAscii = 1
EHighbyte = 2
class UniversalDetector
attr_accessor :result
def initialize
@_highBitDetector = /[\x80-\xFF]/
@_escDetector = /(\033|\~\{)/
@_mEscCharSetProber = nil
@_mCharSetProbers = []
reset()
end
def reset
@result = {'encoding' => nil, 'confidence' => 0.0}
@done = false
@_mStart = true
@_mGotData = false
@_mInputState = EPureAscii
@_mLastChar = ''
if @_mEscCharSetProber
@_mEscCharSetProber.reset()
end
for prober in @_mCharSetProbers
prober.reset()
end
end
def feed(aBuf)
return if @done
aLen = aBuf.length
return if not aLen
if not @_mGotData
# If the data starts with BOM, we know it is UTF
if aBuf[0...3] == "\xEF\xBB\xBF"
# EF BB BF UTF-8 with BOM
@result = {'encoding' => "UTF-8", 'confidence' => 1.0}
elsif aBuf[0...4] == "\xFF\xFE\x00\x00"
# FF FE 00 00 UTF-32, little-endian BOM
@result = {'encoding' => "UTF-32LE", 'confidence' => 1.0}
elsif aBuf[0...4] == "\x00\x00\xFE\xFF"
# 00 00 FE FF UTF-32, big-endian BOM
@result = {'encoding' => "UTF-32BE", 'confidence' => 1.0}
elsif aBuf[0...4] == "\xFE\xFF\x00\x00"
# FE FF 00 00 UCS-4, unusual octet order BOM (3412)
@result = {'encoding' => "X-ISO-10646-UCS-4-3412", 'confidence' => 1.0}
elsif aBuf[0...4] == "\x00\x00\xFF\xFE"
# 00 00 FF FE UCS-4, unusual octet order BOM (2143)
@result = {'encoding' => "X-ISO-10646-UCS-4-2143", 'confidence' => 1.0}
elsif aBuf[0...2] == "\xFF\xFE"
# FF FE UTF-16, little endian BOM
@result = {'encoding' => "UTF-16LE", 'confidence' => 1.0}
elsif aBuf[0...2] == "\xFE\xFF"
# FE FF UTF-16, big endian BOM
@result = {'encoding' => "UTF-16BE", 'confidence' => 1.0}
end
end
@_mGotData = true
if @result['encoding'] and (@result['confidence'] > 0.0)
@done = true
return
end
if @_mInputState == EPureAscii
if @_highBitDetector =~ (aBuf)
@_mInputState = EHighbyte
elsif (@_mInputState == EPureAscii) and @_escDetector =~ (@_mLastChar + aBuf)
@_mInputState = EEscAscii
end
end
@_mLastChar = aBuf[-1..-1]
if @_mInputState == EEscAscii
if not @_mEscCharSetProber
@_mEscCharSetProber = EscCharSetProber.new()
end
if @_mEscCharSetProber.feed(aBuf) == EFoundIt
@result = {'encoding' => self._mEscCharSetProber.get_charset_name(),
'confidence' => @_mEscCharSetProber.get_confidence()
}
@done = true
end
elsif @_mInputState == EHighbyte
if not @_mCharSetProbers or @_mCharSetProbers.empty?
@_mCharSetProbers = [MBCSGroupProber.new(), SBCSGroupProber.new(), Latin1Prober.new()]
end
for prober in @_mCharSetProbers
if prober.feed(aBuf) == EFoundIt
@result = {'encoding' => prober.get_charset_name(),
'confidence' => prober.get_confidence()}
@done = true
break
end
end
end
end
def close
return if @done
if not @_mGotData
$stderr << "no data received!\n" if $debug
return
end
@done = true
if @_mInputState == EPureAscii
@result = {'encoding' => 'ascii', 'confidence' => 1.0}
return @result
end
if @_mInputState == EHighbyte
confidences = {}
@_mCharSetProbers.each{ |prober| confidences[prober] = prober.get_confidence }
maxProber = @_mCharSetProbers.max{ |a,b| confidences[a] <=> confidences[b] }
if maxProber and maxProber.get_confidence > MINIMUM_THRESHOLD
@result = {'encoding' => maxProber.get_charset_name(),
'confidence' => maxProber.get_confidence()}
return @result
end
end
if $debug
$stderr << "no probers hit minimum threshhold\n" if $debug
for prober in @_mCharSetProbers[0]._mProbers
next if not prober
$stderr << "#{prober.get_charset_name} confidence = #{prober.get_confidence}\n" if $debug
end
end
end
end
end

View File

@@ -1,87 +0,0 @@
######################## BEGIN LICENSE BLOCK ########################
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Jeff Hodges - port to Ruby
# Mark Pilgrim - port to Python
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA
######################### END LICENSE BLOCK #########################
module CharDet
ONE_CHAR_PROB = 0.5
class UTF8Prober < CharSetProber
def initialize
super()
@_mCodingSM = CodingStateMachine.new(UTF8SMModel)
reset()
end
def reset
super()
@_mCodingSM.reset()
@_mNumOfMBChar = 0
end
def get_charset_name
return "utf-8"
end
def feed(aBuf)
aBuf.each_byte do |b|
c = b.chr
codingState = @_mCodingSM.next_state(c)
if codingState == EError
@_mState = ENotMe
break
elsif codingState == EItsMe
@_mState = EFoundIt
break
elsif codingState == EStart
if @_mCodingSM.get_current_charlen() >= 2
@_mNumOfMBChar += 1
end
end
end
if get_state() == EDetecting
if get_confidence() > SHORTCUT_THRESHOLD
@_mState = EFoundIt
end
end
return get_state()
end
def get_confidence
unlike = 0.99
if @_mNumOfMBChar < 6
for i in (0...@_mNumOfMBChar)
unlike = unlike * ONE_CHAR_PROB
end
return 1.0 - unlike
else
return unlike
end
end
end
end

View File

@@ -1,39 +0,0 @@
#
# version.rb
#
#--
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Note: Originally licensed under LGPL v2+. Using MIT license for Rails
# with permission of Minero Aoki.
#++
#:stopdoc:
module TMail
module VERSION
MAJOR = 1
MINOR = 2
TINY = 6
STRING = [MAJOR, MINOR, TINY].join('.')
end
end

View File

@@ -1,17 +0,0 @@
# Prefer gems to the bundled libs.
require 'rubygems'
begin
gem 'tmail', '~> 1.2.7'
rescue Gem::LoadError
$:.unshift "#{File.dirname(__FILE__)}/tmail-1.2.7"
end
module TMail
end
require 'tmail'
silence_warnings do
TMail::Encoder.const_set("MAX_LINE_LEN", 200)
end

View File

@@ -1,8 +1,8 @@
module ActionMailer
module VERSION #:nodoc:
MAJOR = 2
MINOR = 3
TINY = 14
MAJOR = 3
MINOR = 0
TINY = "0.beta"
STRING = [MAJOR, MINOR, TINY].join('.')
end

View File

@@ -1,2 +0,0 @@
require 'action_mailer'
ActiveSupport::Deprecation.warn 'require "actionmailer" is deprecated and will be removed in Rails 3. Use require "action_mailer" instead.'

Some files were not shown because too many files have changed in this diff Show More