blueprint-api-rails 0.2.5 → 0.2.6

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: 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