fxos_rails 1.1.0 → 1.2.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: cd2f4d33f4d8450ce9f0291eee1c2fc298f7d07a
4
- data.tar.gz: 702d3b59bce3c4456a7b944d793d76f7b66ab254
3
+ metadata.gz: 20e89d5597fc110f3b7477b65320d0d4a5ff0947
4
+ data.tar.gz: f98e45f059f9d5cee05aba5b774c9ecaeb85639c
5
5
  SHA512:
6
- metadata.gz: 5d794331736f2f4462cc8c7e20f114ed3cdb5e39acc64c4828fe04df5b4c8cdb14f40b5bd8d45b65f9da4a5f379af8854ce4566799bbf0b9403195a32a5996d6
7
- data.tar.gz: 46126d2477d709a70b211d39141cc67139464b7ab3f830f3dec2ed4a178e489eba27febeaac6af175c7836b28ffbfe8d6c2ac9f2f68ea40b9de0402afeeb61c3
6
+ metadata.gz: 3f4570aac31eebc8d7ac85ed23cad648243096300fd3c56842d10b6960c97d9b4b4a47a8fc881dc66cd4167dadd707a6e7d54667113ead54abfb2dae736afdfe
7
+ data.tar.gz: 3274598cb3ecb33fba71cc4cb4cfa13e70f35cb8868d2cb7d553f560e3fa11dcd49f6e8eae8d1e2fe6f0f61b68aab3a278997efc6d5f205ac01144abcc87cab7
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright 2014 YOURNAME
1
+ Copyright 2014 Pablo Brasero Moreno
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -20,7 +20,7 @@ module FxosRails
20
20
  },
21
21
  type: 'web',
22
22
  default_locale: I18n.locale,
23
- launch_path: '/index.html',
23
+ launch_path: '/index.html'
24
24
  }
25
25
  end
26
26
 
@@ -3,33 +3,56 @@ require 'nokogiri'
3
3
  module FxosRails
4
4
  class Packager
5
5
 
6
+ class Error < StandardError; end
7
+ class DownloadError < Error; end
8
+ class BuildError < Error; end
9
+
10
+ def clean!
11
+ system <<-SHELL
12
+ rm -rf #{tmp_path}/#{app_host} &&
13
+ rm -rf public/assets
14
+ SHELL
15
+ end
16
+
6
17
  def package!
18
+ check_environment_exists!
7
19
  precompile
8
20
  with_local_build_server do
9
21
  download
10
22
  end
23
+ check_download_success!
11
24
  unify_js
12
25
  add_manifest
13
26
  put_files_in_package
27
+ rescue Error
28
+ puts $!.message
14
29
  end
15
30
 
16
31
 
17
32
  private
18
33
 
34
+ def build_env
35
+ 'build'
36
+ end
37
+
38
+ def ip
39
+ '127.0.0.1'
40
+ end
41
+
19
42
  def port
20
43
  3001
21
44
  end
22
45
 
23
46
  def with_local_build_server
24
47
  app_url = "http://#{app_host}/#{launch_path}"
25
- puts `./bin/rails server -e production -p #{port} -d`
48
+ run %{DISABLE_SPRING=1 ./bin/rails server -e #{build_env} -p #{port} -b #{ip} -d}
26
49
  yield(app_url)
27
50
  ensure
28
- system %{kill -TERM `cat tmp/pids/server.pid`}
51
+ run %{kill -TERM `cat tmp/pids/server.pid`}
29
52
  end
30
53
 
31
54
  def app_host
32
- "localhost:#{port}"
55
+ "#{ip}:#{port}"
33
56
  end
34
57
 
35
58
  def add_manifest
@@ -40,27 +63,74 @@ module FxosRails
40
63
  def put_files_in_package
41
64
  puts "Packaging..."
42
65
  package_path = local_app_path.join(package_filename)
43
- system <<-SHELL
44
- cd #{local_app_path} &&
45
- zip #{package_path} -r .
46
- SHELL
66
+ run %{cd #{local_app_path} && zip #{package_path} -r .}
47
67
  puts "Done. The package is now at #{package_path}"
48
68
  end
49
69
 
50
70
  def precompile
51
- `RAILS_ENV=production ./bin/rake assets:precompile`
71
+ run %{RAILS_ENV=#{build_env} ./bin/rake assets:precompile}
72
+ end
73
+
74
+ def check_download_success!
75
+ return unless download_errors.present?
76
+ bullet = ' * '
77
+ errors_list = bullet + download_errors.join("\n" + bullet)
78
+ msg = <<-EOM
79
+ ERROR: failed to grab some application files. Common causes include:
80
+ * Your app cannot be accessed at #{launch_path}
81
+ * Your app doesn't work locally when using the `#{build_env}` environment. For example, it could be missing a `#{build_env}` entry on `config/database.yml`
82
+ * Your app doesn't serve static files. Ensure the setting `config.serve_static_assets = true` on `config/environments/#{build_env}.rb`
83
+ * Some third-party assets are not being precompiled. This can happen with assets from gems. Ensure they are listed in the setting `config.assets.precompile` on `config/application.rb`
84
+
85
+ Specifically, the following URLs returned errors:
86
+ #{errors_list}
87
+ EOM
88
+ raise DownloadError, msg
89
+ end
90
+
91
+ def environment_config_path
92
+ Rails.root.join('config', 'environments', "#{build_env}.rb")
93
+ end
94
+
95
+ def check_environment_exists!
96
+ return if Rails.root.join(environment_config_path).exist?
97
+ msg = <<-EOM
98
+ The build process requires a `#{build_env}` environment. Please create it at #{environment_config_path}. You can simply follow these steps:
99
+ 1. Copy the production environment from config/environments/production.rb
100
+ 2. Edit the file to ensure the setting `config.serve_static_assets = true`
101
+ 3. Done!
102
+ EOM
103
+ raise BuildError, msg
52
104
  end
53
105
 
54
106
  def download
55
- system <<-SHELL
56
- cd #{tmp_path} &&
57
- rm -rf #{app_host} &&
58
- wget -r #{launch_url}
59
- SHELL
107
+ run %{cd #{tmp_path} && wget -nv -o #{wget_log_path} -r #{launch_url}}
60
108
  remove_query_strings
61
109
  add_icons
62
110
  end
63
111
 
112
+ def download_errors
113
+ @download_errors ||= begin
114
+ last_url = nil
115
+ url_re = %r{\b(https?://[^ ]+):}
116
+ timestamp_re = %r{\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d}
117
+ error_re = %r{#{timestamp_re} ERROR}
118
+ errors = []
119
+ wget_log_path.open.each_line do |line|
120
+ if url_re =~ line
121
+ last_url = $~[1]
122
+ elsif error_re =~ line
123
+ errors << last_url
124
+ end
125
+ end
126
+ errors.reject{|url| url =~ %r{/robots.txt$} }
127
+ end
128
+ end
129
+
130
+ def download_successful?
131
+ download_errors.blank?
132
+ end
133
+
64
134
  def remove_query_strings
65
135
  Dir[local_app_path + '**' + '*'].each do |path|
66
136
  if path['?']
@@ -71,7 +141,9 @@ module FxosRails
71
141
 
72
142
  def add_icons
73
143
  icons_path = Rails.root.join(*%w{app assets images icons})
74
- FileUtils.cp_r(icons_path, local_app_path)
144
+ if icons_path.exist?
145
+ FileUtils.cp_r(icons_path, local_app_path)
146
+ end
75
147
  end
76
148
 
77
149
  def unify_js
@@ -80,6 +152,10 @@ module FxosRails
80
152
  File.open(local_launch_path, 'r+') do |f|
81
153
  doc = Nokogiri::HTML(f)
82
154
  doc.css('script').each do |node|
155
+ type = node['type']
156
+ if type.present? && type != 'text/javascript'
157
+ next
158
+ end
83
159
  if src = node['src']
84
160
  src.gsub!(%r{^/}, '')
85
161
  full_path = local_app_path.join(src)
@@ -110,7 +186,7 @@ module FxosRails
110
186
  end
111
187
 
112
188
  def launch_url
113
- app_host + '/' + launch_path
189
+ 'http://' + app_host + '/' + launch_path
114
190
  end
115
191
 
116
192
  def launch_path
@@ -125,5 +201,14 @@ module FxosRails
125
201
  local_app_path + launch_path
126
202
  end
127
203
 
204
+ def run(command)
205
+ puts "*** #{command}"
206
+ system(command)
207
+ end
208
+
209
+ def wget_log_path
210
+ tmp_path.join('wget.log')
211
+ end
212
+
128
213
  end
129
214
  end
@@ -1,3 +1,3 @@
1
1
  module FxosRails
2
- VERSION = "1.1.0"
2
+ VERSION = "1.2.0"
3
3
  end
@@ -1,15 +1,13 @@
1
+ require 'fxos_rails/packager'
2
+
1
3
  namespace :fxos do
2
4
  desc "Delete files created by the build process"
3
5
  task :clean do
4
- system <<-SHELL
5
- rm -rf tmp/package &&
6
- rm -rf public/assets
7
- SHELL
6
+ FxosRails::Packager.new.clean!
8
7
  end
9
8
 
10
9
  desc "Build your app's package"
11
10
  task build: %w{clean environment} do
12
- require 'fxos_rails/packager'
13
11
  FxosRails::Packager.new.package!
14
12
  end
15
13
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fxos_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pablo Brasero
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-29 00:00:00.000000000 Z
11
+ date: 2015-01-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails