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.
Files changed (63) hide show
  1. data/.gitignore +6 -0
  2. data/CHANGES +44 -0
  3. data/CONTRIBUTORS +1 -0
  4. data/README +221 -191
  5. data/README.md +367 -0
  6. data/Rakefile +28 -43
  7. data/TODO +1 -0
  8. data/doc/ToC.md +10 -0
  9. data/doc/dependency.md +78 -0
  10. data/doc/design.md +206 -0
  11. data/doc/rails.md +12 -0
  12. data/doc/test.md +46 -0
  13. data/doc/tutorial.md +142 -0
  14. data/example/rails2/Gemfile +13 -0
  15. data/example/rails2/app/controllers/application_controller.rb +10 -8
  16. data/example/rails2/app/views/application/helper.html.erb +1 -0
  17. data/example/rails2/config/boot.rb +16 -0
  18. data/example/rails2/config/environment.rb +3 -30
  19. data/example/rails2/config/preinitializer.rb +23 -0
  20. data/example/rails2/test/functional/application_controller_test.rb +72 -32
  21. data/example/rails2/test/test_helper.rb +10 -6
  22. data/example/rails3/Gemfile +13 -0
  23. data/example/rails3/Rakefile +7 -0
  24. data/example/rails3/app/controllers/application_controller.rb +118 -0
  25. data/example/rails3/app/views/application/helper.html.erb +1 -0
  26. data/example/rails3/config.ru +4 -0
  27. data/example/rails3/config/application.rb +23 -0
  28. data/example/rails3/config/environment.rb +5 -0
  29. data/example/rails3/config/environments/development.rb +26 -0
  30. data/example/rails3/config/environments/production.rb +49 -0
  31. data/example/rails3/config/environments/test.rb +30 -0
  32. data/example/rails3/config/initializers/secret_token.rb +7 -0
  33. data/example/rails3/config/initializers/session_store.rb +8 -0
  34. data/example/rails3/config/rest-graph.yaml +11 -0
  35. data/example/rails3/config/routes.rb +5 -0
  36. data/example/rails3/test/functional/application_controller_test.rb +183 -0
  37. data/example/rails3/test/test_helper.rb +18 -0
  38. data/example/rails3/test/unit/rails_util_test.rb +44 -0
  39. data/init.rb +1 -1
  40. data/lib/rest-graph.rb +5 -571
  41. data/lib/rest-graph/auto_load.rb +3 -3
  42. data/lib/rest-graph/autoload.rb +3 -3
  43. data/lib/rest-graph/config_util.rb +43 -0
  44. data/lib/rest-graph/core.rb +608 -0
  45. data/lib/rest-graph/facebook_util.rb +74 -0
  46. data/lib/rest-graph/rails_util.rb +85 -37
  47. data/lib/rest-graph/test_util.rb +18 -2
  48. data/lib/rest-graph/version.rb +2 -2
  49. data/rest-graph.gemspec +42 -47
  50. data/task/gemgem.rb +155 -0
  51. data/test/test_api.rb +16 -0
  52. data/test/test_cache.rb +28 -8
  53. data/test/test_error.rb +9 -0
  54. data/test/test_facebook.rb +36 -0
  55. data/test/test_load_config.rb +16 -14
  56. data/test/test_misc.rb +4 -4
  57. data/test/test_parse.rb +10 -4
  58. metadata +146 -186
  59. data/Gemfile.lock +0 -45
  60. data/README.rdoc +0 -337
  61. data/example/rails2/script/console +0 -3
  62. data/example/rails2/script/server +0 -3
  63. 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 'rest-graph'
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 [] key ; read(key) ; end
20
- def []= key, value; write(key, value); end
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
- controller.rescue_from(::RestGraph::Error::AccessToken,
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(::RestGraph::RailsUtil::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
- if !rest_graph_oget(:iframe)
128
+ unless rest_graph_in_canvas?
93
129
  redirect_to @rest_graph_authorize_url
94
130
  else
95
- # for rails 3
96
- @rest_graph_safe_url = if ''.respond_to?(:html_safe)
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
- result = options.send(method){ |(k, v)| RestGraph::Attributes.member?(k) }
305
- return result if result.kind_of?(Hash) # RUBY_VERSION >= 1.9.2
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
@@ -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
- RestGraph.json_encode(default_response)
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
@@ -1,4 +1,4 @@
1
1
 
2
- require 'rest-graph'
2
+ require 'rest-graph/core'
3
3
 
4
- RestGraph::VERSION = '1.7.0'
4
+ RestGraph::VERSION = '1.8.0'
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.7.0"
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 (aka godfat 真常)"]
9
- s.date = %q{2010-12-30}
10
- s.description = %q{A super simple Facebook Open Graph API client}
11
- s.email = %q{dev (XD) cardinalblue.com}
12
- s.extra_rdoc_files = ["CHANGES", "CONTRIBUTORS", "Gemfile", "Gemfile.lock", "LICENSE", "README", "TODO", "rest-graph.gemspec"]
13
- s.files = ["CHANGES", "CONTRIBUTORS", "Gemfile", "Gemfile.lock", "LICENSE", "README", "README.rdoc", "Rakefile", "TODO", "example/multi/config.ru", "example/multi/rainbows.rb", "example/rails2/README", "example/rails2/Rakefile", "example/rails2/app/controllers/application_controller.rb", "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/rest-graph.yaml", "example/rails2/config/routes.rb", "example/rails2/log", "example/rails2/script/console", "example/rails2/script/server", "example/rails2/test/functional/application_controller_test.rb", "example/rails2/test/test_helper.rb", "example/rails2/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/load_config.rb", "lib/rest-graph/rails_util.rb", "lib/rest-graph/test_util.rb", "lib/rest-graph/version.rb", "rest-graph.gemspec", "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_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/cardinalblue/rest-graph}
15
- s.rdoc_options = ["--main", "README.rdoc"]
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.rubyforge_project = %q{rest-graph}
18
- s.rubygems_version = %q{1.3.7}
19
- s.summary = %q{A super simple Facebook Open Graph API client}
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>, [">= 1.6.1"])
28
- s.add_development_dependency(%q<em-http-request>, [">= 0.2.15"])
29
- s.add_development_dependency(%q<rack>, [">= 1.2.1"])
30
- s.add_development_dependency(%q<yajl-ruby>, [">= 0.7.8"])
31
- s.add_development_dependency(%q<json>, [">= 1.4.6"])
32
- s.add_development_dependency(%q<json_pure>, [">= 1.4.6"])
33
- s.add_development_dependency(%q<ruby-hmac>, [">= 0.4.0"])
34
- s.add_development_dependency(%q<rr>, [">= 1.0.2"])
35
- s.add_development_dependency(%q<webmock>, [">= 1.6.1"])
36
- s.add_development_dependency(%q<bacon>, [">= 1.1.0"])
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>, [">= 1.6.1"])
40
- s.add_dependency(%q<em-http-request>, [">= 0.2.15"])
41
- s.add_dependency(%q<rack>, [">= 1.2.1"])
42
- s.add_dependency(%q<yajl-ruby>, [">= 0.7.8"])
43
- s.add_dependency(%q<json>, [">= 1.4.6"])
44
- s.add_dependency(%q<json_pure>, [">= 1.4.6"])
45
- s.add_dependency(%q<ruby-hmac>, [">= 0.4.0"])
46
- s.add_dependency(%q<rr>, [">= 1.0.2"])
47
- s.add_dependency(%q<webmock>, [">= 1.6.1"])
48
- s.add_dependency(%q<bacon>, [">= 1.1.0"])
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>, [">= 1.6.1"])
53
- s.add_dependency(%q<em-http-request>, [">= 0.2.15"])
54
- s.add_dependency(%q<rack>, [">= 1.2.1"])
55
- s.add_dependency(%q<yajl-ruby>, [">= 0.7.8"])
56
- s.add_dependency(%q<json>, [">= 1.4.6"])
57
- s.add_dependency(%q<json_pure>, [">= 1.4.6"])
58
- s.add_dependency(%q<ruby-hmac>, [">= 0.4.0"])
59
- s.add_dependency(%q<rr>, [">= 1.0.2"])
60
- s.add_dependency(%q<webmock>, [">= 1.6.1"])
61
- s.add_dependency(%q<bacon>, [">= 1.1.0"])
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