danica 2.4.1 → 2.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dba135a4f791725d368c362643ef501190943d30
4
- data.tar.gz: e4b6a1f88467df5f1204b403716a6204b140549e
3
+ metadata.gz: 42d3abe8f4cb30ba5f39df22450aa6b258897516
4
+ data.tar.gz: 556b8f2d44f534d97bbce6d4e0a9d8cfbe9b1af2
5
5
  SHA512:
6
- metadata.gz: 56724c4c1a82158835825b305aaab1e15be2ce21287fa6c97401e87d3be80197f6726b571d3a89b2875438d476119b72a63cd84d6166b895aa548a5288b9f6ed
7
- data.tar.gz: 1cae4a159cc2e17831f2451c2ee8ef42ef1a00f70ef1ccf57d55da35387e551b3895b5516c863370bd82f60da1299f7dcc41bf31d4703f5f5478c1b92efbabfa
6
+ metadata.gz: 6357c1036ab3949b292e94c0835b99812d7eaaeb426372c75e41cf6145b274592c821935e86dffd957b13c193e9875b6caf0824e8de8db862455d09f6f14d443
7
+ data.tar.gz: df8178314d284efe3d623e40d3c974e5876dfcad6e0a703d5e57d925d2ce8f5ed01ed099618a46195cca08584a2acae35e3724221e79431f8a8d5eb373054b37
@@ -28,7 +28,7 @@ module Danica
28
28
  DSL.register_operator(method)
29
29
  end
30
30
 
31
- %i(number group negative plus_minus variable).each do |method|
31
+ %i(number group negative plus_minus variable constant).each do |method|
32
32
  DSL.register_wrapper(method)
33
33
  end
34
34
 
@@ -49,11 +49,11 @@ module Danica
49
49
  end
50
50
 
51
51
  def describe_tex
52
- "#{name}(#{variables.map(&:to_tex).join(', ')}) = #{to_tex}"
52
+ "#{name}(#{variables.reject(&:valued?).map(&:to_tex).join(', ')}) = #{to_tex}"
53
53
  end
54
54
 
55
55
  def describe_gnu
56
- "#{name}(#{variables.map(&:to_gnu).join(', ')}) = #{to_gnu}"
56
+ "#{name}(#{variables.reject(&:valued?).map(&:to_gnu).join(', ')}) = #{to_gnu}"
57
57
  end
58
58
 
59
59
  autoload :Gauss, 'danica/function/gauss'
@@ -1,3 +1,3 @@
1
1
  module Danica
2
- VERSION = '2.4.1'
2
+ VERSION = '2.4.2'
3
3
  end
@@ -1,11 +1,20 @@
1
1
  module Danica
2
2
  module Wrapper
3
3
  def wrap_value(value)
4
- return wrap_value(number(value)) if value.is_a?(Numeric)
5
- return wrap_value(variable(value)) if value.is_a?(Hash)
6
- return wrap_value(variable(name: value)) if [ String, Symbol ].any? { |c| value.is_a?(c) }
7
- return wrap_value(variable) if value.nil?
8
- value
4
+ case value
5
+ when Numeric
6
+ return negative(number(-value)) if value < 0
7
+ number(value)
8
+ when Hash
9
+ return constant(value) if value.keys.map(&:to_sym).sort == %i(gnu latex value)
10
+ variable(value)
11
+ when String, Symbol
12
+ variable(name: value)
13
+ when NilClass
14
+ variable
15
+ else
16
+ value
17
+ end
9
18
  end
10
19
 
11
20
  autoload :Number, 'danica/wrapper/number'
@@ -9,10 +9,13 @@ module Danica
9
9
  default_value :valued?, true
10
10
  default_value :is_grouped?, false
11
11
 
12
- def initialize(value, latex, gnu)
13
- @value = value
14
- @latex = latex
15
- @gnu = gnu
12
+ def initialize(*args)
13
+ attrs = args.extract_options!
14
+ attrs = args.as_hash(%i(value latex gnu)).merge(attrs)
15
+
16
+ attrs.each do |key, value|
17
+ self.send("#{key}=", value)
18
+ end
16
19
  end
17
20
 
18
21
  def to_f
@@ -31,6 +34,20 @@ module Danica
31
34
  def to_gnu
32
35
  gnu.to_s
33
36
  end
37
+
38
+ private
39
+
40
+ def value=(value)
41
+ @value = value
42
+ end
43
+
44
+ def latex=(latex)
45
+ @latex = latex
46
+ end
47
+
48
+ def gnu=(gnu)
49
+ @gnu = gnu
50
+ end
34
51
  end
35
52
 
36
53
  E = Wrapper::Constant.new(Math::E, :e, 'exp(1)')
@@ -6,7 +6,7 @@ describe 'integration of addition' do
6
6
  Danica::Operator::Addition.new(
7
7
  Danica::Wrapper::Negative.new(1),
8
8
  2,
9
- Danica::Wrapper::Negative.new(3),
9
+ -3,
10
10
  4,
11
11
  Danica::Wrapper::PlusMinus.new(5)
12
12
  )
@@ -30,7 +30,8 @@ shared_context 'a class with mapped dsl' do
30
30
  negative: Danica::Wrapper::Negative,
31
31
  number: Danica::Wrapper::Number,
32
32
  num: Danica::Wrapper::Number,
33
- plus_minus: Danica::Wrapper::PlusMinus
33
+ plus_minus: Danica::Wrapper::PlusMinus,
34
+ constant: Danica::Wrapper::Constant
34
35
  }.each do |aliaz, clazz|
35
36
  it_behaves_like 'a class with alias to a clazz', aliaz, clazz, 9
36
37
  end
@@ -120,6 +120,16 @@ describe Danica::Function do
120
120
  expect(function.describe_tex).to eq('f(x, y) = x^{y}')
121
121
  end
122
122
  end
123
+
124
+ context 'when a variable is set as a constant' do
125
+ let(:function) do
126
+ function_class.new(name: :f, x: Danica::PI)
127
+ end
128
+
129
+ it do
130
+ expect(function.describe_tex).to eq('f(y) = \pi^{y}')
131
+ end
132
+ end
123
133
  end
124
134
 
125
135
  describe '#describe_gnu' do
@@ -132,6 +142,16 @@ describe Danica::Function do
132
142
  expect(function.describe_gnu).to eq('f(x, y) = x**(y)')
133
143
  end
134
144
  end
145
+
146
+ context 'when a variable is set as a constant' do
147
+ let(:function) do
148
+ function_class.new(name: :f, x: Danica::PI)
149
+ end
150
+
151
+ it do
152
+ expect(function.describe_gnu).to eq('f(y) = pi**(y)')
153
+ end
154
+ end
135
155
  end
136
156
 
137
157
  describe 'spatial' do
@@ -25,12 +25,34 @@ describe Danica::Wrapper::Constant do
25
25
  end
26
26
  end
27
27
 
28
- describe 'variables' do
28
+ describe 'attr_setters' do
29
29
  it { expect(subject).not_to respond_to(:value=) }
30
30
  it { expect(subject).not_to respond_to(:latex=) }
31
31
  it { expect(subject).not_to respond_to(:gnu=) }
32
32
  end
33
33
 
34
+ context 'when initializing from hash' do
35
+ subject { described_class.new(value: 2.5, latex: :M, gnu: :m) }
36
+
37
+ it 'initialize normaly' do
38
+ expect do
39
+ described_class.new(value: 2.5, latex: :M, gnu: :m)
40
+ end.not_to raise_error
41
+ end
42
+
43
+ it 'sets the value' do
44
+ expect(subject.value).to eq(2.5)
45
+ end
46
+
47
+ it 'sets the latex' do
48
+ expect(subject.to_tex).to eq('M')
49
+ end
50
+
51
+ it 'sets the gnu' do
52
+ expect(subject.to_gnu).to eq('m')
53
+ end
54
+ end
55
+
34
56
  describe '==' do
35
57
  context 'when comparing with the same object' do
36
58
  it { expect(subject).to eq(subject) }
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ class Danica::Wrapper::Dummy
4
+ include Danica::DSL
5
+ include Danica::Wrapper
6
+
7
+ attr_reader :wrapped_value
8
+
9
+ def initialize(value)
10
+ @wrapped_value = wrap_value(value)
11
+ end
12
+ end
13
+
14
+ shared_examples 'a value wrapper' do |examples|
15
+ examples.each do |val, expected|
16
+ context "when value is a #{val.class}" do
17
+ let(:value) { val }
18
+
19
+ it do
20
+ expect(subject.wrapped_value).to be_a(expected)
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ describe Danica::Wrapper do
27
+ let(:clazz) { described_class::Dummy }
28
+ subject { clazz.new(value) }
29
+
30
+ describe 'wrap_value' do
31
+ it_behaves_like 'a value wrapper', {
32
+ x: Danica::Wrapper::Variable,
33
+ 'x' => Danica::Wrapper::Variable,
34
+ 10 => Danica::Wrapper::Number,
35
+ -10 => Danica::Wrapper::Negative,
36
+ { name: :x } => Danica::Wrapper::Variable
37
+ }
38
+
39
+ context 'when value is a Hash' do
40
+ context 'but it is a constant' do
41
+ let(:value) { { value: 10, latex: :x, gnu: :X } }
42
+
43
+ it do
44
+ expect(subject.wrapped_value).to be_a(Danica::Wrapper::Constant)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: danica
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.1
4
+ version: 2.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Darthjee
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-11 00:00:00.000000000 Z
11
+ date: 2017-10-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -191,6 +191,7 @@ files:
191
191
  - spec/lib/danica/wrapper/number_spec.rb
192
192
  - spec/lib/danica/wrapper/plus_minus_spec.rb
193
193
  - spec/lib/danica/wrapper/variable_spec.rb
194
+ - spec/lib/danica/wrapper_spec.rb
194
195
  - spec/lib/danica_spec.rb
195
196
  - spec/spec_helper.rb
196
197
  - spec/support/models/functions/baskara.rb
@@ -251,6 +252,7 @@ test_files:
251
252
  - spec/lib/danica/wrapper/number_spec.rb
252
253
  - spec/lib/danica/wrapper/plus_minus_spec.rb
253
254
  - spec/lib/danica/wrapper/variable_spec.rb
255
+ - spec/lib/danica/wrapper_spec.rb
254
256
  - spec/lib/danica_spec.rb
255
257
  - spec/spec_helper.rb
256
258
  - spec/support/models/functions/baskara.rb