studio54 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. data/Gemfile +31 -0
  2. data/Gemfile.lock +68 -0
  3. data/LICENSE +25 -0
  4. data/README.md +0 -0
  5. data/Rakefile +56 -0
  6. data/VERSION +5 -0
  7. data/app/controllers/users_controller.rb +29 -0
  8. data/app/models/post.rb +4 -0
  9. data/app/models/user.rb +46 -0
  10. data/bare/Gemfile +31 -0
  11. data/bare/Rakefile +28 -0
  12. data/bare/config.ru +9 -0
  13. data/bare/config/app_tie.rb +12 -0
  14. data/bare/config/db.rb +20 -0
  15. data/bare/config/db_connect.rb +19 -0
  16. data/bare/config/environment.rb +17 -0
  17. data/bare/config/sinatra.rb +36 -0
  18. data/bare/config/studio54_tie.rb +2 -0
  19. data/bare/dance.rb +11 -0
  20. data/bare/lib/after_filters.rb +7 -0
  21. data/bare/lib/before_filters.rb +7 -0
  22. data/bare/lib/helpers.rb +5 -0
  23. data/bare/public/index.rhtml +1 -0
  24. data/bare/public/layout.rhtml +12 -0
  25. data/bare/static/css/base.css +86 -0
  26. data/bare/static/css/yui_reset.css +30 -0
  27. data/bare/test/helpers.rb +8 -0
  28. data/bare/test/suite.rb +13 -0
  29. data/bin/studio54 +65 -0
  30. data/config.ru +9 -0
  31. data/config/app_tie.rb +8 -0
  32. data/config/db.rb +20 -0
  33. data/config/db_connect.rb +19 -0
  34. data/config/environment.rb +17 -0
  35. data/config/sinatra.rb +36 -0
  36. data/dance.rb +80 -0
  37. data/ideas +0 -0
  38. data/lib/after_filters.rb +7 -0
  39. data/lib/base.rb +29 -0
  40. data/lib/before_filters.rb +30 -0
  41. data/lib/helpers.rb +24 -0
  42. data/lib/lazy_controller.rb +87 -0
  43. data/lib/lazy_record.rb +395 -0
  44. data/lib/partials.rb +19 -0
  45. data/lib/studio54.rb +14 -0
  46. data/lib/vendor.rb +23 -0
  47. data/public/_partial_test.rhtml +4 -0
  48. data/public/all.rhtml +7 -0
  49. data/public/form.rhtml +11 -0
  50. data/public/index.rhtml +6 -0
  51. data/public/layout.rhtml +15 -0
  52. data/public/partial_test.rhtml +6 -0
  53. data/public/test_find_by.rhtml +4 -0
  54. data/rack/cache/body/ec/b48431757330e446c58d88e317574ef0eca2e9 +0 -0
  55. data/rack/cache/meta/25/3a7a342a66b79119b7b8cb34bda89978f9e606 +0 -0
  56. data/rack/cache/meta/c1/34c9b7112c7d884220d6ee9a8e43ec69d2ea6e +0 -0
  57. data/static/css/base.css +86 -0
  58. data/static/css/yui_reset.css +30 -0
  59. data/static/hello.html +1 -0
  60. data/studio54.gemspec +25 -0
  61. data/tags +149 -0
  62. data/test/email.rb +8 -0
  63. data/test/environment.rb +28 -0
  64. data/test/helpers.rb +8 -0
  65. data/test/integration/index_test.rb +41 -0
  66. data/test/integration/partial_test.rb +50 -0
  67. data/test/mail/email_test.rb +14 -0
  68. data/test/rack/helpers.rb +23 -0
  69. data/test/suite.rb +8 -0
  70. data/test/unit/associations_test.rb +33 -0
  71. data/test/unit/callbacks_test.rb +16 -0
  72. data/test/unit/database_test.rb +73 -0
  73. data/test/unit/model_introspection_test.rb +44 -0
  74. data/test/unit/serialization_test.rb +19 -0
  75. data/test/unit/validations_test.rb +73 -0
  76. metadata +165 -0
data/Gemfile ADDED
@@ -0,0 +1,31 @@
1
+ source :rubygems
2
+
3
+ gem "rack"
4
+ gem "rack-cache"
5
+ gem "rack-flash"
6
+ gem "sinatra"
7
+ # Check config/app_tie to see which active_support files are required.
8
+ # Note: many required files require other active_support files in turn.
9
+ gem "activesupport"
10
+ gem "activemodel"
11
+
12
+ # dbi
13
+ gem "dbi"
14
+ # dbi driver
15
+ gem "dbd-mysql"
16
+
17
+ # optional, only need if serving xml
18
+ gem "builder"
19
+
20
+ # optional, for sending email
21
+ gem "pony"
22
+
23
+ group :development do
24
+ gem "thin"
25
+ gem "shotgun"
26
+ end
27
+
28
+ group :test do
29
+ gem "rack-test"
30
+ end
31
+
@@ -0,0 +1,68 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activemodel (3.0.0)
5
+ activesupport (= 3.0.0)
6
+ builder (~> 2.1.2)
7
+ i18n (~> 0.4.1)
8
+ activesupport (3.0.0)
9
+ builder (2.1.2)
10
+ daemons (1.1.4)
11
+ dbd-mysql (0.4.4)
12
+ dbi (>= 0.4.0)
13
+ mysql
14
+ dbi (0.4.5)
15
+ deprecated (= 2.0.1)
16
+ deprecated (2.0.1)
17
+ eventmachine (0.12.10)
18
+ i18n (0.4.2)
19
+ mail (2.3.0)
20
+ i18n (>= 0.4.0)
21
+ mime-types (~> 1.16)
22
+ treetop (~> 1.4.8)
23
+ mime-types (1.17.2)
24
+ mysql (2.8.1)
25
+ polyglot (0.3.2)
26
+ pony (1.3)
27
+ mail (> 2.0)
28
+ rack (1.3.4)
29
+ rack-cache (1.1)
30
+ rack (>= 0.4)
31
+ rack-flash (0.1.2)
32
+ rack
33
+ rack-protection (1.1.4)
34
+ rack
35
+ rack-test (0.6.1)
36
+ rack (>= 1.0)
37
+ shotgun (0.9)
38
+ rack (>= 1.0)
39
+ sinatra (1.3.1)
40
+ rack (~> 1.3, >= 1.3.4)
41
+ rack-protection (~> 1.1, >= 1.1.2)
42
+ tilt (~> 1.3, >= 1.3.3)
43
+ thin (1.2.11)
44
+ daemons (>= 1.0.9)
45
+ eventmachine (>= 0.12.6)
46
+ rack (>= 1.0.0)
47
+ tilt (1.3.3)
48
+ treetop (1.4.10)
49
+ polyglot
50
+ polyglot (>= 0.3.1)
51
+
52
+ PLATFORMS
53
+ ruby
54
+
55
+ DEPENDENCIES
56
+ activemodel
57
+ activesupport
58
+ builder
59
+ dbd-mysql
60
+ dbi
61
+ pony
62
+ rack
63
+ rack-cache
64
+ rack-flash
65
+ rack-test
66
+ shotgun
67
+ sinatra
68
+ thin
data/LICENSE ADDED
@@ -0,0 +1,25 @@
1
+ Copyright (c) 2011 by Luke Gruber
2
+
3
+ This software is a bridge between Sinatra, parts of Rails, and my own
4
+ code. The code herein is licensed either under the same license as
5
+ Sinatra, the same license as Rails, or the 'MIT' license contained
6
+ below. The user can choose which license suits their needs the best.
7
+
8
+ Permission is hereby granted, free of charge, to any person obtaining
9
+ a copy of this software and associated documentation files (the
10
+ "Software"), to deal in the Software without restriction, including
11
+ without limitation the rights to use, copy, modify, merge, publish,
12
+ distribute, sublicense, and/or sell copies of the Software, and to
13
+ permit persons to whom the Software is furnished to do so, subject to
14
+ the following conditions:
15
+
16
+ The above copyright notice and this permission notice shall be included
17
+ in all copies or substantial portions of the Software.
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
22
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
23
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
24
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
25
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
File without changes
@@ -0,0 +1,56 @@
1
+ $:.unshift 'lib'
2
+ $:.unshift 'rakelib'
3
+ $:.unshift 'config'
4
+ require 'environment'
5
+ include Studio54::Config::Environment
6
+
7
+ require 'rake/testtask'
8
+ require 'rake/clean'
9
+ require 'fileutils'
10
+ include FileUtils
11
+
12
+ task :default => [:output_test_count]
13
+
14
+ task :output_test_count do
15
+ files = Dir.glob(File.join(ROOTDIR, 'test', '**/*'))
16
+ puts "#{files.count} test files to run."
17
+ end
18
+
19
+ namespace :gem do
20
+ desc 'rebuild the studio54 gem'
21
+ task :rebuild do
22
+ if `gem list | grep studio54`
23
+ system("gem uninstall studio54 --executables")
24
+ end
25
+ gemfile = Dir.glob 'studio54-*'
26
+ rm gemfile
27
+ gemspec = 'studio54.gemspec'
28
+ system "gem build #{gemspec}"
29
+ new_gemfile = Dir.glob 'studio54-*'
30
+ system "gem install #{new_gemfile}"
31
+ end
32
+ end
33
+
34
+ namespace :test do
35
+ desc 'Run test suite (suite.rb)'
36
+ Rake::TestTask.new(:suite) do |t|
37
+ t.test_files = FileList['test/suite*'].to_a
38
+ end
39
+
40
+ desc 'Run unit tests (test/unit/*)'
41
+ Rake::TestTask.new(:unit) do |t|
42
+ t.test_files = FileList['test/unit/runner*'].to_a
43
+ end
44
+
45
+ desc 'Run integration tests (test/integration/*)'
46
+ Rake::TestTask.new(:integration) do |t|
47
+ t.test_files = FileList['test/integration/runner*'].to_a
48
+ end
49
+
50
+ desc 'Run email tests (test/email/*)'
51
+ Rake::TestTask.new(:email) do |t|
52
+ t.test_files = FileList['test/email*'].to_a
53
+ end
54
+
55
+ end
56
+
data/VERSION ADDED
@@ -0,0 +1,5 @@
1
+ #// vim: set ts=2 sw=2 syntax=ruby ://#
2
+ module Studio54
3
+ VERSION = [0,0,5]
4
+ end
5
+
@@ -0,0 +1,29 @@
1
+ class UsersController < LazyController
2
+
3
+ before_action :index do |obj|
4
+ @second_user = 'me'
5
+ end
6
+
7
+ def index
8
+ @user = User.find(1)
9
+ end
10
+
11
+ def all
12
+ @users = User.all
13
+ end
14
+
15
+ def find_by
16
+ @user = User.find_by({:name => "andrew", :id => 5}, :conjunction => 'OR')
17
+ end
18
+
19
+ def new
20
+ @user = User.new
21
+ end
22
+
23
+ def create(params)
24
+ @user = User.new params[:user]
25
+ @user.save
26
+ end
27
+
28
+ end
29
+
@@ -0,0 +1,4 @@
1
+ class Post < LazyRecord
2
+ belongs_to :users
3
+ end
4
+
@@ -0,0 +1,46 @@
1
+ class User < LazyRecord
2
+ attr_primary :id
3
+ tbl_attr_accessor :name, :age
4
+ has_many :posts
5
+ attr_accessor :humor
6
+ attr_accessor :email
7
+
8
+ # validations
9
+ validates_presence_of :humor
10
+ validates_length_of :name, :minimum => 5, :message => 'is too short'
11
+ validates_numericality_of :age, :less_than => 99, :message => 'must be less than 99'
12
+ validates_format_of :email, :without => /SPAM/
13
+
14
+ validate :name_not_blank
15
+ validate :age_greater_than_18
16
+ def name_not_blank
17
+ errors.add(:name, "can't be blank") if self.name.blank?
18
+ end
19
+
20
+ def age_greater_than_18
21
+ errors.add(:age, "must be greater than 18") if self.age.to_i <= 18
22
+ end
23
+
24
+ define_callbacks :drink
25
+ set_callback :drink, :before do |obj|
26
+ obj.age = 21
27
+ end
28
+ def drink
29
+ run_callbacks :drink do
30
+ "mmm"
31
+ end
32
+ end
33
+
34
+ define_callbacks :save
35
+ set_callback :save, :before do |object|
36
+ @humor = true
37
+ end
38
+
39
+ def save
40
+ run_callbacks :save do
41
+ super
42
+ end
43
+ end
44
+
45
+ end
46
+
@@ -0,0 +1,31 @@
1
+ source :rubygems
2
+
3
+ gem "rack"
4
+ gem "rack-cache"
5
+ gem "rack-flash"
6
+ gem "sinatra"
7
+ # Check config/app_tie to see which active_support files are required.
8
+ # Note: many required files require other active_support files in turn.
9
+ gem "activesupport"
10
+ gem "activemodel"
11
+
12
+ # optional, only need it if serving xml
13
+ gem "builder"
14
+
15
+ # dbi
16
+ gem "dbi"
17
+ # dbi driver
18
+ gem "dbd-mysql"
19
+
20
+ #optional, for sending email
21
+ #gem "pony"
22
+
23
+ group :development do
24
+ gem "thin"
25
+ gem "shotgun"
26
+ end
27
+
28
+ group :test do
29
+ gem "rack-test"
30
+ end
31
+
@@ -0,0 +1,28 @@
1
+ $:.unshift 'lib'
2
+ $:.unshift 'rakelib'
3
+
4
+ require 'rake/testtask'
5
+ require 'rake/clean'
6
+
7
+ task :default => :test
8
+ task :test => [:output_test_count]
9
+
10
+ desc 'Run all *_tests and *_specs (default)'
11
+ test = Rake::TestTask.new(:test) do |t|
12
+ TEST_LIST = FileList['test/*_test.rb'].to_a
13
+ SPEC_LIST = FileList['test/*_spec.rb'].to_a
14
+ t.test_files = TEST_LIST
15
+ t.test_files + SPEC_LIST unless SPEC_LIST.empty?
16
+ end
17
+
18
+ task :output_test_count do
19
+ puts(TEST_LIST.count + SPEC_LIST.count).to_s + " test files to run."
20
+ end
21
+
22
+ namespace :test do
23
+ desc 'Run test suite (suite.rb)'
24
+ Rake::TestTask.new(:suite) do |t|
25
+ t.test_files = FileList['test/suite.rb'].to_a
26
+ end
27
+ end
28
+
@@ -0,0 +1,9 @@
1
+ cur_dir = File.expand_path(File.dirname(__FILE__))
2
+ require File.join(cur_dir, 'dance')
3
+ use Rack::Cache,
4
+ :verbose => true,
5
+ :metastore => "file:#{cur_dir}/rack/cache/meta",
6
+ :entitystore => "file:#{cur_dir}/rack/cache/body"
7
+
8
+ run Studio54::Dancefloor
9
+
@@ -0,0 +1,12 @@
1
+ module Studio54
2
+ require_relative 'environment'
3
+ include Config::Environment
4
+ require 'config/studio54_tie'
5
+ require 'config/sinatra'
6
+ require 'config/db'
7
+
8
+ require File.join(LIBDIR, 'before_filters')
9
+ require File.join(LIBDIR, 'after_filters')
10
+ require File.join(LIBDIR, 'helpers')
11
+ end
12
+
@@ -0,0 +1,20 @@
1
+ module Studio54
2
+ class Db
3
+
4
+ cattr_accessor :host
5
+ cattr_accessor :user
6
+ cattr_accessor :pass
7
+ cattr_accessor :schema
8
+ cattr_accessor :type
9
+ cattr_accessor :conn
10
+
11
+ self.host = 'localhost'
12
+ self.user = 'root'
13
+ self.pass = 'root'
14
+ self.schema = 'test'
15
+ # Mysql
16
+ self.type = 'Mysql'
17
+
18
+ end
19
+ end
20
+
@@ -0,0 +1,19 @@
1
+ module Studio54
2
+ begin
3
+ Db.conn.disconnect if Db.conn.kind_of? DBI::DatabaseHandle and
4
+ Db.conn.connected?
5
+
6
+ # connect to the MySQL server
7
+ Db.conn = DBI.connect("DBI:#{Db.type}:#{Db.schema}:#{Db.host}",
8
+ Db.user, Db.pass)
9
+
10
+ rescue DBI::DatabaseError => e
11
+ puts "Error code: #{e.err}"
12
+ puts "Error message: #{e.errstr}"
13
+ puts "Error SQLSTATE: #{e.state}" if e.respond_to? :state
14
+
15
+ # Db.conn is disconnected automatically if used in a controller
16
+ # action
17
+ end
18
+ end
19
+
@@ -0,0 +1,17 @@
1
+ module Studio54
2
+ module Config
3
+ module Environment
4
+
5
+ ROOTDIR = File.expand_path(File.dirname(__FILE__) + '/..')
6
+ APPDIR = File.join(ROOTDIR, "app")
7
+ LIBDIR = File.join(ROOTDIR, "lib")
8
+ BINDIR = File.join(ROOTDIR, "bin")
9
+ CONFIGDIR = File.join(ROOTDIR, "config")
10
+ MODELSDIR = File.join(APPDIR, "models")
11
+ CONTROLLERSDIR = File.join(APPDIR, "controllers")
12
+
13
+ $:.unshift(ROOTDIR) unless $:.include? ROOTDIR
14
+ end
15
+ end
16
+ end
17
+
@@ -0,0 +1,36 @@
1
+ class Studio54::Dancefloor < Sinatra::Base
2
+
3
+ set :app_file, __FILE__
4
+
5
+ configure :development do
6
+ set :server, %w[thin mongrel webrick]
7
+ set :dump_errors, false
8
+ set :shotgun, false
9
+ end
10
+
11
+ configure :production do
12
+ set :shotgun, false
13
+ end
14
+
15
+ # app root dir
16
+ set :root, File.join(File.expand_path(File.dirname(__FILE__)), '..')
17
+ ### Static Files ###
18
+ # serve static files
19
+ set :static, true
20
+ # static file directory, served_from => :views.
21
+ # To override Sinatra's wrapping of rack/static, disable
22
+ # set :static and set :public_folder and explicity use
23
+ # Rack::Static from config.ru.
24
+ set :public_folder, Proc.new { File.join(root, 'static') }
25
+ ###
26
+ # template files directory
27
+ set :views, Proc.new { File.join(root, 'public') }
28
+ # whether or not to use layout.* in view folder
29
+ set :erb, :layout => true
30
+
31
+ # enable sessions
32
+ set :sessions, true
33
+ # using _method (PUT, DELETE)
34
+ set :method_override, true
35
+ end
36
+