studio54 0.0.5

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 (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
@@ -0,0 +1,8 @@
1
+ module Studio54
2
+
3
+ class Dancefloor
4
+
5
+ end
6
+
7
+ end
8
+
@@ -0,0 +1,41 @@
1
+ class IndexPageTest < MiniTest::Unit::TestCase
2
+ include Rack::Test::Methods
3
+ include Studio54
4
+
5
+ def app
6
+ Dancefloor.new
7
+ end
8
+
9
+ def test_callbacks_working
10
+ get '/'
11
+ var = nil
12
+ Base.app_instance.instance_eval do
13
+ var = @second_user
14
+ end
15
+ assert_equal 'me', var
16
+ end
17
+
18
+ def test_index_response
19
+ get '/'
20
+ app = Base.app_instance
21
+ body = nil
22
+ app.instance_eval do
23
+ body = erb :index
24
+ end
25
+ assert_equal body, last_response.body
26
+ assert_equal true, last_response.ok?
27
+ assert_equal true, last_response.html?
28
+ end
29
+
30
+ def test_flash_is_set
31
+ get '/'
32
+ app = Base.app_instance
33
+ flashy = nil
34
+ app.instance_eval do
35
+ flashy = flash[:notice]
36
+ end
37
+ assert_equal('hi', flashy)
38
+ end
39
+
40
+ end
41
+
@@ -0,0 +1,50 @@
1
+ class PartialTest < MiniTest::Unit::TestCase
2
+ include Rack::Test::Methods
3
+ include Studio54
4
+
5
+ def app
6
+ Dancefloor.new
7
+ end
8
+
9
+ FULL_RENDERING = <<HTML
10
+ <html>
11
+ <head>
12
+ <!--
13
+ -<link rel="stylesheet" type="text/css" href="/css/yui_reset.css" />
14
+ -<link rel="stylesheet" type="text/css" href="/css/base.css" />
15
+ -->
16
+ </head>
17
+ <body>
18
+ <title>Site</title>
19
+ <div id="container">
20
+ <h1>Partial Test</h1>
21
+ <p>I am 1 years old</p>
22
+ <p>I am 2 years old</p>
23
+ <p>I am 3 years old</p>
24
+ <p>I am 4 years old</p>
25
+ <p>I am 5 years old</p>
26
+ <p>I am 6 years old</p>
27
+
28
+
29
+
30
+ </div>
31
+ </body>
32
+ </html>
33
+
34
+ HTML
35
+
36
+ def test_partial_rendered
37
+ get '/partial'
38
+ app = Base.app_instance
39
+ body = ""
40
+ app.instance_eval do
41
+ body += erb :partial_test
42
+ end
43
+ assert_equal body, last_response.body
44
+ assert_equal true, last_response.ok?
45
+ assert_equal true, last_response.html?
46
+ assert_equal FULL_RENDERING, body
47
+ end
48
+
49
+ end
50
+
@@ -0,0 +1,14 @@
1
+ class MailTest < MiniTest::Unit::TestCase
2
+ include Rack::Test::Methods
3
+ include Studio54
4
+
5
+ def app
6
+ Dancefloor.new
7
+ end
8
+
9
+ def test_send_email_with_pony
10
+ post '/email/send'
11
+ assert_equal true, last_response.errors.empty?
12
+ end
13
+ end
14
+
@@ -0,0 +1,23 @@
1
+ module Rack
2
+ class MockResponse
3
+
4
+ # these methods are defined by Sinatra, but just
5
+ # in case...
6
+ def content_length
7
+ self["Content-Length"]
8
+ end unless method_defined? :content_length
9
+
10
+ def content_type
11
+ self["Content-Type"]
12
+ end unless method_defined? :content_type
13
+
14
+ # Not a good method, but probably good enough...
15
+ def html?
16
+ body = Array.wrap(self.body)
17
+ content_type =~ %r{text/html} and
18
+ body.detect {|e| e =~ %r{<\w>} || e =~ %r{<br}}.present?
19
+ end
20
+
21
+ end
22
+ end
23
+
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+ require_relative 'environment'
3
+
4
+ module Studio54
5
+ # test files (all but email sending)
6
+ Dir.glob('**/*_test.rb').each {|f| require f unless f =~ /email/ }
7
+ end
8
+
@@ -0,0 +1,33 @@
1
+ class AssociationTest < MiniTest::Unit::TestCase
2
+ include Rack::Test::Methods
3
+ include ::Studio54
4
+
5
+ ::NewKlass = Class.new(LazyRecord)
6
+
7
+ def app
8
+ Dancefloor.new
9
+ end
10
+
11
+ def test_has_many_without_reciprocation
12
+ Post.tap do |p|
13
+ assert_raises(LazyRecord::AssociationNotFound) do
14
+ p.class_eval do
15
+ has_many :users
16
+ end
17
+ end
18
+ end
19
+ end
20
+
21
+ def test_reciprocal_association
22
+ Post.tap do |p|
23
+ p.class_eval { belongs_to :users, :new_klass }
24
+ assert_equal [:users, :new_klass].map(&:to_s), p.belongs_to_attributes
25
+ end
26
+ User.tap do |u|
27
+ u.class_eval { has_many :posts }
28
+ assert_equal [:posts].map(&:to_s), u.nested_attributes
29
+ end
30
+ end
31
+
32
+ end
33
+
@@ -0,0 +1,16 @@
1
+ class CallbackTest < MiniTest::Unit::TestCase
2
+ include Rack::Test::Methods
3
+ include ::Studio54
4
+
5
+ def app
6
+ Dancefloor.new
7
+ end
8
+
9
+ def test_single_simple_callback
10
+ u = User.new
11
+ quaff = u.drink
12
+ assert_equal 21, u.age
13
+ assert_equal "mmm", quaff
14
+ end
15
+ end
16
+
@@ -0,0 +1,73 @@
1
+ class DatabaseTest < MiniTest::Unit::TestCase
2
+ include Rack::Test::Methods
3
+ include ::Studio54
4
+
5
+ def app
6
+ Dancefloor.new
7
+ end
8
+
9
+ def test_empty_resultset
10
+ empty_results = []
11
+ assert_raises(LazyRecord::RecordNotFound) do
12
+ User.class_eval do
13
+ test_resultset empty_results
14
+ end
15
+ end
16
+ end
17
+
18
+ def test_non_empty_results
19
+ non_empty_results = [1,2,3]
20
+ ret = nil
21
+ User.class_eval do
22
+ ret = test_resultset non_empty_results
23
+ end
24
+ assert_nil ret
25
+ end
26
+
27
+ def test_invalid_save
28
+ u = User.new
29
+ assert_nil u.save
30
+ end
31
+
32
+ def test_simple_id_find
33
+ @user = User.find(1)
34
+ assert_equal User, @user.class
35
+ assert_equal 1, @user.id.to_i
36
+ assert_equal 'luke', @user.name
37
+ assert_equal 22, @user.age.to_i
38
+ end
39
+
40
+ # need to fix find_by to take into account ORs with the same
41
+ # field name, and a mixture of ANDs and ORs, need a composites
42
+ # hash with a length equal to the sum of the previous arguments
43
+ def test_find_by_conjunction_AND
44
+ @users = User.find_by :name => 'david', :age => 44
45
+ assert_equal 2, @users.count
46
+ end
47
+
48
+ def test_find_by_conjunction_OR
49
+ @users = User.find_by({:name => 'luke', :age => 44}, :conjunction => "OR")
50
+ assert_equal 6, @users.count
51
+ end
52
+
53
+ def test_dynamic_find
54
+ @user = User.find_by_name 'rick'
55
+ assert_equal 13, @user.id.to_i
56
+ end
57
+
58
+ def test_build_user_from_params
59
+ params = {:user => {:name => 'luke', :age => '22'}}
60
+ @user = User.new params[:user]
61
+ assert_equal 'luke', @user.name
62
+ assert_equal '22', @user.age
63
+ end
64
+
65
+ def test_find_all_from_tbl
66
+ @users = User.all
67
+ sql = "SELECT * FROM users;"
68
+ res = Db.conn.execute(sql)
69
+ assert_equal res.count, @users.count
70
+ end
71
+
72
+ end
73
+
@@ -0,0 +1,44 @@
1
+ class ModelIntrospectionTest < MiniTest::Unit::TestCase
2
+ include Rack::Test::Methods
3
+ include ::Studio54
4
+
5
+ def app
6
+ Dancefloor.new
7
+ end
8
+
9
+ def test_tbl_attribute_introspection
10
+ assert_equal :id.to_s, User.primary_key
11
+ assert_equal [:name, :age].map(&:to_s), User.attributes
12
+ assert_equal [:id, :name, :age].map(&:to_s), User.all_attributes
13
+ end
14
+
15
+ def test_default_tbl_name
16
+ assert_equal 'posts', Post.table_name
17
+ end
18
+
19
+ def test_custom_tbl_name
20
+ User.class_eval do
21
+ self.assoc_table_name = 'special_users'
22
+ end
23
+ assert_equal 'special_users', User.table_name
24
+ # and change back so unordered tests don't break
25
+ User.class_eval do
26
+ self.assoc_table_name = 'users'
27
+ end
28
+ assert_equal 'users', User.table_name
29
+ end
30
+
31
+ def test_composite_primary_key
32
+ Post.class_eval do
33
+ attr_primary :id, :user_id
34
+ end
35
+ assert_equal [:id, :user_id].map(&:to_s), Post.primary_key
36
+ # and change back so unordered tests don't break
37
+ Post.class_eval do
38
+ attr_primary nil
39
+ end
40
+ assert_equal nil, Post.primary_key
41
+ end
42
+
43
+ end
44
+
@@ -0,0 +1,19 @@
1
+ class SerializeTest < MiniTest::Unit::TestCase
2
+ include Rack::Test::Methods
3
+ include ::Studio54
4
+
5
+ def app
6
+ Dancefloor.new
7
+ end
8
+
9
+ def test_json_rendering
10
+ @user = User.find(1)
11
+ assert_equal "{\"user\":{\"age\":\"22\",\"id\":\"1\",\"name\":\"luke\"}}", @user.to_json
12
+ end
13
+
14
+ def test_xml_rendering
15
+ @user = User.find(1)
16
+ assert_equal "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<user>\n <id>1</id>\n <name>luke</name>\n <age>22</age>\n</user>\n", @user.to_xml
17
+ end
18
+ end
19
+
@@ -0,0 +1,73 @@
1
+ class ValidationTest < MiniTest::Unit::TestCase
2
+ include Rack::Test::Methods
3
+ include ::Studio54
4
+
5
+ def app
6
+ Dancefloor.new
7
+ end
8
+
9
+ def test_blank_user
10
+ u = User.new
11
+ u.name = ""
12
+ assert_equal false, u.valid?
13
+ assert_equal 5, u.errors.count
14
+ end
15
+
16
+ def test_young_user
17
+ u = User.new
18
+ # should be > 18
19
+ u.age = 17
20
+ u.name = "Katelin"
21
+ u.humor = true
22
+ assert_equal false, u.valid?
23
+ end
24
+
25
+ def test_short_named_user
26
+ u = User.new
27
+ u.age = 29
28
+ u.name = "jon"
29
+ u.humor = true
30
+ assert_equal false, u.valid?
31
+ assert_equal ["is too short"], u.errors[:name]
32
+ assert_equal ["Name is too short"], u.errors.full_messages
33
+ end
34
+
35
+ def test_valid_user
36
+ u = User.new
37
+ u.age = 19
38
+ u.name = "Andrew Dice Clay"
39
+ u.humor = true
40
+ assert_equal true, u.valid?
41
+ end
42
+
43
+ def test_presence_validation
44
+ u = User.new
45
+ u.age = 25
46
+ u.name = "Mel Brooks"
47
+ assert_equal false, u.valid?
48
+ assert_equal ["can't be blank"] , u.errors[:humor]
49
+ assert_equal ["Humor can't be blank"], u.errors.full_messages
50
+ end
51
+
52
+ def test_numericality_of_age
53
+ u = User.new
54
+ u.age = 100
55
+ u.name = "Shania Twain"
56
+ u.humor = true
57
+ assert_equal false, u.valid?
58
+ assert_equal 1, u.errors.count
59
+ assert_equal ["must be less than 99"], u.errors[:age]
60
+ end
61
+
62
+ def test_format_email
63
+ u = User.new
64
+ u.age = 30
65
+ u.name = "jack gonzo"
66
+ u.humor = true
67
+ u.email = "SPAM"
68
+ assert_equal false, u.valid?
69
+ assert_equal 1, u.errors.count
70
+ assert_equal ["is invalid"], u.errors[:email]
71
+ end
72
+ end
73
+
metadata ADDED
@@ -0,0 +1,165 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: studio54
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.5
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Luke Gruber
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-11-06 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rack
16
+ requirement: &84870790 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *84870790
25
+ - !ruby/object:Gem::Dependency
26
+ name: rack-cache
27
+ requirement: &84870070 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *84870070
36
+ - !ruby/object:Gem::Dependency
37
+ name: rack-flash
38
+ requirement: &84869710 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *84869710
47
+ - !ruby/object:Gem::Dependency
48
+ name: sinatra
49
+ requirement: &84869290 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *84869290
58
+ description: Sinatra meets rails, falls in love, and dances through the night.
59
+ email: luke.gru@gmail.com
60
+ executables:
61
+ - studio54
62
+ extensions: []
63
+ extra_rdoc_files: []
64
+ files:
65
+ - dance.rb
66
+ - config/sinatra.rb
67
+ - config/db.rb
68
+ - config/db_connect.rb
69
+ - config/app_tie.rb
70
+ - config/environment.rb
71
+ - Gemfile.lock
72
+ - tags
73
+ - Rakefile
74
+ - rack/cache/meta/25/3a7a342a66b79119b7b8cb34bda89978f9e606
75
+ - rack/cache/meta/c1/34c9b7112c7d884220d6ee9a8e43ec69d2ea6e
76
+ - rack/cache/body/ec/b48431757330e446c58d88e317574ef0eca2e9
77
+ - bare/dance.rb
78
+ - bare/config/sinatra.rb
79
+ - bare/config/db.rb
80
+ - bare/config/studio54_tie.rb
81
+ - bare/config/db_connect.rb
82
+ - bare/config/app_tie.rb
83
+ - bare/config/environment.rb
84
+ - bare/Rakefile
85
+ - bare/lib/after_filters.rb
86
+ - bare/lib/before_filters.rb
87
+ - bare/lib/helpers.rb
88
+ - bare/test/helpers.rb
89
+ - bare/test/suite.rb
90
+ - bare/Gemfile
91
+ - bare/public/index.rhtml
92
+ - bare/public/layout.rhtml
93
+ - bare/static/css/base.css
94
+ - bare/static/css/yui_reset.css
95
+ - bare/config.ru
96
+ - README.md
97
+ - lib/lazy_controller.rb
98
+ - lib/after_filters.rb
99
+ - lib/lazy_record.rb
100
+ - lib/before_filters.rb
101
+ - lib/helpers.rb
102
+ - lib/base.rb
103
+ - lib/studio54.rb
104
+ - lib/partials.rb
105
+ - lib/vendor.rb
106
+ - ideas
107
+ - VERSION
108
+ - app/controllers/users_controller.rb
109
+ - app/models/user.rb
110
+ - app/models/post.rb
111
+ - studio54.gemspec
112
+ - bin/studio54
113
+ - LICENSE
114
+ - test/rack/helpers.rb
115
+ - test/unit/model_introspection_test.rb
116
+ - test/unit/associations_test.rb
117
+ - test/unit/callbacks_test.rb
118
+ - test/unit/serialization_test.rb
119
+ - test/unit/validations_test.rb
120
+ - test/unit/database_test.rb
121
+ - test/helpers.rb
122
+ - test/mail/email_test.rb
123
+ - test/suite.rb
124
+ - test/email.rb
125
+ - test/integration/partial_test.rb
126
+ - test/integration/index_test.rb
127
+ - test/environment.rb
128
+ - Gemfile
129
+ - public/index.rhtml
130
+ - public/layout.rhtml
131
+ - public/test_find_by.rhtml
132
+ - public/_partial_test.rhtml
133
+ - public/form.rhtml
134
+ - public/partial_test.rhtml
135
+ - public/all.rhtml
136
+ - static/hello.html
137
+ - static/css/base.css
138
+ - static/css/yui_reset.css
139
+ - config.ru
140
+ homepage:
141
+ licenses:
142
+ - MIT
143
+ post_install_message:
144
+ rdoc_options: []
145
+ require_paths:
146
+ - lib
147
+ required_ruby_version: !ruby/object:Gem::Requirement
148
+ none: false
149
+ requirements:
150
+ - - ! '>='
151
+ - !ruby/object:Gem::Version
152
+ version: 1.9.1
153
+ required_rubygems_version: !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ! '>='
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ requirements: []
160
+ rubyforge_project:
161
+ rubygems_version: 1.8.10
162
+ signing_key:
163
+ specification_version: 3
164
+ summary: Sinatra meets rails, falls in love, and dances through the night.
165
+ test_files: []