flight-control-tower 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 31757e5119a7e7aa71852e298066e77057562439
4
+ data.tar.gz: 2bf445545edc584f69fbbda114fc6302e33870ad
5
+ SHA512:
6
+ metadata.gz: 50adacd51473f19a5845e4102f5dafef87fefa1e9b281b3a2508df1a887b90e27a47854ac1e7eebf82d2cfe7121a1a5e6aaffaf3ae764cfcde499d4043fd9cc9
7
+ data.tar.gz: 0ffc519f9b9ef55d96d4afae2bd9ba5ae61bff0b72f3778fc6a2d77c9b2681d25cf4e35bdab6c33b8856f82bbd7c725f497a52bdeaf820aefb9c0055a1f165a1
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ lib = File.expand_path(File.dirname(__FILE__) + '/../lib')
4
+ $LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
5
+
6
+ require 'flight-control-tower'
7
+
8
+ control_tower = FlightControlTower::ControlTower.new(ARGV[0])
9
+ puts control_tower.report_traffic
10
+
11
+
@@ -0,0 +1,17 @@
1
+ require 'flight-control-tower/parser'
2
+ require 'yaml'
3
+
4
+ module FlightControlTower
5
+ class ControlTower
6
+ def initialize(config_file)
7
+ @config_file = config_file
8
+ end
9
+
10
+ def report_traffic
11
+ config = YAML.load_file(@config_file)
12
+ files_to_parse = Dir[config["include_pattern"]] - Dir[config["exclude_pattern"]]
13
+ Parser.parse(files_to_parse)
14
+ end
15
+ end
16
+ end
17
+
@@ -0,0 +1,66 @@
1
+ require 'json'
2
+
3
+ module FlightControlTower
4
+ class Parser
5
+
6
+ def self.parse files_to_parse
7
+ connections = create_connections(files_to_parse)
8
+ puts create_graph(connections).to_json
9
+ end
10
+
11
+ private
12
+ def create_connections(files_to_parse)
13
+ results = {}
14
+ results['document'] = { outbound: [], inbound: [] }
15
+ files_to_parse.each do |f|
16
+ content = File.read(f)
17
+ next unless content.match(/defineComponent/)
18
+
19
+ component_name = File.basename(f)
20
+ results[component_name] = { outbound: [], inbound: [] }
21
+
22
+ inbound = content.scan(/this.on\((.+?)\)/).map{|e| e[0].split(',').map(&:strip) }
23
+ inbound.each do |args|
24
+ results[component_name][:inbound] << args[0] if args.length == 2
25
+ results[component_name][:inbound] << args[1] if args.length == 3
26
+ end
27
+
28
+ outbound = content.scan(/this.trigger\((.+?)\)/).map{|e| e[0].split(',').map(&:strip) }
29
+ outbound.each do |args|
30
+ results['document'][:outbound] << args[1] if args[0] == 'document'
31
+ results[component_name][:outbound] << args[1]
32
+ end
33
+ results[component_name][:inbound].uniq!
34
+ results[component_name][:outbound].uniq!
35
+ end
36
+ results
37
+ end
38
+
39
+ def create_grap(results)
40
+ graph = []
41
+ results.each_pair do |component_name, component_events|
42
+ component_events[:inbound].each do |event|
43
+ results.each_pair do |next_component_name, next_component_events|
44
+ next if component_name == next_component_name
45
+ if results[next_component_name][:outbound].include?(event)
46
+ graph << { source: next_component_name, target: component_name, eventName: event }
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ results.each_pair do |component_name, component_events|
53
+ component_events[:outbound].each do |event|
54
+ results.each_pair do |next_component_name, next_component_events|
55
+ next if component_name == next_component_name
56
+ if results[next_component_name][:inbound].include?(event)
57
+ graph << { source: component_name, dest: next_component_name, type: event }
58
+ end
59
+ end
60
+ end
61
+ end
62
+ return graph
63
+ end
64
+ end
65
+ end
66
+
metadata ADDED
@@ -0,0 +1,48 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: flight-control-tower
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Duda Dornelles
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-06-04 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: This gem parses your flight components and stores their event interactions
14
+ to later plot it using d3
15
+ email:
16
+ - duda@thoughtworks.com
17
+ executables:
18
+ - flight-control-tower
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - bin/flight-control-tower
23
+ - lib/flight-control-tower.rb
24
+ - lib/flight-control-tower/parser.rb
25
+ homepage:
26
+ licenses: []
27
+ metadata: {}
28
+ post_install_message:
29
+ rdoc_options: []
30
+ require_paths:
31
+ - lib
32
+ required_ruby_version: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ required_rubygems_version: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ requirements: []
43
+ rubyforge_project:
44
+ rubygems_version: 2.2.2
45
+ signing_key:
46
+ specification_version: 4
47
+ summary: Plot your flightjs components and its events interactions
48
+ test_files: []