rest-graph 1.7.0 → 1.8.0
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/.gitignore +6 -0
- data/CHANGES +44 -0
- data/CONTRIBUTORS +1 -0
- data/README +221 -191
- data/README.md +367 -0
- data/Rakefile +28 -43
- data/TODO +1 -0
- data/doc/ToC.md +10 -0
- data/doc/dependency.md +78 -0
- data/doc/design.md +206 -0
- data/doc/rails.md +12 -0
- data/doc/test.md +46 -0
- data/doc/tutorial.md +142 -0
- data/example/rails2/Gemfile +13 -0
- data/example/rails2/app/controllers/application_controller.rb +10 -8
- data/example/rails2/app/views/application/helper.html.erb +1 -0
- data/example/rails2/config/boot.rb +16 -0
- data/example/rails2/config/environment.rb +3 -30
- data/example/rails2/config/preinitializer.rb +23 -0
- data/example/rails2/test/functional/application_controller_test.rb +72 -32
- data/example/rails2/test/test_helper.rb +10 -6
- data/example/rails3/Gemfile +13 -0
- data/example/rails3/Rakefile +7 -0
- data/example/rails3/app/controllers/application_controller.rb +118 -0
- data/example/rails3/app/views/application/helper.html.erb +1 -0
- data/example/rails3/config.ru +4 -0
- data/example/rails3/config/application.rb +23 -0
- data/example/rails3/config/environment.rb +5 -0
- data/example/rails3/config/environments/development.rb +26 -0
- data/example/rails3/config/environments/production.rb +49 -0
- data/example/rails3/config/environments/test.rb +30 -0
- data/example/rails3/config/initializers/secret_token.rb +7 -0
- data/example/rails3/config/initializers/session_store.rb +8 -0
- data/example/rails3/config/rest-graph.yaml +11 -0
- data/example/rails3/config/routes.rb +5 -0
- data/example/rails3/test/functional/application_controller_test.rb +183 -0
- data/example/rails3/test/test_helper.rb +18 -0
- data/example/rails3/test/unit/rails_util_test.rb +44 -0
- data/init.rb +1 -1
- data/lib/rest-graph.rb +5 -571
- data/lib/rest-graph/auto_load.rb +3 -3
- data/lib/rest-graph/autoload.rb +3 -3
- data/lib/rest-graph/config_util.rb +43 -0
- data/lib/rest-graph/core.rb +608 -0
- data/lib/rest-graph/facebook_util.rb +74 -0
- data/lib/rest-graph/rails_util.rb +85 -37
- data/lib/rest-graph/test_util.rb +18 -2
- data/lib/rest-graph/version.rb +2 -2
- data/rest-graph.gemspec +42 -47
- data/task/gemgem.rb +155 -0
- data/test/test_api.rb +16 -0
- data/test/test_cache.rb +28 -8
- data/test/test_error.rb +9 -0
- data/test/test_facebook.rb +36 -0
- data/test/test_load_config.rb +16 -14
- data/test/test_misc.rb +4 -4
- data/test/test_parse.rb +10 -4
- metadata +146 -186
- data/Gemfile.lock +0 -45
- data/README.rdoc +0 -337
- data/example/rails2/script/console +0 -3
- data/example/rails2/script/server +0 -3
- data/lib/rest-graph/load_config.rb +0 -41
@@ -0,0 +1,74 @@
|
|
1
|
+
|
2
|
+
require 'rest-graph/core'
|
3
|
+
|
4
|
+
module RestGraph::FacebookUtil
|
5
|
+
PERMISSIONS = %w[
|
6
|
+
publish_stream
|
7
|
+
create_event
|
8
|
+
rsvp_event
|
9
|
+
sms
|
10
|
+
offline_access
|
11
|
+
publish_checkins
|
12
|
+
|
13
|
+
user_about_me friends_about_me
|
14
|
+
user_activities friends_activities
|
15
|
+
user_birthday friends_birthday
|
16
|
+
user_education_history friends_education_history
|
17
|
+
user_events friends_events
|
18
|
+
user_groups friends_groups
|
19
|
+
user_hometown friends_hometown
|
20
|
+
user_interests friends_interests
|
21
|
+
user_likes friends_likes
|
22
|
+
user_location friends_location
|
23
|
+
user_notes friends_notes
|
24
|
+
user_online_presence friends_online_presence
|
25
|
+
user_photo_video_tags friends_photo_video_tags
|
26
|
+
user_photos friends_photos
|
27
|
+
user_relationships friends_relationships
|
28
|
+
user_relationship_details friends_relationship_details
|
29
|
+
user_religion_politics friends_religion_politics
|
30
|
+
user_status friends_status
|
31
|
+
user_videos friends_videos
|
32
|
+
user_website friends_website
|
33
|
+
user_work_history friends_work_history
|
34
|
+
email
|
35
|
+
read_friendlists manage_friendlists
|
36
|
+
read_insights
|
37
|
+
read_mailbox
|
38
|
+
read_requests
|
39
|
+
read_stream
|
40
|
+
xmpp_login
|
41
|
+
ads_management
|
42
|
+
user_checkins friends_checkins
|
43
|
+
|
44
|
+
manage_pages
|
45
|
+
]
|
46
|
+
|
47
|
+
USER_PERMISSIONS = PERMISSIONS.reject{|perm| perm.start_with?('friends_')}
|
48
|
+
|
49
|
+
def fix_fql_multi result
|
50
|
+
result.inject({}){ |r, i| r[i['name']] = i['fql_result_set']; r }
|
51
|
+
end
|
52
|
+
|
53
|
+
def fix_permissions result
|
54
|
+
# Hash[] is for ruby 1.8.7
|
55
|
+
result.first && Hash[result.first.select{ |k, v| v == 1 }].keys
|
56
|
+
end
|
57
|
+
|
58
|
+
def permissions uid, selected_permissions=PERMISSIONS
|
59
|
+
fix_permissions(
|
60
|
+
fql(permissions_fql(uid, selected_permissions), {}, :secret => true))
|
61
|
+
end
|
62
|
+
|
63
|
+
def user_permissions uid
|
64
|
+
permissions(uid, USER_PERMISSIONS)
|
65
|
+
end
|
66
|
+
|
67
|
+
def permissions_fql uid, selected_permissions=PERMISSIONS
|
68
|
+
sanitized_uid = uid.to_s.tr("'", '')
|
69
|
+
selected = selected_permissions.join(',')
|
70
|
+
"SELECT #{selected} FROM permissions where uid = '#{sanitized_uid}'"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
RestGraph.send(:include, RestGraph::FacebookUtil)
|
@@ -1,5 +1,24 @@
|
|
1
1
|
|
2
|
-
require '
|
2
|
+
require 'cgi'
|
3
|
+
require 'uri'
|
4
|
+
|
5
|
+
require 'rest-graph/core'
|
6
|
+
|
7
|
+
if Rails::VERSION::MAJOR >= 3
|
8
|
+
class RestGraph
|
9
|
+
class Railtie < Rails::Railtie
|
10
|
+
initializer 'rest-graph' do |app|
|
11
|
+
RestGraph::RailsUtil.init(app)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# this cannot be put here because of load order,
|
18
|
+
# so put in the bottom of this file to load up for rails2.
|
19
|
+
# if Rails::VERSION::MAJOR == 2
|
20
|
+
# ::RestGraph::RailsUtil.init(Rails)
|
21
|
+
# end
|
3
22
|
|
4
23
|
class RestGraph
|
5
24
|
module DefaultAttributes
|
@@ -16,30 +35,47 @@ class RestGraph
|
|
16
35
|
end
|
17
36
|
|
18
37
|
module RailsCache
|
19
|
-
def []
|
20
|
-
def []=
|
38
|
+
def [] key ; read(key) ; end
|
39
|
+
def []= key, value; write(key, value) ; end
|
40
|
+
def store key, value,
|
41
|
+
options={}; write(key, value, options); end
|
21
42
|
end
|
22
43
|
end
|
23
44
|
|
24
|
-
::ActiveSupport::Cache::Store.send(:include, ::RestGraph::RailsCache)
|
25
|
-
|
26
45
|
module RestGraph::RailsUtil
|
46
|
+
def self.init app=Rails
|
47
|
+
ActiveSupport::Cache::Store.send(:include, RestGraph::RailsCache)
|
48
|
+
RestGraph::ConfigUtil.load_config_for_rails(app)
|
49
|
+
end
|
50
|
+
|
27
51
|
module Helper
|
28
52
|
def rest_graph
|
29
|
-
controller.rest_graph
|
53
|
+
controller.send(:rest_graph)
|
30
54
|
end
|
31
55
|
end
|
32
56
|
|
33
57
|
def self.included controller
|
34
|
-
|
58
|
+
# skip if included already, any better way to detect this?
|
59
|
+
return if controller.respond_to?(:rest_graph, true)
|
60
|
+
|
61
|
+
controller.rescue_from(RestGraph::Error::AccessToken,
|
35
62
|
:with => :rest_graph_on_error)
|
36
|
-
controller.helper(
|
63
|
+
controller.helper(RestGraph::RailsUtil::Helper)
|
64
|
+
controller.instance_methods.select{ |method|
|
65
|
+
method.to_s =~ /^rest_graph/
|
66
|
+
}.each{ |method| controller.send(:protected, method) }
|
37
67
|
end
|
38
68
|
|
39
69
|
def rest_graph_setup options={}
|
40
70
|
rest_graph_options_ctl.merge!(rest_graph_extract_options(options, :reject))
|
41
71
|
rest_graph_options_new.merge!(rest_graph_extract_options(options, :select))
|
42
72
|
|
73
|
+
# we'll need to reinitialize rest_graph with the new options,
|
74
|
+
# otherwise if you're calling rest_graph before rest_graph_setup,
|
75
|
+
# you'll end up with default options without the ones you've passed
|
76
|
+
# into rest_graph_setup.
|
77
|
+
rest_graph.send(:initialize, rest_graph_options_new)
|
78
|
+
|
43
79
|
rest_graph_check_params_signed_request # canvas
|
44
80
|
rest_graph_check_params_session # i think it would be deprecated
|
45
81
|
rest_graph_check_cookie # for js sdk (canvas or not)
|
@@ -89,37 +125,46 @@ module RestGraph::RailsUtil
|
|
89
125
|
|
90
126
|
# override this if you want the simple redirect_to
|
91
127
|
def rest_graph_authorize_redirect
|
92
|
-
|
128
|
+
unless rest_graph_in_canvas?
|
93
129
|
redirect_to @rest_graph_authorize_url
|
94
130
|
else
|
95
|
-
|
96
|
-
|
97
|
-
@rest_graph_authorize_url.html_safe
|
98
|
-
else
|
99
|
-
@rest_graph_authorize_url
|
100
|
-
end
|
101
|
-
|
102
|
-
render :inline => <<-HTML
|
103
|
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
104
|
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
105
|
-
<html>
|
106
|
-
<head>
|
107
|
-
<script type="text/javascript">
|
108
|
-
window.top.location.href = '<%= @rest_graph_safe_url %>'
|
109
|
-
</script>
|
110
|
-
<noscript>
|
111
|
-
<meta http-equiv="refresh" content="0;url=<%= h @rest_graph_authorize_url %>" />
|
112
|
-
<meta http-equiv="window-target" content="_top" />
|
113
|
-
</noscript>
|
114
|
-
</head>
|
115
|
-
<body>
|
116
|
-
<div>Please <a href="<%= h @rest_graph_authorize_url %>" target="_top">authorize</a> if this page is not automatically redirected.</div>
|
117
|
-
</body>
|
118
|
-
</html>
|
119
|
-
HTML
|
131
|
+
rest_graph_js_redirect(@rest_graph_authorize_url,
|
132
|
+
rest_graph_authorize_body)
|
120
133
|
end
|
121
134
|
end
|
122
135
|
|
136
|
+
def rest_graph_js_redirect redirect_url, body=''
|
137
|
+
render :inline => <<-HTML
|
138
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
139
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
140
|
+
<html>
|
141
|
+
<head>
|
142
|
+
<script type="text/javascript">
|
143
|
+
window.top.location.href = '#{redirect_url}'
|
144
|
+
</script>
|
145
|
+
<noscript>
|
146
|
+
<meta http-equiv="refresh" content="0;url=#{
|
147
|
+
CGI.escapeHTML(redirect_url)}"/>
|
148
|
+
<meta http-equiv="window-target" content="_top"/>
|
149
|
+
</noscript>
|
150
|
+
</head>
|
151
|
+
<body>
|
152
|
+
#{body}
|
153
|
+
</bodt>
|
154
|
+
</html>
|
155
|
+
HTML
|
156
|
+
end
|
157
|
+
|
158
|
+
def rest_graph_authorize_body redirect_url=@rest_graph_authorize_url
|
159
|
+
<<-HTML
|
160
|
+
<div>
|
161
|
+
Please
|
162
|
+
<a href="#{CGI.escapeHTML(redirect_url)}" target="_top">authorize</a>
|
163
|
+
if this page is not automatically redirected.
|
164
|
+
</div>
|
165
|
+
HTML
|
166
|
+
end
|
167
|
+
|
123
168
|
module_function
|
124
169
|
|
125
170
|
# ==================== begin options utility =======================
|
@@ -301,9 +346,12 @@ module RestGraph::RailsUtil
|
|
301
346
|
end
|
302
347
|
|
303
348
|
def rest_graph_extract_options options, method
|
304
|
-
|
305
|
-
|
306
|
-
result.inject({}){ |r, (k, v)| r[k] = v; r }
|
349
|
+
# Hash[] is for ruby 1.8.7
|
350
|
+
Hash[options.send(method){ |(k, v)| RestGraph::Attributes.member?(k) }]
|
307
351
|
end
|
308
352
|
# ==================== end misc ================================
|
309
353
|
end
|
354
|
+
|
355
|
+
if Rails::VERSION::MAJOR == 2
|
356
|
+
RestGraph::RailsUtil.init(Rails)
|
357
|
+
end
|
data/lib/rest-graph/test_util.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
|
2
|
-
require 'rest-graph'
|
2
|
+
require 'rest-graph/core'
|
3
3
|
require 'rr'
|
4
4
|
|
5
|
+
require 'uri'
|
6
|
+
|
5
7
|
module RestGraph::TestUtil
|
6
8
|
extend RR::Adapters::RRMethods
|
7
9
|
|
@@ -14,7 +16,21 @@ module RestGraph::TestUtil
|
|
14
16
|
|
15
17
|
stub(rg).fetch{ |meth, uri, payload|
|
16
18
|
history << [meth, uri, payload]
|
17
|
-
|
19
|
+
http = 'https?://[\w\d]+(\.[\w\d]+)+/'
|
20
|
+
response = case uri
|
21
|
+
when %r{#{http}method/fql.multiquery}
|
22
|
+
RestGraph.json_decode(
|
23
|
+
Rack::Utils.parse_query(
|
24
|
+
URI.parse(uri).query)['queries']).keys.map{ |q|
|
25
|
+
{'name' => q,
|
26
|
+
'fql_result_set' => [default_response]}
|
27
|
+
}
|
28
|
+
when %r{#{http}method/\w+\.\w+}
|
29
|
+
[default_response]
|
30
|
+
else
|
31
|
+
default_response
|
32
|
+
end
|
33
|
+
RestGraph.json_encode(response)
|
18
34
|
}
|
19
35
|
}
|
20
36
|
self
|
data/lib/rest-graph/version.rb
CHANGED
data/rest-graph.gemspec
CHANGED
@@ -2,63 +2,58 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{rest-graph}
|
5
|
-
s.version = "1.
|
5
|
+
s.version = "1.8.0"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
-
s.authors = ["Cardinal Blue", "Lin Jen-Shin (
|
9
|
-
s.date = %q{
|
10
|
-
s.description = %q{A
|
11
|
-
s.email =
|
12
|
-
s.extra_rdoc_files = ["CHANGES", "CONTRIBUTORS", "
|
13
|
-
s.files = ["
|
14
|
-
s.homepage = %q{http://github.com/
|
15
|
-
s.rdoc_options = ["--main", "README
|
8
|
+
s.authors = ["Cardinal Blue", "Lin Jen-Shin (godfat)"]
|
9
|
+
s.date = %q{2011-03-08}
|
10
|
+
s.description = %q{A lightweight Facebook Graph API client}
|
11
|
+
s.email = ["dev (XD) cardinalblue.com"]
|
12
|
+
s.extra_rdoc_files = ["CHANGES", "CONTRIBUTORS", "LICENSE", "TODO"]
|
13
|
+
s.files = [".gitignore", "CHANGES", "CONTRIBUTORS", "Gemfile", "LICENSE", "README", "README.md", "Rakefile", "TODO", "doc/ToC.md", "doc/dependency.md", "doc/design.md", "doc/rails.md", "doc/test.md", "doc/tutorial.md", "example/multi/config.ru", "example/multi/rainbows.rb", "example/rails2/Gemfile", "example/rails2/Gemfile.lock", "example/rails2/README", "example/rails2/Rakefile", "example/rails2/app/controllers/application_controller.rb", "example/rails2/app/views/application/helper.html.erb", "example/rails2/config/boot.rb", "example/rails2/config/environment.rb", "example/rails2/config/environments/development.rb", "example/rails2/config/environments/production.rb", "example/rails2/config/environments/test.rb", "example/rails2/config/initializers/cookie_verification_secret.rb", "example/rails2/config/initializers/new_rails_defaults.rb", "example/rails2/config/initializers/session_store.rb", "example/rails2/config/preinitializer.rb", "example/rails2/config/rest-graph.yaml", "example/rails2/config/routes.rb", "example/rails2/log", "example/rails2/test/functional/application_controller_test.rb", "example/rails2/test/test_helper.rb", "example/rails2/test/unit/rails_util_test.rb", "example/rails3/Gemfile", "example/rails3/Gemfile.lock", "example/rails3/Rakefile", "example/rails3/app/controllers/application_controller.rb", "example/rails3/app/views/application/helper.html.erb", "example/rails3/config.ru", "example/rails3/config/application.rb", "example/rails3/config/environment.rb", "example/rails3/config/environments/development.rb", "example/rails3/config/environments/production.rb", "example/rails3/config/environments/test.rb", "example/rails3/config/initializers/secret_token.rb", "example/rails3/config/initializers/session_store.rb", "example/rails3/config/rest-graph.yaml", "example/rails3/config/routes.rb", "example/rails3/test/functional/application_controller_test.rb", "example/rails3/test/test_helper.rb", "example/rails3/test/unit/rails_util_test.rb", "init.rb", "lib/rest-graph.rb", "lib/rest-graph/auto_load.rb", "lib/rest-graph/autoload.rb", "lib/rest-graph/config_util.rb", "lib/rest-graph/core.rb", "lib/rest-graph/facebook_util.rb", "lib/rest-graph/rails_util.rb", "lib/rest-graph/test_util.rb", "lib/rest-graph/version.rb", "rest-graph.gemspec", "task/gemgem.rb", "test/common.rb", "test/config/rest-graph.yaml", "test/test_api.rb", "test/test_cache.rb", "test/test_default.rb", "test/test_error.rb", "test/test_facebook.rb", "test/test_handler.rb", "test/test_load_config.rb", "test/test_misc.rb", "test/test_multi.rb", "test/test_oauth.rb", "test/test_old.rb", "test/test_page.rb", "test/test_parse.rb", "test/test_rest-graph.rb", "test/test_serialize.rb", "test/test_test_util.rb", "test/test_timeout.rb"]
|
14
|
+
s.homepage = %q{http://github.com/godfat/}
|
15
|
+
s.rdoc_options = ["--main", "README"]
|
16
16
|
s.require_paths = ["lib"]
|
17
|
-
s.
|
18
|
-
s.
|
19
|
-
s.
|
20
|
-
s.test_files = ["test/test_api.rb", "test/test_cache.rb", "test/test_default.rb", "test/test_error.rb", "test/test_handler.rb", "test/test_load_config.rb", "test/test_misc.rb", "test/test_multi.rb", "test/test_oauth.rb", "test/test_old.rb", "test/test_page.rb", "test/test_parse.rb", "test/test_rest-graph.rb", "test/test_serialize.rb", "test/test_test_util.rb", "test/test_timeout.rb"]
|
17
|
+
s.rubygems_version = %q{1.6.1}
|
18
|
+
s.summary = %q{A lightweight Facebook Graph API client}
|
19
|
+
s.test_files = ["test/test_api.rb", "test/test_cache.rb", "test/test_default.rb", "test/test_error.rb", "test/test_facebook.rb", "test/test_handler.rb", "test/test_load_config.rb", "test/test_misc.rb", "test/test_multi.rb", "test/test_oauth.rb", "test/test_old.rb", "test/test_page.rb", "test/test_parse.rb", "test/test_rest-graph.rb", "test/test_serialize.rb", "test/test_test_util.rb", "test/test_timeout.rb"]
|
21
20
|
|
22
21
|
if s.respond_to? :specification_version then
|
23
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
24
22
|
s.specification_version = 3
|
25
23
|
|
26
24
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
27
|
-
s.add_development_dependency(%q<rest-client>, [">=
|
28
|
-
s.add_development_dependency(%q<em-http-request>, [">= 0
|
29
|
-
s.add_development_dependency(%q<rack>, [">=
|
30
|
-
s.add_development_dependency(%q<yajl-ruby>, [">= 0
|
31
|
-
s.add_development_dependency(%q<json>, [">=
|
32
|
-
s.add_development_dependency(%q<json_pure>, [">=
|
33
|
-
s.add_development_dependency(%q<ruby-hmac>, [">= 0
|
34
|
-
s.add_development_dependency(%q<
|
35
|
-
s.add_development_dependency(%q<
|
36
|
-
s.add_development_dependency(%q<
|
37
|
-
s.add_development_dependency(%q<bones>, [">= 3.5.4"])
|
25
|
+
s.add_development_dependency(%q<rest-client>, [">= 0"])
|
26
|
+
s.add_development_dependency(%q<em-http-request>, [">= 0"])
|
27
|
+
s.add_development_dependency(%q<rack>, [">= 0"])
|
28
|
+
s.add_development_dependency(%q<yajl-ruby>, [">= 0"])
|
29
|
+
s.add_development_dependency(%q<json>, [">= 0"])
|
30
|
+
s.add_development_dependency(%q<json_pure>, [">= 0"])
|
31
|
+
s.add_development_dependency(%q<ruby-hmac>, [">= 0"])
|
32
|
+
s.add_development_dependency(%q<webmock>, [">= 0"])
|
33
|
+
s.add_development_dependency(%q<bacon>, [">= 0"])
|
34
|
+
s.add_development_dependency(%q<rr>, [">= 0"])
|
38
35
|
else
|
39
|
-
s.add_dependency(%q<rest-client>, [">=
|
40
|
-
s.add_dependency(%q<em-http-request>, [">= 0
|
41
|
-
s.add_dependency(%q<rack>, [">=
|
42
|
-
s.add_dependency(%q<yajl-ruby>, [">= 0
|
43
|
-
s.add_dependency(%q<json>, [">=
|
44
|
-
s.add_dependency(%q<json_pure>, [">=
|
45
|
-
s.add_dependency(%q<ruby-hmac>, [">= 0
|
46
|
-
s.add_dependency(%q<
|
47
|
-
s.add_dependency(%q<
|
48
|
-
s.add_dependency(%q<
|
49
|
-
s.add_dependency(%q<bones>, [">= 3.5.4"])
|
36
|
+
s.add_dependency(%q<rest-client>, [">= 0"])
|
37
|
+
s.add_dependency(%q<em-http-request>, [">= 0"])
|
38
|
+
s.add_dependency(%q<rack>, [">= 0"])
|
39
|
+
s.add_dependency(%q<yajl-ruby>, [">= 0"])
|
40
|
+
s.add_dependency(%q<json>, [">= 0"])
|
41
|
+
s.add_dependency(%q<json_pure>, [">= 0"])
|
42
|
+
s.add_dependency(%q<ruby-hmac>, [">= 0"])
|
43
|
+
s.add_dependency(%q<webmock>, [">= 0"])
|
44
|
+
s.add_dependency(%q<bacon>, [">= 0"])
|
45
|
+
s.add_dependency(%q<rr>, [">= 0"])
|
50
46
|
end
|
51
47
|
else
|
52
|
-
s.add_dependency(%q<rest-client>, [">=
|
53
|
-
s.add_dependency(%q<em-http-request>, [">= 0
|
54
|
-
s.add_dependency(%q<rack>, [">=
|
55
|
-
s.add_dependency(%q<yajl-ruby>, [">= 0
|
56
|
-
s.add_dependency(%q<json>, [">=
|
57
|
-
s.add_dependency(%q<json_pure>, [">=
|
58
|
-
s.add_dependency(%q<ruby-hmac>, [">= 0
|
59
|
-
s.add_dependency(%q<
|
60
|
-
s.add_dependency(%q<
|
61
|
-
s.add_dependency(%q<
|
62
|
-
s.add_dependency(%q<bones>, [">= 3.5.4"])
|
48
|
+
s.add_dependency(%q<rest-client>, [">= 0"])
|
49
|
+
s.add_dependency(%q<em-http-request>, [">= 0"])
|
50
|
+
s.add_dependency(%q<rack>, [">= 0"])
|
51
|
+
s.add_dependency(%q<yajl-ruby>, [">= 0"])
|
52
|
+
s.add_dependency(%q<json>, [">= 0"])
|
53
|
+
s.add_dependency(%q<json_pure>, [">= 0"])
|
54
|
+
s.add_dependency(%q<ruby-hmac>, [">= 0"])
|
55
|
+
s.add_dependency(%q<webmock>, [">= 0"])
|
56
|
+
s.add_dependency(%q<bacon>, [">= 0"])
|
57
|
+
s.add_dependency(%q<rr>, [">= 0"])
|
63
58
|
end
|
64
59
|
end
|
data/task/gemgem.rb
ADDED
@@ -0,0 +1,155 @@
|
|
1
|
+
|
2
|
+
require 'pathname'
|
3
|
+
|
4
|
+
module Gemgem
|
5
|
+
class << self
|
6
|
+
attr_accessor :dir, :spec
|
7
|
+
end
|
8
|
+
|
9
|
+
module_function
|
10
|
+
def create
|
11
|
+
yield(spec = Gem::Specification.new{ |s|
|
12
|
+
s.authors = ['Lin Jen-Shin (godfat)']
|
13
|
+
s.email = ['godfat (XD) godfat.org']
|
14
|
+
s.homepage = "http://github.com/godfat/#{s.name}"
|
15
|
+
|
16
|
+
s.summary = File.read("#{Gemgem.dir}/README").
|
17
|
+
match(/DESCRIPTION:\n\n(.+?)\n\n/m)[1]
|
18
|
+
s.description = s.summary
|
19
|
+
|
20
|
+
s.extra_rdoc_files = %w[CHANGES CONTRIBUTORS LICENSE TODO]
|
21
|
+
s.rdoc_options = %w[--main README]
|
22
|
+
s.rubygems_version = Gem::VERSION
|
23
|
+
s.date = Time.now.strftime('%Y-%m-%d')
|
24
|
+
s.files = gem_files
|
25
|
+
s.test_files = gem_files.grep(%r{^test/(.+?/)*test_.+?\.rb$})
|
26
|
+
s.require_paths = %w[lib]
|
27
|
+
})
|
28
|
+
spec
|
29
|
+
end
|
30
|
+
|
31
|
+
def gem_tag
|
32
|
+
"#{spec.name}-#{spec.version}"
|
33
|
+
end
|
34
|
+
|
35
|
+
def write
|
36
|
+
File.open("#{dir}/#{spec.name}.gemspec", 'w'){ |f| f << spec.to_ruby }
|
37
|
+
end
|
38
|
+
|
39
|
+
def all_files
|
40
|
+
@all_files ||= find_files(Pathname.new(dir)).map{ |file|
|
41
|
+
if file.to_s =~ %r{\.git/}
|
42
|
+
nil
|
43
|
+
else
|
44
|
+
file.to_s
|
45
|
+
end
|
46
|
+
}.compact.sort
|
47
|
+
end
|
48
|
+
|
49
|
+
def gem_files
|
50
|
+
@gem_files ||= all_files - ignored_files
|
51
|
+
end
|
52
|
+
|
53
|
+
def ignored_files
|
54
|
+
@ignored_file ||= all_files.select{ |path| ignore_patterns.find{ |ignore|
|
55
|
+
path =~ ignore && !git_files.include?(path)}}
|
56
|
+
end
|
57
|
+
|
58
|
+
def git_files
|
59
|
+
@git_files ||= if File.exist?("#{dir}/.git")
|
60
|
+
`git ls-files`.split("\n")
|
61
|
+
else
|
62
|
+
[]
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# protected
|
67
|
+
def find_files path
|
68
|
+
path.children.select(&:file?).map{|file| file.to_s[(dir.size+1)..-1]} +
|
69
|
+
path.children.select(&:directory?).map{|dir| find_files(dir)}.flatten
|
70
|
+
end
|
71
|
+
|
72
|
+
def ignore_patterns
|
73
|
+
@ignore_files ||= expand_patterns(
|
74
|
+
File.read("#{dir}/.gitignore").split("\n").reject{ |pattern|
|
75
|
+
pattern.strip == ''
|
76
|
+
}).map{ |pattern| %r{^([^/]+/)*?#{Regexp.escape(pattern)}(/[^/]+)*?$} }
|
77
|
+
end
|
78
|
+
|
79
|
+
def expand_patterns pathes
|
80
|
+
pathes.map{ |path|
|
81
|
+
if path !~ /\*/
|
82
|
+
path
|
83
|
+
else
|
84
|
+
expand_patterns(
|
85
|
+
Dir[path] +
|
86
|
+
Pathname.new(File.dirname(path)).children.select(&:directory?).
|
87
|
+
map{ |prefix| "#{prefix}/#{File.basename(path)}" })
|
88
|
+
end
|
89
|
+
}.flatten
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
namespace :gem do
|
94
|
+
|
95
|
+
desc 'Install gem'
|
96
|
+
task :install => [:build] do
|
97
|
+
sh("#{Gem.ruby} -S gem install pkg/#{Gemgem.gem_tag}")
|
98
|
+
end
|
99
|
+
|
100
|
+
desc 'Build gem'
|
101
|
+
task :build => [:spec] do
|
102
|
+
sh("#{Gem.ruby} -S gem build #{Gemgem.spec.name}.gemspec")
|
103
|
+
sh("mkdir -p pkg")
|
104
|
+
sh("mv #{Gemgem.gem_tag}.gem pkg/")
|
105
|
+
end
|
106
|
+
|
107
|
+
desc 'Release gem'
|
108
|
+
task :release => [:spec, :check, :build] do
|
109
|
+
sh("git tag #{Gemgem.gem_tag}")
|
110
|
+
sh("git push")
|
111
|
+
sh("git push --tags")
|
112
|
+
sh("#{Gem.ruby} -S gem push pkg/#{Gemgem.gem_tag}.gem")
|
113
|
+
end
|
114
|
+
|
115
|
+
task :check do
|
116
|
+
ver = Gemgem.spec.version.to_s
|
117
|
+
|
118
|
+
if ENV['VERSION'].nil?
|
119
|
+
puts("\x1b[35mExpected " \
|
120
|
+
"\x1b[33mVERSION\x1b[35m=\x1b[33m#{ver}\x1b[m")
|
121
|
+
exit(1)
|
122
|
+
|
123
|
+
elsif ENV['VERSION'] != ver
|
124
|
+
puts("\x1b[35mExpected \x1b[33mVERSION\x1b[35m=\x1b[33m#{ver} " \
|
125
|
+
"\x1b[35mbut got\n " \
|
126
|
+
"\x1b[33mVERSION\x1b[35m=\x1b[33m#{ENV['VERSION']}\x1b[m")
|
127
|
+
exit(2)
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
end # of gem namespace
|
132
|
+
|
133
|
+
desc 'Run tests'
|
134
|
+
task :test do
|
135
|
+
sh("#{Gem.ruby} -I lib -S bacon test/test_*.rb")
|
136
|
+
end
|
137
|
+
|
138
|
+
desc 'Generate rdoc'
|
139
|
+
task :doc => ['gem:spec'] do
|
140
|
+
sh("yardoc -o rdoc --main README.md" \
|
141
|
+
" --files #{Gemgem.spec.extra_rdoc_files.join(',')}")
|
142
|
+
end
|
143
|
+
|
144
|
+
desc 'Removed ignored files'
|
145
|
+
task :clean => ['gem:spec'] do
|
146
|
+
trash = "~/.Trash/#{Gemgem.spec.name}/"
|
147
|
+
sh "mkdir -p #{trash}" unless File.exist?(File.expand_path(trash))
|
148
|
+
Gemgem.ignored_files.each{ |file| sh "mv #{file} #{trash}" }
|
149
|
+
end
|
150
|
+
|
151
|
+
|
152
|
+
task :default do
|
153
|
+
Rake.application.options.show_task_pattern = /./
|
154
|
+
Rake.application.display_tasks_and_comments
|
155
|
+
end
|