brycethornton-integrity 0.1.7.1

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.
Files changed (57) hide show
  1. data/README.markdown +66 -0
  2. data/Rakefile +110 -0
  3. data/VERSION.yml +4 -0
  4. data/app.rb +137 -0
  5. data/bin/integrity +4 -0
  6. data/config/config.sample.ru +31 -0
  7. data/config/config.sample.yml +38 -0
  8. data/config/thin.sample.yml +13 -0
  9. data/integrity.gemspec +76 -0
  10. data/lib/integrity.rb +82 -0
  11. data/lib/integrity/build.rb +61 -0
  12. data/lib/integrity/core_ext/object.rb +6 -0
  13. data/lib/integrity/core_ext/string.rb +5 -0
  14. data/lib/integrity/helpers.rb +16 -0
  15. data/lib/integrity/helpers/authorization.rb +33 -0
  16. data/lib/integrity/helpers/breadcrumbs.rb +20 -0
  17. data/lib/integrity/helpers/forms.rb +28 -0
  18. data/lib/integrity/helpers/pretty_output.rb +45 -0
  19. data/lib/integrity/helpers/rendering.rb +14 -0
  20. data/lib/integrity/helpers/resources.rb +13 -0
  21. data/lib/integrity/helpers/urls.rb +47 -0
  22. data/lib/integrity/installer.rb +132 -0
  23. data/lib/integrity/migrations.rb +152 -0
  24. data/lib/integrity/notifier.rb +50 -0
  25. data/lib/integrity/notifier/base.rb +55 -0
  26. data/lib/integrity/project.rb +117 -0
  27. data/lib/integrity/project_builder.rb +47 -0
  28. data/lib/integrity/scm.rb +19 -0
  29. data/lib/integrity/scm/git.rb +91 -0
  30. data/lib/integrity/scm/git/uri.rb +57 -0
  31. data/public/buttons.css +82 -0
  32. data/public/reset.css +7 -0
  33. data/public/spinner.gif +0 -0
  34. data/test/helpers.rb +48 -0
  35. data/test/helpers/acceptance.rb +126 -0
  36. data/test/helpers/acceptance/git_helper.rb +99 -0
  37. data/test/helpers/acceptance/textfile_notifier.rb +26 -0
  38. data/test/helpers/expectations.rb +5 -0
  39. data/test/helpers/expectations/be_a.rb +23 -0
  40. data/test/helpers/expectations/change.rb +90 -0
  41. data/test/helpers/expectations/have.rb +105 -0
  42. data/test/helpers/expectations/have_tag.rb +128 -0
  43. data/test/helpers/expectations/predicates.rb +37 -0
  44. data/test/helpers/fixtures.rb +83 -0
  45. data/views/_build_info.haml +18 -0
  46. data/views/build.haml +2 -0
  47. data/views/error.haml +36 -0
  48. data/views/home.haml +23 -0
  49. data/views/integrity.sass +387 -0
  50. data/views/layout.haml +28 -0
  51. data/views/new.haml +51 -0
  52. data/views/not_found.haml +31 -0
  53. data/views/notifier.haml +7 -0
  54. data/views/project.builder +21 -0
  55. data/views/project.haml +28 -0
  56. data/views/unauthorized.haml +38 -0
  57. metadata +243 -0
data/README.markdown ADDED
@@ -0,0 +1,66 @@
1
+ Integrity
2
+ =========
3
+
4
+ [Integrity][website] is your friendly automated Continuous Integration server.
5
+
6
+ * See our [website][] for documentation and a [live demo][demo]
7
+ * Report bugs and submit features request on our [Lighthouse account][lighthouse]
8
+ * Join us on [#integrity][irc-channel] for ideas, help, patches or something
9
+ * Get the code on [GitHub][repo]
10
+
11
+ Thanks
12
+ ------
13
+
14
+ Thanks to the fellowing people for their feedbacks, ideas and patches :
15
+
16
+ * [James Adam][james]
17
+ * [Elliott Cable][ec]
18
+ * [Corey Donohoe][atmos]
19
+ * [Kyle Hargraves][kyle]
20
+ * [Pier-Hugues Pellerin][ph]
21
+ * [Simon Rozet][sr]
22
+ * [Scott Taylor][scott]
23
+
24
+ License
25
+ -------
26
+
27
+ (The MIT License)
28
+
29
+ Copyright (c) 2008 [Nicolás Sanguinetti][foca], [entp][]
30
+
31
+ Permission is hereby granted, free of charge, to any person obtaining
32
+ a copy of this software and associated documentation files (the
33
+ 'Software'), to deal in the Software without restriction, including
34
+ without limitation the rights to use, copy, modify, merge, publish,
35
+ distribute, sublicense, and/or sell copies of the Software, and to
36
+ permit persons to whom the Software is furnished to do so, subject to
37
+ the following conditions:
38
+
39
+ The above copyright notice and this permission notice shall be
40
+ included in all copies or substantial portions of the Software.
41
+
42
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
43
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
44
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
45
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
46
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
47
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
48
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
49
+
50
+ [website]: http://integrityapp.com
51
+ [demo]: http://builder.integrityapp.com
52
+ [repo]: http://github.com/foca/integrity
53
+ [lighthouse]: http://integrity.lighthouseapp.com/projects/14308-integrity
54
+ [irc-channel]: irc://irc.freenode.net/integrity
55
+
56
+ [foca]: http://nicolassanguinetti.info/
57
+ [entp]: http://entp.com
58
+
59
+ [james]: http://github.com/lazyatom
60
+ [ec]: http://github.com/elliotcabble
61
+ [atmos]: http://github.com/atmos
62
+ [kyle]: http://github.com/pd
63
+ [ph]: http://github.com/ph
64
+ [sr]: http://purl.org/net/sr/
65
+ [scott]: http://github.com/smtlaissezfaire
66
+
data/Rakefile ADDED
@@ -0,0 +1,110 @@
1
+ require File.dirname(__FILE__) + "/lib/integrity"
2
+ require "rake/testtask"
3
+ require "rcov/rcovtask"
4
+
5
+ desc "Run all tests and check test coverage"
6
+ task :default => "test:coverage:verify"
7
+
8
+ desc "Run tests"
9
+ task :test => %w(test:units test:acceptance)
10
+
11
+ namespace :test do
12
+ Rake::TestTask.new(:units) do |t|
13
+ t.test_files = FileList["test/unit/*_test.rb"]
14
+ end
15
+
16
+ Rake::TestTask.new(:acceptance) do |t|
17
+ t.test_files = FileList["test/acceptance/*_test.rb"]
18
+ end
19
+
20
+ desc "Measure test coverage"
21
+ task :coverage => %w(test:coverage:units test:coverage:acceptance)
22
+
23
+ namespace :coverage do
24
+ desc "Measure test coverage of unit tests"
25
+ Rcov::RcovTask.new(:units) do |rcov|
26
+ rcov.pattern = "test/unit/*_test.rb"
27
+ rcov.rcov_opts = %w(--html --aggregate .aggregated_coverage_report)
28
+ rcov.rcov_opts << ENV["RCOV_OPTS"] if ENV["RCOV_OPTS"]
29
+ end
30
+
31
+ desc "Measure test coverage of acceptance tests"
32
+ Rcov::RcovTask.new(:acceptance) do |rcov|
33
+ rcov.pattern = "test/acceptance/*_test.rb"
34
+ rcov.rcov_opts = %w(--html --aggregate .aggregated_coverage_report)
35
+ rcov.rcov_opts << ENV["RCOV_OPTS"] if ENV["RCOV_OPTS"]
36
+ end
37
+
38
+ desc "Verify test coverage"
39
+ task :verify => "test:coverage" do
40
+ File.read("coverage/index.html") =~ /<tt class='coverage_total'>\s*(\d+\.\d+)%\s*<\/tt>/
41
+ coverage = $1.to_f
42
+
43
+ puts
44
+ if coverage == 100
45
+ puts "\e[32m100% coverage! Awesome!\e[0m"
46
+ else
47
+ puts "\e[31mOnly #{coverage}% code coverage. You can do better ;)\e[0m"
48
+ end
49
+ end
50
+ end
51
+
52
+ desc "Install all gems on which the tests depend on"
53
+ task :install_dependencies do
54
+ system 'gem install redgreen rr mocha ruby-debug dm-sweatshop webrat'
55
+ system 'gem install -s http://gems.github.com jeremymcanally-context jeremymcanally-matchy jeremymcanally-pending foca-storyteller'
56
+ end
57
+ end
58
+
59
+ namespace :db do
60
+ desc "Setup connection."
61
+ task :connect do
62
+ config = File.expand_path(ENV['CONFIG']) if ENV['CONFIG']
63
+ config = Integrity.root / 'config.yml' if File.exists?(Integrity.root / 'config.yml')
64
+ Integrity.new(config)
65
+ end
66
+
67
+ desc "Automigrate the database"
68
+ task :migrate => :connect do
69
+ require "project"
70
+ require "build"
71
+ require "notifier"
72
+ DataMapper.auto_migrate!
73
+ end
74
+ end
75
+
76
+ begin
77
+ require 'jeweler'
78
+ Jeweler::Tasks.new do |s|
79
+ files = `git ls-files`.split("\n").reject {|f| f =~ %r(^test/acceptance) || f =~ %r(^test/unit) || f =~ /^\.git/ }
80
+
81
+ s.name = 'integrity'
82
+ s.summary = 'The easy and fun Continuous Integration server'
83
+ s.description = 'Your Friendly Continuous Integration server. Easy, fun and painless!'
84
+ s.homepage = 'http://integrityapp.com'
85
+ s.rubyforge_project = 'integrity'
86
+ s.email = 'contacto@nicolassanguinetti.info'
87
+ s.authors = ['Nicolás Sanguinetti', 'Simon Rozet']
88
+ s.files = files
89
+ s.executables = ['integrity']
90
+ s.post_install_message = 'Run `integrity help` for information on how to setup Integrity.'
91
+
92
+ s.add_dependency 'sinatra', ['>= 0.9.0.3']
93
+ s.add_dependency 'haml' # ah, you evil monkey you
94
+ s.add_dependency 'dm-core', ['>= 0.9.5']
95
+ s.add_dependency 'dm-validations', ['>= 0.9.5']
96
+ s.add_dependency 'dm-types', ['>= 0.9.5']
97
+ s.add_dependency 'dm-timestamps', ['>= 0.9.5']
98
+ s.add_dependency 'dm-aggregates', ['>= 0.9.5']
99
+ s.add_dependency 'dm-migrations', ['>= 0.9.5']
100
+ s.add_dependency 'data_objects', ['>= 0.9.5']
101
+ s.add_dependency 'do_sqlite3', ['>= 0.9.5']
102
+ s.add_dependency 'json'
103
+ s.add_dependency 'foca-sinatra-diddies', ['>= 0.0.2']
104
+ s.add_dependency 'thor'
105
+ s.add_dependency 'uuidtools' # required by dm-types
106
+ s.add_dependency 'bcrypt-ruby' # required by dm-types
107
+ end
108
+ rescue LoadError
109
+ end
110
+
data/VERSION.yml ADDED
@@ -0,0 +1,4 @@
1
+ ---
2
+ major: 0
3
+ patch: 7
4
+ minor: 1
data/app.rb ADDED
@@ -0,0 +1,137 @@
1
+ require File.dirname(__FILE__) + "/lib/integrity"
2
+ require "sinatra"
3
+ require "helpers"
4
+
5
+ set :root, Integrity.root
6
+ set :public, Integrity.root / "public"
7
+ set :views, Integrity.root / "views"
8
+
9
+ enable :sessions
10
+
11
+ include Integrity
12
+
13
+ configure :development do
14
+ config = Integrity.root / "config" / "config.yml"
15
+ Integrity.config = config if File.exists? config
16
+ end
17
+
18
+ configure do
19
+ Integrity.new
20
+ end
21
+
22
+ not_found do
23
+ status 404
24
+ show :not_found, :title => "lost, are we?"
25
+ end
26
+
27
+ error do
28
+ @error = request.env['sinatra.error']
29
+ status 500
30
+ show :error, :title => "something has gone terribly wrong"
31
+ end
32
+
33
+ before do
34
+ # The browser only sends http auth data for requests that are explicitly
35
+ # required to do so. This way we get the real values of +#logged_in?+ and
36
+ # +#current_user+
37
+ login_required if session[:user]
38
+ end
39
+
40
+ get "/" do
41
+ @projects = Project.only_public_unless(authorized?)
42
+ show :home, :title => "projects"
43
+ end
44
+
45
+ get "/login" do
46
+ login_required
47
+ session[:user] = current_user
48
+ redirect root_url
49
+ end
50
+
51
+ get "/new" do
52
+ login_required
53
+
54
+ @project = Project.new
55
+ show :new, :title => ["projects", "new project"]
56
+ end
57
+
58
+ post "/" do
59
+ login_required
60
+
61
+ @project = Project.new(params[:project_data])
62
+ if @project.save
63
+ @project.enable_notifiers(params["enabled_notifiers[]"], params["notifiers"])
64
+ redirect project_url(@project)
65
+ else
66
+ show :new, :title => ["projects", "new project"]
67
+ end
68
+ end
69
+
70
+ get "/:project" do
71
+ login_required unless current_project.public?
72
+ show :project, :title => ["projects", current_project.name]
73
+ end
74
+
75
+ get "/:project.atom" do
76
+ login_required unless current_project.public?
77
+ response["Content-Type"] = "application/rss+xml; charset=utf-8"
78
+ builder :project
79
+ end
80
+
81
+ put "/:project" do
82
+ login_required
83
+
84
+ if current_project.update_attributes(params[:project_data])
85
+ current_project.enable_notifiers(params["enabled_notifiers"], params["notifiers"])
86
+ redirect project_url(current_project)
87
+ else
88
+ show :new, :title => ["projects", current_project.permalink, "edit"]
89
+ end
90
+ end
91
+
92
+ delete "/:project" do
93
+ login_required
94
+
95
+ current_project.destroy
96
+ redirect root_url
97
+ end
98
+
99
+ get "/:project/edit" do
100
+ login_required
101
+
102
+ show :new, :title => ["projects", current_project.permalink, "edit"]
103
+ end
104
+
105
+ post "/:project/push" do
106
+ login_required
107
+
108
+ content_type "text/plain"
109
+
110
+ begin
111
+ current_project.push(params[:payload])
112
+ "Thanks, build started."
113
+ rescue JSON::ParserError => exception
114
+ throw :halt, [422, exception.to_s]
115
+ end
116
+ end
117
+
118
+ post "/:project/builds" do
119
+ login_required
120
+
121
+ current_project.build
122
+ redirect project_url(@project)
123
+ end
124
+
125
+ get "/:project/builds/:build" do
126
+ login_required unless current_project.public?
127
+ show :build, :title => ["projects", current_project.permalink, current_build.short_commit_identifier]
128
+ end
129
+
130
+ get "/integrity.css" do
131
+ response["Content-Type"] = "text/css; charset=utf-8"
132
+ sass :integrity
133
+ end
134
+
135
+ helpers do
136
+ include Helpers
137
+ end
data/bin/integrity ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + "/../lib/integrity/installer"
3
+
4
+ Integrity::Installer.start
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rubygems'
3
+ require 'integrity'
4
+
5
+ # If you want to add any notifiers, install the gems and then require them here
6
+ # For example, to enable the Email notifier: install the gem (from github:
7
+ #
8
+ # sudo gem install -s http://gems.github.com foca-integrity-email
9
+ #
10
+ # And then uncomment the following line:
11
+ #
12
+ # require "notifier/email"
13
+
14
+ # Load integrity's configuration.
15
+ Integrity.config = File.expand_path('./config.yml')
16
+
17
+ #######################################################################
18
+ ## ##
19
+ ## == DON'T EDIT ANYTHING BELOW UNLESS YOU KNOW WHAT YOU'RE DOING == ##
20
+ ## ##
21
+ #######################################################################
22
+ require Integrity.root / 'app'
23
+
24
+ set :public, Integrity.root / 'public'
25
+ set :views, Integrity.root / 'views'
26
+ set :port, 8910
27
+ set :env, :production
28
+ disable :run, :reload
29
+
30
+ use Rack::CommonLogger, Integrity.logger if Integrity.config[:log_debug_info]
31
+ run Sinatra::Application
@@ -0,0 +1,38 @@
1
+ # Domain where integrity will be running from. This is used to have
2
+ # nice URLs in your notifications.
3
+ # For example:
4
+ # http://builder.integrityapp.com
5
+ :base_uri: http://integrity.domain.tld
6
+
7
+ # This should be a complete connection string to your database. For example
8
+ # `mysql://user@localhost/integrity` (you need an `integrity` db created in
9
+ # localhost, of course).
10
+ :database_uri: sqlite3:///var/integrity.db
11
+
12
+ # This is where your project's code will be checked out to. Make sure it's
13
+ # writable by the user that runs Integrity.
14
+ :export_directory: /path/to/scm/exports
15
+
16
+ # Path to the integrity log file
17
+ :log: /var/log/integrity.log
18
+
19
+ # Enable/Disable debug logging. Turning this on will log queries made to the
20
+ # database and web requests (if using the provided rackup file)
21
+ :log_debug_info: false
22
+
23
+ # Enable or disable HTTP authentication for the app. BE AWARE that if you
24
+ # disable this anyone can delete and alter projects, so do it only if your
25
+ # app is running in a controlled environment (ie, behind your company's
26
+ # firewall.)
27
+ :use_basic_auth: false
28
+
29
+ # When `use_basic_auth` is true, the admin's username for HTTP authentication.
30
+ :admin_username: username
31
+
32
+ # When `use_basic_auth` is true, the admin's password. Usually saved as a
33
+ # SHA1 hash. See the next option.
34
+ :admin_password: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
35
+
36
+ # If this is true, then whenever we authenticate the admin user, will hash
37
+ # it using SHA1. If not, we'll assume the provided password is in plain text.
38
+ :hash_admin_password: true
@@ -0,0 +1,13 @@
1
+ ---
2
+ environment: production
3
+ chdir: /apps/integrity
4
+ address: 127.0.0.1
5
+ port: 8910
6
+ pid: /apps/integrity/thin.pid
7
+ rackup: /apps/integrity/config.ru
8
+ log: /apps/integrity/log/thin.log
9
+ max_conns: 1024
10
+ timeout: 30
11
+ max_persistent_conns: 512
12
+ daemonize: true
13
+ servers: 2
data/integrity.gemspec ADDED
@@ -0,0 +1,76 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{integrity}
5
+ s.version = "0.1.7.1"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Nicol\303\241s Sanguinetti", "Simon Rozet"]
9
+ s.date = %q{2009-01-31}
10
+ s.default_executable = %q{integrity}
11
+ s.description = %q{Your Friendly Continuous Integration server. Easy, fun and painless!}
12
+ s.email = %q{contacto@nicolassanguinetti.info}
13
+ s.executables = ["integrity"]
14
+ s.files = ["README.markdown", "Rakefile", "VERSION.yml", "app.rb", "bin/integrity", "config/config.sample.ru", "config/config.sample.yml", "config/thin.sample.yml", "integrity.gemspec", "lib/integrity.rb", "lib/integrity/build.rb", "lib/integrity/core_ext/object.rb", "lib/integrity/core_ext/string.rb", "lib/integrity/helpers.rb", "lib/integrity/helpers/authorization.rb", "lib/integrity/helpers/breadcrumbs.rb", "lib/integrity/helpers/forms.rb", "lib/integrity/helpers/pretty_output.rb", "lib/integrity/helpers/rendering.rb", "lib/integrity/helpers/resources.rb", "lib/integrity/helpers/urls.rb", "lib/integrity/installer.rb", "lib/integrity/migrations.rb", "lib/integrity/notifier.rb", "lib/integrity/notifier/base.rb", "lib/integrity/project.rb", "lib/integrity/project_builder.rb", "lib/integrity/scm.rb", "lib/integrity/scm/git.rb", "lib/integrity/scm/git/uri.rb", "public/buttons.css", "public/reset.css", "public/spinner.gif", "test/helpers.rb", "test/helpers/acceptance.rb", "test/helpers/acceptance/git_helper.rb", "test/helpers/acceptance/textfile_notifier.rb", "test/helpers/expectations.rb", "test/helpers/expectations/be_a.rb", "test/helpers/expectations/change.rb", "test/helpers/expectations/have.rb", "test/helpers/expectations/have_tag.rb", "test/helpers/expectations/predicates.rb", "test/helpers/fixtures.rb", "views/_build_info.haml", "views/build.haml", "views/error.haml", "views/home.haml", "views/integrity.sass", "views/layout.haml", "views/new.haml", "views/not_found.haml", "views/notifier.haml", "views/project.builder", "views/project.haml", "views/unauthorized.haml"]
15
+ s.homepage = %q{http://integrityapp.com}
16
+ s.post_install_message = %q{Run `integrity help` for information on how to setup Integrity.}
17
+ s.require_paths = ["lib"]
18
+ s.rubyforge_project = %q{integrity}
19
+ s.rubygems_version = %q{1.3.1}
20
+ s.summary = %q{The easy and fun Continuous Integration server}
21
+
22
+ if s.respond_to? :specification_version then
23
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
24
+ s.specification_version = 2
25
+
26
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
27
+ s.add_runtime_dependency(%q<sinatra>, [">= 0.9.0.3"])
28
+ s.add_runtime_dependency(%q<haml>, [">= 0"])
29
+ s.add_runtime_dependency(%q<dm-core>, [">= 0.9.5"])
30
+ s.add_runtime_dependency(%q<dm-validations>, [">= 0.9.5"])
31
+ s.add_runtime_dependency(%q<dm-types>, [">= 0.9.5"])
32
+ s.add_runtime_dependency(%q<dm-timestamps>, [">= 0.9.5"])
33
+ s.add_runtime_dependency(%q<dm-aggregates>, [">= 0.9.5"])
34
+ s.add_runtime_dependency(%q<dm-migrations>, [">= 0.9.5"])
35
+ s.add_runtime_dependency(%q<data_objects>, [">= 0.9.5"])
36
+ s.add_runtime_dependency(%q<do_sqlite3>, [">= 0.9.5"])
37
+ s.add_runtime_dependency(%q<json>, [">= 0"])
38
+ s.add_runtime_dependency(%q<foca-sinatra-diddies>, [">= 0.0.2"])
39
+ s.add_runtime_dependency(%q<thor>, [">= 0"])
40
+ s.add_runtime_dependency(%q<uuidtools>, [">= 0"])
41
+ s.add_runtime_dependency(%q<bcrypt-ruby>, [">= 0"])
42
+ else
43
+ s.add_dependency(%q<sinatra>, [">= 0.9.0.3"])
44
+ s.add_dependency(%q<haml>, [">= 0"])
45
+ s.add_dependency(%q<dm-core>, [">= 0.9.5"])
46
+ s.add_dependency(%q<dm-validations>, [">= 0.9.5"])
47
+ s.add_dependency(%q<dm-types>, [">= 0.9.5"])
48
+ s.add_dependency(%q<dm-timestamps>, [">= 0.9.5"])
49
+ s.add_dependency(%q<dm-aggregates>, [">= 0.9.5"])
50
+ s.add_dependency(%q<dm-migrations>, [">= 0.9.5"])
51
+ s.add_dependency(%q<data_objects>, [">= 0.9.5"])
52
+ s.add_dependency(%q<do_sqlite3>, [">= 0.9.5"])
53
+ s.add_dependency(%q<json>, [">= 0"])
54
+ s.add_dependency(%q<foca-sinatra-diddies>, [">= 0.0.2"])
55
+ s.add_dependency(%q<thor>, [">= 0"])
56
+ s.add_dependency(%q<uuidtools>, [">= 0"])
57
+ s.add_dependency(%q<bcrypt-ruby>, [">= 0"])
58
+ end
59
+ else
60
+ s.add_dependency(%q<sinatra>, [">= 0.9.0.3"])
61
+ s.add_dependency(%q<haml>, [">= 0"])
62
+ s.add_dependency(%q<dm-core>, [">= 0.9.5"])
63
+ s.add_dependency(%q<dm-validations>, [">= 0.9.5"])
64
+ s.add_dependency(%q<dm-types>, [">= 0.9.5"])
65
+ s.add_dependency(%q<dm-timestamps>, [">= 0.9.5"])
66
+ s.add_dependency(%q<dm-aggregates>, [">= 0.9.5"])
67
+ s.add_dependency(%q<dm-migrations>, [">= 0.9.5"])
68
+ s.add_dependency(%q<data_objects>, [">= 0.9.5"])
69
+ s.add_dependency(%q<do_sqlite3>, [">= 0.9.5"])
70
+ s.add_dependency(%q<json>, [">= 0"])
71
+ s.add_dependency(%q<foca-sinatra-diddies>, [">= 0.0.2"])
72
+ s.add_dependency(%q<thor>, [">= 0"])
73
+ s.add_dependency(%q<uuidtools>, [">= 0"])
74
+ s.add_dependency(%q<bcrypt-ruby>, [">= 0"])
75
+ end
76
+ end