rest-graph 1.7.0 → 1.8.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|