webink 1.3.2 → 1.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/rfcgi +9 -6
- data/lib/webink.rb +0 -0
- data/lib/webink/beauty.rb +0 -0
- data/lib/webink/controller.rb +10 -9
- data/lib/webink/database.rb +25 -5
- data/lib/webink/model.rb +69 -27
- metadata +45 -42
    
        data/bin/rfcgi
    CHANGED
    
    | @@ -48,6 +48,9 @@ FCGI.each_cgi do |cgi| | |
| 48 48 | 
             
                control[:config] = Ink::Beauty.load_config script
         | 
| 49 49 | 
             
                control[:time] = time
         | 
| 50 50 | 
             
                control[:cgi] = cgi
         | 
| 51 | 
            +
                control[:env] = ENV
         | 
| 52 | 
            +
                control[:is_production] = is_production
         | 
| 53 | 
            +
                control[:use_errors] = use_errors
         | 
| 51 54 | 
             
                if cgi.env_table['REQUEST_METHOD'] == 'POST'
         | 
| 52 55 | 
             
                  control[:post] = Hash.new
         | 
| 53 56 | 
             
                  cgi.params.each do |k,v|
         | 
| @@ -75,7 +78,7 @@ FCGI.each_cgi do |cgi| | |
| 75 78 | 
             
                fhandle.close
         | 
| 76 79 |  | 
| 77 80 | 
             
              rescue LoadError => bang
         | 
| 78 | 
            -
                if  | 
| 81 | 
            +
                if is_production
         | 
| 79 82 | 
             
                  puts cgi.header({"Location" => "/status-404.html"}) if use_errors
         | 
| 80 83 | 
             
                  error cgi, "NOT_FOUND" if not use_errors
         | 
| 81 84 | 
             
                else
         | 
| @@ -84,7 +87,7 @@ FCGI.each_cgi do |cgi| | |
| 84 87 | 
             
                end
         | 
| 85 88 |  | 
| 86 89 | 
             
              rescue NotImplementedError => bang
         | 
| 87 | 
            -
                if  | 
| 90 | 
            +
                if is_production
         | 
| 88 91 | 
             
                  puts cgi.header({"Location" => "/status-500.html"}) if use_errors
         | 
| 89 92 | 
             
                  error cgi, "SERVER_ERROR" if not use_errors
         | 
| 90 93 | 
             
                else
         | 
| @@ -93,7 +96,7 @@ FCGI.each_cgi do |cgi| | |
| 93 96 | 
             
                end
         | 
| 94 97 |  | 
| 95 98 | 
             
              rescue ArgumentError => bang
         | 
| 96 | 
            -
                if  | 
| 99 | 
            +
                if is_production
         | 
| 97 100 | 
             
                  puts cgi.header({"Location" => "/status-500.html"}) if use_errors
         | 
| 98 101 | 
             
                  error cgi, "SERVER_ERROR" if not use_errors
         | 
| 99 102 | 
             
                else
         | 
| @@ -102,7 +105,7 @@ FCGI.each_cgi do |cgi| | |
| 102 105 | 
             
                end
         | 
| 103 106 |  | 
| 104 107 | 
             
              rescue RuntimeError => bang
         | 
| 105 | 
            -
                if  | 
| 108 | 
            +
                if is_production
         | 
| 106 109 | 
             
                  puts cgi.header({"Location" => "/status-500.html"}) if use_errors
         | 
| 107 110 | 
             
                  error cgi, "SERVER_ERROR" if not use_errors
         | 
| 108 111 | 
             
                else
         | 
| @@ -111,7 +114,7 @@ FCGI.each_cgi do |cgi| | |
| 111 114 | 
             
                end
         | 
| 112 115 |  | 
| 113 116 | 
             
              rescue NameError => bang
         | 
| 114 | 
            -
                if  | 
| 117 | 
            +
                if is_production
         | 
| 115 118 | 
             
                  puts cgi.header({"Location" => "/status-500.html"}) if use_errors
         | 
| 116 119 | 
             
                  error cgi, "SERVER_ERROR" if not use_errors
         | 
| 117 120 | 
             
                else
         | 
| @@ -120,7 +123,7 @@ FCGI.each_cgi do |cgi| | |
| 120 123 | 
             
                end
         | 
| 121 124 |  | 
| 122 125 | 
             
              rescue Exception, StandardError => bang
         | 
| 123 | 
            -
                if  | 
| 126 | 
            +
                if is_production
         | 
| 124 127 | 
             
                  puts cgi.header({"Location" => "/status-500.html"}) if use_errors
         | 
| 125 128 | 
             
                  error cgi, "SERVER_ERROR" if not use_errors
         | 
| 126 129 | 
             
                else
         | 
    
        data/lib/webink.rb
    CHANGED
    
    | 
            File without changes
         | 
    
        data/lib/webink/beauty.rb
    CHANGED
    
    | 
            File without changes
         | 
    
        data/lib/webink/controller.rb
    CHANGED
    
    | @@ -6,12 +6,13 @@ module Ink | |
| 6 6 | 
             
              # 
         | 
| 7 7 | 
             
              # Controllers handle incoming requests and decide what to do
         | 
| 8 8 | 
             
              # with them. A controller has access to all incoming data, like
         | 
| 9 | 
            -
              # POST and GET  | 
| 9 | 
            +
              # POST and GET (through @params[:get] and @params[:post] as
         | 
| 10 | 
            +
              # well as the config.
         | 
| 10 11 | 
             
              #
         | 
| 11 12 | 
             
              #   class App < Ink::Controller
         | 
| 12 13 | 
             
              #     
         | 
| 13 14 | 
             
              #     def index
         | 
| 14 | 
            -
              #       redirect_to :controller => " | 
| 15 | 
            +
              #       redirect_to :controller => "my_app", :module => "feed", :id => 29382374
         | 
| 15 16 | 
             
              #     end
         | 
| 16 17 | 
             
              #     
         | 
| 17 18 | 
             
              #     def feed
         | 
| @@ -27,9 +28,11 @@ module Ink | |
| 27 28 | 
             
              #     
         | 
| 28 29 | 
             
              #   end
         | 
| 29 30 | 
             
              #
         | 
| 30 | 
            -
              # A controller named App should have the filename app.rb  | 
| 31 | 
            -
              #  | 
| 32 | 
            -
              #  | 
| 31 | 
            +
              # A controller named App should have the filename app.rb (note
         | 
| 32 | 
            +
              # that underscores are not allowed: "app".capitalize must be
         | 
| 33 | 
            +
              # the loadable classname) and be placed inside the project
         | 
| 34 | 
            +
              # controller folder. It can have instance methods that are
         | 
| 35 | 
            +
              # usually refered to as modules.
         | 
| 33 36 | 
             
              # So a route should contain at least a :controller and a :module.
         | 
| 34 37 | 
             
              #
         | 
| 35 38 | 
             
              # In the sample above there are three modules, index redirects
         | 
| @@ -211,8 +214,7 @@ module Ink | |
| 211 214 | 
             
                # [returns:] Hyperlink
         | 
| 212 215 | 
             
                def link_to(*args)
         | 
| 213 216 | 
             
                  raise ArgumentError.new("Expects an array.") if not args.instance_of? Array and args.length < 2
         | 
| 214 | 
            -
                  href = "#{@params[:root]}#{(@params[:root][@params[:root].length-1].chr == "/") ? "" : "/"}" | 
| 215 | 
            -
                  href = "/" if @params[:root].length == 0
         | 
| 217 | 
            +
                  href = (@params[:root].length == 0) ? "/" : "#{@params[:root]}#{(@params[:root][@params[:root].length-1].chr == "/") ? "" : "/"}"
         | 
| 216 218 | 
             
                  a = "<a "
         | 
| 217 219 | 
             
                  name = args[0]
         | 
| 218 220 | 
             
                  for i in 1...args.length
         | 
| @@ -238,8 +240,7 @@ module Ink | |
| 238 240 | 
             
                # [param args:] Array of Strings or String
         | 
| 239 241 | 
             
                # [returns:] path
         | 
| 240 242 | 
             
                def path_to(*args)
         | 
| 241 | 
            -
                  href = "#{@params[:root]}#{(@params[:root][@params[:root].length-1].chr == "/") ? "" : "/"}" | 
| 242 | 
            -
                  href = "/" if @params[:root].length == 0
         | 
| 243 | 
            +
                  href = (@params[:root].length == 0) ? "/" : "#{@params[:root]}#{(@params[:root][@params[:root].length-1].chr == "/") ? "" : "/"}"
         | 
| 243 244 |  | 
| 244 245 | 
             
                  if args.is_a? Array
         | 
| 245 246 | 
             
                    for i in 0...args.length
         | 
    
        data/lib/webink/database.rb
    CHANGED
    
    | @@ -39,14 +39,20 @@ module Ink | |
| 39 39 | 
             
              # This is the most basic query, it returns an Array of results,
         | 
| 40 40 | 
             
              # and each element contains a Hash of column_name => column_entry.
         | 
| 41 41 | 
             
              #
         | 
| 42 | 
            -
              # | 
| 43 | 
            -
              # | 
| 42 | 
            +
              # The following methods are convenience methods to access data for
         | 
| 43 | 
            +
              # models. As example a model Apple and its n:1 relation to Tree
         | 
| 44 | 
            +
              # are used. Please note that both class and database table name can
         | 
| 45 | 
            +
              # be used to call the find and related methods. The table name for
         | 
| 46 | 
            +
              # Apple would be "apple"; for MyApple would be "my_apple".
         | 
| 47 | 
            +
              #
         | 
| 48 | 
            +
              #   Ink::Database.database.find "apple", "WHERE id < 10 GROUP BY color"
         | 
| 49 | 
            +
              #   => self.query("SELECT * FROM apple WHERE id < 10 GROUP BY color;")
         | 
| 44 50 | 
             
              #
         | 
| 45 51 | 
             
              # This is different from the query method, because it returns an Array
         | 
| 46 52 | 
             
              # of Objects, created by the information stored in the database. So this
         | 
| 47 53 | 
             
              # find() will return you a set of Apple-instances.
         | 
| 48 54 | 
             
              #
         | 
| 49 | 
            -
              #   Ink::Database.database.find_union "apple", 5, "tree", ""
         | 
| 55 | 
            +
              #   Ink::Database.database.find_union "apple", 5, "tree", "AND tree_id>1"
         | 
| 50 56 | 
             
              #
         | 
| 51 57 | 
             
              # find_union allows you to retrieve data through a many_many reference.
         | 
| 52 58 | 
             
              # When you define a many_many relationship, a helper-table is created
         | 
| @@ -56,16 +62,30 @@ module Ink | |
| 56 62 | 
             
              # by the alphabetically first, and then second classname. The last quotes
         | 
| 57 63 | 
             
              # allow additional query informations to be passed along (like group by)
         | 
| 58 64 | 
             
              #
         | 
| 59 | 
            -
              #   Ink::Database.database. | 
| 65 | 
            +
              #   Ink::Database.database.find_references Tree, 1, Apple, "AND tree_id>1"
         | 
| 60 66 | 
             
              #
         | 
| 61 | 
            -
              #  | 
| 67 | 
            +
              # find_references is similar to find_union, only that it handles all
         | 
| 62 68 | 
             
              # other relationships. This statement above requires one Tree to have many
         | 
| 63 69 | 
             
              # Apples, so it will return an Array of Apples, all those that belong to
         | 
| 64 70 | 
             
              # the Tree with primary key 1
         | 
| 65 71 | 
             
              #
         | 
| 72 | 
            +
              #   Ink::Database.database.find_reference Apple, 5, Tree, ""
         | 
| 73 | 
            +
              #
         | 
| 74 | 
            +
              # find_reference is essentially equal to find_references, yet it returns
         | 
| 75 | 
            +
              # one result of a Tree or nil. This is used when Apple-Tree is a many_one
         | 
| 76 | 
            +
              # or one_one relationship. It saves the need for the result Array from
         | 
| 77 | 
            +
              # find_references.
         | 
| 78 | 
            +
              #
         | 
| 66 79 | 
             
              # Please close the dbinstance once you are done. This is automatically
         | 
| 67 80 | 
             
              # inserted in the init.rb of a project.
         | 
| 68 81 | 
             
              #
         | 
| 82 | 
            +
              # == Convenience methods
         | 
| 83 | 
            +
              #
         | 
| 84 | 
            +
              #   Database.format_date(Time.now)
         | 
| 85 | 
            +
              #
         | 
| 86 | 
            +
              # This will return a date in the form of 2012-11-20 10:00:02 and takes a Time
         | 
| 87 | 
            +
              # instance.
         | 
| 88 | 
            +
              #
         | 
| 69 89 | 
             
              # 
         | 
| 70 90 | 
             
              #
         | 
| 71 91 | 
             
              class Database
         | 
    
        data/lib/webink/model.rb
    CHANGED
    
    | @@ -12,7 +12,7 @@ module Ink | |
| 12 12 | 
             
              # The constructor checks, if there are class methods 'fields'
         | 
| 13 13 | 
             
              # and 'foreign' defined. If that check is positive, it will
         | 
| 14 14 | 
             
              # match the parameter Hash to the fields, that are set for
         | 
| 15 | 
            -
              # the database, and  | 
| 15 | 
            +
              # the database, and throw an exception if fields is lacking
         | 
| 16 16 | 
             
              # an entry (excluded the primary key). The other case just
         | 
| 17 17 | 
             
              # creates an Apple with the Hash as instance variables.
         | 
| 18 18 | 
             
              #
         | 
| @@ -22,14 +22,12 @@ module Ink | |
| 22 22 | 
             
              # methods are automatically added for either the Hash, or
         | 
| 23 23 | 
             
              # the fields and foreign keys.
         | 
| 24 24 | 
             
              #
         | 
| 25 | 
            -
              #   apple.tree = nil
         | 
| 26 25 | 
             
              #   apple.save
         | 
| 27 26 | 
             
              #
         | 
| 28 27 | 
             
              # You can save your apple by using the save method. New instances
         | 
| 29 28 | 
             
              # will create a new row in the database, and update its primary
         | 
| 30 | 
            -
              # key. Old instances just update the fields. Relationships | 
| 31 | 
            -
              #  | 
| 32 | 
            -
              # the save method will not touch relationships.
         | 
| 29 | 
            +
              # key. Old instances just update the fields. Relationships are set
         | 
| 30 | 
            +
              # to nil by default and will not be touched while nil.
         | 
| 33 31 | 
             
              #
         | 
| 34 32 | 
             
              #   treeinstance.apple = [1,2,myapple]
         | 
| 35 33 | 
             
              #   treeinstance.save
         | 
| @@ -47,6 +45,13 @@ module Ink | |
| 47 45 | 
             
              # themselves, so you must fetch all related data, and delete them by
         | 
| 48 46 | 
             
              # 'hand' if you will.
         | 
| 49 47 | 
             
              #
         | 
| 48 | 
            +
              #   treeinstance.find_references Apple
         | 
| 49 | 
            +
              #
         | 
| 50 | 
            +
              # This convenience method finds all apples for this tree and makes
         | 
| 51 | 
            +
              # them available in the accessor. If the Tree-Apple relationship is
         | 
| 52 | 
            +
              # a *_one, then there is only one object in the accessor, otherwise
         | 
| 53 | 
            +
              # an Array of objects.
         | 
| 54 | 
            +
              #
         | 
| 50 55 | 
             
              #
         | 
| 51 56 | 
             
              # = Fields and foreign sample config
         | 
| 52 57 | 
             
              #
         | 
| @@ -78,6 +83,37 @@ module Ink | |
| 78 83 | 
             
              # many_many, many_one]
         | 
| 79 84 | 
             
              # Obviously the Tree class requires a foreign with "Apple"
         | 
| 80 85 | 
             
              # mapped to "many_one" to match this schema.
         | 
| 86 | 
            +
              # 
         | 
| 87 | 
            +
              # You can override the automatically generated getters and
         | 
| 88 | 
            +
              # setters in any Model class you create by just redefining
         | 
| 89 | 
            +
              # the methods.
         | 
| 90 | 
            +
              #
         | 
| 91 | 
            +
              # == Convenience methods
         | 
| 92 | 
            +
              #
         | 
| 93 | 
            +
              #   self.primary_key
         | 
| 94 | 
            +
              #   self.foreign_key
         | 
| 95 | 
            +
              #
         | 
| 96 | 
            +
              # Both return an Array of length 2, where the second entry
         | 
| 97 | 
            +
              # is the type and the first for primary_key is the name of
         | 
| 98 | 
            +
              # the primary key (default "id"). The foreign_key has a
         | 
| 99 | 
            +
              # combination of "classname"_"primary_key" (i.e. "apple_id")
         | 
| 100 | 
            +
              #
         | 
| 101 | 
            +
              #   self.class_name
         | 
| 102 | 
            +
              #
         | 
| 103 | 
            +
              # Equivalent to class.name
         | 
| 104 | 
            +
              #
         | 
| 105 | 
            +
              #   self.table_name
         | 
| 106 | 
            +
              #
         | 
| 107 | 
            +
              # Generates a table representation of the class. (Apple as
         | 
| 108 | 
            +
              # "apple" and MyApple as "my_apple")
         | 
| 109 | 
            +
              #
         | 
| 110 | 
            +
              #   self.str_to_classname(str)
         | 
| 111 | 
            +
              #
         | 
| 112 | 
            +
              # Converts a table name to class name. This method takes a string.
         | 
| 113 | 
            +
              #
         | 
| 114 | 
            +
              #   self.str_to_tablename(str)
         | 
| 115 | 
            +
              #
         | 
| 116 | 
            +
              # Converts a class name to table name. This method takes a string.
         | 
| 81 117 | 
             
              #
         | 
| 82 118 | 
             
              #
         | 
| 83 119 | 
             
              #
         | 
| @@ -93,7 +129,7 @@ module Ink | |
| 93 129 | 
             
                def initialize(data)
         | 
| 94 130 | 
             
                  if self.class.respond_to? :fields
         | 
| 95 131 | 
             
                    self.class.fields.each do |k,v|
         | 
| 96 | 
            -
                      raise NameError.new("Model cannot use #{k} as field, it  | 
| 132 | 
            +
                      raise NameError.new("Model cannot use #{k} as field, it is blocked by primary key") if k.to_s.downcase == "pk"
         | 
| 97 133 | 
             
                      raise LoadError.new("Model cannot be loaded, argument missing: #{k}") if not data.key?(k.to_s) and self.class.primary_key[0] != k
         | 
| 98 134 | 
             
                      entry = nil
         | 
| 99 135 | 
             
                      if data[k.to_s].nil?
         | 
| @@ -107,21 +143,25 @@ module Ink | |
| 107 143 | 
             
                      end
         | 
| 108 144 | 
             
                      instance_variable_set("@#{k}", entry)
         | 
| 109 145 |  | 
| 110 | 
            -
                      self. | 
| 111 | 
            -
                         | 
| 146 | 
            +
                      if not self.respond_to? k
         | 
| 147 | 
            +
                        self.class.send(:define_method, k) do
         | 
| 148 | 
            +
                          instance_variable_get "@#{k}"
         | 
| 149 | 
            +
                        end
         | 
| 112 150 | 
             
                      end
         | 
| 113 151 | 
             
                      if self.class.primary_key[0] != k
         | 
| 114 | 
            -
                        self. | 
| 115 | 
            -
                           | 
| 116 | 
            -
                             | 
| 117 | 
            -
             | 
| 118 | 
            -
                             | 
| 119 | 
            -
             | 
| 120 | 
            -
                            val  | 
| 121 | 
            -
             | 
| 122 | 
            -
                             | 
| 152 | 
            +
                        if not self.respond_to? "#{k}="
         | 
| 153 | 
            +
                          self.class.send(:define_method, "#{k}=") do |val|
         | 
| 154 | 
            +
                            if data[k.to_s].nil?
         | 
| 155 | 
            +
                              val = nil
         | 
| 156 | 
            +
                            elsif val.is_a? String
         | 
| 157 | 
            +
                              val = val.gsub(/'/, ''')
         | 
| 158 | 
            +
                            elsif val.is_a? Numeric
         | 
| 159 | 
            +
                              val = val
         | 
| 160 | 
            +
                            else
         | 
| 161 | 
            +
                              val = "\'#{val}\'"
         | 
| 162 | 
            +
                            end
         | 
| 163 | 
            +
                            instance_variable_set "@#{k}", val
         | 
| 123 164 | 
             
                          end
         | 
| 124 | 
            -
                          instance_variable_set "@#{k}", val
         | 
| 125 165 | 
             
                        end
         | 
| 126 166 | 
             
                      else
         | 
| 127 167 | 
             
                        self.class.send(:define_method, "pk") do
         | 
| @@ -132,13 +172,15 @@ module Ink | |
| 132 172 | 
             
                    if self.class.respond_to? :foreign
         | 
| 133 173 | 
             
                      self.class.foreign.each do |k,v|
         | 
| 134 174 | 
             
                        k_table = self.class.str_to_tablename(k)
         | 
| 135 | 
            -
                        raise NameError.new("Model cannot use #{k_table} as foreign, it already exists") if  | 
| 136 | 
            -
                         | 
| 137 | 
            -
             | 
| 138 | 
            -
                           | 
| 139 | 
            -
             | 
| 140 | 
            -
             | 
| 141 | 
            -
                           | 
| 175 | 
            +
                        raise NameError.new("Model cannot use #{k_table} as foreign, it already exists") if k_table == "pk"
         | 
| 176 | 
            +
                        if not self.respond_to? k_table
         | 
| 177 | 
            +
                          instance_variable_set("@#{k_table}", nil)
         | 
| 178 | 
            +
                          self.class.send(:define_method, k_table) do
         | 
| 179 | 
            +
                            instance_variable_get "@#{k_table}"
         | 
| 180 | 
            +
                          end
         | 
| 181 | 
            +
                          self.class.send(:define_method, "#{k_table}=") do |val|
         | 
| 182 | 
            +
                            instance_variable_set "@#{k_table}", val
         | 
| 183 | 
            +
                          end
         | 
| 142 184 | 
             
                        end
         | 
| 143 185 | 
             
                      end
         | 
| 144 186 | 
             
                    end
         | 
| @@ -186,7 +228,7 @@ module Ink | |
| 186 228 | 
             
                  if pkvalue
         | 
| 187 229 | 
             
                    response = Ink::Database.database.find self.class, pkvalue
         | 
| 188 230 | 
             
                    if response.length == 1
         | 
| 189 | 
            -
                      Ink::Database.database.query "UPDATE #{self.class.table_name} SET #{string * ","} #{pkvalue}"
         | 
| 231 | 
            +
                      Ink::Database.database.query "UPDATE #{self.class.table_name} SET #{string * ","} #{pkvalue};"
         | 
| 190 232 | 
             
                    elsif response.length == 0
         | 
| 191 233 | 
             
                      Ink::Database.database.query "INSERT INTO #{self.class.table_name} (#{keystring * ","}) VALUES (#{valuestring * ","});"
         | 
| 192 234 | 
             
                      pk = Ink::Database.database.last_inserted_pk(self.class)
         | 
| @@ -219,7 +261,7 @@ module Ink | |
| 219 261 | 
             
                  end
         | 
| 220 262 |  | 
| 221 263 | 
             
                  pkvalue = instance_variable_get "@#{self.class.primary_key[0]}"
         | 
| 222 | 
            -
                  Ink::Database.database.remove self.class.name, "WHERE `#{self.class.primary_key[0]}`=#{(pkvalue.is_a?(Numeric)) ? pkvalue : "\'#{pkvalue}\'"} | 
| 264 | 
            +
                  Ink::Database.database.remove self.class.name, "WHERE `#{self.class.primary_key[0]}`=#{(pkvalue.is_a?(Numeric)) ? pkvalue : "\'#{pkvalue}\'"}"
         | 
| 223 265 | 
             
                end
         | 
| 224 266 |  | 
| 225 267 | 
             
                # Instance method
         | 
    
        metadata
    CHANGED
    
    | @@ -1,82 +1,85 @@ | |
| 1 | 
            -
            --- !ruby/object:Gem::Specification | 
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: webink
         | 
| 3 | 
            -
            version: !ruby/object:Gem::Version | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 1.3.3
         | 
| 4 5 | 
             
              prerelease: 
         | 
| 5 | 
            -
              version: 1.3.2
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 | 
            -
            authors: | 
| 7 | 
            +
            authors:
         | 
| 8 8 | 
             
            - Matthias Geier
         | 
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 12 | 
            +
            date: 2013-02-19 00:00:00.000000000 Z
         | 
| 13 | 
            +
            dependencies:
         | 
| 14 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 16 15 | 
             
              name: fcgi
         | 
| 17 | 
            -
               | 
| 18 | 
            -
              requirement: &id001 !ruby/object:Gem::Requirement 
         | 
| 16 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 19 17 | 
             
                none: false
         | 
| 20 | 
            -
                requirements: | 
| 21 | 
            -
                - -  | 
| 22 | 
            -
                  - !ruby/object:Gem::Version | 
| 18 | 
            +
                requirements:
         | 
| 19 | 
            +
                - - ! '>='
         | 
| 20 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 23 21 | 
             
                    version: 0.8.8
         | 
| 24 22 | 
             
              type: :runtime
         | 
| 25 | 
            -
              version_requirements: *id001
         | 
| 26 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 27 | 
            -
              name: simple-mmap
         | 
| 28 23 | 
             
              prerelease: false
         | 
| 29 | 
            -
               | 
| 24 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 30 25 | 
             
                none: false
         | 
| 31 | 
            -
                requirements: | 
| 32 | 
            -
                - -  | 
| 33 | 
            -
                  - !ruby/object:Gem::Version | 
| 26 | 
            +
                requirements:
         | 
| 27 | 
            +
                - - ! '>='
         | 
| 28 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 29 | 
            +
                    version: 0.8.8
         | 
| 30 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 31 | 
            +
              name: simple-mmap
         | 
| 32 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 33 | 
            +
                none: false
         | 
| 34 | 
            +
                requirements:
         | 
| 35 | 
            +
                - - ! '>='
         | 
| 36 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 34 37 | 
             
                    version: 1.1.4
         | 
| 35 38 | 
             
              type: :runtime
         | 
| 36 | 
            -
               | 
| 39 | 
            +
              prerelease: false
         | 
| 40 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 41 | 
            +
                none: false
         | 
| 42 | 
            +
                requirements:
         | 
| 43 | 
            +
                - - ! '>='
         | 
| 44 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 45 | 
            +
                    version: 1.1.4
         | 
| 37 46 | 
             
            description: 
         | 
| 38 47 | 
             
            email: 
         | 
| 39 | 
            -
            executables: | 
| 48 | 
            +
            executables:
         | 
| 40 49 | 
             
            - webink_database
         | 
| 41 50 | 
             
            - rfcgi
         | 
| 42 51 | 
             
            extensions: []
         | 
| 43 | 
            -
             | 
| 44 52 | 
             
            extra_rdoc_files: []
         | 
| 45 | 
            -
             | 
| 46 | 
            -
            files: 
         | 
| 53 | 
            +
            files:
         | 
| 47 54 | 
             
            - lib/webink.rb
         | 
| 48 | 
            -
            - lib/webink/ | 
| 55 | 
            +
            - lib/webink/controller.rb
         | 
| 49 56 | 
             
            - lib/webink/database.rb
         | 
| 50 57 | 
             
            - lib/webink/beauty.rb
         | 
| 51 | 
            -
            - lib/webink/ | 
| 52 | 
            -
            - bin/webink_database
         | 
| 58 | 
            +
            - lib/webink/model.rb
         | 
| 53 59 | 
             
            - bin/rfcgi
         | 
| 60 | 
            +
            - bin/webink_database
         | 
| 54 61 | 
             
            homepage: https://github.com/matthias-geier/WebInk
         | 
| 55 62 | 
             
            licenses: []
         | 
| 56 | 
            -
             | 
| 57 63 | 
             
            post_install_message: 
         | 
| 58 64 | 
             
            rdoc_options: []
         | 
| 59 | 
            -
             | 
| 60 | 
            -
            require_paths: 
         | 
| 65 | 
            +
            require_paths:
         | 
| 61 66 | 
             
            - lib
         | 
| 62 | 
            -
            required_ruby_version: !ruby/object:Gem::Requirement | 
| 67 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 63 68 | 
             
              none: false
         | 
| 64 | 
            -
              requirements: | 
| 65 | 
            -
              - -  | 
| 66 | 
            -
                - !ruby/object:Gem::Version | 
| 69 | 
            +
              requirements:
         | 
| 70 | 
            +
              - - ! '>='
         | 
| 71 | 
            +
                - !ruby/object:Gem::Version
         | 
| 67 72 | 
             
                  version: 1.9.3
         | 
| 68 | 
            -
            required_rubygems_version: !ruby/object:Gem::Requirement | 
| 73 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 69 74 | 
             
              none: false
         | 
| 70 | 
            -
              requirements: | 
| 71 | 
            -
              - -  | 
| 72 | 
            -
                - !ruby/object:Gem::Version | 
| 73 | 
            -
                  version:  | 
| 75 | 
            +
              requirements:
         | 
| 76 | 
            +
              - - ! '>='
         | 
| 77 | 
            +
                - !ruby/object:Gem::Version
         | 
| 78 | 
            +
                  version: '0'
         | 
| 74 79 | 
             
            requirements: []
         | 
| 75 | 
            -
             | 
| 76 80 | 
             
            rubyforge_project: 
         | 
| 77 81 | 
             
            rubygems_version: 1.8.23
         | 
| 78 82 | 
             
            signing_key: 
         | 
| 79 83 | 
             
            specification_version: 3
         | 
| 80 84 | 
             
            summary: A minimal web framework.
         | 
| 81 85 | 
             
            test_files: []
         | 
| 82 | 
            -
             |