json2env 0.0.1
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/README.markdown +15 -0
- data/Rakefile +24 -0
- data/VERSION +1 -0
- data/bin/json2env +43 -0
- data/lib/json2env.rb +37 -0
- metadata +84 -0
data/README.markdown
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# json2env
|
2
|
+
|
3
|
+
This is a simple tool for converting JSON into an envdir. It will take a json file or read from stdin.
|
4
|
+
|
5
|
+
$ json2env -f env.json dir
|
6
|
+
|
7
|
+
or
|
8
|
+
|
9
|
+
$ cat env.json | json2env dir
|
10
|
+
|
11
|
+
Then you can execute a program with this env using the envdir tool.
|
12
|
+
|
13
|
+
|
14
|
+
$ envdir dir program
|
15
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'jeweler'
|
2
|
+
|
3
|
+
Jeweler::Tasks.new do |s|
|
4
|
+
s.name = "json2env"
|
5
|
+
s.description = "convert json to an envdir"
|
6
|
+
s.summary = s.description
|
7
|
+
s.author = "Orion Henry"
|
8
|
+
s.email = "orion@heroku.com"
|
9
|
+
s.homepage = "http://github.com/orionz/json2env"
|
10
|
+
s.rubyforge_project = "json2env"
|
11
|
+
s.files = FileList["[A-Z]*", "{bin,default,lib,spec}/**/*"]
|
12
|
+
s.executables = %w(json2env)
|
13
|
+
s.add_dependency "json"
|
14
|
+
end
|
15
|
+
|
16
|
+
Jeweler::RubyforgeTasks.new
|
17
|
+
|
18
|
+
desc 'Run specs'
|
19
|
+
task :spec do
|
20
|
+
sh 'bacon -s spec/*_spec.rb'
|
21
|
+
end
|
22
|
+
|
23
|
+
task :default => :spec
|
24
|
+
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.1
|
data/bin/json2env
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
require File.dirname(__FILE__) + "/../lib/json2env"
|
5
|
+
|
6
|
+
|
7
|
+
options = { :io => STDIN }
|
8
|
+
|
9
|
+
ARGV.unshift "-h" if ARGV.size == 0
|
10
|
+
|
11
|
+
optparse = OptionParser.new do|opts|
|
12
|
+
opts.banner = <<banner
|
13
|
+
Usage: json2env [-f json.file] envdir
|
14
|
+
banner
|
15
|
+
opts.on( '-f', '--file FILE', 'Specify a json file, default is stdin' ) do |file|
|
16
|
+
if (File.exists?(file))
|
17
|
+
options[:io] = File.open(file, "r")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
opts.on( '-h', '--help', 'Display this screen' ) do
|
21
|
+
puts opts
|
22
|
+
exit
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
optparse.parse!
|
27
|
+
|
28
|
+
envdir = ARGV.shift
|
29
|
+
json = options[:io].read
|
30
|
+
|
31
|
+
begin
|
32
|
+
JSON2Env.new(json,envdir).create;
|
33
|
+
rescue JSON::ParserError
|
34
|
+
puts "Invalid JSON format"
|
35
|
+
exit 1
|
36
|
+
rescue JSON2Env::TargetNotADirectory
|
37
|
+
puts "Cannot make envdir - file #{envdir} in the way"
|
38
|
+
exit 2
|
39
|
+
rescue JSON2Env::TargetHasSubdirs
|
40
|
+
puts "Cowardly refusing to delete the target dir - it has subdirs"
|
41
|
+
exit 3
|
42
|
+
end
|
43
|
+
|
data/lib/json2env.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
class JSON2Env
|
4
|
+
attr_accessor :env, :dir
|
5
|
+
|
6
|
+
class TargetHasSubdirs < Exception ; end
|
7
|
+
class TargetNotADirectory < Exception ; end
|
8
|
+
|
9
|
+
def initialize(json, dir)
|
10
|
+
@env = JSON.load(json)
|
11
|
+
@dir = dir
|
12
|
+
end
|
13
|
+
|
14
|
+
def create
|
15
|
+
if File.exists?(dir)
|
16
|
+
raise TargetNotADirectory unless File.directory?(dir)
|
17
|
+
clean_dir
|
18
|
+
end
|
19
|
+
Dir.mkdir(dir)
|
20
|
+
@env.each do |key, value|
|
21
|
+
File.open("#{dir}/#{key}", "w") do |file|
|
22
|
+
file.write(value.gsub(/\r\n|\r|\n/, "\0"))
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def clean_dir
|
28
|
+
raise TargetHasSubdirs if files.detect { |f| File.directory?(f) }
|
29
|
+
files.each { |f| File.delete(f) }
|
30
|
+
Dir.delete(@dir);
|
31
|
+
end
|
32
|
+
|
33
|
+
def files
|
34
|
+
Dir.glob("#{@dir}/*")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
metadata
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: json2env
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Orion Henry
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-10-06 00:00:00 -07:00
|
19
|
+
default_executable: json2env
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: json
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
version: "0"
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
description: convert json to an envdir
|
36
|
+
email: orion@heroku.com
|
37
|
+
executables:
|
38
|
+
- json2env
|
39
|
+
extensions: []
|
40
|
+
|
41
|
+
extra_rdoc_files:
|
42
|
+
- README.markdown
|
43
|
+
files:
|
44
|
+
- README.markdown
|
45
|
+
- Rakefile
|
46
|
+
- VERSION
|
47
|
+
- bin/json2env
|
48
|
+
- lib/json2env.rb
|
49
|
+
has_rdoc: true
|
50
|
+
homepage: http://github.com/orionz/json2env
|
51
|
+
licenses: []
|
52
|
+
|
53
|
+
post_install_message:
|
54
|
+
rdoc_options:
|
55
|
+
- --charset=UTF-8
|
56
|
+
require_paths:
|
57
|
+
- lib
|
58
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
hash: 3
|
64
|
+
segments:
|
65
|
+
- 0
|
66
|
+
version: "0"
|
67
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
hash: 3
|
73
|
+
segments:
|
74
|
+
- 0
|
75
|
+
version: "0"
|
76
|
+
requirements: []
|
77
|
+
|
78
|
+
rubyforge_project: json2env
|
79
|
+
rubygems_version: 1.3.7
|
80
|
+
signing_key:
|
81
|
+
specification_version: 3
|
82
|
+
summary: convert json to an envdir
|
83
|
+
test_files: []
|
84
|
+
|