carioca 0.1 → 1.0

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.
data/ChangeLog CHANGED
@@ -2,3 +2,6 @@ carioca :
2
2
  - initial dev. version
3
3
  - version 0.1 (unstable)
4
4
  Romain GEORGES
5
+ - initial stable version
6
+ - version 1.0 (stable)
7
+ Romain GEORGES
data/Gemfile CHANGED
@@ -6,4 +6,6 @@ gem "yard"
6
6
  gem "rdoc"
7
7
  gem "rcov"
8
8
  gem "roodi"
9
- gem "uuid"
9
+ gem "uuid"
10
+ gem "methodic"
11
+ gem "code_statistics"
@@ -1,9 +1,11 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
+ code_statistics (0.2.13)
4
5
  diff-lcs (1.1.3)
5
6
  json (1.6.5)
6
7
  macaddr (1.0.0)
8
+ methodic (0.2)
7
9
  rake (0.9.2.2)
8
10
  rcov (1.0.0)
9
11
  rdoc (3.12)
@@ -31,6 +33,8 @@ PLATFORMS
31
33
  ruby
32
34
 
33
35
  DEPENDENCIES
36
+ code_statistics
37
+ methodic
34
38
  rake
35
39
  rcov
36
40
  rdoc
@@ -0,0 +1,236 @@
1
+ # Carioca
2
+
3
+ ## Content
4
+
5
+ Author:: Romain GEORGES <romain@ultragreen.net>
6
+ Version:: 1.0
7
+ WWW:: http://www.ultragreen.net/projects/carioca
8
+
9
+ ## Description
10
+
11
+ CARIOCA is Configuration Agent and Registry with Inversion Of Control for your Applications
12
+ Carioca provide a full IoC light Container for designing your applications
13
+ Carioca provide :
14
+ - a complete Configuration Agent
15
+ - A service Registry (base on IOC/DI pattern)
16
+
17
+ ## Installation
18
+
19
+ In a valid Ruby environment :
20
+
21
+ ```
22
+ $ sudo zsh
23
+ # gem ins carioca
24
+ ```
25
+ ## Implementation
26
+
27
+ * [Carioca]
28
+ * [Carioca::Services]
29
+ * [Carioca:Services::Registry]
30
+
31
+ ## Utilisation
32
+
33
+ Carioca may be used to create Ruby applications, based on a service registry
34
+ Carioca come with somes builtin services :
35
+ * logger : an Internal logger based on the logger gem.
36
+ * Configuration : a Configuration Service, with Yaml percistance, and pretty accessors.
37
+ * Debug : a Class Debugger, based on Proxy Design pattern and meta-programation like method_missing
38
+
39
+ ### Getting start
40
+
41
+ #### Preparing Gem
42
+
43
+ Just after Installation, Carioca :
44
+
45
+ ```
46
+ $ gem ins bundler # if needed
47
+ $ bunlde gem myapp
48
+ $ cd myapp
49
+ ```
50
+
51
+ Edit your myapp.gemspec, add this line in Gem::Specification bloc :
52
+
53
+ ```ruby
54
+ gem.add_dependency 'carioca'
55
+ gem.add_development_dependency 'rake'
56
+ gem.add_development_dependency 'carioca'
57
+ ```
58
+
59
+ Description and summary need to be changed to be correctly displayed on Rubygems.
60
+
61
+ so, execute bundle :
62
+
63
+ ```
64
+ $ bundle
65
+ ```
66
+
67
+ Your environment, is ready to create your app
68
+
69
+ #### Prepare Carioca
70
+
71
+ ```
72
+ $ mkdir config
73
+ $ mkdir bin
74
+ ```
75
+
76
+ edit bin/myapp :
77
+
78
+ ```ruby
79
+ require 'rubygems'
80
+ require 'carioca'
81
+
82
+ registry = Carioca::Services::Registry.init :file => 'config/myservices.registry'
83
+ ```
84
+
85
+
86
+ After, you could Run Carioca and discover Builtins Services, you need the write access to config path
87
+
88
+
89
+ ```
90
+ $ ruby -e 'require "rubygems"; require "carioca"; reg = Carioca::Services::Registry.init :file => "config/myservices.registry"; reg.discover_builtins; reg.save!'
91
+ ```
92
+
93
+
94
+ this create you, a New Registry config, with all builtins registered.
95
+ Default path :
96
+ * config file : ./.config
97
+ * log file : /tmp/log.file
98
+ Carioca Registry is a Singleton, and services also be unique instance.
99
+
100
+ Now you could continue coding your bin/myapp
101
+
102
+ #### Using Configuration Service
103
+
104
+ ```ruby
105
+ require 'rubygems'
106
+ require 'carioca'
107
+
108
+ registry = Carioca::Services::Registry.init :file => 'config/myservices.registry'
109
+ config = registry.start_service :name => 'configuration'
110
+ config.setings.db = { :name => 'mydb' }
111
+ config.settings.db.host = "myhost"
112
+ config.settings.db.port = "4545"
113
+ config.settings.email = "my@email.com"
114
+ config.save!
115
+ ```
116
+
117
+ #### Using Logger Service
118
+
119
+ logger is automatically loaded with Carioca, loading registry with :debug => true, let you see the Carioca traces.
120
+
121
+ ```ruby
122
+ require 'rubygems'
123
+ require 'carioca'
124
+
125
+ registry = Carioca::Services::Registry.init :file => 'config/myservices.registry' :debug => true
126
+ log = registry.get_service :name => 'logger'
127
+ log.info('myapp') {'my message' }
128
+ ```
129
+
130
+ #### Creating and using your own service
131
+
132
+ before create your own service :
133
+
134
+ ```
135
+ $ mkdir services
136
+ ```
137
+
138
+ Services, must be a class, if not do a wrapper
139
+ edit services/myservice.rb
140
+
141
+ ```ruby
142
+ class MyService
143
+ def initialize
144
+ end
145
+
146
+ def test(arg = nil)
147
+ return 'OK'
148
+ end
149
+ end
150
+ end
151
+ ```
152
+
153
+ You could use the #service_register API (See spec for all details)
154
+ but, you could write it directly in YAML in your config/myservices.registry :
155
+ add the following lines :
156
+
157
+ ```yaml
158
+ ...
159
+ myservice:
160
+ :type: :file
161
+ :resource: services/myservice.rb
162
+ :description: a test service
163
+ :service: MyServices
164
+ ...
165
+
166
+ So in your app :
167
+
168
+ ```ruby
169
+ require 'rubygems'
170
+ require 'carioca'
171
+
172
+ registry = Carioca::Services::Registry.init :file => 'config/myservices.registry'
173
+ service = registry.start_service :name => 'myservice'
174
+ service.test('titi')
175
+ ```
176
+
177
+ #### Using Debug in multiple service instance
178
+
179
+
180
+ in your app, for debug you could use the Proxy Debug (you need to run Carioca Registry in debug mode ) :
181
+ (Using "debug_", you create an instance of service debug, so with this syntaxe you could create multiple services instances, with different parameters calling.)
182
+
183
+ ```ruby
184
+ require 'rubygems'
185
+ require 'carioca'
186
+
187
+ registry = Carioca::Services::Registry.init :file => 'config/myservices.registry' :debug => true
188
+ proxy1 = registry.get_service :name => 'debug_myservice', :params => {:service => 'myservice'}
189
+ proxy1.test('titi')
190
+ ```
191
+
192
+
193
+ see the log /tmp/log.file :
194
+
195
+ ```
196
+ D, [2013-03-23T18:20:39.839826 #76641] DEBUG -- ProxyDebug: BEGIN CALL for mapped service myservice
197
+ D, [2013-03-23T18:20:39.839875 #76641] DEBUG -- ProxyDebug: called: test
198
+ D, [2013-03-23T18:20:39.839920 #76641] DEBUG -- ProxyDebug: args : titi
199
+ D, [2013-03-23T18:20:39.839970 #76641] DEBUG -- ProxyDebug: => returned: OK
200
+ D, [2013-03-23T18:20:39.840014 #76641] DEBUG -- ProxyDebug: END CALL
201
+ ```
202
+
203
+ #### Using Gem for a service
204
+
205
+
206
+ For exemple install uuid gem :
207
+
208
+ ```
209
+ $ gem ins uuid
210
+ ```
211
+
212
+ add to your YAML config config/myservices.registry :
213
+
214
+ ```yaml
215
+ uuid:
216
+ :type: :gem
217
+ :resource: uuid
218
+ :description: a Rubygems called uuid to build UUID ids.
219
+ :service: UUID
220
+ ```
221
+
222
+ in your app :
223
+
224
+ ```ruby
225
+ require 'rubygems'
226
+ require 'carioca'
227
+
228
+ registry = Carioca::Services::Registry.init :file => 'config/myservices.registry' :debug => true
229
+ uuid = registry.get_service :name => 'uuid'
230
+ uuid.generate
231
+ ```
232
+
233
+ == Copyright
234
+
235
+ <pre>carioca (c) 2012-2013 Romain GEORGES <romain@ultragreen.net> for Ultragreen Software </pre>
236
+
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = %q{carioca}
3
3
  s.author = "Romain GEORGES"
4
- s.version = "0.1"
4
+ s.version = "1.0"
5
5
  s.date = %q{2013-02-18}
6
6
  s.summary = %q{Carioca : Configuration Agent and Registry with Inversion Of Control for your Applications}
7
7
  s.email = %q{romain@ultragreen.net}
@@ -10,8 +10,8 @@ Gem::Specification.new do |s|
10
10
  s.has_rdoc = true
11
11
  s.files = Dir['*/*/*/*'] + Dir['*/*/*'] + Dir['*/*'] + Dir['*']
12
12
  s.bindir = nil
13
+ s.add_dependency('methodic', '>= 1.2')
13
14
  s.required_ruby_version = '>= 1.8.1'
14
- s.add_development_dependency "rspec", ">= 2.0.0"
15
15
  s.rdoc_options << '--title' << 'Carioca : Gem documentation' << '--main' << 'doc/manual.rdoc' << '--line-numbers'
16
16
  # << '--diagram'
17
17
  s.rubyforge_project = "nowarning"
@@ -3,8 +3,8 @@
3
3
  == Content
4
4
 
5
5
  Author:: Romain GEORGES <romain@ultragreen.net>
6
- Version:: 1.2
7
- WWW:: http://www.ultragreen.net/projects/methodic
6
+ Version:: 1.0
7
+ WWW:: http://www.ultragreen.net/projects/carioca
8
8
 
9
9
  == Description
10
10
 
@@ -25,9 +25,198 @@ In a valid Ruby environment :
25
25
  == Implementation
26
26
 
27
27
  * [Carioca]
28
+ * [Carioca::Services]
29
+ * [Carioca:Services::Registry]
28
30
 
31
+ == Utilisation
29
32
 
30
- == Example
33
+ Carioca may be used to create Ruby applications, based on a service registry
34
+ Carioca come with somes builtin services :
35
+ * logger : an Internal logger based on the logger gem.
36
+ * Configuration : a Configuration Service, with Yaml percistance, and pretty accessors.
37
+ * Debug : a Class Debugger, based on Proxy Design pattern and meta-programation like method_missing
38
+
39
+
40
+ === Getting start
41
+
42
+ ==== Preparing Gem
43
+
44
+ Just after Installation, Carioca :
45
+
46
+ $ gem ins bundler # if needed
47
+ $ bunlde gem myapp
48
+ $ cd myapp
49
+
50
+
51
+ Edit your myapp.gemspec, add this line in Gem::Specification bloc :
52
+
53
+ gem.add_dependency 'carioca'
54
+ gem.add_development_dependency 'rake'
55
+ gem.add_development_dependency 'carioca'
56
+
57
+ Description and summary need to be changed to be correctly displayed on Rubygems.
58
+
59
+ so, execute bundle :
60
+
61
+ $ bundle
62
+
63
+ Your environment, is ready to create your app
64
+
65
+ ==== Prepare Carioca
66
+
67
+
68
+ $ mkdir config
69
+ $ mkdir bin
70
+
71
+ edit bin/myapp :
72
+
73
+ require 'rubygems'
74
+ require 'carioca'
75
+
76
+ registry = Carioca::Services::Registry.init :file => 'config/myservices.registry'
77
+
78
+
79
+
80
+ After, you could Run Carioca and discover Builtins Services, you need the write access to config path
81
+
82
+
83
+
84
+ $ ruby -e 'require "rubygems"; require "carioca"; reg = Carioca::Services::Registry.init :file => "config/myservices.registry"; reg.discover_builtins; reg.save!'
85
+
86
+
87
+
88
+ this create you, a New Registry config, with all builtins registered.
89
+ Default path :
90
+ * config file : ./.config
91
+ * log file : /tmp/log.file
92
+ Carioca Registry is a Singleton, and services also be unique instance.
93
+
94
+ Now you could continue coding your bin/myapp
95
+
96
+ ==== Using Configuration Service
97
+
98
+
99
+ require 'rubygems'
100
+ require 'carioca'
101
+
102
+ registry = Carioca::Services::Registry.init :file => 'config/myservices.registry'
103
+ config = registry.start_service :name => 'configuration'
104
+ config.setings.db = { :name => 'mydb' }
105
+ config.settings.db.host = "myhost"
106
+ config.settings.db.port = "4545"
107
+ config.settings.email = "my@email.com"
108
+ config.save!
109
+
110
+
111
+ ==== Using Logger Service
112
+
113
+ logger is automatically loaded with Carioca, loading registry with :debug => true, let you see the Carioca traces.
114
+
115
+
116
+ require 'rubygems'
117
+ require 'carioca'
118
+
119
+ registry = Carioca::Services::Registry.init :file => 'config/myservices.registry' :debug => true
120
+ log = registry.get_service :name => 'logger'
121
+ log.info('myapp') {'my message' }
122
+
123
+
124
+ ==== Creating and using your own service
125
+
126
+ before create your own service :
127
+
128
+
129
+ $ mkdir services
130
+
131
+
132
+ Services, must be a class, if not do a wrapper
133
+ edit services/myservice.rb
134
+
135
+ class MyService
136
+ def initialize
137
+ end
138
+
139
+ def test(arg = nil)
140
+ return 'OK'
141
+ end
142
+ end
143
+ end
144
+
145
+
146
+ You could use the #service_register API (See spec for all details)
147
+ but, you could write it directly in YAML in your config/myservices.registry :
148
+ add the following lines :
149
+
150
+ ...
151
+ myservice:
152
+ :type: :file
153
+ :resource: services/myservice.rb
154
+ :description: a test service
155
+ :service: MyServices
156
+ ...
157
+
158
+ So in your app :
159
+
160
+
161
+ require 'rubygems'
162
+ require 'carioca'
163
+
164
+ registry = Carioca::Services::Registry.init :file => 'config/myservices.registry'
165
+ service = registry.start_service :name => 'myservice'
166
+ service.test('titi')
167
+
168
+
169
+
170
+ ==== Using Debug in multiple service instance
171
+
172
+
173
+ in your app, for debug you could use the Proxy Debug (you need to run Carioca Registry in debug mode ) :
174
+ (Using "debug_", you create an instance of service debug, so with this syntaxe you could create multiple services instances, with different parameters calling.)
175
+
176
+
177
+ require 'rubygems'
178
+ require 'carioca'
179
+
180
+ registry = Carioca::Services::Registry.init :file => 'config/myservices.registry' :debug => true
181
+ proxy1 = registry.get_service :name => 'debug_myservice', :params => {:service => 'myservice'}
182
+ proxy1.test('titi')
183
+
184
+
185
+
186
+ see the log /tmp/log.file :
187
+
188
+
189
+ D, [2013-03-23T18:20:39.839826 #76641] DEBUG -- ProxyDebug: BEGIN CALL for mapped service myservice
190
+ D, [2013-03-23T18:20:39.839875 #76641] DEBUG -- ProxyDebug: called: test
191
+ D, [2013-03-23T18:20:39.839920 #76641] DEBUG -- ProxyDebug: args : titi
192
+ D, [2013-03-23T18:20:39.839970 #76641] DEBUG -- ProxyDebug: => returned: OK
193
+ D, [2013-03-23T18:20:39.840014 #76641] DEBUG -- ProxyDebug: END CALL
194
+
195
+ ==== Using Gem for a service
196
+
197
+
198
+ For exemple install uuid gem :
199
+
200
+ $ gem ins uuid
201
+
202
+
203
+ add to your YAML config config/myservices.registry :
204
+
205
+ uuid:
206
+ :type: :gem
207
+ :resource: uuid
208
+ :description: a Rubygems called uuid to build UUID ids.
209
+ :service: UUID
210
+
211
+
212
+ in your app :
213
+
214
+ require 'rubygems'
215
+ require 'carioca'
216
+
217
+ registry = Carioca::Services::Registry.init :file => 'config/myservices.registry' :debug => true
218
+ uuid = registry.get_service :name => 'uuid'
219
+ uuid.generate
31
220
 
32
221
 
33
222
  == Copyright