copy_tuner_client 0.2.4 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d1ce18bb5cd5f08708524ef88f338b9387166d31
4
- data.tar.gz: ac5bed0056db2efbbd9623983381b2ba303e9f0f
3
+ metadata.gz: 9bfc2b0438d95dfd78e642cbd01634341a49dda1
4
+ data.tar.gz: 3404e74efd31b4fb22bfa9d7e2d07f40508fd170
5
5
  SHA512:
6
- metadata.gz: 9c074c3aeebabde185d4ed3fb87514f4ce2c67bed97a0a01446bd59b92170c6c14e69f15c982bd5cb84491b4f3f49bbd37440668f62fe7f021316bf8ad714130
7
- data.tar.gz: 0b03bfe6a24e9ae00bf1445f0c9a760b6c32666dd19372b8e977fcc147b8a78458b7ce17c2b29d630055412eedc6ffe4d01ad3d4a4f29fa71638ebe1b565839c
6
+ metadata.gz: d1766da6789da799a6b657f711244009c702ac078421b3fe14e69c827bc33643a7a39017bda3f8264965f03ddc399ceb01c9a20234671e3409a965e315de539d
7
+ data.tar.gz: 58c5aa8d6ab6c6af3b400f4171303e485a30acd2bc43c1f9779d1f3651435e5cbe960dbdede61135436c9924f87f33274cc4b13fbf7eda128505c3a764add976
data/.gitignore CHANGED
@@ -17,3 +17,4 @@ pkg
17
17
  *.gem
18
18
  .bundle
19
19
  *.gemfile.lock
20
+ .idea/
data/.travis.yml CHANGED
@@ -2,12 +2,12 @@ rvm:
2
2
  - 2.0
3
3
  - 2.1
4
4
  - 2.2
5
+ - 2.3
5
6
 
6
7
  gemfile:
7
- - gemfiles/3.2.gemfile
8
8
  - gemfiles/4.0.gemfile
9
9
  - gemfiles/4.1.gemfile
10
10
  - gemfiles/4.2.gemfile
11
11
 
12
12
  before_install:
13
- - gem update bundler
13
+ - gem update bundler
data/Appraisals CHANGED
@@ -1,15 +1,11 @@
1
- appraise '3.2' do
2
- gem 'rails', '3.2.22'
3
- end
4
-
5
1
  appraise '4.0' do
6
2
  gem 'rails', '4.0.13'
7
3
  end
8
4
 
9
5
  appraise '4.1' do
10
- gem 'rails', '4.1.13'
6
+ gem 'rails', '4.1.15'
11
7
  end
12
8
 
13
9
  appraise '4.2' do
14
- gem 'rails', '4.2.4'
10
+ gem 'rails', '4.2.6'
15
11
  end
data/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ ## 0.3.0
2
+ - Use https as default.
3
+ - Download blurbs from S3.
4
+ - Add toolbar.
5
+ - "Translations in this page" menu.
data/Gemfile.lock CHANGED
@@ -1,57 +1,64 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- copy_tuner_client (0.2.3)
4
+ copy_tuner_client (0.3.0)
5
5
  i18n (>= 0.5.0)
6
6
  json
7
7
 
8
8
  GEM
9
9
  remote: http://rubygems.org/
10
10
  specs:
11
- actionmailer (3.1.12)
12
- actionpack (= 3.1.12)
13
- mail (~> 2.4.4)
14
- actionpack (3.1.12)
15
- activemodel (= 3.1.12)
16
- activesupport (= 3.1.12)
17
- builder (~> 3.0.0)
11
+ actionmailer (4.2.6)
12
+ actionpack (= 4.2.6)
13
+ actionview (= 4.2.6)
14
+ activejob (= 4.2.6)
15
+ mail (~> 2.5, >= 2.5.4)
16
+ rails-dom-testing (~> 1.0, >= 1.0.5)
17
+ actionpack (4.2.6)
18
+ actionview (= 4.2.6)
19
+ activesupport (= 4.2.6)
20
+ rack (~> 1.6)
21
+ rack-test (~> 0.6.2)
22
+ rails-dom-testing (~> 1.0, >= 1.0.5)
23
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
24
+ actionview (4.2.6)
25
+ activesupport (= 4.2.6)
26
+ builder (~> 3.1)
18
27
  erubis (~> 2.7.0)
19
- i18n (~> 0.6)
20
- rack (~> 1.3.6)
21
- rack-cache (~> 1.2)
22
- rack-mount (~> 0.8.2)
23
- rack-test (~> 0.6.1)
24
- sprockets (~> 2.0.4)
25
- activemodel (3.1.12)
26
- activesupport (= 3.1.12)
27
- builder (~> 3.0.0)
28
- i18n (~> 0.6)
29
- activerecord (3.1.12)
30
- activemodel (= 3.1.12)
31
- activesupport (= 3.1.12)
32
- arel (~> 2.2.3)
33
- tzinfo (~> 0.3.29)
34
- activeresource (3.1.12)
35
- activemodel (= 3.1.12)
36
- activesupport (= 3.1.12)
37
- activesupport (3.1.12)
38
- multi_json (~> 1.0)
28
+ rails-dom-testing (~> 1.0, >= 1.0.5)
29
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
30
+ activejob (4.2.6)
31
+ activesupport (= 4.2.6)
32
+ globalid (>= 0.3.0)
33
+ activemodel (4.2.6)
34
+ activesupport (= 4.2.6)
35
+ builder (~> 3.1)
36
+ activerecord (4.2.6)
37
+ activemodel (= 4.2.6)
38
+ activesupport (= 4.2.6)
39
+ arel (~> 6.0)
40
+ activesupport (4.2.6)
41
+ i18n (~> 0.7)
42
+ json (~> 1.7, >= 1.7.7)
43
+ minitest (~> 5.1)
44
+ thread_safe (~> 0.3, >= 0.3.4)
45
+ tzinfo (~> 1.1)
39
46
  addressable (2.4.0)
40
- ansi (1.5.0)
41
47
  appraisal (2.1.0)
42
48
  bundler
43
49
  rake
44
50
  thor (>= 0.14.0)
45
- arel (2.2.3)
51
+ arel (6.0.3)
46
52
  aruba (0.6.2)
47
53
  childprocess (>= 0.3.6)
48
54
  cucumber (>= 1.1.1)
49
55
  rspec-expectations (>= 2.7.0)
50
56
  bourne (1.6.0)
51
57
  mocha (~> 1.1)
52
- builder (3.0.4)
58
+ builder (3.2.2)
53
59
  childprocess (0.5.9)
54
60
  ffi (~> 1.0, >= 1.0.11)
61
+ concurrent-ruby (1.0.2)
55
62
  crack (0.4.3)
56
63
  safe_yaml (~> 1.0.0)
57
64
  cucumber (1.3.20)
@@ -67,51 +74,59 @@ GEM
67
74
  ffi (1.9.10)
68
75
  gherkin (2.12.2)
69
76
  multi_json (~> 1.3)
77
+ globalid (0.3.6)
78
+ activesupport (>= 4.1.0)
70
79
  hashdiff (0.3.0)
71
- hike (1.2.3)
72
80
  i18n (0.7.0)
73
81
  json (1.8.3)
74
- mail (2.4.4)
75
- i18n (>= 0.4.0)
76
- mime-types (~> 1.16)
77
- treetop (~> 1.4.8)
82
+ loofah (2.0.3)
83
+ nokogiri (>= 1.5.9)
84
+ mail (2.6.4)
85
+ mime-types (>= 1.16, < 4)
78
86
  metaclass (0.0.4)
79
- mime-types (1.25.1)
80
- minitest (4.7.5)
87
+ mime-types (3.1)
88
+ mime-types-data (~> 3.2015)
89
+ mime-types-data (3.2016.0521)
90
+ mini_portile2 (2.1.0)
91
+ minitest (5.9.0)
81
92
  mocha (1.1.0)
82
93
  metaclass (~> 0.0.1)
83
- multi_json (1.11.3)
94
+ multi_json (1.12.1)
84
95
  multi_test (0.1.2)
85
- polyglot (0.3.5)
86
- rack (1.3.10)
87
- rack-cache (1.6.1)
88
- rack (>= 0.4)
89
- rack-mount (0.8.3)
90
- rack (>= 1.0.0)
96
+ nokogiri (1.6.8)
97
+ mini_portile2 (~> 2.1.0)
98
+ pkg-config (~> 1.1.7)
99
+ pkg-config (1.1.7)
100
+ rack (1.6.4)
91
101
  rack-protection (1.5.3)
92
102
  rack
93
- rack-ssl (1.3.4)
94
- rack
95
103
  rack-test (0.6.3)
96
104
  rack (>= 1.0)
97
- rails (3.1.12)
98
- actionmailer (= 3.1.12)
99
- actionpack (= 3.1.12)
100
- activerecord (= 3.1.12)
101
- activeresource (= 3.1.12)
102
- activesupport (= 3.1.12)
103
- bundler (~> 1.0)
104
- railties (= 3.1.12)
105
- railties (3.1.12)
106
- actionpack (= 3.1.12)
107
- activesupport (= 3.1.12)
108
- rack-ssl (~> 1.3.2)
105
+ rails (4.2.6)
106
+ actionmailer (= 4.2.6)
107
+ actionpack (= 4.2.6)
108
+ actionview (= 4.2.6)
109
+ activejob (= 4.2.6)
110
+ activemodel (= 4.2.6)
111
+ activerecord (= 4.2.6)
112
+ activesupport (= 4.2.6)
113
+ bundler (>= 1.3.0, < 2.0)
114
+ railties (= 4.2.6)
115
+ sprockets-rails
116
+ rails-deprecated_sanitizer (1.0.3)
117
+ activesupport (>= 4.2.0.alpha)
118
+ rails-dom-testing (1.0.7)
119
+ activesupport (>= 4.2.0.beta, < 5.0)
120
+ nokogiri (~> 1.6.0)
121
+ rails-deprecated_sanitizer (>= 1.0.1)
122
+ rails-html-sanitizer (1.0.3)
123
+ loofah (~> 2.0)
124
+ railties (4.2.6)
125
+ actionpack (= 4.2.6)
126
+ activesupport (= 4.2.6)
109
127
  rake (>= 0.8.7)
110
- rdoc (~> 3.4)
111
- thor (~> 0.14.6)
112
- rake (11.1.2)
113
- rdoc (3.12.2)
114
- json (~> 1.4)
128
+ thor (>= 0.18.1, < 2.0)
129
+ rake (11.2.2)
115
130
  rspec (2.99.0)
116
131
  rspec-core (~> 2.99.0)
117
132
  rspec-expectations (~> 2.99.0)
@@ -127,24 +142,23 @@ GEM
127
142
  rack (~> 1.3, >= 1.3.6)
128
143
  rack-protection (~> 1.2)
129
144
  tilt (~> 1.3, >= 1.3.3)
130
- sprockets (2.0.5)
131
- hike (~> 1.2)
132
- rack (~> 1.0)
133
- tilt (~> 1.1, != 1.3.0)
145
+ sprockets (3.6.3)
146
+ concurrent-ruby (~> 1.0)
147
+ rack (> 1, < 3)
148
+ sprockets-rails (3.1.1)
149
+ actionpack (>= 4.0)
150
+ activesupport (>= 4.0)
151
+ sprockets (>= 3.0.0)
134
152
  sqlite3 (1.3.11)
135
- thin (1.6.4)
153
+ thin (1.7.0)
136
154
  daemons (~> 1.0, >= 1.0.9)
137
155
  eventmachine (~> 1.0, >= 1.0.4)
138
- rack (~> 1.0)
139
- thor (0.14.6)
156
+ rack (>= 1, < 3)
157
+ thor (0.19.1)
158
+ thread_safe (0.3.5)
140
159
  tilt (1.4.1)
141
- treetop (1.4.15)
142
- polyglot
143
- polyglot (>= 0.3.1)
144
- turn (0.9.7)
145
- ansi
146
- minitest (~> 4)
147
- tzinfo (0.3.49)
160
+ tzinfo (1.2.2)
161
+ thread_safe (~> 0.1)
148
162
  webmock (2.0.0)
149
163
  addressable (>= 2.3.6)
150
164
  crack (>= 0.3.2)
@@ -160,14 +174,13 @@ DEPENDENCIES
160
174
  bourne
161
175
  copy_tuner_client!
162
176
  cucumber (~> 1.3.16)
163
- rails (~> 3.1.0)
177
+ rails (~> 4.2.6)
164
178
  rake
165
179
  rspec (~> 2.3)
166
180
  sham_rack
167
181
  sinatra
168
182
  sqlite3
169
183
  thin
170
- turn
171
184
  webmock
172
185
  yard
173
186
 
@@ -26,6 +26,7 @@ Copyray.init = do ->
26
26
  Copyray.findBlurbs()
27
27
 
28
28
  Copyray.addToggleButton()
29
+
29
30
  # Ready to rock.
30
31
  console?.log "Ready to Copyray. Press #{if is_mac then 'cmd+shift+k' else 'ctrl+shift+k'} to scan your UI."
31
32
 
@@ -71,10 +72,12 @@ Copyray.open = (url) ->
71
72
  # Show the Copyray overlay
72
73
  Copyray.show = (type = null) ->
73
74
  Copyray.Overlay.instance().show(type)
75
+ Copyray.showBar()
74
76
 
75
77
  # Hide the Copyray overlay
76
78
  Copyray.hide = ->
77
79
  Copyray.Overlay.instance().hide()
80
+ Copyray.hideBar()
78
81
 
79
82
  Copyray.toggleSettings = ->
80
83
  Copyray.Overlay.instance().settings.toggle()
@@ -172,6 +175,7 @@ class Copyray.Overlay
172
175
  Copyray.isShowing = false
173
176
  @$overlay.detach()
174
177
  @reset()
178
+ Copyray.hideBar()
175
179
 
176
180
  # Utility methods.
177
181
  util =
@@ -213,3 +217,37 @@ util =
213
217
  width : boxFrame.right - boxFrame.left
214
218
  height : boxFrame.bottom - boxFrame.top
215
219
  }
220
+
221
+ Copyray.showBar = ->
222
+ $('#copy-tuner-bar').show()
223
+ $('.copyray-toggle-button').hide()
224
+
225
+ Copyray.hideBar = ->
226
+ $('#copy-tuner-bar').hide()
227
+ $('.copyray-toggle-button').show()
228
+ $('#copy-tuner-bar-log-menu').hide()
229
+
230
+ Copyray.createLogMenu = ->
231
+ $tbody = $('#copy-tuner-bar-log-menu__tbody.is-not-initialized')
232
+ return if $tbody.length == 0
233
+ $tbody.removeClass('is-not-initialized')
234
+ baseUrl = $('[data-copy-tuner-url]').data('copy-tuner-url')
235
+ log = $('[data-copy-tuner-translation-log').data('copy-tuner-translation-log')
236
+ $.each log, (k, v) ->
237
+ if v != ''
238
+ url = "#{baseUrl}/blurbs/#{k}/edit"
239
+ $a = $("<a href='#{url}' class='js-copy-tuner-blurb-link'>").text k
240
+ $td1 = $('<td>').append $a
241
+ $td2 = $('<td>').text v
242
+ $tr = $("<tr class='js-copy-tuner-blurb-row'>")
243
+ $tr.append $td1, $td2
244
+ $tbody.append $tr
245
+ $tbody.on 'click', '.js-copy-tuner-blurb-link', (e) ->
246
+ e.preventDefault()
247
+ $tbody.on 'click', '.js-copy-tuner-blurb-row', ->
248
+ Copyray.open $(@).find('a').attr('href')
249
+
250
+ $(document).on 'click', '.copy-tuner-bar-open-log', (e) ->
251
+ e.preventDefault()
252
+ Copyray.createLogMenu()
253
+ $('#copy-tuner-bar-log-menu').toggle()
@@ -96,3 +96,73 @@ a.copyray-toggle-button {
96
96
  a.copyray-toggle-button:hover {
97
97
  opacity: 1;
98
98
  }
99
+
100
+ #copy-tuner-bar {
101
+ position: fixed;
102
+ left: 0;
103
+ right: 0;
104
+ bottom: 0;
105
+ height: 40px;
106
+ padding: 0 8px;
107
+ background: #222;
108
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
109
+ font-weight: 200;
110
+ color: #fff;
111
+ z-index: 2147483647;
112
+ box-shadow: 0 -1px 0 rgba(255,255,255,0.1), inset 0 2px 6px rgba(0,0,0,0.8);
113
+ background-image: linear-gradient(rgba(0,0,0,0), rgba(0,0,0,0.3));
114
+ }
115
+
116
+ #copy-tuner-bar-log-menu {
117
+ position: fixed;
118
+ left: 0;
119
+ right: 0;
120
+ bottom: 40px;
121
+ max-height: calc(100vh - 40px);
122
+ background: #222;
123
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
124
+ color: #fff;
125
+ z-index: 2147483647;
126
+ overflow-y: auto;
127
+ }
128
+
129
+ #copy-tuner-bar-log-menu__tbody td {
130
+ padding: 2px 8px;
131
+ }
132
+
133
+ #copy-tuner-bar-log-menu__tbody tr:hover {
134
+ background: #444
135
+ }
136
+
137
+ #copy-tuner-bar-log-menu__tbody a {
138
+ color: #fff
139
+ }
140
+
141
+ #copy-tuner-bar-log-menu__tbody a:hover, #copy-tuner-bar-log-menu__tbody a:focus {
142
+ color: #fff;
143
+ text-decoration: underline;
144
+ }
145
+
146
+ .copy-tuner-bar-button {
147
+ position: relative;
148
+ display: inline-block;
149
+ color: #fff;
150
+ margin: 8px 1px;
151
+ height: 24px;
152
+ line-height: 24px;
153
+ padding: 0 8px;
154
+ font-size: 14px;
155
+ cursor: pointer;
156
+ vertical-align: middle;
157
+ background-color: #444;
158
+ background-image: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.2));
159
+ border-radius: 2px;
160
+ box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5), inset 0 1px 0 rgba(255, 255, 255, 0.2), inset 0 0 2px rgba(255, 255, 255, 0.2);
161
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4);
162
+ }
163
+
164
+ .copy-tuner-bar-button:hover, .copy-tuner-bar-button:focus {
165
+ color: #fff;
166
+ text-decoration: none;
167
+ background-color: #555;
168
+ }
@@ -0,0 +1,11 @@
1
+ <div id="copy-tuner-bar" style="display:none">
2
+ <%= link_to 'CopyTuner', CopyTunerClient.configuration.project_url, class: 'copy-tuner-bar-button', target: '_blank' %>
3
+ <a href="/copytuner" target="_blank" class="copy-tuner-bar-button">Sync</a>
4
+ <a href="javascript:void(0)" class="copy-tuner-bar-open-log copy-tuner-bar-button">Translations in this page</a>
5
+ </div>
6
+ <div id="copy-tuner-bar-log-menu" style="display:none">
7
+ <table>
8
+ <tbody id="copy-tuner-bar-log-menu__tbody" class="is-not-initialized">
9
+ </tbody>
10
+ </table>
11
+ </div>
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
9
9
  s.add_development_dependency 'aruba', '~> 0.6.0'
10
10
  s.add_development_dependency 'bourne'
11
11
  s.add_development_dependency 'cucumber', '~> 1.3.16'
12
- s.add_development_dependency 'rails', '~> 3.1.0'
12
+ s.add_development_dependency 'rails', '~> 4.2.6'
13
13
  s.add_development_dependency 'rake'
14
14
  s.add_development_dependency 'rspec', '~> 2.3'
15
15
  s.add_development_dependency 'sham_rack'
@@ -18,7 +18,6 @@ Gem::Specification.new do |s|
18
18
  s.add_development_dependency 'thin'
19
19
  s.add_development_dependency 'webmock'
20
20
  s.add_development_dependency 'yard'
21
- s.add_development_dependency 'turn'
22
21
  s.authors = ['SonicGarden']
23
22
  s.email = 'info@sonicgarden.jp'
24
23
  s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
@@ -37,6 +37,7 @@ When /^I configure the copy_tuner client with api key "([^"]*)"$/ do |api_key|
37
37
  config.api_key = "#{api_key}"
38
38
  config.polling_delay = 1
39
39
  config.host = 'localhost'
40
+ config.s3_host = 'localhost'
40
41
  config.secure = false
41
42
  config.sync_interval = 0
42
43
  config.port = #{FakeCopyTunerApp.port}
data/gemfiles/4.1.gemfile CHANGED
@@ -2,6 +2,6 @@
2
2
 
3
3
  source "http://rubygems.org"
4
4
 
5
- gem "rails", "4.1.13"
5
+ gem "rails", "4.1.15"
6
6
 
7
7
  gemspec :path => "../"
data/gemfiles/4.2.gemfile CHANGED
@@ -2,6 +2,6 @@
2
2
 
3
3
  source "http://rubygems.org"
4
4
 
5
- gem "rails", "4.2.4"
5
+ gem "rails", "4.2.6"
6
6
 
7
7
  gemspec :path => "../"
@@ -28,7 +28,7 @@ module CopyTunerClient
28
28
  # @option options [String] :ca_file path to root certificate file for ssl verification
29
29
  def initialize(options)
30
30
  [:api_key, :host, :port, :public, :http_read_timeout,
31
- :http_open_timeout, :secure, :logger, :ca_file].each do |option|
31
+ :http_open_timeout, :secure, :logger, :ca_file, :s3_host].each do |option|
32
32
  instance_variable_set "@#{option}", options[option]
33
33
  end
34
34
  end
@@ -44,7 +44,7 @@ module CopyTunerClient
44
44
  # @yield [Hash] downloaded blurbs
45
45
  # @raise [ConnectionError] if the connection fails
46
46
  def download
47
- connect do |http|
47
+ connect(s3_host) do |http|
48
48
  request = Net::HTTP::Get.new(uri(download_resource))
49
49
  request['If-None-Match'] = @etag
50
50
  response = http.request(request)
@@ -64,7 +64,7 @@ module CopyTunerClient
64
64
  # @param data [Hash] the blurbs to upload
65
65
  # @raise [ConnectionError] if the connection fails
66
66
  def upload(data)
67
- connect do |http|
67
+ connect(host) do |http|
68
68
  response = http.post(uri('draft_blurbs'), data.to_json, 'Content-Type' => 'application/json')
69
69
  check response
70
70
  log 'Uploaded missing translations'
@@ -74,7 +74,7 @@ module CopyTunerClient
74
74
  # Issues a deploy, marking all draft content as published for this project.
75
75
  # @raise [ConnectionError] if the connection fails
76
76
  def deploy
77
- connect do |http|
77
+ connect(host) do |http|
78
78
  response = http.post(uri('deploys'), '')
79
79
  check response
80
80
  log 'Deployed'
@@ -84,7 +84,7 @@ module CopyTunerClient
84
84
  private
85
85
 
86
86
  attr_reader :host, :port, :api_key, :http_read_timeout,
87
- :http_open_timeout, :secure, :logger, :ca_file
87
+ :http_open_timeout, :secure, :logger, :ca_file, :s3_host
88
88
 
89
89
  def public?
90
90
  @public
@@ -96,13 +96,13 @@ module CopyTunerClient
96
96
 
97
97
  def download_resource
98
98
  if public?
99
- 'published_blurbs'
99
+ 'published_blurbs.json'
100
100
  else
101
- 'draft_blurbs'
101
+ 'draft_blurbs.json'
102
102
  end
103
103
  end
104
104
 
105
- def connect
105
+ def connect(host)
106
106
  http = Net::HTTP.new(host, port)
107
107
  http.open_timeout = http_open_timeout
108
108
  http.read_timeout = http_read_timeout
@@ -18,7 +18,7 @@ module CopyTunerClient
18
18
  :client_version, :port, :protocol, :proxy_host, :proxy_pass,
19
19
  :proxy_port, :proxy_user, :secure, :polling_delay, :sync_interval,
20
20
  :sync_interval_staging, :sync_ignore_path_regex, :logger,
21
- :framework, :middleware, :disable_middleware, :disable_test_translation, :ca_file, :exclude_key_regexp].freeze
21
+ :framework, :middleware, :disable_middleware, :disable_test_translation, :ca_file, :exclude_key_regexp, :s3_host].freeze
22
22
 
23
23
  # @return [String] The API key for your project, found on the project edit form.
24
24
  attr_accessor :api_key
@@ -110,6 +110,9 @@ module CopyTunerClient
110
110
  # @return [Regexp] Regular expression to exclude keys.
111
111
  attr_accessor :exclude_key_regexp
112
112
 
113
+ # @return [String] The S3 host to connect to (defaults to +copy-tuner-us.s3.amazonaws.com+).
114
+ attr_accessor :s3_host
115
+
113
116
  # @return [Regexp] Copyray js injection pattern for debug
114
117
  attr_accessor :copyray_js_injection_regexp_for_debug
115
118
 
@@ -131,20 +134,23 @@ module CopyTunerClient
131
134
  self.polling_delay = 300
132
135
  self.sync_interval = 60
133
136
  self.sync_interval_staging = 0
134
- self.secure = false
137
+ self.secure = true
135
138
  self.test_environments = %w(test cucumber)
139
+ self.s3_host = 'copy-tuner-data-prod.s3.amazonaws.com'
136
140
 
137
141
  # Matches:
138
142
  # <script src="/assets/jquery.js"></script>
139
143
  # <script src="/assets/jquery-min.js"></script>
140
144
  # <script src="/assets/jquery.min.1.9.1.js"></script>
141
145
  # <script src="/assets/jquery.self-xxxxxx.js"></script>
142
- self.copyray_js_injection_regexp_for_debug = /<script[^>]+\/jquery([-.]{1}[\d\.]+)?([-.]{1}min)?(\.self\-[\da-f]++)?\.js[^>]+><\/script>/
146
+ # <script src="/assets/jquery2.self-a4777c1acac0a74340755725342901a54ed000955bf6f5320491b8b2514c86ec.js?body=1" data-turbolinks-track="true"></script>
147
+ self.copyray_js_injection_regexp_for_debug = /<script[^>]+\/jquery[23]?([-.]{1}[\d\.]+)?([-.]{1}min(\.[\d\.]+)?)?(\.self\-[\da-f]+)?\.js[^>]+><\/script>/
143
148
 
144
149
  # Matches:
145
150
  # <script src="/application-xxxxxxx.js"></script>
146
151
  # <script src="/application.js"></script>
147
152
  self.copyray_js_injection_regexp_for_precompiled = /<script[^>]+\/application.*\.js[^>]+><\/script>/
153
+
148
154
  @applied = false
149
155
  end
150
156
 
@@ -226,7 +232,7 @@ module CopyTunerClient
226
232
  end
227
233
 
228
234
  @applied = true
229
- logger.info "Client #{VERSION} ready"
235
+ logger.info "Client #{VERSION} ready (s3_download)"
230
236
  logger.info "Environment Info: #{environment_info}"
231
237
 
232
238
  unless test?
@@ -7,10 +7,13 @@ module CopyTunerClient
7
7
  end
8
8
 
9
9
  def call(env)
10
+ CopyTunerClient::TranslationLog.clear
10
11
  status, headers, response = @app.call(env)
11
12
  if html_headers?(status, headers) && body = response_body(response)
12
- body = append_css!(body)
13
- body = append_js!(body)
13
+ body = append_css(body)
14
+ body = append_js(body)
15
+ body = append_translation_logs(body)
16
+ body = inject_copy_tuner_bar(body)
14
17
  content_length = body.bytesize.to_s
15
18
  if ActionDispatch::Response === response
16
19
  response.body = [body]
@@ -31,11 +34,32 @@ module CopyTunerClient
31
34
  ActionController::Base.helpers
32
35
  end
33
36
 
34
- def append_css!(html)
37
+ def append_translation_logs(html)
38
+ json = CopyTunerClient::TranslationLog.translations.to_json
39
+ # Use block to avoid back reference \?
40
+ html.sub('</body>') { "<div data-copy-tuner-translation-log='#{ERB::Util.html_escape json}' data-copy-tuner-url='#{CopyTunerClient.configuration.project_url}'></div></body>" }
41
+ end
42
+
43
+ def inject_copy_tuner_bar(html)
44
+ html.sub(/<body[^>]*>/) { "#{$~}\n#{render_copy_tuner_bar}" }
45
+ end
46
+
47
+ def render_copy_tuner_bar
48
+ if ApplicationController.respond_to?(:render)
49
+ # Rails 5
50
+ ApplicationController.render(:partial => "/copy_tuner_bar").html_safe
51
+ else
52
+ # Rails <= 4.2
53
+ ac = ActionController::Base.new
54
+ ac.render_to_string(:partial => '/copy_tuner_bar').html_safe
55
+ end
56
+ end
57
+
58
+ def append_css(html)
35
59
  html.sub(/<body[^>]*>/) { "#{$~}\n#{css_tag}" }
36
60
  end
37
61
 
38
- def append_js!(html)
62
+ def append_js(html)
39
63
  regexp = if ::Rails.application.config.assets.debug
40
64
  CopyTunerClient.configuration.copyray_js_injection_regexp_for_debug
41
65
  else
@@ -1,4 +1,5 @@
1
1
  require 'copy_tuner_client/copyray'
2
+ require 'copy_tuner_client/translation_log'
2
3
 
3
4
  module CopyTunerClient
4
5
  # Connects to integration points for Rails 3 applications
@@ -19,6 +20,7 @@ module CopyTunerClient
19
20
  if CopyTunerClient.configuration.enable_middleware?
20
21
  alias_method_chain :translate, :copyray_comment
21
22
  alias :t :translate
23
+ CopyTunerClient::TranslationLog.install_hook
22
24
  end
23
25
  end
24
26
  end
@@ -0,0 +1,37 @@
1
+ module CopyTunerClient
2
+ class TranslationLog
3
+ def self.translations
4
+ Thread.current[:translations] ||= {}
5
+ end
6
+
7
+ def self.clear
8
+ Thread.current[:translations] = {}
9
+ end
10
+
11
+ def self.add(key, result)
12
+ translations[key] = result unless translations.key? key
13
+ end
14
+
15
+ def self.install_hook
16
+ I18n.class_eval do
17
+ class << self
18
+ def translate_with_copy_tuner_hook(*args)
19
+ key = args[0]
20
+ result = translate_without_copy_tuner_hook(*args)
21
+
22
+ if key.is_a?(Array)
23
+ key.zip(result).each { |k, v| CopyTunerClient::TranslationLog.add(k, v) unless v.is_a?(Array) }
24
+ else
25
+ CopyTunerClient::TranslationLog.add(key, result) unless result.is_a?(Array)
26
+ end
27
+ result
28
+ end
29
+ if CopyTunerClient.configuration.enable_middleware?
30
+ alias_method_chain :translate, :copy_tuner_hook
31
+ alias :t :translate
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -1,6 +1,6 @@
1
1
  module CopyTunerClient
2
2
  # Client version
3
- VERSION = '0.2.4'
3
+ VERSION = '0.3.0'.freeze
4
4
 
5
5
  # API version being used to communicate with the server
6
6
  API_VERSION = '2.0'.freeze
@@ -4,6 +4,7 @@ describe CopyTunerClient do
4
4
  def build_client(config = {})
5
5
  config[:logger] ||= FakeLogger.new
6
6
  default_config = CopyTunerClient::Configuration.new.to_hash
7
+ default_config[:s3_host] = 'copy-tuner.com'
7
8
  CopyTunerClient::Client.new(default_config.update(config))
8
9
  end
9
10
 
@@ -33,7 +33,7 @@ describe CopyTunerClient::Configuration do
33
33
  it { should have_config_option(:client_version).overridable.default(CopyTunerClient::VERSION) }
34
34
  it { should have_config_option(:client_name).overridable.default('CopyTuner Client') }
35
35
  it { should have_config_option(:client_url).overridable.default('https://rubygems.org/gems/copy_tuner_client') }
36
- it { should have_config_option(:secure).overridable.default(false) }
36
+ it { should have_config_option(:secure).overridable.default(true) }
37
37
  it { should have_config_option(:host).overridable.default('copy-tuner.com') }
38
38
  it { should have_config_option(:http_open_timeout).overridable.default(5) }
39
39
  it { should have_config_option(:http_read_timeout).overridable.default(5) }
@@ -190,6 +190,17 @@ describe CopyTunerClient::Configuration do
190
190
  prefixed_logger.should be_a(CopyTunerClient::PrefixedLogger)
191
191
  prefixed_logger.original_logger.should == logger
192
192
  end
193
+
194
+ describe 'copyray_js_injection_regexp_for_debug' do
195
+ let(:config) { CopyTunerClient::Configuration.new }
196
+ subject { config.copyray_js_injection_regexp_for_debug }
197
+
198
+ it { is_expected.to match '<script src="/assets/jquery.js"></script>' }
199
+ it { is_expected.to match '<script src="/assets/jquery-min.js"></script>' }
200
+ it { is_expected.to match '<script src="/assets/jquery.min.1.9.1.js"></script>' }
201
+ it { is_expected.to match '<script src="/assets/jquery/jquery.self-a4777c1acac0a74340755725342901a54ed000955bf6f5320491b8b2514c86ec.js?body=1" data-turbolinks-track="true"></script>' }
202
+ it { is_expected.to match '<script src="/assets/jquery2.self-a4777c1acac0a74340755725342901a54ed000955bf6f5320491b8b2514c86ec.js?body=1" data-turbolinks-track="true"></script>' }
203
+ end
193
204
  end
194
205
 
195
206
  shared_examples_for 'applied configuration' do
data/spec/spec_helper.rb CHANGED
@@ -15,7 +15,7 @@ Dir.glob(File.join(PROJECT_ROOT, 'spec', 'support', '**', '*.rb')).each do |file
15
15
  end
16
16
 
17
17
  WebMock.disable_net_connect!
18
- ShamRack.mount FakeCopyTunerApp.new, 'copy-tuner.com', 80
18
+ ShamRack.mount FakeCopyTunerApp.new, 'copy-tuner.com', 443
19
19
 
20
20
  RSpec.configure do |config|
21
21
  config.include ClientSpecHelpers
@@ -3,6 +3,7 @@ module ClientSpecHelpers
3
3
  CopyTunerClient.configuration = nil
4
4
  CopyTunerClient.configure(false) do |config|
5
5
  config.api_key = 'abc123'
6
+ config.s3_host = 'copy-tuner.com'
6
7
  end
7
8
  end
8
9
  end
@@ -43,14 +43,14 @@ class FakeCopyTunerApp < Sinatra::Base
43
43
  end
44
44
  end
45
45
 
46
- get '/api/v2/projects/:api_key/published_blurbs' do |api_key|
46
+ get '/api/v2/projects/:api_key/published_blurbs.json' do |api_key|
47
47
  with_project(api_key) do |project|
48
48
  etag project.etag
49
49
  project.published.to_json
50
50
  end
51
51
  end
52
52
 
53
- get '/api/v2/projects/:api_key/draft_blurbs' do |api_key|
53
+ get '/api/v2/projects/:api_key/draft_blurbs.json' do |api_key|
54
54
  with_project(api_key) do |project|
55
55
  etag project.etag
56
56
  project.draft.to_json
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: copy_tuner_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - SonicGarden
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-03 00:00:00.000000000 Z
11
+ date: 2016-08-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: i18n
@@ -100,14 +100,14 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 3.1.0
103
+ version: 4.2.6
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 3.1.0
110
+ version: 4.2.6
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rake
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -220,20 +220,6 @@ dependencies:
220
220
  - - ">="
221
221
  - !ruby/object:Gem::Version
222
222
  version: '0'
223
- - !ruby/object:Gem::Dependency
224
- name: turn
225
- requirement: !ruby/object:Gem::Requirement
226
- requirements:
227
- - - ">="
228
- - !ruby/object:Gem::Version
229
- version: '0'
230
- type: :development
231
- prerelease: false
232
- version_requirements: !ruby/object:Gem::Requirement
233
- requirements:
234
- - - ">="
235
- - !ruby/object:Gem::Version
236
- version: '0'
237
223
  description:
238
224
  email: info@sonicgarden.jp
239
225
  executables: []
@@ -245,19 +231,20 @@ files:
245
231
  - ".ruby-version"
246
232
  - ".travis.yml"
247
233
  - Appraisals
234
+ - CHANGELOG.md
248
235
  - Gemfile
249
236
  - Gemfile.lock
250
237
  - README.md
251
238
  - Rakefile
252
239
  - app/assets/javascripts/copyray.js.coffee
253
240
  - app/assets/stylesheets/copyray.css
241
+ - app/views/_copy_tuner_bar.html.erb
254
242
  - copy_tuner_client.gemspec
255
243
  - features/rails.feature
256
244
  - features/step_definitions/copycopter_server_steps.rb
257
245
  - features/step_definitions/rails_steps.rb
258
246
  - features/support/env.rb
259
247
  - features/support/rails_server.rb
260
- - gemfiles/3.2.gemfile
261
248
  - gemfiles/4.0.gemfile
262
249
  - gemfiles/4.1.gemfile
263
250
  - gemfiles/4.2.gemfile
@@ -277,6 +264,7 @@ files:
277
264
  - lib/copy_tuner_client/rails.rb
278
265
  - lib/copy_tuner_client/request_sync.rb
279
266
  - lib/copy_tuner_client/simple_form_extention.rb
267
+ - lib/copy_tuner_client/translation_log.rb
280
268
  - lib/copy_tuner_client/version.rb
281
269
  - lib/tasks/copy_tuner_client_tasks.rake
282
270
  - spec/copy_tuner_client/cache_spec.rb
data/gemfiles/3.2.gemfile DELETED
@@ -1,7 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "http://rubygems.org"
4
-
5
- gem "rails", "3.2.22"
6
-
7
- gemspec :path => "../"