inidol 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/inidol.rb +98 -0
  3. metadata +16 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6cc13eb65f4561305df034009056ff4955799423
4
- data.tar.gz: 5afc4f930e35454b149b75584ae7b653db9f3e00
3
+ metadata.gz: 842e13fc9ebf7e258f1bafc2d89500c49d83a429
4
+ data.tar.gz: '0189f3df3380da1ca618ffb9cb438e505724e71b'
5
5
  SHA512:
6
- metadata.gz: 2bf9e727396ca6d91f320927dcc935c7c77028ea1d3a6f085f7276158c1f3109d7a1172416a0a188352c5607f7e4d022afc41348507e78c3efba57ab97e5ab11
7
- data.tar.gz: fede84ffe58270ab074157fb9dac6d768adea4d500ac1f6313f3ed24ffc805a7a5724533773c3a5fdd9029d7a4f69760419ad8db1ef624ed3ca37d91259ac89b
6
+ metadata.gz: cb58057b981a4fd63de4546f941f2cc023464b428a53a8b9174d14ef11c0adf93294390e70f21e9cc653baf783eee242d9e3de00d41185916554ae765c9b556c
7
+ data.tar.gz: 2c7acfa1bf0b689923298a0eb6803720ba8138e96e62860fcecc1d90a8906a6c7b584f041c1ddc67d19139d52b74a44ecab8bbc7333d2036e44e65e2e8509d76
@@ -1,3 +1,5 @@
1
+ require 'babel_bridge'
2
+
1
3
  class Hash
2
4
  def to_ini
3
5
  result = ''
@@ -14,4 +16,100 @@ class Hash
14
16
  end
15
17
  result
16
18
  end
19
+ end
20
+
21
+ class INIHash < BabelBridge::Parser
22
+ ignore_whitespace
23
+
24
+ def result
25
+ @result ||= {}
26
+ end
27
+
28
+ def current(this)
29
+ @current = result[this] = {}
30
+ end
31
+
32
+ def current?
33
+ @current ||= result
34
+ end
35
+
36
+ rule :root, many(:body) do
37
+ def evaluate
38
+ body.each { |element| element.evaluate }
39
+ end
40
+ end
41
+
42
+ rule :body, any(:group, :property, :comment)
43
+
44
+ rule :group, '[', :any, ']' do
45
+ def evaluate
46
+ parser.current(any.evaluate)
47
+ end
48
+ end
49
+
50
+ rule :property, :name, '=', :values, :comment? do
51
+ def evaluate
52
+ value = values.evaluate
53
+ parser.current?[name.evaluate] = value.size <= 1 ? value[0] : value
54
+ end
55
+ end
56
+
57
+ rule :values, any(:array, :types)
58
+ rule :types, any(:string, :content, :int, :bool)
59
+
60
+ rule :int,/[-]?[0-9]+/ do
61
+ def evaluate
62
+ to_s.to_i
63
+ end
64
+ end
65
+
66
+ rule :bool, /true|false/ do
67
+ def evaluate
68
+ to_s == 'true'
69
+ end
70
+ end
71
+
72
+ rule :string, /"(?:[^"\\\n]|\\(?:["\\\/bfnrt,]|u[0-9a-fA-F]{4}))*"/ do
73
+ def evaluate
74
+ to_s.chomp.gsub(/"/, '')
75
+ end
76
+ end
77
+
78
+ rule :content, /[^\n\=\[\];#,]+/ do
79
+ def evaluate
80
+ to_s.chomp
81
+ end
82
+ end
83
+
84
+ rule :array, many(:types, ',') do
85
+ def evaluate
86
+ types.map { |value| value.evaluate }
87
+ end
88
+ end
89
+
90
+ rule :name, /[^\=\[\]\s]+/ do
91
+ def evaluate
92
+ to_sym
93
+ end
94
+ end
95
+
96
+ rule :any, /[^\n\=\[\];#]+/ do
97
+ def evaluate
98
+ to_sym
99
+ end
100
+ end
101
+
102
+ rule :comment, any('#', ';'), /[^\n]+/ do
103
+ def evaluate
104
+ nil
105
+ end
106
+ end
107
+ end
108
+
109
+ class String
110
+ def from_ini
111
+ parser = INIHash.new
112
+ parser.parse(self).evaluate
113
+ parser.result
114
+ end
17
115
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inidol
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - homonoid
@@ -9,7 +9,21 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
  date: 2017-09-16 00:00:00.000000000 Z
12
- dependencies: []
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: babel_bridge
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  description: Inidol is for Hash -> INI converting
14
28
  email:
15
29
  executables: []