measured 1.0.0 → 1.1.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: 6c3f21a067bd19800087dbdd098e55e0355c2584
4
- data.tar.gz: 973ff94aed9323f0beb2875cbe944fd0dcb3d405
3
+ metadata.gz: 8c85f59c2c66ee777904c96802d3c647887dd1fb
4
+ data.tar.gz: 59e9b89428cab80194f786aa714cb9bb4396473c
5
5
  SHA512:
6
- metadata.gz: a89c2dd0e93e0c348e76c493bd415ec5cc8aee7f2730d8a615d7f2cf208599ea94624f8994a1086d13bfb858f7f67528f011bdc87214deafec19a8af02a01625
7
- data.tar.gz: e10e92567d23959d4c0fcf1df0b52bcef1624d105059890c38bfecf79a8cf66d01081b1e059efb6452575f4a1d92d63258a37a6d4e70e7ed010f8b96d454c8f3
6
+ metadata.gz: afaf1dc4ad37532af6235a2b4737801096c7cfb0984f8c38c3038659db3558febc09b5770325b0cb246ed916fca852e21503bac853d0bbdd7de7aea4c579fde3
7
+ data.tar.gz: ad503908ae66eebe29f56830a414c072b75753fe4698b36402d73c58e2a8b53b333f249a27a325af0510a2610f36f8294036c769f1aa1cd1aabb8de7335916b2
data/README.md CHANGED
@@ -181,7 +181,6 @@ class Measured::Thing < Measured::Measurable
181
181
 
182
182
  conversion.add :another_unit, # Add a second unit to the system
183
183
  aliases: [:au], # All units allow aliases, as long as they are unique
184
- case_sensitive: true, # Defaults to false; applies to name and aliases
185
184
  value: ["1.5 base_unit"] # The conversion rate to another unit
186
185
 
187
186
  conversion.add :different_unit
@@ -192,8 +191,6 @@ end
192
191
 
193
192
  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.
194
193
 
195
- 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.
196
-
197
194
  You can also open up the existing classes and add a new conversion:
198
195
 
199
196
  ```ruby
@@ -7,12 +7,12 @@ class Measured::Conversion
7
7
 
8
8
  attr_reader :base_unit, :units
9
9
 
10
- def set_base(unit_name, aliases: [], case_sensitive: false)
11
- add_new_unit(unit_name, aliases: aliases, case_sensitive: case_sensitive, base: true)
10
+ def set_base(unit_name, aliases: [])
11
+ add_new_unit(unit_name, aliases: aliases, base: true)
12
12
  end
13
13
 
14
- def add(unit_name, aliases: [], case_sensitive: false, value:)
15
- add_new_unit(unit_name, aliases: aliases, case_sensitive: case_sensitive, value: value)
14
+ def add(unit_name, aliases: [], value:)
15
+ add_new_unit(unit_name, aliases: aliases, value: value)
16
16
  end
17
17
 
18
18
  def unit_names_with_aliases
@@ -24,13 +24,11 @@ class Measured::Conversion
24
24
  end
25
25
 
26
26
  def unit_or_alias?(name)
27
- @units.each{|unit| return true if unit.names_include?(name)}
28
- false
27
+ unit_names_with_aliases.include?(name.to_s)
29
28
  end
30
29
 
31
30
  def unit?(name)
32
- @units.each{|unit| return true if unit.name_eql?(name)}
33
- false
31
+ unit_names.include?(name.to_s)
34
32
  end
35
33
 
36
34
  def to_unit_name(name)
@@ -55,7 +53,7 @@ class Measured::Conversion
55
53
 
56
54
  private
57
55
 
58
- def add_new_unit(unit_name, aliases:, case_sensitive: false, value: nil, base: false)
56
+ def add_new_unit(unit_name, aliases:, value: nil, base: false)
59
57
  if base && @base_unit
60
58
  raise Measured::UnitError, "Can only have one base unit. Adding #{ unit_name } but already defined #{ @base_unit }."
61
59
  elsif !base && !@base_unit
@@ -64,7 +62,7 @@ class Measured::Conversion
64
62
 
65
63
  check_for_duplicate_unit_names([unit_name] + aliases)
66
64
 
67
- unit = Measured::Unit.new(unit_name, aliases: aliases, case_sensitive: case_sensitive, value: value)
65
+ unit = Measured::Unit.new(unit_name, aliases: aliases, value: value)
68
66
  @units << unit
69
67
  @base_unit = unit if base
70
68
 
@@ -81,7 +79,7 @@ class Measured::Conversion
81
79
 
82
80
  def unit_for(name)
83
81
  @units.each do |unit|
84
- return unit if unit.names_include?(name.to_s)
82
+ return unit if unit.names.include?(name.to_s)
85
83
  end
86
84
 
87
85
  raise Measured::UnitError, "Cannot find unit for #{ name }."
data/lib/measured/unit.rb CHANGED
@@ -1,27 +1,14 @@
1
1
  class Measured::Unit
2
2
  include Comparable
3
3
 
4
- def initialize(name, aliases: [], case_sensitive: false, value: nil)
4
+ def initialize(name, aliases: [], value: nil)
5
5
  @name = name.to_s
6
6
  @names = ([@name] + aliases.map{|n| n.to_s }).sort
7
7
 
8
- @case_sensitive = case_sensitive
9
8
  @conversion_amount, @conversion_unit = parse_value(value) if value
10
9
  end
11
10
 
12
- attr_reader :name, :names, :case_sensitive, :conversion_amount, :conversion_unit
13
-
14
- def name_eql?(name_to_compare)
15
- with_case_sensitivity(self.name).include?(with_case_sensitivity(name_to_compare).join)
16
- end
17
-
18
- def names_include?(name_to_compare)
19
- with_case_sensitivity(self.names).include?(with_case_sensitivity(name_to_compare).join)
20
- end
21
-
22
- def add_alias(aliases)
23
- @names = (@names << aliases).flatten.sort
24
- end
11
+ attr_reader :name, :names, :conversion_amount, :conversion_unit
25
12
 
26
13
  def to_s
27
14
  if conversion_string
@@ -53,11 +40,6 @@ class Measured::Unit
53
40
 
54
41
  private
55
42
 
56
- def with_case_sensitivity(comparison)
57
- comparison = [comparison].flatten
58
- case_sensitive ? comparison : comparison.map(&:downcase)
59
- end
60
-
61
43
  def conversion_string
62
44
  "#{ conversion_amount } #{ conversion_unit }" if @conversion_amount || @conversion_unit
63
45
  end
@@ -1,3 +1,3 @@
1
1
  module Measured
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -66,42 +66,20 @@ class Measured::ConversionTest < ActiveSupport::TestCase
66
66
 
67
67
  assert @conversion.unit?(:inch)
68
68
  assert @conversion.unit?("m")
69
- assert @conversion.unit?("M")
70
69
  refute @conversion.unit?("in")
71
70
  refute @conversion.unit?(:yard)
72
71
  end
73
72
 
74
- test "#unit? takes into account case_sensitive flag" do
75
- @conversion.set_base :m, case_sensitive: true
76
- @conversion.add :inch, aliases: [:in], value: "0.0254 meter", case_sensitive: true
77
-
78
- assert @conversion.unit?(:inch)
79
- assert @conversion.unit?("m")
80
- refute @conversion.unit?("M")
81
- refute @conversion.unit?("in")
82
- end
83
-
84
73
  test "#unit_or_alias? checks if the unit is part of the units but not aliases" do
85
74
  @conversion.set_base :m
86
75
  @conversion.add :inch, aliases: [:in], value: "0.0254 meter"
87
76
 
88
77
  assert @conversion.unit_or_alias?(:inch)
89
78
  assert @conversion.unit_or_alias?("m")
90
- assert @conversion.unit_or_alias?(:IN)
91
79
  assert @conversion.unit_or_alias?("in")
92
80
  refute @conversion.unit_or_alias?(:yard)
93
81
  end
94
82
 
95
- test "#unit_or_alias? takes into account case_sensitive flag" do
96
- @conversion.set_base :m, case_sensitive: true
97
- @conversion.add :inch, aliases: [:in], value: "0.0254 meter", case_sensitive: true
98
-
99
- assert @conversion.unit_or_alias?(:inch)
100
- assert @conversion.unit_or_alias?("m")
101
- refute @conversion.unit_or_alias?(:M)
102
- refute @conversion.unit_or_alias?("IN")
103
- end
104
-
105
83
  test "#to_unit_name converts a unit name to its base unit" do
106
84
  assert_equal "fireball", Magic.conversion.to_unit_name("fire")
107
85
  end
data/test/unit_test.rb CHANGED
@@ -13,53 +13,6 @@ 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 "case_sensitive flag default to false" do
17
- assert_equal false, @unit.case_sensitive
18
- end
19
-
20
- test "#name_eql?" do
21
- assert_equal true, @unit.name_eql?("pIe")
22
- assert_equal false, @unit.name_eql?("pastry")
23
- end
24
-
25
- test "#names_include?" do
26
- unit = Measured::Unit.new(:pie, aliases:["cake", "tart"])
27
- assert_equal true, unit.names_include?("pie")
28
- assert_equal true, unit.names_include?("caKe")
29
- assert_equal true, unit.names_include?("taRt")
30
- assert_equal false, unit.names_include?("pastry")
31
- end
32
-
33
- test "case_sensitive flag set to false" do
34
- assert_equal false, Measured::Unit.new(:pie, case_sensitive: false).case_sensitive
35
- end
36
-
37
- test "case_sensitive flag set to true, #name_eql?" do
38
- unit = Measured::Unit.new(:pie, case_sensitive: true)
39
- assert_equal true, unit.name_eql?("pie")
40
- assert_equal false, unit.name_eql?("pIe")
41
- end
42
-
43
- test "case_sensitive flag set to true, #names_include?" do
44
- unit = Measured::Unit.new(:pie, aliases: ["cake", "tart", "pastry"], case_sensitive: true)
45
- assert_equal true, unit.names_include?("cake")
46
- assert_equal false, unit.names_include?("tArt")
47
- end
48
-
49
- test "#add_alias with string" do
50
- unit = Measured::Unit.new(:pie, aliases: ["cake"], value: "10 cake")
51
- assert_equal ["cake", "pie"], unit.names
52
- unit.add_alias("pastry")
53
- assert_equal ["cake", "pastry", "pie"], unit.names
54
- end
55
-
56
- test "#add_alias with array" do
57
- unit = Measured::Unit.new(:pie, aliases: ["cake"], value: "10 cake")
58
- assert_equal ["cake", "pie"], unit.names
59
- unit.add_alias(["pastry", "tart", "turnover"])
60
- assert_equal ["cake", "pastry", "pie", "tart", "turnover"], unit.names
61
- end
62
-
63
16
  test "#initialize parses out the unit and the number part" do
64
17
  assert_equal BigDecimal(10), @unit.conversion_amount
65
18
  assert_equal "cake", @unit.conversion_unit
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: measured
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin McPhillips
@@ -137,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
137
137
  version: '0'
138
138
  requirements: []
139
139
  rubyforge_project:
140
- rubygems_version: 2.2.3
140
+ rubygems_version: 2.2.2
141
141
  signing_key:
142
142
  specification_version: 4
143
143
  summary: Encapsulate measurements with their units in Ruby