ruby_make_script 0.1.2 → 0.1.7

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0171e2fb10189478f687f01feb44132408301988be79d0852efe7856c37f94b8
4
- data.tar.gz: 67ba7ca235ef940ca020faafa1847e707d3f13e0eef66b488827140897179240
3
+ metadata.gz: 200ba58b3736310403ce67c88d2d802498c34fa560432760cfd7525e9c4ad44d
4
+ data.tar.gz: 3f4843b9dbc4c10d98f11358f4219abbef5780acc223e91439a1bc33caa61237
5
5
  SHA512:
6
- metadata.gz: b71e96ea7fc47a829cdb421a8a2974f4dc114464f5fad3b289836e5586c6fa9edde9712749f0d59a7fe5abfcf31fbffa20570cd2df9a16bed6d01d4b5379a24d
7
- data.tar.gz: 240fcd948e01923a941b92825048ebb94aa6006a973e9ba8e4e2a86b449efc4aebcccb1777b35030414df57aec68547d1d64eb3d590ece02079439d42b1a9d96
6
+ metadata.gz: a75146d567c82c901802a52d5b5de733db593f00907ffde817d1f14dc93a763513119c597555cdff3dd68a127c4a7fdedb60fc34f38d2ffc3b747a69015a2e71
7
+ data.tar.gz: f2f0948c8f5ac4a02d9292cb4ede85a476dd9bccfe93516a28b82a9a61db21e95078cd544386bf8fe9f75e4074d523a0fa60d26cd694859636d2aeff5e6580b2
data/.gitignore CHANGED
@@ -6,3 +6,4 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ .make_script.yaml
@@ -15,6 +15,10 @@
15
15
  #
16
16
  #
17
17
 
18
+ if !system('gem list | grep pastel > /dev/null')
19
+ puts "pastel not install automaticly, please 'gem install pastel'"
20
+ end
21
+
18
22
  require 'pastel'
19
23
  require 'yaml'
20
24
 
@@ -35,7 +39,7 @@ require 'ruby_make_script/target'
35
39
 
36
40
  # check a file (recursively) and run the commands of the target.
37
41
  def resolve(file, force_exec=false)
38
- if file_modified?(file) || force_exec
42
+ if force_exec || file_modified?(file)
39
43
  t = $file_target_dict[file]
40
44
  # when t == nil, its a file not used for target
41
45
  if t != nil
@@ -108,7 +112,7 @@ class Symbol
108
112
  # end
109
113
  # ```
110
114
  def then
111
- from()
115
+ PhonyTarget.new(String(self)).from() { yield }
112
116
  end
113
117
  end
114
118
 
@@ -158,23 +162,65 @@ def make
158
162
  $file_time_dict = YAML.load(File.read('./.make_script.yaml'))
159
163
  $cur_file_time_dict = $file_time_dict.clone()
160
164
  end
161
- puts Pastel.new.green.bold("ruby_make_script> ") + "start"
165
+ puts Pastel.new.bright_cyan("make> ") + "start"
166
+
162
167
  begin
163
- if ARGV.length <= 1
168
+ if ARGV.length == 0
164
169
  $targetlist[0].resolve_all
165
170
  else
166
- resolve(ARGV[1], force_exec=true)
171
+ p ARGV[0]
172
+ resolve(ARGV[0], true)
167
173
  end
168
174
 
169
175
  rescue StandardError => e
170
- puts Pastel.new.red.bold("ruby_make_script failed> ") + e.message
176
+ puts Pastel.new.red.bold("make failed> ") + e.message
171
177
  if e.message != "make command failed"
172
178
  puts e.backtrace
173
179
  end
174
180
  else
175
- puts Pastel.new.green.bold("ruby_make_script> ") + "completed"
181
+ puts Pastel.new.bright_cyan("make> ") + "completed"
182
+ end
183
+ if !File.exist?('./.make_script.yaml')
184
+ File.open('.gitignore', 'a') do |f|
185
+ f << "\n.make_script.yaml\n"
186
+ end
176
187
  end
177
-
178
188
  File.open('./.make_script.yaml', 'w') { |f| f.write(YAML.dump($cur_file_time_dict)) }
189
+ end
179
190
 
191
+ def dump_md(filename, thisfile="make.rb")
192
+ puts Pastel.new.bright_cyan("make> ") + "dumping markdown file #{filename}"
193
+ File.open(filename, 'w') do |f|
194
+ f.puts "# #{thisfile} Documentation"
195
+ f.puts ""
196
+ if block_given?
197
+ yield f
198
+ f.puts ""
199
+ end
200
+ f.puts "## Usage"
201
+ f.puts ""
202
+ f.puts "Please install ruby and some package first:"
203
+ f.puts ""
204
+ f.puts "```sh"
205
+ f.puts "$ apt instal ruby"
206
+ f.puts "$ gem instal pastel ruby_make_script"
207
+ f.puts "```"
208
+ f.puts ""
209
+ f.puts "then you can run these command below."
210
+ $targetlist.each { |t|
211
+ if t.class == PhonyTarget
212
+ args = t.doc.arglist.map{ |a| a[0] }.join(' ')
213
+ f.puts "### `./#{thisfile} #{t.target} #{args}`"
214
+ f.puts ""
215
+ f.puts "#{t.doc.descr}"
216
+ f.puts ""
217
+ t.doc.arglist.each { |a|
218
+ f.puts "* `#{a[0]}` : #{a[1]}"
219
+ }
220
+ if t.doc.arglist != []
221
+ f.puts ""
222
+ end
223
+ end
224
+ }
225
+ end
180
226
  end
@@ -0,0 +1,42 @@
1
+
2
+ class TargetDoc
3
+ attr_accessor :arglist
4
+ attr_accessor :descr
5
+ attr_accessor :name
6
+
7
+ def initialize()
8
+ @arglist = []
9
+ @descr = ""
10
+ @name = ""
11
+ end
12
+ def set_name(name)
13
+ @name = name
14
+ end
15
+
16
+ def add_arg(name, doc)
17
+ @arglist += [[name, doc]]
18
+ end
19
+
20
+ def add_descr(str)
21
+ @descr += str + "\n"
22
+ end
23
+
24
+ def empty?()
25
+ @arglist == [] || @descr == ""
26
+ end
27
+
28
+ def form_str()
29
+ [@name, *@arglist].join(" ")
30
+ end
31
+ end
32
+
33
+ $targetdoc = TargetDoc.new
34
+
35
+ def descr!(str)
36
+ $targetdoc.add_descr(str)
37
+ end
38
+
39
+ def arg!(name, doc)
40
+ $targetdoc.add_arg(name, doc)
41
+ end
42
+
@@ -0,0 +1,28 @@
1
+
2
+ $system_to_pack = Hash[
3
+ "Ubuntu" => "apk",
4
+ "Darwin" => "brew"
5
+ ]
6
+ $pack = Hash[]
7
+
8
+ $pack['apt'] = Hash[
9
+ "uninstall" => "remove"
10
+ ]
11
+
12
+ $pack['brew'] = Hash[
13
+ "remove" => "uninstall"
14
+ ]
15
+
16
+ def PACK(cmd, *args)
17
+ cmd = String(cmd)
18
+ $system_to_pack.each do |k,v|
19
+ if `uname -a`[k]
20
+ if $pack[v][cmd]
21
+ cmd = $pack[v][cmd]
22
+ end
23
+ r v, cmd, *args
24
+ break
25
+ end
26
+ end
27
+ end
28
+
@@ -1,8 +1,10 @@
1
1
  $t = []
2
2
  $d = []
3
3
 
4
- module Target
4
+ require "ruby_make_script/doc"
5
5
 
6
+ module Target
7
+
6
8
  def depend_each
7
9
  depend.each { |f|
8
10
  yield f
@@ -39,6 +41,7 @@ class FileTarget
39
41
  resolve(f)
40
42
  }
41
43
  end
44
+
42
45
  def run
43
46
  if ! @completed
44
47
  @update_proc.call
@@ -53,6 +56,7 @@ class FileTarget
53
56
  @depend = []
54
57
  @completed = false
55
58
  end
59
+
56
60
  def from(*dependlist)
57
61
  @depend = dependlist
58
62
  @update_proc = Proc.new {
@@ -72,7 +76,9 @@ end
72
76
 
73
77
  class PhonyTarget
74
78
  include Target
79
+ attr_accessor :target
75
80
  attr_accessor :depend
81
+ attr_accessor :doc
76
82
  def resolve_all
77
83
  resolve(@target)
78
84
  end
@@ -88,6 +94,9 @@ class PhonyTarget
88
94
  @target = str
89
95
  @depend = []
90
96
  @completed = false
97
+
98
+ @doc = $targetdoc
99
+ $targetdoc = TargetDoc.new
91
100
  end
92
101
 
93
102
  def from(*dependlist)
@@ -1,15 +1,6 @@
1
-
2
-
3
1
  # since ~ "cd <path>" invalid, add a function here
4
2
  def cd(str)
5
- if block_given?
6
- orig = Dir.pwd
7
- Dir.chdir(str)
8
- yield
9
- Dir.chdir(orig)
10
- else
11
- Dir.chdir(str)
12
- end
3
+ Dir.chdir(str)
13
4
  end
14
5
 
15
6
  # these were like cd function
@@ -21,9 +12,19 @@ end
21
12
  def mkdir(*str)
22
13
  r"mkdir #{str.join(' ')}"
23
14
  end
15
+ # these were like cd function
16
+ def mv(*str)
17
+ r"mv #{str.join(' ')}"
18
+ end
24
19
 
25
- def r(*str)
26
- str = str.join(" ")
20
+ # these were like cd function
21
+ def cp(*str)
22
+ r"cp #{str.join(' ')}"
23
+ end
24
+
25
+ def r(cmd, *str)
26
+ cmd = String(cmd)
27
+ str = cmd + " " + str.join(" ")
27
28
  puts Pastel.new.green("running> ") + str
28
29
  if !system(str)
29
30
  puts Pastel.new.red.bold("error> ") + "command error: " + str
@@ -34,14 +35,7 @@ end
34
35
  # since ~ "cd <path>" invalid, add a function here
35
36
  def cd?(str)
36
37
  begin
37
- if block_given?
38
- orig = Dir.pwd
39
- Dir.chdir(str)
40
- yield
41
- Dir.chdir(orig)
42
- else
43
- Dir.chdir(str)
44
- end
38
+ Dir.chdir(str)
45
39
  rescue => exception
46
40
  puts Pastel.new.yellow("warning> ") + "command error: cd " + str + " (suppressed)"
47
41
  return false
@@ -59,9 +53,20 @@ def mkdir?(*str)
59
53
  r?"mkdir #{str.join(' ')}"
60
54
  end
61
55
 
56
+ # these were like cd function
57
+ def mv?(*str)
58
+ r?"mv #{str.join(' ')}"
59
+ end
60
+
61
+ # these were like cd function
62
+ def cp?(*str)
63
+ r?"cp #{str.join(' ')}"
64
+ end
65
+
62
66
  # no error
63
- def r?(*str)
64
- str = str.join(" ")
67
+ def r?(cmd, *str)
68
+ cmd = String(cmd)
69
+ str = cmd + " " + str.join(" ")
65
70
  puts Pastel.new.green("running> ") + str
66
71
  flag = system(str)
67
72
  if !flag
@@ -74,7 +79,75 @@ def runfile(file, *args)
74
79
  path = File.expand_path(file)
75
80
  r path, *args
76
81
  end
82
+
77
83
  def runfile?(file, *args)
78
84
  path = File.expand_path(file)
79
85
  r? path, *args
80
86
  end
87
+
88
+ class InDir
89
+ def initialize(path, err=true)
90
+ @path = path
91
+ @err = err
92
+ end
93
+
94
+ def enter
95
+ @orig = Dir.pwd
96
+ if @err
97
+ cd @path
98
+ else
99
+ cd? @path
100
+ end
101
+ end
102
+
103
+ def exit
104
+ if @err
105
+ cd @orig
106
+ else
107
+ cd? @orig
108
+ end
109
+ end
110
+ end
111
+
112
+ def dir(path)
113
+ InDir.new(path)
114
+ end
115
+
116
+ def dir?(path)
117
+ InDir.new(path, false)
118
+ end
119
+
120
+ class InEnv
121
+ def initialize(expr)
122
+ @k, @v = expr.split('=')
123
+ end
124
+
125
+ def enter
126
+ @v0 = ENV[@k]
127
+ ENV[@k] = @v
128
+ end
129
+
130
+ def exit
131
+ ENV[@k] = @v0
132
+ end
133
+ end
134
+
135
+ def envir(expr)
136
+ InEnv.new(expr)
137
+ end
138
+
139
+ def use(*operation)
140
+ operation.each{ |o| o.enter}
141
+ yield
142
+ operation.each{ |o| o.exit}
143
+ end
144
+
145
+ def GIT(*args)
146
+ r "git", *args.map{|s| String(s)}
147
+ end
148
+
149
+ def DOCKER(*args)
150
+ r "docker", *args.map{|s| String(s)}
151
+ end
152
+
153
+ require 'ruby_make_script/package'
@@ -1,3 +1,3 @@
1
1
  module RubyMakeScript
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.7"
3
3
  end
data/make.md ADDED
@@ -0,0 +1,19 @@
1
+ # make.rb Documentation
2
+
3
+
4
+ ## Usage
5
+
6
+ Please install ruby and some package first:
7
+
8
+ ```sh
9
+ $ apt instal ruby
10
+ $ gem instal pastel ruby_make_script
11
+ ```
12
+
13
+ then you can run these command below.
14
+ ### `./make.rb setup <args...>`
15
+
16
+ setup the environment
17
+
18
+ * `<args...>` : command to run
19
+
@@ -32,7 +32,6 @@ Gem::Specification.new do |spec|
32
32
  spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
33
33
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
34
34
  end
35
- p spec.files
36
35
  spec.bindir = "exe"
37
36
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
38
37
  spec.require_paths = ["lib"]
@@ -40,5 +39,5 @@ Gem::Specification.new do |spec|
40
39
  spec.add_development_dependency "bundler", "~> 1.17"
41
40
  spec.add_development_dependency "rake", "~> 10.0"
42
41
  spec.add_development_dependency "minitest", "~> 5.0"
43
- spec.add_development_dependency "pastel"
42
+ spec.add_development_dependency "pastel" , "~> 0.7.4"
44
43
  end
data/test.rb ADDED
@@ -0,0 +1,14 @@
1
+ require "ruby_make_script"
2
+
3
+ make do
4
+ descr! "setup the environment"
5
+ arg! "<args...>", "command to run"
6
+ :setup.from do
7
+ use envir("RUST_LOG=trace"), dir('test') do
8
+ r "env"
9
+ r "pwd"
10
+ end
11
+ end
12
+ end
13
+
14
+ dump_md('make.md'){}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_make_script
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - dnailz
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-06-23 00:00:00.000000000 Z
11
+ date: 2020-06-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -56,16 +56,16 @@ dependencies:
56
56
  name: pastel
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: 0.7.4
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: 0.7.4
69
69
  description: A ruby make DSL for ruby like GNU make. (very simple)
70
70
  email:
71
71
  - dnailzb@outlook.com
@@ -77,17 +77,20 @@ files:
77
77
  - ".travis.yml"
78
78
  - CODE_OF_CONDUCT.md
79
79
  - Gemfile
80
- - Gemfile.lock
81
80
  - LICENSE.txt
82
81
  - README.md
83
82
  - Rakefile
84
83
  - bin/console
85
84
  - bin/setup
86
85
  - lib/ruby_make_script.rb
86
+ - lib/ruby_make_script/doc.rb
87
+ - lib/ruby_make_script/package.rb
87
88
  - lib/ruby_make_script/target.rb
88
89
  - lib/ruby_make_script/utils.rb
89
90
  - lib/ruby_make_script/version.rb
91
+ - make.md
90
92
  - ruby_make_script.gemspec
93
+ - test.rb
91
94
  homepage: https://github.com/DnailZ/ruby_make_script
92
95
  licenses:
93
96
  - MIT
@@ -1,28 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- ruby_make_script (0.1.2)
5
-
6
- GEM
7
- remote: https://rubygems.org/
8
- specs:
9
- equatable (0.6.1)
10
- minitest (5.14.1)
11
- pastel (0.7.4)
12
- equatable (~> 0.6)
13
- tty-color (~> 0.5)
14
- rake (10.5.0)
15
- tty-color (0.5.1)
16
-
17
- PLATFORMS
18
- ruby
19
-
20
- DEPENDENCIES
21
- bundler (~> 1.17)
22
- minitest (~> 5.0)
23
- pastel
24
- rake (~> 10.0)
25
- ruby_make_script!
26
-
27
- BUNDLED WITH
28
- 1.17.2