Abstracting Services In Ruby C0 Coverage Information - RCov

lib/asir.rb

Name Total Lines Lines of Code Total Coverage Code Coverage
lib/asir.rb 242 18
100.00%
100.00%

Key

Code reported as executed by Ruby looks like this...and this: this line is also marked as covered.Lines considered as run by rcov, but not reported by Ruby, look like this,and this: these lines were inferred by rcov (using simple heuristics).Finally, here's a line marked as not executed.

Coverage Details

1 # !SLIDE
2 # Abstracting Services in Ruby
3 #
4 # * Kurt Stephens
5 # * Enova Financial
6 # * 2012/01/25
7 # * Slides -- "":http://kurtstephens.com/pub/ruby/abstracting_services_in_ruby/asir.slides/
8 # * Code -- "":http://kurtstephens.com/pub/ruby/abstracting_services_in_ruby/
9 # * Git -- "":http://github.com/kstephens/abstracting_services_in_ruby
10 # * Tools
11 # ** Riterate -- "":http://github.com/kstephens/riterate
12 # ** Scarlet -- "":http://github.com/kstephens/scarlet
13 #
14 # !SLIDE END
15 
16 # !SLIDE
17 # Issues
18 #
19 # * Problem Domain, Solution Domain
20 # * Service Middleware Semantics
21 # * Testing, Debugging, Diagnostics
22 # * Productivity
23 #
24 # !SLIDE END
25 
26 # !SLIDE
27 # Problem Domain, Solution Domain
28 #
29 # * Client knows too much about infrastructure.
30 # * Evaluating and switching infrastructures.
31 #
32 # !SLIDE END
33 
34 # !SLIDE
35 # Service Middleware Semantics
36 #
37 # * Directionality: One-way, Two-way
38 # * Synchronicity: Synchronous, Asynchronous, Delayed, Buffered
39 # * Distribution: Local Thread, Local Process, Distributed
40 # * Transport: File, IPC, Pipe, Network
41 # * Robustness: Retry, Replay, Fallback
42 # * Encoding: XML, JSON, YAML, Base64, Compression
43 #
44 # !SLIDE END
45 
46 # !SLIDE
47 # Testing, Debugging, Diagnostics
48 #
49 # * Configuration for testing and QA is more complex.
50 # * Measuring test coverage of remote services.
51 # * Debugging the root cause of remote service errors.
52 # * Diagnostic hooks.
53 #
54 # !SLIDE END
55 
56 # !SLIDE
57 # Objectives
58 #
59 # * Simplify service/client definitions and interfaces.
60 # * Anticipate new encoding, delivery and security requirements.
61 # * Separate encoding and transport concerns.
62 # * Composition over Configuration.
63 # * Elide deployment decisions.
64 # * Integrate diagnostics and logging.
65 # * Simplify testing.
66 #
67 # !SLIDE END
68 
69 # !SLIDE
70 # Foundations of Objects
71 #
72 # * Message
73 # * State
74 # * Behavior
75 
76 # !SLIDE
77 # Messaging
78 #
79 # * "Call a Method", "Call a Function" are all the same, in *all* languages.
80 # ** Decomposed lookup() and apply().
81 # * "Send Message", not "Call a Method".
82 # * Messaging abstracts:
83 # ** Object use from its implemenation.
84 # ** Transfer of control (method, function invocation).
85 
86 # !SLIDE
87 # REST
88 #
89 # "Roy Fielding - Architectural Styles and the Design of Network-based Software Architectures":http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm
90 #
91 # * Imperative Action .vs. Behavorial Resource
92 # * REST Connector .vs. REST Component
93 #
94 # !SLIDE END
95 
96 # !SLIDE
97 # Design
98 #
99 # * Nouns -> Objects -> Classes
100 # * Verbs -> Responsibilities -> Methods
101 #
102 # h3. Book: "Designing Object-Oriented Software"
103 #  * Wirfs-Brock, Wilkerson, Wiener
104 #
105 # !SLIDE END
106 
107 # !SLIDE
108 # Design: Nouns
109 #
110 # * Service -> Module
111 # * Client -> Just a Ruby caller
112 # * Proxy
113 # * Request -> Just a method call.
114 # * Response, Exception (two-way) -> Return value or else.
115 # * Transport -> (file, pipe, http, queue, ActiveResource)
116 # * Encoder, Decoder -> Coder (Marshal, XML, JSON, ActiveResource)
117 # * Logging
118 #
119 # !SLIDE END
120 
121 # !SLIDE
122 # Design: Verbs
123 #
124 # * Intercept Request -> Proxy
125 # * Invoke Request    -> Request
126 # * Invoke Exception
127 # * Send Request, Recieve Request -> Transport
128 # * Encode Object, Decode Object -> Coder
129 #
130 # !SLIDE END
131 
132 # !SLIDE
133 # Simple
134 #
135 # !PIC BEGIN
136 # 
137 # box "Client" "(CustomersController" "#send_invoice)"; arrow; 
138 # ellipse "Send" "Request" "(Ruby message)"; arrow; 
139 # box "Service" "(Email.send_email)";
140 #
141 # !PIC END
142 #
143 # !SLIDE END
144 
145 # !SLIDE
146 # Client-Side Request
147 #
148 # !PIC BEGIN
149 # box "Client"; arrow; 
150 # ellipse "Proxy"; arrow; 
151 # ellipse "Create" "Request"; arrow; 
152 # ellipse "Encode" "Request"; arrow; 
153 # ellipse "Send" "Request";
154 # line; down; arrow;
155 # !PIC END
156 #
157 # !SLIDE END
158 
159 # !SLIDE
160 # Server-Side
161 #
162 # !PIC BEGIN
163 # down; line; right; arrow; 
164 # ellipse "Receive" "Request"; arrow; 
165 # ellipse "Decode" "Request"; arrow; 
166 # ellipse "Request"; 
167 # line; down; arrow; 
168 # IR: ellipse "Invoke" "Request";
169 # right; move; move;
170 # Service: box "Service" with .w at IR.e + (movewid, 0); 
171 # arrow <-> from IR.e to Service.w;
172 # move to IR.s; down; line;
173 # left; arrow; 
174 # ellipse "Create" "Response"; arrow; 
175 # ellipse "Encode" "Response"; arrow;
176 # ellipse "Send" "Response"; 
177 # line; down; arrow
178 # !PIC END
179 #
180 # !SLIDE END
181 
182 # !SLIDE
183 # Client-Side Response
184 #
185 # !PIC BEGIN
186 # down; line; left; arrow;
187 # ellipse "Receive" "Response"; arrow; 
188 # ellipse "Decode" "Response"; arrow; 
189 # ellipse "Response"; arrow; 
190 # ellipse "Proxy"; arrow; 
191 # box "Client";
192 # !PIC END
193 #
194 # !SLIDE END
195 
196 # !SLIDE
197 # Implementation
198 #
199 # * Primary Base classes: Transport, Coder
200 # * Primary API: Proxy via Client mixix
201 # * Handful of mixins.
202 #
203 
204 # !SLIDE
205 # Modules and Classes
206 module ASIR
207   # Reusable constants to avoid unnecessary garbage.
208   EMPTY_ARRAY = [ ].freeze; EMPTY_HASH =  { }.freeze; EMPTY_STRING = ''.freeze
209   MODULE_SEP = '::'.freeze; IDENTITY_LAMBDA = lambda { | x | x }
210 
211 end
212 # !SLIDE END
213 
214 require 'asir/error'
215 require 'asir/log'
216 require 'asir/initialization'
217 require 'asir/additional_data'
218 require 'asir/object_resolving'
219 require 'asir/request_identity'
220 require 'asir/code_more'
221 require 'asir/request'
222 require 'asir/response'
223 require 'asir/client'
224 require 'asir/coder'
225 require 'asir/transport'
226 require 'asir/channel'
227 require 'asir/transport/local'
228 
229 # !SLIDE
230 # Synopsis
231 #
232 # * Services are easy to abstract away.
233 # * Separation of transport, encoding.
234 #
235 # !SLIDE END
236 #
237 # !SLIDE
238 # Appendix
239 #
240 #
241 # !SLIDE END
242 

Generated on Fri Jan 27 17:37:46 -0600 2012 with rcov 0.9.8