myspaceid-sdk 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (115) hide show
  1. data/README +30 -0
  2. data/lib/myspace.rb +15 -0
  3. data/lib/myspace/exceptions.rb +31 -0
  4. data/lib/myspace/myspace.rb +565 -0
  5. data/lib/myspace/oauth.rb +62 -0
  6. data/lib/patches.rb +42 -0
  7. data/samples/rails/README +83 -0
  8. data/samples/rails/consumer_key.rb +4 -0
  9. data/samples/rails/consumer_key.rb-copyme +4 -0
  10. data/samples/rails/sample/README +256 -0
  11. data/samples/rails/sample/Rakefile +10 -0
  12. data/samples/rails/sample/app/controllers/application.rb +15 -0
  13. data/samples/rails/sample/app/controllers/oauth_controller.rb +68 -0
  14. data/samples/rails/sample/app/controllers/openid_controller.rb +105 -0
  15. data/samples/rails/sample/app/controllers/user_controller.rb +96 -0
  16. data/samples/rails/sample/app/helpers/application_helper.rb +3 -0
  17. data/samples/rails/sample/app/helpers/oauth_helper.rb +2 -0
  18. data/samples/rails/sample/app/helpers/openid_helper.rb +2 -0
  19. data/samples/rails/sample/app/helpers/user_helper.rb +90 -0
  20. data/samples/rails/sample/app/views/oauth/error.rhtml +8 -0
  21. data/samples/rails/sample/app/views/oauth/index.rhtml +8 -0
  22. data/samples/rails/sample/app/views/oauth/profile.rhtml +74 -0
  23. data/samples/rails/sample/app/views/openid/index.rhtml +125 -0
  24. data/samples/rails/sample/app/views/user/complete.rhtml +59 -0
  25. data/samples/rails/sample/app/views/user/index.rhtml +157 -0
  26. data/samples/rails/sample/config/boot.rb +109 -0
  27. data/samples/rails/sample/config/database.yml +22 -0
  28. data/samples/rails/sample/config/environment.rb +75 -0
  29. data/samples/rails/sample/config/environments/development.rb +17 -0
  30. data/samples/rails/sample/config/environments/production.rb +24 -0
  31. data/samples/rails/sample/config/environments/test.rb +22 -0
  32. data/samples/rails/sample/config/initializers/inflections.rb +10 -0
  33. data/samples/rails/sample/config/initializers/mime_types.rb +5 -0
  34. data/samples/rails/sample/config/initializers/new_rails_defaults.rb +17 -0
  35. data/samples/rails/sample/config/locales/en.yml +5 -0
  36. data/samples/rails/sample/config/routes.rb +43 -0
  37. data/samples/rails/sample/db/development.sqlite3 +0 -0
  38. data/samples/rails/sample/doc/README_FOR_APP +5 -0
  39. data/samples/rails/sample/public/404.html +30 -0
  40. data/samples/rails/sample/public/422.html +30 -0
  41. data/samples/rails/sample/public/500.html +33 -0
  42. data/samples/rails/sample/public/dispatch.cgi +10 -0
  43. data/samples/rails/sample/public/dispatch.fcgi +24 -0
  44. data/samples/rails/sample/public/dispatch.rb +10 -0
  45. data/samples/rails/sample/public/favicon.ico +0 -0
  46. data/samples/rails/sample/public/images/8b_Home.jpg +0 -0
  47. data/samples/rails/sample/public/images/8b_homecomp_200.jpg +0 -0
  48. data/samples/rails/sample/public/images/8b_profile_page_201.jpg +0 -0
  49. data/samples/rails/sample/public/images/LArge_150x35_myspaceID.png +0 -0
  50. data/samples/rails/sample/public/images/MySpaceID-loginwith-156x28.png +0 -0
  51. data/samples/rails/sample/public/images/appengine_button_noborder.gif +0 -0
  52. data/samples/rails/sample/public/images/background.png +0 -0
  53. data/samples/rails/sample/public/images/blue_150_Loginwithmyspaceid.png +0 -0
  54. data/samples/rails/sample/public/images/blue_150_signupwithmyspaceid.png +0 -0
  55. data/samples/rails/sample/public/images/blue_90_myspaceid.png +0 -0
  56. data/samples/rails/sample/public/images/button-background.gif +0 -0
  57. data/samples/rails/sample/public/images/grey_150_Loginwithmyspaceid.png +0 -0
  58. data/samples/rails/sample/public/images/grey_180_signupwithmyspaceid.png +0 -0
  59. data/samples/rails/sample/public/images/grey_90_myspaceid.png +0 -0
  60. data/samples/rails/sample/public/images/image.gif +0 -0
  61. data/samples/rails/sample/public/images/keyhole_buttons_only.png +0 -0
  62. data/samples/rails/sample/public/images/level_icon.png +0 -0
  63. data/samples/rails/sample/public/images/myspaceid.png +0 -0
  64. data/samples/rails/sample/public/images/nav_select.png +0 -0
  65. data/samples/rails/sample/public/images/openid-16x16.gif +0 -0
  66. data/samples/rails/sample/public/images/openid-icon.png +0 -0
  67. data/samples/rails/sample/public/images/openid-logo.png +0 -0
  68. data/samples/rails/sample/public/images/profile_icon.png +0 -0
  69. data/samples/rails/sample/public/images/profile_pic.png +0 -0
  70. data/samples/rails/sample/public/images/rails.png +0 -0
  71. data/samples/rails/sample/public/images/ranking_badge.png +0 -0
  72. data/samples/rails/sample/public/images/song_play.png +0 -0
  73. data/samples/rails/sample/public/images/song_sound.png +0 -0
  74. data/samples/rails/sample/public/images/star_grey.png +0 -0
  75. data/samples/rails/sample/public/images/star_yellow.png +0 -0
  76. data/samples/rails/sample/public/index.html +19 -0
  77. data/samples/rails/sample/public/index.html.orig +274 -0
  78. data/samples/rails/sample/public/javascripts/application.js +2 -0
  79. data/samples/rails/sample/public/javascripts/controls.js +963 -0
  80. data/samples/rails/sample/public/javascripts/dragdrop.js +973 -0
  81. data/samples/rails/sample/public/javascripts/effects.js +1128 -0
  82. data/samples/rails/sample/public/javascripts/myspaceid.rev.0.js +103 -0
  83. data/samples/rails/sample/public/javascripts/prototype.js +4320 -0
  84. data/samples/rails/sample/public/robots.txt +5 -0
  85. data/samples/rails/sample/public/stylesheets/base.css +46 -0
  86. data/samples/rails/sample/public/stylesheets/main.css +65 -0
  87. data/samples/rails/sample/public/stylesheets/openid.css +119 -0
  88. data/samples/rails/sample/script/about +4 -0
  89. data/samples/rails/sample/script/console +3 -0
  90. data/samples/rails/sample/script/dbconsole +3 -0
  91. data/samples/rails/sample/script/destroy +3 -0
  92. data/samples/rails/sample/script/generate +3 -0
  93. data/samples/rails/sample/script/performance/benchmarker +3 -0
  94. data/samples/rails/sample/script/performance/profiler +3 -0
  95. data/samples/rails/sample/script/performance/request +3 -0
  96. data/samples/rails/sample/script/plugin +3 -0
  97. data/samples/rails/sample/script/process/inspector +3 -0
  98. data/samples/rails/sample/script/process/reaper +3 -0
  99. data/samples/rails/sample/script/process/spawner +3 -0
  100. data/samples/rails/sample/script/runner +3 -0
  101. data/samples/rails/sample/script/server +3 -0
  102. data/samples/rails/sample/test/functional/oauth_controller_test.rb +8 -0
  103. data/samples/rails/sample/test/functional/openid_controller_test.rb +8 -0
  104. data/samples/rails/sample/test/functional/user_controller_test.rb +8 -0
  105. data/samples/rails/sample/test/performance/browsing_test.rb +9 -0
  106. data/samples/rails/sample/test/test_helper.rb +38 -0
  107. data/test/data.rb +8 -0
  108. data/test/myspace_test.rb +13 -0
  109. data/test/tc_albums.rb +126 -0
  110. data/test/tc_friends.rb +96 -0
  111. data/test/tc_profile.rb +107 -0
  112. data/test/tc_videos.rb +125 -0
  113. data/test/test_data.rb +14 -0
  114. data/test/ts_alltests.rb +7 -0
  115. metadata +222 -0
@@ -0,0 +1,125 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+
4
+ <html xmlns="http://www.w3.org/1999/xhtml">
5
+ <head>
6
+ <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
7
+ <title>OpenID Consumer</title>
8
+ <link href="/stylesheets/openid.css" rel="stylesheet" type="text/css"/>
9
+ <!-- Combo-handled YUI CSS files: -->
10
+ <link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/combo?2.6.0/build/tabview/assets/skins/sam/tabview.css">
11
+ <!-- Combo-handled YUI JS files: -->
12
+ <script type="text/javascript" src="http://yui.yahooapis.com/combo?2.6.0/build/yahoo-dom-event/yahoo-dom-event.js&2.6.0/build/imageloader/imageloader-min.js&2.6.0/build/element/element-beta-min.js&2.6.0/build/tabview/tabview-min.js"></script>
13
+
14
+ <style type="text/css">
15
+ #MySpaceTabs {
16
+ margin:4em auto;
17
+ min-width:970px;
18
+ width:74.6em;
19
+ }
20
+ </style>
21
+
22
+ </head>
23
+
24
+ <body class="yui-skin-sam">
25
+
26
+ <!-- <div id="navbar"> -->
27
+ <!-- <a href="http://code.google.com/appengine/"> -->
28
+ <!-- <img src="/static/appengine_button_noborder.gif" -->
29
+ <!-- style="vertical-align: middle" /></a> -->
30
+ <!-- </div> -->
31
+
32
+ <div id="header">
33
+ <a href="/"><img id ="openid-logo" alt="OpenID" src="/images/openid-logo.png" /></a> <br/> <br/>
34
+ <p id="title">MySpaceID "Combined Consumer" - Demonstrates usage of MySpaceID, OpenID/oAuth "hybrid" extension and MySpace REST APIs to fetch a MySpace user's data</p>
35
+ </div>
36
+
37
+ <div id="body">
38
+
39
+ <form method="post"
40
+ action='<%= url_for :action => 'start' %>'>
41
+ <%= token_tag %>
42
+ Enter your MySpaceID Below:
43
+
44
+ <table><tr><td>
45
+ <!-- You can also use http://stage-api.myspace.com below -->
46
+
47
+ <p><input type="text" name="openid_identifier" id="openid" size="50" value="http://openid.myspace.com/<VANITY_NAME_HERE>" />
48
+ <input type="submit" value="Get MySpace Data" /></p>
49
+
50
+ </td><td>
51
+
52
+ <% if flash[:alert] %>
53
+ <span class='cancel'>
54
+ <%= h(flash[:alert]) %>
55
+ </span>
56
+ <% end %>
57
+ <% if flash[:error] %>
58
+ <span class='error'>
59
+ <%= h(flash[:error]) %>
60
+ </span>
61
+ <% end %>
62
+ <% if flash[:success] %>
63
+ <span class='success'>
64
+ <%= h(flash[:success]) %>
65
+ </span>
66
+ <% end %>
67
+ </td></tr></table>
68
+
69
+ </form>
70
+
71
+ </div>
72
+
73
+ <% if @profile_data %>
74
+ <div id="MySpaceTabs" class="yui-navset">
75
+ <ul class="yui-nav">
76
+ <li id='profileTab' class="selected"><a href="#tab1"><em>Profile</em></a></li>
77
+ <li id='friendsTab'><a href="#tab2"><em>Friends</em></a></li>
78
+ <li id='albumsTab'><a href="#tab3"><em>Albums</em></a></li>
79
+ </ul>
80
+ <div class="yui-content">
81
+ <div id='profileTabContent'>
82
+ <p><img src="<%= @profile_data['basicprofile']['image'] %>" /></p>
83
+ <p>Profile URL : <a href="<%= @profile_data['basicprofile']['webUri'] %>"> <%= @profile_data['basicprofile']['webUri'] %></a><p>
84
+ <p>Name: <strong> <%= @profile_data['basicprofile']['name'] %> </strong> </p>
85
+ <p>Gender: <strong> <%= @profile_data['gender'] %> </strong> </p>
86
+ <p>Age: <strong> <%= @profile_data['age'] %> </strong> </p>
87
+ <p>Marital Status: <strong> <%= @profile_data['maritalstatus'] %> </strong> </p>
88
+ <p>City: <strong> <%= @profile_data['city'] %> </strong> </p>
89
+ <p>Postal Code: <strong> <%= @profile_data['postalcode'] %> </strong> </p>
90
+ <p>Region: <strong> <%= @profile_data['region'] %> </strong> </p>
91
+ <p>Country: <strong> <%= @profile_data['country'] %> </strong> </p>
92
+ </div>
93
+ <div id='friendsTabContent'>
94
+ <% for friend in @friends_data['Friends'] %>
95
+ <a href='<%=friend['webUri']%>'>
96
+ <img id='<%=friend['name']%>' title='<%= friend['name'] %>' border='0'/>
97
+ </a>
98
+ <% end %>
99
+ </div>
100
+ <div id='albumsTabContent'>
101
+ <p>Photos Content Here<p>
102
+ </div>
103
+ </div>
104
+ </div>
105
+
106
+ <script type="text/javascript">
107
+ var myTabs = new YAHOO.widget.TabView("MySpaceTabs");
108
+
109
+ // Friends Tab Image Loader
110
+ var tabTwoImageGroup = new YAHOO.util.ImageLoader.group('friendsTab', 'mouseover');
111
+
112
+ <% for friend in @friends_data['Friends'] %>
113
+ tabTwoImageGroup.registerSrcImage('<%= friend['name'] %>', '<%= friend['image'] %>');
114
+ <% end %>
115
+
116
+ tabTwoImageGroup.addTrigger('friendsTab', 'focus');
117
+ tabTwoImageGroup.name = 'tab_two_group';
118
+
119
+ // Albums Tab Image Loader
120
+
121
+ </script>
122
+ <% end %>
123
+
124
+ </body>
125
+ </html>
@@ -0,0 +1,59 @@
1
+ <html>
2
+ <head>
3
+ <title>8-Bit Music</title>
4
+
5
+ <link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.6.0/build/reset/reset-min.css" />
6
+ <link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.6.0/build/fonts/fonts-min.css" />
7
+ <link rel="stylesheet" type="text/css" href="http://x.myspacecdn.com/modules/activity/static/css/activities_tyq3zov4.css" />
8
+ <link rel="stylesheet" type="text/css" href="/stylesheets/main.css" />
9
+
10
+ <script type="text/javascript" src="/javascripts/myspaceid.rev.0.js" ></script>
11
+ <!--[if IE]><script type="text/javascript" src="http://remysharp.com/downloads/html5.js"></script><![endif]-->
12
+ <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js" ></script>
13
+
14
+ </head>
15
+ <body>
16
+
17
+ <script>
18
+ function closeWin() {
19
+ // alert("closeWin() called");
20
+ // alert(opener);
21
+
22
+ //window.opener.location.href = "profile.php";
23
+ // window.opener.location.reload(true);
24
+ var rand = Math.random();
25
+
26
+ //alert(rand);
27
+
28
+ window.opener.success(rand);
29
+ self.close();
30
+ }
31
+ </script>
32
+
33
+
34
+
35
+
36
+
37
+ <h1>Finishing Log In</h1>
38
+
39
+
40
+
41
+ <br/>
42
+
43
+ <% if flash[:error] %>
44
+ <div class='alert'><%= flash[:error] %></div>
45
+ <% end %>
46
+ <% if @success %>
47
+ <div class='success'>
48
+ You have successfully verified <a href='<%= @esc_identity %>'><%= @esc_identity %></a> as your identity.
49
+ <br/><br/>
50
+ Here's your MySpace profile data fetched using the MySpace REST APIs
51
+ <% if @cid %>
52
+ (XRI CanonicalID: <%= CGI.escape(@cid) %>)
53
+ <% end %>
54
+ </div>
55
+ <% end %>
56
+
57
+ <script>closeWin();</script>
58
+ </body>
59
+ </html>
@@ -0,0 +1,157 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8"/>
5
+ <title>8-Bit Music</title>
6
+
7
+ <link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.6.0/build/reset/reset-min.css" />
8
+ <link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.6.0/build/fonts/fonts-min.css" />
9
+ <link rel="stylesheet" type="text/css" href="http://x.myspacecdn.com/modules/activity/static/css/activities_tyq3zov4.css" />
10
+ <link rel="stylesheet" type="text/css" href="/stylesheets/main.css" />
11
+
12
+ <script type="text/javascript" src="/javascripts/myspaceid.rev.0.js" ></script>
13
+ <!--[if IE]><script type="text/javascript" src="http://remysharp.com/downloads/html5.js"></script><![endif]-->
14
+ <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js" ></script>
15
+
16
+ </head>
17
+ <body>
18
+
19
+ <div id="login" class='rounded-corner-bottom'>
20
+ <div class='logout'>
21
+ <span class='<%= @is_logged_in ? 'logout_isSignedin' : 'logout_isSignedout' %>' >
22
+ <%= link_to("[x] signout", {:action => :logout}, :title => "signout") %>
23
+ </span>
24
+ </div>
25
+
26
+ <div class='login'>
27
+ <span class="<%= @is_logged_in ? 'login_isSignedin' : 'login_isSignedout' %>">
28
+ <b>please login:</b><br/><br/>
29
+ <a href="#login"
30
+ class="msid__login"
31
+ onclick="p2()">
32
+ <img src="/images/myspaceid.png" alt="Login with MySpaceID" />
33
+ </a>
34
+ </span>
35
+ </div>
36
+ </div>
37
+
38
+ <div id="branding" class='rounded-corner-bottom'>8-Bit Music</div>
39
+
40
+ <ul id="nav">
41
+ <li><a href="/">HOME</a></li>
42
+ <li><a href="#">MAP</a></li>
43
+ <li><a href="#">SONGS</a></li>
44
+ <li><a href="#">PROFILE</a></li>
45
+ <li><a href="#">FEATURED</a></li>
46
+ </ul>
47
+
48
+ <div id="content_loggedOut" class="<%= @is_logged_in ? 'welcome_LoggedIn' : 'welcome_LoggedOut' %>">
49
+ <div style="background-color: #CCCCCC; padding: 3px;">
50
+ <div style="background-color: #FFFFFF; text-align: center; padding: 25px;">
51
+ Welcome to 8-Bit Music: a community to share and discover video game tunes. Please login!<br><br>
52
+ <img src="/images/profile_pic.png" />
53
+ </div>
54
+ </div>
55
+ </div>
56
+
57
+ <div id="content" class="<%= @is_logged_in ? 'content_loggedIn' : 'content_loggedOut' %>">
58
+ <ul id="cols">
59
+
60
+ <li id="profile" class='rounded-corner-left'>
61
+ <% if @is_logged_in %>
62
+
63
+ <div id="profile-view">
64
+ <img id="profile-pic" src="<%= profile_pic %>" alt="<%= display_name %>"/>
65
+ <div id="caption">
66
+ <div id="caption-left">
67
+ <a href="<%= profile_more_pics %>" style="margin-right: 3px;">pics</a>/
68
+ <a href="<%= profile_more_vids %>" style="margin-left: 3px;">video</a>/
69
+ <a href="<%= profile_more_play %>" style="margin-left: 3px;">music</a>
70
+ </div>
71
+ <div id="caption-right">
72
+ <img src="/images/profile_icon.png" alt="yay blue" />
73
+ <img src="/images/level_icon.png" alt="uber" />
74
+ </div>
75
+ </div>
76
+ </div>
77
+
78
+ <h1><span class="display-name"><%= display_name %></span></h1>
79
+ <h2><%= profile_age %>, <%= profile_city %></h2>
80
+
81
+ <h3>LAST LOGIN:</h3>
82
+ <p id="member-date"><%= profile_last_update %></p>
83
+
84
+ <h3>HEADLINE:</h3>
85
+ <p id="headline"><%= profile_headline %></p>
86
+
87
+ <p id="about-me">
88
+ <%= profile_about_me %>
89
+ </p>
90
+
91
+ <p id="desiretomeet">
92
+ <%= profile_to_meet %>
93
+ </p>
94
+ </li>
95
+ <li id="basic-info">
96
+ <h1><span class="display-name"><%= profile_name %></span>'s Basic Info</h1>
97
+
98
+ <h2>General:</h2>
99
+ <p id="General"><%= profile_interests %></p>
100
+
101
+ <h2>Music:</h2>
102
+ <p id="music"><%= profile_music %></p>
103
+
104
+ <h2>Movies:</h2>
105
+ <p id="movies"><%= profile_movies %></p>
106
+
107
+ <h2>Television:</h2>
108
+ <p id="television"><%= profile_television %></p>
109
+
110
+ <h2>Books:</h2>
111
+ <p id="books"><%= profile_books %></p>
112
+
113
+ <h2>Heroes:</h2>
114
+ <p id="heroes"><%= profile_heroes %></p>
115
+ </li>
116
+
117
+ <li id="activities" class='rounded-corner-right'>
118
+
119
+ <% if @is_logged_in && @activities_data && @friends_activities_data %>
120
+ <h1><span class='display-name'>Friend's or Band's Activities</span></h1>
121
+ <ul class="activitiesContainer" >
122
+ <% each_song(@friends_activities_data) do |song_entry| %>
123
+ <li class='activityItem <%= song_entry.elements['category'].attribute('label') %>' >
124
+ <% song_entry.elements['content'].elements['div'].elements.each do |child| %>
125
+ <%= child.to_s %>
126
+ <% end %>
127
+ </li>
128
+ <% end %>
129
+ </ul>
130
+ <% end %>
131
+
132
+ </li>
133
+ <% end %>
134
+ </ul>
135
+ </div>
136
+
137
+ <script>
138
+ function p2(){
139
+ msOptions.realm = "<%= compute_realm %>"
140
+ msOptions.returnTo = "<%= url_for :action => 'complete', :only_path => false %>"
141
+ msOptions.consumer = "<%= UserController::CONSUMER_KEY %>"
142
+ var ms = new MySpaceID(msOptions);
143
+ }
144
+
145
+ function success(rand) {
146
+ //alert(rand);
147
+ window.location.href="<%= url_for :action => 'index', :only_path => false %>";
148
+ }
149
+
150
+ function failed(rand) {
151
+ $('#login div.logout span').addClass("logout_isSignedout");
152
+ $('#login div.logout span').removeClass("logout_isSignedin");
153
+ }
154
+ </script>
155
+ <div id="copyright">&copy; 2008-2009. 8-Bit Music. All Rights Reserved.<br>This site supports OpenID authentication. <a href="http://www.openid.net" target="_blank">Learn More</a></div>
156
+ </body>
157
+ </html>
@@ -0,0 +1,109 @@
1
+ # Don't change this file!
2
+ # Configure your app in config/environment.rb and config/environments/*.rb
3
+
4
+ RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)
5
+
6
+ module Rails
7
+ class << self
8
+ def boot!
9
+ unless booted?
10
+ preinitialize
11
+ pick_boot.run
12
+ end
13
+ end
14
+
15
+ def booted?
16
+ defined? Rails::Initializer
17
+ end
18
+
19
+ def pick_boot
20
+ (vendor_rails? ? VendorBoot : GemBoot).new
21
+ end
22
+
23
+ def vendor_rails?
24
+ File.exist?("#{RAILS_ROOT}/vendor/rails")
25
+ end
26
+
27
+ def preinitialize
28
+ load(preinitializer_path) if File.exist?(preinitializer_path)
29
+ end
30
+
31
+ def preinitializer_path
32
+ "#{RAILS_ROOT}/config/preinitializer.rb"
33
+ end
34
+ end
35
+
36
+ class Boot
37
+ def run
38
+ load_initializer
39
+ Rails::Initializer.run(:set_load_path)
40
+ end
41
+ end
42
+
43
+ class VendorBoot < Boot
44
+ def load_initializer
45
+ require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"
46
+ Rails::Initializer.run(:install_gem_spec_stubs)
47
+ end
48
+ end
49
+
50
+ class GemBoot < Boot
51
+ def load_initializer
52
+ self.class.load_rubygems
53
+ load_rails_gem
54
+ require 'initializer'
55
+ end
56
+
57
+ def load_rails_gem
58
+ if version = self.class.gem_version
59
+ gem 'rails', version
60
+ else
61
+ gem 'rails'
62
+ end
63
+ rescue Gem::LoadError => load_error
64
+ $stderr.puts %(Missing the Rails #{version} gem. Please `gem install -v=#{version} rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.)
65
+ exit 1
66
+ end
67
+
68
+ class << self
69
+ def rubygems_version
70
+ Gem::RubyGemsVersion rescue nil
71
+ end
72
+
73
+ def gem_version
74
+ if defined? RAILS_GEM_VERSION
75
+ RAILS_GEM_VERSION
76
+ elsif ENV.include?('RAILS_GEM_VERSION')
77
+ ENV['RAILS_GEM_VERSION']
78
+ else
79
+ parse_gem_version(read_environment_rb)
80
+ end
81
+ end
82
+
83
+ def load_rubygems
84
+ require 'rubygems'
85
+ min_version = '1.3.1'
86
+ unless rubygems_version >= min_version
87
+ $stderr.puts %Q(Rails requires RubyGems >= #{min_version} (you have #{rubygems_version}). Please `gem update --system` and try again.)
88
+ exit 1
89
+ end
90
+
91
+ rescue LoadError
92
+ $stderr.puts %Q(Rails requires RubyGems >= #{min_version}. Please install RubyGems and try again: http://rubygems.rubyforge.org)
93
+ exit 1
94
+ end
95
+
96
+ def parse_gem_version(text)
97
+ $1 if text =~ /^[^#]*RAILS_GEM_VERSION\s*=\s*["']([!~<>=]*\s*[\d.]+)["']/
98
+ end
99
+
100
+ private
101
+ def read_environment_rb
102
+ File.read("#{RAILS_ROOT}/config/environment.rb")
103
+ end
104
+ end
105
+ end
106
+ end
107
+
108
+ # All that for this:
109
+ Rails.boot!