slick 0.16.3 → 0.17.0
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.
- checksums.yaml +4 -4
- data/.gitignore +7 -8
- data/.slick +0 -0
- data/.travis.yml +3 -5
- data/LICENSE +20 -0
- data/README.md +3 -32
- data/Rakefile +1 -0
- data/config.rb +8 -0
- data/config.ru +4 -0
- data/exe/slick +8 -0
- data/lib/slick.rb +50 -3
- data/lib/slick/command.rb +29 -0
- data/lib/slick/commands/create_database.rb +9 -0
- data/lib/slick/commands/drop_database.rb +9 -0
- data/lib/slick/commands/init_database.rb +9 -0
- data/lib/slick/commands/list_commands.rb +14 -0
- data/lib/slick/commands/migrate_database.rb +9 -0
- data/lib/slick/commands/reset_database.rb +10 -0
- data/lib/slick/commands/start_console.rb +14 -0
- data/lib/slick/commands/start_server.rb +14 -0
- data/lib/slick/concern.rb +19 -0
- data/lib/slick/database.rb +168 -0
- data/lib/slick/database/abstract_row.rb +13 -0
- data/lib/slick/database/column.rb +64 -0
- data/lib/slick/database/migration.rb +36 -0
- data/lib/slick/database/migrator.rb +67 -0
- data/lib/slick/database/row.rb +127 -0
- data/lib/slick/database/table.rb +381 -0
- data/lib/slick/database/union.rb +86 -0
- data/lib/slick/helper.rb +24 -0
- data/lib/slick/helpers.rb +4 -0
- data/lib/slick/helpers/dir.rb +6 -0
- data/lib/slick/helpers/echo.rb +6 -0
- data/lib/slick/helpers/grab.rb +10 -0
- data/lib/slick/helpers/html_builder.rb +180 -0
- data/lib/slick/helpers/text_builder.rb +22 -0
- data/lib/slick/monkey_patches/html_escape.rb +8 -0
- data/lib/slick/monkey_patches/html_unescape.rb +8 -0
- data/lib/slick/monkey_patches/paramify.rb +11 -0
- data/lib/slick/monkey_patches/pluralize.rb +8 -0
- data/lib/slick/monkey_patches/require_all.rb +18 -0
- data/lib/slick/monkey_patches/singularize.rb +8 -0
- data/lib/slick/monkey_patches/url_encode.rb +8 -0
- data/lib/slick/monkey_patches/url_escape.rb +8 -0
- data/lib/slick/monkey_patches/url_unescape.rb +8 -0
- data/lib/slick/project.rb +53 -0
- data/lib/slick/project_watcher.rb +36 -0
- data/lib/slick/registry.rb +39 -0
- data/lib/slick/request.rb +6 -0
- data/lib/slick/resource_factories/config.rb +14 -0
- data/lib/slick/resource_factories/database.rb +6 -0
- data/lib/slick/resource_factories/database_schema_cache.rb +6 -0
- data/lib/slick/resource_factories/database_session_cache.rb +6 -0
- data/lib/slick/resource_factories/env.rb +14 -0
- data/lib/slick/resource_factories/environment.rb +6 -0
- data/lib/slick/resource_factories/file.rb +6 -0
- data/lib/slick/resource_factories/params.rb +6 -0
- data/lib/slick/resource_factories/project.rb +6 -0
- data/lib/slick/resource_factories/request.rb +6 -0
- data/lib/slick/resource_factories/response.rb +6 -0
- data/lib/slick/resource_factories/web.rb +11 -0
- data/lib/slick/resource_factory.rb +35 -0
- data/lib/slick/resource_provider.rb +51 -0
- data/lib/slick/response.rb +14 -0
- data/lib/slick/util.rb +72 -0
- data/lib/slick/util/inflections.rb +122 -0
- data/lib/slick/util/params_hash.rb +38 -0
- data/lib/slick/version.rb +1 -1
- data/lib/slick/web.rb +4 -0
- data/lib/slick/web/dir.rb +92 -0
- data/lib/slick/web/file.rb +66 -0
- data/lib/slick/web/file_interpreter.rb +24 -0
- data/lib/slick/web/file_interpreters/erb.rb +33 -0
- data/lib/slick/web/file_interpreters/js.rb +17 -0
- data/lib/slick/web/file_interpreters/rb.rb +14 -0
- data/lib/slick/web/file_interpreters/sass.rb +30 -0
- data/lib/slick/web/node.rb +35 -0
- data/lib/slick/workspace.rb +8 -0
- data/slick.gemspec +15 -4
- data/web/_layout.erb +13 -0
- data/web/index.erb +7 -0
- data/web/javascripts/index.js +2 -0
- data/web/stylesheets/index.scss +2 -0
- metadata +127 -11
- data/Gemfile.lock +0 -22
- data/bin/console +0 -14
- data/bin/setup +0 -8
| @@ -0,0 +1,86 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            require "slick/registry"
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            class Slick::Database::Union
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                class << self
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                    include Slick::Registry
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                    def register(name, *args)
         | 
| 11 | 
            +
                        super
         | 
| 12 | 
            +
                        Class.new(Slick::Helper){ register name }.define_method "call" do |*args, &block|
         | 
| 13 | 
            +
                            database.send(self.class.name, *args, &block)
         | 
| 14 | 
            +
                        end
         | 
| 15 | 
            +
                    end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    def table_classes
         | 
| 18 | 
            +
                        @table_classes ||= []
         | 
| 19 | 
            +
                    end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                def initialize(database, collections = nil)
         | 
| 24 | 
            +
                    @database = database
         | 
| 25 | 
            +
                    @tables = []
         | 
| 26 | 
            +
                    (collections || self.class.table_classes.map{|table_class| table_class.new(@database)}).each do |table|
         | 
| 27 | 
            +
                        if table.kind_of?(Slick::Database::Union)
         | 
| 28 | 
            +
                            @tables.concat(table.instance_variable_get(:@tables))
         | 
| 29 | 
            +
                        elsif table.kind_of?(Slick::Database::Table)
         | 
| 30 | 
            +
                            @tables << table
         | 
| 31 | 
            +
                        end
         | 
| 32 | 
            +
                    end
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                def +(collection)
         | 
| 36 | 
            +
                    Slick::Database::Union.new(@database, @tables.clone.push(collection))
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                def all(options = {})
         | 
| 40 | 
            +
                    @database.run(_generate_select_sql(options), options)
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                def each(options = {}, &block)
         | 
| 44 | 
            +
                    @database.run(_generate_select_sql(options), options).each(&block)
         | 
| 45 | 
            +
                end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                def explain(options = {})
         | 
| 48 | 
            +
                    @database.send(:_prepare, _generate_select_sql(options))
         | 
| 49 | 
            +
                end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                def inspect
         | 
| 52 | 
            +
                    all
         | 
| 53 | 
            +
                end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                def method_missing(*args, &block)
         | 
| 56 | 
            +
                    Slick::Database::Union.new(@database, @tables.map{|table| table.send(*args, &block)})
         | 
| 57 | 
            +
                end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                private
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                def _generate_select_sql(options = {})
         | 
| 62 | 
            +
                    out = []
         | 
| 63 | 
            +
                    @tables.each do |table|
         | 
| 64 | 
            +
                        out << 'union all' if out.count > 0
         | 
| 65 | 
            +
                        out << table.send(:_generate_select_sql, {
         | 
| 66 | 
            +
                            :column_names => _column_names,
         | 
| 67 | 
            +
                            :order_by => nil,
         | 
| 68 | 
            +
                            :limit => nil
         | 
| 69 | 
            +
                        })
         | 
| 70 | 
            +
                    end
         | 
| 71 | 
            +
                    out
         | 
| 72 | 
            +
                end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                def _column_names
         | 
| 75 | 
            +
                    @_column_names ||= begin
         | 
| 76 | 
            +
                        out = []
         | 
| 77 | 
            +
                        @tables.each do |table|
         | 
| 78 | 
            +
                            table.columns.keys.each do |column_name|
         | 
| 79 | 
            +
                                out << column_name if !out.include?(table)
         | 
| 80 | 
            +
                            end
         | 
| 81 | 
            +
                        end
         | 
| 82 | 
            +
                        out
         | 
| 83 | 
            +
                    end
         | 
| 84 | 
            +
                end
         | 
| 85 | 
            +
             | 
| 86 | 
            +
            end
         | 
    
        data/lib/slick/helper.rb
    ADDED
    
    | @@ -0,0 +1,24 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            require "slick/registry"
         | 
| 3 | 
            +
            require "slick/helpers"
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            class Slick::Helper
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                class << self
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                    include Slick::Registry
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    def register(name)
         | 
| 12 | 
            +
                        super
         | 
| 13 | 
            +
                        Slick::Helpers.class_eval("def #{name}(*args, &block); ::Slick::Helper.create(\"#{name}\").call(*args, &block); end")
         | 
| 14 | 
            +
                    end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                include Slick::Helpers
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                def call(*args, &block)
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            end
         | 
| @@ -0,0 +1,10 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            require "slick/helpers"
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            Slick::Helpers.define_method :grab do |&block|
         | 
| 5 | 
            +
                previous_response = Slick.resource_provider["response"]
         | 
| 6 | 
            +
                out = Slick.resource_provider["response"] = Slick::ResourceFactory.create("response").create
         | 
| 7 | 
            +
                block.call
         | 
| 8 | 
            +
                Slick.resource_provider["response"] = previous_response
         | 
| 9 | 
            +
                out
         | 
| 10 | 
            +
            end
         | 
| @@ -0,0 +1,180 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            require "slick/helpers"
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module Slick::Helpers
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                def text(stringable)
         | 
| 7 | 
            +
                    echo stringable.html_escape
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                SELF_CLOSING_TAGS = [
         | 
| 11 | 
            +
                    'area',
         | 
| 12 | 
            +
                    'base',
         | 
| 13 | 
            +
                    'br',
         | 
| 14 | 
            +
                    'embed',
         | 
| 15 | 
            +
                    'hr',
         | 
| 16 | 
            +
                    'iframe',
         | 
| 17 | 
            +
                    'img',
         | 
| 18 | 
            +
                    'input',
         | 
| 19 | 
            +
                    'link',
         | 
| 20 | 
            +
                    'meta',
         | 
| 21 | 
            +
                    'param',
         | 
| 22 | 
            +
                    'source',
         | 
| 23 | 
            +
                    'track'
         | 
| 24 | 
            +
                ]
         | 
| 25 | 
            +
                
         | 
| 26 | 
            +
                TEXT_ONLY_TAGS = [
         | 
| 27 | 
            +
                    'script',
         | 
| 28 | 
            +
                    'style'
         | 
| 29 | 
            +
                ]
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                def html_tag(name, *args, &block)
         | 
| 32 | 
            +
                    name = name.to_s.downcase
         | 
| 33 | 
            +
                    echo "<#{name.html_escape}"
         | 
| 34 | 
            +
                    if args.last.kind_of?(Hash) 
         | 
| 35 | 
            +
                        attributes = args.pop
         | 
| 36 | 
            +
                        attributes.each do |name, value|
         | 
| 37 | 
            +
                            echo " #{name.html_escape}=\"#{value.html_escape}\""
         | 
| 38 | 
            +
                        end
         | 
| 39 | 
            +
                    end
         | 
| 40 | 
            +
                    echo ">"
         | 
| 41 | 
            +
                    if !SELF_CLOSING_TAGS.include?(name)
         | 
| 42 | 
            +
                        if args.first
         | 
| 43 | 
            +
                            content = args.shift
         | 
| 44 | 
            +
                            if TEXT_ONLY_TAGS.include?(name)
         | 
| 45 | 
            +
                                echo content
         | 
| 46 | 
            +
                            else
         | 
| 47 | 
            +
                                text content
         | 
| 48 | 
            +
                            end
         | 
| 49 | 
            +
                        end
         | 
| 50 | 
            +
                        block.call if block
         | 
| 51 | 
            +
                        echo "</#{name.html_escape}>"
         | 
| 52 | 
            +
                    end
         | 
| 53 | 
            +
                    nil
         | 
| 54 | 
            +
                end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                TAGS = [
         | 
| 57 | 
            +
                    "html",
         | 
| 58 | 
            +
                    "a",
         | 
| 59 | 
            +
                    "abbr",
         | 
| 60 | 
            +
                    "address",
         | 
| 61 | 
            +
                    "area",
         | 
| 62 | 
            +
                    "article",
         | 
| 63 | 
            +
                    "aside",
         | 
| 64 | 
            +
                    "audio",
         | 
| 65 | 
            +
                    "b",
         | 
| 66 | 
            +
                    "base",
         | 
| 67 | 
            +
                    "bdi",
         | 
| 68 | 
            +
                    "bdo",
         | 
| 69 | 
            +
                    "blockquote",
         | 
| 70 | 
            +
                    "body",
         | 
| 71 | 
            +
                    "br",
         | 
| 72 | 
            +
                    "button",
         | 
| 73 | 
            +
                    "canvas",
         | 
| 74 | 
            +
                    "caption",
         | 
| 75 | 
            +
                    "cite",
         | 
| 76 | 
            +
                    "code",
         | 
| 77 | 
            +
                    "col",
         | 
| 78 | 
            +
                    "colgroup",
         | 
| 79 | 
            +
                    "content",
         | 
| 80 | 
            +
                    "data",
         | 
| 81 | 
            +
                    "datalist",
         | 
| 82 | 
            +
                    "dd",
         | 
| 83 | 
            +
                    "del",
         | 
| 84 | 
            +
                    "details",
         | 
| 85 | 
            +
                    "dfn",
         | 
| 86 | 
            +
                    "dialog",
         | 
| 87 | 
            +
                    "div",
         | 
| 88 | 
            +
                    "dl",
         | 
| 89 | 
            +
                    "dt",
         | 
| 90 | 
            +
                    "em",
         | 
| 91 | 
            +
                    "embed",
         | 
| 92 | 
            +
                    "fieldset",
         | 
| 93 | 
            +
                    "figcaption",
         | 
| 94 | 
            +
                    "figure",
         | 
| 95 | 
            +
                    "footer",
         | 
| 96 | 
            +
                    "form",
         | 
| 97 | 
            +
                    "h1",
         | 
| 98 | 
            +
                    "h2",
         | 
| 99 | 
            +
                    "h3",
         | 
| 100 | 
            +
                    "h4",
         | 
| 101 | 
            +
                    "h5",
         | 
| 102 | 
            +
                    "h6",
         | 
| 103 | 
            +
                    "head",
         | 
| 104 | 
            +
                    "header",
         | 
| 105 | 
            +
                    "hr",
         | 
| 106 | 
            +
                    "html",
         | 
| 107 | 
            +
                    "i",
         | 
| 108 | 
            +
                    "iframe",
         | 
| 109 | 
            +
                    "img",
         | 
| 110 | 
            +
                    "input",
         | 
| 111 | 
            +
                    "ins",
         | 
| 112 | 
            +
                    "kbd",
         | 
| 113 | 
            +
                    "keygen",
         | 
| 114 | 
            +
                    "label",
         | 
| 115 | 
            +
                    "legend",
         | 
| 116 | 
            +
                    "li",
         | 
| 117 | 
            +
                    "link",
         | 
| 118 | 
            +
                    "main",
         | 
| 119 | 
            +
                    "map",
         | 
| 120 | 
            +
                    "mark",
         | 
| 121 | 
            +
                    "menu",
         | 
| 122 | 
            +
                    "menuitem",
         | 
| 123 | 
            +
                    "meta",
         | 
| 124 | 
            +
                    "meter",
         | 
| 125 | 
            +
                    "nav",
         | 
| 126 | 
            +
                    "noscript",
         | 
| 127 | 
            +
                    "object",
         | 
| 128 | 
            +
                    "ol",
         | 
| 129 | 
            +
                    "optgroup",
         | 
| 130 | 
            +
                    "option",
         | 
| 131 | 
            +
                    "output",
         | 
| 132 | 
            +
                    "p",
         | 
| 133 | 
            +
                    "param",
         | 
| 134 | 
            +
                    "picture",
         | 
| 135 | 
            +
                    "pre",
         | 
| 136 | 
            +
                    "progress",
         | 
| 137 | 
            +
                    "q",
         | 
| 138 | 
            +
                    "rp",
         | 
| 139 | 
            +
                    "rt",
         | 
| 140 | 
            +
                    "rtc",
         | 
| 141 | 
            +
                    "ruby",
         | 
| 142 | 
            +
                    "s",
         | 
| 143 | 
            +
                    "samp",
         | 
| 144 | 
            +
                    "script",
         | 
| 145 | 
            +
                    "section",
         | 
| 146 | 
            +
                    "select",
         | 
| 147 | 
            +
                    "shadow",
         | 
| 148 | 
            +
                    "slot",
         | 
| 149 | 
            +
                    "small",
         | 
| 150 | 
            +
                    "source",
         | 
| 151 | 
            +
                    "span",
         | 
| 152 | 
            +
                    "strong",
         | 
| 153 | 
            +
                    "style",
         | 
| 154 | 
            +
                    "sub",
         | 
| 155 | 
            +
                    "summary",
         | 
| 156 | 
            +
                    "sup",
         | 
| 157 | 
            +
                    "table",
         | 
| 158 | 
            +
                    "tbody",
         | 
| 159 | 
            +
                    "td",
         | 
| 160 | 
            +
                    "template",
         | 
| 161 | 
            +
                    "textarea",
         | 
| 162 | 
            +
                    "tfoot",
         | 
| 163 | 
            +
                    "th",
         | 
| 164 | 
            +
                    "thead",
         | 
| 165 | 
            +
                    "time",
         | 
| 166 | 
            +
                    "title",
         | 
| 167 | 
            +
                    "tr",
         | 
| 168 | 
            +
                    "track",
         | 
| 169 | 
            +
                    "u",
         | 
| 170 | 
            +
                    "ul",
         | 
| 171 | 
            +
                    "var",
         | 
| 172 | 
            +
                    "video",
         | 
| 173 | 
            +
                    "wbr"
         | 
| 174 | 
            +
                ]
         | 
| 175 | 
            +
             | 
| 176 | 
            +
                TAGS.each do |name|
         | 
| 177 | 
            +
                    class_eval("def #{name}(*args, &block); html_tag(\"#{name}\", *args, &block); end")
         | 
| 178 | 
            +
                end
         | 
| 179 | 
            +
             | 
| 180 | 
            +
            end
         | 
| @@ -0,0 +1,22 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            require "slick/helpers"
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module Slick::Helpers
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                def line(stringable = "")
         | 
| 7 | 
            +
                    if response.body.length > 0
         | 
| 8 | 
            +
                        echo "\n#{stringable}"
         | 
| 9 | 
            +
                    else
         | 
| 10 | 
            +
                        echo stringable
         | 
| 11 | 
            +
                    end
         | 
| 12 | 
            +
                    nil
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                def indent(&block)
         | 
| 16 | 
            +
                    grab(&block).to_s.split(/\n/).each do |stringable|
         | 
| 17 | 
            +
                        line "  #{stringable}"
         | 
| 18 | 
            +
                    end
         | 
| 19 | 
            +
                    nil
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            end
         | 
| @@ -0,0 +1,18 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            module Kernel
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                def require_all(path)
         | 
| 5 | 
            +
                    $LOAD_PATH.each do |current_load_path|
         | 
| 6 | 
            +
                        candidate_path = "#{current_load_path}/#{path}"
         | 
| 7 | 
            +
                        require path if File.exist?("#{candidate_path}.rb") || File.exist?("#{candidate_path}.ruby")
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                        if Dir.exist?(candidate_path)
         | 
| 10 | 
            +
                            Dir.open(candidate_path).sort.each do |item|
         | 
| 11 | 
            +
                                item = item.sub(/(\.[^\.]+)$/, '')
         | 
| 12 | 
            +
                                require_all("#{path}/#{item}") if item != '..' && item != '.'
         | 
| 13 | 
            +
                            end
         | 
| 14 | 
            +
                        end
         | 
| 15 | 
            +
                    end
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            end
         |