derailed-mole 1.0.10

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 (134) hide show
  1. data/History.txt +17 -0
  2. data/Manifest.txt +137 -0
  3. data/README.txt +216 -0
  4. data/Rakefile +46 -0
  5. data/bin/molify +64 -0
  6. data/config/database.yml +21 -0
  7. data/config/test_database.yml +69 -0
  8. data/lib/mole.rb +260 -0
  9. data/lib/mole/db/migrate.rb +90 -0
  10. data/lib/mole/e_mole.rb +75 -0
  11. data/lib/mole/e_mole_helper.rb +2 -0
  12. data/lib/mole/logger.rb +134 -0
  13. data/lib/mole/models/mole_feature.rb +58 -0
  14. data/lib/mole/models/mole_log.rb +31 -0
  15. data/lib/mole/module.rb +292 -0
  16. data/lib/mole/moler.rb +71 -0
  17. data/lib/mole/utils/frameworks.rb +53 -0
  18. data/lib/mole/version.rb +15 -0
  19. data/mole.gemspec +37 -0
  20. data/samples/merbapp/README +14 -0
  21. data/samples/merbapp/Rakefile +124 -0
  22. data/samples/merbapp/app/controllers/application.rb +3 -0
  23. data/samples/merbapp/app/controllers/exceptions.rb +13 -0
  24. data/samples/merbapp/app/controllers/moled.rb +25 -0
  25. data/samples/merbapp/app/helpers/global_helper.rb +5 -0
  26. data/samples/merbapp/app/mailers/views/layout/application.html.erb +1 -0
  27. data/samples/merbapp/app/mailers/views/layout/application.text.erb +1 -0
  28. data/samples/merbapp/app/parts/views/layout/application.html.erb +1 -0
  29. data/samples/merbapp/app/views/exceptions/internal_server_error.html.erb +216 -0
  30. data/samples/merbapp/app/views/exceptions/not_acceptable.html.erb +38 -0
  31. data/samples/merbapp/app/views/exceptions/not_found.html.erb +40 -0
  32. data/samples/merbapp/app/views/layout/application.html.erb +11 -0
  33. data/samples/merbapp/app/views/moled/index.html.erb +5 -0
  34. data/samples/merbapp/app/views/moled/result.html.erb +5 -0
  35. data/samples/merbapp/config/boot.rb +11 -0
  36. data/samples/merbapp/config/dependencies.rb +41 -0
  37. data/samples/merbapp/config/environments/development.rb +1 -0
  38. data/samples/merbapp/config/environments/production.rb +1 -0
  39. data/samples/merbapp/config/environments/test.rb +1 -0
  40. data/samples/merbapp/config/merb.yml +82 -0
  41. data/samples/merbapp/config/merb_init.rb +26 -0
  42. data/samples/merbapp/config/mole_config.rb +33 -0
  43. data/samples/merbapp/config/router.rb +38 -0
  44. data/samples/merbapp/config/upload.conf +0 -0
  45. data/samples/merbapp/public/images/merb.jpg +0 -0
  46. data/samples/merbapp/public/merb.fcgi +6 -0
  47. data/samples/merbapp/public/stylesheets/master.css +119 -0
  48. data/samples/merbapp/script/destroy +32 -0
  49. data/samples/merbapp/script/generate +32 -0
  50. data/samples/merbapp/script/stop_merb +13 -0
  51. data/samples/merbapp/spec/spec_helper.rb +15 -0
  52. data/samples/merbapp/test/test_helper.rb +14 -0
  53. data/samples/railsapp/README +14 -0
  54. data/samples/railsapp/Rakefile +10 -0
  55. data/samples/railsapp/app/controllers/application.rb +13 -0
  56. data/samples/railsapp/app/controllers/moled_controller.rb +24 -0
  57. data/samples/railsapp/app/helpers/application_helper.rb +3 -0
  58. data/samples/railsapp/app/views/moled/index.html.erb +5 -0
  59. data/samples/railsapp/app/views/moled/result.html.erb +5 -0
  60. data/samples/railsapp/config/boot.rb +109 -0
  61. data/samples/railsapp/config/database.yml +13 -0
  62. data/samples/railsapp/config/environment.rb +59 -0
  63. data/samples/railsapp/config/environments/development.rb +18 -0
  64. data/samples/railsapp/config/environments/production.rb +20 -0
  65. data/samples/railsapp/config/environments/test.rb +22 -0
  66. data/samples/railsapp/config/initializers/inflections.rb +10 -0
  67. data/samples/railsapp/config/initializers/mime_types.rb +5 -0
  68. data/samples/railsapp/config/initializers/mole.rb +10 -0
  69. data/samples/railsapp/config/moles/mole_config.rb +44 -0
  70. data/samples/railsapp/config/routes.rb +35 -0
  71. data/samples/railsapp/doc/README_FOR_APP +2 -0
  72. data/samples/railsapp/public/.htaccess +40 -0
  73. data/samples/railsapp/public/404.html +30 -0
  74. data/samples/railsapp/public/422.html +30 -0
  75. data/samples/railsapp/public/500.html +30 -0
  76. data/samples/railsapp/public/dispatch.cgi +10 -0
  77. data/samples/railsapp/public/dispatch.fcgi +24 -0
  78. data/samples/railsapp/public/dispatch.rb +10 -0
  79. data/samples/railsapp/public/favicon.ico +0 -0
  80. data/samples/railsapp/public/images/rails.png +0 -0
  81. data/samples/railsapp/public/javascripts/application.js +2 -0
  82. data/samples/railsapp/public/javascripts/controls.js +963 -0
  83. data/samples/railsapp/public/javascripts/dragdrop.js +972 -0
  84. data/samples/railsapp/public/javascripts/effects.js +1120 -0
  85. data/samples/railsapp/public/javascripts/prototype.js +4225 -0
  86. data/samples/railsapp/public/robots.txt +5 -0
  87. data/samples/railsapp/script/about +3 -0
  88. data/samples/railsapp/script/console +3 -0
  89. data/samples/railsapp/script/destroy +3 -0
  90. data/samples/railsapp/script/generate +3 -0
  91. data/samples/railsapp/script/performance/benchmarker +3 -0
  92. data/samples/railsapp/script/performance/profiler +3 -0
  93. data/samples/railsapp/script/performance/request +3 -0
  94. data/samples/railsapp/script/plugin +3 -0
  95. data/samples/railsapp/script/process/inspector +3 -0
  96. data/samples/railsapp/script/process/reaper +3 -0
  97. data/samples/railsapp/script/process/spawner +3 -0
  98. data/samples/railsapp/script/runner +3 -0
  99. data/samples/railsapp/script/server +3 -0
  100. data/samples/railsapp/test/test_helper.rb +38 -0
  101. data/samples/rubyapp/README +22 -0
  102. data/samples/rubyapp/bin/ruby_app +35 -0
  103. data/samples/rubyapp/config/mole_conf.rb +31 -0
  104. data/samples/rubyapp/lib/fred.rb +22 -0
  105. data/spec/config/auto_mole_config.rb +26 -0
  106. data/spec/config/mole_config.rb +0 -0
  107. data/spec/config/moles/fred_config.rb +0 -0
  108. data/spec/data/blee.rb +64 -0
  109. data/spec/db/migrate_spec.rb +19 -0
  110. data/spec/emole_spec.rb +43 -0
  111. data/spec/logger_spec.rb +56 -0
  112. data/spec/models/mole_feature_spec.rb +48 -0
  113. data/spec/models/mole_log_spec.rb +62 -0
  114. data/spec/module_spec.rb +229 -0
  115. data/spec/mole_spec.rb +135 -0
  116. data/spec/moler_spec.rb +77 -0
  117. data/spec/spec_helper.rb +76 -0
  118. data/spec/utils/framework_spec.rb +99 -0
  119. data/tasks/ann.rake +76 -0
  120. data/tasks/annotations.rake +22 -0
  121. data/tasks/doc.rake +48 -0
  122. data/tasks/gem.rake +110 -0
  123. data/tasks/manifest.rake +49 -0
  124. data/tasks/mole.rake +115 -0
  125. data/tasks/post_load.rake +26 -0
  126. data/tasks/rubyforge.rake +57 -0
  127. data/tasks/setup.rb +227 -0
  128. data/tasks/spec.rake +54 -0
  129. data/tasks/svn.rake +44 -0
  130. data/tasks/test.rake +38 -0
  131. data/templates/mole/e_mole/exception_alerts.rhtml +14 -0
  132. data/templates/mole/e_mole/feature_alerts.rhtml +11 -0
  133. data/templates/mole/e_mole/perf_alerts.rhtml +12 -0
  134. metadata +206 -0
data/History.txt ADDED
@@ -0,0 +1,17 @@
1
+ == 1.0.0 / 2008-02-04
2
+
3
+ * 1 Initial drop
4
+ * Converted from rails plugin into gem
5
+ * Retrofited to work with pure ruby, merb and rails env
6
+
7
+ == 1.0.1 / 2008-02-04
8
+
9
+ * 1 Documentation enhancements
10
+
11
+ == 1.0.2 / 2008-02-04
12
+
13
+ * 1 Added Snitch support
14
+
15
+ == 1.0.3 / 2008-02-05
16
+
17
+ * 1 Bug Fixes
data/Manifest.txt ADDED
@@ -0,0 +1,137 @@
1
+ History.txt
2
+ Manifest.txt
3
+ README.txt
4
+ Rakefile
5
+ bin/molify
6
+ config/database.yml
7
+ config/test_database.yml
8
+ lib/mole.rb
9
+ lib/mole/db/migrate.rb
10
+ lib/mole/e_mole.rb
11
+ lib/mole/e_mole_helper.rb
12
+ lib/mole/logger.rb
13
+ lib/mole/models/mole_feature.rb
14
+ lib/mole/models/mole_log.rb
15
+ lib/mole/module.rb
16
+ lib/mole/moler.rb
17
+ lib/mole/utils/frameworks.rb
18
+ lib/mole/version.rb
19
+ samples/merbapp/README
20
+ samples/merbapp/Rakefile
21
+ samples/merbapp/app/controllers/application.rb
22
+ samples/merbapp/app/controllers/exceptions.rb
23
+ samples/merbapp/app/controllers/moled.rb
24
+ samples/merbapp/app/helpers/global_helper.rb
25
+ samples/merbapp/app/mailers/views/layout/application.html.erb
26
+ samples/merbapp/app/mailers/views/layout/application.text.erb
27
+ samples/merbapp/app/parts/views/layout/application.html.erb
28
+ samples/merbapp/app/views/exceptions/internal_server_error.html.erb
29
+ samples/merbapp/app/views/exceptions/not_acceptable.html.erb
30
+ samples/merbapp/app/views/exceptions/not_found.html.erb
31
+ samples/merbapp/app/views/layout/application.html.erb
32
+ samples/merbapp/app/views/moled/index.html.erb
33
+ samples/merbapp/app/views/moled/result.html.erb
34
+ samples/merbapp/config/boot.rb
35
+ samples/merbapp/config/dependencies.rb
36
+ samples/merbapp/config/environments/development.rb
37
+ samples/merbapp/config/environments/production.rb
38
+ samples/merbapp/config/environments/test.rb
39
+ samples/merbapp/config/merb.yml
40
+ samples/merbapp/config/merb_init.rb
41
+ samples/merbapp/config/mole_config.rb
42
+ samples/merbapp/config/router.rb
43
+ samples/merbapp/config/upload.conf
44
+ samples/merbapp/log/merb.4000.pid
45
+ samples/merbapp/public/images/merb.jpg
46
+ samples/merbapp/public/merb.fcgi
47
+ samples/merbapp/public/stylesheets/master.css
48
+ samples/merbapp/script/destroy
49
+ samples/merbapp/script/generate
50
+ samples/merbapp/script/stop_merb
51
+ samples/merbapp/spec/spec_helper.rb
52
+ samples/merbapp/test/test_helper.rb
53
+ samples/railsapp/README
54
+ samples/railsapp/Rakefile
55
+ samples/railsapp/app/controllers/application.rb
56
+ samples/railsapp/app/controllers/moled_controller.rb
57
+ samples/railsapp/app/helpers/application_helper.rb
58
+ samples/railsapp/app/views/moled/index.html.erb
59
+ samples/railsapp/app/views/moled/result.html.erb
60
+ samples/railsapp/config/boot.rb
61
+ samples/railsapp/config/database.yml
62
+ samples/railsapp/config/environment.rb
63
+ samples/railsapp/config/environments/development.rb
64
+ samples/railsapp/config/environments/production.rb
65
+ samples/railsapp/config/environments/test.rb
66
+ samples/railsapp/config/initializers/inflections.rb
67
+ samples/railsapp/config/initializers/mime_types.rb
68
+ samples/railsapp/config/initializers/mole.rb
69
+ samples/railsapp/config/moles/mole_config.rb
70
+ samples/railsapp/config/routes.rb
71
+ samples/railsapp/doc/README_FOR_APP
72
+ samples/railsapp/log/development.log
73
+ samples/railsapp/log/production.log
74
+ samples/railsapp/log/server.log
75
+ samples/railsapp/log/test.log
76
+ samples/railsapp/public/.htaccess
77
+ samples/railsapp/public/404.html
78
+ samples/railsapp/public/422.html
79
+ samples/railsapp/public/500.html
80
+ samples/railsapp/public/dispatch.cgi
81
+ samples/railsapp/public/dispatch.fcgi
82
+ samples/railsapp/public/dispatch.rb
83
+ samples/railsapp/public/favicon.ico
84
+ samples/railsapp/public/images/rails.png
85
+ samples/railsapp/public/javascripts/application.js
86
+ samples/railsapp/public/javascripts/controls.js
87
+ samples/railsapp/public/javascripts/dragdrop.js
88
+ samples/railsapp/public/javascripts/effects.js
89
+ samples/railsapp/public/javascripts/prototype.js
90
+ samples/railsapp/public/robots.txt
91
+ samples/railsapp/script/about
92
+ samples/railsapp/script/console
93
+ samples/railsapp/script/destroy
94
+ samples/railsapp/script/generate
95
+ samples/railsapp/script/performance/benchmarker
96
+ samples/railsapp/script/performance/profiler
97
+ samples/railsapp/script/performance/request
98
+ samples/railsapp/script/plugin
99
+ samples/railsapp/script/process/inspector
100
+ samples/railsapp/script/process/reaper
101
+ samples/railsapp/script/process/spawner
102
+ samples/railsapp/script/runner
103
+ samples/railsapp/script/server
104
+ samples/railsapp/test/test_helper.rb
105
+ samples/rubyapp/README
106
+ samples/rubyapp/bin/ruby_app
107
+ samples/rubyapp/config/mole_conf.rb
108
+ samples/rubyapp/lib/fred.rb
109
+ spec/config/auto_mole_config.rb
110
+ spec/config/mole_config.rb
111
+ spec/config/moles/fred_config.rb
112
+ spec/data/blee.rb
113
+ spec/db/migrate_spec.rb
114
+ spec/emole_spec.rb
115
+ spec/logger_spec.rb
116
+ spec/models/mole_feature_spec.rb
117
+ spec/models/mole_log_spec.rb
118
+ spec/module_spec.rb
119
+ spec/mole_spec.rb
120
+ spec/moler_spec.rb
121
+ spec/spec_helper.rb
122
+ spec/utils/framework_spec.rb
123
+ tasks/ann.rake
124
+ tasks/annotations.rake
125
+ tasks/doc.rake
126
+ tasks/gem.rake
127
+ tasks/manifest.rake
128
+ tasks/mole.rake
129
+ tasks/post_load.rake
130
+ tasks/rubyforge.rake
131
+ tasks/setup.rb
132
+ tasks/spec.rake
133
+ tasks/svn.rake
134
+ tasks/test.rake
135
+ templates/mole/e_mole/exception_alerts.rhtml
136
+ templates/mole/e_mole/feature_alerts.rhtml
137
+ templates/mole/e_mole/perf_alerts.rhtml
data/README.txt ADDED
@@ -0,0 +1,216 @@
1
+ The MOle
2
+ by Fernand Galiana
3
+ liquidrail.com
4
+
5
+ == DESCRIPTION:
6
+
7
+ The MOle allows you to track user's interactions with your ruby application and closely monitors
8
+ how your customers are using your application. This is a must cheaper way than to hire a monitoring
9
+ service and produces much more detailed information on your application behavior and usage. To boot
10
+ your managers will love you !
11
+
12
+ Whether you are releasing a new application or improving on an old one, it is always a good thing
13
+ to know if anyone is using your application and if they are, how they are using it.
14
+ What features are your users most fond of and which features find their way into the abyss?
15
+ Using the MOle you'll be able to rapidly assess whether or not your application is a hit and if
16
+ your coolest features are thought as such by your users. You will be able to elegantly record user
17
+ interactions and leverage these findings for the next iteration of your application.
18
+
19
+ The MOle was initialy released as a Rails plugin, but we found the behavior usefull in other types
20
+ of projects such as Merb or straight up ruby applications, and decided to re-release it as a gem
21
+ instead.
22
+
23
+ == PROJECT INFORMATION
24
+
25
+ * Developer: Fernand Galiana [liquidrail.com]
26
+ * Forum: http://groups.google.com/group/mole-plugin
27
+ * Home: mole.rubyforge.org
28
+ * Svn: svn://rubyforge.org/var/svn/mole/mole/trunk
29
+ * Git: git://github.com/derailed/mole.git
30
+ * Snitch Svn: svn://rubyforge.org/var/svn/mole/snitch/trunk
31
+ * Examples: svn://rubyforge.org/var/svn/mole/samples
32
+
33
+ == FEATURES:
34
+
35
+ The MOle allows you to easily
36
+
37
+ * Trap method calls within your ruby application. You can use the MOle with either a straight ruby
38
+ application, Rails or Merb. The MOle allows you to inject aspects across various method calls.
39
+ You are in full control on how and where to trap the calls and the arguments you want to record.
40
+ 'Moled' methods are not limited to controller's actions, you can also mole any third party or library methods.
41
+
42
+ * Single configuration file. You won't have to sprinkle MOle code all over your application.
43
+ The MOle instructions reside in a single file easy to manage and maintain.
44
+
45
+ * Trap and surface uncaught exceptions in one easy call. The MOle will watch your execution stack
46
+ and alert you when an unexpected exception is encountered
47
+
48
+ * Trap and surface performance bottle neck in your ruby application in one easy call. You can
49
+ specify a performance threshold within the MOle configuration file. Any methods taking longer
50
+ than the specified threshold will trip an alert.
51
+
52
+ * You can record users interaction by either using the MOle is a transient or persistent mode.
53
+ In the persistent mode, users interactions will be recorded in your database. In the transient
54
+ case, MOle events will be recorded in your application logs.
55
+
56
+ == INSTALL:
57
+
58
+ * sudo gem install mole
59
+
60
+ == SYNOPSIS:
61
+
62
+ * The MOle can operate in 2 different modes: transient or persistent. The transient mode will
63
+ simply record MOle interactions within your log file. If you opt to use the
64
+ persistent mode (recommanded!) which will allow to leverage the Snitch Application
65
+ and also draw out MOle usage reports from you database, you will need to install the 2 MOle tables in your database.
66
+ This is achived via the 'molify' command. In order to 'MOle' an application using the persistent
67
+ mode, you will need to issue the following commands:
68
+
69
+ > cd my_non_moled_application
70
+ > molify --up --config config/database.yml --env test
71
+
72
+ This command will update your test database and create the MOle tables required when
73
+ the MOle is in a persistent mode. Namely, these tables are mole_features and mole_logs.
74
+
75
+ You can use molify --help to see usage information.
76
+
77
+ * Mole initialization. This must be specified during your application initialization code.
78
+ In a rails app, this can be set in you application controller class or environment.rb. In
79
+ a Merb app, this can be set in your merb_init.rb file.
80
+
81
+ require 'mole'
82
+ Mole.initialize( :moleable => true,
83
+ :application => "Smf",
84
+ :emole_from => "MoleBeatch@liquidrail.com",
85
+ :emole_recipients => ['fernand@liquidrail.com'],
86
+ :mode => :persistent,
87
+ :log_file => $stdout,
88
+ :log_level => :debug,
89
+ :perf_threshold => 2,
90
+ :mole_config => File.join( File.dirname(__FILE__), %w[mole.rb] ) )
91
+ # Load the MOle configuration file(s)
92
+ ::Mole.load_configuration
93
+
94
+ NOTE: The mole_config can either be a single ruby file or a directory containing multiple MOle
95
+ configuration files. Thanks to Ian Schreuder for the suggestion !
96
+
97
+ NOTE: For rails applications you can either put the MOle initialization code in a custom initializer
98
+ ie config/initializers/mole.rb or in your environment file (config/environments/production.rb).
99
+ You will need to make the load_configuration call in your application controller(application.rb) as follows:
100
+
101
+ ::Mole.load_mole_configuration rescue nil
102
+
103
+ In dev env, the MOle will reload the configuration so you can tweak your app on the fly. In production
104
+ env the MOle configuration will be loaded once.
105
+
106
+ * Now you'll need to create a mole.rb specification file to specify the various aspects you'll want
107
+ to inject. This file is specified in the initialize call via the :mole_config tag.
108
+
109
+ To trap a feature before or after it occurs you can use the mole_before/mole_after
110
+ interceptors. The following will mole the "Posts" class after the "show" method is called.
111
+ The context argument hands you an execution context. In a rails/merb environment
112
+ this will be your controller object. You can handle this interaction any way
113
+ you want. The MOle provides a convenience class to record this interaction via
114
+ the database or the MOle logger in the guise of Mole::Moler. But you can also log it to
115
+ any media you'll find suitable. In a rails/merb context, you'll be able to extract session/params information
116
+ as in this case.
117
+
118
+ Posts.mole_after( :feature => :show ) { |context, feature, ret, block, *args|
119
+ # Records the interaction to the database
120
+ Mole::Moler.mole_it( context, feature,
121
+ context.session[:user_id], # Retrieves which user performed this action
122
+ :post_id=> context.params[:post_id], # Records request parameter post id
123
+ :url => context.instance_variable_get( "@url" ) ) # Retrieves controller state
124
+ end
125
+ }
126
+
127
+ To record performance issues, you will need to provide a collection of
128
+ methods that must be watched on a given class. In the case of rails or merb you can easily fetch the list
129
+ of actions from the controller api and pass it to the MOle. The MOle provides convenience
130
+ classes to log the perf issues to your database and send out alerts when a perf condition is met.
131
+ Upon invocation, you will be handed a calling context, that comprises the feature (method) being
132
+ called, the actual time it took to complete the call and any args/block that was passed into
133
+ the feature that causes the performance threshold to be triggered. Setting the :email option
134
+ to true will also send out an email alert.
135
+
136
+ Posts.mole_perf( :features => merb_actions ) do |context, feature, elapsed_time, ret, block, *args|
137
+ user = context.instance_variable_get( "@user" )
138
+ key = context.params[:key], "N/A"
139
+ request = context.request.nil? ? "N/A" : context.request.remote_ip,
140
+ Mole::Moler.perf_it( context, user.id,
141
+ :controller => context.class.name,
142
+ :feature => feature,
143
+ :key => key,
144
+ :request => request,
145
+ :user => user.user_name,
146
+ :elapsed_time => "%3.3f" % elapsed_time,
147
+ :email => true )
148
+ end
149
+
150
+ The unchecked exception trap works very similarly to the mole_perf trap. It will pass in
151
+ the context of the method that triggered the exception.
152
+
153
+ Posts.mole_unchecked( :features => merb_actions ) do |context, action, boom, block, *args|
154
+ sub = context.instance_variable_get("@sub")
155
+ user_id = "N/A"
156
+ user_id = sub.user.id if sub and sub.user
157
+ Mole::Moler.check_it( context, user_id,
158
+ :controller => context.class.name,
159
+ :action => action,
160
+ :boom => boom,
161
+ :email => true )
162
+ end
163
+
164
+ == Snitch
165
+
166
+ To view MOle interaction simply, we've created the "Snitch" a rails console application that
167
+ allows you to see the results of your MOled application. The Snitch is a Rails 2.0 application.
168
+ It is available at http://mole.rubyforge.org/svn/snitch/trunk/.
169
+
170
+ In order to start using the Snitch you will have to perform the following steps:
171
+
172
+ * Download the Snitch
173
+ svn co http://mole.rubyforge.org/svn/snitch/trunk/
174
+
175
+ * The Snitch needs to access your user table to provide user related log information. So
176
+ you will need to run the following rake task and provide your users table description.
177
+
178
+ > rake setup
179
+
180
+ * Edit the Snitch database.yml to point to your application database.
181
+
182
+ * Out of the box the Snitch will monitor and application named "Default". You will want
183
+ to match the application name that you've used in the Mole.initialize call. So you
184
+ should now be able to specify the following commands:
185
+
186
+ > script/server
187
+
188
+ Then in your browser
189
+
190
+ http://localhost:3000?app_name=my_moled_application_name
191
+
192
+ * NOTE: You will keep enhancing the Snitch to provide capistrano deployment scripts,
193
+ auto application name detection and many other enhancements...
194
+
195
+ == LICENSE:
196
+
197
+ MIT Copyright (c) 2008
198
+
199
+ Permission is hereby granted, free of charge, to any person obtaining
200
+ a copy of this software and associated documentation files (the
201
+ 'Software'), to deal in the Software without restriction, including
202
+ without limitation the rights to use, copy, modify, merge, publish,
203
+ distribute, sublicense, and/or sell copies of the Software, and to
204
+ permit persons to whom the Software is furnished to do so, subject to
205
+ the following conditions:
206
+
207
+ The above copyright notice and this permission notice shall be
208
+ included in all copies or substantial portions of the Software.
209
+
210
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
211
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
212
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
213
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
214
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
215
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
216
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,46 @@
1
+ # Look in the tasks/setup.rb file for the various options that can be
2
+ # configured in this Rakefile. The .rake files in the tasks directory
3
+ # are where the options are used.
4
+
5
+ load 'tasks/setup.rb'
6
+
7
+ ensure_in_path 'lib'
8
+ require 'mole'
9
+ require 'mole/version'
10
+
11
+ task :default => 'spec:run'
12
+
13
+ PROJ.name = 'mole'
14
+ PROJ.authors = 'Fernand Galiana'
15
+ PROJ.email = 'fernand@liquidrail.com'
16
+ PROJ.url = 'http://mole.rubyforge.org'
17
+ PROJ.rubyforge_name = 'mole'
18
+ PROJ.description = "A flexible way to track user's interactions within your ruby web applications"
19
+ PROJ.spec_opts << '--color'
20
+ PROJ.rcov_dir = ENV['CC_BUILD_ARTIFACTS'] ? "#{ENV['CC_BUILD_ARTIFACTS']}/test_coverage" : 'coverage'
21
+ PROJ.rdoc_dir = ENV['CC_BUILD_ARTIFACTS'] ? "#{ENV['CC_BUILD_ARTIFACTS']}/api_docs" : 'docs'
22
+ PROJ.ruby_opts = %w[-W0]
23
+ PROJ.version = ::Mole::Version.version
24
+ PROJ.svn = 'mole'
25
+ PROJ.rcov_threshold = 90.0
26
+ PROJ.executables = ['molify']
27
+
28
+ PROJ.exclude << %w[.DS_Store$ .swo$ .swp$]
29
+ PROJ.tests = FileList['test/**/test_*.rb']
30
+ PROJ.annotation_tags << 'BOZO'
31
+
32
+ desc "Clean up artifact directories"
33
+ task :clean do
34
+ rcov_artifacts = File.join( File.dirname( __FILE__ ), "coverage" )
35
+ FileUtils.rm_rf rcov_artifacts if File.exists? rcov_artifacts
36
+ rdoc_artifacts = File.join( File.dirname( __FILE__ ), "docs" )
37
+ FileUtils.rm_rf rdoc_artifacts if File.exists? rdoc_artifacts
38
+ gem_artifacts = File.join( File.dirname( __FILE__ ), "pkg" )
39
+ FileUtils.rm_rf gem_artifacts if File.exists? gem_artifacts
40
+ end
41
+
42
+ task 'gem:package' => 'manifest:assert'
43
+
44
+
45
+ depend_on "logging" , "= 0.9.0"
46
+ depend_on "activerecord", "= 2.0.2"
data/bin/molify ADDED
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/env ruby
2
+ require 'optparse'
3
+
4
+ require File.expand_path(
5
+ File.join(File.dirname(__FILE__), '..', 'lib', 'mole') )
6
+
7
+ require 'mole/db/migrate'
8
+
9
+ module Mole
10
+ class Molify
11
+ # Performs db migration when the MOle is to be used in a persistent mode.
12
+ def initialize( argv=ARGV )
13
+ option_parser = default_option_parser
14
+ option_parser.parse!(argv)
15
+ puts options.inspect
16
+ ::Mole::Db::Migrate.new( options ).apply
17
+ end
18
+
19
+ # access the options
20
+ def options #:nodoc:
21
+ if not @options then
22
+ @options = OpenStruct.new
23
+ # Unless specified attempt to lookup config/database.yml
24
+ @options.configuration = File.join( Dir.pwd, %w[config database.yml] )
25
+ # Unless specified assumes test env
26
+ @options.environment = "test"
27
+ # Unless specficied migrates up
28
+ @options.direction = :up
29
+ end
30
+ return @options
31
+ end
32
+
33
+ def default_option_parser #:nodoc:
34
+ OptionParser.new do |op|
35
+ op.separator ""
36
+ op.separator "Molify options"
37
+
38
+ op.on( "-c", "--config FILE", "The location of the database configuration file." ) do |db|
39
+ options.configuration = db
40
+ end
41
+
42
+ op.on("-e", "--env ENV", "The environment to run in." ) do |env|
43
+ options.environment = env
44
+ end
45
+
46
+ op.on("-u", "--up", "Install MOle related tables") do |dir|
47
+ options.direction= :up
48
+ end
49
+
50
+ op.on("-d", "--down", "Uninstall MOle related tables") do |dir|
51
+ options.direction= :down
52
+ end
53
+
54
+ op.separator ""
55
+ end
56
+ end
57
+ end
58
+ end
59
+
60
+ Mole::Molify.new(ARGV)
61
+
62
+
63
+
64
+