danica 2.2.0 → 2.2.1
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/README.md +96 -2
- data/lib/danica/variables_holder.rb +3 -1
- data/lib/danica/version.rb +1 -1
- data/spec/lib/danica/function_spec.rb +48 -0
- data/spec/support/models/functions/baskara.rb +1 -6
- data/spec/support/models/functions/gauss.rb +1 -6
- data/spec/support/models/functions/hyperbole.rb +14 -0
- data/spec/support/models/functions/spatial.rb +1 -6
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe5a9965099461f931104adf9ad6e0372b7a88b4
|
4
|
+
data.tar.gz: d2fe7fd8afe885d6e2064c3e9a80449052d04d4d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd2f74aabff6aeb3cd57839ac622b26391f0b251bd167a9d693671e1b869968686890641c54a2689e46994f81d39204127b0805873c41912c3fa8c79ee80d539
|
7
|
+
data.tar.gz: a11fa801c71ccf5abbc6086c63c09ba28bf37d9b5d86e2cb7d898c6fde6d07c477f91b1079d1894c6a10e8607dc40055f76fe032922580c61fe68b9d82152c7e
|
data/README.md
CHANGED
@@ -193,11 +193,9 @@ fx.calculate(10, 3)
|
|
193
193
|
|
194
194
|
or
|
195
195
|
|
196
|
-
|
197
196
|
```ruby
|
198
197
|
fx.calculate(time: 10, acceleration: 3)
|
199
198
|
```
|
200
|
-
|
201
199
|
or
|
202
200
|
|
203
201
|
```ruby
|
@@ -209,3 +207,99 @@ all return
|
|
209
207
|
```ruby
|
210
208
|
171.0
|
211
209
|
```
|
210
|
+
|
211
|
+
#### Danica::Function.build
|
212
|
+
Alternativily, a function can be created through ```Danica::Function.build(*variables, &block)```
|
213
|
+
|
214
|
+
```ruby
|
215
|
+
class Saddle < Danica::Function.build(:x, :y) { power(x, 2) - power(y, 2) }
|
216
|
+
end
|
217
|
+
|
218
|
+
fx = Saddle.new
|
219
|
+
```
|
220
|
+
|
221
|
+
or
|
222
|
+
|
223
|
+
```ruby
|
224
|
+
fx = Danica::Function.build(:x, :y) { power(x, 2) - power(y, 2) }.new
|
225
|
+
```
|
226
|
+
|
227
|
+
##### to_tex
|
228
|
+
```ruby
|
229
|
+
fx.to_tex
|
230
|
+
```
|
231
|
+
|
232
|
+
returns
|
233
|
+
```string
|
234
|
+
x^{2} -y^{2}
|
235
|
+
```
|
236
|
+
|
237
|
+
##### to_gnu
|
238
|
+
```ruby
|
239
|
+
fx.to_gnu
|
240
|
+
```
|
241
|
+
|
242
|
+
returns
|
243
|
+
```string
|
244
|
+
x**(2) -y**(2)
|
245
|
+
```
|
246
|
+
|
247
|
+
### DSL and building
|
248
|
+
A function can be created using the DSL direct from ```Danica```
|
249
|
+
|
250
|
+
```ruby
|
251
|
+
Danica.build do
|
252
|
+
power(:x, -1)
|
253
|
+
end
|
254
|
+
```
|
255
|
+
|
256
|
+
will result into a ```Danica::Power``` object
|
257
|
+
|
258
|
+
```ruby
|
259
|
+
Danica::Power.new(:x, -1)
|
260
|
+
```
|
261
|
+
|
262
|
+
#### Operator registering on DSL
|
263
|
+
|
264
|
+
Any operator created can be added to the DSL by running ```DSL.register```
|
265
|
+
|
266
|
+
```ruby
|
267
|
+
module Danica
|
268
|
+
class Inverse < Danica::Operator
|
269
|
+
include DSL
|
270
|
+
variables :value
|
271
|
+
|
272
|
+
delegate :to_f, :to_tex, :to_gnu, to: :pow
|
273
|
+
|
274
|
+
def pow
|
275
|
+
@pow ||= power(value, -1)
|
276
|
+
end
|
277
|
+
end
|
278
|
+
end
|
279
|
+
```
|
280
|
+
|
281
|
+
In order to add the new operator, DSL cna infer by the name ```inverse``` which results in ```Danica::Inverse```
|
282
|
+
|
283
|
+
```ruby
|
284
|
+
Danica::DSL.register(:inverse)
|
285
|
+
```
|
286
|
+
|
287
|
+
or
|
288
|
+
|
289
|
+
```ruby
|
290
|
+
Danica::DSL.register(:inverse, Danica::inverse)
|
291
|
+
```
|
292
|
+
|
293
|
+
This will allow the usage of the inverse function
|
294
|
+
|
295
|
+
```ruby
|
296
|
+
Danica.build do
|
297
|
+
inverse(:x)
|
298
|
+
end
|
299
|
+
```
|
300
|
+
|
301
|
+
will result into a ```Danica::Inverse``` object
|
302
|
+
|
303
|
+
```ruby
|
304
|
+
Danica::Inverse.new(:x)
|
305
|
+
```
|
data/lib/danica/version.rb
CHANGED
@@ -43,6 +43,54 @@ describe Danica::Function do
|
|
43
43
|
expect(function_class.superclass).to eq(described_class)
|
44
44
|
end
|
45
45
|
end
|
46
|
+
|
47
|
+
context 'when creating a class using build' do
|
48
|
+
let(:function_class) { Danica::Hyperbole }
|
49
|
+
|
50
|
+
it 'has the defined variables on class definition' do
|
51
|
+
expect(function_class.variables_names).to eq([:x])
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'has the defined variables' do
|
55
|
+
expect(function.variables_hash).to eq(x: nil)
|
56
|
+
end
|
57
|
+
|
58
|
+
context 'when calling to_tex' do
|
59
|
+
it 'build function from block' do
|
60
|
+
expect(function.to_tex).to eq('x^{2}')
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
context 'when calling to_gnu' do
|
65
|
+
it 'build function from block' do
|
66
|
+
expect(function.to_gnu).to eq('x**(2)')
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
context 'when using a class that inherits from another class' do
|
72
|
+
let(:function_class) { Danica::SaddleHyperbole }
|
73
|
+
|
74
|
+
it 'has the defined variables on class definition' do
|
75
|
+
expect(function_class.variables_names).to eq([:x, :y])
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'has the defined variables' do
|
79
|
+
expect(function.variables_hash).to eq(x: nil, y: nil)
|
80
|
+
end
|
81
|
+
|
82
|
+
context 'when calling to_tex' do
|
83
|
+
it 'build function from block' do
|
84
|
+
expect(function.to_tex).to eq('x^{2} -y^{2}')
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
context 'when calling to_gnu' do
|
89
|
+
it 'build function from block' do
|
90
|
+
expect(function.to_gnu).to eq('x**(2) -y**(2)')
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
46
94
|
end
|
47
95
|
|
48
96
|
describe 'spatial' do
|
@@ -1,13 +1,8 @@
|
|
1
1
|
module Danica
|
2
|
-
class Function::Baskara < Function
|
3
|
-
variables :a, :b, :c
|
2
|
+
class Function::Baskara < Function.build(:a, :b, :c) { numerator / denominator }
|
4
3
|
|
5
4
|
private
|
6
5
|
|
7
|
-
def function_block
|
8
|
-
@function_block ||= numerator / denominator
|
9
|
-
end
|
10
|
-
|
11
6
|
def numerator
|
12
7
|
negative(b) + PositiveNegative.new(squared_root(delta))
|
13
8
|
end
|
@@ -1,13 +1,8 @@
|
|
1
1
|
module Danica
|
2
|
-
class Function::Gauss < Function
|
3
|
-
variables :x, median: :u, variance_root: { latex: '\theta', gnu: :v }
|
2
|
+
class Function::Gauss < Function.build(:x, median: :u, variance_root: { latex: '\theta', gnu: :v }) { product(parcels) }
|
4
3
|
|
5
4
|
private
|
6
5
|
|
7
|
-
def function_block
|
8
|
-
@function_block ||= product(parcels)
|
9
|
-
end
|
10
|
-
|
11
6
|
def parcels
|
12
7
|
[
|
13
8
|
division(1, denominator),
|
@@ -1,13 +1,8 @@
|
|
1
1
|
module Danica
|
2
|
-
class Function::Spatial < Function
|
3
|
-
variables :time, :acceleration, :initial_space, :initial_velocity
|
2
|
+
class Function::Spatial < Function.build(:time, :acceleration, :initial_space, :initial_velocity) { sum(parcels) }
|
4
3
|
|
5
4
|
private
|
6
5
|
|
7
|
-
def function_block
|
8
|
-
@function_block ||= sum(parcels)
|
9
|
-
end
|
10
|
-
|
11
6
|
def parcels
|
12
7
|
[
|
13
8
|
initial_space,
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: danica
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Darthjee
|
@@ -202,6 +202,7 @@ files:
|
|
202
202
|
- spec/spec_helper.rb
|
203
203
|
- spec/support/models/functions/baskara.rb
|
204
204
|
- spec/support/models/functions/gauss.rb
|
205
|
+
- spec/support/models/functions/hyperbole.rb
|
205
206
|
- spec/support/models/functions/spatial.rb
|
206
207
|
- spec/support/shared_contexts/common.rb
|
207
208
|
- spec/support/shared_examples/base_operations.rb
|
@@ -258,6 +259,7 @@ test_files:
|
|
258
259
|
- spec/spec_helper.rb
|
259
260
|
- spec/support/models/functions/baskara.rb
|
260
261
|
- spec/support/models/functions/gauss.rb
|
262
|
+
- spec/support/models/functions/hyperbole.rb
|
261
263
|
- spec/support/models/functions/spatial.rb
|
262
264
|
- spec/support/shared_contexts/common.rb
|
263
265
|
- spec/support/shared_examples/base_operations.rb
|