mugen 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. data/.gitignore +2 -0
  2. data/.travis.yml +5 -0
  3. data/CHANGELOG.md +3 -0
  4. data/Gemfile +5 -0
  5. data/LICENSE +20 -0
  6. data/README.md +65 -0
  7. data/Rakefile +31 -0
  8. data/autotest/discover.rb +1 -0
  9. data/generators/README +3 -0
  10. data/generators/USAGE +34 -0
  11. data/generators/mugen_generator.rb +63 -0
  12. data/generators/templates/app/controllers/mygengo/account_controller.rb +10 -0
  13. data/generators/templates/app/controllers/mygengo/comments_controller.rb +6 -0
  14. data/generators/templates/app/controllers/mygengo/jobs_controller.rb +153 -0
  15. data/generators/templates/app/helpers/mugen_helper.rb +11 -0
  16. data/generators/templates/app/views/layouts/mygengo.html.erb +52 -0
  17. data/generators/templates/app/views/mygengo/account/_balance.haml +5 -0
  18. data/generators/templates/app/views/mygengo/account/_stats.haml +9 -0
  19. data/generators/templates/app/views/mygengo/account/index.haml +3 -0
  20. data/generators/templates/app/views/mygengo/comments/_comment.haml +7 -0
  21. data/generators/templates/app/views/mygengo/comments/_form.haml +10 -0
  22. data/generators/templates/app/views/mygengo/jobs/_comments.haml +8 -0
  23. data/generators/templates/app/views/mygengo/jobs/_feedback.haml +8 -0
  24. data/generators/templates/app/views/mygengo/jobs/_job.haml +36 -0
  25. data/generators/templates/app/views/mygengo/jobs/_revision.haml +2 -0
  26. data/generators/templates/app/views/mygengo/jobs/index.haml +8 -0
  27. data/generators/templates/app/views/mygengo/jobs/new.haml +53 -0
  28. data/generators/templates/app/views/mygengo/jobs/reject_form.haml +36 -0
  29. data/generators/templates/app/views/mygengo/jobs/review_form.haml +54 -0
  30. data/generators/templates/app/views/mygengo/jobs/revise_form.haml +7 -0
  31. data/generators/templates/app/views/mygengo/jobs/revision.haml +8 -0
  32. data/generators/templates/app/views/mygengo/jobs/show.haml +38 -0
  33. data/generators/templates/config/initializers/mugen.rb +2 -0
  34. data/generators/templates/config/routes.rb +16 -0
  35. data/generators/templates/public/stylesheets/mygengo/base.css +397 -0
  36. data/generators/templates/public/stylesheets/mygengo/mugen.css +117 -0
  37. data/generators/templates/public/stylesheets/mygengo/override.css +1 -0
  38. data/generators/templates/public/stylesheets/mygengo/scaffold.css +56 -0
  39. data/generators/templates/public/stylesheets/mygengo/style.css +373 -0
  40. data/lib/generators/mugen/README +3 -0
  41. data/lib/generators/mugen/USAGE +35 -0
  42. data/lib/generators/mugen/mugen_generator.rb +50 -0
  43. data/lib/generators/mugen/templates/app/controllers/mygengo/account_controller.rb +10 -0
  44. data/lib/generators/mugen/templates/app/controllers/mygengo/comments_controller.rb +6 -0
  45. data/lib/generators/mugen/templates/app/controllers/mygengo/jobs_controller.rb +153 -0
  46. data/lib/generators/mugen/templates/app/controllers/mygengo/mygengo_controller.rb +18 -0
  47. data/lib/generators/mugen/templates/app/helpers/mugen_helper.rb +11 -0
  48. data/lib/generators/mugen/templates/app/views/layouts/mygengo.html.erb +52 -0
  49. data/lib/generators/mugen/templates/app/views/mygengo/account/_balance.haml +5 -0
  50. data/lib/generators/mugen/templates/app/views/mygengo/account/_stats.haml +9 -0
  51. data/lib/generators/mugen/templates/app/views/mygengo/account/index.haml +3 -0
  52. data/lib/generators/mugen/templates/app/views/mygengo/comments/_comment.haml +7 -0
  53. data/lib/generators/mugen/templates/app/views/mygengo/comments/_form.haml +10 -0
  54. data/lib/generators/mugen/templates/app/views/mygengo/jobs/_comments.haml +8 -0
  55. data/lib/generators/mugen/templates/app/views/mygengo/jobs/_feedback.haml +8 -0
  56. data/lib/generators/mugen/templates/app/views/mygengo/jobs/_job.haml +36 -0
  57. data/lib/generators/mugen/templates/app/views/mygengo/jobs/_revision.haml +2 -0
  58. data/lib/generators/mugen/templates/app/views/mygengo/jobs/index.haml +8 -0
  59. data/lib/generators/mugen/templates/app/views/mygengo/jobs/new.haml +53 -0
  60. data/lib/generators/mugen/templates/app/views/mygengo/jobs/reject_form.haml +36 -0
  61. data/lib/generators/mugen/templates/app/views/mygengo/jobs/review_form.haml +54 -0
  62. data/lib/generators/mugen/templates/app/views/mygengo/jobs/revise_form.haml +7 -0
  63. data/lib/generators/mugen/templates/app/views/mygengo/jobs/revision.haml +8 -0
  64. data/lib/generators/mugen/templates/app/views/mygengo/jobs/show.haml +38 -0
  65. data/lib/generators/mugen/templates/config/initializers/mugen.rb +2 -0
  66. data/lib/generators/mugen/templates/config/routes2.rb +16 -0
  67. data/lib/generators/mugen/templates/config/routes3.rb +17 -0
  68. data/lib/generators/mugen/templates/public/images/mygengo/blank +0 -0
  69. data/lib/generators/mugen/templates/public/stylesheets/mygengo/base.css +397 -0
  70. data/lib/generators/mugen/templates/public/stylesheets/mygengo/mugen.css +117 -0
  71. data/lib/generators/mugen/templates/public/stylesheets/mygengo/override.css +1 -0
  72. data/lib/generators/mugen/templates/public/stylesheets/mygengo/scaffold.css +56 -0
  73. data/lib/generators/mugen/templates/public/stylesheets/mygengo/style.css +373 -0
  74. data/lib/mugen.rb +73 -0
  75. data/lib/mugen/account.rb +27 -0
  76. data/lib/mugen/client.rb +33 -0
  77. data/lib/mugen/core_extensions.rb +32 -0
  78. data/lib/mugen/httparty_extensions.rb +26 -0
  79. data/lib/mugen/job.rb +169 -0
  80. data/lib/mugen/jobs.rb +42 -0
  81. data/lib/mugen/service.rb +30 -0
  82. data/lib/mugen/version.rb +3 -0
  83. data/lib/tasks/mugen.rake +5 -0
  84. data/mugen.gemspec +33 -0
  85. data/rails/init.rb +1 -0
  86. data/spec/account_spec.rb +22 -0
  87. data/spec/job_spec.rb +40 -0
  88. data/spec/jobs_spec.rb +33 -0
  89. data/spec/mugen_spec.rb +33 -0
  90. data/spec/service_spec.rb +21 -0
  91. data/spec/spec_helper.rb +4 -0
  92. metadata +191 -0
@@ -0,0 +1,3 @@
1
+ This directory is for the Rails 3 generator.
2
+
3
+ The Rails 2.x generator is in /generators.
@@ -0,0 +1,35 @@
1
+ Description:
2
+ Generates MyGengo scaffold for your app
3
+
4
+ Example:
5
+ rails generate mugen
6
+
7
+ This will update routes.rb
8
+ This will create:
9
+ config/initializers/mugen.rb
10
+ app/controllers/mygengo
11
+ app/controllers/mygengo/account_controller.rb
12
+ app/controllers/mygengo/comments_controller.rb
13
+ app/controllers/mygengo/jobs_controller.rb
14
+ app/helpers/mugen_helper.rb
15
+ app/views/layouts/mygengo.html.erb
16
+ app/views/mygengo/account
17
+ app/views/mygengo/comments
18
+ app/views/mygengo/jobs
19
+ app/views/mygengo/account/index.haml
20
+ app/views/mygengo/account/_balance.haml
21
+ app/views/mygengo/account/_stats.haml
22
+ app/views/mygengo/comments/_comment.haml
23
+ app/views/mygengo/comments/_form.haml
24
+ app/views/mygengo/jobs/_comments.haml
25
+ app/views/mygengo/jobs/_feedback.haml
26
+ app/views/mygengo/jobs/_revision.haml
27
+ app/views/mygengo/jobs/index.haml
28
+ app/views/mygengo/jobs/new.haml
29
+ app/views/mygengo/jobs/reject_form.haml
30
+ app/views/mygengo/jobs/review_form.haml
31
+ app/views/mygengo/jobs/revise_form.haml
32
+ app/views/mygengo/jobs/revision.haml
33
+ app/views/mygengo/jobs/show.haml
34
+ README
35
+
@@ -0,0 +1,50 @@
1
+ class MugenGenerator < Rails::Generators::Base
2
+ source_root File.expand_path('../templates', __FILE__)
3
+
4
+ def install
5
+ # Create directories
6
+ %W(
7
+ app/controllers/mygengo
8
+ app/views/mygengo/account
9
+ app/views/mygengo/comments
10
+ app/views/mygengo/jobs
11
+ public/stylesheets/mygengo
12
+ public/images/mygengo
13
+ ).each {|dir|
14
+ directory dir
15
+ }
16
+
17
+ # Copy files
18
+ %W(
19
+ config/initializers/mugen.rb
20
+ app/helpers/mugen_helper.rb
21
+ app/views/layouts/mygengo.html.erb
22
+ ).each do |filename|
23
+ copy_file filename, filename
24
+ end
25
+
26
+ # Add routes
27
+ sentinel = '::Application.routes.draw do'
28
+ new_routes = IO.read(File.dirname(__FILE__) + '/templates/config/routes3.rb')
29
+
30
+ gsub_file 'config/routes3.rb', /(#{Regexp.escape(sentinel)})/mi do |match|
31
+ "#{match}\n #{new_routes}"
32
+ end
33
+
34
+
35
+
36
+ puts MugenGenerator.description
37
+ end
38
+
39
+ def self.description
40
+ <<-DESCRIPTION
41
+ *******************************************************************
42
+ MyGengo scaffold complete
43
+
44
+
45
+ *******************************************************************
46
+ DESCRIPTION
47
+ end
48
+ desc(description)
49
+
50
+ end
@@ -0,0 +1,10 @@
1
+ class Mygengo::AccountController < Mygengo::MygengoController
2
+
3
+ def index
4
+ @account = Mugen::Account.balance || {}
5
+ @stats = Mugen::Account.stats
6
+
7
+ @account.merge! @stats if @stats
8
+ end
9
+
10
+ end
@@ -0,0 +1,6 @@
1
+ class Mygengo::CommentsController < Mygengo::MygengoController
2
+ def create
3
+ flag = Mugen::Job.create_comment(params[:id], params[:comment])
4
+ redirect_to mygengo_job_path(params[:id])
5
+ end
6
+ end
@@ -0,0 +1,153 @@
1
+ class Mygengo::JobsController < Mygengo::MygengoController
2
+ URL_REGEXP = /^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$/ix
3
+
4
+ # GET /jobs
5
+ # GET /jobs.xml
6
+ def index
7
+ @job_ids = Mugen::Jobs.all
8
+ if @job_ids
9
+ @jobs = @job_ids.collect {|j|
10
+ Mugen::Job.find(j['job_id']).merge('comments' => Mugen::Job.comments(j['job_id']))
11
+ }
12
+ respond_to do |format|
13
+ format.html # index.html.erb
14
+ format.xml { render :xml => @jobs }
15
+ end
16
+ else
17
+ redirect_to mygengo_account_index_path
18
+ end
19
+ end
20
+
21
+ # GET /jobs/1
22
+ # GET /jobs/1.xml
23
+ def show
24
+ @job = Mugen::Job.find(params[:id])
25
+ @preview = Mugen::Job.preview(@job['job_id'])
26
+ @comments = Mugen::Job.comments(@job['job_id'])
27
+ @job.merge!('comments' => @comments)
28
+ @feedback = Mugen::Job.feedback(@job['job_id'])
29
+ @revisions = Mugen::Job.revisions(@job['job_id'])
30
+ @revisions = [@revisions] if @revisions.is_a?(Hash)
31
+
32
+ respond_to do |format|
33
+ format.html # show.html.erb
34
+ format.xml { render :xml => @job }
35
+ end
36
+ end
37
+
38
+ def review_form
39
+ @job = Mugen::Job.find(params[:id])
40
+ @preview = Mugen::Job.preview(@job['job_id'])
41
+ @comments = Mugen::Job.comments(@job['job_id'])
42
+ @job.merge!('comments' => @comments)
43
+ @feedback = Mugen::Job.feedback(@job['job_id'])
44
+ end
45
+
46
+ def reject_form
47
+ @job = Mugen::Job.find(params[:id])
48
+ @preview = Mugen::Job.preview(@job['job_id'])
49
+ @comments = Mugen::Job.comments(@job['job_id'])
50
+ @job.merge!('comments' => @comments)
51
+ end
52
+
53
+ def revise_form
54
+ @job = Mugen::Job.find(params[:id])
55
+ @preview = Mugen::Job.preview(@job['job_id'])
56
+ @comments = Mugen::Job.comments(@job['job_id'])
57
+ @job.merge!('comments' => @comments)
58
+ end
59
+
60
+ # GET /jobs/1
61
+ # GET /jobs/1.xml
62
+ def revision
63
+ @job = Mugen::Job.find(params[:job_id])
64
+ @revision = Mugen::Job.revision(params[:job_id], params[:id])
65
+
66
+ respond_to do |format|
67
+ format.html {}
68
+ format.xml { render :xml => @job }
69
+ end
70
+ end
71
+
72
+ # GET /jobs/new
73
+ # GET /jobs/new.xml
74
+ def new
75
+ @job = Mugen::Job
76
+ @languages = Mugen::Service.languages
77
+ @language_pairs = Mugen::Service.language_pairs
78
+ @language_src = @languages.collect { |lp| [ lp["language"], lp['lc'] ] }.uniq.sort
79
+ @language_tgt = @languages.collect { |lp| [ lp["language"], lp['lc'] ] }.uniq.sort
80
+
81
+ respond_to do |format|
82
+ format.html # new.html.erb
83
+ format.xml { render :xml => @job }
84
+ end
85
+ end
86
+
87
+ # GET /jobs/1/edit
88
+ def edit
89
+ @job = Mugen::Job.find(params[:id])
90
+ end
91
+
92
+ # POST /jobs
93
+ # POST /jobs.xml
94
+ def create
95
+ params[:job]['body_src'] = sanitize(params[:job]['body_src'])
96
+ if params[:job]['callback_url'].empty? ||
97
+ !params[:job]['callback_url'].match(URL_REGEXP)
98
+ params[:job].delete('callback_url')
99
+ end
100
+ flag = Mugen::Job.create(params[:job])
101
+
102
+ redirect_to mygengo_jobs_path
103
+ end
104
+
105
+ # PUT /jobs/1
106
+ # PUT /jobs/1.xml
107
+ def update
108
+ @job = Mugen::Job.update(params[:id])
109
+
110
+ redirect_to mygengo_jobs_path
111
+ end
112
+
113
+ def purchase
114
+ @job = Mugen::Job.purchase(params[:id])
115
+
116
+ redirect_to mygengo_jobs_path
117
+ end
118
+
119
+ def approve
120
+ @job = Mugen::Job.approve(params[:id])
121
+
122
+ redirect_to mygengo_jobs_path
123
+ end
124
+
125
+ def revise
126
+ @job = Mugen::Job.revise(params[:id], params[:job])
127
+
128
+ redirect_to mygengo_jobs_path
129
+ end
130
+
131
+ def reject
132
+ @job = Mugen::Job.reject(params[:id], params[:job])
133
+
134
+ redirect_to mygengo_jobs_path
135
+ end
136
+
137
+ # DELETE /jobs/1
138
+ # DELETE /jobs/1.xml
139
+ def destroy
140
+ @job = Mugen::Job.delete(params[:id])
141
+
142
+ respond_to do |format|
143
+ format.html { redirect_to(mygengo_jobs_url) }
144
+ format.xml { head :ok }
145
+ end
146
+ end
147
+
148
+ private
149
+
150
+ def sanitize(text)
151
+ return text.gsub(/<\/?.*?>/, "")
152
+ end
153
+ end
@@ -0,0 +1,18 @@
1
+ class Mygengo::MygengoController < ApplicationController
2
+ before_render :parse_errrors
3
+ layout 'mygengo'
4
+
5
+ protected
6
+
7
+ def parse_errrors
8
+ unless Mugen.errors.empty?
9
+ if flash[:error]
10
+ flash[:error] << Mugen.errors.join(' | ')
11
+ else
12
+ flash[:error] = Mugen.errors.join(' | ')
13
+ end
14
+ Mugen.errors.clear
15
+ end
16
+ end
17
+
18
+ end
@@ -0,0 +1,11 @@
1
+ module MugenHelper
2
+ def d(timestamp)
3
+ if timestamp
4
+ Time.at(timestamp).to_s(:short)
5
+ end
6
+ end
7
+
8
+ def eta(timestamp)
9
+ time_ago_in_words(Time.at(timestamp)) unless timestamp.empty?
10
+ end
11
+ end
@@ -0,0 +1,52 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>MyGengo</title>
5
+ <%= stylesheet_link_tag "mygengo/base", "mygengo/style", "mygengo/override", :cache => true %>
6
+ <%= stylesheet_link_tag 'mygengo/scaffold', 'mygengo/mugen', :cache => true %>
7
+ <%= javascript_include_tag 'jquery', 'rails', 'application' %>
8
+ <%= csrf_meta_tag %>
9
+ </head>
10
+ <body>
11
+ <div id="container">
12
+ <div id="header">
13
+ <h1><a href="/">Gengo</a></h1>
14
+ <div id="user-navigation">
15
+ <ul class="wat-cf">
16
+ <li><a href="/logout" class="logout"><%= t("web-app-theme.logout", :default => "Logout") %></a></li>
17
+ </ul>
18
+ </div>
19
+ <div id="main-navigation">
20
+ <ul class="wat-cf">
21
+ <li><%= link_to 'Jobs', '/mygengo/jobs' %></li>
22
+ <li><%= link_to 'Account', '/mygengo/account' %></li>
23
+ </ul>
24
+ </div>
25
+ </div>
26
+ <div id="wrapper" class="wat-cf">
27
+ <div class="flash">
28
+ <% flash.each do |type, message| -%>
29
+ <% unless message.empty? %>
30
+ <div class="message <%= type %>">
31
+ <p><%= message %></p>
32
+ </div>
33
+ <% end %>
34
+ <% end -%>
35
+ </div>
36
+ <div id="main">
37
+ <%= yield %>
38
+ <br />
39
+ <br />
40
+ <div id="footer">
41
+ <div class="block">
42
+ <p>Copyright &copy; <%= Time.now.year %> Vladimir Penkin</p>
43
+ </div>
44
+ </div>
45
+ </div>
46
+ <div id="sidebar">
47
+ <%= yield :sidebar %>
48
+ </div>
49
+ </div>
50
+ </div>
51
+ </body>
52
+ </html>
@@ -0,0 +1,5 @@
1
+ .mygengo-box
2
+ .account-balance
3
+ %h4 Credit balance
4
+ = @account["credits"]
5
+ credits
@@ -0,0 +1,9 @@
1
+ .mygengo-box
2
+ .account-stats
3
+ %h4 Account Stats
4
+ %p
5
+ Credits spent:
6
+ = @account["credits_spent"]
7
+ %p
8
+ User Since:
9
+ = d @account["user_since"]
@@ -0,0 +1,3 @@
1
+ %h1 Account info
2
+ = render :partial => 'mygengo/account/balance'
3
+ = render :partial => 'mygengo/account/stats'
@@ -0,0 +1,7 @@
1
+ %tr
2
+ %td(colspan=2)
3
+ = comment['body']
4
+ %br
5
+ = comment['author']
6
+ |
7
+ = d (comment['ctime'])
@@ -0,0 +1,10 @@
1
+ %h3 Leave a comment
2
+ = form_for :comment, :url => {:controller => 'mygengo/comments', :action => 'create', :id => @job['job_id']} do |f|
3
+ .field
4
+ Text
5
+ %br
6
+ = f.text_area :body, :size => '40x7'
7
+ .field
8
+ Requesting personal contact details from translators is prohibited
9
+ = f.submit "Submit Comment"
10
+ %br
@@ -0,0 +1,8 @@
1
+ - if comments.size > 0
2
+ %h4 Comments
3
+ %table.mygento-comments
4
+ - for comment in comments
5
+ = render :partial => 'mygengo/comments/comment', :locals => {:comment => comment}
6
+ %br
7
+ - else
8
+ No comments
@@ -0,0 +1,8 @@
1
+ .mygengo-box
2
+ %h4 Feedback
3
+ %p
4
+ Rating:
5
+ = feedback['rating']
6
+ %p
7
+ For translator:
8
+ = feedback['for_translator']
@@ -0,0 +1,36 @@
1
+ %tr
2
+ %td
3
+ Job #
4
+ = link_to job["job_id"], mygengo_job_path(job["job_id"])
5
+ %br
6
+ = job['slug']
7
+ %td
8
+ = job['status']
9
+ %br
10
+ = job['tier']
11
+ %td
12
+ = job['comments'].size
13
+ comments
14
+ %br
15
+ = job['lc_src']
16
+ &raquo;
17
+ =job['lc_tgt']
18
+ %td
19
+ = job['credits']
20
+ credits
21
+ %br
22
+ = job['unit_count']
23
+ words
24
+ %td
25
+ = d job['ctime']
26
+ %br
27
+ - unless job['eta'].empty?
28
+ = eta(job['eta'])
29
+ %td
30
+ Actions
31
+ %br
32
+ = link_to 'Cancel', mygengo_job_path(job['job_id']), :method => :delete, :confirm => 'Are you sure?'
33
+ - if job['status'] == 'reviewable'
34
+ = link_to 'Review', review_form_mygengo_job_path(job["job_id"])
35
+ = link_to 'View', mygengo_job_path(job["job_id"])
36
+