mixItRuby 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +45 -0
- data/Gemfile +11 -0
- data/Gemfile.lock +84 -0
- data/Guardfile +13 -0
- data/bin/mixit +40 -0
- data/features/env.rb +2 -0
- data/features/mixer.feature +32 -0
- data/features/step_definitions/mixer_steps.rb +13 -0
- data/features/support/hooks.rb +5 -0
- data/lib/mixer.rb +82 -0
- data/lib/template.rb +20 -0
- data/mixItRuby.gemspec +16 -0
- data/readme.md +89 -0
- data/spec/lib/mixer_spec.rb +39 -0
- data/spec/spec_helper.rb +6 -0
- data/templates/adress.erb +3 -0
- data/templates/item.erb +2 -0
- data/testdata/testdata.json +1 -0
- data/testdata/testdata.out +1 -0
- metadata +65 -0
data/.gitignore
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
./log/*
|
2
|
+
log/*.log
|
3
|
+
log/development.log
|
4
|
+
.DS_Store
|
5
|
+
doc/api
|
6
|
+
doc/app
|
7
|
+
coverage
|
8
|
+
db/*.sqlite3
|
9
|
+
db/development_structure.sql
|
10
|
+
public/uploads
|
11
|
+
spec/dummy/log
|
12
|
+
spec/dummy/tmp
|
13
|
+
spec/dummy/public/system/images
|
14
|
+
spec/dummy/puplic/assets/*
|
15
|
+
spec/dummy/public/system/uploads/*
|
16
|
+
spec/dummy/public/system/*
|
17
|
+
spec/dummy/public/uploads
|
18
|
+
spec/dummy/log*
|
19
|
+
spec/dummy/tmp*
|
20
|
+
index/*
|
21
|
+
*.swp
|
22
|
+
*.swo
|
23
|
+
.idea/
|
24
|
+
.idea/**/*
|
25
|
+
nbproject/*
|
26
|
+
*.war
|
27
|
+
db/schema.rb
|
28
|
+
tmp/*
|
29
|
+
wMake.bat
|
30
|
+
etc/web.xml
|
31
|
+
build/
|
32
|
+
build/*
|
33
|
+
.bundle/
|
34
|
+
~/
|
35
|
+
~/*
|
36
|
+
*.knob
|
37
|
+
tmp
|
38
|
+
mysession.vi*
|
39
|
+
ruby-uuid
|
40
|
+
localhistory
|
41
|
+
test
|
42
|
+
prod
|
43
|
+
*.png
|
44
|
+
site/dev/images/galleries
|
45
|
+
*.gem
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
mixItRuby (0.0.0)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: http://rubygems.org/
|
8
|
+
specs:
|
9
|
+
aruba (0.5.4)
|
10
|
+
childprocess (>= 0.3.6)
|
11
|
+
cucumber (>= 1.1.1)
|
12
|
+
rspec-expectations (>= 2.7.0)
|
13
|
+
builder (3.2.2)
|
14
|
+
celluloid (0.15.2)
|
15
|
+
timers (~> 1.1.0)
|
16
|
+
celluloid-io (0.15.0)
|
17
|
+
celluloid (>= 0.15.0)
|
18
|
+
nio4r (>= 0.5.0)
|
19
|
+
childprocess (0.5.3)
|
20
|
+
ffi (~> 1.0, >= 1.0.11)
|
21
|
+
coderay (1.1.0)
|
22
|
+
cucumber (1.3.15)
|
23
|
+
builder (>= 2.1.2)
|
24
|
+
diff-lcs (>= 1.1.3)
|
25
|
+
gherkin (~> 2.12)
|
26
|
+
multi_json (>= 1.7.5, < 2.0)
|
27
|
+
multi_test (>= 0.1.1)
|
28
|
+
diff-lcs (1.2.5)
|
29
|
+
ffi (1.9.3)
|
30
|
+
formatador (0.2.4)
|
31
|
+
gherkin (2.12.2)
|
32
|
+
multi_json (~> 1.3)
|
33
|
+
guard (2.6.0)
|
34
|
+
formatador (>= 0.2.4)
|
35
|
+
listen (~> 2.7)
|
36
|
+
lumberjack (~> 1.0)
|
37
|
+
pry (>= 0.9.12)
|
38
|
+
thor (>= 0.18.1)
|
39
|
+
guard-cucumber (1.4.1)
|
40
|
+
cucumber (>= 1.2.0)
|
41
|
+
guard (>= 1.1.0)
|
42
|
+
guard-rspec (4.2.8)
|
43
|
+
guard (~> 2.1)
|
44
|
+
rspec (>= 2.14, < 4.0)
|
45
|
+
listen (2.7.1)
|
46
|
+
celluloid (>= 0.15.2)
|
47
|
+
celluloid-io (>= 0.15.0)
|
48
|
+
rb-fsevent (>= 0.9.3)
|
49
|
+
rb-inotify (>= 0.9)
|
50
|
+
lumberjack (1.0.5)
|
51
|
+
method_source (0.8.2)
|
52
|
+
multi_json (1.10.1)
|
53
|
+
multi_test (0.1.1)
|
54
|
+
nio4r (1.0.0)
|
55
|
+
pry (0.9.12.6)
|
56
|
+
coderay (~> 1.0)
|
57
|
+
method_source (~> 0.8)
|
58
|
+
slop (~> 3.4)
|
59
|
+
rb-fsevent (0.9.4)
|
60
|
+
rb-inotify (0.9.3)
|
61
|
+
ffi (>= 0.5.0)
|
62
|
+
rspec (2.14.1)
|
63
|
+
rspec-core (~> 2.14.0)
|
64
|
+
rspec-expectations (~> 2.14.0)
|
65
|
+
rspec-mocks (~> 2.14.0)
|
66
|
+
rspec-core (2.14.8)
|
67
|
+
rspec-expectations (2.14.5)
|
68
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
69
|
+
rspec-mocks (2.14.6)
|
70
|
+
slop (3.5.0)
|
71
|
+
thor (0.19.1)
|
72
|
+
timers (1.1.0)
|
73
|
+
|
74
|
+
PLATFORMS
|
75
|
+
ruby
|
76
|
+
|
77
|
+
DEPENDENCIES
|
78
|
+
aruba
|
79
|
+
cucumber
|
80
|
+
guard
|
81
|
+
guard-cucumber
|
82
|
+
guard-rspec
|
83
|
+
mixItRuby!
|
84
|
+
rspec
|
data/Guardfile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
notification :tmux, display_message: true
|
4
|
+
guard :rspec do
|
5
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
6
|
+
watch('spec/spec_helper.rb') { "spec" }
|
7
|
+
watch('bin/mixit') { "spec" }
|
8
|
+
watch(%r{^spec/.+_spec\.rb$})
|
9
|
+
watch(%r{^spec/spec_helper\.rb})
|
10
|
+
end
|
11
|
+
guard :cucumber do
|
12
|
+
watch(%r{^features/(.+)\.feature$}) { "bundle exec cucumber" }
|
13
|
+
end
|
data/bin/mixit
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'optparse'
|
3
|
+
require "mixer"
|
4
|
+
require "json"
|
5
|
+
options = {}
|
6
|
+
optparse = OptionParser.new do|opts|
|
7
|
+
opts.banner = "Usage: mixit [-o outputfile -i inputfile -t templatefile]"
|
8
|
+
opts.on( '-i', '--input FILE', 'json inputfile' ) do|p|
|
9
|
+
options[:inputfile] = p
|
10
|
+
end
|
11
|
+
|
12
|
+
opts.on( '-o', '--output FILE', 'mixed outputfile' ) do|p|
|
13
|
+
options[:outputfile] = p
|
14
|
+
end
|
15
|
+
|
16
|
+
opts.on( '-t', '--templates DIR', 'place where the templates are' ) do|p|
|
17
|
+
options[:templateDir] = p
|
18
|
+
end
|
19
|
+
|
20
|
+
end.parse!
|
21
|
+
|
22
|
+
mixer = MIX::Mixer.new
|
23
|
+
input_filename= options[:inputfile]
|
24
|
+
if !input_filename
|
25
|
+
STDOUT.puts "no inputfile given"
|
26
|
+
exit(1)
|
27
|
+
end
|
28
|
+
|
29
|
+
inputfile = options[:inputfile]
|
30
|
+
path = File.dirname(inputfile)
|
31
|
+
input_string = IO.read(inputfile)
|
32
|
+
outputfile = options[:outputfile] || File.basename(inputfile,".*") + ".out"
|
33
|
+
outputfile = File.join(path,outputfile)
|
34
|
+
inputdata = JSON.parse(input_string, {:symbolize_names => true})
|
35
|
+
templateDir = options[:templateDir]
|
36
|
+
mixer.mixItRuby(inputdata, templateDir)
|
37
|
+
mixer.writeResult2File(outputfile)
|
38
|
+
|
39
|
+
|
40
|
+
|
data/features/env.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
Feature:Commandline functionality
|
2
|
+
|
3
|
+
A User should be able to call a command to get a mixed outputfile
|
4
|
+
@announce
|
5
|
+
Scenario: CommandlineCall should give an error, when no inputfile
|
6
|
+
When I run `mixit`
|
7
|
+
Then the output should contain "no inputfile given"
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
|
12
|
+
Scenario: exit status of 0
|
13
|
+
When I run `mixit`
|
14
|
+
Then the exit status should be 1
|
15
|
+
|
16
|
+
|
17
|
+
|
18
|
+
@announce
|
19
|
+
Scenario: Generatining an outputfile
|
20
|
+
Given the testdatafile is in the aruba filespace
|
21
|
+
When I run `mixit -i testdata/testdata.json`
|
22
|
+
When I run `cat testdata/testdata.out`
|
23
|
+
Then the stdout should contain "Bond"
|
24
|
+
|
25
|
+
|
26
|
+
@announce
|
27
|
+
Scenario: mixIt should also run from another templatepath
|
28
|
+
Given the testdatafile is in the aruba filespace
|
29
|
+
Given the templatefiles are in the aruby filespace
|
30
|
+
When I run `mixit -i testdata/testdata.json -t tmp/aruba`
|
31
|
+
And I run `cat testdata/testdata.out`
|
32
|
+
Then the stdout should contain "Bond"
|
@@ -0,0 +1,13 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
Given(/^the testdatafile is in the aruba filespace$/) do
|
4
|
+
`mkdir tmp/aruba/testdata && cp testdata/testdata.json tmp/aruba/testdata`
|
5
|
+
end
|
6
|
+
|
7
|
+
|
8
|
+
Given(/^the templatefiles are in the aruby filespace$/) do
|
9
|
+
`mkdir tmp/aruba/templates && cp templates/* tmp/aruba/templates`
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
|
data/lib/mixer.rb
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
require 'erb'
|
3
|
+
|
4
|
+
module MIX
|
5
|
+
class Mixer
|
6
|
+
def initialize()
|
7
|
+
@result = []
|
8
|
+
@deeps = 0
|
9
|
+
end
|
10
|
+
#get all variables if the level, binds it and templates it
|
11
|
+
#this is important to maintain the order of buildingblock for the input
|
12
|
+
|
13
|
+
|
14
|
+
def premix(data,templatePath)
|
15
|
+
bind_hash={}
|
16
|
+
data.each do |k,v|
|
17
|
+
if v.kind_of?(Hash)
|
18
|
+
elsif v.kind_of?(Array)
|
19
|
+
else
|
20
|
+
bind_hash[k] = v
|
21
|
+
end
|
22
|
+
end
|
23
|
+
et = ErbIT.new( bind_hash)
|
24
|
+
template = getTemplate(bind_hash[:id])
|
25
|
+
filled = et.render(template)
|
26
|
+
@result.push(filled)
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
def mixItRuby(data,templatePath=nil)
|
31
|
+
###putting an Index to the elements to find the sequence which has been in the json###
|
32
|
+
@deeps=@deeps + 1
|
33
|
+
premix(data,templatePath)
|
34
|
+
bind_hash={}
|
35
|
+
data.each do |k,v|
|
36
|
+
if v.kind_of?(Hash)
|
37
|
+
mixItRuby(v)
|
38
|
+
elsif v.kind_of?(Array)
|
39
|
+
ar = v
|
40
|
+
ar.each do |element|
|
41
|
+
mixItRuby(element)
|
42
|
+
end
|
43
|
+
else
|
44
|
+
#done in premix
|
45
|
+
end
|
46
|
+
end
|
47
|
+
puts @deeps.inspect
|
48
|
+
@deeps = @deeps -1
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
def writeResult2File(filename)
|
53
|
+
File.write(filename,@result)
|
54
|
+
end
|
55
|
+
|
56
|
+
def getResult
|
57
|
+
@result
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
|
62
|
+
def getTemplate(id,path = File.dirname(__FILE__))
|
63
|
+
path = File.join(path, '../templates')
|
64
|
+
filename = File.join(path,id)
|
65
|
+
template = IO.read(filename)
|
66
|
+
template
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
class ErbIT < OpenStruct
|
77
|
+
def render(template)
|
78
|
+
ERB.new(template).result(binding)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
data/lib/template.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
|
2
|
+
#This file is for future use to extract the variables from a erb template
|
3
|
+
|
4
|
+
|
5
|
+
class Template
|
6
|
+
attr_accessor :file_path,:contents
|
7
|
+
|
8
|
+
def self.all
|
9
|
+
Dir.glob("lib/templates/*").collect{|t| Template.new(t)}
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(file_path)
|
13
|
+
@file_path = file_path
|
14
|
+
@contents = File.open(@file_path, "rb").read
|
15
|
+
end
|
16
|
+
|
17
|
+
def variables
|
18
|
+
self.contents.scan(/(\@[a-z]+[0-9a-z_]*)/i).uniq
|
19
|
+
end
|
20
|
+
end
|
data/mixItRuby.gemspec
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = 'mixItRuby'
|
3
|
+
s.version = '0.0.0'
|
4
|
+
s.date = '2014-05-25'
|
5
|
+
s.summary = "MixItRuby! mixes json in erb + CLI"
|
6
|
+
s.description = "A gem for mixing a nested json structure in erb files"
|
7
|
+
s.authors = ["Erhard Karger"]
|
8
|
+
s.email = 'erhard@kargers.org'
|
9
|
+
s.homepage = 'http://rubygems.org/gems/mixItRuby'
|
10
|
+
s.license = 'MIT'
|
11
|
+
git_files = `git ls-files`.split("\n") rescue ''
|
12
|
+
s.files = git_files
|
13
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
14
|
+
s.executables = %w(mixit)
|
15
|
+
s.require_paths = ["lib"]
|
16
|
+
end
|
data/readme.md
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
MIX
|
2
|
+
===
|
3
|
+
|
4
|
+
What is MIX ?
|
5
|
+
-------------
|
6
|
+
Mix is a gem for mixing data with tamplatefiles.
|
7
|
+
|
8
|
+
Example Use Case
|
9
|
+
----------------
|
10
|
+
You have to print bills for a list of items/products.
|
11
|
+
What you do :
|
12
|
+
Transform the data to a hash which lasts a specific form
|
13
|
+
Run mix with a erb template. Viola the output is (depending on the template)
|
14
|
+
ready to be formatted in latex of whatever.
|
15
|
+
|
16
|
+
But whatever......
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
Install
|
21
|
+
-------
|
22
|
+
gem mix
|
23
|
+
|
24
|
+
run (form commandline)
|
25
|
+
-----------------------
|
26
|
+
mix inputfile template outputfile
|
27
|
+
|
28
|
+
|
29
|
+
run withing a programm
|
30
|
+
----------------------
|
31
|
+
|
32
|
+
|
33
|
+
current project status
|
34
|
+
----------------------
|
35
|
+
Work in progress just started
|
36
|
+
|
37
|
+
|
38
|
+
You want to contributes ?
|
39
|
+
==========================
|
40
|
+
Contact erhard@kargers.org
|
41
|
+
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
Structure of the data
|
46
|
+
=====================
|
47
|
+
|
48
|
+
json Format recursive, selfcontained.
|
49
|
+
|
50
|
+
recursive : substructures possible (nodes)
|
51
|
+
selfcontained : The name of the erb (id, for DB or File or whatever) is within the data
|
52
|
+
|
53
|
+
Here an example:
|
54
|
+
|
55
|
+
{"id":"adress.erb","name":"Bond","prename":"James",
|
56
|
+
"items":
|
57
|
+
[
|
58
|
+
{"id":"item.erb","product":"car1","prize":"10"},
|
59
|
+
{"id":"item.erb","product":"car2","prize":"11"}
|
60
|
+
]
|
61
|
+
}
|
62
|
+
|
63
|
+
A building block consists of an id and other key value pair.
|
64
|
+
|
65
|
+
id: is a must. It represents the Identifier under which the template is accesible.
|
66
|
+
At the moment it is a filename. The other attributes on the same level, which are no array or hash are
|
67
|
+
the key value pais which fill the erb.
|
68
|
+
The adress.erb looks like this
|
69
|
+
<%=name%>, <%=prename%>
|
70
|
+
Then an array follow. An Array must be build of hashes, which can have subarrays or like in the example building blocks again.
|
71
|
+
|
72
|
+
|
73
|
+
What is mixItRuby needed for ?
|
74
|
+
==============================
|
75
|
+
With that little gem you can build up personalized letters or emails or html pages.
|
76
|
+
Just imagine the erb file are tex files or xml-fo or html files or they are files with are ruby file again, which produce some output.
|
77
|
+
|
78
|
+
Another possibility is create other json files. Imagine the template erbs are templates for json. Then for example in SOA business objects can be chained and enriched from services.
|
79
|
+
|
80
|
+
There are a lot of posibilities.
|
81
|
+
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
Licence:
|
86
|
+
MIT
|
87
|
+
|
88
|
+
Author:
|
89
|
+
Erhard Karger
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'stringio'
|
2
|
+
require 'spec_helper'
|
3
|
+
require File.join(File.dirname(__FILE__),'../../lib/mixer.rb')
|
4
|
+
require "json"
|
5
|
+
describe "Mixer" do
|
6
|
+
|
7
|
+
it "should traverse the data tree and contain the data in the result" do
|
8
|
+
mix = MIX::Mixer.new()
|
9
|
+
mix.mixItRuby(data)
|
10
|
+
result = mix.getResult
|
11
|
+
array_contains?(result,"Bond").should be_true
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
it "should preserver the sequence of building blocks of the json in the result" do
|
16
|
+
mix = MIX::Mixer.new()
|
17
|
+
mix.mixItRuby(data)
|
18
|
+
result = mix.getResult
|
19
|
+
result[0].should include("Bond")
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
def data
|
28
|
+
dat={id: "adress.erb", name: "Bond", prename: "James", items: [{id: "item.erb", product: "car1", prize: "10"},{id: "item.erb" , product: "car2", prize: "11"}]}
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
def array_contains?(array, token)
|
33
|
+
array.each do |element|
|
34
|
+
if element =~ /#{token}/
|
35
|
+
return true
|
36
|
+
end
|
37
|
+
end
|
38
|
+
return false
|
39
|
+
end
|
data/spec/spec_helper.rb
ADDED
data/templates/item.erb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"id":"adress.erb","name":"Bond","prename":"James","items":[{"id":"item.erb","product":"car1","prize":"10"},{"id":"item.erb","product":"car2","prize":"11"}]}
|
@@ -0,0 +1 @@
|
|
1
|
+
["adress.erb\nBond , James\n\n", "item.erb\ncar1 10\n", "item.erb\ncar2 11\n"]
|
metadata
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mixItRuby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Erhard Karger
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-05-25 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: A gem for mixing a nested json structure in erb files
|
15
|
+
email: erhard@kargers.org
|
16
|
+
executables:
|
17
|
+
- mixit
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- .gitignore
|
22
|
+
- Gemfile
|
23
|
+
- Gemfile.lock
|
24
|
+
- Guardfile
|
25
|
+
- bin/mixit
|
26
|
+
- features/env.rb
|
27
|
+
- features/mixer.feature
|
28
|
+
- features/step_definitions/mixer_steps.rb
|
29
|
+
- features/support/hooks.rb
|
30
|
+
- lib/mixer.rb
|
31
|
+
- lib/template.rb
|
32
|
+
- mixItRuby.gemspec
|
33
|
+
- readme.md
|
34
|
+
- spec/lib/mixer_spec.rb
|
35
|
+
- spec/spec_helper.rb
|
36
|
+
- templates/adress.erb
|
37
|
+
- templates/item.erb
|
38
|
+
- testdata/testdata.json
|
39
|
+
- testdata/testdata.out
|
40
|
+
homepage: http://rubygems.org/gems/mixItRuby
|
41
|
+
licenses:
|
42
|
+
- MIT
|
43
|
+
post_install_message:
|
44
|
+
rdoc_options: []
|
45
|
+
require_paths:
|
46
|
+
- lib
|
47
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
48
|
+
none: false
|
49
|
+
requirements:
|
50
|
+
- - ! '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ! '>='
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '0'
|
59
|
+
requirements: []
|
60
|
+
rubyforge_project:
|
61
|
+
rubygems_version: 1.8.24
|
62
|
+
signing_key:
|
63
|
+
specification_version: 3
|
64
|
+
summary: MixItRuby! mixes json in erb + CLI
|
65
|
+
test_files: []
|