blueprint-api-rails 0.2.5 → 0.2.6

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
  SHA1:
3
- metadata.gz: 18a23084533dcc625ff392693ca1a0b41f3652a8
4
- data.tar.gz: ca5f2d2ccba38944e6007137de9c69568c593691
3
+ metadata.gz: 785506963749b0ec9c534c6ae2a2f29b43d51531
4
+ data.tar.gz: 692c18d746600e1f399d54d25422c00e6bcb18c7
5
5
  SHA512:
6
- metadata.gz: 764c8bf1203f279cd57a830d975e094760397175ca94c2c8e610f09417b3e6e0ada0c5175eae64ba137559eae11a71d1a51de448c7e1b937611b7705d0dc439e
7
- data.tar.gz: 929979c8e821eeba1c1d8948439dfa60991c6e9c4398ba4e527da09f4cd4a7e718e25e0e62d03996b69a4b098789d81d04121334195552ecf4209b901e349582
6
+ metadata.gz: dddbdc7efef2de303de2e3c8a84862d56e9c01044a89a640e336b9f7db88a638584ee3a2428eb8dccc8063d753463950cb4ba532aeba9db53c83e1990d89b8b8
7
+ data.tar.gz: 1288df1666ab966e2316b523827cc970540abc5680b8477f2428791f9c38953cb07f49c3942e2543799d356b5c6f7b9b3c6239f9892a1c83ea806b8f565954a7
@@ -1,7 +1,7 @@
1
1
  module Blueprint
2
2
  module Api
3
3
  module Rails
4
- VERSION = '0.2.5'
4
+ VERSION = '0.2.6'
5
5
  end
6
6
  end
7
7
  end
@@ -9,6 +9,7 @@ module Blueprint
9
9
  # TODO deprecate all of the branch stuff
10
10
  # TODO limit messages that are lists to a maximum of 10 elements
11
11
  # TODO add support for getting the current user (so we can analysis log messages per user)
12
+ # TODO only log messages to the Blueprint server if there is an API key (if there isn't we can still check rules locally)
12
13
 
13
14
  STRUCTURE_NEW = 'start'
14
15
 
@@ -20,6 +21,9 @@ module Blueprint
20
21
 
21
22
  CONTAINS = 'contains'
22
23
 
24
+ # the set of validation and verification rules for the system (executed locally)
25
+ RULES = { }
26
+
23
27
  # allow users to set the API key
24
28
  def self.set_api_key api_key
25
29
  @api_key = api_key
@@ -84,6 +88,37 @@ module Blueprint
84
88
  end
85
89
  end
86
90
 
91
+ # checks that the action that the system just took does not violate any architectural rules
92
+ def check_rules(source, target, type)
93
+ # the list of violations for this action
94
+ violations = [ ]
95
+
96
+ unless type.nil?
97
+ # is the type restricted to a certain structural element?
98
+
99
+ unless RULES[type].nil? # are there any rules for this type?
100
+
101
+ if RULES[type].has_key?(:only) # do the rules for this type include an 'only' restriction?
102
+ allowed_element = RULES[type][:only]
103
+
104
+ unless allowed_element.eql?(source)
105
+ violations << "The type #{type} is allowed only within #{allowed_element} and it was used in #{source}."
106
+ end
107
+ end
108
+ end
109
+ end
110
+
111
+ # output architectural violations
112
+ # TODO make this output more obvious (and configurable?)
113
+ unless violations.empty?
114
+ p '### Architectural violations found ###'
115
+ violations.each { |v|
116
+ p ' ' + v
117
+ }
118
+ p '### End of violations ###'
119
+ end
120
+ end
121
+
87
122
  end
88
123
 
89
124
  ##
@@ -184,6 +219,9 @@ module Blueprint
184
219
 
185
220
  # logs a message between two nodes in the structure
186
221
  def log(message = { }, extras = { }, type = nil, source = nil, target = nil)
222
+ # always check the logged message for architectural rules violations
223
+ check_rules(source, target, type)
224
+
187
225
  properties = Hash.new.tap do |h|
188
226
  h[:source] = source unless source.blank?
189
227
  h[:target] = target unless target.blank?
@@ -335,6 +373,15 @@ module Blueprint
335
373
  self
336
374
  end
337
375
 
376
+ # verification methods
377
+ def only(element)
378
+ unless RULES.has_key?(@name)
379
+ RULES[@name] = { }
380
+ end
381
+
382
+ RULES[@name][:only] = element
383
+ end
384
+
338
385
  end
339
386
 
340
387
  ##
@@ -387,6 +434,9 @@ module Blueprint
387
434
 
388
435
 
389
436
  def log(message = { }, extras = { }, type = nil, source = nil, target = nil)
437
+ # always check the logged message for architectural rules violations
438
+ check_rules(source, target, type)
439
+
390
440
  properties = Hash.new.tap do |h|
391
441
  h[:instance_id] = @activity_ctx.instance_id
392
442
  h[:activity] = @activity_ctx.name
@@ -431,6 +481,9 @@ module Blueprint
431
481
 
432
482
  # logs a message between two nodes in the structure
433
483
  def log(message = { }, extras = { }, type = nil)
484
+ # always check the logged message for architectural rules violations
485
+ check_rules(@source, @target, type)
486
+
434
487
  properties = Hash.new.tap do |h|
435
488
  h[:source] = @source unless @source.blank?
436
489
  h[:target] = @target unless @target.blank?
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blueprint-api-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - benjii
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-07-09 00:00:00.000000000 Z
11
+ date: 2016-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler