measured 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8c85f59c2c66ee777904c96802d3c647887dd1fb
4
- data.tar.gz: 59e9b89428cab80194f786aa714cb9bb4396473c
3
+ metadata.gz: 764bee6ab868a789054d59899c4537f87683066f
4
+ data.tar.gz: c15508d99d6154c9b1d2cef708d45d914d7f7071
5
5
  SHA512:
6
- metadata.gz: afaf1dc4ad37532af6235a2b4737801096c7cfb0984f8c38c3038659db3558febc09b5770325b0cb246ed916fca852e21503bac853d0bbdd7de7aea4c579fde3
7
- data.tar.gz: ad503908ae66eebe29f56830a414c072b75753fe4698b36402d73c58e2a8b53b333f249a27a325af0510a2610f36f8294036c769f1aa1cd1aabb8de7335916b2
6
+ metadata.gz: abfd4a35d558578bbef37100de6c2f2f16d6e8557bc05f892c549a93c5adce7d61c5102bb7bad73c00fa3acf0a245e7cddefb26a86228d09fb0dd2dc66b0a4a6
7
+ data.tar.gz: 736f30253c7df7f6fd63ccf7d6c1db550ee09420bc0709473287aa8494ca6307b536bb3aa7fee74ff5cea1bdf6cb4ab84d4d1ef35cd0c14c75601d2f7c698564
data/README.md CHANGED
@@ -185,12 +185,23 @@ class Measured::Thing < Measured::Measurable
185
185
 
186
186
  conversion.add :different_unit
187
187
  aliases: [:du],
188
- value: [Rational(2/3), "another_unit"] # Conversion rate can be Rational, otherwise it is coerced to BigDecimal
188
+ value: [Rational(2,3), "another_unit"] # Conversion rate can be Rational, otherwise it is coerced to BigDecimal
189
+ end
190
+ ```
191
+
192
+ By default all names and aliases and case insensitive. If you would like to create a new unit with names and aliases that are case sensitive, you should subclass `Measured::CaseSensitiveMeasurable` instead. Other than case sensitivity, both classes are identical to each other.
193
+
194
+ ```ruby
195
+ class Measured::Thing < Measured::CaseSensitiveMeasurable
196
+ conversion.set_base :base_unit,
197
+ aliases: [:bu]
189
198
  end
190
199
  ```
191
200
 
192
201
  The base unit takes no value. Values for conversion units can be defined as a string with two tokens `"number unit"` or as an array with two elements. The numbers must be `Rational` or `BigDecimal`, else they will be coerced to `BigDecimal`. Conversion paths don't have to be direct as a conversion table will be built for all possible conversions using tree traversal.
193
202
 
203
+ The `case_sensitive` flag, which is false by default, gets taken into account any time you attempt to reference a unit by name or alias.
204
+
194
205
  You can also open up the existing classes and add a new conversion:
195
206
 
196
207
  ```ruby
data/lib/measured/base.rb CHANGED
@@ -29,3 +29,4 @@ require "measured/unit"
29
29
  require "measured/conversion"
30
30
  require "measured/conversion_table"
31
31
  require "measured/measurable"
32
+ require "measured/case_sensitive_measurable"
@@ -0,0 +1,7 @@
1
+ class Measured::CaseSensitiveMeasurable < Measured::Measurable
2
+ class << self
3
+ def conversion
4
+ @conversion ||= Measured::Conversion.new(case_sensitive: true)
5
+ end
6
+ end
7
+ end
@@ -1,11 +1,12 @@
1
1
  class Measured::Conversion
2
2
  ARBITRARY_CONVERSION_PRECISION = 20
3
- def initialize
3
+ def initialize(case_sensitive: false)
4
4
  @base_unit = nil
5
5
  @units = []
6
+ @case_sensitive = case_sensitive
6
7
  end
7
8
 
8
- attr_reader :base_unit, :units
9
+ attr_reader :base_unit, :units, :case_sensitive
9
10
 
10
11
  def set_base(unit_name, aliases: [])
11
12
  add_new_unit(unit_name, aliases: aliases, base: true)
@@ -24,11 +25,13 @@ class Measured::Conversion
24
25
  end
25
26
 
26
27
  def unit_or_alias?(name)
27
- unit_names_with_aliases.include?(name.to_s)
28
+ @units.each{|unit| return true if unit.names_include?(name, case_sensitive: @case_sensitive)}
29
+ false
28
30
  end
29
31
 
30
32
  def unit?(name)
31
- unit_names.include?(name.to_s)
33
+ @units.each{|unit| return true if unit.name_eql?(name, case_sensitive: @case_sensitive)}
34
+ false
32
35
  end
33
36
 
34
37
  def to_unit_name(name)
@@ -79,7 +82,7 @@ class Measured::Conversion
79
82
 
80
83
  def unit_for(name)
81
84
  @units.each do |unit|
82
- return unit if unit.names.include?(name.to_s)
85
+ return unit if unit.names_include?(name, case_sensitive: @case_sensitive)
83
86
  end
84
87
 
85
88
  raise Measured::UnitError, "Cannot find unit for #{ name }."
data/lib/measured/unit.rb CHANGED
@@ -10,6 +10,22 @@ class Measured::Unit
10
10
 
11
11
  attr_reader :name, :names, :conversion_amount, :conversion_unit
12
12
 
13
+ def name_eql?(name_to_compare, case_sensitive: false)
14
+ return false unless name_to_compare.present?
15
+ name_to_compare = name_to_compare.to_s
16
+ case_sensitive ? @name.eql?(name_to_compare) : case_insensitive(@name).include?(name_to_compare.downcase)
17
+ end
18
+
19
+ def names_include?(name_to_compare, case_sensitive: false)
20
+ return false unless name_to_compare.present?
21
+ name_to_compare = name_to_compare.to_s
22
+ case_sensitive ? @names.include?(name_to_compare) : case_insensitive(@names).include?(name_to_compare.downcase)
23
+ end
24
+
25
+ def add_alias(aliases)
26
+ @names = (@names << aliases).flatten.sort unless aliases.nil? || aliases.empty?
27
+ end
28
+
13
29
  def to_s
14
30
  if conversion_string
15
31
  "#{ @name } (#{ conversion_string })"
@@ -40,6 +56,10 @@ class Measured::Unit
40
56
 
41
57
  private
42
58
 
59
+ def case_insensitive(comparison)
60
+ [comparison].flatten.map(&:downcase)
61
+ end
62
+
43
63
  def conversion_string
44
64
  "#{ conversion_amount } #{ conversion_unit }" if @conversion_amount || @conversion_unit
45
65
  end
@@ -1,3 +1,3 @@
1
1
  module Measured
2
- VERSION = "1.1.0"
2
+ VERSION = "1.2.0"
3
3
  end
@@ -0,0 +1,227 @@
1
+ require "test_helper"
2
+
3
+ class Measured::CaseSensitiveMeasurableTest < ActiveSupport::TestCase
4
+
5
+ setup do
6
+ @magic = CaseSensitiveMagic.new(10, :magic_missile)
7
+ end
8
+
9
+ test "#initialize requires two params, the amount and the unit" do
10
+ assert_nothing_raised do
11
+ CaseSensitiveMagic.new(1, "fireball")
12
+ end
13
+
14
+ assert_raises ArgumentError do
15
+ CaseSensitiveMagic.new(1)
16
+ end
17
+ end
18
+
19
+ test "#initialize converts unit to string from symbol" do
20
+ magic = CaseSensitiveMagic.new(1, :arcane)
21
+ assert_equal "arcane", magic.unit
22
+ end
23
+
24
+ test "#initialize raises if it is an unknown unit" do
25
+ assert_raises Measured::UnitError do
26
+ CaseSensitiveMagic.new(1, "slash")
27
+ end
28
+ end
29
+
30
+ test "#initialize converts numbers and strings into BigDecimal" do
31
+ assert_equal BigDecimal(1), CaseSensitiveMagic.new(1, :arcane).value
32
+ assert_equal BigDecimal("2.3"), CaseSensitiveMagic.new("2.3", :arcane).value
33
+ assert_equal BigDecimal("5"), CaseSensitiveMagic.new("5", :arcane).value
34
+ end
35
+
36
+ test "#initialize converts floats to strings and then to BigDecimal so it does not raise" do
37
+ assert_equal BigDecimal("1.2345"), CaseSensitiveMagic.new(1.2345, :fire).value
38
+ end
39
+
40
+ test "#initialize converts numbers and strings BigDecimal and does not round large numbers" do
41
+ assert_equal BigDecimal(9.1234572342342, 14), CaseSensitiveMagic.new(9.1234572342342, :fire).value
42
+ assert_equal BigDecimal("9.1234572342342"), CaseSensitiveMagic.new(9.1234572342342, :fire).value
43
+ end
44
+
45
+ test "#initialize converts to the base unit name" do
46
+ assert_equal "fireball", CaseSensitiveMagic.new(1, :fire).unit
47
+ end
48
+
49
+ test "#initialize raises an expected error when initializing with nil value" do
50
+ exception = assert_raises(Measured::UnitError) do
51
+ CaseSensitiveMagic.new(nil, :fire)
52
+ end
53
+ assert_equal "Unit value cannot be nil", exception.message
54
+ end
55
+
56
+ test "#initialize raises an expected error when initializing with nil unit" do
57
+ exception = assert_raises(Measured::UnitError) do
58
+ CaseSensitiveMagic.new(1, nil)
59
+ end
60
+ assert_equal "Unit cannot be blank", exception.message
61
+ end
62
+
63
+ test "#initialize raises an expected error when initializing with empty string value" do
64
+ exception = assert_raises(Measured::UnitError) do
65
+ CaseSensitiveMagic.new("", :fire)
66
+ end
67
+ assert_equal "Unit value cannot be blank", exception.message
68
+ end
69
+
70
+ test "#initialize raises an expected error when initializing with empty string unit" do
71
+ exception = assert_raises(Measured::UnitError) do
72
+ CaseSensitiveMagic.new(1, "")
73
+ end
74
+ assert_equal "Unit cannot be blank", exception.message
75
+ end
76
+
77
+ test "#unit allows you to read the unit string" do
78
+ assert_equal "magic_missile", @magic.unit
79
+ end
80
+
81
+ test "#value allows you to read the numeric value" do
82
+ assert_equal BigDecimal(10), @magic.value
83
+ end
84
+
85
+ test ".conversion is set and cached" do
86
+ conversion = CaseSensitiveMagic.conversion
87
+
88
+ assert_instance_of Measured::Conversion, conversion
89
+ assert_equal conversion, CaseSensitiveMagic.conversion
90
+ end
91
+
92
+ test ".conversion is set to case sensitive" do
93
+ conversion = CaseSensitiveMagic.conversion
94
+
95
+ assert_instance_of Measured::Conversion, conversion
96
+ assert_equal conversion, CaseSensitiveMagic.conversion
97
+ assert_equal true, conversion.case_sensitive
98
+ end
99
+
100
+ test ".units returns just the base units" do
101
+ assert_equal ["arcane", "fireball", "ice", "magic_missile", "ultima"], CaseSensitiveMagic.units
102
+ end
103
+
104
+ test ".units_with_aliases returns all units" do
105
+ assert_equal ["arcane", "fire", "fireball", "fireballs", "ice", "magic_missile", "magic_missiles", "ultima"], CaseSensitiveMagic.units_with_aliases
106
+ end
107
+
108
+ test ".valid_unit? looks at the list of units and aliases" do
109
+ assert CaseSensitiveMagic.valid_unit?("fire")
110
+ assert CaseSensitiveMagic.valid_unit?("fireball")
111
+ assert CaseSensitiveMagic.valid_unit?(:ice)
112
+ refute CaseSensitiveMagic.valid_unit?("junk")
113
+ end
114
+
115
+ test ".name looks at the class name" do
116
+ module Example
117
+ class VeryComplexThing < Measured::Measurable ; end
118
+ end
119
+
120
+ assert_equal "case sensitive magic", CaseSensitiveMagic.name
121
+ assert_equal "measurable", Measured::Measurable.name
122
+ assert_equal "very complex thing", Example::VeryComplexThing.name
123
+ end
124
+
125
+ test "#convert_to raises on an invalid unit" do
126
+ assert_raises Measured::UnitError do
127
+ @magic.convert_to(:punch)
128
+ end
129
+ end
130
+
131
+ test "#convert_to returns a new object of the same type in the new unit" do
132
+ converted = @magic.convert_to(:arcane)
133
+
134
+ assert_equal converted, @magic
135
+ refute_equal converted.object_id, @magic.object_id
136
+ assert_equal BigDecimal(10), @magic.value
137
+ assert_equal "magic_missile", @magic.unit
138
+ assert_equal BigDecimal(1), converted.value
139
+ assert_equal "arcane", converted.unit
140
+ end
141
+
142
+ test "#convert_to from and to the same unit returns the same object" do
143
+ converted = @magic.convert_to(@magic.unit)
144
+ assert_equal converted.object_id, @magic.object_id
145
+ end
146
+
147
+ test "#convert_to! replaces the existing object with a new version in the new unit" do
148
+ converted = @magic.convert_to!(:arcane)
149
+
150
+ assert_equal converted, @magic
151
+ assert_equal BigDecimal(1), @magic.value
152
+ assert_equal "arcane", @magic.unit
153
+ assert_equal BigDecimal(1), converted.value
154
+ assert_equal "arcane", converted.unit
155
+ end
156
+
157
+ test "#to_s outputs the number and the unit" do
158
+ assert_equal "10 fireball", CaseSensitiveMagic.new(10, :fire).to_s
159
+ assert_equal "1.234 magic_missile", CaseSensitiveMagic.new("1.234", :magic_missile).to_s
160
+ end
161
+
162
+ test "#inspect shows the number and the unit" do
163
+ assert_equal "#<CaseSensitiveMagic: 10.0 fireball>", CaseSensitiveMagic.new(10, :fire).inspect
164
+ assert_equal "#<CaseSensitiveMagic: 1.234 magic_missile>", CaseSensitiveMagic.new(1.234, :magic_missile).inspect
165
+ end
166
+
167
+ test "#<=> compares regardless of the unit" do
168
+ assert_equal -1, @magic <=> CaseSensitiveMagic.new(10, :fire)
169
+ assert_equal 1, @magic <=> CaseSensitiveMagic.new(9, :magic_missile)
170
+ assert_equal 0, @magic <=> CaseSensitiveMagic.new(10, :magic_missile)
171
+ assert_equal -1, @magic <=> CaseSensitiveMagic.new(11, :magic_missile)
172
+ end
173
+
174
+ test "#<=> compares against zero" do
175
+ assert_equal 1, @magic <=> 0
176
+ assert_equal 1, @magic <=> BigDecimal.new(0)
177
+ assert_equal 1, @magic <=> 0.00
178
+ assert_equal -1, CaseSensitiveMagic.new(-1, :magic_missile) <=> 0
179
+ end
180
+
181
+ test "#== should be the same if the classes, unit, and amount match" do
182
+ assert @magic == @magic
183
+ assert CaseSensitiveMagic.new(10, :magic_missile) == CaseSensitiveMagic.new("10", "magic_missile")
184
+ assert CaseSensitiveMagic.new(1, :arcane) == CaseSensitiveMagic.new(10, :magic_missile)
185
+ refute CaseSensitiveMagic.new(1, :arcane) == CaseSensitiveMagic.new(10.1, :magic_missile)
186
+ end
187
+
188
+ test "#== should be the same if the classes and amount match but the unit does not so they convert" do
189
+ assert CaseSensitiveMagic.new(2, :magic_missile) == CaseSensitiveMagic.new("1", "ice")
190
+ end
191
+
192
+ test "#== compares against zero" do
193
+ assert CaseSensitiveMagic.new(0, :fire) == 0
194
+ assert CaseSensitiveMagic.new(0, :magic_missile) == 0
195
+ assert CaseSensitiveMagic.new(0, :fire) == BigDecimal.new(0)
196
+ assert CaseSensitiveMagic.new(0, :fire) == 0.00
197
+ refute @magic == 0
198
+ refute @magic == BigDecimal.new(0)
199
+ end
200
+
201
+ test "#> and #< should compare measurements" do
202
+ assert CaseSensitiveMagic.new(10, :magic_missile) < CaseSensitiveMagic.new(20, :magic_missile)
203
+ refute CaseSensitiveMagic.new(10, :magic_missile) > CaseSensitiveMagic.new(20, :magic_missile)
204
+ end
205
+
206
+ test "#> and #< should compare measurements of different units" do
207
+ assert CaseSensitiveMagic.new(10, :magic_missile) < CaseSensitiveMagic.new(100, :ice)
208
+ refute CaseSensitiveMagic.new(10, :magic_missile) > CaseSensitiveMagic.new(100, :ice)
209
+ end
210
+
211
+ test "#> and #< should compare against zero" do
212
+ assert @magic > 0
213
+ assert @magic > BigDecimal.new(0)
214
+ assert @magic > 0.00
215
+ assert CaseSensitiveMagic.new(-1, :arcane) < 0
216
+ refute @magic < 0
217
+ refute CaseSensitiveMagic.new(-1, :arcane) > 0
218
+ end
219
+
220
+ test "#eql? should be the same if the classes and amount match, and unit is converted" do
221
+ assert @magic == @magic
222
+ assert CaseSensitiveMagic.new(10, :magic_missile) == CaseSensitiveMagic.new("10", "magic_missile")
223
+ assert CaseSensitiveMagic.new(1, :arcane) == CaseSensitiveMagic.new(10, :magic_missile)
224
+ refute CaseSensitiveMagic.new(1, :arcane) == CaseSensitiveMagic.new(10.1, :magic_missile)
225
+ end
226
+
227
+ end
@@ -66,20 +66,57 @@ class Measured::ConversionTest < ActiveSupport::TestCase
66
66
 
67
67
  assert @conversion.unit?(:inch)
68
68
  assert @conversion.unit?("m")
69
+ assert @conversion.unit?("M")
69
70
  refute @conversion.unit?("in")
70
71
  refute @conversion.unit?(:yard)
71
72
  end
72
73
 
74
+ test "#unit? takes into account case_sensitive flag" do
75
+ conversion = Measured::Conversion.new(case_sensitive: true)
76
+ conversion.set_base :m
77
+ conversion.add :inch, aliases: [:in], value: "0.0254 meter"
78
+
79
+ assert conversion.unit?(:inch)
80
+ assert conversion.unit?("m")
81
+ refute conversion.unit?("M")
82
+ refute conversion.unit?("in")
83
+ end
84
+
85
+ test "#unit? with blank and nil arguments" do
86
+ refute @conversion.unit?("")
87
+ refute @conversion.unit?(nil)
88
+ end
89
+
73
90
  test "#unit_or_alias? checks if the unit is part of the units but not aliases" do
74
91
  @conversion.set_base :m
75
92
  @conversion.add :inch, aliases: [:in], value: "0.0254 meter"
76
93
 
77
94
  assert @conversion.unit_or_alias?(:inch)
78
95
  assert @conversion.unit_or_alias?("m")
96
+ assert @conversion.unit_or_alias?(:IN)
79
97
  assert @conversion.unit_or_alias?("in")
80
98
  refute @conversion.unit_or_alias?(:yard)
81
99
  end
82
100
 
101
+ test "#unit_or_alias? takes into account case_sensitive flag" do
102
+ conversion = Measured::Conversion.new(case_sensitive: true)
103
+ conversion.set_base :m
104
+ conversion.add :inch, aliases: [:in], value: "0.0254 meter"
105
+
106
+ assert conversion.unit_or_alias?(:inch)
107
+ assert conversion.unit_or_alias?("m")
108
+ refute conversion.unit_or_alias?(:M)
109
+ refute conversion.unit_or_alias?("IN")
110
+ end
111
+
112
+ test "#unit_or_alias? with blank and nil arguments" do
113
+ @conversion.set_base :m
114
+ @conversion.add :inch, aliases: [:in], value: "0.0254 meter"
115
+
116
+ refute @conversion.unit_or_alias?("")
117
+ refute @conversion.unit_or_alias?(nil)
118
+ end
119
+
83
120
  test "#to_unit_name converts a unit name to its base unit" do
84
121
  assert_equal "fireball", Magic.conversion.to_unit_name("fire")
85
122
  end
@@ -18,6 +18,26 @@ class Magic < Measured::Measurable
18
18
 
19
19
  end
20
20
 
21
+ class CaseSensitiveMagic < Measured::CaseSensitiveMeasurable
22
+
23
+ conversion.set_base :magic_missile,
24
+ aliases: [:magic_missiles]
25
+
26
+ conversion.add :fireball,
27
+ aliases: [:fire, :fireballs],
28
+ value: "2/3 magic_missile"
29
+
30
+ conversion.add :ice,
31
+ value: "2 magic_missile"
32
+
33
+ conversion.add :arcane,
34
+ value: "10 magic_missile"
35
+
36
+ conversion.add :ultima,
37
+ value: "10 arcane"
38
+
39
+ end
40
+
21
41
  class OtherFakeSystem < Measured::Measurable
22
42
 
23
43
  conversion.set_base :other_fake_base
data/test/unit_test.rb CHANGED
@@ -13,6 +13,70 @@ class Measured::UnitTest < ActiveSupport::TestCase
13
13
  assert_equal ["cake", "pie", "sweets"], Measured::Unit.new(:pie, aliases: ["cake", :sweets]).names
14
14
  end
15
15
 
16
+ test "#name_eql?" do
17
+ assert @unit.name_eql?("pIe")
18
+ refute @unit.name_eql?("pastry")
19
+ end
20
+
21
+ test "#name_eql? with case_sensitive true" do
22
+ assert @unit.name_eql?("pie", case_sensitive: true)
23
+ refute @unit.name_eql?("Pie", case_sensitive: true)
24
+ end
25
+
26
+ test "#name_eql? with empty string" do
27
+ assert @unit.name_eql?("pie")
28
+ refute @unit.name_eql?("")
29
+ end
30
+
31
+ test "#names_include?" do
32
+ unit = Measured::Unit.new(:pie, aliases:["cake", "tart"])
33
+ assert unit.names_include?("pie")
34
+ assert unit.names_include?("caKe")
35
+ assert unit.names_include?("taRt")
36
+ refute unit.names_include?("pastry")
37
+ end
38
+
39
+ test "#names_include? with case_sensitive true" do
40
+ unit = Measured::Unit.new(:pie, aliases:["cake", "tart"])
41
+ assert unit.names_include?("pie", case_sensitive: true)
42
+ assert unit.names_include?("cake", case_sensitive: true)
43
+ refute unit.names_include?("TART", case_sensitive: true)
44
+ end
45
+
46
+ test "#names_include? with empty string" do
47
+ unit = Measured::Unit.new(:pie, aliases: ["cake", "tart"])
48
+ assert unit.names_include?("cake")
49
+ refute unit.names_include?("")
50
+ end
51
+
52
+ test "#add_alias with string" do
53
+ unit = Measured::Unit.new(:pie, aliases: ["cake"], value: "10 cake")
54
+ assert_equal ["cake", "pie"], unit.names
55
+ unit.add_alias("pastry")
56
+ assert_equal ["cake", "pastry", "pie"], unit.names
57
+ end
58
+
59
+ test "#add_alias with array" do
60
+ unit = Measured::Unit.new(:pie, aliases: ["cake"], value: "10 cake")
61
+ assert_equal ["cake", "pie"], unit.names
62
+ unit.add_alias(["pastry", "tart", "turnover"])
63
+ assert_equal ["cake", "pastry", "pie", "tart", "turnover"], unit.names
64
+ end
65
+
66
+ test "#add_alias with nil" do
67
+ unit = Measured::Unit.new(:pie, aliases: ["cake"], value: "10 cake")
68
+ assert_equal ["cake", "pie"], unit.names
69
+ unit.add_alias(nil)
70
+ assert_equal ["cake", "pie"], unit.names
71
+ end
72
+
73
+ test "#add_alias with empty string" do
74
+ unit = Measured::Unit.new(:pie, aliases: ["cake"], value: "10 cake")
75
+ assert_equal ["cake", "pie"], unit.names
76
+ unit.add_alias("")
77
+ assert_equal ["cake", "pie"], unit.names
78
+ end
79
+
16
80
  test "#initialize parses out the unit and the number part" do
17
81
  assert_equal BigDecimal(10), @unit.conversion_amount
18
82
  assert_equal "cake", @unit.conversion_unit
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: measured
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin McPhillips
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-12 00:00:00.000000000 Z
11
+ date: 2015-09-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -97,6 +97,7 @@ files:
97
97
  - lib/measured.rb
98
98
  - lib/measured/arithmetic.rb
99
99
  - lib/measured/base.rb
100
+ - lib/measured/case_sensitive_measurable.rb
100
101
  - lib/measured/conversion.rb
101
102
  - lib/measured/conversion_table.rb
102
103
  - lib/measured/measurable.rb
@@ -108,6 +109,7 @@ files:
108
109
  - repodb.yml
109
110
  - shipit.rubygems.yml
110
111
  - test/arithmetic_test.rb
112
+ - test/case_sensitive_measurable_test.rb
111
113
  - test/conversion_table_test.rb
112
114
  - test/conversion_test.rb
113
115
  - test/measurable_test.rb
@@ -137,12 +139,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
137
139
  version: '0'
138
140
  requirements: []
139
141
  rubyforge_project:
140
- rubygems_version: 2.2.2
142
+ rubygems_version: 2.2.3
141
143
  signing_key:
142
144
  specification_version: 4
143
145
  summary: Encapsulate measurements with their units in Ruby
144
146
  test_files:
145
147
  - test/arithmetic_test.rb
148
+ - test/case_sensitive_measurable_test.rb
146
149
  - test/conversion_table_test.rb
147
150
  - test/conversion_test.rb
148
151
  - test/measurable_test.rb