ski_binding_calculator 0.0.2
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/Rakefile +5 -0
- data/config/criterias.yml +6 -0
- data/config/indices.yml +51 -0
- data/lib/calculator/binding_calculator.rb +31 -0
- data/lib/calculator/config_loader.rb +45 -0
- data/lib/calculator/criteria.rb +10 -0
- data/lib/calculator/driver_type.rb +9 -0
- data/lib/calculator/index.rb +13 -0
- data/lib/ski_binding_calculator.rb +5 -0
- data/ski_binding_calculator.gemspec +17 -0
- data/spec/binding_calculator_spec.rb +47 -0
- data/spec/config_loader_spec.rb +38 -0
- data/spec/criteria_spec.rb +37 -0
- data/spec/driver_type_spec.rb +36 -0
- data/spec/index_spec.rb +36 -0
- data/spec/spec_helper.rb +20 -0
- metadata +92 -0
data/Rakefile
ADDED
data/config/indices.yml
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
0:
|
2
|
+
- !ruby/range 1..250:
|
3
|
+
z_value: 0.75
|
4
|
+
mz: &MZ 8
|
5
|
+
my: &MY 29
|
6
|
+
- !ruby/range 251..270:
|
7
|
+
z_value: 0.75
|
8
|
+
mz: *MZ
|
9
|
+
my: *MY
|
10
|
+
|
11
|
+
1:
|
12
|
+
- !ruby/range 1..250:
|
13
|
+
z_value: 1
|
14
|
+
mz: &mz 11
|
15
|
+
my: &my 40
|
16
|
+
- !ruby/range 251..270:
|
17
|
+
z_value: 1
|
18
|
+
mz: *mz
|
19
|
+
my: *my
|
20
|
+
- !ruby/range 271..290:
|
21
|
+
z_value: 0.75
|
22
|
+
mz: *mz
|
23
|
+
my: *my
|
24
|
+
|
25
|
+
2:
|
26
|
+
- !ruby/range 1..250:
|
27
|
+
z_value: 1
|
28
|
+
mz: &mz 11
|
29
|
+
my: &my 40
|
30
|
+
- !ruby/range 251..270:
|
31
|
+
z_value: 1
|
32
|
+
mz: *mz
|
33
|
+
my: *my
|
34
|
+
- !ruby/range 271..290:
|
35
|
+
z_value: 0.75
|
36
|
+
mz: *mz
|
37
|
+
my: *my
|
38
|
+
|
39
|
+
3:
|
40
|
+
- !ruby/range 1..250:
|
41
|
+
z_value: 1
|
42
|
+
mz: &mz 11
|
43
|
+
my: &my 40
|
44
|
+
- !ruby/range 251..270:
|
45
|
+
z_value: 1
|
46
|
+
mz: *mz
|
47
|
+
my: *my
|
48
|
+
- !ruby/range 271..290:
|
49
|
+
z_value: 0.75
|
50
|
+
mz: *mz
|
51
|
+
my: *my
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'calculator/config_loader'
|
2
|
+
|
3
|
+
class BindingCalculator
|
4
|
+
include ConfigLoader
|
5
|
+
|
6
|
+
attr_reader :z_value, :rotation, :pressure
|
7
|
+
|
8
|
+
def initialize(type, weight, height, size)
|
9
|
+
@type = type
|
10
|
+
@weight = weight
|
11
|
+
@height = height
|
12
|
+
@size = size
|
13
|
+
end
|
14
|
+
|
15
|
+
def code
|
16
|
+
code = 0
|
17
|
+
self.criterias.each_with_index do |c,i|
|
18
|
+
code = i
|
19
|
+
break if c.weight.include?(@weight) || c.height.include?(@height)
|
20
|
+
end
|
21
|
+
code + @type.moving_value
|
22
|
+
end
|
23
|
+
|
24
|
+
def z_value
|
25
|
+
self.indices.each do |i|
|
26
|
+
return i.z_value if i.size.include?(@size)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module ConfigLoader
|
4
|
+
extend self
|
5
|
+
|
6
|
+
def criterias
|
7
|
+
criterias = []
|
8
|
+
load_criterias.each do |c|
|
9
|
+
criterias << Criteria.new(c)
|
10
|
+
end
|
11
|
+
criterias
|
12
|
+
end
|
13
|
+
|
14
|
+
def indices
|
15
|
+
indices = []
|
16
|
+
load_indices.each do |code|
|
17
|
+
code[1].each do |v|
|
18
|
+
indices << Index.new(code[0], v)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
indices
|
22
|
+
end
|
23
|
+
|
24
|
+
def load_indices
|
25
|
+
indices ||= parse_yml("indices.yml")
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
def load_criterias
|
30
|
+
criterias ||= parse_yml("criterias.yml")
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def file_path
|
36
|
+
path ||= File.expand_path("../../../config", __FILE__)
|
37
|
+
end
|
38
|
+
|
39
|
+
def parse_yml(filename)
|
40
|
+
|
41
|
+
|
42
|
+
YAML::load(File.open("#{file_path}/#{filename}"))
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class Index
|
2
|
+
attr_reader :index, :size, :z_value, :mz, :my
|
3
|
+
|
4
|
+
def initialize(index, hash)
|
5
|
+
@index = index
|
6
|
+
@size = hash.keys.first
|
7
|
+
hash = hash[@size]
|
8
|
+
@z_value = hash["z_value"] || hash[:z_value]
|
9
|
+
@mz = hash["mz"] || hash[:mz]
|
10
|
+
@my = hash["my"] || hash[:my]
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
|
3
|
+
s.name = 'ski_binding_calculator'
|
4
|
+
s.version = '0.0.2'
|
5
|
+
s.date = '2013-07-28'
|
6
|
+
s.summary = "Ski Binding Calculator"
|
7
|
+
s.description = "A little gem to calculate the z-value accord to the iso 11088 norm."
|
8
|
+
s.authors = ["Jonas Ruef, Felix Langenegger"]
|
9
|
+
s.email = 'support@fadendaten.ch'
|
10
|
+
s.homepage = 'http://fadendaten.ch'
|
11
|
+
|
12
|
+
s.add_development_dependency "rspec", "~> 2.14.1"
|
13
|
+
s.add_development_dependency "spork", "~> 0.9.2"
|
14
|
+
|
15
|
+
s.files = Dir.glob("{config,lib,spec}/**/*")
|
16
|
+
s.files += %w(Rakefile ski_binding_calculator.gemspec)
|
17
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe BindingCalculator do
|
4
|
+
before(:each) do
|
5
|
+
@type = DriverType.new("2",2)
|
6
|
+
@weight = 16
|
7
|
+
@height = 308
|
8
|
+
@size = 192
|
9
|
+
@calculator = BindingCalculator.new(@type, @weight, @height, @size)
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "new" do
|
13
|
+
it "should return a BindingCalculator class" do
|
14
|
+
BindingCalculator.new(@type, @weight, @height, @size).class.should == BindingCalculator
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "config laoder" do
|
19
|
+
it "should responds to criterias" do
|
20
|
+
@calculator.should respond_to :criterias
|
21
|
+
end
|
22
|
+
it "should responds to load_criterias" do
|
23
|
+
@calculator.should respond_to :load_criterias
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "code" do
|
28
|
+
it "should return a valid code" do
|
29
|
+
@calculator.code.should == 3
|
30
|
+
end
|
31
|
+
it "should not be 4" do
|
32
|
+
@calculator.code.should_not == 4
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "z_value" do
|
37
|
+
it "should return a Float" do
|
38
|
+
@calculator.z_value.class.should == Float
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should return a valid value" do
|
42
|
+
@calculator.z_value.should == 0.75
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "ConfigLoader" do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@dummy_class = DummyClass.new
|
7
|
+
@dummy_class.extend(ConfigLoader)
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "loading config" do
|
11
|
+
it "should load a config file" do
|
12
|
+
@dummy_class.load_criterias.class.should == Array
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "first element of the array" do
|
17
|
+
it "should be a hash" do
|
18
|
+
@dummy_class.load_criterias[0].class.should == Hash
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should not be a string" do
|
22
|
+
@dummy_class.load_criterias[0].class.should_not == String
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "criterias" do
|
27
|
+
it "should load all criterias" do
|
28
|
+
@dummy_class.criterias.class.should == Array
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should load the an array of Criterias" do
|
32
|
+
@dummy_class.criterias[0].class.should == Criteria
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class DummyClass
|
38
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
|
4
|
+
describe Criteria do
|
5
|
+
|
6
|
+
before(:each) do
|
7
|
+
@hash = {:weight => 10..13, :height => 10..148}
|
8
|
+
@criteria = Criteria.new(@hash)
|
9
|
+
end
|
10
|
+
|
11
|
+
describe ".new" do
|
12
|
+
it "should return a Criteria class" do
|
13
|
+
Criteria.new(@hash).class.should == Criteria
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "weight" do
|
18
|
+
it "shoud return the weight rang" do
|
19
|
+
@criteria.weight.should == (10..13)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should be a range" do
|
23
|
+
@criteria.weight.class.should == Range
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "height" do
|
28
|
+
it "shoud return the height rang" do
|
29
|
+
@criteria.height.should == (10..148)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should be a range" do
|
33
|
+
@criteria.height.class.should == Range
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe DriverType do
|
4
|
+
|
5
|
+
describe ".new" do
|
6
|
+
it "should create a new DriverType" do
|
7
|
+
DriverType.new("1", -1).class.should == DriverType
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "methods" do
|
12
|
+
before(:each) do
|
13
|
+
@driver = DriverType.new("1", -1)
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "name" do
|
17
|
+
it "should have a driver type name" do
|
18
|
+
@driver.name.should == "1"
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should be a string" do
|
22
|
+
@driver.name.class.should == String
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "moving_value" do
|
27
|
+
it "should have a moving value" do
|
28
|
+
@driver.moving_value.should == -1
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should be a fixnum" do
|
32
|
+
@driver.moving_value.class.should == Fixnum
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/spec/index_spec.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Index do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@hash = {(1..250) => {:z_value => 1.5, :my => 52, :mz => 14}}
|
7
|
+
@index = Index.new(1, @hash)
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "new" do
|
11
|
+
it "should return a Index class" do
|
12
|
+
Index.new(0, @hash).class.should == Index
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "size" do
|
17
|
+
it "should return the size range" do
|
18
|
+
@index.size.should == (1..250)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should be a range" do
|
22
|
+
@index.size.class.should == Range
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "z_value" do
|
27
|
+
it "should respond to z_value" do
|
28
|
+
@index.should respond_to :z_value
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should return the z_value" do
|
32
|
+
@index.z_value.should == 1.5
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'spork'
|
3
|
+
|
4
|
+
Spork.prefork do
|
5
|
+
require 'rspec'
|
6
|
+
|
7
|
+
unless defined?(SPEC_ROOT)
|
8
|
+
SPEC_ROOT = File.expand_path("../", __FILE__)
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
RSpec.configure do |config|
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
Spork.each_run do
|
17
|
+
require 'ski_binding_calculator'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
metadata
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ski_binding_calculator
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Jonas Ruef, Felix Langenegger
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-07-28 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 2.14.1
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 2.14.1
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: spork
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 0.9.2
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.9.2
|
46
|
+
description: A little gem to calculate the z-value accord to the iso 11088 norm.
|
47
|
+
email: support@fadendaten.ch
|
48
|
+
executables: []
|
49
|
+
extensions: []
|
50
|
+
extra_rdoc_files: []
|
51
|
+
files:
|
52
|
+
- config/criterias.yml
|
53
|
+
- config/indices.yml
|
54
|
+
- lib/calculator/binding_calculator.rb
|
55
|
+
- lib/calculator/config_loader.rb
|
56
|
+
- lib/calculator/criteria.rb
|
57
|
+
- lib/calculator/driver_type.rb
|
58
|
+
- lib/calculator/index.rb
|
59
|
+
- lib/ski_binding_calculator.rb
|
60
|
+
- spec/binding_calculator_spec.rb
|
61
|
+
- spec/config_loader_spec.rb
|
62
|
+
- spec/criteria_spec.rb
|
63
|
+
- spec/driver_type_spec.rb
|
64
|
+
- spec/index_spec.rb
|
65
|
+
- spec/spec_helper.rb
|
66
|
+
- Rakefile
|
67
|
+
- ski_binding_calculator.gemspec
|
68
|
+
homepage: http://fadendaten.ch
|
69
|
+
licenses: []
|
70
|
+
post_install_message:
|
71
|
+
rdoc_options: []
|
72
|
+
require_paths:
|
73
|
+
- lib
|
74
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ! '>='
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
80
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
requirements: []
|
87
|
+
rubyforge_project:
|
88
|
+
rubygems_version: 1.8.25
|
89
|
+
signing_key:
|
90
|
+
specification_version: 3
|
91
|
+
summary: Ski Binding Calculator
|
92
|
+
test_files: []
|