mugen 0.2.1

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 (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
+