blueprint-api-rails 0.2.6 → 0.2.7

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: 785506963749b0ec9c534c6ae2a2f29b43d51531
4
- data.tar.gz: 692c18d746600e1f399d54d25422c00e6bcb18c7
3
+ metadata.gz: 8a9fe12b5d07a6b092fd9ac10f9556116e51fa27
4
+ data.tar.gz: 8d2d6f67c7b40f676cc344427a14f588db42ecdd
5
5
  SHA512:
6
- metadata.gz: dddbdc7efef2de303de2e3c8a84862d56e9c01044a89a640e336b9f7db88a638584ee3a2428eb8dccc8063d753463950cb4ba532aeba9db53c83e1990d89b8b8
7
- data.tar.gz: 1288df1666ab966e2316b523827cc970540abc5680b8477f2428791f9c38953cb07f49c3942e2543799d356b5c6f7b9b3c6239f9892a1c83ea806b8f565954a7
6
+ metadata.gz: 76515fe219c732211854347e732d3dd5bd96b59dfd4527f894b0e218c560953f218d32d439cde34150aae35c1d92c129d57211c60252154743c9bc4f68752342
7
+ data.tar.gz: da3b116b3d680f9538e794d2531d1ddccc19b9457d2615183c0b314e1d363251b4b0e73d8dbd3d381940c079a8e42655fbc4cf9b862d0476691276be07c6b99b
@@ -9,7 +9,6 @@ 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)
13
12
 
14
13
  STRUCTURE_NEW = 'start'
15
14
 
@@ -48,26 +47,30 @@ module Blueprint
48
47
  # utility method for sending JSON payloads to the Anaxim servers - should never be called directly
49
48
  def send(event_type, properties = { }, message = { })
50
49
 
51
- # construct the base payload
52
- payload = {
53
- :header => {
54
- :structure_id => @structure_id,
55
- :properties => properties,
56
- :branch => {
57
- :name => @branch || 'master'
58
- },
59
- :eventType => event_type
60
- }
61
- }
50
+ # only send messages if we have an API key (even without one this gem can apply architectural verification rules)
51
+ unless @api_key.nil?
52
+
53
+ # construct the base payload
54
+ payload = {
55
+ :header => {
56
+ :structure_id => @structure_id,
57
+ :properties => properties,
58
+ :branch => {
59
+ :name => @branch || 'master'
60
+ },
61
+ :eventType => event_type
62
+ }
63
+ }
62
64
 
63
- # merge (append) the properties hash onto the payload (properties vary per event type)
64
- payload.merge! message
65
+ # merge (append) the properties hash onto the payload (properties vary per event type)
66
+ payload.merge! message
65
67
 
66
- @conn.post do |req|
67
- req.url BLUEPRINT_URL_CONTEXT
68
- req.headers['Content-Type'] = 'application/json'
69
- req.headers['X-Api-Key'] = @api_key
70
- req.body = payload.to_json
68
+ @conn.post do |req|
69
+ req.url BLUEPRINT_URL_CONTEXT
70
+ req.headers['Content-Type'] = 'application/json'
71
+ req.headers['X-Api-Key'] = @api_key
72
+ req.body = payload.to_json
73
+ end
71
74
  end
72
75
 
73
76
  self
@@ -93,23 +96,43 @@ module Blueprint
93
96
  # the list of violations for this action
94
97
  violations = [ ]
95
98
 
99
+ # if all parameters are present then we can check for link rules
100
+ if source.present? && target.present? && type.present?
101
+ # check to see if there is a link rule for this source / target pair
102
+ if RULES.has_key?(:links)
103
+ link_rule = RULES[:links].find { |l| l[:source] == source && l[:target] == target }
104
+
105
+ unless link_rule.nil?
106
+ # there is a link rule - check that the type is allowed over the link
107
+ unless link_rule[:allowed] == type
108
+ violations << "The type #{type} is not allowed over the link #{source} -> #{target}."
109
+ end
110
+ end
111
+ end
112
+ end
113
+
96
114
  unless type.nil?
97
- # is the type restricted to a certain structural element?
115
+ # is the type allowed?
116
+ if RULES.has_key?(:allowed)
117
+ unless RULES[:allowed].map { |t| t[:name] }.include?(type)
118
+ violations << "The type #{type} is not registered as being allowed."
119
+ end
120
+ end
98
121
 
122
+ # is the type restricted to a certain structural element?
99
123
  unless RULES[type].nil? # are there any rules for this type?
100
124
 
101
125
  if RULES[type].has_key?(:only) # do the rules for this type include an 'only' restriction?
102
126
  allowed_element = RULES[type][:only]
103
127
 
104
128
  unless allowed_element.eql?(source)
105
- violations << "The type #{type} is allowed only within #{allowed_element} and it was used in #{source}."
129
+ violations << "The type #{type} is allowed only within #{allowed_element} and it was used within #{source}."
106
130
  end
107
131
  end
108
132
  end
109
133
  end
110
134
 
111
135
  # output architectural violations
112
- # TODO make this output more obvious (and configurable?)
113
136
  unless violations.empty?
114
137
  p '### Architectural violations found ###'
115
138
  violations.each { |v|
@@ -139,8 +162,6 @@ module Blueprint
139
162
  end
140
163
 
141
164
  # performs an extract (that is, scans the code base for architectural elements)
142
- # TODO this scan can be arbitrarily complex - we could scan for anything
143
- # TODO add support of passing in custom scanners
144
165
  def scan(repository_type)
145
166
  repo_url = nil
146
167
 
@@ -175,7 +196,6 @@ module Blueprint
175
196
  end
176
197
 
177
198
  # now scan for models
178
- # TODO support code URLs for models too
179
199
  models = Dir[Rails.root.join('app/models/*.rb')].map { |path|
180
200
  path.match(/(\w+).rb/); $1.titleize
181
201
  }.compact
@@ -189,10 +209,12 @@ module Blueprint
189
209
  p 'Scan complete'
190
210
  end
191
211
 
212
+ # creates a design context for a structural element
192
213
  def element(name, code_url = nil)
193
214
  StructuralElementDesignContext.new(@api_key, @structure_id, name, code_url)
194
215
  end
195
216
 
217
+ # creates a design context for a concept
196
218
  def concept(name)
197
219
  ConceptDesignContext.new(@api_key, @structure_id, name)
198
220
  end
@@ -218,7 +240,7 @@ module Blueprint
218
240
  end
219
241
 
220
242
  # logs a message between two nodes in the structure
221
- def log(message = { }, extras = { }, type = nil, source = nil, target = nil)
243
+ def log(source = nil, target = nil, type = nil, message = { }, extras = { })
222
244
  # always check the logged message for architectural rules violations
223
245
  check_rules(source, target, type)
224
246
 
@@ -373,7 +395,19 @@ module Blueprint
373
395
  self
374
396
  end
375
397
 
376
- # verification methods
398
+ # methods to support AVL (architectural verification)
399
+
400
+ # marks a conceptual type as allowed within the archiecture
401
+ def allow
402
+ unless RULES.has_key?(:allowed)
403
+ RULES[:allowed] = [ ]
404
+ end
405
+
406
+ # add the type to the allowed list
407
+ RULES[:allowed] << { :name => @name }
408
+ end
409
+
410
+ # marks a conceptual type as allowed within (and only within) a structural elements
377
411
  def only(element)
378
412
  unless RULES.has_key?(@name)
379
413
  RULES[@name] = { }
@@ -433,7 +467,7 @@ module Blueprint
433
467
  end
434
468
 
435
469
 
436
- def log(message = { }, extras = { }, type = nil, source = nil, target = nil)
470
+ def log(source = nil, target = nil, type = nil, message = { }, extras = { })
437
471
  # always check the logged message for architectural rules violations
438
472
  check_rules(source, target, type)
439
473
 
@@ -479,8 +513,29 @@ module Blueprint
479
513
  end
480
514
  end
481
515
 
516
+ def allow(concept)
517
+ unless RULES.has_key?(:links)
518
+ RULES[:links] = [ ]
519
+ end
520
+
521
+ # look for an existing rule
522
+ existing_rule = RULES[:links].find { |l| l[:source] == @source && l[:target] == @target }
523
+
524
+ if existing_rule.nil?
525
+ existing_rule = {
526
+ :source => @source,
527
+ :target => @target,
528
+ :allowed => concept,
529
+ }
530
+
531
+ RULES[:links] << existing_rule
532
+ else
533
+ existing_rule[:allowed] = concept
534
+ end
535
+ end
536
+
482
537
  # logs a message between two nodes in the structure
483
- def log(message = { }, extras = { }, type = nil)
538
+ def log(type = nil, message = { }, extras = { })
484
539
  # always check the logged message for architectural rules violations
485
540
  check_rules(@source, @target, type)
486
541
 
@@ -1,7 +1,7 @@
1
1
  module Blueprint
2
2
  module Api
3
3
  module Rails
4
- VERSION = '0.2.6'
4
+ VERSION = '0.2.7'
5
5
  end
6
6
  end
7
7
  end
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.6
4
+ version: 0.2.7
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-20 00:00:00.000000000 Z
11
+ date: 2016-07-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler