wvanbergen-adyen 0.1.1 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,26 +5,30 @@ require 'date'
5
5
  require 'git'
6
6
 
7
7
  module GithubGem
8
-
8
+
9
+ # Detects the gemspc file of this project using heuristics.
9
10
  def self.detect_gemspec_file
10
11
  FileList['*.gemspec'].first
11
12
  end
12
-
13
+
14
+ # Detects the main include file of this project using heuristics
13
15
  def self.detect_main_include
14
16
  if detect_gemspec_file =~ /^(\.*)\.gemspec$/ && File.exist?("lib/#{$1}.rb")
15
17
  "lib/#{$1}.rb"
16
18
  elsif FileList['lib/*.rb'].length == 1
17
19
  FileList['lib/*.rb'].first
18
20
  else
19
- raise "Could not detect main include file!"
21
+ nil
20
22
  end
21
23
  end
22
-
24
+
23
25
  class RakeTasks
24
-
26
+
25
27
  attr_reader :gemspec, :modified_files, :git
26
28
  attr_accessor :gemspec_file, :task_namespace, :main_include, :root_dir, :spec_pattern, :test_pattern, :remote, :remote_branch, :local_branch
27
-
29
+
30
+ # Initializes the settings, yields itself for configuration
31
+ # and defines the rake tasks based on the gemspec file.
28
32
  def initialize(task_namespace = :gem)
29
33
  @gemspec_file = GithubGem.detect_gemspec_file
30
34
  @task_namespace = task_namespace
@@ -36,17 +40,17 @@ module GithubGem
36
40
  @local_branch = 'master'
37
41
  @remote = 'origin'
38
42
  @remote_branch = 'master'
39
-
40
-
43
+
41
44
  yield(self) if block_given?
42
45
 
43
- @git = Git.open(@root_dir)
44
- load_gemspec!
46
+ @git = Git.open(@root_dir)
47
+ load_gemspec!
45
48
  define_tasks!
46
49
  end
47
-
50
+
48
51
  protected
49
-
52
+
53
+ # Define Unit test tasks
50
54
  def define_test_tasks!
51
55
  require 'rake/testtask'
52
56
 
@@ -57,11 +61,12 @@ module GithubGem
57
61
  t.libs << 'test'
58
62
  end
59
63
  end
60
-
64
+
61
65
  desc "Run all unit tests for #{gemspec.name}"
62
66
  task(:test => ['test:basic'])
63
67
  end
64
-
68
+
69
+ # Defines RSpec tasks
65
70
  def define_rspec_tasks!
66
71
  require 'spec/rake/spectask'
67
72
 
@@ -70,204 +75,249 @@ module GithubGem
70
75
  Spec::Rake::SpecTask.new(:basic) do |t|
71
76
  t.spec_files = FileList[spec_pattern]
72
77
  end
73
-
78
+
74
79
  desc "Verify all RSpec examples for #{gemspec.name} and output specdoc"
75
80
  Spec::Rake::SpecTask.new(:specdoc) do |t|
76
81
  t.spec_files = FileList[spec_pattern]
77
82
  t.spec_opts << '--format' << 'specdoc' << '--color'
78
83
  end
79
-
84
+
80
85
  desc "Run RCov on specs for #{gemspec.name}"
81
86
  Spec::Rake::SpecTask.new(:rcov) do |t|
82
87
  t.spec_files = FileList[spec_pattern]
83
88
  t.rcov = true
84
- t.rcov_opts = ['--exclude', '"spec/*,gems/*"', '--rails']
85
- end
89
+ t.rcov_opts = ['--exclude', '"spec/*,gems/*"', '--rails']
90
+ end
86
91
  end
87
-
92
+
88
93
  desc "Verify all RSpec examples for #{gemspec.name} and output specdoc"
89
- task(:spec => ['spec:specdoc'])
94
+ task(:spec => ['spec:specdoc'])
90
95
  end
91
-
96
+
92
97
  # Defines the rake tasks
93
98
  def define_tasks!
94
-
99
+
95
100
  define_test_tasks! if has_tests?
96
101
  define_rspec_tasks! if has_specs?
97
-
102
+
98
103
  namespace(@task_namespace) do
99
104
  desc "Updates the filelist in the gemspec file"
100
- task(:manifest) { manifest_task }
101
-
105
+ task(:manifest) { manifest_task }
106
+
102
107
  desc "Builds the .gem package"
103
108
  task(:build => :manifest) { build_task }
104
109
 
105
110
  desc "Sets the version of the gem in the gemspec"
106
111
  task(:set_version => [:check_version, :check_current_branch]) { version_task }
107
- task(:check_version => :fetch_origin) { check_version_task }
108
-
112
+ task(:check_version => :fetch_origin) { check_version_task }
113
+
109
114
  task(:fetch_origin) { fetch_origin_task }
110
- task(:check_current_branch) { check_current_branch_task }
115
+ task(:check_current_branch) { check_current_branch_task }
111
116
  task(:check_clean_status) { check_clean_status_task }
112
117
  task(:check_not_diverged => :fetch_origin) { check_not_diverged_task }
113
-
118
+
114
119
  checks = [:check_current_branch, :check_clean_status, :check_not_diverged, :check_version]
115
120
  checks.unshift('spec:basic') if has_specs?
116
121
  checks.unshift('test:basic') if has_tests?
117
122
  checks.push << [:check_rubyforge] if gemspec.rubyforge_project
118
-
123
+
119
124
  desc "Perform all checks that would occur before a release"
120
- task(:release_checks => checks)
125
+ task(:release_checks => checks)
121
126
 
122
127
  release_tasks = [:release_checks, :set_version, :build, :github_release]
123
128
  release_tasks << [:rubyforge_release] if gemspec.rubyforge_project
124
-
129
+
125
130
  desc "Release a new verison of the gem"
126
131
  task(:release => release_tasks) { release_task }
127
-
132
+
128
133
  task(:check_rubyforge) { check_rubyforge_task }
129
134
  task(:rubyforge_release) { rubyforge_release_task }
130
135
  task(:github_release => [:commit_modified_files, :tag_version]) { github_release_task }
131
136
  task(:tag_version) { tag_version_task }
132
137
  task(:commit_modified_files) { commit_modified_files_task }
138
+
139
+ desc "Updates the gem release tasks with the latest version on Github"
140
+ task(:update_tasks) { update_tasks_task }
133
141
  end
134
142
  end
135
-
143
+
144
+ # Updates the files list and test_files list in the gemspec file using the list of files
145
+ # in the repository and the spec/test file pattern.
136
146
  def manifest_task
137
147
  # Load all the gem's files using "git ls-files"
138
148
  repository_files = git.ls_files.keys
139
149
  test_files = Dir[test_pattern] + Dir[spec_pattern]
140
-
150
+
141
151
  update_gemspec(:files, repository_files)
142
152
  update_gemspec(:test_files, repository_files & test_files)
143
153
  end
144
-
154
+
155
+ # Builds the gem
145
156
  def build_task
146
157
  sh "gem build -q #{gemspec_file}"
147
158
  Dir.mkdir('pkg') unless File.exist?('pkg')
148
- sh "mv #{gemspec.name}-#{gemspec.version}.gem pkg/#{gemspec.name}-#{gemspec.version}.gem"
159
+ sh "mv #{gemspec.name}-#{gemspec.version}.gem pkg/#{gemspec.name}-#{gemspec.version}.gem"
149
160
  end
150
-
161
+
162
+ # Updates the version number in the gemspec file, the VERSION constant in the main
163
+ # include file and the contents of the VERSION file.
151
164
  def version_task
152
165
  update_gemspec(:version, ENV['VERSION']) if ENV['VERSION']
153
166
  update_gemspec(:date, Date.today)
154
-
167
+
155
168
  update_version_file(gemspec.version)
156
169
  update_version_constant(gemspec.version)
157
170
  end
158
-
171
+
159
172
  def check_version_task
160
173
  raise "#{ENV['VERSION']} is not a valid version number!" if ENV['VERSION'] && !Gem::Version.correct?(ENV['VERSION'])
161
174
  proposed_version = Gem::Version.new(ENV['VERSION'] || gemspec.version)
162
175
  # Loads the latest version number using the created tags
163
- newest_version = git.tags.map { |tag| tag.name.split('-').last }.compact.map { |v| Gem::Version.new(v) }.max
176
+ newest_version = git.tags.map { |tag| tag.name.split('-').last }.compact.map { |v| Gem::Version.new(v) }.max
164
177
  raise "This version (#{proposed_version}) is not higher than the highest tagged version (#{newest_version})" if newest_version && newest_version >= proposed_version
165
178
  end
166
-
179
+
180
+ # Checks whether the current branch is not diverged from the remote branch
167
181
  def check_not_diverged_task
168
182
  raise "The current branch is diverged from the remote branch!" if git.log.between('HEAD', git.branches["#{remote}/#{remote_branch}"].gcommit).any?
169
183
  end
170
-
184
+
185
+ # Checks whether the repository status ic clean
171
186
  def check_clean_status_task
172
- #raise "The current working copy contains modifications" if git.status.changed.any?
187
+ raise "The current working copy contains modifications" if git.status.changed.any?
173
188
  end
174
-
189
+
190
+ # Checks whether the current branch is correct
175
191
  def check_current_branch_task
176
192
  raise "Currently not on #{local_branch} branch!" unless git.branch.name == local_branch.to_s
177
193
  end
178
-
194
+
195
+ # Fetches the latest updates from Github
179
196
  def fetch_origin_task
180
197
  git.fetch('origin')
181
198
  end
182
-
199
+
200
+ # Commits every file that has been changed by the release task.
183
201
  def commit_modified_files_task
184
202
  if modified_files.any?
185
203
  modified_files.each { |file| git.add(file) }
186
204
  git.commit("Released #{gemspec.name} gem version #{gemspec.version}")
187
205
  end
188
206
  end
189
-
207
+
208
+ # Adds a tag for the released version
190
209
  def tag_version_task
191
210
  git.add_tag("#{gemspec.name}-#{gemspec.version}")
192
211
  end
193
-
212
+
213
+ # Pushes the changes and tag to github
194
214
  def github_release_task
195
215
  git.push(remote, remote_branch, true)
196
216
  end
197
-
217
+
218
+ # Checks whether Rubyforge is configured properly
198
219
  def check_rubyforge_task
199
- raise "Could not login on rubyforge!" unless `rubyforge login 2>&1`.strip.empty?
220
+ # Login no longer necessary when using rubyforge 2.0.0 gem
221
+ # raise "Could not login on rubyforge!" unless `rubyforge login 2>&1`.strip.empty?
200
222
  output = `rubyforge names`.split("\n")
201
223
  raise "Rubyforge group not found!" unless output.any? { |line| %r[^groups\s*\:.*\b#{Regexp.quote(gemspec.rubyforge_project)}\b.*] =~ line }
202
- raise "Rubyforge package not found!" unless output.any? { |line| %r[^packages\s*\:.*\b#{Regexp.quote(gemspec.name)}\b.*] =~ line }
224
+ raise "Rubyforge package not found!" unless output.any? { |line| %r[^packages\s*\:.*\b#{Regexp.quote(gemspec.name)}\b.*] =~ line }
203
225
  end
204
-
226
+
227
+ # Task to release the .gem file toRubyforge.
205
228
  def rubyforge_release_task
206
229
  sh 'rubyforge', 'add_release', gemspec.rubyforge_project, gemspec.name, gemspec.version.to_s, "pkg/#{gemspec.name}-#{gemspec.version}.gem"
207
230
  end
208
-
231
+
232
+ # Gem release task.
233
+ # All work is done by the task's dependencies, so just display a release completed message.
209
234
  def release_task
210
235
  puts
211
236
  puts '------------------------------------------------------------'
212
237
  puts "Released #{gemspec.name} version #{gemspec.version}"
213
238
  end
214
-
239
+
215
240
  private
216
-
241
+
242
+ # Checks whether this project has any RSpec files
217
243
  def has_specs?
218
244
  FileList[spec_pattern].any?
219
245
  end
220
-
246
+
247
+ # Checks whether this project has any unit test files
221
248
  def has_tests?
222
249
  FileList[test_pattern].any?
223
250
  end
224
-
225
-
251
+
226
252
  # Loads the gemspec file
227
253
  def load_gemspec!
228
254
  @gemspec = eval(File.read(@gemspec_file))
229
255
  end
230
-
256
+
231
257
  # Updates the VERSION file with the new version
232
258
  def update_version_file(version)
233
259
  if File.exists?('VERSION')
234
- File.open('VERSION', 'w') { |f| f << version.to_s }
260
+ File.open('VERSION', 'w') { |f| f << version.to_s }
235
261
  modified_files << 'VERSION'
236
262
  end
237
263
  end
238
-
264
+
239
265
  # Updates the VERSION constant in the main include file if it exists
240
266
  def update_version_constant(version)
241
- file_contents = File.read(main_include)
242
- if file_contents.sub!(/^(\s+VERSION\s*=\s*)[^\s].*$/) { $1 + version.to_s.inspect }
243
- File.open(main_include, 'w') { |f| f << file_contents }
244
- modified_files << main_include
245
- end
267
+ if main_include && File.exist?(main_include)
268
+ file_contents = File.read(main_include)
269
+ if file_contents.sub!(/^(\s+VERSION\s*=\s*)[^\s].*$/) { $1 + version.to_s.inspect }
270
+ File.open(main_include, 'w') { |f| f << file_contents }
271
+ modified_files << main_include
272
+ end
273
+ end
246
274
  end
247
-
275
+
248
276
  # Updates an attribute of the gemspec file.
249
277
  # This function will open the file, and search/replace the attribute using a regular expression.
250
278
  def update_gemspec(attribute, new_value, literal = false)
251
-
279
+
252
280
  unless literal
253
281
  new_value = case new_value
254
282
  when Array then "%w(#{new_value.join(' ')})"
255
283
  when Hash, String then new_value.inspect
256
- when Date then new_value.strftime('%Y-%m-%d').inspect
284
+ when Date then new_value.strftime('%Y-%m-%d').inspect
257
285
  else raise "Cannot write value #{new_value.inspect} to gemspec file!"
258
286
  end
259
287
  end
260
-
288
+
261
289
  spec = File.read(gemspec_file)
262
290
  regexp = Regexp.new('^(\s+\w+\.' + Regexp.quote(attribute.to_s) + '\s*=\s*)[^\s].*$')
263
291
  if spec.sub!(regexp) { $1 + new_value }
264
- File.open(gemspec_file, 'w') { |f| f << spec }
292
+ File.open(gemspec_file, 'w') { |f| f << spec }
265
293
  modified_files << gemspec_file
266
-
294
+
267
295
  # Reload the gemspec so the changes are incorporated
268
296
  load_gemspec!
269
297
  end
270
298
  end
271
-
299
+
300
+ # Updates the tasks file using the latest file found on Github
301
+ def update_tasks_task
302
+ require 'net/http'
303
+
304
+ server = 'github.com'
305
+ path = '/wvanbergen/github-gem/raw/master/tasks/github-gem.rake'
306
+
307
+ Net::HTTP.start(server) do |http|
308
+ response = http.get(path)
309
+ open(__FILE__, "w") { |file| file.write(response.body) }
310
+ end
311
+
312
+ relative_file = File.expand_path(__FILE__).sub(%r[^#{git.dir.path}/], '')
313
+ if git.status[relative_file] && git.status[relative_file].type == 'M'
314
+ git.add(relative_file)
315
+ git.commit("Updated to latest gem release management tasks.")
316
+ puts "Updated to latest version of gem release management tasks."
317
+ else
318
+ puts "Release managament tasks already are at the latest version."
319
+ end
320
+ end
321
+
272
322
  end
273
323
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wvanbergen-adyen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Willem van Bergen
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-09-03 00:00:00 -07:00
13
+ date: 2009-10-07 00:00:00 +02:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -33,7 +33,7 @@ dependencies:
33
33
  - !ruby/object:Gem::Version
34
34
  version: 1.1.0
35
35
  version:
36
- description: Package to simplify including the Adyen payments services into a Ruby on Rails application.
36
+ description: " Package to simplify including the Adyen payments services into a Ruby on Rails application.\n The package provides functionality to create payment forms, handling and storing notifications \n sent by Adyen and consuming the SOAP services provided by Adyen. Moreover, it contains helper\n methods, mocks and matchers to simpify writing tests/specsfor your code.\n"
37
37
  email:
38
38
  - willem@vanbergen.org
39
39
  - cicaboo@gmail.com
@@ -63,13 +63,14 @@ files:
63
63
  - lib/adyen/formatter.rb
64
64
  - lib/adyen.rb
65
65
  - lib/adyen/encoding.rb
66
- has_rdoc: false
67
- homepage: http://www.adyen.com
68
- licenses:
66
+ has_rdoc: true
67
+ homepage: http://wiki.github.com/wvanbergen/adyen
68
+ licenses: []
69
+
69
70
  post_install_message:
70
71
  rdoc_options:
71
72
  - --title
72
- - adyen
73
+ - wvanbergen-adyen
73
74
  - --main
74
75
  - README.rdoc
75
76
  - --line-numbers
@@ -88,13 +89,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
88
89
  - !ruby/object:Gem::Version
89
90
  version: "0"
90
91
  version:
91
- requirements: []
92
-
92
+ requirements:
93
+ - Handsoap is required for accessing the SOAP services. See http://github.com/troelskn/handsoap.
94
+ - LibXML is required for using the RSpec matchers.
95
+ - ActiveRecord is required for storing the notifications in your database.
93
96
  rubyforge_project:
94
97
  rubygems_version: 1.3.5
95
98
  signing_key:
96
- specification_version: 2
97
- summary: Integrate Adyen payment services in you Ruby on Rails application
99
+ specification_version: 3
100
+ summary: Integrate Adyen payment services in you Ruby on Rails application.
98
101
  test_files:
99
102
  - spec/soap_spec.rb
100
103
  - spec/notification_spec.rb