dslh 0.1.6 → 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
  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