clieop 0.1.4 → 0.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.
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
1
  clieop-*.gem
2
2
  .svn/
3
- .DS_Store
3
+ .DS_Store
4
+ /.bundle/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source :rubygems
2
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,28 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ clieop (0.1.4)
5
+
6
+ GEM
7
+ remote: http://rubygems.org/
8
+ specs:
9
+ ZenTest (4.4.1)
10
+ diff-lcs (1.1.2)
11
+ rake (0.8.7)
12
+ rspec (2.2.0)
13
+ rspec-core (~> 2.2)
14
+ rspec-expectations (~> 2.2)
15
+ rspec-mocks (~> 2.2)
16
+ rspec-core (2.2.1)
17
+ rspec-expectations (2.2.0)
18
+ diff-lcs (~> 1.1.2)
19
+ rspec-mocks (2.2.0)
20
+
21
+ PLATFORMS
22
+ ruby
23
+
24
+ DEPENDENCIES
25
+ ZenTest (~> 4.4)
26
+ clieop!
27
+ rake
28
+ rspec (~> 2.2)
data/README.rdoc CHANGED
@@ -20,7 +20,14 @@ http://www.ingbank.nl/ing/downloadables/eclieop1.pdf
20
20
 
21
21
  == Usage
22
22
 
23
- Run <tt>gem install clieop</tt> to install the gem.
23
+ Run <tt>gem install clieop</tt> to install the gem or add <tt>gem 'clieop'</tt> to
24
+ your project's Gemfile.
24
25
 
25
26
  See the project's wiki at http://wiki.github.com/wvanbergen/clieop for an example
26
27
  creating and writing a direct debt batch file.
28
+
29
+ == About
30
+
31
+ This library is released under the MIT license (see <tt>MIT-LICENSE</tt>) and was
32
+ originally written by Willem van Bergen. It is currently being maintained by
33
+ Leon Berenschot.
@@ -0,0 +1 @@
1
+ Autotest.add_discovery { "rspec2" }
data/clieop.gemspec CHANGED
@@ -3,8 +3,8 @@ Gem::Specification.new do |s|
3
3
 
4
4
  # Do not set version and date yourself, this will be done automatically
5
5
  # by the gem release script.
6
- s.version = "0.1.4"
7
- s.date = "2010-06-02"
6
+ s.version = "0.2.0"
7
+ s.date = "2010-12-09"
8
8
 
9
9
  s.summary = "A pure Ruby implementation to write CLIEOP files"
10
10
  s.description = "This library is a pure Ruby, MIT licensed implementation of the CLIEOP03 transaction format. CLIEOP03 can be used to communicate direct debt transactions with your (Dutch) bank."
@@ -13,8 +13,12 @@ Gem::Specification.new do |s|
13
13
  s.email = ['willem@vanbergen.org', 'LeipeLeon@gmail.com']
14
14
  s.homepage = 'http://github.com/wvanbergen/clieop/wikis'
15
15
 
16
+ s.add_development_dependency('rake')
17
+ s.add_development_dependency('rspec', '~> 2.2')
18
+ s.add_development_dependency('ZenTest', '~> 4.4')
19
+
16
20
  # Do not set files and test_files yourself, this will be done automatically
17
21
  # by the gem release script.
18
- s.files = %w(spec/spec_helper.rb spec/clieop/batch_spec.rb .gitignore lib/clieop/record.rb MIT-LICENSE doc/clieop03.pdf lib/clieop/file.rb lib/clieop/batch.rb lib/clieop.rb init.rb Rakefile clieop.gemspec README.rdoc tasks/github-gem.rake spec/clieop_spec.rb spec/clieop/record_spec.rb spec/clieop/file_spec.rb)
19
- s.test_files = %w(spec/clieop/batch_spec.rb spec/clieop_spec.rb spec/clieop/record_spec.rb spec/clieop/file_spec.rb)
22
+ s.files = %w(.gitignore .rspec Gemfile Gemfile.lock MIT-LICENSE README.rdoc Rakefile autotest/discover.rb clieop.gemspec doc/clieop03.pdf init.rb lib/clieop.rb lib/clieop/batch.rb lib/clieop/file.rb lib/clieop/record.rb spec/clieop/batch_spec.rb spec/clieop/file_spec.rb spec/clieop/record_spec.rb spec/clieop_spec.rb spec/spec_helper.rb tasks/github-gem.rake)
23
+ s.test_files = %w(spec/clieop/batch_spec.rb spec/clieop/file_spec.rb spec/clieop/record_spec.rb spec/clieop_spec.rb)
20
24
  end
data/lib/clieop.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'date'
2
2
 
3
3
  module Clieop
4
- VERSION = "0.1.4"
4
+ VERSION = "0.2.0"
5
5
  end
6
6
 
7
7
  require 'clieop/record.rb'
data/lib/clieop/batch.rb CHANGED
@@ -49,11 +49,10 @@ module Clieop
49
49
  @transactions.each do |tr|
50
50
 
51
51
  # prepare data for this transaction's records
52
- transaction_type = tr[:transaction_type] || (@batch_info[:transaction_group] == 10 ? 1002 : 0)
53
- to_account = @batch_info[:transaction_group] == 10 ? @batch_info[:account_nr] : tr[:account_nr]
54
- from_account = @batch_info[:transaction_group] == 10 ? tr[:account_nr] : @batch_info[:account_nr]
52
+ transaction_type = tr[:transaction_type] || (transaction_is_payment? ? 1002 : 0)
53
+ to_account = transaction_is_payment? ? @batch_info[:account_nr] : tr[:account_nr]
54
+ from_account = transaction_is_payment? ? tr[:account_nr] : @batch_info[:account_nr]
55
55
  amount_in_cents = (tr[:amount] * 100).round.to_i
56
- name_record = @batch_info[:transaction_group] == 10 ? :invoice_name : :payment_name
57
56
 
58
57
  # update checksums
59
58
  total_account += tr[:account_nr].to_i
@@ -65,7 +64,7 @@ module Clieop
65
64
  :to_account => to_account, :from_account => from_account).to_clieop
66
65
 
67
66
  # generate record with transaction information
68
- batch_data << Clieop::Record.new(name_record, :name => tr[:account_owner]).to_clieop
67
+ batch_data << Clieop::Record.new(:invoice_name, :name => tr[:account_owner]).to_clieop if transaction_is_payment?
69
68
  batch_data << Clieop::Record.new(:transaction_reference, :reference_number => tr[:reference_number]).to_clieop unless tr[:reference_number].nil?
70
69
 
71
70
  # split discription into lines and make a record for the first 4 lines
@@ -74,6 +73,8 @@ module Clieop
74
73
  batch_data << Clieop::Record.new(:transaction_description, :description => line.strip).to_s unless line == ''
75
74
  end
76
75
  end
76
+ batch_data << Clieop::Record.new(:payment_name, :name => tr[:account_owner]).to_clieop unless transaction_is_payment?
77
+
77
78
  end
78
79
 
79
80
  # generate batch footer record including some checks
@@ -104,5 +105,11 @@ module Clieop
104
105
  # total.to_s.chars.last(10).join('') # ruby 1.8.7
105
106
  end
106
107
 
108
+ private
109
+
110
+ def transaction_is_payment?
111
+ @batch_info[:transaction_group] == 10
112
+ end
113
+
107
114
  end
108
115
  end
data/lib/clieop/file.rb CHANGED
@@ -35,9 +35,9 @@ module Clieop
35
35
  end
36
36
 
37
37
  def save(filename)
38
- File.open(filename, 'w') do |f|
38
+ ::File.open(filename, 'w') do |f|
39
39
  f.write(self.to_clieop)
40
40
  end
41
41
  end
42
42
  end
43
- end
43
+ end
data/lib/clieop/record.rb CHANGED
@@ -57,11 +57,6 @@ module Clieop
57
57
  [:record_variant, :alpha, 1, 'B'],
58
58
  [:name, :alpha, 35],
59
59
  ],
60
- :payment_name =>[
61
- [:record_code, :numeric, 4, 170],
62
- [:record_variant, :alpha, 1, 'B'],
63
- [:name, :alpha, 35],
64
- ],
65
60
  :transaction_reference => [
66
61
  [:record_code, :numeric, 4, 150],
67
62
  [:record_variant, :alpha, 1, 'A'],
@@ -72,6 +67,11 @@ module Clieop
72
67
  [:record_variant, :alpha, 1, 'A'],
73
68
  [:description, :alpha, 32],
74
69
  ],
70
+ :payment_name =>[
71
+ [:record_code, :numeric, 4, 170],
72
+ [:record_variant, :alpha, 1, 'B'],
73
+ [:name, :alpha, 35],
74
+ ],
75
75
  }
76
76
 
77
77
  attr_accessor :definition, :data
@@ -83,8 +83,7 @@ module Clieop
83
83
  @definition = Clieop::Record::TYPE_DEFINITIONS[record_type.to_sym]
84
84
 
85
85
  # set default values according to definition
86
- @data = {}
87
- @definition.each { |field| @data[field[0]] = field[3] if field[3] }
86
+ @data = @definition.inject({}) { |memo, field| memo[field[0]] = field[3] if field[3] ; memo }
88
87
 
89
88
  # set values for all the provided data
90
89
  record_data.each { |field, value| @data[field] = value }
@@ -92,15 +91,15 @@ module Clieop
92
91
 
93
92
  def to_clieop
94
93
  line = ""
95
- #format each field
96
- @definition.each do |field|
94
+ # format each field
95
+ @definition.each do |field, type, length, content|
97
96
  fmt = '%'
98
- fmt << (field[1] == :numeric ? '0' : '-')
99
- fmt << (field[2].to_s)
100
- fmt << (field[1] == :numeric ? 'd' : 's')
101
- raw_data = (field[1] == :numeric) ? @data[field[0]].to_i : @data[field[0]]
97
+ fmt << (type == :numeric ? '0' : '-')
98
+ fmt << (length.to_s)
99
+ fmt << (type == :numeric ? 'd' : 's')
100
+ raw_data = (type == :numeric) ? @data[field].to_i : @data[field]
102
101
  value = sprintf(fmt, raw_data)
103
- line << (field[1] == :numeric ? value[0 - field[2], field[2]] : value[0, field[2]])
102
+ line << (type == :numeric ? value[0 - length, length] : value[0, length])
104
103
  end
105
104
  # fill each line with spaces up to 50 characters and close with a CR/LF
106
105
  line.ljust(50) + "\r\n"
@@ -4,8 +4,8 @@ describe Clieop::Batch do
4
4
 
5
5
  before(:all) do
6
6
  @batch_info = {
7
- :description => "Batch" ,
8
- :account_nr => 123456789,
7
+ :description => "Batch",
8
+ :account_nr => 123456789,
9
9
  :account_owner => "Reciever"
10
10
  }
11
11
  end
@@ -26,26 +26,84 @@ describe Clieop::Batch do
26
26
  batch.batch_info[:transaction_group].should eql(0)
27
27
  end
28
28
 
29
- it "should add transactions to batch" do
30
- batch = Clieop::Batch.invoice_batch(@batch_info.dup)
31
- batch << {
32
- :reference_number => "Factnr 100101",
33
- :account_nr => 123456789,
34
- :account_owner => 'Payee',
35
- :amount => 30102,
36
- :description => "Testing a CLIEOP direct debt transaction\nCharging your bank account",
37
- :transaction_type => 1001
38
- }
39
- batch.batch_info[:transaction_group].should eql(10)
40
- batch.to_clieop.should match(/0010B1001234567890001EUR /)
41
- batch.to_clieop.should match(/0020ABatch /)
42
- batch.to_clieop.should match(/0030B1000000Reciever P /)
43
- batch.to_clieop.should match(/0100A100100000301020001234567890123456789 /)
44
- batch.to_clieop.should match(/0110BPayee /)
45
- batch.to_clieop.should match(/0150AFactnr 100101 /)
46
- batch.to_clieop.should match(/0160ATesting a CLIEOP direct debt tra /)
47
- batch.to_clieop.should match(/0160ACharging your bank account /)
48
- batch.to_clieop.should match(/9990A00000000000301020002469135780000001 /)
29
+ describe "transactions" do
30
+
31
+ describe "Invoice" do
32
+
33
+ before do
34
+ @batch = Clieop::Batch.invoice_batch(@batch_info.dup)
35
+ @batch << {
36
+ :reference_number => "Factnr 100101",
37
+ :account_nr => 123456789,
38
+ :account_owner => 'Payee',
39
+ :amount => 30102,
40
+ :description => "Testing a CLIEOP direct debt transaction\nCharging your bank account",
41
+ :transaction_type => 1001
42
+ }
43
+ end
44
+
45
+ it "should add transactions to batch" do
46
+ @batch.batch_info[:transaction_group].should eql(10)
47
+ @batch.to_clieop.should match(/0010B1001234567890001EUR /)
48
+ @batch.to_clieop.should match(/0020ABatch /)
49
+ @batch.to_clieop.should match(/0030B1000000Reciever P /)
50
+ @batch.to_clieop.should match(/0100A100100000301020001234567890123456789 /)
51
+ @batch.to_clieop.should match(/0110BPayee /)
52
+ @batch.to_clieop.should match(/0150AFactnr 100101 /)
53
+ @batch.to_clieop.should match(/0160ATesting a CLIEOP direct debt tra /)
54
+ @batch.to_clieop.should match(/0160ACharging your bank account /)
55
+ @batch.to_clieop.should match(/9990A00000000000301020002469135780000001 /)
56
+ end
57
+
58
+ it "should appear in proper order" do
59
+ last_record_code = 0
60
+ @batch.to_clieop.split("\n").each do |line|
61
+ line =~ /^(\d{4})[AB]/
62
+ $1.to_i.should >= last_record_code
63
+ last_record_code = $1.to_i
64
+ end
65
+ end
66
+
67
+ end
68
+
69
+ describe "Payment" do
70
+
71
+ before do
72
+ @batch = Clieop::Batch.payment_batch(@batch_info.dup)
73
+ @batch << {
74
+ :reference_number => "Factnr 100101",
75
+ :account_nr => 123456789,
76
+ :account_owner => 'Payee',
77
+ :amount => 30102,
78
+ :description => "Testing a CLIEOP direct credit transaction\nPaying your bank account",
79
+ :transaction_type => 1001
80
+ }
81
+ end
82
+
83
+ it "should add transactions to batch" do
84
+ @batch.batch_info[:transaction_group].should eql(0)
85
+ @batch.to_clieop.should match(/0010B0001234567890001EUR /)
86
+ @batch.to_clieop.should match(/0020ABatch /)
87
+ @batch.to_clieop.should match(/0030B1000000Reciever P /)
88
+ @batch.to_clieop.should match(/0100A100100000301020001234567890123456789 /)
89
+ @batch.to_clieop.should match(/0150AFactnr 100101 /)
90
+ @batch.to_clieop.should match(/0160ATesting a CLIEOP direct credit t /)
91
+ @batch.to_clieop.should match(/0160APaying your bank account /)
92
+ @batch.to_clieop.should match(/0170BPayee /)
93
+ @batch.to_clieop.should match(/9990A00000000000301020002469135780000001 /)
94
+ end
95
+
96
+ it "should appear in proper order" do
97
+ last_record_code = 0
98
+ @batch.to_clieop.split("\n").each do |line|
99
+ line =~ /^(\d{4})[AB]/
100
+ $1.to_i.should >= last_record_code
101
+ last_record_code = $1.to_i
102
+ end
103
+ end
104
+
105
+ end
106
+
49
107
  end
50
108
 
51
109
  end
@@ -1,5 +1,16 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Clieop::File do
4
-
4
+
5
+ context "#save" do
6
+
7
+ it "should create 'filename' and put the CLIEOP data in it" do
8
+ file = mock('file')
9
+ File.should_receive(:open).with("filename", "w").and_yield(file)
10
+ file.should_receive(:write).with("0001A091210CLIEOP03 1 \r\n9999A \r\n")
11
+ subject.save('filename')
12
+ end
13
+
14
+ end
15
+
5
16
  end
data/spec/spec_helper.rb CHANGED
@@ -1,10 +1,7 @@
1
1
  require 'rubygems'
2
- require 'spec/autorun'
3
- require 'clieop'
2
+ require 'bundler'
3
+ Bundler.require(:default, :development)
4
4
 
5
- Dir[File.expand_path(File.join(File.dirname(__FILE__),'support','**','*.rb'))].each {|f| require f }
6
-
7
- Spec::Runner.configure do |config|
5
+ RSpec.configure do |config|
8
6
 
9
7
  end
10
-
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'rake'
3
3
  require 'rake/tasklib'
4
4
  require 'date'
5
- require 'git'
5
+ require 'set'
6
6
 
7
7
  module GithubGem
8
8
 
@@ -24,7 +24,7 @@ module GithubGem
24
24
 
25
25
  class RakeTasks
26
26
 
27
- attr_reader :gemspec, :modified_files, :git
27
+ attr_reader :gemspec, :modified_files
28
28
  attr_accessor :gemspec_file, :task_namespace, :main_include, :root_dir, :spec_pattern, :test_pattern, :remote, :remote_branch, :local_branch
29
29
 
30
30
  # Initializes the settings, yields itself for configuration
@@ -33,7 +33,7 @@ module GithubGem
33
33
  @gemspec_file = GithubGem.detect_gemspec_file
34
34
  @task_namespace = task_namespace
35
35
  @main_include = GithubGem.detect_main_include
36
- @modified_files = []
36
+ @modified_files = Set.new
37
37
  @root_dir = Dir.pwd
38
38
  @test_pattern = 'test/**/*_test.rb'
39
39
  @spec_pattern = 'spec/**/*_spec.rb'
@@ -43,13 +43,16 @@ module GithubGem
43
43
 
44
44
  yield(self) if block_given?
45
45
 
46
- @git = Git.open(@root_dir)
47
46
  load_gemspec!
48
47
  define_tasks!
49
48
  end
50
49
 
51
50
  protected
52
51
 
52
+ def git
53
+ @git ||= ENV['GIT'] || 'git'
54
+ end
55
+
53
56
  # Define Unit test tasks
54
57
  def define_test_tasks!
55
58
  require 'rake/testtask'
@@ -68,23 +71,23 @@ module GithubGem
68
71
 
69
72
  # Defines RSpec tasks
70
73
  def define_rspec_tasks!
71
- require 'spec/rake/spectask'
74
+ require 'rspec/core/rake_task'
72
75
 
73
76
  namespace(:spec) do
74
77
  desc "Verify all RSpec examples for #{gemspec.name}"
75
- Spec::Rake::SpecTask.new(:basic) do |t|
76
- t.spec_files = FileList[spec_pattern]
78
+ RSpec::Core::RakeTask.new(:basic) do |t|
79
+ t.pattern = spec_pattern
77
80
  end
78
81
 
79
82
  desc "Verify all RSpec examples for #{gemspec.name} and output specdoc"
80
- Spec::Rake::SpecTask.new(:specdoc) do |t|
81
- t.spec_files = FileList[spec_pattern]
82
- t.spec_opts << '--format' << 'specdoc' << '--color'
83
+ RSpec::Core::RakeTask.new(:specdoc) do |t|
84
+ t.pattern = spec_pattern
85
+ t.rspec_opts = ['--format', 'documentation', '--color']
83
86
  end
84
87
 
85
88
  desc "Run RCov on specs for #{gemspec.name}"
86
- Spec::Rake::SpecTask.new(:rcov) do |t|
87
- t.spec_files = FileList[spec_pattern]
89
+ RSpec::Core::RakeTask.new(:rcov) do |t|
90
+ t.pattern = spec_pattern
88
91
  t.rcov = true
89
92
  t.rcov_opts = ['--exclude', '"spec/*,gems/*"', '--rails']
90
93
  end
@@ -119,23 +122,43 @@ module GithubGem
119
122
  checks = [:check_current_branch, :check_clean_status, :check_not_diverged, :check_version]
120
123
  checks.unshift('spec:basic') if has_specs?
121
124
  checks.unshift('test:basic') if has_tests?
122
- checks.push << [:check_rubyforge] if gemspec.rubyforge_project
125
+ # checks.push << [:check_rubyforge] if gemspec.rubyforge_project
123
126
 
124
127
  desc "Perform all checks that would occur before a release"
125
128
  task(:release_checks => checks)
126
129
 
127
- release_tasks = [:release_checks, :set_version, :build, :github_release]
128
- release_tasks << [:rubyforge_release] if gemspec.rubyforge_project
130
+ release_tasks = [:release_checks, :set_version, :build, :github_release, :gemcutter_release]
131
+ # release_tasks << [:rubyforge_release] if gemspec.rubyforge_project
129
132
 
130
- desc "Release a new verison of the gem"
133
+ desc "Release a new version of the gem using the VERSION environment variable"
131
134
  task(:release => release_tasks) { release_task }
135
+
136
+ namespace(:release) do
137
+ desc "Release the next version of the gem, by incrementing the last version segment by 1"
138
+ task(:next => [:next_version] + release_tasks) { release_task }
139
+
140
+ desc "Release the next version of the gem, using a patch increment (0.0.1)"
141
+ task(:patch => [:next_patch_version] + release_tasks) { release_task }
142
+
143
+ desc "Release the next version of the gem, using a minor increment (0.1.0)"
144
+ task(:minor => [:next_minor_version] + release_tasks) { release_task }
132
145
 
133
- task(:check_rubyforge) { check_rubyforge_task }
134
- task(:rubyforge_release) { rubyforge_release_task }
146
+ desc "Release the next version of the gem, using a major increment (1.0.0)"
147
+ task(:major => [:next_major_version] + release_tasks) { release_task }
148
+ end
149
+
150
+ # task(:check_rubyforge) { check_rubyforge_task }
151
+ # task(:rubyforge_release) { rubyforge_release_task }
152
+ task(:gemcutter_release) { gemcutter_release_task }
135
153
  task(:github_release => [:commit_modified_files, :tag_version]) { github_release_task }
136
154
  task(:tag_version) { tag_version_task }
137
155
  task(:commit_modified_files) { commit_modified_files_task }
138
156
 
157
+ task(:next_version) { next_version_task }
158
+ task(:next_patch_version) { next_version_task(:patch) }
159
+ task(:next_minor_version) { next_version_task(:minor) }
160
+ task(:next_major_version) { next_version_task(:major) }
161
+
139
162
  desc "Updates the gem release tasks with the latest version on Github"
140
163
  task(:update_tasks) { update_tasks_task }
141
164
  end
@@ -145,7 +168,7 @@ module GithubGem
145
168
  # in the repository and the spec/test file pattern.
146
169
  def manifest_task
147
170
  # Load all the gem's files using "git ls-files"
148
- repository_files = git.ls_files.keys
171
+ repository_files = `#{git} ls-files`.split("\n")
149
172
  test_files = Dir[test_pattern] + Dir[spec_pattern]
150
173
 
151
174
  update_gemspec(:files, repository_files)
@@ -159,6 +182,32 @@ module GithubGem
159
182
  sh "mv #{gemspec.name}-#{gemspec.version}.gem pkg/#{gemspec.name}-#{gemspec.version}.gem"
160
183
  end
161
184
 
185
+ def newest_version
186
+ `#{git} tag`.split("\n").map { |tag| tag.split('-').last }.compact.map { |v| Gem::Version.new(v) }.max || Gem::Version.new('0.0.0')
187
+ end
188
+
189
+ def next_version(increment = nil)
190
+ next_version = newest_version.segments
191
+ increment_index = case increment
192
+ when :micro then 3
193
+ when :patch then 2
194
+ when :minor then 1
195
+ when :major then 0
196
+ else next_version.length - 1
197
+ end
198
+
199
+ next_version[increment_index] ||= 0
200
+ next_version[increment_index] = next_version[increment_index].succ
201
+ ((increment_index + 1)...next_version.length).each { |i| next_version[i] = 0 }
202
+
203
+ Gem::Version.new(next_version.join('.'))
204
+ end
205
+
206
+ def next_version_task(increment = nil)
207
+ ENV['VERSION'] = next_version(increment).version
208
+ puts "Releasing version #{ENV['VERSION']}..."
209
+ end
210
+
162
211
  # Updates the version number in the gemspec file, the VERSION constant in the main
163
212
  # include file and the contents of the VERSION file.
164
213
  def version_task
@@ -171,70 +220,58 @@ module GithubGem
171
220
 
172
221
  def check_version_task
173
222
  raise "#{ENV['VERSION']} is not a valid version number!" if ENV['VERSION'] && !Gem::Version.correct?(ENV['VERSION'])
174
- proposed_version = Gem::Version.new(ENV['VERSION'] || gemspec.version)
175
- # Loads the latest version number using the created tags
176
- newest_version = git.tags.map { |tag| tag.name.split('-').last }.compact.map { |v| Gem::Version.new(v) }.max
177
- raise "This version (#{proposed_version}) is not higher than the highest tagged version (#{newest_version})" if newest_version && newest_version >= proposed_version
223
+ proposed_version = Gem::Version.new(ENV['VERSION'].dup || gemspec.version)
224
+ raise "This version (#{proposed_version}) is not higher than the highest tagged version (#{newest_version})" if newest_version >= proposed_version
178
225
  end
179
226
 
180
227
  # Checks whether the current branch is not diverged from the remote branch
181
228
  def check_not_diverged_task
182
- raise "The current branch is diverged from the remote branch!" if git.log.between('HEAD', git.remote(remote).branch(remote_branch).gcommit).any?
229
+ raise "The current branch is diverged from the remote branch!" if `#{git} rev-list HEAD..#{remote}/#{remote_branch}`.split("\n").any?
183
230
  end
184
231
 
185
232
  # Checks whether the repository status ic clean
186
233
  def check_clean_status_task
187
- raise "The current working copy contains modifications" if git.status.changed.any?
234
+ raise "The current working copy contains modifications" if `#{git} ls-files -m`.split("\n").any?
188
235
  end
189
236
 
190
237
  # Checks whether the current branch is correct
191
238
  def check_current_branch_task
192
- raise "Currently not on #{local_branch} branch!" unless git.branch.name == local_branch.to_s
239
+ raise "Currently not on #{local_branch} branch!" unless `#{git} branch`.split("\n").detect { |b| /^\* / =~ b } == "* #{local_branch}"
193
240
  end
194
241
 
195
242
  # Fetches the latest updates from Github
196
243
  def fetch_origin_task
197
- git.fetch('origin')
244
+ sh git, 'fetch', remote
198
245
  end
199
246
 
200
247
  # Commits every file that has been changed by the release task.
201
248
  def commit_modified_files_task
202
- if modified_files.any?
203
- modified_files.each { |file| git.add(file) }
204
- git.commit("Released #{gemspec.name} gem version #{gemspec.version}")
249
+ really_modified = `#{git} ls-files -m #{modified_files.entries.join(' ')}`.split("\n")
250
+ if really_modified.any?
251
+ really_modified.each { |file| sh git, 'add', file }
252
+ sh git, 'commit', '-m', "Released #{gemspec.name} gem version #{gemspec.version}."
205
253
  end
206
254
  end
207
255
 
208
256
  # Adds a tag for the released version
209
257
  def tag_version_task
210
- git.add_tag("#{gemspec.name}-#{gemspec.version}")
258
+ sh git, 'tag', '-a', "#{gemspec.name}-#{gemspec.version}", '-m', "Released #{gemspec.name} gem version #{gemspec.version}."
211
259
  end
212
260
 
213
261
  # Pushes the changes and tag to github
214
262
  def github_release_task
215
- git.push(remote, remote_branch, true)
216
- end
217
-
218
- # Checks whether Rubyforge is configured properly
219
- def check_rubyforge_task
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?
222
- output = `rubyforge names`.split("\n")
223
- raise "Rubyforge group not found!" unless output.any? { |line| %r[^groups\s*\:.*\b#{Regexp.quote(gemspec.rubyforge_project)}\b.*] =~ line }
224
- raise "Rubyforge package not found!" unless output.any? { |line| %r[^packages\s*\:.*\b#{Regexp.quote(gemspec.name)}\b.*] =~ line }
263
+ sh git, 'push', '--tags', remote, remote_branch
225
264
  end
226
265
 
227
- # Task to release the .gem file toRubyforge.
228
- def rubyforge_release_task
229
- sh 'rubyforge', 'add_release', gemspec.rubyforge_project, gemspec.name, gemspec.version.to_s, "pkg/#{gemspec.name}-#{gemspec.version}.gem"
266
+ def gemcutter_release_task
267
+ sh "gem", 'push', "pkg/#{gemspec.name}-#{gemspec.version}.gem"
230
268
  end
231
269
 
232
270
  # Gem release task.
233
271
  # All work is done by the task's dependencies, so just display a release completed message.
234
272
  def release_task
235
273
  puts
236
- puts '------------------------------------------------------------'
237
- puts "Released #{gemspec.name} version #{gemspec.version}"
274
+ puts "Release successful."
238
275
  end
239
276
 
240
277
  private
@@ -294,6 +331,9 @@ module GithubGem
294
331
 
295
332
  # Reload the gemspec so the changes are incorporated
296
333
  load_gemspec!
334
+
335
+ # Also mark the Gemfile.lock file as changed because of the new version.
336
+ modified_files << 'Gemfile.lock' if File.exist?(File.join(root_dir, 'Gemfile.lock'))
297
337
  end
298
338
  end
299
339
 
@@ -309,15 +349,13 @@ module GithubGem
309
349
  open(__FILE__, "w") { |file| file.write(response.body) }
310
350
  end
311
351
 
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."
352
+ relative_file = File.expand_path(__FILE__).sub(%r[^#{@root_dir}/], '')
353
+ if `#{git} ls-files -m #{relative_file}`.split("\n").any?
354
+ sh git, 'add', relative_file
355
+ sh git, 'commit', '-m', "Updated to latest gem release management tasks."
317
356
  else
318
357
  puts "Release managament tasks already are at the latest version."
319
358
  end
320
359
  end
321
-
322
360
  end
323
361
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clieop
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 4
10
- version: 0.1.4
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Willem van Bergen
@@ -16,10 +16,53 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2010-06-02 00:00:00 +02:00
19
+ date: 2010-12-09 00:00:00 +01:00
20
20
  default_executable:
21
- dependencies: []
22
-
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ name: rake
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ hash: 3
31
+ segments:
32
+ - 0
33
+ version: "0"
34
+ type: :development
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: rspec
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ hash: 7
45
+ segments:
46
+ - 2
47
+ - 2
48
+ version: "2.2"
49
+ type: :development
50
+ version_requirements: *id002
51
+ - !ruby/object:Gem::Dependency
52
+ name: ZenTest
53
+ prerelease: false
54
+ requirement: &id003 !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ~>
58
+ - !ruby/object:Gem::Version
59
+ hash: 19
60
+ segments:
61
+ - 4
62
+ - 4
63
+ version: "4.4"
64
+ type: :development
65
+ version_requirements: *id003
23
66
  description: This library is a pure Ruby, MIT licensed implementation of the CLIEOP03 transaction format. CLIEOP03 can be used to communicate direct debt transactions with your (Dutch) bank.
24
67
  email:
25
68
  - willem@vanbergen.org
@@ -31,23 +74,27 @@ extensions: []
31
74
  extra_rdoc_files: []
32
75
 
33
76
  files:
34
- - spec/spec_helper.rb
35
- - spec/clieop/batch_spec.rb
36
77
  - .gitignore
37
- - lib/clieop/record.rb
78
+ - .rspec
79
+ - Gemfile
80
+ - Gemfile.lock
38
81
  - MIT-LICENSE
39
- - doc/clieop03.pdf
40
- - lib/clieop/file.rb
41
- - lib/clieop/batch.rb
42
- - lib/clieop.rb
43
- - init.rb
82
+ - README.rdoc
44
83
  - Rakefile
84
+ - autotest/discover.rb
45
85
  - clieop.gemspec
46
- - README.rdoc
47
- - tasks/github-gem.rake
48
- - spec/clieop_spec.rb
49
- - spec/clieop/record_spec.rb
86
+ - doc/clieop03.pdf
87
+ - init.rb
88
+ - lib/clieop.rb
89
+ - lib/clieop/batch.rb
90
+ - lib/clieop/file.rb
91
+ - lib/clieop/record.rb
92
+ - spec/clieop/batch_spec.rb
50
93
  - spec/clieop/file_spec.rb
94
+ - spec/clieop/record_spec.rb
95
+ - spec/clieop_spec.rb
96
+ - spec/spec_helper.rb
97
+ - tasks/github-gem.rake
51
98
  has_rdoc: true
52
99
  homepage: http://github.com/wvanbergen/clieop/wikis
53
100
  licenses: []
@@ -84,6 +131,6 @@ specification_version: 3
84
131
  summary: A pure Ruby implementation to write CLIEOP files
85
132
  test_files:
86
133
  - spec/clieop/batch_spec.rb
87
- - spec/clieop_spec.rb
88
- - spec/clieop/record_spec.rb
89
134
  - spec/clieop/file_spec.rb
135
+ - spec/clieop/record_spec.rb
136
+ - spec/clieop_spec.rb