mcornick-jeweler 1.2.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 (130) hide show
  1. data/.gitignore +9 -0
  2. data/ChangeLog.markdown +111 -0
  3. data/LICENSE +20 -0
  4. data/README.markdown +185 -0
  5. data/ROADMAP +12 -0
  6. data/Rakefile +103 -0
  7. data/VERSION.yml +4 -0
  8. data/bin/jeweler +8 -0
  9. data/features/generator/cucumber.feature +83 -0
  10. data/features/generator/directory_layout.feature +76 -0
  11. data/features/generator/dotdocument.feature +14 -0
  12. data/features/generator/env_options.feature +9 -0
  13. data/features/generator/git.feature +94 -0
  14. data/features/generator/license.feature +11 -0
  15. data/features/generator/rakefile.feature +151 -0
  16. data/features/generator/readme.feature +12 -0
  17. data/features/generator/test.feature +41 -0
  18. data/features/generator/test_helper.feature +49 -0
  19. data/features/placeholder.feature +5 -0
  20. data/features/step_definitions/debug_steps.rb +6 -0
  21. data/features/step_definitions/filesystem_steps.rb +68 -0
  22. data/features/step_definitions/generator_steps.rb +284 -0
  23. data/features/step_definitions/task_steps.rb +6 -0
  24. data/features/support/env.rb +29 -0
  25. data/features/tasks/build_gem.feature +9 -0
  26. data/features/tasks/version.feature +24 -0
  27. data/features/tasks/version_bumping.feature +33 -0
  28. data/jeweler.gemspec +225 -0
  29. data/lib/jeweler.rb +153 -0
  30. data/lib/jeweler/commands.rb +14 -0
  31. data/lib/jeweler/commands/build_gem.rb +31 -0
  32. data/lib/jeweler/commands/check_dependencies.rb +52 -0
  33. data/lib/jeweler/commands/install_gem.rb +40 -0
  34. data/lib/jeweler/commands/release.rb +86 -0
  35. data/lib/jeweler/commands/release_to_rubyforge.rb +51 -0
  36. data/lib/jeweler/commands/setup_rubyforge.rb +57 -0
  37. data/lib/jeweler/commands/validate_gemspec.rb +30 -0
  38. data/lib/jeweler/commands/version/base.rb +41 -0
  39. data/lib/jeweler/commands/version/bump_major.rb +13 -0
  40. data/lib/jeweler/commands/version/bump_minor.rb +12 -0
  41. data/lib/jeweler/commands/version/bump_patch.rb +14 -0
  42. data/lib/jeweler/commands/version/write.rb +12 -0
  43. data/lib/jeweler/commands/write_gemspec.rb +39 -0
  44. data/lib/jeweler/errors.rb +20 -0
  45. data/lib/jeweler/gemspec_helper.rb +79 -0
  46. data/lib/jeweler/generator.rb +306 -0
  47. data/lib/jeweler/generator/application.rb +54 -0
  48. data/lib/jeweler/generator/bacon_mixin.rb +43 -0
  49. data/lib/jeweler/generator/micronaut_mixin.rb +41 -0
  50. data/lib/jeweler/generator/minitest_mixin.rb +42 -0
  51. data/lib/jeweler/generator/options.rb +102 -0
  52. data/lib/jeweler/generator/rdoc_mixin.rb +9 -0
  53. data/lib/jeweler/generator/rspec_mixin.rb +42 -0
  54. data/lib/jeweler/generator/shoulda_mixin.rb +42 -0
  55. data/lib/jeweler/generator/testunit_mixin.rb +39 -0
  56. data/lib/jeweler/generator/yard_mixin.rb +14 -0
  57. data/lib/jeweler/rubyforge_tasks.rb +98 -0
  58. data/lib/jeweler/specification.rb +66 -0
  59. data/lib/jeweler/tasks.rb +135 -0
  60. data/lib/jeweler/templates/.document +5 -0
  61. data/lib/jeweler/templates/.gitignore +5 -0
  62. data/lib/jeweler/templates/LICENSE +20 -0
  63. data/lib/jeweler/templates/README.rdoc +18 -0
  64. data/lib/jeweler/templates/Rakefile +153 -0
  65. data/lib/jeweler/templates/bacon/flunking.rb +7 -0
  66. data/lib/jeweler/templates/bacon/helper.rb +8 -0
  67. data/lib/jeweler/templates/features/default.feature +9 -0
  68. data/lib/jeweler/templates/features/support/env.rb +8 -0
  69. data/lib/jeweler/templates/micronaut/flunking.rb +7 -0
  70. data/lib/jeweler/templates/micronaut/helper.rb +17 -0
  71. data/lib/jeweler/templates/minitest/flunking.rb +7 -0
  72. data/lib/jeweler/templates/minitest/helper.rb +11 -0
  73. data/lib/jeweler/templates/rspec/flunking.rb +7 -0
  74. data/lib/jeweler/templates/rspec/helper.rb +10 -0
  75. data/lib/jeweler/templates/shoulda/flunking.rb +7 -0
  76. data/lib/jeweler/templates/shoulda/helper.rb +10 -0
  77. data/lib/jeweler/templates/testunit/flunking.rb +7 -0
  78. data/lib/jeweler/templates/testunit/helper.rb +9 -0
  79. data/lib/jeweler/version_helper.rb +128 -0
  80. data/test/fixtures/bar/VERSION.yml +4 -0
  81. data/test/fixtures/bar/bin/foo_the_ultimate_bin +1 -0
  82. data/test/fixtures/bar/hey_include_me_in_gemspec +0 -0
  83. data/test/fixtures/bar/lib/foo_the_ultimate_lib.rb +1 -0
  84. data/test/fixtures/existing-project-with-version-plaintext/.document +5 -0
  85. data/test/fixtures/existing-project-with-version-plaintext/.gitignore +5 -0
  86. data/test/fixtures/existing-project-with-version-plaintext/LICENSE +20 -0
  87. data/test/fixtures/existing-project-with-version-plaintext/README.rdoc +7 -0
  88. data/test/fixtures/existing-project-with-version-plaintext/Rakefile +82 -0
  89. data/test/fixtures/existing-project-with-version-plaintext/VERSION +1 -0
  90. data/test/fixtures/existing-project-with-version-plaintext/existing-project-with-version.gemspec +29 -0
  91. data/test/fixtures/existing-project-with-version-plaintext/lib/existing_project_with_version.rb +0 -0
  92. data/test/fixtures/existing-project-with-version-plaintext/test/existing_project_with_version_test.rb +7 -0
  93. data/test/fixtures/existing-project-with-version-plaintext/test/test_helper.rb +10 -0
  94. data/test/fixtures/existing-project-with-version-yaml/.document +5 -0
  95. data/test/fixtures/existing-project-with-version-yaml/.gitignore +5 -0
  96. data/test/fixtures/existing-project-with-version-yaml/LICENSE +20 -0
  97. data/test/fixtures/existing-project-with-version-yaml/README.rdoc +7 -0
  98. data/test/fixtures/existing-project-with-version-yaml/Rakefile +82 -0
  99. data/test/fixtures/existing-project-with-version-yaml/VERSION.yml +4 -0
  100. data/test/fixtures/existing-project-with-version-yaml/bin/foo_the_ultimate_bin +0 -0
  101. data/test/fixtures/existing-project-with-version-yaml/existing-project-with-version.gemspec +29 -0
  102. data/test/fixtures/existing-project-with-version-yaml/lib/existing_project_with_version.rb +0 -0
  103. data/test/fixtures/existing-project-with-version-yaml/test/existing_project_with_version_test.rb +7 -0
  104. data/test/fixtures/existing-project-with-version-yaml/test/test_helper.rb +10 -0
  105. data/test/geminstaller.yml +12 -0
  106. data/test/jeweler/commands/test_build_gem.rb +72 -0
  107. data/test/jeweler/commands/test_install_gem.rb +74 -0
  108. data/test/jeweler/commands/test_release.rb +362 -0
  109. data/test/jeweler/commands/test_release_to_rubyforge.rb +157 -0
  110. data/test/jeweler/commands/test_setup_rubyforge.rb +182 -0
  111. data/test/jeweler/commands/test_validate_gemspec.rb +27 -0
  112. data/test/jeweler/commands/test_write_gemspec.rb +92 -0
  113. data/test/jeweler/commands/version/test_base.rb +32 -0
  114. data/test/jeweler/commands/version/test_bump_major.rb +22 -0
  115. data/test/jeweler/commands/version/test_bump_minor.rb +19 -0
  116. data/test/jeweler/commands/version/test_bump_patch.rb +20 -0
  117. data/test/jeweler/commands/version/test_write.rb +23 -0
  118. data/test/shoulda_macros/jeweler_macros.rb +35 -0
  119. data/test/test_application.rb +139 -0
  120. data/test/test_gemspec_helper.rb +40 -0
  121. data/test/test_generator.rb +166 -0
  122. data/test/test_generator_initialization.rb +156 -0
  123. data/test/test_generator_mixins.rb +18 -0
  124. data/test/test_helper.rb +159 -0
  125. data/test/test_jeweler.rb +174 -0
  126. data/test/test_options.rb +149 -0
  127. data/test/test_specification.rb +61 -0
  128. data/test/test_tasks.rb +35 -0
  129. data/test/test_version_helper.rb +153 -0
  130. metadata +283 -0
@@ -0,0 +1,12 @@
1
+ class Jeweler
2
+ module Commands
3
+ module Version
4
+ class Write < Base
5
+ attr_accessor :major, :minor, :patch
6
+ def update_version
7
+ version_helper.update_to major, minor, patch
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,39 @@
1
+ class Jeweler
2
+ module Commands
3
+ class WriteGemspec
4
+ attr_accessor :base_dir, :gemspec, :version, :output, :gemspec_helper, :version_helper
5
+
6
+ def initialize
7
+ self.output = $stdout
8
+ end
9
+
10
+ def run
11
+ version_helper.refresh
12
+ gemspec_helper.spec.version = version_helper.to_s
13
+ gemspec_helper.spec.date = Time.now
14
+
15
+ gemspec_helper.write
16
+
17
+ output.puts "Generated: #{gemspec_helper.path}"
18
+ end
19
+
20
+ def gemspec_helper
21
+ @gemspec_helper ||= GemSpecHelper.new(self.gemspec, self.base_dir)
22
+ end
23
+
24
+ def self.build_for(jeweler)
25
+ command = new
26
+
27
+ command.base_dir = jeweler.base_dir
28
+ command.gemspec = jeweler.gemspec
29
+ command.version = jeweler.version
30
+ command.output = jeweler.output
31
+ command.gemspec_helper = jeweler.gemspec_helper
32
+ command.version_helper = jeweler.version_helper
33
+
34
+ command
35
+ end
36
+
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,20 @@
1
+ class Jeweler
2
+ # Gemspec related error
3
+ class GemspecError < StandardError
4
+ end
5
+
6
+ class VersionYmlError < StandardError
7
+ end
8
+
9
+ # Occurs when interacting with RubyForge, and an expected project isn't available on RubyForge.
10
+ class MissingRubyForgePackageError < StandardError
11
+ end
12
+
13
+ # Occurs when interacting with RubyForge, and 'rubyforge_project' isn't set on the Gem::Specification
14
+ class NoRubyForgeProjectInGemspecError < StandardError
15
+ end
16
+
17
+ # Occurs when interacting with RubyForge, and the 'rubyforge_project' isn't setup in ~/.rubyforge/autoconfig.yml or it doesn't exist on RubyForge
18
+ class RubyForgeProjectNotConfiguredError < StandardError
19
+ end
20
+ end
@@ -0,0 +1,79 @@
1
+ class Jeweler
2
+
3
+ class GemSpecHelper
4
+
5
+ attr_accessor :spec, :base_dir
6
+
7
+ def initialize(spec, base_dir = nil)
8
+ self.spec = spec
9
+ self.base_dir = base_dir || ''
10
+
11
+ yield spec if block_given?
12
+ end
13
+
14
+ def valid?
15
+ begin
16
+ parse
17
+ true
18
+ rescue
19
+ false
20
+ end
21
+ end
22
+
23
+ def write
24
+ normalize_files(:files)
25
+ normalize_files(:files)
26
+ normalize_files(:extra_rdoc_files)
27
+
28
+ File.open(path, 'w') do |f|
29
+ gemspec_ruby = @spec.to_ruby
30
+ gemspec_ruby = prettyify_array(gemspec_ruby, :files)
31
+ gemspec_ruby = prettyify_array(gemspec_ruby, :test_files)
32
+ gemspec_ruby = prettyify_array(gemspec_ruby, :extra_rdoc_files)
33
+ f.puts "# Generated by jeweler"
34
+ f.puts "# DO NOT EDIT THIS FILE"
35
+ f.puts "# Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`"
36
+ f.write gemspec_ruby
37
+ end
38
+ end
39
+
40
+ def path
41
+ denormalized_path = File.join(@base_dir, "#{@spec.name}.gemspec")
42
+ absolute_path = File.expand_path(denormalized_path)
43
+ absolute_path.gsub(Dir.getwd + File::SEPARATOR, '')
44
+ end
45
+
46
+ def parse
47
+ data = File.read(path)
48
+ parsed_gemspec = nil
49
+ Thread.new { parsed_gemspec = eval("$SAFE = 3\n#{data}", binding, path) }.join
50
+ parsed_gemspec
51
+ end
52
+
53
+ def normalize_files(array_name)
54
+ array = @spec.send(array_name)
55
+ # only keep files, no directories, and sort
56
+ array = array.select do |path|
57
+ File.file? File.join(@base_dir, path)
58
+ end.sort
59
+
60
+ @spec.send("#{array_name}=", array)
61
+ end
62
+
63
+ def prettyify_array(gemspec_ruby, array_name)
64
+ gemspec_ruby.gsub(/s\.#{array_name.to_s} = \[.+?\]/) do |match|
65
+ leadin, files = match[0..-2].split("[")
66
+ leadin + "[\n #{files.split(",").join(",\n ")}\n ]"
67
+ end
68
+ end
69
+
70
+ def gem_path
71
+ File.join(@base_dir, 'pkg', parse.file_name)
72
+ end
73
+
74
+ def update_version(version)
75
+ @spec.version = version.to_s
76
+ end
77
+
78
+ end
79
+ end
@@ -0,0 +1,306 @@
1
+ require 'git'
2
+ require 'erb'
3
+
4
+ require 'net/http'
5
+ require 'uri'
6
+
7
+ require 'jeweler/generator/bacon_mixin'
8
+ require 'jeweler/generator/micronaut_mixin'
9
+ require 'jeweler/generator/minitest_mixin'
10
+ require 'jeweler/generator/rspec_mixin'
11
+ require 'jeweler/generator/shoulda_mixin'
12
+ require 'jeweler/generator/testunit_mixin'
13
+
14
+ require 'jeweler/generator/rdoc_mixin'
15
+ require 'jeweler/generator/yard_mixin'
16
+
17
+ class Jeweler
18
+ class NoGitUserName < StandardError
19
+ end
20
+ class NoGitUserEmail < StandardError
21
+ end
22
+ class FileInTheWay < StandardError
23
+ end
24
+ class NoGitHubRepoNameGiven < StandardError
25
+ end
26
+ class NoGitHubUser < StandardError
27
+ end
28
+ class NoGitHubToken < StandardError
29
+ end
30
+ class GitInitFailed < StandardError
31
+ end
32
+
33
+ class Generator
34
+ attr_accessor :target_dir, :user_name, :user_email, :summary,
35
+ :description, :project_name, :github_username, :github_token,
36
+ :repo, :should_create_repo,
37
+ :testing_framework, :documentation_framework,
38
+ :should_use_cucumber, :should_setup_gemcutter,
39
+ :should_setup_rubyforge, :should_use_reek, :should_use_roodi,
40
+ :development_dependencies
41
+
42
+ DEFAULT_TESTING_FRAMEWORK = :shoulda
43
+ DEFAULT_DOCUMENTATION_FRAMEWORK = :rdoc
44
+
45
+ def initialize(project_name, options = {})
46
+ if project_name.nil? || project_name.squeeze.strip == ""
47
+ raise NoGitHubRepoNameGiven
48
+ end
49
+
50
+ self.development_dependencies = []
51
+
52
+ self.project_name = project_name
53
+
54
+ self.testing_framework = (options[:testing_framework] || DEFAULT_TESTING_FRAMEWORK).to_sym
55
+ self.documentation_framework = options[:documentation_framework] || DEFAULT_DOCUMENTATION_FRAMEWORK
56
+ begin
57
+ generator_mixin_name = "#{self.testing_framework.to_s.capitalize}Mixin"
58
+ generator_mixin = self.class.const_get(generator_mixin_name)
59
+ extend generator_mixin
60
+ rescue NameError => e
61
+ raise ArgumentError, "Unsupported testing framework (#{testing_framework})"
62
+ end
63
+
64
+ begin
65
+ generator_mixin_name = "#{self.documentation_framework.to_s.capitalize}Mixin"
66
+ generator_mixin = self.class.const_get(generator_mixin_name)
67
+ extend generator_mixin
68
+ rescue NameError => e
69
+ raise ArgumentError, "Unsupported documentation framework (#{documentation_framework})"
70
+ end
71
+
72
+
73
+ self.target_dir = options[:directory] || self.project_name
74
+
75
+ self.should_create_repo = options[:create_repo]
76
+ self.summary = options[:summary] || 'TODO: one-line summary of your gem'
77
+ self.description = options[:description] || 'TODO: longer description of your gem'
78
+ self.should_use_cucumber = options[:use_cucumber]
79
+ self.should_use_reek = options[:use_reek]
80
+ self.should_use_roodi = options[:use_roodi]
81
+ self.should_setup_gemcutter = options[:gemcutter]
82
+ self.should_setup_rubyforge = options[:rubyforge]
83
+
84
+ development_dependencies << "cucumber" if should_use_cucumber
85
+
86
+ use_user_git_config
87
+
88
+ end
89
+
90
+ def run
91
+ create_files
92
+ gitify
93
+ $stdout.puts "Jeweler has prepared your gem in #{target_dir}"
94
+ if should_create_repo
95
+ create_and_push_repo
96
+ $stdout.puts "Jeweler has pushed your repo to #{project_homepage}"
97
+ enable_gem_for_repo
98
+ $stdout.puts "Jeweler has enabled gem building for your repo"
99
+ end
100
+ end
101
+
102
+ def git_remote
103
+ "git@github.com:#{github_username}/#{project_name}.git"
104
+ end
105
+
106
+ def project_homepage
107
+ "http://github.com/#{github_username}/#{project_name}"
108
+ end
109
+
110
+ def constant_name
111
+ self.project_name.split(/[-_]/).collect{|each| each.capitalize }.join
112
+ end
113
+
114
+ def lib_filename
115
+ "#{project_name}.rb"
116
+ end
117
+
118
+ def require_name
119
+ self.project_name
120
+ end
121
+
122
+ def file_name_prefix
123
+ self.project_name.gsub('-', '_')
124
+ end
125
+
126
+ def lib_dir
127
+ 'lib'
128
+ end
129
+
130
+ def feature_filename
131
+ "#{project_name}.feature"
132
+ end
133
+
134
+ def steps_filename
135
+ "#{project_name}_steps.rb"
136
+ end
137
+
138
+ def features_dir
139
+ 'features'
140
+ end
141
+
142
+ def features_support_dir
143
+ File.join(features_dir, 'support')
144
+ end
145
+
146
+ def features_steps_dir
147
+ File.join(features_dir, 'step_definitions')
148
+ end
149
+
150
+ protected
151
+
152
+ # This is in a separate method so we can stub it out during testing
153
+ def read_git_config
154
+ Git.global_config
155
+ end
156
+
157
+ private
158
+ def create_files
159
+ unless File.exists?(target_dir) || File.directory?(target_dir)
160
+ FileUtils.mkdir target_dir
161
+ else
162
+ raise FileInTheWay, "The directory #{target_dir} already exists, aborting. Maybe move it out of the way before continuing?"
163
+ end
164
+
165
+
166
+ output_template_in_target '.gitignore'
167
+ output_template_in_target 'Rakefile'
168
+ output_template_in_target 'LICENSE'
169
+ output_template_in_target 'README.rdoc'
170
+ output_template_in_target '.document'
171
+
172
+ mkdir_in_target lib_dir
173
+ touch_in_target File.join(lib_dir, lib_filename)
174
+
175
+ mkdir_in_target test_dir
176
+ output_template_in_target File.join(testing_framework.to_s, 'helper.rb'), File.join(test_dir, test_helper_filename)
177
+ output_template_in_target File.join(testing_framework.to_s, 'flunking.rb'), File.join(test_dir, test_filename)
178
+
179
+ if should_use_cucumber
180
+ mkdir_in_target features_dir
181
+ output_template_in_target File.join(%w(features default.feature)), File.join('features', feature_filename)
182
+
183
+ mkdir_in_target features_support_dir
184
+ output_template_in_target File.join(features_support_dir, 'env.rb')
185
+
186
+ mkdir_in_target features_steps_dir
187
+ touch_in_target File.join(features_steps_dir, steps_filename)
188
+ end
189
+
190
+ end
191
+
192
+ def use_user_git_config
193
+ git_config = self.read_git_config
194
+
195
+ unless git_config.has_key? 'user.name'
196
+ raise NoGitUserName
197
+ end
198
+
199
+ unless git_config.has_key? 'user.email'
200
+ raise NoGitUserEmail
201
+ end
202
+
203
+ unless git_config.has_key? 'github.user'
204
+ raise NoGitHubUser
205
+ end
206
+
207
+ if should_create_repo
208
+ unless git_config.has_key? 'github.token'
209
+ raise NoGitHubToken
210
+ end
211
+ end
212
+
213
+ self.user_name = git_config['user.name']
214
+ self.user_email = git_config['user.email']
215
+ self.github_username = git_config['github.user']
216
+ self.github_token = git_config['github.token']
217
+ end
218
+
219
+ def output_template_in_target(source, destination = source)
220
+ final_destination = File.join(target_dir, destination)
221
+
222
+ template_contents = File.read(File.join(template_dir, source))
223
+ template = ERB.new(template_contents, nil, '<>')
224
+
225
+ template_result = template.result(binding).gsub(/\n\n\n+/, "\n\n")
226
+
227
+ File.open(final_destination, 'w') {|file| file.write(template_result)}
228
+
229
+ $stdout.puts "\tcreate\t#{destination}"
230
+ end
231
+
232
+ def template_dir
233
+ File.join(File.dirname(__FILE__), 'templates')
234
+ end
235
+
236
+ def mkdir_in_target(directory)
237
+ final_destination = File.join(target_dir, directory)
238
+
239
+ FileUtils.mkdir final_destination
240
+
241
+ $stdout.puts "\tcreate\t#{directory}"
242
+ end
243
+
244
+ def touch_in_target(destination)
245
+ final_destination = File.join(target_dir, destination)
246
+ FileUtils.touch final_destination
247
+ $stdout.puts "\tcreate\t#{destination}"
248
+ end
249
+
250
+ def gitify
251
+ saved_pwd = Dir.pwd
252
+ Dir.chdir(target_dir)
253
+ begin
254
+ begin
255
+ @repo = Git.init()
256
+ rescue Git::GitExecuteError => e
257
+ raise GitInitFailed, "Encountered an error during gitification. Maybe the repo already exists, or has already been pushed to?"
258
+ end
259
+
260
+ begin
261
+ @repo.add('.')
262
+ rescue Git::GitExecuteError => e
263
+ #raise GitAddFailed, "There was some problem adding this directory to the git changeset"
264
+ raise
265
+ end
266
+
267
+ begin
268
+ @repo.commit "Initial commit to #{project_name}."
269
+ rescue Git::GitExecuteError => e
270
+ raise
271
+ end
272
+
273
+ begin
274
+ @repo.add_remote('origin', git_remote)
275
+ rescue Git::GitExecuteError => e
276
+ puts "Encountered an error while adding origin remote. Maybe you have some weird settings in ~/.gitconfig?"
277
+ raise
278
+ end
279
+ ensure
280
+ Dir.chdir(saved_pwd)
281
+ end
282
+ end
283
+
284
+ def create_and_push_repo
285
+ Net::HTTP.post_form URI.parse('http://github.com/repositories'),
286
+ 'login' => github_username,
287
+ 'token' => github_token,
288
+ 'repository[description]' => summary,
289
+ 'repository[name]' => project_name
290
+ # TODO do a HEAD request to see when it's ready
291
+ @repo.push('origin')
292
+ end
293
+
294
+ def enable_gem_for_repo
295
+ url = "https://github.com/#{github_username}/#{project_name}/update"
296
+ `curl -F 'login=#{github_username}' -F 'token=#{github_token}' -F 'field=repository_rubygem' -F 'value=1' #{url} 2>/dev/null`
297
+ # FIXME use NET::HTTP instead of curl
298
+ #Net::HTTP.post_form URI.parse(url),
299
+ #'login' => github_username,
300
+ #'token' => github_token,
301
+ #'field' => 'repository_rubygem',
302
+ #'value' => '1'
303
+ end
304
+
305
+ end
306
+ end