alf 0.14.0 → 0.15.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +6 -3
- data/Gemfile.lock +65 -19
- data/README.md +77 -183
- data/Rakefile +25 -0
- data/alf.gemspec +5 -3
- data/alf.noespec +8 -6
- data/lib/alf/loader.rb +1 -0
- data/lib/alf/version.rb +1 -1
- data/spec/facade/test_query.rb +12 -0
- data/spec/key-inference/queries.yml +10 -0
- data/spec/key-inference/test_all.rb +21 -0
- data/{test → spec}/migrations/test_folder_migration.rb +0 -0
- data/{test → spec}/migrations/test_sequel_migration.rb +1 -1
- data/spec/operators/ungroup/grouped.json +3 -0
- data/spec/operators/ungroup/test_on_json_content.rb +11 -0
- data/spec/operators/unwrap/test_on_json_content.rb +11 -0
- data/spec/operators/unwrap/wrapped.json +3 -0
- data/spec/optimizer/project/extend.yml +20 -0
- data/spec/optimizer/project/intersect.yml +10 -0
- data/spec/optimizer/project/join.yml +20 -0
- data/spec/optimizer/project/matching.yml +21 -0
- data/spec/optimizer/project/minus.yml +9 -0
- data/spec/optimizer/project/not_matching.yml +21 -0
- data/spec/optimizer/project/project.yml +88 -0
- data/spec/optimizer/project/rename.yml +30 -0
- data/spec/optimizer/project/sort.yml +45 -0
- data/spec/optimizer/project/union.yml +8 -0
- data/spec/optimizer/restrict/clip.yml +4 -0
- data/spec/optimizer/restrict/compact.yml +4 -0
- data/spec/optimizer/restrict/generator.yml +4 -0
- data/spec/optimizer/restrict/intersect.yml +4 -0
- data/spec/optimizer/restrict/leaf_operand.yml +4 -0
- data/spec/optimizer/restrict/minus.yml +4 -0
- data/spec/optimizer/restrict/page.yml +12 -0
- data/spec/optimizer/restrict/project.yml +4 -0
- data/spec/optimizer/restrict/sort.yml +4 -0
- data/spec/optimizer/restrict/union.yml +4 -0
- data/spec/optimizer/test_all.rb +34 -0
- data/spec/sql/helpers.rb +25 -0
- data/spec/sql/queries/01-leaf-operand.yml +5 -0
- data/spec/sql/queries/02-clip.yml +12 -0
- data/spec/sql/queries/03-sort.yml +58 -0
- data/spec/sql/queries/04-frame.yml +57 -0
- data/spec/sql/queries/05-intersect.yml +23 -0
- data/spec/sql/queries/06-join.yml +207 -0
- data/spec/sql/queries/07-matching.yml +76 -0
- data/spec/sql/queries/08-minus.yml +23 -0
- data/spec/sql/queries/09-not-matching.yml +57 -0
- data/spec/sql/queries/10-page.yml +31 -0
- data/spec/sql/queries/11-project.yml +48 -0
- data/spec/sql/queries/12-rename.yml +24 -0
- data/spec/sql/queries/13-restrict.yml +114 -0
- data/spec/sql/queries/15-union.yml +90 -0
- data/spec/sql/queries/16-wrap.yml +3 -0
- data/spec/sql/queries/91-reuse.yml +28 -0
- data/spec/sql/test_sequel_compiler.rb +41 -0
- data/spec/sql/test_sql_compiler.rb +52 -0
- data/{test → spec}/test_alf.rb +0 -0
- data/spec/test_helpers.rb +54 -0
- data/tasks/doc.rake +10 -0
- data/tasks/fixtures.rake +52 -0
- data/tasks/mod.rake +50 -0
- data/tasks/release.rake +34 -0
- data/tasks/test.rake +2 -2
- metadata +150 -19
- data/test/seeding/test_seeding.rb +0 -49
- data/test/test_helpers.rb +0 -24
data/Gemfile
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
source 'http://rubygems.org'
|
2
2
|
|
3
3
|
group :runtime do
|
4
|
-
gem "alf
|
5
|
-
gem "alf-
|
6
|
-
gem "alf-
|
4
|
+
gem "alf", path: "."
|
5
|
+
gem "alf-core", path: "./alf-core"
|
6
|
+
gem "alf-sql", path: "./alf-sql"
|
7
|
+
gem "alf-shell", path: "./alf-shell"
|
8
|
+
gem "alf-sequel", path: "./alf-sequel"
|
9
|
+
gem "alf-rack", path: "./alf-rack"
|
7
10
|
end
|
8
11
|
|
9
12
|
group :test do
|
data/Gemfile.lock
CHANGED
@@ -1,44 +1,90 @@
|
|
1
|
-
|
2
|
-
remote:
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
alf (0.15.0)
|
5
|
+
alf-core (~> 0.15.0)
|
6
|
+
alf-rack (~> 0.15.0)
|
7
|
+
alf-sequel (~> 0.15.0)
|
8
|
+
alf-shell (~> 0.15.0)
|
9
|
+
alf-sql (~> 0.15.0)
|
10
|
+
|
11
|
+
PATH
|
12
|
+
remote: ./alf-core
|
3
13
|
specs:
|
4
|
-
alf-core (0.
|
14
|
+
alf-core (0.15.0)
|
5
15
|
domain (~> 1.0)
|
6
16
|
myrrha (~> 3.0)
|
7
17
|
path (~> 1.3)
|
8
|
-
sexpr (~> 0.
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
18
|
+
sexpr (~> 0.6.0)
|
19
|
+
|
20
|
+
PATH
|
21
|
+
remote: ./alf-rack
|
22
|
+
specs:
|
23
|
+
alf-rack (0.15.0)
|
24
|
+
alf-core (~> 0.15.0)
|
25
|
+
rack (~> 1.5)
|
26
|
+
rack-accept (~> 0.4.5)
|
27
|
+
ruby_cop (~> 1.0)
|
28
|
+
|
29
|
+
PATH
|
30
|
+
remote: ./alf-sequel
|
31
|
+
specs:
|
32
|
+
alf-sequel (0.15.0)
|
33
|
+
alf-core (~> 0.15.0)
|
34
|
+
alf-sql (~> 0.15.0)
|
35
|
+
sequel (~> 4.2)
|
36
|
+
|
37
|
+
PATH
|
38
|
+
remote: ./alf-shell
|
39
|
+
specs:
|
40
|
+
alf-shell (0.15.0)
|
41
|
+
alf-core (~> 0.15.0)
|
14
42
|
quickl (~> 0.4.3)
|
43
|
+
|
44
|
+
PATH
|
45
|
+
remote: ./alf-sql
|
46
|
+
specs:
|
47
|
+
alf-sql (0.15.0)
|
48
|
+
alf-core (~> 0.15.0)
|
49
|
+
sexpr (~> 0.6.0)
|
50
|
+
|
51
|
+
GEM
|
52
|
+
remote: http://rubygems.org/
|
53
|
+
specs:
|
15
54
|
diff-lcs (1.2.4)
|
16
55
|
domain (1.0.0)
|
17
56
|
myrrha (3.0.0)
|
18
57
|
domain (~> 1.0)
|
19
58
|
path (1.3.3)
|
20
|
-
pg (0.
|
59
|
+
pg (0.17.0)
|
21
60
|
quickl (0.4.3)
|
61
|
+
rack (1.5.2)
|
62
|
+
rack-accept (0.4.5)
|
63
|
+
rack (>= 0.4)
|
22
64
|
rake (10.1.0)
|
23
65
|
rspec (2.14.1)
|
24
66
|
rspec-core (~> 2.14.0)
|
25
67
|
rspec-expectations (~> 2.14.0)
|
26
68
|
rspec-mocks (~> 2.14.0)
|
27
|
-
rspec-core (2.14.
|
28
|
-
rspec-expectations (2.14.
|
69
|
+
rspec-core (2.14.7)
|
70
|
+
rspec-expectations (2.14.3)
|
29
71
|
diff-lcs (>= 1.1.3, < 2.0)
|
30
|
-
rspec-mocks (2.14.
|
31
|
-
|
32
|
-
|
33
|
-
|
72
|
+
rspec-mocks (2.14.4)
|
73
|
+
ruby_cop (1.0.5)
|
74
|
+
sequel (4.3.0)
|
75
|
+
sexpr (0.6.0)
|
76
|
+
sqlite3 (1.3.8)
|
34
77
|
|
35
78
|
PLATFORMS
|
36
79
|
ruby
|
37
80
|
|
38
81
|
DEPENDENCIES
|
39
|
-
alf
|
40
|
-
alf-
|
41
|
-
alf-
|
82
|
+
alf!
|
83
|
+
alf-core!
|
84
|
+
alf-rack!
|
85
|
+
alf-sequel!
|
86
|
+
alf-shell!
|
87
|
+
alf-sql!
|
42
88
|
jdbc-sqlite3 (~> 3.7)
|
43
89
|
pg (~> 0.14)
|
44
90
|
rake (~> 10.1)
|
data/README.md
CHANGED
@@ -7,190 +7,84 @@ Relational Algebra at your fingertips
|
|
7
7
|
|
8
8
|
## Links
|
9
9
|
|
10
|
-
* [
|
10
|
+
* [Try it online](http://www.try-alf.org/)
|
11
|
+
* [Official documentation](http://www.try-alf.org/doc/)
|
12
|
+
* [Blog](http://www.try-alf.org/blog/)
|
11
13
|
* [Source and Issues](http://github.com/alf-tool/alf)
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
# Let make some computations on the sub-relations
|
71
|
-
db.query{
|
72
|
-
extend(grouped, how_many: ->{ in_that_city.count },
|
73
|
-
avg_status: ->{ in_that_city.avg{ status } })
|
74
|
-
}
|
75
|
-
# +--------+----------------------------+-----------+-------------+
|
76
|
-
# | :city | :in_that_city | :how_many | :avg_status |
|
77
|
-
# +--------+----------------------------+-----------+-------------+
|
78
|
-
# | London | +------+-------+---------+ | 2 | 20.000 |
|
79
|
-
# | | | :sid | :name | :status | | | |
|
80
|
-
# | | +------+-------+---------+ | | |
|
81
|
-
# | | | S1 | Smith | 20 | | | |
|
82
|
-
# | | | S4 | Clark | 20 | | | |
|
83
|
-
# | | +------+-------+---------+ | | |
|
84
|
-
# | Paris | +------+-------+---------+ | 2 | 20.000 |
|
85
|
-
# | | | :sid | :name | :status | | | |
|
86
|
-
# | | +------+-------+---------+ | | |
|
87
|
-
# | | | S2 | Jones | 10 | | | |
|
88
|
-
# | | | S3 | Blake | 30 | | | |
|
89
|
-
# | | +------+-------+---------+ | | |
|
90
|
-
# | Athens | +------+-------+---------+ | 1 | 30.000 |
|
91
|
-
# | | | :sid | :name | :status | | | |
|
92
|
-
# | | +------+-------+---------+ | | |
|
93
|
-
# | | | S5 | Adams | 30 | | | |
|
94
|
-
# | | +------+-------+---------+ | | |
|
95
|
-
# +--------+----------------------------+-----------+-------------+
|
96
|
-
|
97
|
-
# Now observe that the same result can also be expressed as follows (and can be
|
98
|
-
# optimized more easily)
|
99
|
-
summarized = db.query{
|
100
|
-
summary = summarize(:suppliers, [ :city ], how_many: count, avg_status: avg{ status })
|
101
|
-
join(grouped, summary)
|
102
|
-
}
|
103
|
-
|
104
|
-
# Oh, and of course...
|
105
|
-
require 'json'
|
106
|
-
puts summarized.to_json
|
107
|
-
# [{"city":"London","in_that_city":[{"sid":"S1","name":"Smith","status":20},{"sid":"S4"...
|
108
|
-
|
109
|
-
## Install, bundler, require
|
110
|
-
|
111
|
-
% [sudo] gem install alf [fastercsv, ...]
|
112
|
-
% alf --help
|
113
|
-
|
114
|
-
# API is not considered stable enough for now, please use
|
115
|
-
gem "alf", "= 0.13.0"
|
116
|
-
|
117
|
-
# The following should not break your code, but is a bit less safe,
|
118
|
-
# until 1.0.0 has been reached
|
119
|
-
gem "alf", "~> 0.13.0"
|
120
|
-
|
121
|
-
## Related Work & Tools
|
122
|
-
|
123
|
-
- You should certainly have a look at the
|
124
|
-
[Third Manifesto website](http://www.thethirdmanifesto.com/):
|
125
|
-
- Why not reading the
|
126
|
-
[third manifesto](http://www.dcs.warwick.ac.uk/~hugh/TTM/DBE-Chapter01.pdf) ?
|
127
|
-
- Also have a look at
|
128
|
-
[other implementation projects](http://www.dcs.warwick.ac.uk/~hugh/TTM/Projects.html)
|
129
|
-
especially [Rel](http://dbappbuilder.sourceforge.net/Rel.php) which provides an
|
130
|
-
implementation of the **Tutorial D** language.
|
131
|
-
- [Dan Kubb's Veritas](https://github.com/dkubb/veritas) project is worth considering
|
132
|
-
also in the Ruby community. While very similar to Alf in providing a pure ruby
|
133
|
-
algebra implementation, Veritas mostly provides a framework for manipulating
|
134
|
-
and statically analyzing algebra expressions so as to be able to
|
135
|
-
[optimize them](https://github.com/dkubb/veritas-optimizer) and
|
136
|
-
[compile them to SQL](https://github.com/dkubb/veritas-sql-generator).
|
14
|
+
|
15
|
+
## Overview
|
16
|
+
|
17
|
+
Alf is a modern query language, rooted in relational algebra, and implemented
|
18
|
+
as a Ruby Domain Specific Language. It is distributed as a consolidated ruby
|
19
|
+
gem:
|
20
|
+
|
21
|
+
```
|
22
|
+
gem install alf
|
23
|
+
```
|
24
|
+
|
25
|
+
You'll also need the usual adapter gems for connecting to SQL engines, such as
|
26
|
+
`pg` for PostgreSQL or `sqlite3` for SQlite. I've not tested Alf against MySQL
|
27
|
+
and won't.
|
28
|
+
|
29
|
+
See the official documentation for getting started using Alf
|
30
|
+
[in Ruby](http://www.try-alf.org/doc/pages/alf-in-ruby) and
|
31
|
+
[in Shell](http://www.try-alf.org/doc/pages/alf-in-shell).
|
32
|
+
|
33
|
+
## Detailed overview
|
34
|
+
|
35
|
+
The consolidated gem is assembled from the following components:
|
36
|
+
|
37
|
+
* [alf-core](http://github.com/alf-tool/alf-core) core classes of Alf,
|
38
|
+
algebra, memory engine, Relation, compiler, and so on. This is actually Alf
|
39
|
+
itself, I would say.
|
40
|
+
* [alf-sql](http://github.com/alf-tool/alf-sql) extension of core's compiler
|
41
|
+
to handle SQL compilation specifically, in an abstract way.
|
42
|
+
* [alf-sequel](http://github.com/alf-tool/alf-sequel) an adapter for
|
43
|
+
connecting to SQL DBMSs using [Sequel](http://sequel.rubyforge.org/).
|
44
|
+
* [alf-shell](http://github.com/alf-tool/alf-shell) implements the commandline
|
45
|
+
tool that you can use without even knowing ruby.
|
46
|
+
* [alf-rack](http://github.com/alf-tool/alf-rack) a few Rack middlewares for
|
47
|
+
using Alf in ruby web applications.
|
48
|
+
* [alf-doc](http://github.com/alf-tool/alf-doc) is the source of all the
|
49
|
+
documentation found in man pages (shell) and on [try-alf.org](http://www.try-alf.org/).
|
50
|
+
* [try-alf](http://github.com/alf-tool/try-alf) is the source code of try-alf.org
|
51
|
+
itself.
|
52
|
+
|
53
|
+
Those components are distributed as separated ruby gems as well. A typical
|
54
|
+
ruby configuration (Gemfile) for using Alf and connecting to SQL databases is
|
55
|
+
either:
|
56
|
+
|
57
|
+
```
|
58
|
+
# consolidated gem, possibly with a lot of uneeded dependencies.
|
59
|
+
gem "alf", "~> 0.15.0"
|
60
|
+
```
|
61
|
+
|
62
|
+
or
|
63
|
+
|
64
|
+
```
|
65
|
+
# take only those gems that you need, here for a web app connecting to SQL
|
66
|
+
# databases.
|
67
|
+
gem "alf-core", "~> 0.15.0" # you can even omit this one
|
68
|
+
gem "alf-sequel", "~> 0.15.0"
|
69
|
+
gem "alf-rack", "~> 0.15.0"
|
70
|
+
```
|
137
71
|
|
138
72
|
## Contributing
|
139
73
|
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
include the semantically wrong way of applying joins on sub-relations, the
|
158
|
-
impossibility to use Lispy expressions on sub-relations in extend, and the error
|
159
|
-
management which is unspecific and unfriendly so far.
|
160
|
-
- I also would like starting collecting Reader, Renderer and Connection
|
161
|
-
contributions for common data sources (SQL, NoSQL, CSV, LOGS) and output
|
162
|
-
formats (HTML, XML, JSON). Contributions could be either developped as different
|
163
|
-
gem projects or distributed with Alf's gem and source code, I still need to
|
164
|
-
decide the exact policy (suggestions are more than welcome here)
|
165
|
-
- Alf will remain a practical tool before everything else. In the middle term,
|
166
|
-
I would like to complete the set of available operators (relational and non-
|
167
|
-
relational ones). Some of them will be operators described in D & D books
|
168
|
-
while others will be new suggestions of mine.
|
169
|
-
- In the long term Alf should be able to avoid loading tuples in memory (under
|
170
|
-
a certain number of conditions on datasources) for almost all queries.
|
171
|
-
- Without targetting a fast tool at all, I also would like Alf to provide a basic
|
172
|
-
optimizer that would be able to push equality restrictions down and materialize
|
173
|
-
sub-expressions used more than once in with expressions.
|
174
|
-
|
175
|
-
## Versioning policy
|
176
|
-
|
177
|
-
Alf respects [semantic versioning](http://semver.org/), which means that it has
|
178
|
-
a X.Y.Z version number and follows a few rules.
|
179
|
-
|
180
|
-
- The public API is made of the commandline tool, the Lispy dialect and the
|
181
|
-
Relation datastructure. This API will become stable with version 1.0.0 in a
|
182
|
-
near future.
|
183
|
-
- Currently, version 1.0.0 **has not been reached**. It means that **anything
|
184
|
-
may change at any time**. Best effort will be done to upgrade Y when backward
|
185
|
-
incompatible changes occur.
|
186
|
-
- Once 1.0.0 will be reached, the following rules will be followed:
|
187
|
-
- Backward compatible bug fixes will increase Z.
|
188
|
-
- New features and enhancements that do not break backward compatibility of
|
189
|
-
the public API will increase the Y number.
|
190
|
-
- Non backward compatible changes of the public API will increase the X
|
191
|
-
number.
|
192
|
-
|
193
|
-
All classes and modules but Alf module, the Lispy DSL and Alf::Relation are part
|
194
|
-
of the private API and may change at any time. A best-effort strategy is followed
|
195
|
-
to avoid breaking internals on tiny (Z) version increases, especially extension
|
196
|
-
points like Reader and Renderer.
|
74
|
+
As usual, on github, issues and pull requests, either on sub-projects (if you
|
75
|
+
know where your issue/contribution fits) or on this one (if you don't).
|
76
|
+
|
77
|
+
Integration work on Alf requires having all components available. The scenario
|
78
|
+
below might be a good way for getting started:
|
79
|
+
|
80
|
+
```
|
81
|
+
git clone git://github.com/alf-tool/alf.git
|
82
|
+
git submodule init
|
83
|
+
git submodule update
|
84
|
+
rake mod:test
|
85
|
+
rake test
|
86
|
+
```
|
87
|
+
|
88
|
+
Let me know if some tests fail in your environment. I'm not sure to know the
|
89
|
+
idiomatic way to use github with submodules when clones are involved. If you
|
90
|
+
do know, feel free to contribute your first pull request on this README ;-)
|
data/Rakefile
CHANGED
@@ -1,6 +1,31 @@
|
|
1
1
|
# We run tests by default
|
2
2
|
task :default => :test
|
3
3
|
|
4
|
+
SUB_MODULES = %w[
|
5
|
+
core
|
6
|
+
sql
|
7
|
+
sequel
|
8
|
+
shell
|
9
|
+
rack
|
10
|
+
doc
|
11
|
+
rest
|
12
|
+
]
|
13
|
+
|
14
|
+
def clean_env(&bl)
|
15
|
+
Bundler.with_clean_env(&bl)
|
16
|
+
end
|
17
|
+
|
18
|
+
def in_each_sub_module(msg)
|
19
|
+
clean_env do
|
20
|
+
SUB_MODULES.each do |sub|
|
21
|
+
chdir("alf-#{sub}") do
|
22
|
+
puts "#{msg} #{sub}"
|
23
|
+
yield(sub)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
4
29
|
#
|
5
30
|
# Install all tasks found in tasks folder
|
6
31
|
#
|
data/alf.gemspec
CHANGED
@@ -125,9 +125,11 @@ Gem::Specification.new do |s|
|
|
125
125
|
#
|
126
126
|
s.add_development_dependency("rake", "~> 10.1")
|
127
127
|
s.add_development_dependency("rspec", "~> 2.14")
|
128
|
-
s.add_dependency("alf-core", "~> 0.
|
129
|
-
s.add_dependency("alf-
|
130
|
-
s.add_dependency("alf-
|
128
|
+
s.add_dependency("alf-core", "~> 0.15.0")
|
129
|
+
s.add_dependency("alf-sql", "~> 0.15.0")
|
130
|
+
s.add_dependency("alf-sequel", "~> 0.15.0")
|
131
|
+
s.add_dependency("alf-shell", "~> 0.15.0")
|
132
|
+
s.add_dependency("alf-rack", "~> 0.15.0")
|
131
133
|
|
132
134
|
# The version of ruby required by this gem
|
133
135
|
#
|
data/alf.noespec
CHANGED
@@ -6,9 +6,9 @@ template-info:
|
|
6
6
|
safe-override: false
|
7
7
|
tasks/spec_test.rake:
|
8
8
|
ignore: true
|
9
|
-
spec/spec_helper:
|
9
|
+
spec/spec_helper.rb:
|
10
10
|
ignore: true
|
11
|
-
spec/
|
11
|
+
spec/test___lower__.rb:
|
12
12
|
ignore: true
|
13
13
|
variables:
|
14
14
|
lower:
|
@@ -16,7 +16,7 @@ variables:
|
|
16
16
|
upper:
|
17
17
|
Alf
|
18
18
|
version:
|
19
|
-
0.
|
19
|
+
0.15.0
|
20
20
|
summary: |-
|
21
21
|
Relational Algebra at your fingertips
|
22
22
|
description: |-
|
@@ -29,8 +29,10 @@ variables:
|
|
29
29
|
- http://rubygems.org/gems/alf
|
30
30
|
- http://rubydoc.info/gems/alf
|
31
31
|
dependencies:
|
32
|
-
- {name: alf-core, version: "~> 0.
|
33
|
-
- {name: alf-
|
34
|
-
- {name: alf-
|
32
|
+
- {name: alf-core, version: "~> 0.15.0", groups: [runtime]}
|
33
|
+
- {name: alf-sql, version: "~> 0.15.0", groups: [runtime]}
|
34
|
+
- {name: alf-sequel, version: "~> 0.15.0", groups: [runtime]}
|
35
|
+
- {name: alf-shell, version: "~> 0.15.0", groups: [runtime]}
|
36
|
+
- {name: alf-rack, version: "~> 0.15.0", groups: [runtime]}
|
35
37
|
- {name: rake, version: "~> 10.1", groups: [test, release]}
|
36
38
|
- {name: rspec, version: "~> 2.14", groups: [test, release]}
|