ruby_ext 0.4.13 → 0.4.14

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/Rakefile +2 -1
  2. data/lib/rake_ext/project.rb +57 -29
  3. data/lib/rake_ext.rb +11 -12
  4. metadata +2 -2
data/Rakefile CHANGED
@@ -5,7 +5,8 @@ require 'rake_ext'
5
5
 
6
6
  project(
7
7
  name: "ruby_ext",
8
- version: "0.4.13",
8
+ gem: true,
9
+ # version: "0.4.13",
9
10
  summary: "Ruby Extensions",
10
11
 
11
12
  author: "Alexey Petrushin",
@@ -58,46 +58,74 @@ require 'rake/clean'
58
58
  require 'rake/gempackagetask'
59
59
  require 'tmpdir'
60
60
 
61
- namespace :gem do
62
- spec = Gem::Specification.new do |s|
63
- gems, fake_gems = parse_project_gemfile
64
- gems = gems + fake_gems
61
+ class GemHelper
62
+ class << self
63
+ def next_version gem_name
64
+ %x(gem list --remote #{gem_name}).scan /#{gem_name} \((\d+\.\d+\.\d+)\)/ do |s|
65
+ v = s.first.split('.').collect{|d| d.to_i}
66
+ v[-1] = v[-1] + 1
67
+ return v.join('.')
68
+ end
69
+ return '0.0.1'
70
+ end
65
71
 
66
- gems.each{|name_version| s.add_dependency *name_version}
72
+ def prepare_gem_metadata
73
+ spec = Gem::Specification.new do |s|
74
+ gems, fake_gems = parse_project_gemfile
75
+ gems = gems + fake_gems
67
76
 
68
- options = project.clone
77
+ gems.each{|name_version| s.add_dependency *name_version}
69
78
 
70
- options.delete(:name)
71
- s.name = options.delete(:official_name)
72
- s.platform = options.delete(:platform) || Gem::Platform::RUBY
73
- s.has_rdoc = options.delete(:has_rdoc) == nil ? false : true
74
- s.require_path = options.delete(:lib) || "lib"
75
- s.files = options.delete(:files) || (%w{Rakefile readme.md} + Dir.glob("{lib,spec}/**/*"))
76
- s.bindir = options.delete(:bin) if options.include? :bin
79
+ options = project.clone
77
80
 
78
- # s.name = options[:name)
79
- # s.author = options[:author)
80
- # s.homepage = options[:homepage)
81
+ options.delete(:name)
82
+ options.delete(:gem) || raise("this project isn't a gem!")
83
+ name = options.delete(:official_name)
81
84
 
82
- options.each{|k, v| s.send "#{k}=", v}
83
- end
85
+ s.name = name
86
+ s.platform = options.delete(:platform) || Gem::Platform::RUBY
87
+ s.has_rdoc = options.delete(:has_rdoc) == nil ? false : true
88
+ s.require_path = options.delete(:lib) || "lib"
89
+ s.files = options.delete(:files) || (%w{Rakefile readme.md} + Dir.glob("{lib,spec}/**/*"))
90
+ s.bindir = options.delete(:bin) if options.include? :bin
91
+
92
+ s.version = options.delete(:version) || GemHelper.next_version(name)
93
+
94
+ # s.name = options[:name)
95
+ # s.author = options[:author)
96
+ # s.homepage = options[:homepage)
97
+
98
+ options.each{|k, v| s.send "#{k}=", v}
99
+ end
84
100
 
85
- package_dir = Dir.tmpdir + "/#{project[:official_name]}_tmp"
86
- Rake::GemPackageTask.new(spec) do |p|
87
- p.need_tar = true if RUBY_PLATFORM !~ /mswin/
88
- p.need_zip = true
89
- p.package_dir = package_dir
101
+ Rake::GemPackageTask.new(spec) do |p|
102
+ p.need_tar = true if RUBY_PLATFORM !~ /mswin/
103
+ p.need_zip = true
104
+ p.package_dir = package_dir
105
+ end
106
+ end
107
+
108
+ def package_dir
109
+ Dir.tmpdir + "/#{project[:official_name]}_tmp"
110
+ end
90
111
  end
112
+ end
91
113
 
92
- task :push do
93
- gem_file = Dir.glob("#{package_dir}/#{project[:official_name]}*.gem").first
114
+ namespace :gem do
115
+ task :ensure_gem do
116
+ GemHelper.prepare_gem_metadata
117
+ end
118
+
119
+ task push: :ensure_gem do
120
+ gem_file = Dir.glob("#{GemHelper.package_dir}/#{project[:official_name]}*.gem").first
94
121
  system "gem push #{gem_file}"
95
122
  end
96
123
 
97
- task :clean do
98
- system "rm -r #{package_dir}"
124
+ task clean: :ensure_gem do
125
+ GemHelper.prepare_gem_metadata
126
+ system "rm -r #{GemHelper.package_dir}"
99
127
  end
100
128
 
101
- desc "Build and publish project as gem"
102
- task release: [:gem, :push, :clean]
129
+ desc "Build and publish project as gem"
130
+ task release: [:ensure_gem, :gem, :push, :clean]
103
131
  end
data/lib/rake_ext.rb CHANGED
@@ -26,8 +26,7 @@ begin
26
26
  t.pattern = "spec/**/[^_]*_spec.rb"
27
27
  end
28
28
 
29
- namespace :spec do
30
-
29
+ namespace :spec do
31
30
  desc "Run RSpec code exapmples in isolated mode (every spec file in another Ruby process)"
32
31
  task :isolated do
33
32
  Dir.glob("spec/[^_]**/[^_]*_spec.rb").each do |spec_file|
@@ -44,12 +43,12 @@ end
44
43
  #
45
44
  # project_dir
46
45
  #
47
- PROJECT_DIR = (
46
+ $_project_dir = (
48
47
  caller.find{|line| line =~ /\/Rakefile\:/} ||
49
48
  raise("You can include the 'rake_ext' only in Rakefile!")
50
49
  ).sub(/\/Rakefile\:.*/, '')
51
50
  def project_dir
52
- PROJECT_DIR
51
+ $_project_dir
53
52
  end
54
53
 
55
54
 
@@ -57,14 +56,14 @@ end
57
56
  # before, after and remove task
58
57
  #
59
58
  def before task_name, &block
60
- @task_counter ||= {}
61
- counter = (@task_counter[task_name] ||= 0)
59
+ $_task_counter ||= {}
60
+ counter = ($_task_counter[task_name] ||= 0)
62
61
  before_task_name = "#{task_name}_before_#{counter}"
63
62
 
64
63
  task before_task_name, &block
65
64
  task task_name => before_task_name
66
65
 
67
- @task_counter[task_name] += 1
66
+ $_task_counter[task_name] += 1
68
67
  end
69
68
 
70
69
  def after task_name, &block
@@ -82,13 +81,13 @@ alias :delete_task :remove_task
82
81
  #
83
82
  def project options = nil
84
83
  if options
85
- @options = {}
86
- options.each{|k, v| @options[k.to_sym] = v}
84
+ $_project = {}
85
+ options.each{|k, v| $_project[k.to_sym] = v}
87
86
 
88
- @options[:name] || raise("project name not defined")
89
- @options[:official_name] ||= @options[:name]
87
+ $_project[:name] || raise("project name not defined")
88
+ $_project[:official_name] ||= $_project[:name]
90
89
 
91
90
  require 'rake_ext/project'
92
91
  end
93
- @options || raise("project not defined!")
92
+ $_project || raise("project not defined!")
94
93
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_ext
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.13
4
+ version: 0.4.14
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-07-02 00:00:00.000000000 +04:00
12
+ date: 2011-07-04 00:00:00.000000000 +04:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
  description: