platform 3.1.2 → 3.1.3
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.
- data/.rvmrc +2 -0
- data/Gemfile.lock +4 -4
- data/README.rdoc +0 -3
- data/app/assets/javascripts/platform/api_explorer.js +4 -1
- data/app/controllers/platform/api/base_controller.rb +39 -20
- data/app/models/platform/application.rb +2 -4
- data/app/models/platform/developer.rb +4 -2
- data/app/models/platform/logged_exception.rb +2 -2
- data/app/models/platform/media/media.rb +6 -3
- data/app/views/platform/admin/apps/index.html.erb +1 -1
- data/app/views/platform/apps/index.html.erb +2 -2
- data/app/views/platform/developer/api_explorer/index.html.erb +9 -5
- data/app/views/platform/developer/apps/_form.html.erb +4 -2
- data/app/views/platform/developer/apps/index.html.erb +6 -4
- data/app/views/platform/developer/common/_header.html.erb +0 -1
- data/app/views/platform/developer/dashboard/_statistics.html.erb +1 -1
- data/app/views/platform/developer/dashboard/index.html.erb +1 -1
- data/app/views/platform/developer/help/oauth_mobile.html.erb +5 -3
- data/app/views/platform/developer/registration/index.html.erb +8 -123
- data/lib/generators/platform/api_generator.rb +74 -0
- data/lib/generators/platform/platform_generator.rb +1 -1
- data/lib/generators/platform/proxy_generator.rb +1 -2
- data/lib/generators/platform/templates/config/platform/config.yml +9 -8
- data/lib/generators/platform/templates/config/platform/data/default_applications.yml +1 -23
- data/lib/generators/platform/templates/config/platform/data/default_categories.yml +1 -6
- data/lib/generators/platform/templates/config/platform/data/default_permissions.yml +16 -0
- data/lib/generators/platform/templates/config/platform/site/features.yml +1 -6
- data/lib/generators/platform/templates/db/create_platform_tables.rb +36 -47
- data/lib/platform/api/proxy/base.rb +4 -0
- data/lib/platform/config.rb +12 -16
- data/lib/platform/extensions/action_view_extension.rb +13 -1
- data/lib/platform/extensions/hash_extension.rb +69 -0
- data/lib/platform/railtie.rb +1 -0
- data/lib/platform/version.rb +1 -1
- data/lib/tasks/platform.rake +1 -0
- data/platform.gemspec +0 -1
- data/test/dummy/app/assets/images/logo.png +0 -0
- data/test/dummy/app/controllers/api/bookmarks_controller.rb +1 -1
- data/test/dummy/app/models/bookmark.rb +0 -2
- data/test/dummy/app/models/user.rb +1 -2
- data/test/dummy/app/views/home/index.html.erb +2 -2
- data/test/dummy/app/views/layouts/_footer.html.erb +1 -1
- data/test/dummy/app/views/layouts/_header.html.erb +1 -1
- data/test/dummy/config/application.rb +0 -1
- data/test/dummy/config/environments/development.rb +3 -1
- data/test/dummy/config/initializers/platform.rb +3 -0
- data/test/dummy/config/platform/api/1/bookmark.yml +2 -2
- data/test/dummy/config/platform/config.yml +10 -9
- data/test/dummy/config/platform/data/default_applications.yml +4 -23
- data/test/dummy/config/platform/data/default_categories.yml +1 -6
- data/test/dummy/config/platform/site/features.yml +1 -6
- data/test/dummy/config/routes.rb +1 -1
- data/test/dummy/config/tr8n/config.yml +2 -2
- data/test/dummy/db/migrate/20111004075531_create_platform_tables.rb +1 -1
- data/test/dummy/public/developer_agreement.html +123 -0
- metadata +52 -46
- data/db/migrate/20110602232141_create_platform_tables.rb +0 -262
@@ -48,6 +48,10 @@ module Platform
|
|
48
48
|
def to_api_hash(opts = {})
|
49
49
|
raise NotImplementedError, 'Must be implemented in descendant class'
|
50
50
|
end
|
51
|
+
|
52
|
+
def sanitize_api_hash(hash)
|
53
|
+
hash.select{|key, value| !value.blank?}
|
54
|
+
end
|
51
55
|
|
52
56
|
def to_api_path(opts = {})
|
53
57
|
"#{Platform::Config.api_scheme}://#{Platform::Config.api_base_url}/#{instance.class.name.underscore}/#{instance.id}"
|
data/lib/platform/config.rb
CHANGED
@@ -89,17 +89,11 @@ module Platform
|
|
89
89
|
end
|
90
90
|
|
91
91
|
init_default_categories
|
92
|
-
init_default_applications
|
93
92
|
|
94
93
|
puts "Done."
|
95
94
|
end
|
96
95
|
|
97
96
|
def self.system_user
|
98
|
-
if user_class_name == "Platform::PlatformUser"
|
99
|
-
@system_user ||= Platform::PlatformUser.first || Platform::PlatformUser.create(:name => "System User")
|
100
|
-
return @system_user
|
101
|
-
end
|
102
|
-
|
103
97
|
return nil unless site_info[:system_user_id]
|
104
98
|
@system_user ||= user_class_name.constantize.find_by_id(site_info[:system_user_id])
|
105
99
|
end
|
@@ -116,16 +110,8 @@ module Platform
|
|
116
110
|
end
|
117
111
|
|
118
112
|
default_applications.each do |keyword, description|
|
119
|
-
category_keywords = description.delete("category_keywords")
|
120
|
-
icon_path = description.delete("icon_path")
|
121
|
-
logo_path = description.delete("logo_path")
|
122
|
-
|
123
113
|
app = Platform::Application.create(description.merge(:developer => system_developer))
|
124
|
-
app.store_icon(File.new("#{root}/#{icon_path}", "r")) if icon_path
|
125
|
-
app.store_logo(File.new("#{root}/#{logo_path}", "r")) if logo_path
|
126
|
-
|
127
114
|
puts "Initialized #{app.name}."
|
128
|
-
app.approve!
|
129
115
|
end
|
130
116
|
end
|
131
117
|
|
@@ -158,8 +144,9 @@ module Platform
|
|
158
144
|
end
|
159
145
|
|
160
146
|
def self.load_yml(file_path, for_env = env)
|
161
|
-
|
162
|
-
yml =
|
147
|
+
yml_path = "#{root}#{file_path}"
|
148
|
+
yml = YAML.load_file(yml_path)
|
149
|
+
yml = yml['defaults'].rmerge(yml[for_env] || {}) unless for_env.nil?
|
163
150
|
HashWithIndifferentAccess.new(yml)
|
164
151
|
end
|
165
152
|
|
@@ -191,6 +178,10 @@ module Platform
|
|
191
178
|
config[:enable_developer_agreement]
|
192
179
|
end
|
193
180
|
|
181
|
+
def self.developer_agreement_path
|
182
|
+
config[:developer_agreement_path]
|
183
|
+
end
|
184
|
+
|
194
185
|
def self.enable_app_statistics?
|
195
186
|
config[:enable_app_statistics]
|
196
187
|
end
|
@@ -602,6 +593,11 @@ module Platform
|
|
602
593
|
config[:api_explorer_app_id]
|
603
594
|
end
|
604
595
|
|
596
|
+
def self.api_explorer_app
|
597
|
+
return if api_explorer_app_id.blank?
|
598
|
+
@api_explorer_app ||= Platform::Application.find_by_id(api_explorer_app_id)
|
599
|
+
end
|
600
|
+
|
605
601
|
def self.api_explorer_app?
|
606
602
|
!api_explorer_app_id.blank?
|
607
603
|
end
|
@@ -126,6 +126,18 @@ module Platform
|
|
126
126
|
end
|
127
127
|
end
|
128
128
|
|
129
|
+
def platform_app_icon_tag(app, options = {})
|
130
|
+
options[:style] ||= ""
|
131
|
+
options[:style] << "width:16px;height:16px;"
|
132
|
+
image_tag(app.icon_url, :style => options[:style])
|
133
|
+
end
|
134
|
+
|
135
|
+
def platform_app_logo_tag(app, options = {})
|
136
|
+
options[:style] ||= ""
|
137
|
+
options[:style] << "width:75px;height:75px;"
|
138
|
+
image_tag(app.logo_url, :style => options[:style])
|
139
|
+
end
|
140
|
+
|
129
141
|
def platform_user_mugshot_tag(user, options = {})
|
130
142
|
if user and !Platform::Config.user_mugshot(user).blank?
|
131
143
|
img_url = Platform::Config.user_mugshot(user)
|
@@ -183,7 +195,7 @@ module Platform
|
|
183
195
|
return platform_when_string_tr("{hours||hour} ago", :hours => (elapsed_seconds / 1.hour).to_i) if elapsed_seconds < 1.day
|
184
196
|
return platform_when_string_tr("Yesterday") if elapsed_seconds < 48.hours
|
185
197
|
return platform_when_string_tr("{days||day} ago", :days => elapsed_seconds.to_i / 1.day) if elapsed_seconds < 14.days
|
186
|
-
return platform_when_string_tr("{weeks||week} ago", :weeks => (elapsed_seconds / 1.day / 7).to_i) if
|
198
|
+
return platform_when_string_tr("{weeks||week} ago", :weeks => (elapsed_seconds / 1.day / 7).to_i) if elapsed_seconds < 4.weeks
|
187
199
|
return platform_display_time(time, :monthname_abbr) if Date.today.year == time.year
|
188
200
|
return platform_display_time(time, :monthname_abbr_year)
|
189
201
|
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
#
|
2
|
+
# = Hash Recursive Merge
|
3
|
+
#
|
4
|
+
# Merges a Ruby Hash recursively, Also known as deep merge.
|
5
|
+
# Recursive version of Hash#merge and Hash#merge!.
|
6
|
+
#
|
7
|
+
# Category:: Ruby
|
8
|
+
# Package:: Hash
|
9
|
+
# Author:: Simone Carletti <weppos@weppos.net>
|
10
|
+
# Copyright:: 2007-2008 The Authors
|
11
|
+
# License:: MIT License
|
12
|
+
# Link:: http://www.simonecarletti.com/
|
13
|
+
# Source:: http://gist.github.com/gists/6391/
|
14
|
+
|
15
|
+
class Hash
|
16
|
+
#
|
17
|
+
# Recursive version of Hash#merge!
|
18
|
+
#
|
19
|
+
# Adds the contents of +other_hash+ to +hsh+,
|
20
|
+
# merging entries in +hsh+ with duplicate keys with those from +other_hash+.
|
21
|
+
#
|
22
|
+
# Compared with Hash#merge!, this method supports nested hashes.
|
23
|
+
# When both +hsh+ and +other_hash+ contains an entry with the same key,
|
24
|
+
# it merges and returns the values from both arrays.
|
25
|
+
#
|
26
|
+
# h1 = {"a" => 100, "b" => 200, "c" => {"c1" => 12, "c2" => 14}}
|
27
|
+
# h2 = {"b" => 254, "c" => 300, "c" => {"c1" => 16, "c3" => 94}}
|
28
|
+
# h1.rmerge!(h2) #=> {"a" => 100, "b" => 254, "c" => {"c1" => 16, "c2" => 14, "c3" => 94}}
|
29
|
+
#
|
30
|
+
# Simply using Hash#merge! would return
|
31
|
+
#
|
32
|
+
# h1.merge!(h2) #=> {"a" => 100, "b" = >254, "c" => {"c1" => 16, "c3" => 94}}
|
33
|
+
#
|
34
|
+
def rmerge!(other_hash)
|
35
|
+
merge!(other_hash) do |key, oldval, newval|
|
36
|
+
oldval.class == self.class ? oldval.rmerge!(newval) : newval
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
#
|
41
|
+
# Recursive version of Hash#merge
|
42
|
+
#
|
43
|
+
# Compared with Hash#merge!, this method supports nested hashes.
|
44
|
+
# When both +hsh+ and +other_hash+ contains an entry with the same key,
|
45
|
+
# it merges and returns the values from both arrays.
|
46
|
+
#
|
47
|
+
# Compared with Hash#merge, this method provides a different approch
|
48
|
+
# for merging nasted hashes.
|
49
|
+
# If the value of a given key is an Hash and both +other_hash+ abd +hsh
|
50
|
+
# includes the same key, the value is merged instead replaced with
|
51
|
+
# +other_hash+ value.
|
52
|
+
#
|
53
|
+
# h1 = {"a" => 100, "b" => 200, "c" => {"c1" => 12, "c2" => 14}}
|
54
|
+
# h2 = {"b" => 254, "c" => 300, "c" => {"c1" => 16, "c3" => 94}}
|
55
|
+
# h1.rmerge(h2) #=> {"a" => 100, "b" => 254, "c" => {"c1" => 16, "c2" => 14, "c3" => 94}}
|
56
|
+
#
|
57
|
+
# Simply using Hash#merge would return
|
58
|
+
#
|
59
|
+
# h1.merge(h2) #=> {"a" => 100, "b" = >254, "c" => {"c1" => 16, "c3" => 94}}
|
60
|
+
#
|
61
|
+
def rmerge(other_hash)
|
62
|
+
r = {}
|
63
|
+
merge(other_hash) do |key, oldval, newval|
|
64
|
+
r[key] = oldval.class == self.class ? oldval.rmerge(newval) : newval
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
data/lib/platform/railtie.rb
CHANGED
@@ -35,6 +35,7 @@ require 'pp'
|
|
35
35
|
end
|
36
36
|
|
37
37
|
require File.join(File.dirname(__FILE__), 'extensions/object_extension')
|
38
|
+
require File.join(File.dirname(__FILE__), 'extensions/hash_extension')
|
38
39
|
require File.join(File.dirname(__FILE__), 'extensions/action_view_extension')
|
39
40
|
require File.join(File.dirname(__FILE__), 'extensions/action_controller_extension')
|
40
41
|
|
data/lib/platform/version.rb
CHANGED
data/lib/tasks/platform.rake
CHANGED
@@ -26,6 +26,7 @@ namespace :platform do
|
|
26
26
|
desc "Initializes all of the tables with default data"
|
27
27
|
task :init => :environment do
|
28
28
|
raise "This action is prohibited in this environment" if ['production', 'stage', 'staging'].include?(Rails.env) and env('force') != 'true'
|
29
|
+
Tr8n::Config.reset_all!
|
29
30
|
Platform::Config.reset_all!
|
30
31
|
end
|
31
32
|
|
data/platform.gemspec
CHANGED
@@ -30,7 +30,6 @@ Gem::Specification.new do |s|
|
|
30
30
|
s.add_dependency 'coffee-script', ['>= 0']
|
31
31
|
s.add_dependency 'acts_as_tree', ['>= 0']
|
32
32
|
s.add_dependency 'acts_as_state_machine', ['>= 0']
|
33
|
-
# s.add_dependency 'rmagick', ['>= 0']
|
34
33
|
s.add_development_dependency 'pry', ['>= 0']
|
35
34
|
s.add_development_dependency 'bundler', ['>= 1.0.0']
|
36
35
|
s.add_development_dependency 'sqlite3', ['>= 0']
|
Binary file
|
@@ -14,7 +14,7 @@
|
|
14
14
|
<div class="content_bd">
|
15
15
|
<h3><%=tr("If you are trying out Platform functionality, here are some helpful links to get started:")%></h3>
|
16
16
|
<ul style="list-style-type:decimal; margin-left:30px; font-size:14px;">
|
17
|
-
<li><%= link_to(tr("Register for
|
17
|
+
<li><%= link_to(tr("Register for an account"), "/login/register")%></li>
|
18
18
|
<li><%= link_to(tr("Create a new application"), "/platform/developer/apps")%></li>
|
19
19
|
<li><%= link_to(tr("Explore existing applications"), "/platform/apps")%></li>
|
20
20
|
<li><%= link_to(tr("View your application dashboard"), "/platform/developer/dashboard")%></li>
|
@@ -31,7 +31,7 @@
|
|
31
31
|
<%=tr("Drag the link below to your browser's toolbar or add it to your bookmark list:") %>
|
32
32
|
</p>
|
33
33
|
<p>
|
34
|
-
<a href="javascript:(function(){location.href='http://localhost:3000/api/bookmark/create?bookmarklet=1&title=' + escape(document.title) + '&url='+escape(location.href);})()">Post to
|
34
|
+
<a href="javascript:(function(){location.href='http://localhost:3000/api/bookmark/create?bookmarklet=1&title=' + escape(document.title) + '&url='+escape(location.href);})()">Post to Bookmarklet</a>
|
35
35
|
</p>
|
36
36
|
<p>
|
37
37
|
<%=tr("When you're surfing the web and find a page that you want to bookmark, just click the \"Post to Sample Application\" button on your toolbar or choose it in your bookmark list.") %>
|
@@ -7,7 +7,7 @@
|
|
7
7
|
<li><%=link_to(tr("Credits"), "/platform/developer/help/credits", :class => "quiet")%></li>
|
8
8
|
<li><%=link_to(tr("License"), "/platform/developer/help/license", :class => "quiet")%></li>
|
9
9
|
</ul>
|
10
|
-
© Copyright 2010-2011
|
10
|
+
© Copyright 2010-2011
|
11
11
|
</div>
|
12
12
|
|
13
13
|
</div>
|
@@ -12,7 +12,7 @@
|
|
12
12
|
<li><%= tr8n_language_selector_tag(:lightbox=>false) %></li>
|
13
13
|
</ul>
|
14
14
|
<h1 class="logo">
|
15
|
-
<%=link_to("
|
15
|
+
<%=link_to("Bookmarklet", "/home", :style=>"text-decorations:none;")%>
|
16
16
|
</h1>
|
17
17
|
</div>
|
18
18
|
</div>
|
@@ -4,7 +4,9 @@ Dummy::Application.configure do
|
|
4
4
|
# In the development environment your application's code is reloaded on
|
5
5
|
# every request. This slows down response time but is perfect for development
|
6
6
|
# since you don't have to restart the web server when you make code changes.
|
7
|
-
|
7
|
+
|
8
|
+
# must be enabled for injectable proxies - TODO: figure out how to unload them
|
9
|
+
config.cache_classes = true
|
8
10
|
|
9
11
|
# Log error messages when you accidentally call methods on nil.
|
10
12
|
config.whiny_nils = true
|
@@ -70,8 +70,8 @@ bookmark:
|
|
70
70
|
description: "The bookmark's creation date as a timestamp"
|
71
71
|
type: "Number"
|
72
72
|
status: updated
|
73
|
-
|
74
|
-
path: "bookmark/
|
73
|
+
destroy:
|
74
|
+
path: "bookmark/destroy"
|
75
75
|
method: POST
|
76
76
|
status: added
|
77
77
|
description: "Removes a bookmark."
|
@@ -9,16 +9,23 @@
|
|
9
9
|
# Alternatively, you can overload any of the methods of Platform::Config
|
10
10
|
#############################################################################
|
11
11
|
|
12
|
-
defaults:
|
12
|
+
defaults:
|
13
13
|
enable_platform: true
|
14
14
|
enable_app_directory: true
|
15
15
|
enable_embedded_applications: true
|
16
16
|
enable_mobile_applications: true
|
17
|
-
enable_developer_agreement: false
|
18
17
|
enable_app_statistics: false
|
19
18
|
enable_api_verification: false
|
20
19
|
api_explorer_app_id: 1 # make sure to create an application for the test tool
|
21
20
|
|
21
|
+
#############################################################################
|
22
|
+
# You can enforce users to accept the developers agreement before they
|
23
|
+
# become developers. To do so, enable the line below and provide path
|
24
|
+
# to your dev agreement.
|
25
|
+
#############################################################################
|
26
|
+
enable_developer_agreement: true
|
27
|
+
developer_agreement_path: /developer_agreement.html
|
28
|
+
|
22
29
|
#############################################################################
|
23
30
|
# Platform best run with caching enabled
|
24
31
|
# You can configure cache adapter and store parameters by providing the
|
@@ -52,7 +59,7 @@ defaults: &defaults
|
|
52
59
|
# Site Integration Settings
|
53
60
|
#############################################################################
|
54
61
|
site_info:
|
55
|
-
title: "
|
62
|
+
title: "Bookmarklet"
|
56
63
|
logo_url: "/assets/platform/platform5.png"
|
57
64
|
base_url: "localhost:3000"
|
58
65
|
contact_email: feedback@oauthx.com
|
@@ -118,19 +125,13 @@ defaults: &defaults
|
|
118
125
|
# You can overload any feature defined in the defaults for any environment
|
119
126
|
#############################################################################
|
120
127
|
development:
|
121
|
-
<<: *defaults
|
122
128
|
|
123
129
|
test:
|
124
|
-
<<: *defaults
|
125
130
|
|
126
131
|
qa:
|
127
|
-
<<: *defaults
|
128
132
|
|
129
133
|
stage:
|
130
|
-
<<: *defaults
|
131
134
|
|
132
135
|
production:
|
133
|
-
<<: *defaults
|
134
136
|
|
135
137
|
sandbox:
|
136
|
-
<<: *defaults
|
@@ -1,39 +1,20 @@
|
|
1
|
-
defaults:
|
2
|
-
|
3
|
-
name: "
|
4
|
-
description: "
|
5
|
-
url: "http://www.google.com"
|
6
|
-
contact_email: "apps@railsplatform.org"
|
7
|
-
category_keywords: ["all"]
|
8
|
-
icon_path: "/public/platform/images/apps/app_icon.gif"
|
9
|
-
logo_path: "/public/platform/images/apps/app_logo.gif"
|
10
|
-
|
11
|
-
yahoo:
|
12
|
-
name: "Yahoo"
|
13
|
-
description: "Yahoo Search Engine"
|
14
|
-
url: "http://www.yahoo.com"
|
15
|
-
contact_email: "apps@railsplatform.org"
|
16
|
-
category_keywords: ["all"]
|
17
|
-
icon_path: "/public/platform/images/apps/app_icon.gif"
|
18
|
-
logo_path: "/public/platform/images/apps/app_logo.gif"
|
1
|
+
defaults:
|
2
|
+
api_explorer:
|
3
|
+
name: "API Explorer"
|
4
|
+
description: "Allows developers to test API without having to create any applications"
|
19
5
|
|
20
6
|
#############################################################################
|
21
7
|
# Environment Settings
|
22
8
|
# You can overload any feature defined in the defaults for any environment
|
23
9
|
#############################################################################
|
24
10
|
development:
|
25
|
-
<<: *defaults
|
26
11
|
|
27
12
|
test:
|
28
|
-
<<: *defaults
|
29
13
|
|
30
14
|
qa:
|
31
|
-
<<: *defaults
|
32
15
|
|
33
16
|
stage:
|
34
|
-
<<: *defaults
|
35
17
|
|
36
18
|
production:
|
37
|
-
<<: *defaults
|
38
19
|
|
39
20
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
defaults:
|
1
|
+
defaults:
|
2
2
|
all:
|
3
3
|
position: 1
|
4
4
|
name: "All Apps"
|
@@ -39,18 +39,13 @@ defaults: &defaults
|
|
39
39
|
# You can overload any feature defined in the defaults for any environment
|
40
40
|
#############################################################################
|
41
41
|
development:
|
42
|
-
<<: *defaults
|
43
42
|
|
44
43
|
test:
|
45
|
-
<<: *defaults
|
46
44
|
|
47
45
|
qa:
|
48
|
-
<<: *defaults
|
49
46
|
|
50
47
|
stage:
|
51
|
-
<<: *defaults
|
52
48
|
|
53
49
|
production:
|
54
|
-
<<: *defaults
|
55
50
|
|
56
51
|
|