mirror-mirror 0.10.1 → 1.0.0.rc.0

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: cbdfc822f9e30418bfe04090264219eef0c240f3
4
- data.tar.gz: d54a42086ae1068ce2c83c5b8e21e8c0cb056d7d
3
+ metadata.gz: 24a6d3d4634cce53e4a5e7a9b0e8a7cce2ede8ae
4
+ data.tar.gz: a65cb2c7376ddb3184873bfa840e7068b5016115
5
5
  SHA512:
6
- metadata.gz: 94f4cb7250db728b04c66f88c2f31b4e0eaabebb2c6613461d498bf7667bf4ad87dd3699ed612fce386a8753fef9a817d64cc824a79869b53f47dbf06b432bb2
7
- data.tar.gz: 86c6c9b12c9d9f8b379045d77f0b5505272b4007de46df9799616a688eda9a3130ebc21ddb3b4402dc4d94c4163e3c21e905f6d09e759c567a5963cb9543d3a9
6
+ metadata.gz: 29d771b7a8343953cbda5cb7f67998ba598e7bfcec17be76d6cac64087fe395275cb796e20dcd0ecac923e511759349188ea975f130a6519e47da44408fd59ad
7
+ data.tar.gz: df78fb9b32ae335c5ac2d023e13a593bede7d1b3b0caf7ea19261f6224c1164de2ad070baf788741880b30aa3c9ad28d36101bccb1f26f2061eadda8478744d1
data/README.md CHANGED
@@ -42,6 +42,211 @@ scss -r mirror-mirror/activate ...
42
42
  scss -r mirror-mirror/activate/flipped ...
43
43
  ```
44
44
 
45
+ ## Stylesheet API
46
+
47
+ ### Protecting styles from being flipped
48
+
49
+ If you have styles that should not be flipped when mirror-mirror is
50
+ activated protect them by wrapping those styles in call to the `no-flip`
51
+ mixin.
52
+
53
+ ```scss
54
+ @import "mirror-mirror";
55
+ @include no-flip {
56
+ // styles that should never be flipped
57
+ }
58
+ ```
59
+
60
+ ### Inline flipping
61
+
62
+ When the stylesheet is not flipped, a call to the inline-flip mixin will
63
+ emit the styles contained therein twice. Once normally and once flipped
64
+ with a selector scope.
65
+
66
+ ```scss
67
+ @import "mirror-mirror";
68
+ @include inline-flip {
69
+ .foo { float: left; }
70
+ .bar { border: 1px 2px 3px 4px; }
71
+ }
72
+ ```
73
+
74
+ will compile to:
75
+
76
+ ```css
77
+ .foo { float: left; }
78
+ .bar { border: 1px 2px 3px 4px; }
79
+ *[dir=rtl] .foo { float: right; }
80
+ *[dir=rtl] .bar { border: 1px 4px 3px 2px; }
81
+ ```
82
+
83
+ #### Changing the inline-flip default context
84
+
85
+ The `*[dir=rtl]` is prepended by default. The `$mirror-mirror-default-inline-context`
86
+ controls what this selector is and you can change it in your stylesheet
87
+ according to your needs.
88
+
89
+ ```scss
90
+ @import "mirror-mirror";
91
+ $mirror-mirror-default-inline-context: "body.rtl";
92
+ @include inline-flip {
93
+ .foo { float: left; }
94
+ .bar { border: 1px 2px 3px 4px; }
95
+ }
96
+ ```
97
+
98
+ will compile to:
99
+
100
+ ```css
101
+ .foo { float: left; }
102
+ .bar { border: 1px 2px 3px 4px; }
103
+ body.rtl .foo { float: right; }
104
+ body.rtl .bar { border: 1px 4px 3px 2px; }
105
+ ```
106
+
107
+ #### Inline Flipping in a Nested Context
108
+
109
+ Note that when inline flipping styles in a nested context there are a
110
+ few scenarios to consider.
111
+
112
+ By default you get the following behavior:
113
+
114
+ ```scss
115
+ @import "mirror-mirror";
116
+ $mirror-mirror-default-inline-context: ".rtl";
117
+ .context {
118
+ @include inline-flip {
119
+ .foo { float: left; }
120
+ .bar { border: 1px 2px 3px 4px; }
121
+ }
122
+ }
123
+ ```
124
+
125
+ will compile to:
126
+
127
+ ```css
128
+ .context .foo { float: left; }
129
+ .context .bar { border: 1px 2px 3px 4px; }
130
+ .context .rtl .foo { float: right; }
131
+ .context .rtl .bar { border: 1px 4px 3px 2px; }
132
+ ```
133
+
134
+ To append to the current selector context:
135
+
136
+
137
+ ```scss
138
+ @import "mirror-mirror";
139
+ .context {
140
+ @include inline-flip("&.rtl") {
141
+ .foo { float: left; }
142
+ .bar { border: 1px 2px 3px 4px; }
143
+ }
144
+ }
145
+ ```
146
+
147
+ will compile to:
148
+
149
+ ```css
150
+ .context .foo { float: left; }
151
+ .context .bar { border: 1px 2px 3px 4px; }
152
+ .context.rtl .foo { float: right; }
153
+ .context.rtl .bar { border: 1px 4px 3px 2px; }
154
+ ```
155
+
156
+ To prepend the rtl selector context:
157
+
158
+ ```scss
159
+ @import "mirror-mirror";
160
+ .context {
161
+ @include inline-flip($prepend-context: true) {
162
+ .foo { float: left; }
163
+ .bar { border: 1px 2px 3px 4px; }
164
+ }
165
+ }
166
+ ```
167
+
168
+ will compile to:
169
+
170
+ ```css
171
+ .context .foo { float: left; }
172
+ .context .bar { border: 1px 2px 3px 4px; }
173
+ *[dir=rtl] .context .foo { float: right; }
174
+ *[dir=rtl] .context .bar { border: 1px 4px 3px 2px; }
175
+ ```
176
+
177
+ Using selector combinators:
178
+
179
+ ```scss
180
+ @import "mirror-mirror";
181
+ .context {
182
+ @include inline-flip(".rtl > ", $prepend-context: true) {
183
+ .foo { float: left; }
184
+ .bar { border: 1px 2px 3px 4px; }
185
+ }
186
+ @include inline-flip("&.rtl > ") {
187
+ .bip { float: left; }
188
+ .baz { border: 1px 2px 3px 4px; }
189
+ }
190
+ }
191
+ ```
192
+
193
+ will compile to:
194
+
195
+ ```css
196
+ .context .foo { float: left; }
197
+ .context .bar { border: 1px 2px 3px 4px; }
198
+ .rtl > .context .foo { float: right; }
199
+ .rtl > .context .bar { border: 1px 4px 3px 2px; }
200
+ .context .bip { float: left; }
201
+ .context .baz { border: 1px 2px 3px 4px; }
202
+ .context.rtl > .bip { float: right; }
203
+ .context.rtl > .baz { border: 1px 4px 3px 2px; }
204
+ ```
205
+
206
+ Note: I would like to tune the defaults for this mixin according how it
207
+ is used in practice. Please let me know if the defaults seem wrong to
208
+ you.
209
+
210
+ Note #2: This mixin does not flip LTR when RTL is activated. If you need
211
+ to do this, please talk to me so that we can develop an API for it.
212
+
213
+ ### Flipping an entire stylesheet
214
+
215
+ ```scss
216
+ @import "mirror-mirror";
217
+ @include enable-mirror-flip;
218
+ // stuff to be flipped
219
+ ```
220
+
221
+ Note that if this stylesheet is imported by another stylesheet it will
222
+ affect the rest of that stylesheet. Therefore, it is not recommended to
223
+ use this mixin inside a partial stylesheet.
224
+
225
+ ### Disable flipping an entire stylesheet
226
+
227
+ ```scss
228
+ @import "mirror-mirror";
229
+ @include disable-mirror-flip;
230
+ // stuff that shouldn't be flipped
231
+ ```
232
+
233
+ Note that if this stylesheet is imported by another stylesheet it will
234
+ affect the rest of that stylesheet. Therefore, it is not recommended to
235
+ use this mixin inside a partial stylesheet unless you are using it in
236
+ conjunction with
237
+
238
+ ### Global Variables
239
+
240
+ * `$mirror-mirror-enabled` -- whether flipping is currently enabled.
241
+ this is set to the correct value when mirror-mirror is imported
242
+ according to whether it was activated at the compiler level.
243
+ * `$mirror-mirror-noflip` -- whether you are currently within a no-flip
244
+ mixin call.
245
+ * `$mirror-mirror-default-inline-context` -- the selector that is used
246
+ by inline-flip as a context selector when none is specified.
247
+ * `$mirror-mirror-inline-contexts` -- tracks the currently active inline
248
+ contexts. Don't mess with it.
249
+
45
250
  ## Contributing
46
251
 
47
252
  1. Fork it
@@ -22,7 +22,7 @@ module MirrorMirror
22
22
  end
23
23
 
24
24
  def visit(node)
25
- method = "visit_#{node_name node}"
25
+ method = "visit_#{node.class.node_name}"
26
26
  if self.respond_to?(method, true)
27
27
  self.send(method, node) {node.children = visit_children(node)}
28
28
  else
@@ -156,41 +156,25 @@ module MirrorMirror
156
156
  end
157
157
 
158
158
  def parsed_value(value, line, offset)
159
- slashify(Sass::Script::Parser.new(value, line, offset).parse)
159
+ node = Sass::Script::Parser.new(value, line, offset).parse
160
+ opts(@options) { node.perform(Sass::Environment.new) }
161
+ end
162
+
163
+ def opts(o)
164
+ v = yield
165
+ v.options = o
166
+ v
160
167
  end
161
168
 
162
169
  def literalize(expression)
163
170
  case expression
164
171
  when Sass::Script::List
165
- expression.value.map!{|v| literalize(v) }
166
- expression
172
+ opts(expression.options) { Sass::Script::List.new(expression.value.map{|v| literalize(v) }, expression.separator)}
167
173
  when Sass::Script::Funcall
168
174
  expression.send(:to_literal, expression.args.map {|a| literalize(a) })
169
175
  else
170
176
  expression
171
177
  end
172
178
  end
173
-
174
- def slashify(expression)
175
- result = _slashify(expression)
176
- if result.is_a?(Array)
177
- result = Sass::Script::List.new(result, :space)
178
- result.options = expression.options
179
- end
180
- result
181
- end
182
-
183
- def _slashify(expression)
184
- if expression.is_a?(Sass::Script::List)
185
- expression.value.map! {|v| _slashify(v) }
186
- expression.value.flatten!
187
- elsif expression.is_a?(Sass::Script::Operation)
188
- operator = Sass::Script::String.new(Sass::Script::Lexer::OPERATORS_REVERSE[expression.operator])
189
- operator.options = expression.options
190
- return [_slashify(expression.operand1), operator, _slashify(expression.operand2)]
191
- end
192
- expression
193
- end
194
-
195
179
  end
196
180
  end
@@ -5,15 +5,8 @@ module MirrorMirror
5
5
  # So that we don't have to monkeypatch it.
6
6
  module SassPatch
7
7
  def self.included(base)
8
- if base.respond_to?(:css_tree, true)
9
- # Sass >= 3.3
10
- base.send(:alias_method, :css_tree_without_mirror_mirror, :css_tree)
11
- base.send(:alias_method, :css_tree, :css_tree_with_mirror_mirror)
12
- else
13
- # Sass < 3.3
14
- base.send(:alias_method, :render_without_mirror_mirror, :render)
15
- base.send(:alias_method, :render, :render_with_mirror_mirror)
16
- end
8
+ base.send(:alias_method, :css_tree_without_mirror_mirror, :css_tree)
9
+ base.send(:alias_method, :css_tree, :css_tree_with_mirror_mirror)
17
10
  end
18
11
 
19
12
  def css_tree_with_mirror_mirror
@@ -21,16 +14,6 @@ module MirrorMirror
21
14
  MirrorVisitor.visit(root)
22
15
  root
23
16
  end
24
-
25
- def render_with_mirror_mirror
26
- Sass::Tree::Visitors::CheckNesting.visit(self)
27
- result = Sass::Tree::Visitors::Perform.visit(self)
28
- Sass::Tree::Visitors::CheckNesting.visit(result) # Check again to validate mixins
29
- result, extends = Sass::Tree::Visitors::Cssize.visit(result)
30
- Sass::Tree::Visitors::Extend.visit(result, extends)
31
- MirrorVisitor.visit(result)
32
- result.to_s
33
- end
34
17
  end
35
18
 
36
19
  module CssizePatch
@@ -20,6 +20,17 @@ module MirrorMirror::Transformation
20
20
  Sass::Script::List.new([expression], :space)
21
21
  end
22
22
  end
23
+ new_list = expression.value.map do |v|
24
+ if v.is_a?(Sass::Script::Number) && v.original =~ %r{/}
25
+ left, right = v.original.split(%r{/})
26
+ [reparse(left), Sass::Script::String.new("/"), reparse(right)].map{|e| opts(expression.options) {e}}
27
+ else
28
+ v
29
+ end
30
+ end.flatten
31
+ expression = opts(expression.options) do
32
+ Sass::Script::List.new(new_list, :space)
33
+ end
23
34
  positions = []
24
35
  position_indices = []
25
36
  expression.value.each_with_index do |v, i|
@@ -33,16 +44,22 @@ module MirrorMirror::Transformation
33
44
  positions
34
45
  end
35
46
  return expression unless positions.any?
47
+
36
48
  if positions.size > 2
37
- Sass.logger.warn("Line #{expression.line}: malformed background: #{expression.to_sass}")
49
+ Sass.logger.warn("malformed background: #{expression.to_sass}")
38
50
  return expression
39
51
  end
40
52
  # tranform the background position elements and replace the position
41
53
  # section of the shorthand with it
42
- transformed = transform_background_position(Sass::Script::List.new(positions, :space))
54
+ transformed = transform_background_position(opts(expression.options) {Sass::Script::List.new(positions, :space)})
43
55
  position_indices << position_indices.first if position_indices.size < 2
44
- expression.value[Range.new(*position_indices)] = transformed.value
45
- expression
56
+ new_value = expression.value.dup
57
+ new_value[Range.new(*position_indices)] = transformed.value
58
+ opts(expression.options) {Sass::Script::List.new(new_value, expression.separator) }
59
+ end
60
+
61
+ def reparse(string)
62
+ Sass::Script::Parser.parse(string, 1, 0).perform(Sass::Environment.new)
46
63
  end
47
64
 
48
65
  def transform_background_position(expression)
@@ -53,15 +70,23 @@ module MirrorMirror::Transformation
53
70
  end
54
71
  if expression.value.size > 2
55
72
  # positions with offsets
56
- expression.value.each_with_index do |e, i|
57
- next if i % 2 == 1
58
- expression.value[i] = flip_it(e, i / 2)
59
- end
73
+ i = -1
74
+ new_value = expression.value.map do |e|
75
+ i += 1
76
+ if i % 2 == 1
77
+ e
78
+ else
79
+ flip_it(e, i / 2)
80
+ end
81
+ end
82
+ expression = opts(expression.options) {Sass::Script::List.new(new_value, expression.separator) }
60
83
  else
61
84
  # positions
85
+ new_value = []
62
86
  expression.value.each_with_index do |e, i|
63
- expression.value[i] = flip_it(e, i)
87
+ new_value << flip_it(e, i)
64
88
  end
89
+ expression = opts(expression.options) {Sass::Script::List.new(new_value, expression.separator) }
65
90
  end
66
91
  expression
67
92
  end
@@ -77,7 +102,7 @@ module MirrorMirror::Transformation
77
102
  elsif position == 0 && e.numerator_units.first == "%"
78
103
  opts(e.options) { ONE_HUNDRED_PERCENT.minus(e) }
79
104
  elsif position == 0
80
- Sass.logger.warn("Line #{e.line}: Cannot flip background position: #{e}")
105
+ Sass.logger.warn("Cannot flip background position: #{e}")
81
106
  e
82
107
  else
83
108
  e
@@ -85,9 +110,9 @@ module MirrorMirror::Transformation
85
110
  when Sass::Script::String
86
111
  case e.value
87
112
  when "right"
88
- e.value.replace("left")
113
+ e = opts(e.options) {Sass::Script::String.new("left", e.type) }
89
114
  when "left"
90
- e.value.replace("right")
115
+ e = opts(e.options) {Sass::Script::String.new("right", e.type) }
91
116
  end
92
117
  e
93
118
  else
@@ -11,7 +11,9 @@ module MirrorMirror::Transformation
11
11
  case e
12
12
  when Sass::Script::List
13
13
  if e.value[0].is_a?(Sass::Script::Number)
14
- e.value[0] = flip_it(e.value[0])
14
+ new_list_values = e.value.dup
15
+ new_list_values[0] = flip_it(new_list_values[0])
16
+ e = opts(expression.options) { Sass::Script::List.new(new_list_values, e.separator) }
15
17
  end
16
18
  when Sass::Script::Number
17
19
  e = flip_it(e)
@@ -15,27 +15,38 @@ module MirrorMirror::Transformation
15
15
 
16
16
  def transform_expression(name, expression)
17
17
  for_each_value(expression) do |e|
18
- if grad = find_linear_gradient(e)
19
- if direction?(grad.args[0])
20
- grad.args[0] = flip(grad.args[0])
18
+ replace_linear_gradient(e) do |gradient_args|
19
+ if direction?(gradient_args[0])
20
+ gradient_args[0] = flip(gradient_args[0])
21
21
  end
22
- e
23
- else
24
- e
22
+ gradient_args
25
23
  end
26
24
  end
27
25
  end
28
26
 
29
- def find_linear_gradient(expression)
27
+ def replace_linear_gradient(expression, &block)
30
28
  case expression
31
29
  when Sass::Script::List
32
- expression.value.each do |v|
33
- grad = find_linear_gradient(v)
34
- return grad if grad
30
+ new_list = expression.value.map do |v|
31
+ replace_linear_gradient(v, &block)
32
+ end
33
+ opts(expression.options) { Sass::Script::List.new(new_list, expression.separator) }
34
+ when Sass::Script::String
35
+ if expression.value =~ /^((?:-(?:moz|webkit|o|ms)-)?(?:repeating-)?linear-gradient)\(([^)]+)\)$/
36
+ list = Sass::Script::Parser.new($2, 1, 0).parse
37
+ list = list.perform(Sass::Environment.new)
38
+ args = unless list.is_a?(Sass::Script::List) && list.separator == :comma
39
+ [list]
40
+ else
41
+ list.value.dup
42
+ end
43
+ new_args = block.call(args)
44
+ opts(expression.options) { Sass::Script::String.new("#{$1}(#{new_args.join(", ")})")}
45
+ else
46
+ expression
35
47
  end
36
- nil
37
- when Sass::Script::Funcall
38
- expression if expression.name =~ /^(-(moz|webkit|o|ms)-)?(repeating-)?linear-gradient$/
48
+ else
49
+ expression
39
50
  end
40
51
  end
41
52
 
@@ -65,8 +76,8 @@ module MirrorMirror::Transformation
65
76
  else
66
77
  case direction
67
78
  when Sass::Script::List
68
- direction.value.map!{|v| flip(v) }
69
- direction
79
+ new_values = direction.value.map{|v| flip(v) }
80
+ opts(direction.options) { Sass::Script::List.new(new_values, direction.separator) }
70
81
  when Sass::Script::String
71
82
  if direction.value == "left"
72
83
  opts(direction.options) { Sass::Script::String.new("right") }
@@ -56,12 +56,13 @@ module MirrorMirror::Transformation
56
56
  end
57
57
 
58
58
  def for_each_value(expression)
59
- if expression.is_a?(Sass::Script::List) && expression.separator == :comma
60
- expression.value.map! {|e| yield(e) }
61
- expression
62
- else
63
- yield(expression)
64
- end
59
+ if expression.is_a?(Sass::Script::List) && expression.separator == :comma
60
+ new_values = expression.value.map {|e| yield(opts(expression.options) {e}) }
61
+ new_values.each {|e| e.options ||= expression.options }
62
+ opts(expression.options) { Sass::Script::List.new(new_values, :comma) }
63
+ else
64
+ yield(expression)
65
+ end
65
66
  end
66
67
  end
67
68
  end
@@ -17,7 +17,9 @@ module MirrorMirror::Transformation
17
17
  if expression.is_a?(Sass::Script::List) &&
18
18
  expression.separator == :space &&
19
19
  expression.value.size == 4
20
- expression.value[1], expression.value[3] = expression.value[3], expression.value[1]
20
+ new_value = expression.value.dup
21
+ new_value[1], new_value[3] = new_value[3], new_value[1]
22
+ expression = opts(expression.options) { Sass::Script::List.new(new_value, expression.separator) }
21
23
  end
22
24
  expression
23
25
  end
@@ -1,3 +1,3 @@
1
1
  module MirrorMirror
2
- VERSION = "0.10.1"
2
+ VERSION = "1.0.0.rc.0"
3
3
  end
@@ -15,7 +15,7 @@ $mirror-mirror-inline-contexts: ();
15
15
  @if $mirror-mirror-noflip {
16
16
  @warn "Enabled flipping in a no-flip. Ignoring.";
17
17
  } @else {
18
- $mirror-mirror-enabled: true;
18
+ $mirror-mirror-enabled: true !global;
19
19
  @-mirror-mirror {
20
20
  enabled: true;
21
21
  @content;
@@ -27,7 +27,7 @@ $mirror-mirror-inline-contexts: ();
27
27
  @if $mirror-mirror-noflip {
28
28
  @warn "Disabled flipping in a no-flip. Ignoring.";
29
29
  } @else {
30
- $mirror-mirror-enabled: false;
30
+ $mirror-mirror-enabled: false !global;
31
31
  @-mirror-mirror {
32
32
  enabled: false;
33
33
  @content;
@@ -39,11 +39,11 @@ $mirror-mirror-inline-contexts: ();
39
39
  @if $mirror-mirror-noflip or not $mirror-mirror-enabled {
40
40
  @content;
41
41
  } @else {
42
- $mirror-mirror-noflip: true;
42
+ $mirror-mirror-noflip: true !global;
43
43
  @-mirror-mirror no-flip {
44
44
  @content;
45
45
  }
46
- $mirror-mirror-noflip: false;
46
+ $mirror-mirror-noflip: false !global;
47
47
  }
48
48
  }
49
49
 
@@ -56,11 +56,11 @@ $mirror-mirror-inline-contexts: ();
56
56
  @content;
57
57
  @-mirror-mirror inline-flip {
58
58
  @if not index($mirror-mirror-inline-contexts, $selector-context) {
59
- $mirror-mirror-inline-contexts: append($mirror-mirror-inline-contexts, $selector-context);
59
+ $mirror-mirror-inline-contexts: append($mirror-mirror-inline-contexts, $selector-context) !global;
60
60
  #{$selector-context} #{if($prepend-context, '&', null)} {
61
61
  @content;
62
62
  }
63
- $mirror-mirror-inline-contexts: mm-car($mirror-mirror-inline-contexts);
63
+ $mirror-mirror-inline-contexts: mm-car($mirror-mirror-inline-contexts) !global;
64
64
  }
65
65
  }
66
66
  }
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mirror-mirror
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.1
4
+ version: 1.0.0.rc.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Eppstein
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-14 00:00:00.000000000 Z
11
+ date: 2014-06-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sass
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - <
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: '3.3'
19
+ version: 3.3.8
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - <
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: '3.3'
26
+ version: 3.3.8
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -98,9 +98,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
98
98
  version: '0'
99
99
  required_rubygems_version: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - '>='
101
+ - - '>'
102
102
  - !ruby/object:Gem::Version
103
- version: '0'
103
+ version: 1.3.1
104
104
  requirements: []
105
105
  rubyforge_project:
106
106
  rubygems_version: 2.0.3