jaina 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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