measured-rails 1.6.0 → 2.0.0.pre4

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: 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