resistor 0.0.1 → 0.1.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rspec +2 -0
- data/README.md +23 -10
- data/lib/resistor.rb +9 -1
- data/lib/resistor/basic_resistor.rb +41 -0
- data/lib/resistor/color_code.rb +79 -0
- data/lib/resistor/combined_resistor.rb +18 -0
- data/lib/resistor/version.rb +1 -1
- data/resistor.gemspec +1 -0
- data/spec/basic_resistor_spec.rb +81 -0
- data/spec/color_code_spec.rb +69 -0
- data/spec/spec_helper.rb +4 -0
- metadata +27 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b380cd33929b8b61653a914b7979f718b6b28d12
|
4
|
+
data.tar.gz: 00071b06604e805d3abb8e061e1ad401ccab1413
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7065ee63b363a8532a62118d77e0141c8cc3ad9d6ecd9521971a1465e3cd0895c31b6e3e717cbf91496147e81e6361a2038cd870b237a344fc0a747ec4931167
|
7
|
+
data.tar.gz: 07fd9e498c2d20579330312d566af7dd8e92cc7fee67d7f6d34b96746db148e4acf89abb194844ac9225e641148779a4e73ae2b93673a366e24a9e40f884461e
|
data/.gitignore
CHANGED
data/.rspec
ADDED
data/README.md
CHANGED
@@ -2,26 +2,39 @@
|
|
2
2
|
|
3
3
|
## Installation
|
4
4
|
|
5
|
-
Add this line to your application's Gemfile:
|
5
|
+
Add this line to your application's Gemfile:
|
6
6
|
|
7
7
|
```ruby
|
8
8
|
gem 'resistor'
|
9
9
|
```
|
10
10
|
|
11
|
-
And then execute:
|
11
|
+
And then execute:
|
12
12
|
|
13
|
-
$ bundle
|
13
|
+
$ bundle install
|
14
14
|
|
15
|
-
Or install it yourself as:
|
15
|
+
Or install it yourself as:
|
16
16
|
|
17
17
|
$ gem install resistor
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
-
|
21
|
+
```ruby
|
22
|
+
require 'resistor'
|
23
|
+
|
24
|
+
# Resistor Color Code Calculation
|
25
|
+
Resistor::ColorCode.encode(4700) # => [:yellow, :purple, :red, :gold]
|
26
|
+
Resistor::ColorCode.decode([:yellow, :purple, :red, :gold]) # => 4700.0
|
27
|
+
|
28
|
+
# Combined Resistance Calculation
|
29
|
+
# --[r1]-- --[r4]--
|
30
|
+
# --| |--[r3]--| |--
|
31
|
+
# --[r2]-- --[r4]--
|
22
32
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
33
|
+
r1 = Resistor.new(ohm: 20)
|
34
|
+
r2 = Resistor.new(ohm: 30)
|
35
|
+
r3 = Resistor.new(ohm: 4)
|
36
|
+
r4 = Resistor.new(ohm: 8)
|
37
|
+
|
38
|
+
r5 = (r1 / r2) + r3 + (r4 / r4)
|
39
|
+
r5.ohm # => 20.0
|
40
|
+
```
|
data/lib/resistor.rb
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
require "resistor/version"
|
2
|
+
require "resistor/color_code"
|
3
|
+
require "resistor/basic_resistor"
|
4
|
+
require "resistor/combined_resistor"
|
2
5
|
|
3
6
|
module Resistor
|
4
|
-
|
7
|
+
|
8
|
+
class << self
|
9
|
+
def new(opt = {})
|
10
|
+
Resistor::BasicResistor.new(opt)
|
11
|
+
end
|
12
|
+
end
|
5
13
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Resistor
|
2
|
+
class BasicResistor
|
3
|
+
|
4
|
+
attr_reader :ohm, :code, :error_range
|
5
|
+
|
6
|
+
def initialize(ohm:nil, code:nil, error_range: 5.0)
|
7
|
+
opt = {error_range: error_range}
|
8
|
+
if ohm
|
9
|
+
@ohm = ohm.to_f
|
10
|
+
@code = Resistor::ColorCode.encode(@ohm, opt)
|
11
|
+
@error_range = error_range
|
12
|
+
elsif code
|
13
|
+
raise ArgumentError unless code.is_a? Array
|
14
|
+
@code = code.map(&:to_sym)
|
15
|
+
@ohm = Resistor::ColorCode.decode(@code)
|
16
|
+
@error_range = Resistor::ColorCode::ERROR_RANGE[@code[3].to_sym]
|
17
|
+
else
|
18
|
+
raise ArgumentError
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def ohm=(ohm)
|
23
|
+
@ohm = ohm.to_f
|
24
|
+
@code = Resistor::ColorCode.encode(@ohm)
|
25
|
+
end
|
26
|
+
|
27
|
+
def code=(code)
|
28
|
+
@code = code.map(&:to_sym)
|
29
|
+
@ohm = Resistor::ColorCode.decode(@code)
|
30
|
+
@error_range = Resistor::ColorCode::ERROR_RANGE[@code[3].to_sym]
|
31
|
+
end
|
32
|
+
|
33
|
+
def +(other)
|
34
|
+
Resistor::CombinedResistor.new(@ohm + other.ohm)
|
35
|
+
end
|
36
|
+
|
37
|
+
def /(other)
|
38
|
+
Resistor::CombinedResistor.new(1 / (1 / @ohm + 1 / other.ohm))
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
module Resistor
|
2
|
+
module ColorCode
|
3
|
+
|
4
|
+
# 1桁目、2桁目の数値
|
5
|
+
NUM = {
|
6
|
+
:black => 0,
|
7
|
+
:brown => 1,
|
8
|
+
:red => 2,
|
9
|
+
:orange => 3,
|
10
|
+
:yellow => 4,
|
11
|
+
:green => 5,
|
12
|
+
:blue => 6,
|
13
|
+
:purple => 7,
|
14
|
+
:gray => 8,
|
15
|
+
:white => 9
|
16
|
+
}.freeze
|
17
|
+
|
18
|
+
# 3桁目で指定される乗数
|
19
|
+
MULT = {
|
20
|
+
:black => 0,
|
21
|
+
:brown => 1,
|
22
|
+
:red => 2,
|
23
|
+
:orange => 3,
|
24
|
+
:yellow => 4,
|
25
|
+
:green => 5,
|
26
|
+
:blue => 6,
|
27
|
+
:gold => -1,
|
28
|
+
:silver => -2
|
29
|
+
}.freeze
|
30
|
+
|
31
|
+
# 4桁目で指定される誤差範囲
|
32
|
+
ERROR_RANGE = {
|
33
|
+
:brown => 1.0,
|
34
|
+
:red => 2.0,
|
35
|
+
:orange => 0.05,
|
36
|
+
:green => 0.5,
|
37
|
+
:blue => 0.25,
|
38
|
+
:purple => 0.1,
|
39
|
+
:gold => 5.0,
|
40
|
+
:silver => 10.0
|
41
|
+
}.freeze
|
42
|
+
|
43
|
+
# 抵抗値 -> カラーコード
|
44
|
+
def self.encode(ohm, error_range: 5.0)
|
45
|
+
return [NUM.key(0)] if ohm == 0
|
46
|
+
raise ArgumentError if ohm < 0.1
|
47
|
+
|
48
|
+
# 0.1以上で1より小さい
|
49
|
+
if ohm < 1
|
50
|
+
ohm_str = (ohm*100).to_s.split('')
|
51
|
+
[NUM.key(ohm_str[0].to_i), NUM.key(ohm_str[1].to_i),
|
52
|
+
MULT.key(-2), ERROR_RANGE.key(error_range)]
|
53
|
+
|
54
|
+
# 1以上で10より小さい(1桁)
|
55
|
+
elsif ohm < 10
|
56
|
+
ohm_str = (ohm*10).to_s.split('')
|
57
|
+
[NUM.key(ohm_str[0].to_i), NUM.key(ohm_str[1].to_i),
|
58
|
+
MULT.key(-1), ERROR_RANGE.key(error_range)]
|
59
|
+
|
60
|
+
# 2桁以上
|
61
|
+
else
|
62
|
+
ohm_str = ohm.to_i.to_s.split('')
|
63
|
+
[NUM.key(ohm_str[0].to_i), NUM.key(ohm_str[1].to_i),
|
64
|
+
MULT.key(ohm_str.size - 2), ERROR_RANGE.key(error_range)]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# カラーコード -> 抵抗値
|
69
|
+
def self.decode(code)
|
70
|
+
raise ArgumentError unless code.is_a? Array
|
71
|
+
code = code.map(&:to_sym)
|
72
|
+
return 0.0 if code == [:black]
|
73
|
+
raise ArgumentError if code[0] == :black
|
74
|
+
|
75
|
+
ohm = (NUM[code[0]]*10 + NUM[code[1]]) * 10**MULT[code[2]]
|
76
|
+
return ohm.to_f
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Resistor
|
2
|
+
class CombinedResistor
|
3
|
+
|
4
|
+
attr_reader :ohm
|
5
|
+
|
6
|
+
def initialize(ohm)
|
7
|
+
@ohm = ohm.to_f
|
8
|
+
end
|
9
|
+
|
10
|
+
def +(other)
|
11
|
+
Resistor::CombinedResistor.new(@ohm + other.ohm)
|
12
|
+
end
|
13
|
+
|
14
|
+
def /(other)
|
15
|
+
Resistor::CombinedResistor.new(1 / (1 / @ohm + 1 / other.ohm))
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/resistor/version.rb
CHANGED
data/resistor.gemspec
CHANGED
@@ -0,0 +1,81 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require_relative "spec_helper"
|
4
|
+
|
5
|
+
describe Resistor::BasicResistor do
|
6
|
+
|
7
|
+
describe '::new' do
|
8
|
+
let(:resistor) { Resistor.new(ohm: ohm, code: code) }
|
9
|
+
|
10
|
+
context '抵抗値を指定した場合' do
|
11
|
+
let(:ohm) { 4700 }
|
12
|
+
let(:code) { nil }
|
13
|
+
|
14
|
+
it { expect(resistor.ohm).to eq 4700.0 }
|
15
|
+
it { expect(resistor.code).to eq [:yellow, :purple, :red, :gold] }
|
16
|
+
it { expect(resistor.error_range).to eq 5.0 }
|
17
|
+
end
|
18
|
+
|
19
|
+
context '抵抗値を指定した場合' do
|
20
|
+
let(:ohm) { nil }
|
21
|
+
let(:code) { ['brown', 'black', 'blue', 'silver'] }
|
22
|
+
|
23
|
+
it { expect(resistor.ohm).to eq 10_000_000 }
|
24
|
+
it { expect(resistor.code).to eq [:brown, :black, :blue, :silver] }
|
25
|
+
it { expect(resistor.error_range).to eq 10.0 }
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'どちらも指定しなかった場合' do
|
29
|
+
let(:ohm) { nil }
|
30
|
+
let(:code) { nil }
|
31
|
+
|
32
|
+
it { expect { is_expected }.to raise_error(ArgumentError) }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '#+, #/' do
|
37
|
+
context '直列接続の合成抵抗' do
|
38
|
+
r1 = Resistor.new(ohm: 100)
|
39
|
+
r2 = Resistor.new(ohm: 200)
|
40
|
+
r3 = Resistor.new(ohm: 300)
|
41
|
+
|
42
|
+
it { expect((r1 + r2 + r3).ohm).to eq 600.0 }
|
43
|
+
end
|
44
|
+
|
45
|
+
context '並列接続の合成抵抗' do
|
46
|
+
r1 = Resistor.new(ohm: 30)
|
47
|
+
r2 = Resistor.new(ohm: 15)
|
48
|
+
r3 = Resistor.new(ohm: 10)
|
49
|
+
|
50
|
+
it { expect((r1 / r2 / r3).ohm).to eq 5.0 }
|
51
|
+
end
|
52
|
+
|
53
|
+
context '並列と直列を合わせた合成抵抗' do
|
54
|
+
r1 = Resistor.new(ohm: 20)
|
55
|
+
r2 = Resistor.new(ohm: 30)
|
56
|
+
r3 = Resistor.new(ohm: 4)
|
57
|
+
r4 = Resistor.new(ohm: 8)
|
58
|
+
|
59
|
+
it { expect(((r1 / r2) + r3 + (r4 / r4)).ohm).to eq 20.0 }
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe '#ohm=, #code=' do
|
64
|
+
context '抵抗値を変更する場合' do
|
65
|
+
resistor = Resistor.new(ohm: 100)
|
66
|
+
resistor.ohm = 4.7
|
67
|
+
|
68
|
+
it { expect(resistor.ohm).to eq 4.7 }
|
69
|
+
it { expect(resistor.code).to eq [:yellow, :purple, :gold, :gold] }
|
70
|
+
end
|
71
|
+
|
72
|
+
context 'カラーコードを変更する場合' do
|
73
|
+
resistor = Resistor.new(ohm: 100)
|
74
|
+
resistor.code = ['green', 'brown', 'silver', 'brown']
|
75
|
+
|
76
|
+
it { expect(resistor.ohm).to eq 0.51 }
|
77
|
+
it { expect(resistor.code).to eq [:green, :brown, :silver, :brown] }
|
78
|
+
it { expect(resistor.error_range).to eq 1.0 }
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require_relative "spec_helper"
|
4
|
+
|
5
|
+
describe Resistor::ColorCode do
|
6
|
+
|
7
|
+
describe '::encode' do
|
8
|
+
subject { Resistor::ColorCode.encode(ohm) }
|
9
|
+
|
10
|
+
context '0Ωの場合' do
|
11
|
+
let(:ohm) { 0 }
|
12
|
+
it { is_expected.to eq [:black] }
|
13
|
+
end
|
14
|
+
|
15
|
+
context '0.1Ω以上1Ωより小さい場合' do
|
16
|
+
let(:ohm) { 0.24 }
|
17
|
+
it { is_expected.to eq [:red, :yellow, :silver, :gold] }
|
18
|
+
end
|
19
|
+
|
20
|
+
context '1Ω以上10Ωより小さい場合' do
|
21
|
+
let(:ohm) { 2 }
|
22
|
+
it { is_expected.to eq [:red, :black, :gold, :gold] }
|
23
|
+
end
|
24
|
+
|
25
|
+
context '10Ω以上の場合' do
|
26
|
+
let(:ohm) { 3300 }
|
27
|
+
it { is_expected.to eq [:orange, :orange, :red, :gold] }
|
28
|
+
end
|
29
|
+
|
30
|
+
context '0Ωより小さい場合' do
|
31
|
+
let(:ohm) { -10 }
|
32
|
+
it { expect { is_expected }.to raise_error(ArgumentError) }
|
33
|
+
end
|
34
|
+
|
35
|
+
context '0.1Ωより小さい場合' do
|
36
|
+
let(:ohm) { 0.01 }
|
37
|
+
it { expect { is_expected }.to raise_error(ArgumentError) }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe '::decode' do
|
42
|
+
subject { Resistor::ColorCode.decode(code) }
|
43
|
+
|
44
|
+
context '0Ωの場合' do
|
45
|
+
let(:code) { [:black] }
|
46
|
+
it { is_expected.to eq 0 }
|
47
|
+
end
|
48
|
+
|
49
|
+
context '0.1Ω以上1Ωより小さい場合' do
|
50
|
+
let(:code) { [:blue, :red, :silver, :gold] }
|
51
|
+
it { is_expected.to eq 0.62 }
|
52
|
+
end
|
53
|
+
|
54
|
+
context '1Ω以上10Ωより小さい場合' do
|
55
|
+
let(:code) { [:white, :brown, :gold, :gold] }
|
56
|
+
it { is_expected.to eq 9.1 }
|
57
|
+
end
|
58
|
+
|
59
|
+
context '10Ω以上の場合' do
|
60
|
+
let(:code) { [:brown, :black, :blue, :gold] }
|
61
|
+
it { is_expected.to eq 10_000_000 }
|
62
|
+
end
|
63
|
+
|
64
|
+
context '1本目に黒が指定された場合' do
|
65
|
+
let(:code) { [:black, :blue, :blue, :gold] }
|
66
|
+
it { expect { is_expected }.to raise_error(ArgumentError) }
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: resistor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- seinosuke
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-01-
|
11
|
+
date: 2015-01-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.1'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.1'
|
41
55
|
description: gem for resistor
|
42
56
|
email:
|
43
57
|
- seinosuke.3606@gmail.com
|
@@ -46,13 +60,20 @@ extensions: []
|
|
46
60
|
extra_rdoc_files: []
|
47
61
|
files:
|
48
62
|
- ".gitignore"
|
63
|
+
- ".rspec"
|
49
64
|
- Gemfile
|
50
65
|
- LICENSE.txt
|
51
66
|
- README.md
|
52
67
|
- Rakefile
|
53
68
|
- lib/resistor.rb
|
69
|
+
- lib/resistor/basic_resistor.rb
|
70
|
+
- lib/resistor/color_code.rb
|
71
|
+
- lib/resistor/combined_resistor.rb
|
54
72
|
- lib/resistor/version.rb
|
55
73
|
- resistor.gemspec
|
74
|
+
- spec/basic_resistor_spec.rb
|
75
|
+
- spec/color_code_spec.rb
|
76
|
+
- spec/spec_helper.rb
|
56
77
|
homepage: ''
|
57
78
|
licenses:
|
58
79
|
- MIT
|
@@ -77,4 +98,7 @@ rubygems_version: 2.4.5
|
|
77
98
|
signing_key:
|
78
99
|
specification_version: 4
|
79
100
|
summary: Resistor gem
|
80
|
-
test_files:
|
101
|
+
test_files:
|
102
|
+
- spec/basic_resistor_spec.rb
|
103
|
+
- spec/color_code_spec.rb
|
104
|
+
- spec/spec_helper.rb
|