evoker 0.0.9 → 0.0.10

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.
@@ -0,0 +1,106 @@
1
+ require 'evoker'
2
+ require 'evoker/local_cache'
3
+
4
+ module Evoker
5
+ module FullStack
6
+ Context = Struct.new( :tarball_filename, :tarball_path, :tarball_extension,
7
+ :source_dir_basename, :source_dir,
8
+ :download, :unpack ) do
9
+ include Rake::DSL
10
+ def source_file(subpath)
11
+ File.join(self.source_dir, subpath)
12
+ end
13
+ end
14
+ end
15
+
16
+ smart_const(:build_path, 'build')
17
+ smart_const(:download_path, 'download')
18
+
19
+ module_function
20
+
21
+ # Download tarball from given URL and unpack it for build.
22
+ #
23
+ # A file from address `tarball_url` is downloaded (via
24
+ # {#cached_wget}) to directory specified in the `:download_path`
25
+ # smart constant, and then unpacked in directory specified in the
26
+ # `:build_path` smart constant.
27
+ #
28
+ # The block is called in context that defines following methods:
29
+ # - `tarball_filename`
30
+ # - `tarball_path`
31
+ # - `tarball_extension` (e.g. `".tar.gz"`)
32
+ # - `source_dir_basename`
33
+ # - `source_dir`
34
+ # - `download` (a Rake task that downloads the tarball)
35
+ # - `unpack` (a Rake task that unpacks the tarball).
36
+ #
37
+ # Block should define a task or chain of tasks, that compile (and
38
+ # possibly install, depending on needs) module contained in the
39
+ # tarball. First of the tasks should depend on `unpack`, and last
40
+ # should be returned from the block.
41
+ #
42
+ # Task named `task_name` that depends on the task returned from the
43
+ # block will be created.
44
+ #
45
+ # @example
46
+ # from_tarball :carbon, CARBON_URL do
47
+ # file installed('bin/carbon-aggregator.py') => [ PIP, :py2cairo ] do
48
+ # rm_f source_file('setup.cfg')
49
+ # pip_install source_dir
50
+ # end
51
+ # end
52
+ def from_tarball(task_name, tarball_url, args={}, &block)
53
+ task task_name
54
+
55
+ build_path = File.expand_path(smart_const_get(:build_path))
56
+ download_path = File.expand_path(smart_const_get(:download_path))
57
+
58
+ mkdir_p build_path unless Dir.exists?(build_path)
59
+ mkdir_p download_path unless Dir.exists?(download_path)
60
+
61
+ tarball_filename = args[:filename] || File.basename(tarball_url)
62
+ tarball_path = File.join(download_path, tarball_filename)
63
+ tarball_extension = args[:extension] ||
64
+ ( tarball_filename =~ /\.(tar(\.(Z|gz|bz2))?|zip)$/ ? $& : nil )
65
+ source_dir_basename = args[:directory] ||
66
+ File.basename(tarball_filename, tarball_extension)
67
+ source_dir = File.join(build_path, source_dir_basename)
68
+ unpack_command = args[:unpack] || {
69
+ '.tar.gz' => 'tar -xzf',
70
+ '.tar.bz2' => 'tar -xjf',
71
+ '.tar.Z' => 'tar -xzf',
72
+ '.tar' => 'tar -xf',
73
+ '.zip' => 'unzip' }[tarball_extension.downcase]
74
+
75
+ download = cached_wget(
76
+ tarball_url, args.merge(:output_file => tarball_path))
77
+
78
+ unpack = file source_dir => download do
79
+ chdir smart_const_get(:build_path) do
80
+ rm_rf source_dir_basename
81
+ sh "#{unpack_command} #{tarball_path}"
82
+ end
83
+ end
84
+
85
+ ctx = FullStack::Context.new(
86
+ tarball_filename, tarball_path, tarball_extension,
87
+ source_dir_basename, source_dir,
88
+ download, unpack)
89
+
90
+ final_file = ctx.instance_eval(&block)
91
+
92
+ task final_file => unpack
93
+ task task_name => final_file
94
+ end
95
+
96
+ def download(url, args={})
97
+ args[:output_file] ||= File.expand_path(File.join(
98
+ smart_const_get(:download_path),
99
+ args[:filename] || File.basename(url)))
100
+ cached_wget(url, args)
101
+ end
102
+
103
+ def dl(filename)
104
+ File.join(smart_const_get(:download_path), filename)
105
+ end
106
+ end
@@ -8,7 +8,7 @@ module Evoker
8
8
  MINOR = 0
9
9
 
10
10
  # Tiny version number
11
- TINY = 9
11
+ TINY = 10
12
12
 
13
13
  # Full version number as string
14
14
  STRING = [MAJOR, MINOR, TINY].join('.')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: evoker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-03 00:00:00.000000000Z
12
+ date: 2012-07-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &70142202183640 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,12 @@ dependencies:
21
21
  version: 0.9.2
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70142202183640
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 0.9.2
25
30
  description: ! 'Evoker is an add-on to Rake to download and manage project''s external
26
31
 
27
32
  dependencied, update them as needed, cache them, etc.
@@ -32,6 +37,7 @@ executables: []
32
37
  extensions: []
33
38
  extra_rdoc_files: []
34
39
  files:
40
+ - lib/evoker/fullstack.rb
35
41
  - lib/evoker/local_cache.rb
36
42
  - lib/evoker/python.rb
37
43
  - lib/evoker/s3cache.rb
@@ -59,7 +65,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
59
65
  version: 1.3.6
60
66
  requirements: []
61
67
  rubyforge_project:
62
- rubygems_version: 1.8.10
68
+ rubygems_version: 1.8.24
63
69
  signing_key:
64
70
  specification_version: 3
65
71
  summary: Rake add-on to download and manage project's external dependencies