merb_global 0.0.2 → 0.0.3

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.
data/HISTORY CHANGED
@@ -1,3 +1,6 @@
1
+ === 0.0.3
2
+ * New Plural engine
3
+
1
4
  === 0.0.2
2
5
  * Added language customisation
3
6
  * Support for auto-choose of language
data/Rakefile CHANGED
@@ -5,7 +5,7 @@ require 'spec/rake/spectask'
5
5
 
6
6
  PLUGIN = "merb_global"
7
7
  NAME = "merb_global"
8
- GEM_VERSION = "0.0.2"
8
+ GEM_VERSION = "0.0.3"
9
9
  AUTHORS = ["Alex Coles", "Maciej Piechotka"]
10
10
  EMAIL = "alex@alexcolesportfolio.com"
11
11
  HOMEPAGE = "http://trac.ikonoklastik.com/merb_global/"
@@ -21,6 +21,7 @@ spec = Gem::Specification.new do |s|
21
21
  s.email = EMAIL
22
22
  s.homepage = HOMEPAGE
23
23
  s.add_dependency('merb-core', '>= 0.9.1')
24
+ s.add_dependency('treetop', '>= 1.2.3') # Tested on 1.2.3
24
25
  s.require_path = 'lib'
25
26
  s.autorequire = PLUGIN
26
27
  s.files = %w(LICENSE README Rakefile TODO HISTORY) +
@@ -1,6 +1,11 @@
1
+ require 'treetop'
2
+
1
3
  module Merb
2
4
  module Global
3
5
  module Plural
6
+ path = (Pathname.new(__FILE__).dirname.expand_path + 'plural')
7
+ @parser = Treetop.load(path.to_s).new
8
+
4
9
  # Returns which form should be returned
5
10
  # ==== Parameters
6
11
  # n<Fixnum>:: A number of elements
@@ -8,7 +13,7 @@ module Merb
8
13
  # ==== Returns
9
14
  # Fixnum:: Which form should be translated
10
15
  def self.which_form(n, plural)
11
- eval plural
16
+ @parser.parse(plural).to_lambda.call(n)
12
17
  end
13
18
  end
14
19
  end
@@ -0,0 +1,267 @@
1
+ module Merb
2
+ module Global
3
+ grammar Plural
4
+ rule expression
5
+ comma
6
+ end
7
+
8
+ rule comma
9
+ ternary ',' comma {
10
+ def to_lambda
11
+ comma.to_lambda
12
+ end
13
+ }
14
+ /
15
+ ternary
16
+ end
17
+
18
+ rule ternary
19
+ logop '?' if_true:ternary ':' if_false:ternary {
20
+ def to_lambda
21
+ lambda do |n|
22
+ if logop.to_lambda.call(n) != 0
23
+ if_true.to_lambda.call(n)
24
+ else
25
+ if_false.to_lambda.call(n)
26
+ end
27
+ end
28
+ end
29
+ }
30
+ /
31
+ logop
32
+ end
33
+
34
+ rule logop
35
+ bitop '&&' logop {
36
+ def to_lambda
37
+ lambda do |n|
38
+ bitop.to_lambda.call(n) && logop.to_lambda.call(n) ? 1 : 0
39
+ end
40
+ end
41
+ }
42
+ /
43
+ bitop '||' bitop {
44
+ def to_lambda
45
+ lambda do |n|
46
+ bitop.to_lambda.call(n) || logop.to_lambda.call(n) ? 1 : 0
47
+ end
48
+ end
49
+ }
50
+ /
51
+ bitop
52
+ end
53
+
54
+ rule bitop
55
+ equality '&' bitop {
56
+ def to_lambda
57
+ lambda do |n|
58
+ equality.to_lambda.call(n) & bitop.to_lambda.call(n)
59
+ end
60
+ end
61
+ }
62
+ /
63
+ equality '^' bitop {
64
+ def to_lambda
65
+ lambda do |n|
66
+ equality.to_lambda.call(n) ^ bitop.to_lambda.call(n)
67
+ end
68
+ end
69
+ }
70
+ /
71
+ equality '|' bitop {
72
+ def to_lambda
73
+ lambda do |n|
74
+ equality.to_lambda.call(n) | bitop.to_lambda.call(n)
75
+ end
76
+ end
77
+ }
78
+ /
79
+ equality
80
+ end
81
+
82
+ rule equality
83
+ relation '==' equality {
84
+ def to_lambda
85
+ lambda do |n|
86
+ relation.to_lambda.call(n) == equality.to_lambda.call(n) ? 1 : 0
87
+ end
88
+ end
89
+ }
90
+ /
91
+ relation '!=' equality {
92
+ def to_lambda
93
+ lambda do |n|
94
+ relation.to_lambda.call(n) != equality.to_lambda.call(n) ? 0 : 1
95
+ end
96
+ end
97
+ }
98
+ /
99
+ relation
100
+ end
101
+
102
+ rule relation
103
+ bitwise '<' relation {
104
+ def to_lambda
105
+ lambda do |n|
106
+ bitwise.to_lambda.call(n) < relation.to_lambda.call(n) ? 1 : 0
107
+ end
108
+ end
109
+ }
110
+ /
111
+ bitwise '<=' relation {
112
+ def to_lambda
113
+ lambda do |n|
114
+ bitwise.to_lambda.call(n) <= relation.to_lambda.call(n) ? 1 : 0
115
+ end
116
+ end
117
+ }
118
+ /
119
+ bitwise '>' relation {
120
+ def to_lambda
121
+ lambda do |n|
122
+ bitwise.to_lambda.call(n) > relation.to_lambda.call(n) ? 1 : 0
123
+ end
124
+ end
125
+ }
126
+ /
127
+ bitwise '>=' relation {
128
+ def to_lambda
129
+ lambda do |n|
130
+ bitwise.to_lambda.call(n) >= relation.to_lambda.call(n) ? 1 : 0
131
+ end
132
+ end
133
+ }
134
+ /
135
+ bitwise
136
+ end
137
+
138
+ rule bitwise
139
+ addition '<<' bitwise {
140
+ def to_lambda
141
+ lambda do |n|
142
+ addition.to_lambda.call(n) << bitwise.to_lambda.call(n)
143
+ end
144
+ end
145
+ }
146
+ /
147
+ addition '>>' bitwise {
148
+ def to_lambda
149
+ lambda do |n|
150
+ addition.to_lambda.call(n) >> bitwise.to_lambda.call(n)
151
+ end
152
+ end
153
+ }
154
+ /
155
+ addition
156
+ end
157
+
158
+ rule addition
159
+ multiplication '+' addition {
160
+ def to_lambda
161
+ lambda do |n|
162
+ multiplication.to_lambda.call(n) + addition.to_lambda.call(n)
163
+ end
164
+ end
165
+ }
166
+ /
167
+ multiplication '-' addition {
168
+ def to_lambda
169
+ lambda do |n|
170
+ multiplication.to_lambda.call(n) - addition.to_lambda.call(n)
171
+ end
172
+ end
173
+ }
174
+ /
175
+ multiplication
176
+ end
177
+
178
+ rule multiplication
179
+ unary '*' multiplication {
180
+ def to_lambda
181
+ lambda do |n|
182
+ unary.to_lambda.call(n) * multiplication.to_lambda.call(n)
183
+ end
184
+ end
185
+ }
186
+ /
187
+ unary '/' multiplication {
188
+ def to_lambda
189
+ lambda do |n|
190
+ unary.to_lambda.call(n) / multiplication.to_lambda.call(n)
191
+ end
192
+ end
193
+ }
194
+ /
195
+ unary '%' multiplication {
196
+ def to_lambda
197
+ lambda do |n|
198
+ unary.to_lambda.call(n) % multiplication.to_lambda.call(n)
199
+ end
200
+ end
201
+ }
202
+ /
203
+ unary
204
+ end
205
+
206
+ rule unary
207
+ '+' base {
208
+ def to_lambda
209
+ base.to_lambda
210
+ end
211
+ }
212
+ /
213
+ '-' base {
214
+ def to_lambda
215
+ lambda {|n| -base.to_lambda.call(n)}
216
+ end
217
+ }
218
+ /
219
+ '!' base {
220
+ def to_lambda
221
+ lambda {|n| base.to_lambda.call(n) == 0 ? 1 : 0}
222
+ end
223
+ }
224
+ /
225
+ '~' base {
226
+ def to_lambda
227
+ lambda {|n| ~base.call(n)}
228
+ end
229
+ }
230
+ /
231
+ base
232
+ end
233
+
234
+ rule base
235
+ space* base_wospace space* {
236
+ def to_lambda
237
+ base_wospace.to_lambda
238
+ end
239
+ }
240
+ end
241
+
242
+ rule base_wospace
243
+ '(' expression ')' {
244
+ def to_lambda
245
+ expression.to_lambda
246
+ end
247
+ }
248
+ /
249
+ 'n' {
250
+ def to_lambda
251
+ lambda {|n| n}
252
+ end
253
+ }
254
+ /
255
+ [0-9]+ {
256
+ def to_lambda
257
+ lambda {|n| text_value.to_i}
258
+ end
259
+ }
260
+ end
261
+
262
+ rule space
263
+ " " / "\n" / "\t"
264
+ end
265
+ end
266
+ end
267
+ end
@@ -38,7 +38,7 @@ module Merb
38
38
  include ::DataMapper::Resource
39
39
  storage_names[:default] = 'merb_global_languages'
40
40
  property :id, Integer, :serial => true
41
- property :name, String, :index => :unique
41
+ property :name, String, :unique_index => true
42
42
  property :plural, Text, :lazy => false
43
43
  # validates_is_unique :name
44
44
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: merb_global
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Coles
@@ -10,7 +10,7 @@ autorequire: merb_global
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2008-06-01 00:00:00 +02:00
13
+ date: 2008-06-04 00:00:00 +02:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -22,6 +22,15 @@ dependencies:
22
22
  - !ruby/object:Gem::Version
23
23
  version: 0.9.1
24
24
  version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: treetop
27
+ version_requirement:
28
+ version_requirements: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.2.3
33
+ version:
25
34
  description: Localization (L10n) and Internationalization (i18n) support for the Merb MVC Framework
26
35
  email: alex@alexcolesportfolio.com
27
36
  executables: []
@@ -43,6 +52,7 @@ files:
43
52
  - lib/merb_global/plural.rb
44
53
  - lib/merb_global/providers.rb
45
54
  - lib/merb_global/provider.rb
55
+ - lib/merb_global/plural.treetop
46
56
  - lib/merb_global/config.rb
47
57
  - lib/merb_global/controller.rb
48
58
  - lib/merb_global/base.rb