jaina 0.4.1 → 0.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9f027e5d8c994d9cacf4ff5e0a7445fb2672ca8535094761226ebc9c7d953824
4
- data.tar.gz: 22f7134e0f3e5cebfc083ee5ba3193b670b894f8a90f3c8446ba1a4792bc4e3e
3
+ metadata.gz: b9a98b33875e25f9b5133548da379b6a4af1886c09cb1a942a4b600c7841014d
4
+ data.tar.gz: 8ca16e944faa24ef61e2467a63718a75fd9e7d87f176e320d63f2247b9814497
5
5
  SHA512:
6
- metadata.gz: 71c341c0ea6dc1fa448b7ed8faf5be9e0dea67f4990f73b61b83a6094357e33c6372e194c40e3817a75dcd5a398e30926dcd5e18abc5c17bf2bc959f1270c82a
7
- data.tar.gz: a52868c0af5703644c7f41c55179c9c1a5063b6f5496fa7d93a052c64a6b882d5269cb4de86ac1cda067881458eab2839dce75be422edea3ba8bbd99e8a17a80
6
+ metadata.gz: fb36863a52b5dcae3af2852710d4208d40942305a8fa296b32b92615afa1b3fae94629aea2f28185dfa99c2c02e1dd836b7da6177549f04d3ad6e54b977e3f35
7
+ data.tar.gz: 8caac2e609dcbe5973dd0e61c031b21d0bed24ae43ae5f69ed8450f23ecdea9f7befd38eaabe9f9a9ff97ba1b34e25bced17dbcffac2dcfef1fb4f2ba59c8fa9
@@ -1,6 +1,10 @@
1
1
  # Changelog
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
+ ## [0.5.0] - 2019-06-27
5
+ ### Added
6
+ - An ability to redefine existing expressions (`Jaina.redefine(expression_klass)`);
7
+
4
8
  ## [0.4.1] - 2019-06-24
5
9
  ### Fixed
6
10
  - Fxied `NOT` operator (`#evaluate` fails on incorrect `context` varibale name);
data/README.md CHANGED
@@ -74,6 +74,12 @@ end
74
74
 
75
75
  # step 2: regsiter your operand
76
76
  Jaina.register_expression(A)
77
+
78
+ # step X: redefine existing operand (with the same token)
79
+ class NewA < Jaina::TerminalExpr
80
+ token 'A'
81
+ end
82
+ Jaina.redefine_expression(NewA)
77
83
  ```
78
84
 
79
85
  ---
@@ -28,7 +28,7 @@ Gem::Specification.new do |spec|
28
28
  spec.add_development_dependency 'coveralls', '~> 0.8'
29
29
  spec.add_development_dependency 'simplecov', '~> 0.16'
30
30
  spec.add_development_dependency 'rspec', '~> 3.8'
31
- spec.add_development_dependency 'armitage-rubocop', '~> 0.70'
31
+ spec.add_development_dependency 'armitage-rubocop', '~> 0.71'
32
32
 
33
33
  spec.add_development_dependency 'bundler'
34
34
  spec.add_development_dependency 'rake'
@@ -42,6 +42,15 @@ module Jaina
42
42
  Jaina::Parser::Expression.register(expression_klass)
43
43
  end
44
44
 
45
+ # @param expression_klass [Class{Jaina::Parser::Expression::Operator::Abstract}]
46
+ # @return [void]
47
+ #
48
+ # @api public
49
+ # @since 0.5.0
50
+ def redefine_expression(expression_klass)
51
+ Jaina::Parser::Expression.redefine(expression_klass)
52
+ end
53
+
45
54
  # @return [Array<String>]
46
55
  #
47
56
  # @api public
@@ -38,6 +38,15 @@ class Jaina::Parser::Expression::Registry
38
38
  # @api private
39
39
  # @since 0.1.0
40
40
  def register(expression)
41
+ thread_safe { add(expression) }
42
+ end
43
+
44
+ # @param expression [Class{Jaina::Parser::Operator::Abstract}]
45
+ # @return [void]
46
+ #
47
+ # @api private
48
+ # @since 0.5.0
49
+ def redefine(expression)
41
50
  thread_safe { apply(expression) }
42
51
  end
43
52
 
@@ -92,15 +101,32 @@ class Jaina::Parser::Expression::Registry
92
101
  # @return [void]
93
102
  #
94
103
  # @raise [Jaina::Parser::Expression::Registry::AlreadyRegisteredExpressionError]
104
+ # @raise [Jaina::Parser::Expression::Registry::IncorrectExpressionObjectError]
95
105
  #
96
106
  # @api private
97
- # @since 0.1.0
98
- def apply(expression)
107
+ # @since 0.5.0
108
+ def add(expression)
109
+ raise(
110
+ IncorrectExpressionObjectError,
111
+ 'Expression should be a subtype of Jaina::Parser::Expression::Operation::Abstract'
112
+ ) unless expression.is_a?(Class) && expression < Jaina::Parser::Expression::Operator::Abstract
113
+
99
114
  raise(
100
115
  AlreadyRegisteredExpressionError,
101
116
  "Expression with token `#{expression.token}` already exist"
102
117
  ) if registered?(expression.token)
103
118
 
119
+ expression_set[expression.token] = expression
120
+ end
121
+
122
+ # @param expression [Class{Jaina::Parser::Operator::Abstract}]
123
+ # @return [void]
124
+ #
125
+ # @raise [Jaina::Parser::Expression::Registry::IncorrectExpressionObjectError]
126
+ #
127
+ # @api private
128
+ # @since 0.5.0
129
+ def apply(expression)
104
130
  raise(
105
131
  IncorrectExpressionObjectError,
106
132
  'Expression should be a subtype of Jaina::Parser::Expression::Operation::Abstract'
@@ -43,6 +43,15 @@ module Jaina::Parser::Expression
43
43
  def register(expression)
44
44
  @__expression_registry__.register(expression)
45
45
  end
46
+
47
+ # @param expression [Class{Jaina::Parser::Expressions::Operator::Abstract}]
48
+ # @return [void]
49
+ #
50
+ # @api private
51
+ # @since 0.5.0
52
+ def redefine(expression)
53
+ @__expression_registry__.redefine(expression)
54
+ end
46
55
  end
47
56
  end
48
57
  end
@@ -5,5 +5,5 @@ module Jaina
5
5
  #
6
6
  # @api public
7
7
  # @since 0.0.0
8
- VERSION = '0.4.1'
8
+ VERSION = '0.5.0'
9
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jaina
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rustam Ibragimov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-24 00:00:00.000000000 Z
11
+ date: 2019-06-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: coveralls
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0.70'
61
+ version: '0.71'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0.70'
68
+ version: '0.71'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: bundler
71
71
  requirement: !ruby/object:Gem::Requirement