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 +4 -4
- data/.travis.yml +12 -1
- data/README.md +3 -14
- data/gemfiles/rails-5.0.gemfile +5 -0
- data/gemfiles/rails-master.gemfile +5 -0
- data/lib/measured/rails/active_record.rb +13 -12
- data/lib/measured/rails/validations.rb +8 -7
- data/lib/measured/rails/version.rb +1 -1
- data/measured-rails.gemspec +6 -5
- metadata +33 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 231d75334806054c6ba6aeb54e255aa45cf3f25d
|
4
|
+
data.tar.gz: 7d1e18a0b4e5f3b06094bfac97d62d3e9daba644
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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
|
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 #
|
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
|
-
|
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
|
```
|
@@ -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
|
-
|
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.
|
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
|
-
|
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
|
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
|
-
|
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
|
-
|
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
|
20
|
+
return unless measurable_unit_name.present? || measurable_value.present?
|
21
21
|
|
22
|
-
|
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 =
|
26
|
-
record.errors.add(attribute, message("is not a valid unit")) unless valid_units.include?(
|
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
|
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)
|
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
|
data/measured-rails.gemspec
CHANGED
@@ -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.
|
24
|
-
spec.add_runtime_dependency "activemodel", ">= 4.
|
23
|
+
spec.add_runtime_dependency "railties", ">= 4.2"
|
24
|
+
spec.add_runtime_dependency "activemodel", ">= 4.2"
|
25
25
|
|
26
|
-
spec.add_development_dependency "rake", "
|
27
|
-
spec.add_development_dependency "minitest", "
|
28
|
-
spec.add_development_dependency "
|
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:
|
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:
|
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:
|
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:
|
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.
|
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.
|
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.
|
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.
|
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:
|
186
|
+
version: 1.3.1
|
171
187
|
requirements: []
|
172
188
|
rubyforge_project:
|
173
|
-
rubygems_version: 2.5.
|
189
|
+
rubygems_version: 2.5.2
|
174
190
|
signing_key:
|
175
191
|
specification_version: 4
|
176
192
|
summary: Rails adaptor for measured
|