conject 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.
Files changed (61) hide show
  1. data/.gitignore +4 -0
  2. data/.rvmrc +2 -0
  3. data/Gemfile +4 -0
  4. data/Gemfile.lock +32 -0
  5. data/NOTES.txt +61 -0
  6. data/README.md +8 -0
  7. data/Rakefile +12 -0
  8. data/TODO +9 -0
  9. data/conject.gemspec +21 -0
  10. data/lib/conject.rb +40 -0
  11. data/lib/conject/borrowed_active_support_inflector.rb +525 -0
  12. data/lib/conject/class_ext_construct_with.rb +123 -0
  13. data/lib/conject/class_finder.rb +11 -0
  14. data/lib/conject/composition_error.rb +33 -0
  15. data/lib/conject/dependency_resolver.rb +16 -0
  16. data/lib/conject/extended_metaid.rb +33 -0
  17. data/lib/conject/object_context.rb +61 -0
  18. data/lib/conject/object_definition.rb +10 -0
  19. data/lib/conject/object_factory.rb +28 -0
  20. data/lib/conject/utilities.rb +8 -0
  21. data/lib/conject/version.rb +3 -0
  22. data/rake_tasks/rspec.rake +25 -0
  23. data/spec/acceptance/dev/README +7 -0
  24. data/spec/acceptance/regression/README +12 -0
  25. data/spec/acceptance/regression/basic_composition_spec.rb +29 -0
  26. data/spec/acceptance/regression/basic_object_creation_spec.rb +42 -0
  27. data/spec/acceptance/regression/nested_contexts_spec.rb +86 -0
  28. data/spec/conject/borrowed_active_support_inflector_spec.rb +28 -0
  29. data/spec/conject/class_ext_construct_with_spec.rb +226 -0
  30. data/spec/conject/class_finder_spec.rb +36 -0
  31. data/spec/conject/composition_error_spec.rb +124 -0
  32. data/spec/conject/dependency_resolver_spec.rb +32 -0
  33. data/spec/conject/extended_metaid_spec.rb +90 -0
  34. data/spec/conject/object_context_spec.rb +186 -0
  35. data/spec/conject/object_definition_spec.rb +31 -0
  36. data/spec/conject/object_factory_spec.rb +89 -0
  37. data/spec/conject/utilities_spec.rb +30 -0
  38. data/spec/spec_helper.rb +24 -0
  39. data/spec/support/SPEC_HELPERS_GO_HERE +0 -0
  40. data/spec/support/load_path_helpers.rb +27 -0
  41. data/spec/test_data/basic_composition/fence.rb +5 -0
  42. data/spec/test_data/basic_composition/front_desk.rb +2 -0
  43. data/spec/test_data/basic_composition/grass.rb +2 -0
  44. data/spec/test_data/basic_composition/guest.rb +5 -0
  45. data/spec/test_data/basic_composition/lobby.rb +5 -0
  46. data/spec/test_data/basic_composition/nails.rb +2 -0
  47. data/spec/test_data/basic_composition/tv.rb +2 -0
  48. data/spec/test_data/basic_composition/wood.rb +2 -0
  49. data/spec/test_data/simple_stuff/some_random_class.rb +2 -0
  50. data/spike/arity_funny_business_in_different_ruby_versions.rb +34 -0
  51. data/spike/depends_on_spike.rb +146 -0
  52. data/spike/donkey_fail.rb +48 -0
  53. data/spike/donkey_journey.rb +50 -0
  54. data/spike/go.rb +11 -0
  55. data/spike/metaid.rb +28 -0
  56. data/spike/object_definition.rb +125 -0
  57. data/spike/sample.rb +125 -0
  58. data/src/user_model.rb +4 -0
  59. data/src/user_presenter.rb +10 -0
  60. data/src/user_view.rb +3 -0
  61. metadata +165 -0
@@ -0,0 +1,125 @@
1
+ $: << "./lib"
2
+ require 'active_support/inflector'
3
+
4
+ class Dog
5
+ end
6
+
7
+ class Kennel
8
+ end
9
+
10
+ class ObjectBuilder
11
+ def initialize
12
+ @object_producers = {}
13
+ end
14
+
15
+ def construct_object(object_name, object_context)
16
+ with_object_producer(object_name) do |producer|
17
+ producer.produce
18
+ end
19
+ end
20
+
21
+ def is_singleton?(object_name)
22
+ false
23
+ end
24
+
25
+ def set_object_producer(object_name, object_producer)
26
+ @object_producers[object_name.to_sym] = object_producer
27
+ end
28
+
29
+ def set_singleton(object_name, object)
30
+ set_object_producer object_name, SingletonProducer.new(object)
31
+ end
32
+
33
+ def set_simple_class(object_name, klass)
34
+ set_object_producer(object_name, SimpleBuilder.new(klass))
35
+ end
36
+
37
+
38
+ def with_object_producer(object_name)
39
+ object_name = object_name.to_sym
40
+ producer = @object_producers[object_name]
41
+ if !producer
42
+ producer = find_or_generate_producer(object_name)
43
+ if producer
44
+ @object_producers[object_name] = producer
45
+ end
46
+ end
47
+
48
+ if producer
49
+ yield producer
50
+ else
51
+ raise "Cannot produce object '#{object_name.to_s}'"
52
+ end
53
+ end
54
+
55
+ def find_or_generate_producer(object_name)
56
+ c = Object.const_get(object_name.to_s.camelize)
57
+ if c
58
+ return SimpleBuilder.new(c)
59
+ end
60
+ end
61
+ end
62
+
63
+ class ObjectProducer
64
+ def produce
65
+ raise "Can't produce objects with an abstract ObjectProducer"
66
+ end
67
+ end
68
+
69
+ class SingletonProducer < ObjectProducer
70
+ def initialize(object)
71
+ @object = object
72
+ end
73
+
74
+ def produce
75
+ @object
76
+ end
77
+ end
78
+
79
+ class SimpleBuilder < ObjectProducer
80
+ def initialize(klass)
81
+ @class = klass
82
+ end
83
+
84
+ def produce
85
+ @class.new
86
+ end
87
+ end
88
+
89
+ class ObjectContext
90
+ def initialize
91
+ @object_builder = ObjectBuilder.new
92
+ @objects = {}
93
+ end
94
+
95
+ def get_object(object_name)
96
+ object_name = object_name.to_sym
97
+ if @objects.keys.include?(object_name)
98
+ return @objects[object_name]
99
+ else
100
+ object = @object_builder.construct_object(object_name, self)
101
+ if @object_builder.is_singleton?(object_name)
102
+ @objects[object_name] = object
103
+ end
104
+ return object
105
+ end
106
+ end
107
+
108
+ def set_object(object_name, object)
109
+ @objects[object_name.to_sym] = object
110
+ end
111
+ end
112
+
113
+
114
+ context = ObjectContext.new
115
+
116
+ # context.set_simple_class(:dog, Dog)
117
+
118
+ p context.get_object(:dog)
119
+ p context.get_object(:dog)
120
+
121
+ context.set_object(:kennel, Kennel.new)
122
+
123
+ p context.get_object(:kennel)
124
+ p context.get_object(:kennel)
125
+
@@ -0,0 +1,4 @@
1
+ class UserModel
2
+ extend Publisher
3
+ can_fire :changed
4
+ end
@@ -0,0 +1,10 @@
1
+ class UserPresenter
2
+ built_with :user_model, :user_view
3
+
4
+ def setup
5
+ @user_model.when :changed do
6
+ @user_view.name = @user_model.name
7
+ end
8
+ end
9
+
10
+ end
@@ -0,0 +1,3 @@
1
+ class UserView
2
+ attr_accessor :name
3
+ end
metadata ADDED
@@ -0,0 +1,165 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: conject
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - David Crosby
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-02-21 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: &2152595540 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *2152595540
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ requirement: &2152595120 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *2152595120
36
+ - !ruby/object:Gem::Dependency
37
+ name: simplecov
38
+ requirement: &2152594640 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *2152594640
47
+ description: Enable Guice-like dependency injection and contextual object interactions.
48
+ email:
49
+ - david.crosby@atomicobject.com
50
+ executables: []
51
+ extensions: []
52
+ extra_rdoc_files: []
53
+ files:
54
+ - .gitignore
55
+ - .rvmrc
56
+ - Gemfile
57
+ - Gemfile.lock
58
+ - NOTES.txt
59
+ - README.md
60
+ - Rakefile
61
+ - TODO
62
+ - conject.gemspec
63
+ - lib/conject.rb
64
+ - lib/conject/borrowed_active_support_inflector.rb
65
+ - lib/conject/class_ext_construct_with.rb
66
+ - lib/conject/class_finder.rb
67
+ - lib/conject/composition_error.rb
68
+ - lib/conject/dependency_resolver.rb
69
+ - lib/conject/extended_metaid.rb
70
+ - lib/conject/object_context.rb
71
+ - lib/conject/object_definition.rb
72
+ - lib/conject/object_factory.rb
73
+ - lib/conject/utilities.rb
74
+ - lib/conject/version.rb
75
+ - rake_tasks/rspec.rake
76
+ - spec/acceptance/dev/README
77
+ - spec/acceptance/regression/README
78
+ - spec/acceptance/regression/basic_composition_spec.rb
79
+ - spec/acceptance/regression/basic_object_creation_spec.rb
80
+ - spec/acceptance/regression/nested_contexts_spec.rb
81
+ - spec/conject/borrowed_active_support_inflector_spec.rb
82
+ - spec/conject/class_ext_construct_with_spec.rb
83
+ - spec/conject/class_finder_spec.rb
84
+ - spec/conject/composition_error_spec.rb
85
+ - spec/conject/dependency_resolver_spec.rb
86
+ - spec/conject/extended_metaid_spec.rb
87
+ - spec/conject/object_context_spec.rb
88
+ - spec/conject/object_definition_spec.rb
89
+ - spec/conject/object_factory_spec.rb
90
+ - spec/conject/utilities_spec.rb
91
+ - spec/spec_helper.rb
92
+ - spec/support/SPEC_HELPERS_GO_HERE
93
+ - spec/support/load_path_helpers.rb
94
+ - spec/test_data/basic_composition/fence.rb
95
+ - spec/test_data/basic_composition/front_desk.rb
96
+ - spec/test_data/basic_composition/grass.rb
97
+ - spec/test_data/basic_composition/guest.rb
98
+ - spec/test_data/basic_composition/lobby.rb
99
+ - spec/test_data/basic_composition/nails.rb
100
+ - spec/test_data/basic_composition/tv.rb
101
+ - spec/test_data/basic_composition/wood.rb
102
+ - spec/test_data/simple_stuff/some_random_class.rb
103
+ - spike/arity_funny_business_in_different_ruby_versions.rb
104
+ - spike/depends_on_spike.rb
105
+ - spike/donkey_fail.rb
106
+ - spike/donkey_journey.rb
107
+ - spike/go.rb
108
+ - spike/metaid.rb
109
+ - spike/object_definition.rb
110
+ - spike/sample.rb
111
+ - src/user_model.rb
112
+ - src/user_presenter.rb
113
+ - src/user_view.rb
114
+ homepage: https://github.com/dcrosby42/conject
115
+ licenses: []
116
+ post_install_message:
117
+ rdoc_options: []
118
+ require_paths:
119
+ - lib
120
+ required_ruby_version: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ required_rubygems_version: !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ requirements: []
133
+ rubyforge_project:
134
+ rubygems_version: 1.8.10
135
+ signing_key:
136
+ specification_version: 3
137
+ summary: Enable Guice-like dependency injection and contextual object interactions.
138
+ test_files:
139
+ - spec/acceptance/dev/README
140
+ - spec/acceptance/regression/README
141
+ - spec/acceptance/regression/basic_composition_spec.rb
142
+ - spec/acceptance/regression/basic_object_creation_spec.rb
143
+ - spec/acceptance/regression/nested_contexts_spec.rb
144
+ - spec/conject/borrowed_active_support_inflector_spec.rb
145
+ - spec/conject/class_ext_construct_with_spec.rb
146
+ - spec/conject/class_finder_spec.rb
147
+ - spec/conject/composition_error_spec.rb
148
+ - spec/conject/dependency_resolver_spec.rb
149
+ - spec/conject/extended_metaid_spec.rb
150
+ - spec/conject/object_context_spec.rb
151
+ - spec/conject/object_definition_spec.rb
152
+ - spec/conject/object_factory_spec.rb
153
+ - spec/conject/utilities_spec.rb
154
+ - spec/spec_helper.rb
155
+ - spec/support/SPEC_HELPERS_GO_HERE
156
+ - spec/support/load_path_helpers.rb
157
+ - spec/test_data/basic_composition/fence.rb
158
+ - spec/test_data/basic_composition/front_desk.rb
159
+ - spec/test_data/basic_composition/grass.rb
160
+ - spec/test_data/basic_composition/guest.rb
161
+ - spec/test_data/basic_composition/lobby.rb
162
+ - spec/test_data/basic_composition/nails.rb
163
+ - spec/test_data/basic_composition/tv.rb
164
+ - spec/test_data/basic_composition/wood.rb
165
+ - spec/test_data/simple_stuff/some_random_class.rb