slick 0.16.3 → 0.17.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|