merb_global 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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