asset_sync 0.1.9 → 0.1.10

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.
data/README.md CHANGED
@@ -87,8 +87,13 @@ The generator will create a Rails initializer at `config/initializers/asset_sync
87
87
  config.aws_access_key = ENV['AWS_ACCESS_KEY']
88
88
  config.aws_access_secret = ENV['AWS_ACCESS_SECRET']
89
89
  config.aws_bucket = ENV['AWS_BUCKET']
90
- # config.aws_region = 'eu-west-1'
91
90
  config.existing_remote_files = "keep"
91
+ # Increase upload performance by configuring your region
92
+ # config.aws_region = "eu-west-1"
93
+ # Automatically replace files with their equivalent gzip compressed version
94
+ # config.gzip_compression = true
95
+ # Use the Rails generated 'manifest.yml' file to produce the list of files to upload instead of searching the assets directory.
96
+ # config.manifest = true
92
97
  end
93
98
 
94
99
 
@@ -101,6 +106,10 @@ If you used the `--use-yml` flag, the generator will create a YAML file at `conf
101
106
  aws_access_secret: "<%= ENV['AWS_ACCESS_SECRET'] %>"
102
107
  # You may need to specify what region your S3 bucket is in
103
108
  # aws_region: "eu-west-1"
109
+ existing_remote_files: keep
110
+ # Automatically replace files with their equivalent gzip compressed version
111
+ # gzip_compression = true
112
+
104
113
 
105
114
  development:
106
115
  <<: *defaults
@@ -110,12 +119,16 @@ If you used the `--use-yml` flag, the generator will create a YAML file at `conf
110
119
  test:
111
120
  <<: *defaults
112
121
  aws_bucket: "rails-app-test"
113
- existing_remote_files: keep
122
+
123
+ staging:
124
+ <<: *defaults
125
+ aws_bucket: "rails-app-staging"
114
126
 
115
127
  production:
116
128
  <<: *defaults
117
129
  aws_bucket: "rails-app-production"
118
- existing_remote_files: delete # Existing pre-compiled assets on S3 will be deleted
130
+ # Existing pre-compiled assets on S3 will be deleted
131
+ # existing_remote_files: delete
119
132
 
120
133
  ### Environment Variables
121
134
 
@@ -138,6 +151,7 @@ Or add to a traditional unix system
138
151
  * **aws\_region**: the region your S3 bucket is in e.g. *eu-west-1*
139
152
  * **existing\_remote\_files**: what to do with previously precompiled files, options are **keep** or **delete**
140
153
  * **gzip\_compression**: when enabled, will automatically replace files that have a gzip compressed equivalent with the compressed version.
154
+ * **manifest**: when enabled, will use the `manifest.yml` generated by Rails to get the list of local files to upload. **experimental**
141
155
 
142
156
  ## Automatic gzip compression
143
157
 
@@ -10,6 +10,7 @@ module AssetSync
10
10
  attr_accessor :aws_region
11
11
  attr_accessor :existing_remote_files
12
12
  attr_accessor :gzip_compression
13
+ attr_accessor :manifest
13
14
 
14
15
  validates :aws_access_key, :presence => true
15
16
  validates :aws_access_secret, :presence => true
@@ -21,9 +22,15 @@ module AssetSync
21
22
  self.aws_region = nil
22
23
  self.existing_remote_files = 'keep'
23
24
  self.gzip_compression = false
25
+ self.manifest = false
24
26
  load_yml! if yml_exists?
25
27
  end
26
28
 
29
+ def manifest_path
30
+ default = File.join(Rails.root, 'public', 'assets', 'manifest.yml')
31
+ Rails.application.config.assets.manifest || default
32
+ end
33
+
27
34
  def gzip?
28
35
  self.gzip_compression
29
36
  end
@@ -52,6 +59,7 @@ module AssetSync
52
59
  self.aws_region = yml["aws_region"] if yml.has_key?("aws_region")
53
60
  self.existing_remote_files = yml["existing_remote_files"] if yml.has_key?("existing_remote_files")
54
61
  self.gzip_compression = yml["gzip_compression"] if yml.has_key?("gzip_compression")
62
+ self.manifest = yml["manifest"] if yml.has_key?("manifest")
55
63
 
56
64
  # TODO deprecate old style config settings
57
65
  self.aws_access_key = yml["access_key_id"] if yml.has_key?("access_key_id")
@@ -14,7 +14,8 @@ module AssetSync
14
14
  end
15
15
 
16
16
  def bucket
17
- @bucket ||= connection.directories.get(self.config.aws_bucket)
17
+ # fixes: https://github.com/rumblelabs/asset_sync/issues/18
18
+ @bucket ||= connection.directories.get(self.config.aws_bucket, :prefix => 'assets')
18
19
  end
19
20
 
20
21
  def keep_existing_remote_files?
@@ -26,12 +27,30 @@ module AssetSync
26
27
  end
27
28
 
28
29
  def local_files
29
- Dir["#{path}/assets/**/**"].map { |f| f[path.length+1,f.length-path.length] }
30
+ @local_files ||= get_local_files
30
31
  end
31
32
 
33
+ def get_local_files
34
+ if self.config.manifest
35
+ if File.exists?(self.config.manifest_path)
36
+ yml = YAML.load(IO.read(self.config.manifest_path))
37
+ STDERR.puts "Using: Manifest #{self.config.manifest_path}"
38
+ return yml.values.map { |f| File.join('assets', f) }
39
+ else
40
+ STDERR.puts "Warning: manifest.yml not found at #{self.config.manifest_path}"
41
+ end
42
+ end
43
+ STDERR.puts "Using: Directory Search of #{path}/assets"
44
+ Dir["#{path}/assets/**/**"].map { |f| f[path.length+1,f.length-path.length] }
45
+ end
46
+
32
47
  def get_remote_files
33
48
  raise BucketNotFound.new("AWS Bucket: #{self.config.aws_bucket} not found.") unless bucket
34
- return bucket.files.map { |f| f.key }
49
+ # fixes: https://github.com/rumblelabs/asset_sync/issues/16
50
+ # (work-around for https://github.com/fog/fog/issues/596)
51
+ files = []
52
+ bucket.files.each { |f| files << f.key }
53
+ return files
35
54
  end
36
55
 
37
56
  def delete_file(f, remote_files_to_delete)
@@ -44,7 +63,8 @@ module AssetSync
44
63
  def delete_extra_remote_files
45
64
  STDERR.puts "Fetching files to flag for delete"
46
65
  remote_files = get_remote_files
47
- from_remote_files_to_delete = (local_files | remote_files) - (local_files & remote_files)
66
+ # fixes: https://github.com/rumblelabs/asset_sync/issues/19
67
+ from_remote_files_to_delete = remote_files - local_files
48
68
 
49
69
  STDERR.puts "Flagging #{from_remote_files_to_delete.size} file(s) for deletion"
50
70
  # Delete unneeded remote files
@@ -99,7 +119,8 @@ module AssetSync
99
119
  def upload_files
100
120
  # get a fresh list of remote files
101
121
  remote_files = get_remote_files
102
- local_files_to_upload = (remote_files | local_files) - (remote_files & local_files)
122
+ # fixes: https://github.com/rumblelabs/asset_sync/issues/19
123
+ local_files_to_upload = local_files - remote_files
103
124
 
104
125
  # Upload new files
105
126
  local_files_to_upload.each do |f|
@@ -109,10 +130,11 @@ module AssetSync
109
130
  end
110
131
 
111
132
  def sync
112
- delete_extra_remote_files unless keep_existing_remote_files?
133
+ # fixes: https://github.com/rumblelabs/asset_sync/issues/19
113
134
  upload_files
135
+ delete_extra_remote_files unless keep_existing_remote_files?
114
136
  STDERR.puts "Done."
115
137
  end
116
138
 
117
139
  end
118
- end
140
+ end
@@ -1,3 +1,3 @@
1
1
  module AssetSync
2
- VERSION = "0.1.9"
2
+ VERSION = "0.1.10"
3
3
  end
@@ -7,4 +7,6 @@ AssetSync.configure do |config|
7
7
  # config.aws_region = "eu-west-1"
8
8
  # Automatically replace files with their equivalent gzip compressed version
9
9
  # config.gzip_compression = true
10
+ # Use the Rails generated 'manifest.yml' file to produce the list of files to upload instead of searching the assets directory.
11
+ # config.manifest = true
10
12
  end
@@ -43,6 +43,10 @@ describe AssetSync, 'with initializer' do
43
43
  AssetSync.config.gzip_compression.should be_false
44
44
  end
45
45
 
46
+ it "should default manifest to false" do
47
+ AssetSync.config.manifest.should be_false
48
+ end
49
+
46
50
  end
47
51
 
48
52
 
@@ -77,6 +81,10 @@ describe AssetSync, 'from yml' do
77
81
  AssetSync.config.gzip_compression.should be_false
78
82
  end
79
83
 
84
+ it "should default manifest to false" do
85
+ AssetSync.config.manifest.should be_false
86
+ end
87
+
80
88
  end
81
89
 
82
90
  describe AssetSync, 'with no configuration' do
@@ -104,4 +112,29 @@ describe AssetSync, 'with gzip_compression enabled' do
104
112
  AssetSync.config.gzip?.should be_true
105
113
  end
106
114
 
107
- end
115
+ end
116
+
117
+ describe AssetSync, 'with manifest enabled' do
118
+
119
+ before(:all) do
120
+ Rails.root = 'without_yml'
121
+ AssetSync.config = AssetSync::Config.new
122
+ AssetSync.config.manifest = true
123
+ end
124
+
125
+ it "config.manifest should be true" do
126
+ AssetSync.config.manifest.should be_true
127
+ end
128
+
129
+ it "config.manifest_path should default to public/assets.." do
130
+ pending
131
+ AssetSync.config.manifest_path.should =~ "public/assets/manifest.yml"
132
+ end
133
+
134
+ it "config.manifest_path should default to public/assets.." do
135
+ pending
136
+ Rails.app.config.assets.manifest = "/var/assets/manifest.yml"
137
+ AssetSync.config.manifest_path.should == "/var/assets/manifest.yml"
138
+ end
139
+
140
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asset_sync
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.1.10
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -14,7 +14,7 @@ date: 2011-11-05 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: fog
17
- requirement: &70129910998440 !ruby/object:Gem::Requirement
17
+ requirement: &70137703451140 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70129910998440
25
+ version_requirements: *70137703451140
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: activemodel
28
- requirement: &70129910980480 !ruby/object:Gem::Requirement
28
+ requirement: &70137703450520 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *70129910980480
36
+ version_requirements: *70137703450520
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: rspec
39
- requirement: &70129910979840 !ruby/object:Gem::Requirement
39
+ requirement: &70137703449900 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '0'
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *70129910979840
47
+ version_requirements: *70137703449900
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: bundler
50
- requirement: &70129910979280 !ruby/object:Gem::Requirement
50
+ requirement: &70137703449240 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '0'
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *70129910979280
58
+ version_requirements: *70137703449240
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: jeweler
61
- requirement: &70129910978860 !ruby/object:Gem::Requirement
61
+ requirement: &70137703448620 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,7 +66,7 @@ dependencies:
66
66
  version: '0'
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *70129910978860
69
+ version_requirements: *70137703448620
70
70
  description: After you run assets:precompile your assets will be synchronised with
71
71
  your S3 bucket, deleting unused files and only uploading the files it needs to.
72
72
  email: