ski_binding_calculator 0.7.1 → 0.8.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.
- data/lib/ski_binding_calculator/error.rb +1 -2
- data/lib/ski_binding_calculator/version.rb +3 -0
- data/lib/ski_binding_calculator.rb +1 -1
- data/ski_binding_calculator.gemspec +8 -6
- data/spec/lib/calculator_spec.rb +102 -80
- data/spec/lib/code_spec.rb +3 -11
- data/spec/lib/config_loader_spec.rb +18 -23
- data/spec/lib/setting_spec.rb +4 -12
- metadata +24 -23
- data/lib/ski_binding_calculator/ski_binding.rb +0 -2
@@ -1,20 +1,22 @@
|
|
1
|
-
|
1
|
+
$LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
|
2
|
+
require 'ski_binding_calculator/version'
|
2
3
|
|
4
|
+
Gem::Specification.new do |s|
|
3
5
|
s.name = 'ski_binding_calculator'
|
4
|
-
s.version =
|
5
|
-
s.summary = "Ski
|
6
|
-
s.description = "Calculates the z-value according to ISO 11088."
|
6
|
+
s.version = SkiBinding::VERSION
|
7
|
+
s.summary = "Ski binding release value calculator (ISO 11088)"
|
8
|
+
s.description = "Calculates the initial indicator value (z-value) according to ISO 11088 standard."
|
7
9
|
s.authors = ["Jonas Ruef, Felix Langenegger"]
|
8
10
|
s.email = 'support@fadendaten.ch'
|
9
11
|
s.homepage = 'http://fadendaten.ch'
|
10
12
|
s.license = 'MIT'
|
11
13
|
|
14
|
+
s.add_dependency "activesupport", "~> 4.0.0"
|
12
15
|
s.add_development_dependency "rspec", "~> 2.14.1"
|
13
16
|
s.add_development_dependency "spork", "~> 0.9.2"
|
14
17
|
s.add_development_dependency "simplecov", "~> 0.7.1"
|
15
18
|
s.add_development_dependency "timecop", "~> 0.6.3"
|
16
|
-
s.add_development_dependency "fuubar", "~> 1.
|
17
|
-
s.add_development_dependency "activesupport", "~> 4.0.0"
|
19
|
+
s.add_development_dependency "fuubar", "~> 1.2.1"
|
18
20
|
|
19
21
|
s.files = Dir.glob("{config,lib,spec}/**/*")
|
20
22
|
s.files += %w(Rakefile ski_binding_calculator.gemspec)
|
data/spec/lib/calculator_spec.rb
CHANGED
@@ -6,7 +6,7 @@ require 'timecop'
|
|
6
6
|
# 315mm, and is born 01/01/1983 has code "L" or in our notation 11
|
7
7
|
# (see readme for details on codes). Furthermore it's z_value is 6.
|
8
8
|
describe SkiBinding::Calculator do
|
9
|
-
|
9
|
+
let(:skiers_parameter) do
|
10
10
|
{ :type => "Type2",
|
11
11
|
:weight => "70",
|
12
12
|
:height => "170",
|
@@ -15,7 +15,7 @@ describe SkiBinding::Calculator do
|
|
15
15
|
:birthday_month => "01",
|
16
16
|
:birthday_day => "01" }
|
17
17
|
end
|
18
|
-
|
18
|
+
let(:skiers_parameter_string_keys) do
|
19
19
|
{ "type" => "Type2",
|
20
20
|
"weight" => "70",
|
21
21
|
"height" => "170",
|
@@ -24,7 +24,7 @@ describe SkiBinding::Calculator do
|
|
24
24
|
"birthday_month" => "01",
|
25
25
|
"birthday_day" => "01" }
|
26
26
|
end
|
27
|
-
|
27
|
+
let(:expected_preped) do
|
28
28
|
{ :type => "Type2",
|
29
29
|
:weight => 70.0,
|
30
30
|
:height => 170.0,
|
@@ -33,22 +33,22 @@ describe SkiBinding::Calculator do
|
|
33
33
|
:birthday_month => 1,
|
34
34
|
:birthday_day => 1 }
|
35
35
|
end
|
36
|
-
|
36
|
+
let(:expected_aged) do
|
37
37
|
{ :type => "Type2",
|
38
38
|
:weight => 70.0,
|
39
39
|
:height => 170.0,
|
40
40
|
:sole_length => 315.0,
|
41
41
|
:age => 30 }
|
42
42
|
end
|
43
|
-
|
43
|
+
let(:expected_type_validated) do
|
44
44
|
{ :type => 1,
|
45
45
|
:weight => 70.0,
|
46
46
|
:height => 170.0,
|
47
47
|
:sole_length => 315.0,
|
48
48
|
:age => 30 }
|
49
49
|
end
|
50
|
-
|
51
|
-
|
50
|
+
let(:expected_code) { 11 }
|
51
|
+
let(:expected_setting) do
|
52
52
|
{ :z_value => 6 }
|
53
53
|
end
|
54
54
|
|
@@ -56,155 +56,177 @@ describe SkiBinding::Calculator do
|
|
56
56
|
#freeze time! so birthday will always be 30 years back
|
57
57
|
Timecop.freeze(2013, 8, 13)
|
58
58
|
end
|
59
|
-
|
60
|
-
describe "#new" do
|
61
|
-
it { SkiBinding::Calculator.new.class.should == SkiBinding::Calculator }
|
62
|
-
end
|
63
59
|
|
64
|
-
describe "
|
65
|
-
|
66
|
-
let(:parameters) do
|
67
|
-
skiers_parameters[:weight] = ""
|
68
|
-
skiers_parameters[:height] = ""
|
69
|
-
skiers_parameters
|
70
|
-
end
|
60
|
+
describe ".validate_attrs" do
|
61
|
+
let(:calculated_validated) { SkiBinding::Calculator.validate_attrs(parameters) }
|
71
62
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
63
|
+
context "when attributes are blank" do
|
64
|
+
let(:parameters) do
|
65
|
+
skiers_parameter[:weight] = ""
|
66
|
+
skiers_parameter[:height] = ""
|
67
|
+
skiers_parameter
|
68
|
+
end
|
69
|
+
|
70
|
+
it "raises SkiBinding::Error" do
|
71
|
+
expect { calculated_validated }.to raise_error(SkiBinding::Error) { |e|
|
72
|
+
e.messages.should == { :weight => "is blank", :height => "is blank" } }
|
73
|
+
end
|
74
|
+
end
|
76
75
|
end
|
77
76
|
|
78
|
-
describe "
|
79
|
-
|
80
|
-
let(:parameters) { skiers_parameters }
|
77
|
+
describe ".prep_attributes" do
|
78
|
+
let(:calculated_preped) { SkiBinding::Calculator.prep_attributes(parameters) }
|
81
79
|
|
82
|
-
|
80
|
+
context "when input hash keys are symbols" do
|
81
|
+
let(:parameters) { skiers_parameter }
|
82
|
+
|
83
|
+
it "calculates the expected preped hash" do
|
84
|
+
expect(calculated_preped).to eq(expected_preped)
|
85
|
+
end
|
86
|
+
end
|
83
87
|
|
84
|
-
context "when hash
|
85
|
-
let(:parameters) {
|
86
|
-
|
88
|
+
context "when input hash key are strings" do
|
89
|
+
let(:parameters) { skiers_parameter_string_keys}
|
90
|
+
|
91
|
+
it "calculates the expected preped hash" do
|
92
|
+
expect(calculated_preped).to eq(expected_preped)
|
93
|
+
end
|
87
94
|
end
|
88
95
|
|
89
|
-
context "when weight
|
96
|
+
context "when weight is less than 9kg" do
|
90
97
|
let(:parameters) do
|
91
|
-
|
92
|
-
|
98
|
+
skiers_parameter[:weight] = 9
|
99
|
+
skiers_parameter
|
93
100
|
end
|
94
|
-
it "
|
101
|
+
it "raises SkiBinding::Error" do
|
95
102
|
expect { calculated_preped }.to raise_error(SkiBinding::Error) { |e|
|
96
103
|
e.messages.should == { :weight => "is less than 10kg" } }
|
97
104
|
end
|
98
105
|
end
|
99
106
|
end
|
100
107
|
|
101
|
-
describe "
|
102
|
-
|
103
|
-
let(:preped) { expected_preped }
|
108
|
+
describe ".age" do
|
109
|
+
let(:calculated_aged) { SkiBinding::Calculator.age(expected_preped) }
|
104
110
|
|
105
|
-
it
|
111
|
+
it "replaces birthday by age" do
|
112
|
+
expect(calculated_aged).to eq(expected_aged)
|
113
|
+
end
|
106
114
|
end
|
107
115
|
|
108
|
-
describe "
|
109
|
-
|
116
|
+
describe ".validate_type" do
|
117
|
+
let(:calculated_type_validated) { SkiBinding::Calculator.validate_type(aged) }
|
110
118
|
let(:aged) { expected_aged }
|
111
119
|
|
112
|
-
it "sets
|
113
|
-
|
120
|
+
it "sets 'Type2' to 1" do
|
121
|
+
expect(calculated_type_validated[:type]).to eq(expected_type_validated[:type])
|
114
122
|
end
|
115
123
|
|
116
|
-
context "when type is
|
124
|
+
context "when type is 'unknown'" do
|
117
125
|
let(:aged) do
|
118
126
|
expected_aged[:type] = "unknown"
|
119
127
|
expected_aged
|
120
128
|
end
|
121
129
|
|
122
|
-
it "
|
123
|
-
expect {
|
130
|
+
it "raises SkiBinding::Error" do
|
131
|
+
expect { calculated_type_validated }.to raise_error(SkiBinding::Error) { |e|
|
124
132
|
e.messages.should == { :type => "You have entered an invalid type." } }
|
125
133
|
end
|
126
134
|
end
|
127
135
|
end
|
128
136
|
|
129
|
-
describe "
|
130
|
-
|
131
|
-
let(:validated) {
|
137
|
+
describe ".binding_code" do
|
138
|
+
let(:calculated_code) { SkiBinding::Calculator.binding_code(validated) }
|
139
|
+
let(:validated) { expected_type_validated }
|
132
140
|
|
133
|
-
it
|
141
|
+
it "calculates the expected code" do
|
142
|
+
expect(calculated_code).to eq(11)
|
143
|
+
end
|
134
144
|
|
135
|
-
context "when weight
|
145
|
+
context "when weight less than 13kg" do
|
136
146
|
let(:validated) do
|
137
|
-
|
138
|
-
|
147
|
+
expected_type_validated[:weight] = 12
|
148
|
+
expected_type_validated
|
139
149
|
end
|
150
|
+
|
140
151
|
#because "Type 2" is given the code would be changed to 1
|
141
|
-
it
|
152
|
+
it "code is unchanged" do
|
153
|
+
expect(calculated_code).to eq(0)
|
154
|
+
end
|
142
155
|
end
|
143
156
|
|
144
157
|
context "when no code found" do
|
145
158
|
let(:validated) do
|
146
|
-
|
147
|
-
|
148
|
-
|
159
|
+
expected_type_validated[:weight] = -1
|
160
|
+
expected_type_validated[:height] = -1
|
161
|
+
expected_type_validated
|
149
162
|
end
|
150
163
|
|
151
|
-
it "raises
|
164
|
+
it "raises SkiBinding::Error" do
|
152
165
|
expect { calculated_code }.to raise_error(SkiBinding::Error) { |e|
|
153
166
|
e.messages.should == { :base => "You have entered invalid weight and/or height" } }
|
154
167
|
end
|
155
168
|
end
|
156
169
|
|
157
|
-
context "when age
|
158
|
-
context "age is 50" do
|
170
|
+
context "when age is bigger or equal 50 or less than 10" do
|
171
|
+
context "when age is 50" do
|
159
172
|
let(:validated) do
|
160
|
-
|
161
|
-
|
173
|
+
expected_type_validated[:age] = 50
|
174
|
+
expected_type_validated
|
162
175
|
end
|
163
176
|
|
164
|
-
it
|
177
|
+
it "code changes by -1" do
|
178
|
+
expect(calculated_code).to eq(expected_code - 1)
|
179
|
+
end
|
165
180
|
end
|
166
181
|
|
167
|
-
context "age is 51" do
|
182
|
+
context "when age is 51" do
|
168
183
|
let(:validated) do
|
169
|
-
|
170
|
-
|
184
|
+
expected_type_validated[:age] = 51
|
185
|
+
expected_type_validated
|
171
186
|
end
|
172
187
|
|
173
|
-
it
|
188
|
+
it "code changes by -1" do
|
189
|
+
expect(calculated_code).to eq(expected_code - 1)
|
190
|
+
end
|
174
191
|
end
|
175
192
|
|
176
|
-
context "age is 9" do
|
193
|
+
context "when age is 9" do
|
177
194
|
let(:validated) do
|
178
|
-
|
179
|
-
|
195
|
+
expected_type_validated[:age] = 9
|
196
|
+
expected_type_validated
|
180
197
|
end
|
181
198
|
|
182
|
-
it
|
199
|
+
it "code changes by -1" do
|
200
|
+
expect(calculated_code).to eq(expected_code - 1)
|
201
|
+
end
|
183
202
|
end
|
184
203
|
end
|
185
204
|
end
|
186
|
-
|
187
|
-
describe "
|
188
|
-
|
205
|
+
|
206
|
+
describe ".binding_setting" do
|
207
|
+
let(:calculated_setting) { SkiBinding::Calculator.binding_setting(expected_type_validated, binding_code) }
|
189
208
|
let(:binding_code) { expected_code }
|
190
|
-
let(:validated) { expected_validated }
|
191
209
|
|
192
|
-
it
|
210
|
+
it "calculates the expected setting" do
|
211
|
+
expect(calculated_setting).to eq(expected_setting)
|
212
|
+
end
|
193
213
|
|
194
214
|
context "when no setting found" do
|
195
215
|
let(:binding_code) { 0 }
|
196
|
-
|
216
|
+
|
217
|
+
it "raises SkiBinding::Error" do
|
197
218
|
expect { calculated_setting }.to raise_error(SkiBinding::Error) { |e|
|
198
219
|
e.messages.should == { :base => "Please calculate z-index by hand." } }
|
199
220
|
end
|
200
221
|
end
|
201
222
|
end
|
202
|
-
|
203
|
-
describe "
|
204
|
-
subject(:
|
205
|
-
let(:parameters) { skiers_parameters }
|
223
|
+
|
224
|
+
describe ".setting" do
|
225
|
+
subject(:one_pass_calculated_setting) { SkiBinding::Calculator.setting(skiers_parameter) }
|
206
226
|
|
207
|
-
it
|
227
|
+
it "calculates the expected setting in one pass" do
|
228
|
+
expect(one_pass_calculated_setting).to eq(expected_setting)
|
229
|
+
end
|
208
230
|
end
|
209
231
|
|
210
232
|
after(:all) do
|
data/spec/lib/code_spec.rb
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe SkiBinding::Code do
|
4
|
-
|
5
|
-
|
6
|
-
SkiBinding::Code.new.class.should == SkiBinding::Code
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
context "when instantiated Code class" do
|
11
|
-
it { should respond_to :weight }
|
12
|
-
it { should respond_to :height }
|
13
|
-
end
|
3
|
+
describe SkiBinding::Code do
|
4
|
+
it { should respond_to :weight }
|
5
|
+
it { should respond_to :height }
|
14
6
|
end
|
15
7
|
|
@@ -1,36 +1,31 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
# For original table with codes referred to in this tests see iso 11088
|
4
|
-
#
|
4
|
+
# table B.1
|
5
5
|
describe "ConfigLoader" do
|
6
|
-
subject(:dummy_class) {
|
6
|
+
subject(:dummy_class) { double('empty class').extend SkiBinding::ConfigLoader }
|
7
7
|
|
8
|
-
describe "
|
9
|
-
|
10
|
-
|
11
|
-
context "when loaded codes" do
|
12
|
-
subject(:codes) { dummy_class.load_binding_codes }
|
8
|
+
describe "#load_binding_codes" do
|
9
|
+
context "loaded binding codes" do
|
10
|
+
let(:loaded_codes) { dummy_class.load_binding_codes }
|
13
11
|
|
14
|
-
it{
|
15
|
-
it{
|
16
|
-
it
|
12
|
+
it{ expect(loaded_codes).to be_instance_of(Array)}
|
13
|
+
it{ loaded_codes.should have(13).elements }
|
14
|
+
it "first element is instance of SkiBinding::Code" do
|
15
|
+
expect(loaded_codes[0]).to be_instance_of(SkiBinding::Code)
|
16
|
+
end
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
describe "
|
21
|
-
|
22
|
-
settings = []
|
23
|
-
(0..15).each { |i| settings << dummy_class.load_binding_settings(i) }
|
24
|
-
settings
|
25
|
-
end
|
20
|
+
describe "#load_binding_setting" do
|
21
|
+
let(:settings_all_codes) { (0..15).map { |i| dummy_class.load_binding_settings(i) } }
|
26
22
|
|
27
|
-
context "for each code" do
|
28
|
-
it { settings_all_codes.each { |s| s.
|
29
|
-
it { settings_all_codes.each { |s| s
|
30
|
-
it
|
23
|
+
context "for each code loaded settings" do
|
24
|
+
it { settings_all_codes.each { |s| expect(s).to be_instance_of(Array) } }
|
25
|
+
it { settings_all_codes.each { |s| s.should have(8).elements } }
|
26
|
+
it "first element is instance of SkiBinding::Setting" do
|
27
|
+
settings_all_codes.each { |s| expect(s[0]).to be_instance_of(SkiBinding::Setting) }
|
28
|
+
end
|
31
29
|
end
|
32
30
|
end
|
33
|
-
end
|
34
|
-
|
35
|
-
class DummyClass
|
36
31
|
end
|
data/spec/lib/setting_spec.rb
CHANGED
@@ -1,16 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe SkiBinding::Setting do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
end
|
9
|
-
|
10
|
-
context "when instantiated Setting class" do
|
11
|
-
it { should respond_to :sole_length_range }
|
12
|
-
it { should respond_to :z_value }
|
13
|
-
it { should respond_to :twist }
|
14
|
-
it { should respond_to :forward_lean }
|
15
|
-
end
|
4
|
+
it { should respond_to :sole_length_range }
|
5
|
+
it { should respond_to :z_value }
|
6
|
+
it { should respond_to :twist }
|
7
|
+
it { should respond_to :forward_lean }
|
16
8
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ski_binding_calculator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,8 +9,24 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-08-
|
12
|
+
date: 2013-08-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: activesupport
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 4.0.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 4.0.0
|
14
30
|
- !ruby/object:Gem::Dependency
|
15
31
|
name: rspec
|
16
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -82,7 +98,7 @@ dependencies:
|
|
82
98
|
requirements:
|
83
99
|
- - ~>
|
84
100
|
- !ruby/object:Gem::Version
|
85
|
-
version: 1.
|
101
|
+
version: 1.2.1
|
86
102
|
type: :development
|
87
103
|
prerelease: false
|
88
104
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -90,24 +106,9 @@ dependencies:
|
|
90
106
|
requirements:
|
91
107
|
- - ~>
|
92
108
|
- !ruby/object:Gem::Version
|
93
|
-
version: 1.
|
94
|
-
-
|
95
|
-
|
96
|
-
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
|
-
requirements:
|
99
|
-
- - ~>
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
version: 4.0.0
|
102
|
-
type: :development
|
103
|
-
prerelease: false
|
104
|
-
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
|
-
requirements:
|
107
|
-
- - ~>
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: 4.0.0
|
110
|
-
description: Calculates the z-value according to ISO 11088.
|
109
|
+
version: 1.2.1
|
110
|
+
description: Calculates the initial indicator value (z-value) according to ISO 11088
|
111
|
+
standard.
|
111
112
|
email: support@fadendaten.ch
|
112
113
|
executables: []
|
113
114
|
extensions: []
|
@@ -120,7 +121,7 @@ files:
|
|
120
121
|
- lib/ski_binding_calculator/config_loader.rb
|
121
122
|
- lib/ski_binding_calculator/error.rb
|
122
123
|
- lib/ski_binding_calculator/setting.rb
|
123
|
-
- lib/ski_binding_calculator/
|
124
|
+
- lib/ski_binding_calculator/version.rb
|
124
125
|
- lib/ski_binding_calculator.rb
|
125
126
|
- spec/lib/calculator_spec.rb
|
126
127
|
- spec/lib/code_spec.rb
|
@@ -153,5 +154,5 @@ rubyforge_project:
|
|
153
154
|
rubygems_version: 1.8.25
|
154
155
|
signing_key:
|
155
156
|
specification_version: 3
|
156
|
-
summary: Ski
|
157
|
+
summary: Ski binding release value calculator (ISO 11088)
|
157
158
|
test_files: []
|