polisher 0.1 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. data/COPYING +8 -0
  2. data/LICENSE +661 -0
  3. data/README.rdoc +25 -0
  4. data/Rakefile +92 -0
  5. data/TODO +6 -0
  6. data/bin/server +3 -0
  7. data/config/database.yml +8 -43
  8. data/config/polisher.yml +15 -5
  9. data/config.ru +25 -0
  10. data/db/connection.rb +49 -0
  11. data/db/migrations/001_create_sources.rb +27 -0
  12. data/db/migrations/002_create_managed_gems.rb +24 -0
  13. data/db/migrations/003_create_events.rb +27 -0
  14. data/db/models/event.rb +61 -0
  15. data/db/models/managed_gem.rb +111 -0
  16. data/db/models/source.rb +35 -0
  17. data/lib/common.rb +39 -0
  18. data/lib/event_handlers.rb +100 -0
  19. data/lib/sinatra/url_for.rb +40 -0
  20. data/polisher.rb +120 -0
  21. data/public/javascripts/polisher.js +15 -0
  22. data/public/stylesheets/style.css +18 -3
  23. data/spec/event_handlers_spec.rb +164 -0
  24. data/spec/models_spec.rb +193 -0
  25. data/spec/polisher_spec.rb +133 -0
  26. data/spec/spec_helper.rb +44 -0
  27. data/views/gems/index.haml +106 -0
  28. data/views/layout.haml +24 -0
  29. data/views/sources/index.haml +41 -0
  30. metadata +36 -93
  31. data/README +0 -243
  32. data/app/controllers/application_controller.rb +0 -12
  33. data/app/controllers/callback_controller.rb +0 -47
  34. data/app/controllers/manage_controller.rb +0 -112
  35. data/app/helpers/application_helper.rb +0 -3
  36. data/app/models/artifact.rb +0 -21
  37. data/app/models/event_handler.rb +0 -61
  38. data/app/models/gem_search_criteria.rb +0 -24
  39. data/app/models/gem_source.rb +0 -43
  40. data/app/models/managed_gem.rb +0 -47
  41. data/app/views/callback/gem_updated.rhtml +0 -0
  42. data/app/views/layouts/_header.rhtml +0 -8
  43. data/app/views/layouts/index.rhtml +0 -27
  44. data/app/views/manage/create_event_handler.rhtml +0 -15
  45. data/app/views/manage/create_gem.rhtml +0 -15
  46. data/app/views/manage/create_gem_source.rhtml +0 -15
  47. data/app/views/manage/delete_event_handler.rhtml +0 -15
  48. data/app/views/manage/delete_gem.rhtml +0 -15
  49. data/app/views/manage/delete_gem_source.rhtml +0 -15
  50. data/app/views/manage/list.rhtml +0 -66
  51. data/app/views/manage/new_event_handler.rhtml +0 -38
  52. data/app/views/manage/new_gem.rhtml +0 -21
  53. data/app/views/manage/new_gem_search_criteria.rhtml +0 -3
  54. data/app/views/manage/new_gem_source.rhtml +0 -10
  55. data/config/boot.rb +0 -110
  56. data/config/environment.rb +0 -44
  57. data/config/environments/development.rb +0 -17
  58. data/config/environments/production.rb +0 -28
  59. data/config/environments/test.rb +0 -28
  60. data/config/initializers/backtrace_silencers.rb +0 -7
  61. data/config/initializers/inflections.rb +0 -10
  62. data/config/initializers/mime_types.rb +0 -5
  63. data/config/initializers/new_rails_defaults.rb +0 -21
  64. data/config/initializers/session_store.rb +0 -15
  65. data/config/locales/en.yml +0 -5
  66. data/config/routes.rb +0 -44
  67. data/db/migrate/001_create_gem_sources.rb +0 -34
  68. data/db/migrate/002_create_managed_gems.rb +0 -32
  69. data/db/migrate/003_create_gem_search_criterias.rb +0 -33
  70. data/db/migrate/004_create_event_handlers.rb +0 -32
  71. data/db/migrate/005_create_artifacts.rb +0 -32
  72. data/db/schema.rb +0 -42
  73. data/db/seeds.rb +0 -7
  74. data/lib/email_adapter.rb +0 -46
  75. data/lib/gem2rpm.rb +0 -189
  76. data/lib/gem_api_adapter.rb +0 -87
  77. data/lib/rpm_adapter.rb +0 -39
  78. data/public/404.html +0 -30
  79. data/public/422.html +0 -30
  80. data/public/500.html +0 -30
  81. data/public/dispatch.cgi +0 -10
  82. data/public/dispatch.fcgi +0 -24
  83. data/public/dispatch.rb +0 -29
  84. data/public/favicon.ico +0 -0
  85. data/public/images/rails.png +0 -0
  86. data/public/javascripts/application.js +0 -2
  87. data/public/javascripts/controls.js +0 -963
  88. data/public/javascripts/dragdrop.js +0 -973
  89. data/public/javascripts/effects.js +0 -1128
  90. data/public/javascripts/prototype.js +0 -4320
  91. data/public/robots.txt +0 -5
  92. data/script/about +0 -4
  93. data/script/console +0 -3
  94. data/script/dbconsole +0 -3
  95. data/script/destroy +0 -3
  96. data/script/generate +0 -3
  97. data/script/performance/benchmarker +0 -3
  98. data/script/performance/profiler +0 -3
  99. data/script/plugin +0 -3
  100. data/script/runner +0 -3
  101. data/script/server +0 -3
  102. data/tmp/gems/README +0 -1
  103. data/tmp/rpms/README +0 -1
data/README DELETED
@@ -1,243 +0,0 @@
1
- == Welcome to Rails
2
-
3
- Rails is a web-application framework that includes everything needed to create
4
- database-backed web applications according to the Model-View-Control pattern.
5
-
6
- This pattern splits the view (also called the presentation) into "dumb" templates
7
- that are primarily responsible for inserting pre-built data in between HTML tags.
8
- The model contains the "smart" domain objects (such as Account, Product, Person,
9
- Post) that holds all the business logic and knows how to persist themselves to
10
- a database. The controller handles the incoming requests (such as Save New Account,
11
- Update Product, Show Post) by manipulating the model and directing data to the view.
12
-
13
- In Rails, the model is handled by what's called an object-relational mapping
14
- layer entitled Active Record. This layer allows you to present the data from
15
- database rows as objects and embellish these data objects with business logic
16
- methods. You can read more about Active Record in
17
- link:files/vendor/rails/activerecord/README.html.
18
-
19
- The controller and view are handled by the Action Pack, which handles both
20
- layers by its two parts: Action View and Action Controller. These two layers
21
- are bundled in a single package due to their heavy interdependence. This is
22
- unlike the relationship between the Active Record and Action Pack that is much
23
- more separate. Each of these packages can be used independently outside of
24
- Rails. You can read more about Action Pack in
25
- link:files/vendor/rails/actionpack/README.html.
26
-
27
-
28
- == Getting Started
29
-
30
- 1. At the command prompt, start a new Rails application using the <tt>rails</tt> command
31
- and your application name. Ex: rails myapp
32
- 2. Change directory into myapp and start the web server: <tt>script/server</tt> (run with --help for options)
33
- 3. Go to http://localhost:3000/ and get "Welcome aboard: You're riding the Rails!"
34
- 4. Follow the guidelines to start developing your application
35
-
36
-
37
- == Web Servers
38
-
39
- By default, Rails will try to use Mongrel if it's are installed when started with script/server, otherwise Rails will use WEBrick, the webserver that ships with Ruby. But you can also use Rails
40
- with a variety of other web servers.
41
-
42
- Mongrel is a Ruby-based webserver with a C component (which requires compilation) that is
43
- suitable for development and deployment of Rails applications. If you have Ruby Gems installed,
44
- getting up and running with mongrel is as easy as: <tt>gem install mongrel</tt>.
45
- More info at: http://mongrel.rubyforge.org
46
-
47
- Say other Ruby web servers like Thin and Ebb or regular web servers like Apache or LiteSpeed or
48
- Lighttpd or IIS. The Ruby web servers are run through Rack and the latter can either be setup to use
49
- FCGI or proxy to a pack of Mongrels/Thin/Ebb servers.
50
-
51
- == Apache .htaccess example for FCGI/CGI
52
-
53
- # General Apache options
54
- AddHandler fastcgi-script .fcgi
55
- AddHandler cgi-script .cgi
56
- Options +FollowSymLinks +ExecCGI
57
-
58
- # If you don't want Rails to look in certain directories,
59
- # use the following rewrite rules so that Apache won't rewrite certain requests
60
- #
61
- # Example:
62
- # RewriteCond %{REQUEST_URI} ^/notrails.*
63
- # RewriteRule .* - [L]
64
-
65
- # Redirect all requests not available on the filesystem to Rails
66
- # By default the cgi dispatcher is used which is very slow
67
- #
68
- # For better performance replace the dispatcher with the fastcgi one
69
- #
70
- # Example:
71
- # RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
72
- RewriteEngine On
73
-
74
- # If your Rails application is accessed via an Alias directive,
75
- # then you MUST also set the RewriteBase in this htaccess file.
76
- #
77
- # Example:
78
- # Alias /myrailsapp /path/to/myrailsapp/public
79
- # RewriteBase /myrailsapp
80
-
81
- RewriteRule ^$ index.html [QSA]
82
- RewriteRule ^([^.]+)$ $1.html [QSA]
83
- RewriteCond %{REQUEST_FILENAME} !-f
84
- RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
85
-
86
- # In case Rails experiences terminal errors
87
- # Instead of displaying this message you can supply a file here which will be rendered instead
88
- #
89
- # Example:
90
- # ErrorDocument 500 /500.html
91
-
92
- ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly"
93
-
94
-
95
- == Debugging Rails
96
-
97
- Sometimes your application goes wrong. Fortunately there are a lot of tools that
98
- will help you debug it and get it back on the rails.
99
-
100
- First area to check is the application log files. Have "tail -f" commands running
101
- on the server.log and development.log. Rails will automatically display debugging
102
- and runtime information to these files. Debugging info will also be shown in the
103
- browser on requests from 127.0.0.1.
104
-
105
- You can also log your own messages directly into the log file from your code using
106
- the Ruby logger class from inside your controllers. Example:
107
-
108
- class WeblogController < ActionController::Base
109
- def destroy
110
- @weblog = Weblog.find(params[:id])
111
- @weblog.destroy
112
- logger.info("#{Time.now} Destroyed Weblog ID ##{@weblog.id}!")
113
- end
114
- end
115
-
116
- The result will be a message in your log file along the lines of:
117
-
118
- Mon Oct 08 14:22:29 +1000 2007 Destroyed Weblog ID #1
119
-
120
- More information on how to use the logger is at http://www.ruby-doc.org/core/
121
-
122
- Also, Ruby documentation can be found at http://www.ruby-lang.org/ including:
123
-
124
- * The Learning Ruby (Pickaxe) Book: http://www.ruby-doc.org/docs/ProgrammingRuby/
125
- * Learn to Program: http://pine.fm/LearnToProgram/ (a beginners guide)
126
-
127
- These two online (and free) books will bring you up to speed on the Ruby language
128
- and also on programming in general.
129
-
130
-
131
- == Debugger
132
-
133
- Debugger support is available through the debugger command when you start your Mongrel or
134
- Webrick server with --debugger. This means that you can break out of execution at any point
135
- in the code, investigate and change the model, AND then resume execution!
136
- You need to install ruby-debug to run the server in debugging mode. With gems, use 'gem install ruby-debug'
137
- Example:
138
-
139
- class WeblogController < ActionController::Base
140
- def index
141
- @posts = Post.find(:all)
142
- debugger
143
- end
144
- end
145
-
146
- So the controller will accept the action, run the first line, then present you
147
- with a IRB prompt in the server window. Here you can do things like:
148
-
149
- >> @posts.inspect
150
- => "[#<Post:0x14a6be8 @attributes={\"title\"=>nil, \"body\"=>nil, \"id\"=>\"1\"}>,
151
- #<Post:0x14a6620 @attributes={\"title\"=>\"Rails you know!\", \"body\"=>\"Only ten..\", \"id\"=>\"2\"}>]"
152
- >> @posts.first.title = "hello from a debugger"
153
- => "hello from a debugger"
154
-
155
- ...and even better is that you can examine how your runtime objects actually work:
156
-
157
- >> f = @posts.first
158
- => #<Post:0x13630c4 @attributes={"title"=>nil, "body"=>nil, "id"=>"1"}>
159
- >> f.
160
- Display all 152 possibilities? (y or n)
161
-
162
- Finally, when you're ready to resume execution, you enter "cont"
163
-
164
-
165
- == Console
166
-
167
- You can interact with the domain model by starting the console through <tt>script/console</tt>.
168
- Here you'll have all parts of the application configured, just like it is when the
169
- application is running. You can inspect domain models, change values, and save to the
170
- database. Starting the script without arguments will launch it in the development environment.
171
- Passing an argument will specify a different environment, like <tt>script/console production</tt>.
172
-
173
- To reload your controllers and models after launching the console run <tt>reload!</tt>
174
-
175
- == dbconsole
176
-
177
- You can go to the command line of your database directly through <tt>script/dbconsole</tt>.
178
- You would be connected to the database with the credentials defined in database.yml.
179
- Starting the script without arguments will connect you to the development database. Passing an
180
- argument will connect you to a different database, like <tt>script/dbconsole production</tt>.
181
- Currently works for mysql, postgresql and sqlite.
182
-
183
- == Description of Contents
184
-
185
- app
186
- Holds all the code that's specific to this particular application.
187
-
188
- app/controllers
189
- Holds controllers that should be named like weblogs_controller.rb for
190
- automated URL mapping. All controllers should descend from ApplicationController
191
- which itself descends from ActionController::Base.
192
-
193
- app/models
194
- Holds models that should be named like post.rb.
195
- Most models will descend from ActiveRecord::Base.
196
-
197
- app/views
198
- Holds the template files for the view that should be named like
199
- weblogs/index.html.erb for the WeblogsController#index action. All views use eRuby
200
- syntax.
201
-
202
- app/views/layouts
203
- Holds the template files for layouts to be used with views. This models the common
204
- header/footer method of wrapping views. In your views, define a layout using the
205
- <tt>layout :default</tt> and create a file named default.html.erb. Inside default.html.erb,
206
- call <% yield %> to render the view using this layout.
207
-
208
- app/helpers
209
- Holds view helpers that should be named like weblogs_helper.rb. These are generated
210
- for you automatically when using script/generate for controllers. Helpers can be used to
211
- wrap functionality for your views into methods.
212
-
213
- config
214
- Configuration files for the Rails environment, the routing map, the database, and other dependencies.
215
-
216
- db
217
- Contains the database schema in schema.rb. db/migrate contains all
218
- the sequence of Migrations for your schema.
219
-
220
- doc
221
- This directory is where your application documentation will be stored when generated
222
- using <tt>rake doc:app</tt>
223
-
224
- lib
225
- Application specific libraries. Basically, any kind of custom code that doesn't
226
- belong under controllers, models, or helpers. This directory is in the load path.
227
-
228
- public
229
- The directory available for the web server. Contains subdirectories for images, stylesheets,
230
- and javascripts. Also contains the dispatchers and the default HTML files. This should be
231
- set as the DOCUMENT_ROOT of your web server.
232
-
233
- script
234
- Helper scripts for automation and generation.
235
-
236
- test
237
- Unit and functional tests along with fixtures. When using the script/generate scripts, template
238
- test files will be generated for you and placed in this directory.
239
-
240
- vendor
241
- External libraries that the application depends on. Also includes the plugins subdirectory.
242
- If the app has frozen rails, those gems also go here, under vendor/rails/.
243
- This directory is in the load path.
@@ -1,12 +0,0 @@
1
- # Filters added to this controller apply to all controllers in the application.
2
- # Likewise, all the methods added will be available for all controllers.
3
-
4
- class ApplicationController < ActionController::Base
5
- helper :all # include all helpers, all the time
6
- #protect_from_forgery # See ActionController::RequestForgeryProtection for details
7
- protect_from_forgery :only => [:create, :update, :destroy]
8
- layout "index"
9
-
10
- # Scrub sensitive parameters from your log
11
- # filter_parameter_logging :password
12
- end
@@ -1,47 +0,0 @@
1
- #
2
- # Copyright (C) 2010 Red Hat, Inc.
3
- # Written by Mohammed Morsi <mmorsi@redhat.com>
4
- #
5
- # This program is free software; you can redistribute it and/or modify
6
- # it under the terms of the GNU General Public License as published by
7
- # the Free Software Foundation; version 2 of the License.
8
- #
9
- # This program is distributed in the hope that it will be useful,
10
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
- # GNU General Public License for more details.
13
- #
14
- # You should have received a copy of the GNU General Public License
15
- # along with this program; if not, write to the Free Software
16
- # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
17
- # MA 02110-1301, USA. A copy of the GNU General Public License is
18
- # also available at http://www.gnu.org/copyleft/gpl.html.
19
-
20
- # Currently handles gemcutter api callback invocations
21
- class CallbackController < ApplicationController
22
- layout nil
23
-
24
- # invoked when a gem is updated on a remote source
25
- def gem_updated
26
- name = params[:name]
27
- # XXX bit of a dirty hack needed as this is the only way to get source_uri
28
- source_uri = GemApiAdapter.gem_to_source_uri(params[:gem_uri])
29
- logger.info ">> gem #{name} hosted at #{source_uri} has been updated"
30
-
31
- # find the managed gem which was updated, invoke gem_updated event handlers
32
- gem_source = GemSource.find(:first, :conditions => ["uri = ?", source_uri])
33
- gem = gem_source.gems.all.find { |gem| gem.name == name }
34
- logger.info ">> found corresponding managed gem #{gem.name}"
35
-
36
- # update gem attributes
37
- gem_data = GemApiAdapter.gem_info :api_uri => gem_source.uri,
38
- :gem_name => gem.name,
39
- :logger => logger
40
- gem.version = gem_data["version"]
41
- gem.save!
42
-
43
- gem.event_handlers.find_all { |eh| eh.event == "gem_updated" }.each { |eh|
44
- eh.run
45
- }
46
- end
47
- end
@@ -1,112 +0,0 @@
1
- #
2
- # Copyright (C) 2010 Red Hat, Inc.
3
- # Written by Mohammed Morsi <mmorsi@redhat.com>
4
- #
5
- # This program is free software; you can redistribute it and/or modify
6
- # it under the terms of the GNU General Public License as published by
7
- # the Free Software Foundation; version 2 of the License.
8
- #
9
- # This program is distributed in the hope that it will be useful,
10
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
- # GNU General Public License for more details.
13
- #
14
- # You should have received a copy of the GNU General Public License
15
- # along with this program; if not, write to the Free Software
16
- # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
17
- # MA 02110-1301, USA. A copy of the GNU General Public License is
18
- # also available at http://www.gnu.org/copyleft/gpl.html.
19
-
20
- # Currently handles all user based actions, including CRUDing
21
- # the user controlled model entities / fields
22
- class ManageController < ApplicationController
23
- def list
24
- @gem_sources = GemSource.find :all
25
- end
26
-
27
- ############################ gem sources
28
-
29
- def new_gem_source
30
- end
31
-
32
- def create_gem_source
33
- name = params[:name]
34
- uri = params[:uri]
35
- @gem_source = GemSource.new :name => name, :uri => uri
36
- @error = nil
37
- @gem_source.save!
38
- rescue Exception => e
39
- @error = e
40
- end
41
-
42
- def delete_gem_source
43
- id = params[:id]
44
- @name = GemSource.find(id).name
45
- GemSource.delete id
46
- @error = nil
47
- end
48
-
49
- ############################ managed gems
50
-
51
- def new_gem
52
- @gem_source_id = params[:gem_source_id]
53
- @gem_sources = GemSource.find :all
54
- end
55
-
56
- def create_gem
57
- gem_source_id = params[:gem_source_id]
58
- name = params[:name]
59
- version = params[:version]
60
- @gem = ManagedGem.new :name => name, :version => version, :gem_source_id => gem_source_id
61
- @error = nil
62
-
63
- # save gem / subscribe to updates
64
- # FIXME these two steps should be in a transaction
65
- @gem.save!
66
- @gem.subscribe :callback_url => url_for(:controller => :callback, :action => :gem_updated)
67
- rescue Exception => e
68
- @error = e
69
- end
70
-
71
- def delete_gem
72
- id = params[:id]
73
- @name = ManagedGem.find(id).name
74
- ManagedGem.delete id
75
- @error = nil
76
- end
77
-
78
- ############################ gem search criterias
79
-
80
- def new_gem_search_criteria
81
- @gem_source_id = params[:gem_source_id]
82
- @gem_sources = GemSource.find :all
83
- end
84
-
85
- ############################ event handlers
86
-
87
- def new_event_handler
88
- @gem_id = params[:gem_id]
89
- @gems = ManagedGem.find :all
90
- @events = EventHandler::EVENTS
91
- @handlers = EventHandler::HANDLERS
92
- end
93
-
94
- def create_event_handler
95
- gem_id = params[:gem_id]
96
- event = params[:event]
97
- handler = params[:handler]
98
- @event_handler = EventHandler.new :managed_gem_id => gem_id, :event => event, :handler => handler
99
- @error = nil
100
- @event_handler.save!
101
- rescue Exception => e
102
- @error = e
103
- end
104
-
105
- def delete_event_handler
106
- id = params[:id]
107
- @name = EventHandler.find(id).name
108
- EventHandler.delete id
109
- @error = nil
110
- end
111
-
112
- end
@@ -1,3 +0,0 @@
1
- # Methods added to this helper will be available to all templates in the application.
2
- module ApplicationHelper
3
- end
@@ -1,21 +0,0 @@
1
- # Copyright (C) 2010 Red Hat, Inc.
2
- # Written by Mohammed Morsi <mmorsi@redhat.com>
3
- #
4
- # This program is free software; you can redistribute it and/or modify
5
- # it under the terms of the GNU General Public License as published by
6
- # the Free Software Foundation; version 2 of the License.
7
- #
8
- # This program is distributed in the hope that it will be useful,
9
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
- # GNU General Public License for more details.
12
- #
13
- # You should have received a copy of the GNU General Public License
14
- # along with this program; if not, write to the Free Software
15
- # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
16
- # MA 02110-1301, USA. A copy of the GNU General Public License is
17
- # also available at http://www.gnu.org/copyleft/gpl.html.
18
-
19
- # An Artifact is an entity created by polisher
20
- class Artifact < ActiveRecord::Base
21
- end
@@ -1,61 +0,0 @@
1
- # Copyright (C) 2010 Red Hat, Inc.
2
- # Written by Mohammed Morsi <mmorsi@redhat.com>
3
- #
4
- # This program is free software; you can redistribute it and/or modify
5
- # it under the terms of the GNU General Public License as published by
6
- # the Free Software Foundation; version 2 of the License.
7
- #
8
- # This program is distributed in the hope that it will be useful,
9
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
- # GNU General Public License for more details.
12
- #
13
- # You should have received a copy of the GNU General Public License
14
- # along with this program; if not, write to the Free Software
15
- # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
16
- # MA 02110-1301, USA. A copy of the GNU General Public License is
17
- # also available at http://www.gnu.org/copyleft/gpl.html.
18
-
19
- # EventHandler refers to a Gem, and specified event enumeration value,
20
- # and event handler enumeration value.
21
- # Currently both events / handlers are pretty static / hard coded into
22
- # this system, but this may change in the future.
23
- class EventHandler < ActiveRecord::Base
24
- belongs_to :managed_gem
25
- alias :gem :managed_gem
26
-
27
- validates_presence_of :managed_gem_id, :event, :handler
28
- validates_uniqueness_of :handler, :scope => [:managed_gem_id, :event]
29
-
30
- def name
31
- gem.name.to_s + ":" + @event.to_s + ":" + @handler.to_s
32
- end
33
-
34
- # FIXME right now hard coding and dispatching
35
- # specific events / handlers here, at some point
36
- # replace w/ something more dynamic / plugable
37
- EVENTS = [:gem_created,:gem_updated]
38
- HANDLERS = [:send_email, :build_rpm, :submit_rpm]
39
-
40
- # dispatch to correct handler upon event
41
- def run
42
- logger.info ">> running #{event} handler #{handler} for gem #{gem.name}"
43
- case(handler)
44
- when "send_email"
45
- EmailAdapter.send_email(:server => POLISHER_CONFIG["smtp_server"],
46
- :from => POLISHER_CONFIG["email_from"],
47
- :to => POLISHER_CONFIG["email_to"],
48
- :subject => "gem #{gem.name} event #{event}",
49
- :logger => logger)
50
- when "build_rpm"
51
- # FIXME create artifact
52
- RpmAdapter.build(:gem => gem, :logger => logger)
53
- when "submit_rpm"
54
- #if @event == :gem_created
55
- # rpm = RPMEventHandler.build(@managed_gem)
56
- # RPMEventHandler.submit(rpm)
57
- #end
58
- end
59
- end
60
-
61
- end
@@ -1,24 +0,0 @@
1
- # Copyright (C) 2010 Red Hat, Inc.
2
- # Written by Mohammed Morsi <mmorsi@redhat.com>
3
- #
4
- # This program is free software; you can redistribute it and/or modify
5
- # it under the terms of the GNU General Public License as published by
6
- # the Free Software Foundation; version 2 of the License.
7
- #
8
- # This program is distributed in the hope that it will be useful,
9
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
- # GNU General Public License for more details.
12
- #
13
- # You should have received a copy of the GNU General Public License
14
- # along with this program; if not, write to the Free Software
15
- # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
16
- # MA 02110-1301, USA. A copy of the GNU General Public License is
17
- # also available at http://www.gnu.org/copyleft/gpl.html.
18
-
19
- # Encapsulates gem search criteria, for on the fly lookups / matching
20
- # and event handling
21
- class GemSearchCriteria < ActiveRecord::Base
22
- belongs_to :gem_source
23
-
24
- end
@@ -1,43 +0,0 @@
1
- # Copyright (C) 2010 Red Hat, Inc.
2
- # Written by Mohammed Morsi <mmorsi@redhat.com>
3
- #
4
- # This program is free software; you can redistribute it and/or modify
5
- # it under the terms of the GNU General Public License as published by
6
- # the Free Software Foundation; version 2 of the License.
7
- #
8
- # This program is distributed in the hope that it will be useful,
9
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
- # GNU General Public License for more details.
12
- #
13
- # You should have received a copy of the GNU General Public License
14
- # along with this program; if not, write to the Free Software
15
- # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
16
- # MA 02110-1301, USA. A copy of the GNU General Public License is
17
- # also available at http://www.gnu.org/copyleft/gpl.html.
18
-
19
- # GemSource represents a remote endpoint which we will use
20
- # the gem API to get gems from / subscribe to updates
21
- class GemSource < ActiveRecord::Base
22
- has_many :managed_gems
23
- has_many :gem_search_criterias
24
-
25
- alias :gems :managed_gems
26
- alias :searches :gem_search_criterias
27
-
28
- validates_presence_of :name
29
- validates_presence_of :uri
30
- validates_uniqueness_of :name
31
- validates_uniqueness_of :uri
32
-
33
- # FIXME validate format of uri
34
-
35
- # FIXME should have additional validation method that contacts gem source uri and
36
- # makes sure it satisfiest gem API requests
37
-
38
- # remove trailing slash in uri if present
39
- before_save :clean_uri
40
- def clean_uri
41
- self.uri = self.uri[0...self.uri.size-1] if self.uri[-1].chr == '/'
42
- end
43
- end
@@ -1,47 +0,0 @@
1
- # Copyright (C) 2010 Red Hat, Inc.
2
- # Written by Mohammed Morsi <mmorsi@redhat.com>
3
- #
4
- # This program is free software; you can redistribute it and/or modify
5
- # it under the terms of the GNU General Public License as published by
6
- # the Free Software Foundation; version 2 of the License.
7
- #
8
- # This program is distributed in the hope that it will be useful,
9
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
- # GNU General Public License for more details.
12
- #
13
- # You should have received a copy of the GNU General Public License
14
- # along with this program; if not, write to the Free Software
15
- # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
16
- # MA 02110-1301, USA. A copy of the GNU General Public License is
17
- # also available at http://www.gnu.org/copyleft/gpl.html.
18
-
19
- # Gem representation in polisher, associated w/ rubygem being
20
- # managed, used to track updates and invoke handlers
21
- class ManagedGem < ActiveRecord::Base
22
- belongs_to :gem_source
23
- has_many :event_handlers
24
- alias :source :gem_source
25
-
26
- validates_presence_of :name, :version, :gem_source_id
27
- validates_uniqueness_of :name, :scope => :gem_source_id
28
-
29
- # FIXME add validation to verify gem can be found in the associated gem source
30
-
31
- # helper, get gem uri
32
- def uri
33
- gem_source.uri + "/gems/" + name + "-" + version + ".gem"
34
- end
35
-
36
- # subscribe to updates to this gem from the associated gem source
37
- def subscribe(args = {})
38
- callback_url = args[:callback_url]
39
-
40
- logger.info ">> subscribting to updates to gem #{name} hosted at #{gem_source.uri}"
41
- GemApiAdapter.subscribe(:api_uri => gem_source.uri,
42
- :api_key => POLISHER_CONFIG["gem_api_key"],
43
- :gem_name => name,
44
- :callback_url => callback_url,
45
- :logger => logger)
46
- end
47
- end
File without changes
@@ -1,8 +0,0 @@
1
- <h3><%= link_to "ruby gem polisher", :controller => :manage, :action => :list %></h3>
2
- <ul id="primary_nav">
3
- <li><%= link_to "New Source", :action => "new_gem_source" %></li>
4
- <li><%= link_to "New Gem", :action => "new_gem" %></li>
5
- <li><%= link_to "New Search", :action => "new_gem_search_criteria" %></li>
6
- <li><%= link_to "New Action", :action => "new_event_handler" %></li>
7
- <!--<li><%= link_to "Log", :controller => "log", :action => "list" %></li>-->
8
- </ul>
@@ -1,27 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
-
4
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
-
6
- <head>
7
- <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
8
- <title><%= yield :title -%></title>
9
- <%= stylesheet_link_tag 'style' %>
10
- <!--[if IE]>
11
- <%= stylesheet_link_tag 'ie' %>
12
- <![endif]-->
13
- <%= javascript_include_tag "jquery-1.2.6.min.js" -%>
14
- <%= yield :scripts -%>
15
- </head>
16
-
17
- <body>
18
- <div id="header">
19
- <%= render :partial => '/layouts/header' %>
20
- </div>
21
- <div id="main">
22
- <%= yield %> <%# the rest of the center and right hand side %>
23
- </div>
24
- <div id="footer">
25
- </div>
26
- </body>
27
- </html>
@@ -1,15 +0,0 @@
1
- <p>
2
- <% if @error %>
3
- Error creating action <%= @error %>
4
- <% else %>
5
- Action <%= @event_handler.class %> successfully created
6
- <% end %>
7
- </p>
8
-
9
- <p>Returning to the <%= link_to "index", :controller => :manage, :action => :list %></p>
10
-
11
- <script type="text/javascript">
12
- setTimeout(function() {
13
- window.location.href = "<%= url_for :controller => :manage, :action => :list %>"; },
14
- 3000);
15
- </script>