concen 0.2.4 → 0.2.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 (150) hide show
  1. data/Gemfile +0 -3
  2. data/Gemfile.lock +0 -9
  3. data/LICENSE +1 -1
  4. data/README.md +23 -1
  5. data/app/assets/stylesheets/concen/application.css.sass +14 -16
  6. data/app/assets/stylesheets/concen/compass/_css3.scss +17 -0
  7. data/app/assets/stylesheets/concen/compass/_layout.scss +3 -0
  8. data/app/assets/stylesheets/concen/compass/_reset-legacy.scss +3 -0
  9. data/app/assets/stylesheets/concen/compass/_reset.scss +3 -0
  10. data/app/assets/stylesheets/concen/compass/_support.scss +36 -0
  11. data/app/assets/stylesheets/concen/compass/_typography.scss +4 -0
  12. data/app/assets/stylesheets/concen/compass/_utilities.scss +9 -0
  13. data/app/assets/stylesheets/concen/compass/css3/_appearance.scss +13 -0
  14. data/app/assets/stylesheets/concen/compass/css3/_background-clip.scss +43 -0
  15. data/app/assets/stylesheets/concen/compass/css3/_background-origin.scss +42 -0
  16. data/app/assets/stylesheets/concen/compass/css3/_background-size.scss +26 -0
  17. data/app/assets/stylesheets/concen/compass/css3/_border-radius.scss +135 -0
  18. data/app/assets/stylesheets/concen/compass/css3/_box-shadow.scss +93 -0
  19. data/app/assets/stylesheets/concen/compass/css3/_box-sizing.scss +13 -0
  20. data/app/assets/stylesheets/concen/compass/css3/_box.scss +111 -0
  21. data/app/assets/stylesheets/concen/compass/css3/_columns.scss +60 -0
  22. data/app/assets/stylesheets/concen/compass/css3/_font-face.scss +63 -0
  23. data/app/assets/stylesheets/concen/compass/css3/_gradient.scss +99 -0
  24. data/app/assets/stylesheets/concen/compass/css3/_images.scss +132 -0
  25. data/app/assets/stylesheets/concen/compass/css3/_inline-block.scss +16 -0
  26. data/app/assets/stylesheets/concen/compass/css3/_opacity.scss +19 -0
  27. data/app/assets/stylesheets/concen/compass/css3/_pie.scss +73 -0
  28. data/app/assets/stylesheets/concen/compass/css3/_shared.scss +38 -0
  29. data/app/assets/stylesheets/concen/compass/css3/_text-shadow.scss +62 -0
  30. data/app/assets/stylesheets/concen/compass/css3/_transform-legacy.scss +87 -0
  31. data/app/assets/stylesheets/concen/compass/css3/_transform.scss +598 -0
  32. data/app/assets/stylesheets/concen/compass/css3/_transition.scss +119 -0
  33. data/app/assets/stylesheets/concen/compass/layout/_grid-background.scss +178 -0
  34. data/app/assets/stylesheets/concen/compass/layout/_sticky-footer.scss +23 -0
  35. data/app/assets/stylesheets/concen/compass/layout/_stretching.scss +24 -0
  36. data/app/assets/stylesheets/concen/compass/reset/_utilities-legacy.scss +135 -0
  37. data/app/assets/stylesheets/concen/compass/reset/_utilities.scss +140 -0
  38. data/app/assets/stylesheets/concen/compass/typography/_links.scss +3 -0
  39. data/app/assets/stylesheets/concen/compass/typography/_lists.scss +4 -0
  40. data/app/assets/stylesheets/concen/compass/typography/_text.scss +4 -0
  41. data/app/assets/stylesheets/concen/compass/typography/_vertical_rhythm.scss +193 -0
  42. data/app/assets/stylesheets/concen/compass/typography/links/_hover-link.scss +5 -0
  43. data/app/assets/stylesheets/concen/compass/typography/links/_link-colors.scss +28 -0
  44. data/app/assets/stylesheets/concen/compass/typography/links/_unstyled-link.scss +7 -0
  45. data/app/assets/stylesheets/concen/compass/typography/lists/_bullets.scss +34 -0
  46. data/app/assets/stylesheets/concen/compass/typography/lists/_horizontal-list.scss +61 -0
  47. data/app/assets/stylesheets/concen/compass/typography/lists/_inline-block-list.scss +47 -0
  48. data/app/assets/stylesheets/concen/compass/typography/lists/_inline-list.scss +44 -0
  49. data/app/assets/stylesheets/concen/compass/typography/text/_ellipsis.scss +25 -0
  50. data/app/assets/stylesheets/concen/compass/typography/text/_force-wrap.scss +12 -0
  51. data/app/assets/stylesheets/concen/compass/typography/text/_nowrap.scss +2 -0
  52. data/app/assets/stylesheets/concen/compass/typography/text/_replacement.scss +34 -0
  53. data/app/assets/stylesheets/concen/compass/utilities/_color.scss +1 -0
  54. data/app/assets/stylesheets/concen/compass/utilities/_general.scss +6 -0
  55. data/app/assets/stylesheets/concen/compass/utilities/_links.scss +5 -0
  56. data/app/assets/stylesheets/concen/compass/utilities/_lists.scss +6 -0
  57. data/app/assets/stylesheets/concen/compass/utilities/_print.scss +17 -0
  58. data/app/assets/stylesheets/concen/compass/utilities/_sprites.scss +1 -0
  59. data/app/assets/stylesheets/concen/compass/utilities/_tables.scss +3 -0
  60. data/app/assets/stylesheets/concen/compass/utilities/_text.scss +5 -0
  61. data/app/assets/stylesheets/concen/compass/utilities/color/_contrast.scss +28 -0
  62. data/app/assets/stylesheets/concen/compass/utilities/general/_clearfix.scss +44 -0
  63. data/app/assets/stylesheets/concen/compass/utilities/general/_float.scss +30 -0
  64. data/app/assets/stylesheets/concen/compass/utilities/general/_hacks.scss +46 -0
  65. data/app/assets/stylesheets/concen/compass/utilities/general/_min.scss +16 -0
  66. data/app/assets/stylesheets/concen/compass/utilities/general/_reset.scss +2 -0
  67. data/app/assets/stylesheets/concen/compass/utilities/general/_tabs.scss +1 -0
  68. data/app/assets/stylesheets/concen/compass/utilities/general/_tag-cloud.scss +18 -0
  69. data/app/assets/stylesheets/concen/compass/utilities/links/_hover-link.scss +3 -0
  70. data/app/assets/stylesheets/concen/compass/utilities/links/_link-colors.scss +3 -0
  71. data/app/assets/stylesheets/concen/compass/utilities/links/_unstyled-link.scss +3 -0
  72. data/app/assets/stylesheets/concen/compass/utilities/lists/_bullets.scss +3 -0
  73. data/app/assets/stylesheets/concen/compass/utilities/lists/_horizontal-list.scss +3 -0
  74. data/app/assets/stylesheets/concen/compass/utilities/lists/_inline-block-list.scss +3 -0
  75. data/app/assets/stylesheets/concen/compass/utilities/lists/_inline-list.scss +3 -0
  76. data/app/assets/stylesheets/concen/compass/utilities/sprites/_base.scss +66 -0
  77. data/app/assets/stylesheets/concen/compass/utilities/sprites/_sprite-img.scss +56 -0
  78. data/app/assets/stylesheets/concen/compass/utilities/tables/_alternating-rows-and-columns.scss +20 -0
  79. data/app/assets/stylesheets/concen/compass/utilities/tables/_borders.scss +33 -0
  80. data/app/assets/stylesheets/concen/compass/utilities/tables/_scaffolding.scss +9 -0
  81. data/app/assets/stylesheets/concen/compass/utilities/text/_ellipsis.scss +3 -0
  82. data/app/assets/stylesheets/concen/compass/utilities/text/_nowrap.scss +3 -0
  83. data/app/assets/stylesheets/concen/compass/utilities/text/_replacement.scss +3 -0
  84. data/app/assets/stylesheets/concen/partials/_base.sass +4 -4
  85. data/app/assets/stylesheets/concen/partials/_variables.sass +5 -5
  86. data/app/helpers/concen/application_helper.rb +0 -6
  87. data/app/models/concen/page.rb +12 -3
  88. data/app/views/concen/grid_files/_form.html.erb +23 -0
  89. data/app/views/concen/grid_files/edit.html.erb +10 -0
  90. data/app/views/concen/pages/_file_list.erb +11 -0
  91. data/app/views/concen/pages/_files.erb +32 -0
  92. data/app/views/concen/pages/_form.html.erb +26 -0
  93. data/app/views/concen/pages/_nested_list.html.erb +22 -0
  94. data/app/views/concen/pages/edit.html.erb +19 -0
  95. data/app/views/concen/pages/index.html.erb +12 -0
  96. data/app/views/concen/pages/new.html.erb +10 -0
  97. data/app/views/concen/performances/_runtimes.html.erb +8 -0
  98. data/app/views/concen/performances/show.html.erb +40 -0
  99. data/app/views/concen/sessions/new.html.erb +17 -0
  100. data/app/views/concen/statuses/_server.html.erb +34 -0
  101. data/app/views/concen/statuses/show.html.erb +27 -0
  102. data/app/views/concen/traffics/_pages.html.erb +8 -0
  103. data/app/views/concen/traffics/_referrals.html.erb +12 -0
  104. data/app/views/concen/traffics/show.html.erb +40 -0
  105. data/app/views/concen/users/_form.html.erb +42 -0
  106. data/app/views/concen/users/{_password_reset.html.haml → _password_reset.html.erb} +0 -0
  107. data/app/views/concen/users/_settings.html.erb +23 -0
  108. data/app/views/concen/users/edit.html.erb +12 -0
  109. data/app/views/concen/users/index.html.erb +40 -0
  110. data/app/views/concen/users/new.html.erb +6 -0
  111. data/app/views/concen/users/new_invite.html.erb +24 -0
  112. data/app/views/concen/users/new_reset_password.html.erb +24 -0
  113. data/app/views/layouts/concen/{_additional_header_links.haml → _additional_header_links.html.erb} +0 -0
  114. data/app/views/layouts/concen/_header.html.erb +24 -0
  115. data/app/views/layouts/concen/{maintenance.html.haml → _iphone.html.erb} +0 -0
  116. data/app/views/layouts/concen/application.html.erb +42 -0
  117. data/app/views/layouts/concen/maintenance.html.erb +0 -0
  118. data/concen.gemspec +0 -2
  119. data/lib/concen/engine.rb +0 -1
  120. data/lib/concen/version.rb +1 -1
  121. data/test/support/raw_text/smartypants.html +1 -1
  122. data/test/support/raw_text/smartypants.txt +1 -1
  123. metadata +130 -74
  124. data/app/views/concen/grid_files/_form.html.haml +0 -15
  125. data/app/views/concen/grid_files/edit.html.haml +0 -7
  126. data/app/views/concen/pages/_file_list.haml +0 -7
  127. data/app/views/concen/pages/_files.haml +0 -24
  128. data/app/views/concen/pages/_form.html.haml +0 -17
  129. data/app/views/concen/pages/_nested_list.html.haml +0 -15
  130. data/app/views/concen/pages/edit.html.haml +0 -13
  131. data/app/views/concen/pages/index.html.haml +0 -12
  132. data/app/views/concen/pages/new.html.haml +0 -7
  133. data/app/views/concen/performances/_runtimes.html.haml +0 -5
  134. data/app/views/concen/performances/show.html.haml +0 -27
  135. data/app/views/concen/sessions/new.html.haml +0 -12
  136. data/app/views/concen/statuses/_server.html.haml +0 -19
  137. data/app/views/concen/statuses/show.html.haml +0 -18
  138. data/app/views/concen/traffics/_pages.html.haml +0 -5
  139. data/app/views/concen/traffics/_referrals.html.haml +0 -9
  140. data/app/views/concen/traffics/show.html.haml +0 -27
  141. data/app/views/concen/users/_form.html.haml +0 -29
  142. data/app/views/concen/users/_settings.html.haml +0 -15
  143. data/app/views/concen/users/edit.html.haml +0 -9
  144. data/app/views/concen/users/index.html.haml +0 -32
  145. data/app/views/concen/users/new.html.haml +0 -4
  146. data/app/views/concen/users/new_invite.html.haml +0 -15
  147. data/app/views/concen/users/new_reset_password.html.haml +0 -15
  148. data/app/views/layouts/concen/_header.html.haml +0 -18
  149. data/app/views/layouts/concen/_iphone.html.haml +0 -6
  150. data/app/views/layouts/concen/application.html.haml +0 -33
@@ -1,13 +0,0 @@
1
- - content_for :head_javascripts do
2
- = javascript_include_tag "concen/pages"
3
-
4
- #content
5
- %h1 Edit Page
6
- = render "form"
7
- #file-manager
8
- .border
9
- #file-uploader{:data => {"upload-path" => upload_concen_page_grid_files_path(@page)}}
10
- %noscript
11
- %p Please enable JavaScript to use file uploader.
12
- = render "files"
13
- .clear
@@ -1,12 +0,0 @@
1
- - content_for :head_javascripts do
2
- = javascript_include_tag "concen/pages"
3
-
4
- #content
5
- %h1
6
- = one_line do
7
- %span Pages
8
- - unless @page
9
- = link_to "New Page", new_concen_page_path, :class => "link-button"
10
-
11
- - if @page
12
- = render :partial => "nested_list", :locals => {:page => @page, :root => true}
@@ -1,7 +0,0 @@
1
- - content_for :head_javascripts do
2
- = javascript_include_tag "concen/pages"
3
-
4
- #content
5
- %h1 New Page
6
- .clearfix
7
- = render "form"
@@ -1,5 +0,0 @@
1
- %ul
2
- - for stat in @runtimes_stats
3
- %li
4
- %p= stat.first
5
- %p.right= stat.last
@@ -1,27 +0,0 @@
1
- - content_for :head_javascripts do
2
- /[if lte IE 8]
3
- = javascript_include_tag "concen/excanvas"
4
- = javascript_include_tag "concen/performances"
5
-
6
- #content
7
- .panels
8
- .panel.wide
9
- .border
10
- %h3 Responses in Past Hour
11
- .graph
12
- #recent-responses{:style => "width: 100%; height: 200px;"}
13
-
14
- .panels
15
- .panel.total-runtime
16
- .border
17
- %h3 Average Total Runtime
18
- %ul
19
- .panel.view-runtime
20
- .border
21
- %h3 Average View Runtime
22
- %ul
23
- .panel.mongodb-runtime.edge
24
- .border
25
- %h3 Average MongoDB Runtime
26
- %ul
27
- .clear
@@ -1,12 +0,0 @@
1
- #content
2
- %h1 Sign In
3
- = form_tag concen_sessions_path do
4
- .field
5
- = label_tag :username
6
- = text_field_tag :username, params[:username]
7
- .field
8
- = label_tag :password
9
- = password_field_tag :password, params[:password]
10
- .actions
11
- = submit_tag "Sign In"
12
- = link_to "Reset Password", new_reset_password_concen_users_path
@@ -1,19 +0,0 @@
1
- %ul
2
- %li
3
- %p Uptime
4
- %p.right= @server_stats[:uptime] if @server_stats
5
- %li
6
- %p Processor
7
- %p.right= "#{@server_stats[:processor][:user]}% user, #{@server_stats[:processor][:sys]}% sys, #{@server_stats[:processor][:idle]}% idle" if @server_stats[:processor].present?
8
- %li
9
- %p Memory
10
- %p.right= "#{@server_stats[:memory][:used]} MB used, #{@server_stats[:memory][:free]} MB free" if @server_stats[:memory].present?
11
- %li
12
- %p MongoDB Data Size
13
- %p.right= number_to_human_size(@mongodb_stats["dataSize"])
14
- %li
15
- %p MongoDB Index Size
16
- %p.right= number_to_human_size(@mongodb_stats["indexSize"])
17
- %li
18
- %p MongoDB GridFS Size
19
- %p.right= number_to_human_size(@mongodb_grid_fs_stats)
@@ -1,18 +0,0 @@
1
- - content_for :head_javascripts do
2
- = javascript_include_tag "concen/statuses"
3
-
4
- #content
5
- .panels
6
- .panel.pages
7
- .border
8
- %h3 Pages
9
- %p.big-number
10
- .panel.users
11
- .border
12
- %h3 Users
13
- %p.big-number
14
- .panel.server.edge
15
- .border
16
- %h3 Server
17
- %ul
18
- .clear
@@ -1,5 +0,0 @@
1
- %ul
2
- - for stat in @pages_stats
3
- %li
4
- %p= link_to stat.first, stat.first
5
- %p.right= stat.last
@@ -1,9 +0,0 @@
1
- %ul
2
- - if @referrals_stats.count == 0
3
- %li
4
- %p No Referrals
5
- - else
6
- - for stat in @referrals_stats
7
- %li
8
- %p= stat.first
9
- %p.right= stat.last
@@ -1,27 +0,0 @@
1
- - content_for :head_javascripts do
2
- /[if lte IE 8]
3
- = javascript_include_tag "concen/excanvas"
4
- = javascript_include_tag "concen/traffics"
5
-
6
- #content
7
- .panels
8
- .panel.wide
9
- .border
10
- %h3 Visits in Past 24 Hours
11
- .graph
12
- #recent-visits{:style => "width: 100%; height: 200px;"}
13
-
14
- .panels
15
- .panel.visits-1-hour
16
- .border
17
- %h3 Visits in Past Hour
18
- %p.big-number
19
- .panel.pages
20
- .border
21
- %h3 Pages
22
- %ul
23
- .panel.referrals.edge
24
- .border
25
- %h3 Referrals
26
- %ul
27
- .clear
@@ -1,29 +0,0 @@
1
- = form_for @user do |f|
2
- - if @user.errors.any?
3
- #errorExplanation
4
- %h3= "#{pluralize(@user.errors.count, "error")} prohibited this parent from being saved:"
5
- %ul
6
- - @user.errors.full_messages.each do |msg|
7
- %li= msg
8
- - if @user.invitation_token
9
- = f.hidden_field :invitation_token
10
- .field
11
- = f.label :full_name
12
- = f.text_field :full_name
13
- .field
14
- = f.label :username
15
- = f.text_field :username
16
- .field
17
- = f.label :email
18
- = f.text_field :email
19
- .field
20
- = f.label :password
21
- = f.password_field :password
22
- .field
23
- = f.label :password_confirmation
24
- = f.password_field :password_confirmation
25
- .actions
26
- = f.submit "Save"
27
- - if @user.persisted?
28
- = link_to "Delete", concen_page_path(@user), :method => :delete
29
- = link_to "Cancel", concen_pages_path
@@ -1,15 +0,0 @@
1
- = form_for @user do |f|
2
- - if @user.errors.any?
3
- #errorExplanation
4
- %h3= "#{pluralize(@user.errors.count, "error")} prohibited this parent from being saved:"
5
- %ul
6
- - @user.errors.full_messages.each do |msg|
7
- %li= msg
8
- .field
9
- = f.label :current_password, "Current Password"
10
- = f.password_field :current_password
11
- .field
12
- = f.label :password, "New Password"
13
- = f.password_field :password
14
- .actions
15
- = f.submit "Update"
@@ -1,9 +0,0 @@
1
- #content
2
- %h1 Edit User Settings
3
- .clearfix
4
- - if params.try(:[], :invitation_token) || params.try(:[], :concen_user).try(:[], :invitation_token)
5
- = render "form"
6
- - elsif params.try(:[], :password_reset_token) || params.try(:[], :concen_user).try(:[], :password_reset_token)
7
- = render "password_reset"
8
- - else
9
- = render "settings"
@@ -1,32 +0,0 @@
1
- - content_for :head_javascripts do
2
- = javascript_include_tag "concen/users"
3
-
4
- #content
5
- %h1
6
- = one_line do
7
- %span Users
8
- = link_to "Invite New User", new_invite_concen_users_path, :class => "link-button"
9
- .border
10
- %table.users
11
- %thead
12
- %tr
13
- %th Username
14
- %th Full Name
15
- %th Email
16
- %th Sign Up On
17
- %th Pages
18
- %th Full Control
19
- - if current_concen_user.full_control
20
- %th Actions
21
- %tbody
22
- - for user in @users
23
- %tr
24
- %td= user.username
25
- %td= user.full_name
26
- %td= user.email
27
- %td= user.created_at.strftime("%d %B %Y")
28
- %td= Concen::Page.where(:authors.in => [user.username, user.full_name, user.email]).count
29
- %td= check_box_tag "full_control", 1, user.full_control, "data-path" => toggle_attribute_concen_user_path(user), :disabled => user == current_concen_user || !current_concen_user.full_control
30
- - if current_concen_user.full_control
31
- %td
32
- = link_to "Delete", concen_user_path(user), :method => :delete, :confirm => "Are you sure?"
@@ -1,4 +0,0 @@
1
- #content
2
- %h1 New User
3
- .clearfix
4
- = render "form"
@@ -1,15 +0,0 @@
1
- #content
2
- %h1 Send Invitation
3
- .clearfix
4
- = form_for @user, :url => invite_concen_users_path do |f|
5
- - if @user.errors.any?
6
- #errorExplanation
7
- %h3= "#{pluralize(@user.errors.count, "error")} prohibited this parent from being saved:"
8
- %ul
9
- - @user.errors.full_messages.each do |msg|
10
- %li= msg
11
- .field
12
- = f.label :email
13
- = f.text_field :email
14
- .actions
15
- = f.submit "Invite"
@@ -1,15 +0,0 @@
1
- #content
2
- %h1 Reset Password
3
- .clearfix
4
- = form_for @user, :url => reset_password_concen_users_path do |f|
5
- - if @user.errors.any?
6
- #errorExplanation
7
- %h3= "#{pluralize(@user.errors.count, "error")} prohibited this parent from being saved:"
8
- %ul
9
- - @user.errors.full_messages.each do |msg|
10
- %li= msg
11
- .field
12
- = f.label :email
13
- = f.text_field :email
14
- .actions
15
- = f.submit "Send"
@@ -1,18 +0,0 @@
1
- %header
2
- %h1
3
- %a{:href => "/"}
4
- %span.engine-name Concen
5
- %span.application-name= Concen.application_name
6
- %nav
7
- %ul
8
- - if current_concen_user
9
- %li= link_to "Status", concen_status_path
10
- %li= link_to "Traffic", concen_traffic_path
11
- %li= link_to "Performance", concen_performance_path
12
- %li= link_to "Pages", concen_pages_path
13
- %li= link_to "Users", concen_users_path
14
- = render "layouts/concen/additional_header_links"
15
- %li= link_to "Settings", edit_concen_user_path(current_concen_user)
16
- %li= link_to "Sign Out", concen_signout_path
17
- - else
18
- %li= link_to "Sign In", concen_signin_path
@@ -1,6 +0,0 @@
1
- / %meta(name="viewport" content="width=580")
2
- / %style(type="text/css" media="screen")
3
- / :plain
4
- / body {
5
- / min-width: 580px;
6
- / }
@@ -1,33 +0,0 @@
1
- !!! 5
2
- %html.no-js{:lang => "en"}
3
- %head
4
- %meta{:charset => "utf-8"}
5
- %title= "#{@page_title + ' - ' if @page_title}Concen - #{Concen.application_name}"
6
- %meta{:name => "description", :content => "Web application to control and monitor a website."}
7
- %meta{:name => "author", :content => "Steve Randy Tantra"}
8
- %meta{:name => "copyright", :content => "Copyright © 2011 by Steve Randy Tantra"}
9
- %meta{:name => "DC.title", :content => "#{@page_title + ' - ' if @page_title}Control Center - #{Concen.application_name}"}
10
- %meta{:name => "DC.subject", :content => "Control, Monitor, Center, Web Application"}
11
- %meta{:name => "DC.creator", :content => "Steve Randy Tantra"}
12
- %meta{:name => "viewport", :content => "width = 1024"}
13
- %meta{"http-equiv" => "X-UA-Compatible", :content => "IE=edge"}
14
- = csrf_meta_tag
15
- = stylesheet_link_tag "concen/application"
16
- - if content_for?(:head_stylesheets)
17
- = yield :head_stylesheets
18
- /[if lt IE 8]
19
- = stylesheet_link_tag "concen/ie"
20
- %script{:type => "text/javascript", :src => "http://use.typekit.com/#{Concen.typekit_id}.js"}
21
- %script{:type => "text/javascript"} try{Typekit.load();}catch(e){}
22
- = javascript_include_tag "concen/application"
23
- - if content_for?(:head_javascripts)
24
- = yield :head_javascripts
25
- - if content_for?(:head)
26
- = yield :head
27
- %body.concen
28
- = render "layouts/concen/header"
29
- = yield
30
- %footer.clearfix
31
- %p
32
- %span Created by
33
- = link_to "Steve Randy Tantra", "http://steverandytantra.com/"