eletro 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -16,8 +16,42 @@ Eletric Stuff, Ohm Law, Resistor Colors, Karnaugh Maps...
16
16
  -> 1kΩ --BKR--
17
17
 
18
18
 
19
+ eletro 4k7
20
+
21
+ -> 4.7kΩ --YVR--
22
+
23
+
24
+
19
25
  With *SH colors!
20
26
 
27
+
28
+ == Power Supply (Source)
29
+
30
+ Calculates load network on a PS.
31
+ Simbling loads mean serial, simbling arrays parallel.
32
+
33
+ s = Source.new("12dc")
34
+ s << Resistor.new("100")
35
+ s << [Resistor.new("100"), Resistor.new("100")]
36
+ s << [Resistor.new("100"), Resistor.new("200")]
37
+
38
+ s.sum_net
39
+ => Resistor 54.5454Ω
40
+
41
+ s.i
42
+ => 0.220mA
43
+
44
+ s << Resistor.new("100")
45
+ s << [Resistor.new("100"), Resistor.new("100")]
46
+ s << [Resistor.new("100"), [Resistor.new("100"), Resistor.new("100")]]
47
+
48
+ s.sum_net
49
+ => Resistor 33.3333Ω
50
+
51
+ s.i
52
+ => 0.360mA
53
+
54
+
21
55
  == Ohm`s Law
22
56
 
23
57
  TBF
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.1.0
data/eletro.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{eletro}
8
- s.version = "0.0.2"
8
+ s.version = "0.1.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Marcos Piccinini"]
12
- s.date = %q{2010-11-10}
12
+ s.date = %q{2010-11-11}
13
13
  s.default_executable = %q{eletro}
14
14
  s.description = %q{Eletric Stuff, Ohm Law, Resistor Colors, Karnaugh Maps and other gems on Ruby}
15
15
  s.email = %q{x@nofxx.com}
@@ -26,11 +26,23 @@ Gem::Specification.new do |s|
26
26
  "bin/eletro",
27
27
  "eletro.gemspec",
28
28
  "lib/eletro.rb",
29
+ "lib/eletro/capacitor.rb",
30
+ "lib/eletro/diode.rb",
31
+ "lib/eletro/helpers/color_code.rb",
32
+ "lib/eletro/ic.rb",
33
+ "lib/eletro/inductor.rb",
34
+ "lib/eletro/logic.rb",
29
35
  "lib/eletro/ohm.rb",
36
+ "lib/eletro/part.rb",
30
37
  "lib/eletro/resistor.rb",
38
+ "lib/eletro/source.rb",
39
+ "lib/eletro/transistor.rb",
31
40
  "spec/colour_test",
41
+ "spec/eletro/capacitor_spec.rb",
32
42
  "spec/eletro/ohm_spec.rb",
43
+ "spec/eletro/part_spec.rb",
33
44
  "spec/eletro/resistor_spec.rb",
45
+ "spec/eletro/source_spec.rb",
34
46
  "spec/eletro_spec.rb",
35
47
  "spec/spec_helper.rb"
36
48
  ]
@@ -41,8 +53,11 @@ Gem::Specification.new do |s|
41
53
  s.summary = %q{Eletric Helpers on Ruby}
42
54
  s.test_files = [
43
55
  "spec/spec_helper.rb",
56
+ "spec/eletro/source_spec.rb",
57
+ "spec/eletro/capacitor_spec.rb",
44
58
  "spec/eletro/ohm_spec.rb",
45
59
  "spec/eletro/resistor_spec.rb",
60
+ "spec/eletro/part_spec.rb",
46
61
  "spec/eletro_spec.rb"
47
62
  ]
48
63
 
data/lib/eletro.rb CHANGED
@@ -1,6 +1,15 @@
1
1
 
2
+ require "eletro/helpers/color_code"
2
3
  require "eletro/ohm"
4
+ require "eletro/part"
5
+ require "eletro/diode"
6
+ require "eletro/logic"
7
+ require "eletro/source"
3
8
  require "eletro/resistor"
9
+ require "eletro/inductor"
10
+ require "eletro/capacitor"
11
+ require "eletro/transistor"
12
+ require "eletro/ic"
4
13
 
5
14
  module Eletro
6
15
 
@@ -8,7 +17,7 @@ module Eletro
8
17
  params = args.join
9
18
  if params =~ /A|mA/ # need to improve
10
19
  else
11
- puts Resistor.new(params).to_s
20
+ puts Resistor.new(params).pretty_output
12
21
  end
13
22
  end
14
23
 
@@ -0,0 +1,59 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module Eletro
4
+
5
+ class Capacitor < Part
6
+ attr_accessor :polarized
7
+
8
+ include ColorCode
9
+
10
+ def initialize(*args)
11
+ parse_color_code(args.join)
12
+ end
13
+
14
+ def parse txt
15
+ if m = txt.match(/#{mult.keys.join('|')}/)
16
+ txt.gsub!(/#{m[0]}/, ".")
17
+ m = mult[m[0]]
18
+ else
19
+ st, nd, m = txt.split(//)
20
+ m ||= 0
21
+ m = m.to_i #(10**-(m.to_i))
22
+ end
23
+ num = ("#{st}#{nd}#{'0' * m}").to_f * mult['p']
24
+ num
25
+ end
26
+
27
+ def unit
28
+ "F"
29
+ end
30
+
31
+ def mult
32
+ { 'n' => 10e-6, 'u' => 10e-9, 'p' => 10e-12 }
33
+ end
34
+
35
+ def format
36
+ m = 'p'
37
+ mult.keys.reverse.each do |k|
38
+ m = k if value >= mult[k]
39
+ end
40
+ # v = if value > mult[0]
41
+ # "%g" % @value
42
+ # elsif value < 1000000
43
+ # "%gk" % (@value/1000)
44
+ # else
45
+ # "%gm" % (@value/1000000)
46
+ # end
47
+ out = "%g#{m}#{unit}" % (value/mult[m]).round
48
+ out += " ± #{@precision}%" if @precision
49
+ out
50
+ end
51
+
52
+ def polarized?
53
+ !!@polarized
54
+ end
55
+
56
+ end
57
+
58
+
59
+ end
@@ -0,0 +1,12 @@
1
+ module Eletro
2
+
3
+ class Diode < Part
4
+
5
+
6
+ end
7
+
8
+ class LED < Diode
9
+
10
+
11
+ end
12
+ end
@@ -0,0 +1,91 @@
1
+ # -*- coding: utf-8 -*-
2
+ module Eletro
3
+
4
+ COLOR = true
5
+
6
+ module ColorCode
7
+ attr_reader :color
8
+
9
+ CODE = [:k, :b, :r, :o, :y, :g, :u, :v, :a, :w, :l, :s]
10
+ COLORS = {
11
+ :k => :black,
12
+ :b => :brown,
13
+ :r => :red,
14
+ :o => :orange,
15
+ :y => :yellow,
16
+ :g => :green,
17
+ :u => :blue,
18
+ :v => :violet,
19
+ :a => :gray,
20
+ :w => :white,
21
+ :l => :gold,
22
+ :s => :silver}
23
+
24
+ PRECISION = [nil, 1, 2, nil, nil, 0.5, 0.25, 01, 0.05, nil, 5, 10, 20]
25
+
26
+ alias :colors :color
27
+
28
+ def parse_color_code(params)
29
+ return if params.empty?
30
+ if params =~ /\d/
31
+ # m = params.match(/(\d*[,|{k|m|g}|\.]?\d*)\s*(k|m|g)?/)
32
+ # return unless m
33
+ @value = parse(params)
34
+ @color = value2color(@value)
35
+ else
36
+ @color = params.split(//)
37
+ @value = color2value(@color)
38
+ end
39
+ end
40
+
41
+ def calc char
42
+ CODE.index(char.downcase.to_sym)
43
+ end
44
+
45
+ def color2value chars
46
+ out = calc(chars[0])
47
+ out = (out.to_s + calc(chars[1]).to_s).to_f
48
+ out *= (10 ** (calc(chars[2])))
49
+ if chars.size > 3
50
+ @precision = PRECISION[calc(chars[3])]
51
+ else
52
+ #out *= (10 ** (calc(chars[2])))
53
+ end
54
+ out
55
+ end
56
+
57
+ def value2color value
58
+ st, nd, *rest = value.to_s.split(//)
59
+ out = [CODE[st.to_i], CODE[nd.to_i]]
60
+ index = 1 if rest.size == 3 # ugly... sleepy... fix....
61
+ index ||= (value ** 0.1).round
62
+ out << CODE[index]
63
+ out
64
+ end
65
+
66
+
67
+ def rgblize color
68
+ s = case color.to_s.downcase.to_sym
69
+ when :k then "\e[40m"
70
+ when :b then "\e[0;33m"
71
+ when :r then "\e[41m"
72
+ when :g then "\e[42m"
73
+ when :y then "\e[1;33m"
74
+ when :o then "\e[43m"
75
+ when :u then "\e[44m"
76
+ when :v then "\e[45m"
77
+ when :w then "\e[47m"
78
+ when :a then "\e[31m"
79
+ else ".."
80
+ end
81
+ s += "#{color.to_s.upcase}\e[0m"
82
+ end
83
+
84
+
85
+ def bold(txt); "\e[2m#{txt}\e[0m"; end
86
+
87
+
88
+ end
89
+
90
+
91
+ end
data/lib/eletro/ic.rb ADDED
@@ -0,0 +1,8 @@
1
+
2
+ module Eletro
3
+
4
+ class IC
5
+
6
+ end
7
+
8
+ end
@@ -0,0 +1,7 @@
1
+ module Eletro
2
+
3
+ class Inductor < Part
4
+
5
+ end
6
+
7
+ end
@@ -0,0 +1,9 @@
1
+
2
+ module Eletro
3
+
4
+ class Logic
5
+
6
+ end
7
+ end
8
+
9
+
@@ -0,0 +1,71 @@
1
+ module Eletro
2
+
3
+ class Part
4
+ attr_accessor :value, :unit, :p0, :p1, :v
5
+
6
+ def p0
7
+ @p0 ||= :gnd
8
+ end
9
+
10
+ def p1
11
+ @p1 ||= :pwd
12
+ end
13
+
14
+ def *(other)
15
+ self.class.new(self.value*other)
16
+ end
17
+
18
+ def +(other)
19
+ self.class.new(self.value+other)
20
+ end
21
+
22
+ def /(other)
23
+ self.class.new(self.value/other)
24
+ end
25
+
26
+ def -(other)
27
+ self.class.new(self.value-other)
28
+ end
29
+
30
+ def abs
31
+ self.value.abs
32
+ end
33
+
34
+ def to_f; @value; end
35
+ def to_i; @value.to_i; end
36
+
37
+ def unit; end
38
+ def to_s
39
+ "#{@value}#{unit}"
40
+ end
41
+
42
+
43
+ def coerce(other); [other, @value]; end
44
+
45
+ def round
46
+ # todo, table standard values, find nearest...
47
+ end
48
+
49
+ def method_missing(*args)
50
+ txt = args.join
51
+ if txt =~ /p\d+/
52
+ if txt =~ /=/
53
+ var, value = txt.split("=")
54
+ instance_variable_set("@#{var}", value)
55
+ self.class.instance_eval do
56
+ define_method(var, lambda { instance_variable_get("@#{var}") })
57
+ end
58
+ else
59
+ respond_to?(txt) ? send(args.join) : nil
60
+ end
61
+ else
62
+ raise NoMethodError.new("undefined method `#{args.join}' " +
63
+ "for #{self.inspect}:#{self.class.name}")
64
+ end
65
+
66
+ end
67
+
68
+ end
69
+
70
+
71
+ end
@@ -4,80 +4,30 @@
4
4
 
5
5
  module Eletro
6
6
 
7
- COLOR = true
7
+ class Resistor < Part
8
8
 
9
- class Resistor
10
- attr_reader :value, :color
11
-
12
- UNIT = 'Ω'
13
- MULT = /k|m|g/
14
-
15
- CODE = [:k, :b, :r, :o, :y, :g, :u, :v, :a, :w, :l, :s]
16
- COLORS = {
17
- :k => :black,
18
- :b => :brown,
19
- :r => :red,
20
- :o => :orange,
21
- :y => :yellow,
22
- :g => :green,
23
- :u => :blue,
24
- :v => :violet,
25
- :a => :gray,
26
- :w => :white,
27
- :l => :gold,
28
- :s => :silver}
29
-
30
- PRECISION = [nil, 1, 2, nil, nil, 0.5, 0.25, 01, 0.05, nil, 5, 10, 20]
9
+ include ColorCode
31
10
 
32
11
  def initialize(*args)
33
- params = args.join
34
- if params =~ /\d/
35
- # m = params.match(/(\d*[,|{k|m|g}|\.]?\d*)\s*(k|m|g)?/)
36
- # return unless m
37
- @value = parse(params)
38
- @color = value2color(@value)
39
- else
40
- @color = params.split(//)
41
- @value = color2value(@color)
42
- end
12
+ parse_color_code(args.join)
43
13
  end
44
14
 
45
15
  def parse txt
46
- if mult = txt.match(MULT)
47
- txt.gsub!(/#{mult[0]}/, ".") #if txt =~ /#{MULT}\d/
48
- mult = { 'k' => 1000, 'm' => 10000000 }[mult[0]]
16
+ if m = txt.match(/#{mult.keys.join('|')}/)
17
+ txt.gsub!(/#{m[0]}/, ".")
18
+ m = mult[m[0]]
49
19
  end
50
20
  num = txt.to_f
51
- num *= mult if mult
21
+ num *= m if m
52
22
  num
53
23
  end
54
24
 
55
- alias :colors :color
56
-
57
-
58
- def calc char
59
- CODE.index(char.downcase.to_sym)
25
+ def unit
26
+ "Ω"
60
27
  end
61
28
 
62
- def color2value chars
63
- out = calc(chars[0])
64
- out = (out.to_s + calc(chars[1]).to_s).to_f
65
- out *= (10 ** (calc(chars[2])))
66
- if chars.size > 3
67
- @precision = PRECISION[calc(chars[3])]
68
- else
69
- #out *= (10 ** (calc(chars[2])))
70
- end
71
- out
72
- end
73
-
74
- def value2color value
75
- st, nd, *rest = value.to_s.split(//)
76
- out = [CODE[st.to_i], CODE[nd.to_i]]
77
- index = 1 if rest.size == 3 # ugly... sleepy... fix....
78
- index ||= (value ** 0.1).round
79
- out << CODE[index]
80
- out.map(&:upcase)
29
+ def mult
30
+ { 'k' => 10e2, 'm' => 10e5 }
81
31
  end
82
32
 
83
33
  def format
@@ -88,40 +38,17 @@ module Eletro
88
38
  else
89
39
  "%gm" % (@value/1000000)
90
40
  end
91
- out = "#{v}#{UNIT}"
41
+ out = "#{v}#{unit}"
92
42
  out += " ± #{@precision}%" if @precision
93
43
  out
94
44
  end
95
45
 
96
- def to_s
46
+ def pretty_output
97
47
  out = format
98
48
  out += " --"
99
- @color.each do |c|
100
- out += COLOR ? rgblize(c) : c
101
- end
49
+ @color.each { |c| out += COLOR ? rgblize(c) : c }
102
50
  out + "--"
103
-
104
51
  end
105
52
 
106
-
107
- def rgblize color
108
- s = case color.downcase.to_sym
109
- when :k then "\e[40m"
110
- when :b then "\e[0;33m"
111
- when :r then "\e[41m"
112
- when :g then "\e[42m"
113
- when :y then "\e[1;33m"
114
- when :o then "\e[43m"
115
- when :u then "\e[44m"
116
- when :v then "\e[45m"
117
- when :w then "\e[47m"
118
- when :a then "\e[31m"
119
- else ".."
120
- end
121
- s += "#{color}\e[0m"
122
- end
123
-
124
- def bold(txt); "\e[2m#{txt}\e[0m"; end
125
-
126
53
  end
127
54
  end
@@ -0,0 +1,84 @@
1
+ module Eletro
2
+
3
+ class Source < Part
4
+
5
+ attr_accessor :hz, :v, :circuits
6
+
7
+
8
+ def initialize(*args)
9
+ params = args.join
10
+ @v = params.match(/(\d*)/)[1].to_i
11
+ @hz = params =~ /ac|AC/ ? 60 : 0
12
+ @circuits = []
13
+ end
14
+
15
+
16
+
17
+ def <<(part, circuit=nil)
18
+ if circuit
19
+
20
+ else
21
+ circuits << (part.is_a?(Array) ? part : [part])
22
+ end
23
+ end
24
+
25
+ def i
26
+ @v / sum_net.to_f
27
+ end
28
+
29
+ def w
30
+ @v * i
31
+ end
32
+
33
+ #
34
+ # Logic:
35
+ #
36
+ # Resistor on an array are in series, sum. [100, 100] => [200]
37
+ # Arrays in arrays are parallel connections. [[100], [100]] => [50]
38
+ #
39
+ # Mixed example (rounded):
40
+ #
41
+ # [[100], [100, 100], [100, 100]]
42
+ # [[100], [200], [200]]
43
+ # [[66], [200]]
44
+ # [[50]] => 50 ohms
45
+ #
46
+ def sum_net
47
+ # Memoize
48
+ @sum_net ||= calc_sum_net
49
+ end
50
+
51
+ def calc_sum_net(ary=circuits)
52
+ ary.map! do |i|
53
+ if i.is_a?(Array)
54
+ i = [calc_sum_net(i)] unless i.select { |c| c.is_a?(Array) }.empty?
55
+ i.size > 1 ? serial_sum(i) : i[0]#.value
56
+ else; i
57
+ end
58
+ end
59
+ ary.size == 1 ? ary[0] : parallel_sum(*ary)
60
+ end
61
+
62
+ def parallel_sum(r1, r2, *rest)
63
+ sum = r1 * r2 / (r1 + r2)
64
+ rest.empty? ? sum : parallel_sum(*rest.unshift(sum))
65
+ end
66
+
67
+ def serial_sum(ary)
68
+ ary.reduce(0) { |i, c| i + c }
69
+ end
70
+
71
+ #just for fun
72
+ def acdc
73
+ dc? || (@v /= 2)
74
+ end
75
+
76
+ def dc?
77
+ @hz.zero?
78
+ end
79
+
80
+ def ac?
81
+ !dc?
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,8 @@
1
+ module Eletro
2
+
3
+ class Transistor < Part
4
+
5
+
6
+ end
7
+
8
+ end
@@ -0,0 +1,29 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "Eletro::Capacitor" do
4
+
5
+ let(:rs) { Capacitor.new }
6
+
7
+ describe "Value" do
8
+
9
+ it "should not be polarized" do
10
+ c = Capacitor.new
11
+ c.should_not be_polarized
12
+ end
13
+
14
+ it "should instantiate 47" do
15
+ r = Capacitor.new("47")
16
+ r.value.should be_within(220.0).of(0.1)
17
+ r.format.should eql("47pF")
18
+ end
19
+
20
+ it "should instantiate 102" do
21
+ r = Capacitor.new("102")
22
+ r.value.should be_within(220.0).of(0.1)
23
+ r.format.should eql("1uF")
24
+ end
25
+
26
+
27
+ end
28
+
29
+ end
@@ -33,19 +33,19 @@ describe "Eletro::Ohm" do
33
33
  it "should calc V if I have [I, R]" do
34
34
  o.i = 0.048
35
35
  o.r = 250
36
- o.v.should be_close(12.0, 0.01)
36
+ o.v.should be_within(12.0).of(0.01)
37
37
  end
38
38
 
39
39
  it "should calc I if I have [V, R]" do
40
40
  o.v = 12
41
41
  o.r = 250
42
- o.i.should be_close(0.048, 0.001)
42
+ o.i.should be_within(0.048).of(0.001)
43
43
  end
44
44
 
45
45
  it "should calc V if I have [I, R]" do
46
46
  o.i = 0.048
47
47
  o.r = 250
48
- o.v.should be_close(12.0, 0.01)
48
+ o.v.should be_within(12.0).of(0.01)
49
49
  end
50
50
  # o.r.should eql(1)
51
51
 
@@ -0,0 +1,22 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "Eletro::Part" do
4
+
5
+ let(:p) { Part.new}
6
+
7
+ it "should have pins" do
8
+ p.p0.should eql(:gnd)
9
+ end
10
+
11
+ it "should get dynamic" do
12
+ p.p99.should be_nil
13
+ end
14
+
15
+ it "should set dynamic" do
16
+ p.p99.should be_nil
17
+ p.p99 = :fu
18
+ p.p99.should eql('fu')
19
+ end
20
+
21
+
22
+ end
@@ -9,86 +9,86 @@ describe "Eletro::Resistor" do
9
9
 
10
10
  it "should instantiate 220 ohms" do
11
11
  r = Resistor.new("220")
12
- r.value.should be_close(220.0, 0.1)
12
+ r.value.should be_within(220.0).of(0.1)
13
13
  r.format.should eql("220Ω")
14
14
  end
15
15
 
16
16
  it "should instantiate 100R ohms" do
17
17
  r = Resistor.new("100R")
18
- r.value.should be_close(100.0, 0.1)
18
+ r.value.should be_within(100.0).of(0.1)
19
19
  r.format.should eql("100Ω")
20
20
  end
21
21
 
22
22
  it "should instantiate 1k ohms" do
23
23
  r = Resistor.new("1k")
24
- r.value.should be_close(1000.0, 0.1)
24
+ r.value.should be_within(1000.0).of(0.1)
25
25
  r.format.should eql("1kΩ")
26
26
  end
27
27
 
28
28
  it "should instantiate 1k ohms" do
29
29
  r = Resistor.new("1000.0")
30
- r.value.should be_close(1000.0, 0.1)
30
+ r.value.should be_within(1000.0).of(0.1)
31
31
  r.format.should eql("1kΩ")
32
32
  end
33
33
 
34
34
  it "should instantiate 1k ohms" do
35
35
  r = Resistor.new("1100.0")
36
- r.value.should be_close(1100.0, 0.1)
36
+ r.value.should be_within(1100.0).of(0.1)
37
37
  r.format.should eql("1.1kΩ")
38
38
  end
39
39
 
40
40
  it "should instantiate 1k ohms" do
41
41
  r = Resistor.new("BBR")
42
- r.value.should be_close(1100.0, 0.1)
42
+ r.value.should be_within(1100.0).of(0.1)
43
43
  r.format.should eql("1.1kΩ")
44
44
  end
45
45
 
46
46
  it "should instantiate 3.3k ohms" do
47
47
  r = Resistor.new("3.3k")
48
- r.value.should be_close(3300.0, 0.1)
48
+ r.value.should be_within(3300.0).of(0.1)
49
49
  r.format.should eql("3.3kΩ")
50
50
  end
51
51
 
52
52
  it "should instantiate 4k7 ohms" do
53
53
  r = Resistor.new("4k7")
54
- r.value.should be_close(4700.0, 0.1)
54
+ r.value.should be_within(4700.0).of(0.1)
55
55
  r.format.should eql("4.7kΩ")
56
56
  end
57
57
 
58
58
  it "should instantiate 1m5 ohms" do
59
59
  r = Resistor.new("1m5")
60
- r.value.should be_close(15000000.0, 0.01)
61
- r.format.should eql("15mΩ")
60
+ r.value.should be_within(15000000.0).of(0.1)
61
+ r.format.should eql("1.5mΩ")
62
62
  end
63
63
 
64
64
  it "should get colors for value" do
65
65
  r = Resistor.new("1k")
66
- r.colors.join.should eql("BKR")
66
+ r.colors.join.should eql("bkr")
67
67
  end
68
68
 
69
69
  it "should get colors for value" do
70
70
  r = Resistor.new("10k")
71
- r.colors.join.should eql("BKO")
71
+ r.colors.join.should eql("bko")
72
72
  end
73
73
 
74
74
  it "should get colors for value" do
75
75
  r = Resistor.new("1.1k")
76
- r.colors.join.should eql("BBR")
76
+ r.colors.join.should eql("bbr")
77
77
  end
78
78
 
79
79
  it "should get colors for value" do
80
80
  r = Resistor.new("4k7")
81
- r.colors.join.should eql("YVR")
81
+ r.colors.join.should eql("yvr")
82
82
  end
83
83
 
84
84
  it "should get colors for value" do
85
85
  r = Resistor.new("220")
86
- r.colors.join.should eql("RRB")
86
+ r.colors.join.should eql("rrb")
87
87
  end
88
88
 
89
89
  it "should get colors for value" do
90
90
  r = Resistor.new("110")
91
- r.colors.join.should eql("BBB")
91
+ r.colors.join.should eql("bbb")
92
92
  end
93
93
 
94
94
  end
@@ -97,37 +97,37 @@ describe "Eletro::Resistor" do
97
97
 
98
98
  it "should instantiate 3 chars" do
99
99
  r = Resistor.new("BKR")
100
- r.value.should be_close(1000.0, 0.01)
100
+ r.value.should be_within(1000.0).of(0.01)
101
101
  r.format.should eql("1kΩ")
102
102
  end
103
103
 
104
104
  it "should instantiate 3 chars" do
105
105
  r = Resistor.new("BKO")
106
- r.value.should be_close(10000.0, 0.01)
106
+ r.value.should be_within(10000.0).of(0.01)
107
107
  r.format.should eql("10kΩ")
108
108
  end
109
109
 
110
110
  it "should instantiate 3 chars" do
111
111
  r = Resistor.new("YVR")
112
- r.value.should be_close(4700.0, 0.01)
112
+ r.value.should be_within(4700.0).of(0.01)
113
113
  r.format.should eql("4.7kΩ")
114
114
  end
115
115
 
116
116
  it "should instantiate 3 chars" do
117
117
  r = Resistor.new("YVR")
118
- r.value.should be_close(4700.0, 0.01)
118
+ r.value.should be_within(4700.0).of(0.01)
119
119
  r.format.should eql("4.7kΩ")
120
120
  end
121
121
 
122
122
  it "should instantiate 4 chars" do
123
123
  r = Resistor.new("WWRS")
124
- r.value.should be_close(9900.0, 0.01)
124
+ r.value.should be_within(9900.0).of(0.01)
125
125
  r.format.should eql("9.9kΩ ± 10%")
126
126
  end
127
127
 
128
128
  it "should instantiate 4 chars" do
129
129
  r = Resistor.new("BKRL")
130
- r.value.should be_close(1000.0, 0.01)
130
+ r.value.should be_within(1000.0).of(0.01)
131
131
  r.format.should eql("1kΩ ± 5%")
132
132
  end
133
133
 
@@ -138,8 +138,8 @@ describe "Eletro::Resistor" do
138
138
 
139
139
  it "should print nicely" do
140
140
  r = Resistor.new("BKR")
141
- r.value.should be_close(1000.0, 0.01)
142
- r.to_s.should eql("1kΩ --\e[0;33mB\e[0m\e[40mK\e[0m\e[41mR\e[0m--")
141
+ r.value.should be_within(1000.0).of(0.01)
142
+ r.pretty_output.should eql("1kΩ --\e[0;33mB\e[0m\e[40mK\e[0m\e[41mR\e[0m--")
143
143
  end
144
144
 
145
145
  end
@@ -0,0 +1,113 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "Eletro::Source" do
4
+
5
+ let(:ss) { Source.new }
6
+
7
+ describe "Instantiate" do
8
+
9
+ it "should instantiate 220 v" do
10
+ s = Source.new("220ac")
11
+ s.v.should eql(220)
12
+ end
13
+
14
+ it "should instantiate 220 AC" do
15
+ s = Source.new("220ac")
16
+ s.should be_ac
17
+ end
18
+
19
+ it "should instantiate 12vdc" do
20
+ s = Source.new("12vdc")
21
+ s.v.should eql(12)
22
+ s.should be_dc
23
+ end
24
+
25
+ it "should default to DC" do
26
+ s = Source.new("9")
27
+ s.should be_dc
28
+ end
29
+
30
+
31
+ end
32
+
33
+ describe "Circuits" do
34
+
35
+ describe "Loads" do
36
+
37
+ it "should add loads 1k" do
38
+ s = Source.new("12")
39
+ s << Resistor.new("1k")
40
+ s.i.should be_within(0.012).of(0.0001)
41
+ end
42
+
43
+ it "should add loads 100 ohm" do
44
+ s = Source.new("12")
45
+ s << Resistor.new("100")
46
+ s.i.should be_within(0.12).of(0.001)
47
+ end
48
+
49
+ it "should add two parallel loads" do
50
+ s = Source.new("12")
51
+ s << Resistor.new("2k")
52
+ s << Resistor.new("2k")
53
+ s.sum_net.should be_within(1000.0).of(0.01)
54
+ s.i.should be_within(0.012).of(0.0001)
55
+ end
56
+
57
+ it "should add three parallel loads" do
58
+ s = Source.new("12")
59
+ s << Resistor.new("1k")
60
+ s << Resistor.new("1k")
61
+ s << Resistor.new("100")
62
+ s.sum_net.should be_within(83.333).of(0.001)
63
+ s.i.should be_within(0.144).of(0.001)
64
+ end
65
+
66
+ it "should add mixed parallel/serial" do
67
+ s = Source.new("12")
68
+ s << Resistor.new("100")
69
+ s << [Resistor.new("100"), Resistor.new("100")]
70
+ s << [Resistor.new("100"), Resistor.new("100")]
71
+ s.circuits.should have(3).items
72
+ s.sum_net.should be_within(50.0).of(0.01)
73
+ end
74
+
75
+ it "should add mixed parallel/serial" do
76
+ s = Source.new("12")
77
+ s << Resistor.new("100")
78
+ s << [Resistor.new("100"), Resistor.new("100")]
79
+ s << [Resistor.new("100"), Resistor.new("200")]
80
+ s.circuits.should have(3).items
81
+ s.sum_net.should be_within(54.5454).of(0.01)
82
+ end
83
+
84
+
85
+ it "should add mixed parallel/serial" do
86
+ s = Source.new("12")
87
+ s << Resistor.new("100")
88
+ s << [Resistor.new("100"), Resistor.new("100")]
89
+ s << [[Resistor.new("100")], [Resistor.new("200")]]
90
+ s.circuits.should have(3).items
91
+ s.sum_net.should be_within(33.333).of(0.001)
92
+ end
93
+
94
+ it "should add mixed parallel series with more depth" do
95
+ s = Source.new("12")
96
+ s << Resistor.new("100")
97
+ s << [Resistor.new("100"), Resistor.new("100")]
98
+ s << [Resistor.new("100"), [Resistor.new("100"), Resistor.new("100")]]
99
+ s.circuits.should have(3).items
100
+ s.sum_net.should be_within(33.333).of(0.001)
101
+ end
102
+
103
+ # it "should add loads calcs w" do
104
+ # s = Source.new("12")
105
+ # s << Resistor.new("40")
106
+ # s.w.should be_within(3.5999, 0.0001)
107
+ # end
108
+
109
+ end
110
+
111
+ end
112
+
113
+ end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
+ - 1
7
8
  - 0
8
- - 2
9
- version: 0.0.2
9
+ version: 0.1.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Marcos Piccinini
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-11-10 00:00:00 -02:00
17
+ date: 2010-11-11 00:00:00 -02:00
18
18
  default_executable: eletro
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -64,11 +64,23 @@ files:
64
64
  - bin/eletro
65
65
  - eletro.gemspec
66
66
  - lib/eletro.rb
67
+ - lib/eletro/capacitor.rb
68
+ - lib/eletro/diode.rb
69
+ - lib/eletro/helpers/color_code.rb
70
+ - lib/eletro/ic.rb
71
+ - lib/eletro/inductor.rb
72
+ - lib/eletro/logic.rb
67
73
  - lib/eletro/ohm.rb
74
+ - lib/eletro/part.rb
68
75
  - lib/eletro/resistor.rb
76
+ - lib/eletro/source.rb
77
+ - lib/eletro/transistor.rb
69
78
  - spec/colour_test
79
+ - spec/eletro/capacitor_spec.rb
70
80
  - spec/eletro/ohm_spec.rb
81
+ - spec/eletro/part_spec.rb
71
82
  - spec/eletro/resistor_spec.rb
83
+ - spec/eletro/source_spec.rb
72
84
  - spec/eletro_spec.rb
73
85
  - spec/spec_helper.rb
74
86
  has_rdoc: true
@@ -105,6 +117,9 @@ specification_version: 3
105
117
  summary: Eletric Helpers on Ruby
106
118
  test_files:
107
119
  - spec/spec_helper.rb
120
+ - spec/eletro/source_spec.rb
121
+ - spec/eletro/capacitor_spec.rb
108
122
  - spec/eletro/ohm_spec.rb
109
123
  - spec/eletro/resistor_spec.rb
124
+ - spec/eletro/part_spec.rb
110
125
  - spec/eletro_spec.rb