dichotomy 0.0.1 → 0.0.2

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: 8523505b7772c68240ab86e82e665b647a3af261
4
- data.tar.gz: bc8b4033a7681dca3b6c1282bbd32efc83e6dd30
3
+ metadata.gz: 1dffbc24f094d52d7e9d7d031ae5aceda1ed9054
4
+ data.tar.gz: 9873026454c3399da28af783758554904c685f00
5
5
  SHA512:
6
- metadata.gz: 2ba8e1f9400b02ca4ccb0f278724eae27257466ffc8be773eb5c12620a9fe20fcf08af6a92df6d027e891971facc360bad0798d5b75128c5c34bba0b617083f4
7
- data.tar.gz: 5e160e7477764bc59be47239b19577162302a288917575d23986f85972272626ae12a6341674e9845dce42a1c2352da2eddd285a962e8d8539f035d09b803697
6
+ metadata.gz: 533d135534e7d20bd8de474b68b1bcc217785ab821b2d0529984fd3bf9a115e66b75794b3f76744fe61ad10a4ca69b9462be065440f09ebd97621948178563b9
7
+ data.tar.gz: 21a84c6b0ce5f78b8eadc373ad2a829f35f63a28981187bef34ebd9725ab414bd74c830a6d3e12809970eb22d87ffdde2ed040ac00f71560af417f5fec8240d5
@@ -1,5 +1,8 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <module type="RUBY_MODULE" version="4">
3
+ <component name="CompassSettings">
4
+ <option name="compassSupportEnabled" value="true" />
5
+ </component>
3
6
  <component name="FacetManager">
4
7
  <facet type="gem" name="Ruby Gem">
5
8
  <configuration>
@@ -56,6 +59,28 @@
56
59
  <ConfigurationWrapper RunnerId="RubyRunner" />
57
60
  <method />
58
61
  </configuration>
62
+ <configuration default="false" name="container" type="RubyRunConfigurationType" factoryName="Ruby" temporary="true">
63
+ <module name="dichotomy" />
64
+ <RUBY_RUN_CONFIG NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
65
+ <RUBY_RUN_CONFIG NAME="WORK DIR" VALUE="$MODULE_DIR$/lib/dichotomy" />
66
+ <RUBY_RUN_CONFIG NAME="SHOULD_USE_SDK" VALUE="false" />
67
+ <RUBY_RUN_CONFIG NAME="ALTERN_SDK_NAME" VALUE="" />
68
+ <RUBY_RUN_CONFIG NAME="myPassParentEnvs" VALUE="true" />
69
+ <envs />
70
+ <EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="true" />
71
+ <EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
72
+ <EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov">
73
+ <COVERAGE_PATTERN ENABLED="true">
74
+ <PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
75
+ </COVERAGE_PATTERN>
76
+ </EXTENSION>
77
+ <EXTENSION ID="org.jetbrains.plugins.ruby.motion.run.MotionSimulatorRunExtension" />
78
+ <RUBY_RUN_CONFIG NAME="SCRIPT_PATH" VALUE="$MODULE_DIR$/lib/dichotomy/container.rb" />
79
+ <RUBY_RUN_CONFIG NAME="SCRIPT_ARGS" VALUE="" />
80
+ <RunnerSettings RunnerId="RubyRunner" />
81
+ <ConfigurationWrapper RunnerId="RubyRunner" />
82
+ <method />
83
+ </configuration>
59
84
  </component>
60
85
  <component name="NewModuleRootManager">
61
86
  <content url="file://$MODULE_DIR$">
@@ -63,22 +88,8 @@
63
88
  </content>
64
89
  <orderEntry type="jdk" jdkName="RVM: ruby-2.1.2" jdkType="RUBY_SDK" />
65
90
  <orderEntry type="sourceFolder" forTests="false" />
66
- <orderEntry type="module-library">
67
- <library name="dichotomy (v0.0.1, /Users/rinojohnsen/RubymineProjects/dichotomy) [path][gem]">
68
- <CLASSES>
69
- <root url="file://$MODULE_DIR$/bin" />
70
- <root url="file://$MODULE_DIR$/lib" />
71
- <root url="file://$MODULE_DIR$/.idea" />
72
- </CLASSES>
73
- <SOURCES>
74
- <root url="file://$MODULE_DIR$/bin" />
75
- <root url="file://$MODULE_DIR$/lib" />
76
- <root url="file://$MODULE_DIR$/.idea" />
77
- </SOURCES>
78
- </library>
79
- </orderEntry>
80
91
  <orderEntry type="library" scope="PROVIDED" name="ast (v2.0.0, RVM: ruby-2.1.2) [gem]" level="application" />
81
- <orderEntry type="library" scope="PROVIDED" name="bundler (v1.6.2, RVM: ruby-2.1.2) [gem]" level="application" />
92
+ <orderEntry type="library" scope="PROVIDED" name="bundler (v1.6.3, RVM: ruby-2.1.2) [gem]" level="application" />
82
93
  <orderEntry type="library" scope="PROVIDED" name="parser (v2.1.9, RVM: ruby-2.1.2) [gem]" level="application" />
83
94
  <orderEntry type="library" scope="PROVIDED" name="rake (v0.9.6, RVM: ruby-2.1.2) [gem]" level="application" />
84
95
  <orderEntry type="library" scope="PROVIDED" name="slop (v3.5.0, RVM: ruby-2.1.2) [gem]" level="application" />
@@ -11,6 +11,7 @@ module Dichotomy
11
11
  def initialize
12
12
  @strategies = Builder::Strategies::StagedStrategyChain.new(Builder::BuildStage)
13
13
  @registered_listeners = Array.new
14
+ @registered_types = Array.new
14
15
  end
15
16
 
16
17
  def add_observer(klass)
@@ -18,7 +19,7 @@ module Dichotomy
18
19
  end
19
20
 
20
21
  def build(type)
21
- context = Builder::BuildContext.new(@strategies.make_strategy_chain, type, self)
22
+ context = Builder::BuildContext.new(@strategies.make_strategy_chain, type, self, @registered_types)
22
23
 
23
24
  @strategies.clear_strategies
24
25
 
@@ -26,7 +27,13 @@ module Dichotomy
26
27
  context.add_observer(klass)
27
28
  end
28
29
 
29
- context.strategies.execute_build_up(context)
30
+ type = context.strategies.execute_build_up(context)
31
+
32
+ if (type)
33
+ @registered_types.push(type)
34
+ end
35
+
36
+ type
30
37
  end
31
38
 
32
39
  def reset_strategies
@@ -7,13 +7,14 @@ module Dichotomy
7
7
  class BuildContext
8
8
  include Observable
9
9
 
10
- attr_accessor :strategies, :original_type, :built_type
10
+ attr_accessor :strategies, :original_type, :built_type, :registered_types
11
11
 
12
- def initialize(strategies, type, build_manager)
12
+ def initialize(strategies, type, build_manager, types)
13
13
  @strategies = strategies
14
14
  @original_type = type
15
15
  @built_type = nil
16
16
  @build_manager = build_manager
17
+ @registered_types = types
17
18
  end
18
19
 
19
20
  def new_build_up(type)
@@ -24,7 +25,7 @@ module Dichotomy
24
25
  #the appropriate strategy for the change
25
26
  notify_observers(:new_build_up, type)
26
27
 
27
- context = Builder::BuildContext.new(@build_manager.strategies.make_strategy_chain, type, @build_manager)
28
+ context = Builder::BuildContext.new(@build_manager.strategies.make_strategy_chain, type, @build_manager, @registered_types)
28
29
  @build_manager.registered_listeners.each do |klass|
29
30
  context.add_observer(klass)
30
31
  end
@@ -19,6 +19,8 @@ module Dichotomy
19
19
  end
20
20
 
21
21
  def execute_build_up(build_context)
22
+
23
+
22
24
  @strategies.each do |strategy|
23
25
  strategy.pre_build_up(build_context)
24
26
  end
@@ -26,7 +28,7 @@ module Dichotomy
26
28
  strategy.post_build_up(build_context)
27
29
  end
28
30
 
29
- puts 'completed the build'
31
+ puts ' --**-- completed the build --**-- '
30
32
 
31
33
  build_context.built_type
32
34
  end
@@ -15,13 +15,24 @@ module Dichotomy
15
15
  add_extension(Extensions::TestExtension.new)
16
16
  end
17
17
 
18
- #methods mixed in from DefaultExtension
19
- # - register_type(type) : returns Subject
20
- # - resolve_type(type) : returns Object
21
-
22
18
  def add_extension(extension)
23
19
  @extensions.push(extension)
24
20
  extension.initialize_extension(Base::Extension::ExtensionContext.new(self, @build_manager))
25
21
  end
22
+
23
+ def method_missing(m, *args, &block)
24
+ symbol = m.to_sym
25
+ type = args[0]
26
+
27
+ notify(symbol, type)
28
+
29
+ @build_manager.build(type)
30
+ end
31
+
32
+ def notify(symbol, type)
33
+ changed
34
+
35
+ notify_observers(symbol, type)
36
+ end
26
37
  end
27
38
  end
@@ -1,6 +1,7 @@
1
1
  require 'dichotomy/base/extension/container_extension'
2
2
  require 'dichotomy/extensions/defaults/extension_methods'
3
3
  require 'dichotomy/extensions/defaults/strategies/pre_creation_strategy'
4
+ require 'dichotomy/extensions/defaults/strategies/creation_strategy'
4
5
  require 'dichotomy/extensions/defaults/strategies/default_resolve_strategy'
5
6
  require 'dichotomy/base/managers/builder/build_stage'
6
7
 
@@ -8,28 +9,32 @@ module Dichotomy
8
9
  module Extensions
9
10
  class DefaultExtension < Base::Extension::ContainerExtension
10
11
  def initialize_context
11
- @context.container.extend(Defaults::ExtensionMethods)
12
+ #@context.container.extend(Defaults::ExtensionMethods)
12
13
  end
13
14
 
14
15
  def observed_notifications(symbol, type)
15
16
  if symbol === :register_type
16
17
  on_register_type(type)
18
+
19
+ puts "Running: " + symbol.to_s
17
20
  end
18
21
 
19
22
  if symbol === :resolve_type
20
- #if type == subject -> build_object
21
- #if type != subject -> build_subject -> build_object
22
-
23
23
  on_resolve_type(type)
24
+
25
+ puts "Running: " + symbol.to_s
24
26
  end
25
27
 
26
28
  if symbol === :new_build_up
27
29
  on_register_type(type) # by example
30
+
31
+ puts "Running: " + symbol.to_s
28
32
  end
29
33
  end
30
34
 
31
35
  def on_register_type(type)
32
36
  @context.build_manager.strategies.add(Defaults::Strategies::PreCreationStrategy.new, Base::Managers::Builder::BuildStage::PRE_CREATION)
37
+ @context.build_manager.strategies.add(Defaults::Strategies::CreationStrategy.new, Base::Managers::Builder::BuildStage::CREATION)
33
38
  end
34
39
 
35
40
  def on_resolve_type(type)
@@ -0,0 +1,29 @@
1
+ require 'dichotomy/extensions/defaults/strategies/types/subject'
2
+
3
+ module Dichotomy
4
+ module Extensions
5
+ module Defaults
6
+ module Strategies
7
+ class CreationStrategy
8
+ def pre_build_up(build_context)
9
+ built_type = build_context.built_type
10
+
11
+ subject = Types::Subject.new
12
+ subject.name = build_context.original_type.to_s.to_sym
13
+ subject.methods = built_type.methods
14
+ subject.properties = built_type.properties
15
+ subject.dependencies = built_type.dependencies
16
+ subject.filename = built_type.filename
17
+ subject.id = built_type.id
18
+
19
+ build_context.built_type = subject
20
+ end
21
+
22
+ def post_build_up(build_context)
23
+
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -4,13 +4,13 @@ module Dichotomy
4
4
  module Strategies
5
5
  class DefaultResolveStrategy
6
6
  def pre_build_up(build_context)
7
- puts 'resolve_pre_build_up'
8
7
 
9
- build_context.new_build_up(Class)
8
+
9
+ #build_context.new_build_up(Class)
10
10
  end
11
11
 
12
12
  def post_build_up(build_context)
13
- puts 'resolve_post_build_up'
13
+
14
14
  end
15
15
  end
16
16
  end
@@ -1,14 +1,20 @@
1
+ require 'dichotomy/extensions/defaults/strategies/reflectors/class_reflector'
2
+
1
3
  module Dichotomy
2
4
  module Extensions
3
5
  module Defaults
4
6
  module Strategies
5
7
  class PreCreationStrategy
6
8
  def pre_build_up(build_context)
7
- puts 'PreCreationStrategy_pre_build_up'
9
+ original_type = build_context.original_type
10
+
11
+ class_reflector = Reflectors::ClassReflector.new
12
+
13
+ build_context.built_type = class_reflector.create_rapport(original_type)
8
14
  end
9
15
 
10
16
  def post_build_up(build_context)
11
- puts 'PreCreationStrategy_post_build_up'
17
+
12
18
  end
13
19
  end
14
20
  end
@@ -1,10 +1,52 @@
1
+ require 'dichotomy/extensions/defaults/strategies/reflectors/source/analyser'
2
+
1
3
  module Dichotomy
2
4
  module Extensions
3
5
  module Defaults
4
6
  module Strategies
5
7
  module Reflectors
6
8
  class ClassReflector
9
+ def initialize
10
+ @analyser = Source::Analyser.new
11
+ end
12
+
13
+ def create_rapport(klass)
14
+ source_location = get_source_location(klass)
15
+ rapport = @analyser.analyse(source_location[0]) # perhaps support all files?
16
+ rapport
17
+ end
18
+
19
+ private
20
+
21
+ def get_source_location(klass)
22
+ source_locations = is_class(klass)
23
+ if source_locations.empty?
24
+ methods = defined_methods(klass)
25
+ raise ArgumentError, (methods.empty? ? "#{klass} has no methods" : "#{klass} only has built-in methods (#{methods.size} in total)")
26
+ end
27
+ source_locations[0]
28
+ end
29
+
30
+ def is_class(klass)
31
+ methods = defined_methods(klass)
32
+ file_groups = methods.group_by{|sl| sl[0]}
33
+ file_counts = file_groups.map do |file, sls|
34
+ lines = sls.map{|sl| sl[1]}
35
+ count = lines.size
36
+ line = lines.min
37
+ {file: file, count: count, line: line}
38
+ end
39
+ file_counts.sort_by!{|fc| fc[:count]}
40
+ source_locations = file_counts.map{|fc| [fc[:file], fc[:line]]}
41
+ source_locations
42
+ end
7
43
 
44
+ def defined_methods(klass)
45
+ methods = klass.methods(false).map{|m| klass.method(m)} + klass.instance_methods(false).map{|m| klass.instance_method(m)}
46
+ methods.map!(&:source_location)
47
+ methods.compact!
48
+ methods
49
+ end
8
50
  end
9
51
  end
10
52
  end
@@ -1,4 +1,5 @@
1
1
  require 'parser/current'
2
+ require 'dichotomy/extensions/defaults/strategies/reflectors/source/interpreter'
2
3
 
3
4
  module Dichotomy
4
5
  module Extensions
@@ -6,7 +7,7 @@ module Dichotomy
6
7
  module Strategies
7
8
  module Reflectors
8
9
  module Source
9
- class SourceAnalyser
10
+ class Analyser
10
11
  def initialize
11
12
  @parser = Parser::CurrentRuby.new
12
13
  end
@@ -14,13 +15,13 @@ module Dichotomy
14
15
  def analyse(filename)
15
16
  buffer = Parser::Source::Buffer.new(filename).read
16
17
  ast = @parser.parse(buffer)
17
- source_interpreter = SourceInterpreter.new
18
- subject = source_interpreter.create_subject(buffer, ast)
18
+ interpreter = Interpreter.new
19
+ rapport = interpreter.create_rapport(buffer, ast)
19
20
 
20
21
  @parser.reset
21
- p ast
22
+ #p ast
22
23
 
23
- subject
24
+ rapport
24
25
  end
25
26
  end
26
27
  end
@@ -0,0 +1,97 @@
1
+ require 'parser/current'
2
+ require 'dichotomy/extensions/defaults/strategies/reflectors/source/rapport'
3
+
4
+ module Dichotomy
5
+ module Extensions
6
+ module Defaults
7
+ module Strategies
8
+ module Reflectors
9
+ module Source
10
+ class Interpreter < Parser::Rewriter
11
+ def initialize
12
+ @rapport = Rapport.new('')
13
+ end
14
+
15
+ def on_begin(node)
16
+ @node = node
17
+
18
+ name = @node.location.expression.source_buffer.name
19
+ @rapport.filename = name
20
+ @rapport.name = name[/([^\/]+)$/].chomp('.rb')
21
+
22
+ find_methods
23
+ end
24
+
25
+ def create_rapport(buffer, ast)
26
+ self.rewrite(buffer, ast)
27
+ @rapport
28
+ end
29
+
30
+ private
31
+
32
+ def find_methods
33
+ @node.children.each do |child_node|
34
+ if child_node.location.kind_of?(Parser::Source::Map::Definition)
35
+ if child_node.children[0].eql? :initialize # add check for Symbol
36
+ if child_node.children[1].children[0] != nil
37
+ find_dependencies(child_node)
38
+ end
39
+ else
40
+ arguments_hash = Array.new
41
+
42
+ if child_node.children[1].children[0] != nil
43
+ child_node.children[1].children.each do |argument_variable|
44
+ arguments_hash.push(argument_variable.children[0])
45
+ end
46
+ end
47
+
48
+ @rapport.methods.push({child_node.children[0] => arguments_hash})
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ def find_dependencies(node)
55
+ node.children[1].children.each_with_index do |dependency_variable, index|
56
+ if node.children[2]
57
+ variable = node.children[2].children[index]
58
+
59
+ if (variable.kind_of?(Symbol))
60
+ @rapport.dependencies[dependency_variable.children[0]] = look_for_methods_on_variable(variable)
61
+ else
62
+ if variable.children[0].kind_of?(Symbol)
63
+ @rapport.dependencies[dependency_variable.children[0]] = look_for_methods_on_variable(variable.children[0])
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
69
+
70
+
71
+ def look_for_methods_on_variable(variables)
72
+ methods = Array.new
73
+ @node.children.each do |child_node|
74
+ if child_node.location.kind_of?(Parser::Source::Map::Definition) && !child_node.children[0].eql?(:initialize)
75
+ argumentsHash = Array.new
76
+
77
+ child_node.children[2].children.each do |variable|
78
+ if variable.location.kind_of?(Parser::Source::Map::Send)
79
+ variable.children[0].children.each do |tt|
80
+ if tt === variables
81
+ methods.push({:method => variable.children[1]})
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
88
+
89
+ methods
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,28 @@
1
+ module Dichotomy
2
+ module Extensions
3
+ module Defaults
4
+ module Strategies
5
+ module Reflectors
6
+ module Source
7
+ class Rapport
8
+ attr_accessor :id, :name, :methods, :properties, :dependencies, :filename
9
+
10
+ def initialize(name, methods = Array.new, properties = Array.new, dependencies = Hash.new, filename = '')
11
+ @name = name
12
+ @methods = methods
13
+ @properties = properties
14
+ @dependencies = dependencies
15
+ @filename = filename
16
+ @id = rand(36**8).to_s(36) # a simple solution
17
+ end
18
+
19
+ def has_dependencies?
20
+ return !@dependencies.empty?
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,26 @@
1
+ module Dichotomy
2
+ module Extensions
3
+ module Defaults
4
+ module Strategies
5
+ module Types
6
+ class Subject
7
+ attr_accessor :id, :name, :methods, :properties, :dependencies, :filename
8
+
9
+ def initialize(name = '', methods = Array.new, properties = Array.new, dependencies = Array.new, filename = '')
10
+ @name = name
11
+ @methods = methods
12
+ @properties = properties
13
+ @dependencies = dependencies
14
+ @filename = filename
15
+ @id = rand(36**8).to_s(36) # a simple solution
16
+ end
17
+
18
+ def has_dependencies?
19
+ return !@dependencies.empty?
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -4,12 +4,13 @@ module Dichotomy
4
4
  module Strategies
5
5
  class TestSubjectStrategy
6
6
  def pre_build_up(build_context)
7
- puts 'test_pre_build_up'
8
- build_context.built_type = Class.new
7
+
8
+ #build_context.built_type = Class.new
9
+ #build_context
9
10
  end
10
11
 
11
12
  def post_build_up(build_context)
12
- puts 'test_post_build_up'
13
+
13
14
  end
14
15
  end
15
16
  end
@@ -1,3 +1,3 @@
1
1
  module Dichotomy
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
@@ -1,7 +1,11 @@
1
1
  require 'dichotomy'
2
2
  require 'example_dependency'
3
+ require 'example_dependency_two'
3
4
 
4
5
  dichotomy_container = Dichotomy::Container.new
5
- subject = dichotomy_container.register_type(ExampleDependency)
6
+ example_dependency_subject = dichotomy_container.register_type(ExampleDependency)
7
+ example_dependency_subject_two = dichotomy_container.register_type(ExampleDependencyTwo)
8
+
9
+ dichotomy_container.resolve_type(example_dependency_subject_two)
6
10
 
7
11
  debug = nil
@@ -1,4 +1,8 @@
1
1
  class ExampleDependency
2
+ def initialize
3
+
4
+ end
5
+
2
6
  def run
3
7
  puts 'run'
4
8
  end
@@ -0,0 +1,15 @@
1
+ class ExampleDependencyTwo
2
+ def initialize(dependency, rino, andre)
3
+ @dependency = dependency
4
+ @rino = rino
5
+ @andre = andre
6
+ end
7
+
8
+ def init(tt)
9
+ @dependency.run
10
+ @dependency.pause
11
+ @dependency.stop
12
+
13
+ @andre.johnsen
14
+ end
15
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dichotomy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rino André Johnsen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-17 00:00:00.000000000 Z
11
+ date: 2014-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -92,16 +92,20 @@ files:
92
92
  - lib/dichotomy/container.rb
93
93
  - lib/dichotomy/extensions/default_extension.rb
94
94
  - lib/dichotomy/extensions/defaults/extension_methods.rb
95
+ - lib/dichotomy/extensions/defaults/strategies/creation_strategy.rb
95
96
  - lib/dichotomy/extensions/defaults/strategies/default_resolve_strategy.rb
96
97
  - lib/dichotomy/extensions/defaults/strategies/pre_creation_strategy.rb
97
98
  - lib/dichotomy/extensions/defaults/strategies/reflectors/class_reflector.rb
98
- - lib/dichotomy/extensions/defaults/strategies/reflectors/source/source_analyser.rb
99
- - lib/dichotomy/extensions/defaults/strategies/reflectors/source/source_interpreter.rb
99
+ - lib/dichotomy/extensions/defaults/strategies/reflectors/source/analyser.rb
100
+ - lib/dichotomy/extensions/defaults/strategies/reflectors/source/interpreter.rb
101
+ - lib/dichotomy/extensions/defaults/strategies/reflectors/source/rapport.rb
102
+ - lib/dichotomy/extensions/defaults/strategies/types/subject.rb
100
103
  - lib/dichotomy/extensions/test_extension.rb
101
104
  - lib/dichotomy/extensions/tests/strategies/default_subject_strategy.rb
102
105
  - lib/dichotomy/version.rb
103
106
  - lib/example.rb
104
107
  - lib/example_dependency.rb
108
+ - lib/example_dependency_two.rb
105
109
  homepage: https://github.com/rinoandrejohnsen/dichotomy
106
110
  licenses:
107
111
  - MIT
@@ -122,7 +126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
122
126
  version: '0'
123
127
  requirements: []
124
128
  rubyforge_project:
125
- rubygems_version: 2.2.2
129
+ rubygems_version: 2.3.0
126
130
  signing_key:
127
131
  specification_version: 4
128
132
  summary: Dichotomy is an Inversion of Control Container for Ruby applications.
@@ -1,59 +0,0 @@
1
- require 'parser/current'
2
-
3
- module Dichotomy
4
- module Extensions
5
- module Defaults
6
- module Strategies
7
- module Reflectors
8
- module Source
9
- class SourceInterpreter < Parser::Rewriter
10
- def initialize
11
- @subject = Common::Models::Subject.new('')
12
- end
13
-
14
- def on_begin(node)
15
- @node = node
16
-
17
- name = @node.location.expression.source_buffer.name
18
- @subject.filename = name
19
- @subject.name = name[/([^\/]+)$/].chomp('.rb')
20
-
21
- find_methods
22
- #find_dependencies
23
- end
24
-
25
- def create_subject(buffer, ast)
26
- self.rewrite(buffer, ast)
27
- @subject
28
- end
29
-
30
- private
31
-
32
- def find_methods
33
- @node.children.each do |child_node|
34
- if child_node.location.kind_of?(Parser::Source::Map::Definition)
35
- arguments_node = child_node.children[1]
36
-
37
- argumentsHash = Array.new
38
-
39
- arguments_node.children.each do |args_child_node|
40
- args_child_node.children.each do |arg|
41
- if child_node.children[0].eql? :initialize # add check for Symbol
42
- @subject.dependencies.push(Common::Models::SubjectDependency.new(arg))
43
- end
44
-
45
- argumentsHash.push(arg)
46
- end
47
- end
48
-
49
- @subject.methods.push(Common::Models::SubjectMethod.new(child_node.children[0], argumentsHash))
50
- end
51
- end
52
- end
53
- end
54
- end
55
- end
56
- end
57
- end
58
- end
59
- end