dslh 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 448c7a38e72cbc66a338013c5b594d15501675b5
4
- data.tar.gz: 500c4decaa985b8682c123c8b2d58f0e82566d6a
3
+ metadata.gz: 2ee7c54ea949ae371f63dccec99e030e724782cf
4
+ data.tar.gz: 2600505830a26c4d8679dcba4e46590cec3453e6
5
5
  SHA512:
6
- metadata.gz: 61bdc03040f883968193fc63a7fbb4c9d7d1e9f6b1d26af00478b65266d659ab382687488940cf0d870f62d7da31323c499d704c35a9d6f0d5510d9efcc18c4e
7
- data.tar.gz: 1137178d9f9b748198787b5747b63745cc09dba6baeee17836e56bb0f087dfa927e63d1894084cdcb57c8905d2ef2bbfa5f0aabde88ae7dbceeec9583af13f16
6
+ metadata.gz: 9ae3e9132526fb7f9755bfd7014563bd719e081fb936cfa815f706039b90a1d0ad58e2b02a2e3ec1cb7e77e5b00397608296d5781c4d1a4ba23de021fab6458e
7
+ data.tar.gz: 6e7893c3bd777f65989828bd8f8d262e5a4e25baef78ddb9bda1ab23ea832f92193482a66f50bfcb2c0c01b766e5994ec570dd8c5b4e848ad91901e26e61edaf
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ test.rb
data/README.md CHANGED
@@ -80,6 +80,50 @@ pp h
80
80
  :GlossSee=>"markup"}}}}}
81
81
  ```
82
82
 
83
+ ### deval
84
+
85
+ ```ruby
86
+ require 'dslh'
87
+
88
+ h = {"glossary"=>
89
+ {"title"=>"example glossary",
90
+ "GlossDiv"=>
91
+ {"title"=>"S",
92
+ "GlossList"=>
93
+ {"GlossEntry"=>
94
+ {"ID"=>"SGML",
95
+ "SortAs"=>"SGML",
96
+ "GlossTerm"=>"Standard Generalized Markup Language",
97
+ "Acronym"=>"SGML",
98
+ "Abbrev"=>"ISO 8879:1986",
99
+ "GlossDef"=>
100
+ {"para"=>
101
+ "A meta-markup language, used to create markup languages such as DocBook.",
102
+ "GlossSeeAlso"=>["GML", "XML"]},
103
+ "GlossSee"=>"markup"}}}}}
104
+
105
+ puts Dslh.deval(h) # => glossary do
106
+ # title "example glossary"
107
+ # GlossDiv do
108
+ # title "S"
109
+ # GlossList do
110
+ # GlossEntry do
111
+ # ID "SGML"
112
+ # SortAs "SGML"
113
+ # GlossTerm "Standard Generalized Markup Language"
114
+ # Acronym "SGML"
115
+ # Abbrev "ISO 8879:1986"
116
+ # GlossDef do
117
+ # para "A meta-markup language, used to create markup languages such as DocBook."
118
+ # GlossSeeAlso "GML", "XML"
119
+ # end
120
+ # GlossSee "markup"
121
+ # end
122
+ # end
123
+ # end
124
+ # end
125
+ ```
126
+
83
127
  ## Contributing
84
128
 
85
129
  1. Fork it ( http://github.com/<my-github-username>/dslh/fork )
data/lib/dslh.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'dslh/version'
2
2
  require 'stringio'
3
+ require 'pp'
3
4
 
4
5
  class Dslh
5
6
  INDENT_SPACES = ' '
@@ -71,25 +72,44 @@ class Dslh
71
72
  private
72
73
 
73
74
  def deval0(hash, depth, buf)
74
- hash.each do |key, value|
75
- key_conv = @options[:key_conv] || @options[:conv]
76
- value_conv = @options[:value_conv] || @options[:conv]
75
+ indent = (INDENT_SPACES * depth)
76
+ next_indent = (INDENT_SPACES * (depth + 1))
77
+ key_conv = @options[:key_conv] || @options[:conv]
78
+ value_conv = @options[:value_conv] || @options[:conv]
79
+ exclude_key = @options[:exclude_key] || proc {|k| k.to_s !~ /\A[_a-z]\w+\Z/i }
80
+
81
+ if exclude_key and (key_conv ? hash.keys.map {|k| key_conv.call(k) } : hash.keys).any? {|k| exclude_key.call(k) }
82
+ buf.puts '(' + ("\n" + hash.pretty_inspect.strip).gsub("\n", "\n" + indent) + ')'
83
+ return
84
+ end
77
85
 
86
+ hash.each do |key, value|
78
87
  key = key_conv.call(key) if key_conv
79
- indent = (INDENT_SPACES * depth)
80
-
81
88
  buf.print(indent + key)
82
89
 
83
90
  case value
84
91
  when Hash
85
- buf.puts(' do')
86
- deval0(value, depth + 1, buf)
87
- buf.puts(indent + 'end')
92
+ if exclude_key and (key_conv ? value.keys.map {|k| key_conv.call(k) } : value.keys).any? {|k| exclude_key.call(k) }
93
+ buf.puts '(' + ("\n" + value.pretty_inspect.strip).gsub("\n", "\n" + next_indent) + ')'
94
+ else
95
+ buf.puts(' do')
96
+ deval0(value, depth + 1, buf)
97
+ buf.puts(indent + 'end')
98
+ end
88
99
  when Array
89
- buf.puts ' ' + value.map {|v|
90
- v = value_conv.call(v) if value_conv
91
- v.inspect
92
- }.join(', ')
100
+ if value.any? {|v| [Array, Hash].any? {|c| v.kind_of?(c) }}
101
+ buf.puts '(' + ("\n" + value.pretty_inspect.strip).gsub("\n", "\n" + next_indent) + ')'
102
+ else
103
+ buf.puts ' ' + value.map {|v|
104
+ v = value_conv.call(v) if value_conv
105
+
106
+ if v.kind_of?(Hash)
107
+ '(' + v.inspect + ')'
108
+ else
109
+ v.inspect
110
+ end
111
+ }.join(', ')
112
+ end
93
113
  else
94
114
  value = value_conv.call(value) if value_conv
95
115
  buf.puts ' ' + value.inspect
data/lib/dslh/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Dslh
2
- VERSION = '0.1.6'
2
+ VERSION = '0.1.7'
3
3
  end
data/spec/dslh_spec.rb CHANGED
@@ -495,4 +495,14 @@ glossary do
495
495
  end
496
496
  EOS
497
497
  end
498
+
499
+ it 'should convert json to dsl' do
500
+ url = 'https://s3.amazonaws.com/cloudformation-templates-us-east-1/Drupal_Multi_AZ.template'
501
+ template = open(url) {|f| f.read }
502
+ template = JSON.parse(template)
503
+
504
+ dsl = Dslh.deval(template)
505
+ evaluated = Dslh.eval(dsl, :key_conv => proc {|i| i.to_s })
506
+ expect(evaluated).to eq(template)
507
+ end
498
508
  end
data/spec/spec_helper.rb CHANGED
@@ -1 +1,3 @@
1
1
  require 'dslh'
2
+ require 'json'
3
+ require 'open-uri'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dslh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Sugawara