measured-rails 1.6.0 → 2.0.0.pre4

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: 92ddafd5d1a33f79eee76d8b642bc787aacc8234
4
- data.tar.gz: b31d4d3fefbfce82776255ce6dd9d035ffb2fb1c
3
+ metadata.gz: 231d75334806054c6ba6aeb54e255aa45cf3f25d
4
+ data.tar.gz: 7d1e18a0b4e5f3b06094bfac97d62d3e9daba644
5
5
  SHA512:
6
- metadata.gz: 440b341b39ad63d13c36a233a6e1943bd7557a863e32a2a7393f25c2e42021afeb12c5b90d2718ffd5b37b5fa70c3890051ed43f3d8de9b060a4b3cf2d180884
7
- data.tar.gz: 835c01c1bba6432b34c1817bfc7910bd05561a790b1363388f932e7f4e2d4bb7cdbc3daa5edaed7d585d7bc682f2d1b783f3d148eb2b28baac3a590362f9f667
6
+ metadata.gz: f6b6dee426c7e472116c2f8c269ea87f469f137a3d316d1a32dd3197ded8d06d0391851c7619e28393fb9b01a7dc7a08824ec9151cc868a5eaa3f22a2fbdfa44
7
+ data.tar.gz: 4380d58cd615d2a13fd2fc3674b8ae816944602755bc6e92680c720e077734c6ae10a1ff9779592058bac0b7d4578912ec5df0c1e4af9bf0c361d46b0df6fbce
data/.travis.yml CHANGED
@@ -4,11 +4,22 @@ cache: bundler
4
4
  rvm:
5
5
  - 2.1.8
6
6
  - 2.2.4
7
- - 2.3.0
7
+ - 2.3.1
8
+ - 2.4.0
8
9
  gemfile:
9
10
  - Gemfile
10
11
  - gemfiles/rails-4.2.gemfile
12
+ - gemfiles/rails-5.0.gemfile
13
+ - gemfiles/rails-master.gemfile
11
14
  matrix:
12
15
  exclude:
13
16
  - gemfile: Gemfile
14
17
  rvm: 2.1.8
18
+ - gemfile: gemfiles/rails-master.gemfile
19
+ rvm: 2.1.8
20
+ - gemfile: gemfiles/rails-5.0.gemfile
21
+ rvm: 2.1.8
22
+ - gemfile: gemfiles/rails-4.2.gemfile
23
+ rvm: 2.4.0
24
+ allow_failures:
25
+ - gemfile: gemfiles/rails-master.gemfile
data/README.md CHANGED
@@ -66,7 +66,7 @@ This will allow you to access and assign a measurement object:
66
66
  ```ruby
67
67
  thing = Thing.new
68
68
  thing.minimum_weight = Measured::Weight.new(10, "g")
69
- thing.minimum_weight_unit # "g"
69
+ thing.minimum_weight_unit # "g"
70
70
  thing.minimum_weight_value # 10
71
71
  ```
72
72
 
@@ -75,7 +75,7 @@ Order of assignment does not matter, and each property can be assigned separatel
75
75
  ```ruby
76
76
  params = { total_length_unit: "cm", total_length_value: "3" }
77
77
  thing = Thing.new(params)
78
- thing.total_length # #<Measured::Length: 3 cm>
78
+ thing.total_length.to_s # 3 cm
79
79
  ```
80
80
 
81
81
  ### Validations
@@ -102,16 +102,7 @@ Rather than `true` the validation can accept a hash with the following options:
102
102
  * `less_than`
103
103
  * `less_than_or_equal_to`
104
104
 
105
- **Special case** Comparison based validation against 0
106
- ```ruby
107
- class Thing < ActiveRecord::Base
108
- measured_length :non_negative_weight
109
-
110
- validates :non_negative_weight, measured: {greater_than: 0}
111
- end
112
- ```
113
-
114
- Most of these options replace the `numericality` validator which compares the measurement/method name/proc to the column's value. Validations can also be combined with `presence` validator.
105
+ All comparison validations require `Measured::Measurable` values, not scalars. Most of these options replace the `numericality` validator which compares the measurement/method name/proc to the column's value. Validations can also be combined with `presence` validator.
115
106
 
116
107
  **Note:** Validations are strongly recommended since assigning an invalid unit will cause the measurement to return `nil`, even if there is a value:
117
108
 
@@ -120,10 +111,8 @@ thing = Thing.new
120
111
  thing.total_length_value = 1
121
112
  thing.total_length_unit = "invalid"
122
113
  thing.total_length # nil
123
-
124
114
  ```
125
115
 
126
-
127
116
  ## Tests
128
117
 
129
118
  ```
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec path: '..'
4
+
5
+ gem 'rails', '~> 5.0'
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec path: '..'
4
+
5
+ gem 'rails', github: 'rails/rails'
@@ -8,21 +8,21 @@ module Measured::Rails::ActiveRecord
8
8
  defined_unit_accessors = []
9
9
 
10
10
  measured_class = measured_class.constantize if measured_class.is_a?(String)
11
-
12
- raise Measured::Rails::Error, "Expecting #{ measured_class } to be a subclass of Measured::Measurable" if !measured_class.is_a?(Class) || !measured_class.ancestors.include?(Measured::Measurable)
11
+ unless measured_class.is_a?(Class) && measured_class.ancestors.include?(Measured::Measurable)
12
+ raise Measured::Rails::Error, "Expecting #{ measured_class } to be a subclass of Measured::Measurable"
13
+ end
13
14
 
14
15
  options[:class] = measured_class
15
16
 
16
17
  fields.map(&:to_sym).each do |field|
17
- raise Measured::Rails::Error, "The field #{ field } has already been measured" if measured_fields.keys.include?(field)
18
+ raise Measured::Rails::Error, "The field #{ field } has already been measured" if measured_fields.key?(field)
18
19
 
19
20
  measured_fields[field] = options
20
21
 
21
- if options[:unit_field_name]
22
- unit_field_name = options[:unit_field_name].to_s
23
- measured_fields[field][:unit_field_name] = unit_field_name
22
+ unit_field_name = if options[:unit_field_name]
23
+ measured_fields[field][:unit_field_name] = options[:unit_field_name].to_s
24
24
  else
25
- unit_field_name = "#{ field }_unit"
25
+ "#{ field }_unit"
26
26
  end
27
27
 
28
28
  value_field_name = "#{ field }_value"
@@ -41,7 +41,7 @@ module Measured::Rails::ActiveRecord
41
41
  nil
42
42
  end
43
43
 
44
- if instance && instance == new_instance
44
+ if instance == new_instance
45
45
  instance
46
46
  else
47
47
  instance_variable_set("@measured_#{ field }", new_instance)
@@ -58,12 +58,13 @@ module Measured::Rails::ActiveRecord
58
58
 
59
59
  max = self.class.measured_fields[field][:max_on_assignment]
60
60
  if max && rounded_to_scale_value > max
61
- rounded_to_scale_value = max
61
+ rounded_to_scale_value = max
62
62
  elsif rounded_to_scale_value.to_i.to_s.length > (precision - scale)
63
63
  raise Measured::Rails::Error, "The value #{rounded_to_scale_value} being set for column '#{value_field_name}' has too many significant digits. Please ensure it has no more than #{precision - scale} significant digits."
64
64
  end
65
+
65
66
  public_send("#{ value_field_name }=", rounded_to_scale_value)
66
- public_send("#{ unit_field_name }=", incoming.unit)
67
+ public_send("#{ unit_field_name }=", incoming.unit.name)
67
68
  else
68
69
  instance_variable_set("@measured_#{ field }", nil)
69
70
  public_send("#{ value_field_name}=", nil)
@@ -76,8 +77,8 @@ module Measured::Rails::ActiveRecord
76
77
  # Writer to override unit assignment
77
78
  define_method("#{ unit_field_name }=") do |incoming|
78
79
  defined_unit_accessors << unit_field_name
79
- incoming = measured_class.conversion.to_unit_name(incoming) if measured_class.valid_unit?(incoming)
80
- write_attribute(unit_field_name, incoming)
80
+ unit_name = measured_class.unit_system.unit_for(incoming).try!(:name)
81
+ write_attribute(unit_field_name, unit_name || incoming)
81
82
  end
82
83
  end
83
84
  end
@@ -14,22 +14,23 @@ class MeasuredValidator < ActiveModel::EachValidator
14
14
 
15
15
  measured_class = measured_config[:class]
16
16
 
17
- measurable_unit = record.public_send(unit_field_name)
17
+ measurable_unit_name = record.public_send(unit_field_name)
18
18
  measurable_value = record.public_send(value_field_name)
19
19
 
20
- return unless measurable_unit.present? || measurable_value.present?
20
+ return unless measurable_unit_name.present? || measurable_value.present?
21
21
 
22
- record.errors.add(attribute, message("is not a valid unit")) unless measured_class.valid_unit?(measurable_unit)
22
+ measurable_unit = measured_class.unit_system.unit_for(measurable_unit_name)
23
+ record.errors.add(attribute, message("is not a valid unit")) unless measurable_unit
23
24
 
24
25
  if options[:units]
25
- valid_units = [options[:units]].flatten.map{|u| measured_class.conversion.to_unit_name(u) }
26
- record.errors.add(attribute, message("is not a valid unit")) unless valid_units.include?(measured_class.conversion.to_unit_name(measurable_unit))
26
+ valid_units = Array(options[:units]).map { |unit| measured_class.unit_system.unit_for(unit) }
27
+ record.errors.add(attribute, message("is not a valid unit")) unless valid_units.include?(measurable_unit)
27
28
  end
28
29
 
29
- if measured_class.valid_unit?(measurable_unit) && measurable_value.present?
30
+ if measurable_unit && measurable_value.present?
30
31
  options.slice(*CHECKS.keys).each do |option, value|
31
32
  comparable_value = value_for(value, record)
32
- comparable_value = measured_class.new(comparable_value, measurable_unit) if comparable_value.is_a?(Numeric)
33
+ comparable_value = measured_class.new(comparable_value, measurable_unit) unless comparable_value.is_a?(Measured::Measurable)
33
34
  unless measurable.public_send(CHECKS[option], comparable_value)
34
35
  record.errors.add(attribute, message("#{measurable.to_s} must be #{CHECKS[option]} #{comparable_value}"))
35
36
  end
@@ -1,5 +1,5 @@
1
1
  module Measured
2
2
  module Rails
3
- VERSION = "1.6.0"
3
+ VERSION = "2.0.0.pre4"
4
4
  end
5
5
  end
@@ -20,12 +20,13 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_runtime_dependency "measured", Measured::Rails::VERSION
22
22
 
23
- spec.add_runtime_dependency "railties", ">= 4.0"
24
- spec.add_runtime_dependency "activemodel", ">= 4.0"
23
+ spec.add_runtime_dependency "railties", ">= 4.2"
24
+ spec.add_runtime_dependency "activemodel", ">= 4.2"
25
25
 
26
- spec.add_development_dependency "rake", "~> 10.0"
27
- spec.add_development_dependency "minitest", "~> 5.5.1"
28
- spec.add_development_dependency "mocha", "~> 1.1.0"
26
+ spec.add_development_dependency "rake", "> 10.0"
27
+ spec.add_development_dependency "minitest", "> 5.5.1"
28
+ spec.add_development_dependency "minitest-reporters"
29
+ spec.add_development_dependency "mocha", "> 1.1.0"
29
30
  spec.add_development_dependency "pry"
30
31
  spec.add_development_dependency "sqlite3"
31
32
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: measured-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 2.0.0.pre4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin McPhillips
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-11-28 00:00:00.000000000 Z
11
+ date: 2017-03-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: measured
@@ -16,82 +16,96 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 1.6.0
19
+ version: 2.0.0.pre4
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: 1.6.0
26
+ version: 2.0.0.pre4
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: railties
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '4.0'
33
+ version: '4.2'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '4.0'
40
+ version: '4.2'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: activemodel
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '4.0'
47
+ version: '4.2'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '4.0'
54
+ version: '4.2'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '10.0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '10.0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: minitest
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">"
74
74
  - !ruby/object:Gem::Version
75
75
  version: 5.5.1
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ">"
81
81
  - !ruby/object:Gem::Version
82
82
  version: 5.5.1
83
+ - !ruby/object:Gem::Dependency
84
+ name: minitest-reporters
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: mocha
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
- - - "~>"
101
+ - - ">"
88
102
  - !ruby/object:Gem::Version
89
103
  version: 1.1.0
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
- - - "~>"
108
+ - - ">"
95
109
  - !ruby/object:Gem::Version
96
110
  version: 1.1.0
97
111
  - !ruby/object:Gem::Dependency
@@ -140,6 +154,8 @@ files:
140
154
  - bin/setup
141
155
  - dev.yml
142
156
  - gemfiles/rails-4.2.gemfile
157
+ - gemfiles/rails-5.0.gemfile
158
+ - gemfiles/rails-master.gemfile
143
159
  - lib/measured-rails.rb
144
160
  - lib/measured/rails/active_record.rb
145
161
  - lib/measured/rails/base.rb
@@ -165,12 +181,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
165
181
  version: '0'
166
182
  required_rubygems_version: !ruby/object:Gem::Requirement
167
183
  requirements:
168
- - - ">="
184
+ - - ">"
169
185
  - !ruby/object:Gem::Version
170
- version: '0'
186
+ version: 1.3.1
171
187
  requirements: []
172
188
  rubyforge_project:
173
- rubygems_version: 2.5.1
189
+ rubygems_version: 2.5.2
174
190
  signing_key:
175
191
  specification_version: 4
176
192
  summary: Rails adaptor for measured