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.
Files changed (6) hide show
  1. data/README.markdown +15 -0
  2. data/Rakefile +24 -0
  3. data/VERSION +1 -0
  4. data/bin/json2env +43 -0
  5. data/lib/json2env.rb +37 -0
  6. metadata +84 -0
@@ -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
+
@@ -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
@@ -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
+
@@ -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
+