Giter Club home page Giter Club logo

iowa's Introduction

IOWA v1.0.0

History

IOWA is a web development framework for Ruby. The name is an acronym for Internet Objects for Web Applications. It started life in 2001 as a proof of concept idea written by Avi Bryant. In 2002, it was taken over by Kirk Haines and developed into a framework suitable for production application use. In the intervening years, it is has been used on hundreds of production applications.

What Is It?

IOWA is a web development framework that, while providing all of the typical tools for request parsing, response generation, and separation of concerns between views, controllers, and models, it also provides a facility for simplifying the job of state management in an application by making it transparent. Applications can set state during one request/response cycle, and that state will still exist on the following request/response cycle.

Copyright 2002-2017 Kirk Haines Copyright 2001, 2002 Avi Bryant

iowa's People

Contributors

wyhaines avatar swsch avatar

Stargazers

Nick Schwaderer avatar Stéphane ZÉ-OGIER avatar George N. Kostov avatar Angus H. avatar  avatar Tegan Rauh avatar william avatar Vlad Semenov avatar Arnau Siches avatar Brian Sam-Bodden avatar  avatar Deepak Kannan avatar Grant Austin avatar Ben Oakes avatar Alex Semyonov avatar Mike Pence avatar Aman Gupta Karmani avatar Grant Hutchins avatar ubii avatar Coty Rosenblath avatar Olle Jonsson avatar

Watchers

 avatar  avatar James Cloos avatar  avatar

Forkers

joclerc swsch

iowa's Issues

Uploading multiple image files

One of my IOWA apps has been running for over 12 years now, with only minor hiccups during the upgrade from ruby 1.8 to 2.6.

A recent feature request includes the capability to upload images, which I tried to implement via a <input type="file" name="upload" multiple ...> form field. However, the WEBrick request handler explicitly joins multiple form values for the same form field into a single string (src/iowa/request/WEBrick.rb, around line 25) using \0 as separator.

Not good for binary content.

I've managed to find an extremely ugly way around this, but I wonder if there is a smart way to get multiple files uploaded via a single input field.

Util.rb needs StringExtensions.rb for snake_case

Had to change ruby versions from 3.0 to 3.1 due to upcoming openssl-1.1.1 EOL.
IOWA still performs admirably, after all these years.

Minor hiccup: After upgrading ruby and with a "fresh" IOWA gem, my app failed to launch:

 $ ruby isys.rb
/home/isys/.gem/ruby/3.1.0/gems/IOWA-1.0.3/src/iowa/Util.rb:284:in `block in find_class': undefined method `snake_case' for "RubyLogger"
:String (NoMethodError)

        x.push piece.snake_case if piece != piece.snake_case
                                                 ^^^^^^^^^^^
        from /home/isys/.gem/ruby/3.1.0/gems/IOWA-1.0.3/src/iowa/Util.rb:282:in `each'
        from /home/isys/.gem/ruby/3.1.0/gems/IOWA-1.0.3/src/iowa/Util.rb:282:in `find_class'
        from /home/isys/.gem/ruby/3.1.0/gems/IOWA-1.0.3/src/iowa/Util.rb:233:in `get_logger'
        from /home/isys/.gem/ruby/3.1.0/gems/IOWA-1.0.3/src/iowa/Application.rb:309:in `Logger='
        from /home/isys/.gem/ruby/3.1.0/gems/IOWA-1.0.3/src/iowa/Application.rb:334:in `initialize'
        from isys.rb:88:in `initialize'
        from /home/isys/.gem/ruby/3.1.0/gems/IOWA-1.0.3/src/iowa/Application.rb:61:in `new'
        from /home/isys/.gem/ruby/3.1.0/gems/IOWA-1.0.3/src/iowa/Application.rb:61:in `newApplication'
        from /home/isys/.gem/ruby/3.1.0/gems/IOWA-1.0.3/src/iowa.rb:532:in `app'
        from /home/isys/.gem/ruby/3.1.0/gems/IOWA-1.0.3/src/iowa.rb:62:in `startDaemon'
        from /home/isys/.gem/ruby/3.1.0/gems/IOWA-1.0.3/src/iowa.rb:470:in `run_check_started'
        from /home/isys/.gem/ruby/3.1.0/gems/IOWA-1.0.3/src/iowa_webrick.rb:139:in `run'
        from isys.rb:147:in `<main>'                                          

I inserted a require 'iowa/Extensions/String' before the require 'iowa' and the app started again. Not the correct place, but it works. I'm not sure if it has something to with ruby 3.1 or if I somehow tweaked it for ruby 3.0, too.

content-length uses length instead of bytesize

I've been staring at that HTML source for a while until I noticed that there were exactly as many bytes missing at the end as there were umlauts (2 bytes in UTF-8) encoding on that page. Tracked it down to the webrick handler setting the Content-Length response based on response.body.length instead of response.body.bytesize.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.