*0.4.0a* * Implemented SQLite adapter. * Moved Postgres classes into ServerSide module. * Removed Kernel.backtrace. Deprecated... * Fixed exception in Daemon.stop if the daemon process is not running. * Removed pathname conversion from String#camelize. * Removed Symbol#to_s override. * Re-enabled daemon spec testing. * Renamed JSON to JS, and rewrote large parts thereof. Instead of the magic of instance_eval we now just pass self to the block. * Fixed bug in PGconn#transaction. * Rewrote connection pool code to actually work, duh. * Refactored transaction support in Postgres adapter. * Added JSON renderer. * Fixed small bug where Postgres::Dataset#result_first returned @result instead of nil when the query result is empty. * Fixed a small bug in postgres row fetcher compiler that prevented Postgres::Dataset#explain from working. * Fixed Model.filter to work with any number of arguments. * Added Model#map and Model#hash methods. * Implemented Dataset#hash method for creating a hash out of a dataset using two columns (key and value). * Added HTTP::Request#render_template method. * Added String#camelize method. * Added HTTP::StaticServer class for serving static files only. * Refactored Postgres::Dataset row fetcher code. * Refactored Dataset#where and Dataset#select_sql for slightly better performance. * Added Model#== method for comparing records. * Fixed bug in schema where default values would not be included in column definition if they were null or false. * Refactored value list expression in Postgres adapter. * Added support for boolean and timestamp columns in Postgres adapter. * Added Model#model method to get the model's class. * Changed Schema.drop_table_sql to use DROP CASCADE. * Fixed Postgres::Dataset#where_equal_condition to construct (NULL) subquery for empty arrays. * Added Model.lock method. * Fixed Model.one_to_many to accept :table option or use the relation name as default. * Fixed Model#delete_all to delete each record separately only when before_delete hooks are defined. * Fixed behavior of filter to be additive for hashes. * Added support for IN () syntax notation for arrays of values. * Added Dataset#min and Dataset#max aggregate methods. * Added Dataset#insert and Model.create with default (no) values. * Added table option to one_to_one and one_to_many. This allows relations without defining custom classes. * Added order option to one_to_many construct. * Fixed Dataset#count when order is specified. * Added Model#refresh and Model#exists? methods. * Fixed Postgres row fetcher to return nil values correctly. * Added Database#create_table, drop_table and table_exists? methods. Implemented Postgres#table_exists?. * Added Schema#create and Schema#drop methods. * Added Schema::Generator#create_sql drop_sql methods. * Added Schema::Generator#foreign_key construct. * Refactored Schema slightly to allow Schema instances that make sense. * Removed Model.schemas - schema should be unrelated. * Added foreign key support in Schema. * Changed Postgres#synchronize to acquire connection from connection pool, and be re-entrant. * Refactored Postgres to use ConnectionPool. * Implemented ConnectionPool class. * Refactored Postgres#connected? into PGconn. * Fixed Postgres::Database#transaction for re-entrancy. * Renamed Model.database to Model.db. * Fixed Model.one_to_many construct. * Added before_delete and after_create hooks. * Fixed Postgres spec. * Added PGconn.quote method implementation for pure-ruby postgres adapter. * Added Postgres.tables to query existing tables. * Added filter_by_XXX and fixed find_by_XXX methods. * Added Model.schemas and Model.recreate_schemas. * Fixed Model.recreate_table. * Added Postgres literal respresentation for Time objects (as float). * Fixed schema generation and added Model.recreate_table. * Better integration of Schema generator with Model. * Refactored postgres select code and wrapped db calls with db.synchronize. * Added true.to_i and false.to_i methods (these will be used by Dataset#literal.) * Added ServerSide::Model method, so one can do class node < ServerSide::Model(:nodes). * Refactored Postgres::Dataset#select. * Added Postgres::Dataset#for_update and for_share methods. * Added XML generator. * Added schema generation code. * Fixed Dataset#map to return array of field values if no block specified. * Added support for filtering using regular expressions in postgres dataset. * Added Postgres::Dataset#explain method. * Added Postgres::Dataset#lock method. * Added support for SELECT FOR UPDATE and SELECT FOR SHARE in postgres dataset. * Added db/console.rb example. * Removed join clause from delete and update sql methods. * Added db/threads.rb example. * Added examples directory. * Refactored postgres code for better performance. * Added join capabilities. * Implemented ServerSide::Model class. * Implemented Postgres::Dataset class. * Added Dataset class. * Added Postgres::Database class. * Added basic functionality for ServerSide::Database class, and created lib/db directory for database-related code. * Fixed bug in HTTP::Caching.expiry_tag - the expiration stamp was incorrect (based off stamp instead of Time.now.) * Added documentation for http/caching.rb. * Moved HTTP-related code to lib/http. *0.3.1* * Removed application.rb file and fixed serverside script. * Fixed bug in Caching.validate_stamp where the expiry stamp would be the file stamp + max_age - leading to stale resources. *0.3.0* * Disabled cluster_spec and parts of daemon_spec for now due to strange forking behavior. * Removed static file cache from Static. * Fixed daemon_spec to work correctly. * Removed all tests, moved specs to /spec, and fixed rakefile. * Converted cluster_test to cluster_spec. * Converted daemon_test to daemon_spec. * Updated specs to work with RSpec 0.7. * Changed rake spec task to do coverage as well. * Renamed controller.rb to controllers.rb. * Added String.underscore method. * Renamed ServerSide::Controller.process to response. * Improved HTTP caching code to better conform to the HTTP spec. Also improved the validate_cache method to work without a block as well. * Removed unit tests that were converted to specs. * Router now expects handlers to return non-nil if the request was handled. Otherwise, the request goes to the next handler with an appropriate rule. * Improved spec coverage for caching. * Wrote Server spec. * Wrote Router spec. * Refactored HTTP::Server to allow creating instances without starting them. * Fixed Router.routes_defined? to return non-nil if default route is defined. * Renamed Router.has_routes? to routes_defined?. * Fixed Static.serve_template and Static.serve_static to work correctly (render templates.) * Removed deprecated code in Template.render. * Wrote Static spec. * Fixed bug in serverside script - wrong call to route_default instead of default_route. * Refactored ServerSide::Template and wrote template spec. * Added documentation to Controller. * Fixed Controller.mount to build a self.inherited method, and do the routing there. ==0.2.9 * Improved rake clean task. * Added HTTP::Request.send_file method. * Added basic rendering capabilities to ServerSide::Controller. * Added support for lambda rules in ServerSide::Controller.mount. * Start work on controller class. * Renamed Router.route_default to default_route. * Fixed small errors in documentation. * Changed ServerSide::Static.serve_static to look for index.html inside directory before serving the directory. * Added HTTP::Caching.cache_etags and cache_stamp methods. * Fixed bug in doc_rforge rake task. * Rewrote request unit test into request spec. ==0.2.8 * Refactored ServerSide::Static to use HTTP::Caching code. * Added spec coverage rake task. * Added HTTP::Caching module. * Added response_headers attribute to HTTP::Request. * Refactored ServerSide::Static constants. * Renamed ServerSide::StaticFiles to ServerSide::Static. * Added static_server.rb script. ==0.2.7 * Wrote spec for HTTP::Connection. * Added spec files to rake stats reporting. * Changed @conn to @socket in both HTTP::Connection and HTTP::Request for better readability. * Wrote functional test for request body (but at least some of the testing should be in a unit test.) * Added request body parsing (both URL-encoded and multipart.) * Moved all HTTP::Const constants into HTTP::Request. * Added Date to response headers. This is needed for caching to work correctly. * Fixed bug in serverside script that caused an exception when specifying port number. ==0.2.6 * Refactored HTTP-related code into a new HTTP::Request class and a simplified HTTP::Connection. * Another small change to docs. * Fixed small error in Rakefile that prevented doc_rforge task from updating the docs. * Fixed minor documentation error. ==0.2.5 * Added template serving to static file module. * Wrote a simple ERB template system. * More documentation tweaks. * Changed how response cookies are formatted for somewhat better performance. * Updated documentation. * Removed deprecated code in lib/serverside/application.rb. * Added HTTP cookie functionality (parse, set and delete.) * Updated rakefile to include a spec task, as well as an rcov task. Updated test task to include spec and rcov tasks. * Started writing RSpec tests. This looks like a very interesting concept. * Added /test/spec directory. ==0.2.0 * Updated RFuzz script to work, but it doesn't still do anything interesting. * Added a serve command to serverside script. * Changed substition of embedded parameters from (.*) to (.+). * Added rule compilation after setting the default handler. * Added doc_rforge rake task (for updating the docs on rubyforge.org). * Added stats and svn_add rake tasks. * Fixed routing unit tests. * Added Router.has_routes? method. * Finished unit tests for routing. * Added Connection::Base.redirect. * Added routing code from /research/routing, implemented functional test. * Learned about the (?:) modifier and fixed the request parsing regexp. * Added a profiled version of a static server - /test/functional/static_profile.rb. * Added freezing of HTTP headers. * Small change to documentation. * Changed filename for cluster pid file to serverside_cluster.pid. * Added documentation. * Fixed require in serverside script to load the gem. * Fixed the Daemon pid file for static file server mode. * Added directory listing to static file server. * Fixed request header parsing Regexp so a trailing slash would be ignored. * Added static application. Using the binary script in static mode works. * Added cluster class with unit tests. * Added unit tests for static server. * Added static server functional test. * Added static file serving code. * Renamed ServerSide::Request to ServerSide::Connection. This is more appropriate. * Added functional static server test. * Added test/functional for functional tests. Updated Rakefile. * Added Request.send_response and stream. * Added faster Symbol.to_s to core_ext. * Added HTTP parsing code with unit tests. * More unit tests for application code. * Basic server code works with unit tests. * Added option parsing to serverside script. * Added daemon code and unit tests. ==0.1 * Added host attribute to Controller::Request. * Added ability to create rules on any request attribute, not just path. * Added ability to mount controllers with a block for a rule. * Wrote object extensions to create frozen constants on the fly. * Changed DirHandler to use frozen strings for cache header. * Hooked Mongrel server to Controller::Router. * Imported request code with unit tests. * Wrote unit tests for daemon module. * Wrote unit tests for controller routing code. * Refactored controller routing code. * Imported unit tests for extensions. * Created Rakefile. * Prototypical routing code. * Fixed location of daemon pid files. * Imported Mongrel code from Reality project. * Imported extensions from Reality project. * Implemented daemon and server cluster.