microstatic 0.0.1.pre1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -15,3 +15,5 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+
19
+ /.creds
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use --create default@microstatic
data/README.md CHANGED
@@ -1,3 +1,7 @@
1
1
  # Microstatic
2
2
 
3
3
  The microstatic gem turns generating your static site and deploying it to S3 into a one-liner.
4
+
5
+ ## Credits
6
+
7
+ The s3 deployment code was originally written by [Giles Alexander](http://twitter.com/gga)
@@ -0,0 +1,57 @@
1
+ require 'digest/md5'
2
+ require 'pathname'
3
+
4
+ require 'aws/s3'
5
+
6
+ # The following is based on code generously
7
+ # shared by Giles Alexander (@gga)
8
+ class Microstatic::S3Deployer
9
+ def initialize( local_dir, bucket, aws_creds )
10
+ [:access_key_id,:secret_access_key].each do |required_key|
11
+ raise ArgumentError, "must supply :#{required_key}" unless aws_creds.key?(required_key)
12
+ end
13
+
14
+ @local_dir = Pathname.new(local_dir)
15
+ @bucket = bucket
16
+ @aws_creds = aws_creds
17
+ end
18
+
19
+ def upload
20
+ AWS::S3::Base.establish_connection!(@aws_creds)
21
+
22
+ Pathname.glob(@local_dir+"**/*") do |child|
23
+ upload_file(child) unless child.directory?
24
+ end
25
+ end
26
+
27
+ def upload_file( file )
28
+ s3_key = file.relative_path_from(@local_dir).to_s
29
+
30
+ begin
31
+ s3_object = AWS::S3::S3Object.find(s3_key, @bucket)
32
+ rescue AWS::S3::NoSuchKey
33
+ s3_object = false
34
+ end
35
+
36
+ if !s3_object
37
+ log_action('CREATE', s3_key)
38
+ AWS::S3::S3Object.store(s3_key, file.open, @bucket)
39
+ else
40
+ s3_md5 = s3_object.about['etag'].sub(/"(.*)"/,'\1')
41
+ local_md5 = Digest::MD5.hexdigest( file.read )
42
+
43
+ if( s3_md5 == local_md5 )
44
+ log_action('NO CHANGE', s3_key)
45
+ else
46
+ log_action('UPDATE', s3_key)
47
+ AWS::S3::S3Object.store(s3_key, file.open, @bucket)
48
+ end
49
+ end
50
+ end
51
+
52
+ def log_action(action,file)
53
+ message = action.to_s.rjust(10) + " " + file
54
+ puts message
55
+ end
56
+ end
57
+
@@ -1,3 +1,3 @@
1
1
  module Microstatic
2
- VERSION = "0.0.1.pre1"
2
+ VERSION = "0.1.0"
3
3
  end
data/lib/microstatic.rb CHANGED
@@ -1,5 +1,2 @@
1
1
  require "microstatic/version"
2
-
3
- module Microstatic
4
- # Your code goes here...
5
- end
2
+ require "microstatic/s3_deployer"
data/microstatic.gemspec CHANGED
@@ -14,4 +14,11 @@ Gem::Specification.new do |gem|
14
14
  gem.name = "microstatic"
15
15
  gem.require_paths = ["lib"]
16
16
  gem.version = Microstatic::VERSION
17
+
18
+ gem.add_runtime_dependency "aws-s3", "~>0.6.3"
19
+
20
+ gem.add_development_dependency "rake"
21
+ gem.add_development_dependency "bundler"
22
+ gem.add_development_dependency "rspec", "~>2.13.0"
23
+ gem.add_development_dependency "pry-nav", "~> 0.2.3"
17
24
  end
@@ -0,0 +1,4 @@
1
+ a
2
+ b
3
+ c
4
+ d
@@ -0,0 +1 @@
1
+ asdafsaad
File without changes
@@ -0,0 +1,3 @@
1
+ require_relative '../../lib/microstatic'
2
+
3
+ require 'pry'
@@ -0,0 +1,27 @@
1
+ require_relative 'spec_helper'
2
+ require_relative '../../lib/microstatic/s3_deployer'
3
+
4
+ module Microstatic
5
+ describe 'uploading to a test bucket' do
6
+ def test_bucket
7
+ 'microstatic-test-bucket'
8
+ end
9
+
10
+ def test_dir
11
+ File.expand_path( "../fixtures", __FILE__ )
12
+ end
13
+
14
+ def aws_creds
15
+ {
16
+ :access_key_id => ENV.fetch('AWS_ACCESS_KEY_ID'),
17
+ :secret_access_key => ENV.fetch('AWS_SECRET_ACCESS_KEY')
18
+ }
19
+ end
20
+
21
+ it 'succeeds' do
22
+ deployer = S3Deployer.new( test_dir, test_bucket, aws_creds )
23
+ deployer.upload
24
+ end
25
+
26
+ end
27
+ end
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: microstatic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.pre1
5
- prerelease: 6
4
+ version: 0.1.0
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Pete Hodgson
@@ -10,7 +10,87 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
  date: 2013-05-26 00:00:00.000000000 Z
13
- dependencies: []
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: aws-s3
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.6.3
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 0.6.3
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: bundler
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rspec
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 2.13.0
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 2.13.0
78
+ - !ruby/object:Gem::Dependency
79
+ name: pry-nav
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: 0.2.3
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 0.2.3
14
94
  description: The microstatic gem turns generating your static site and deploying it
15
95
  to S3 into a one-liner.
16
96
  email:
@@ -20,13 +100,21 @@ extensions: []
20
100
  extra_rdoc_files: []
21
101
  files:
22
102
  - .gitignore
103
+ - .rvmrc
23
104
  - Gemfile
24
105
  - LICENSE
25
106
  - README.md
26
107
  - Rakefile
27
108
  - lib/microstatic.rb
109
+ - lib/microstatic/s3_deployer.rb
28
110
  - lib/microstatic/version.rb
29
111
  - microstatic.gemspec
112
+ - spec/integration/fixtures/example_file.txt
113
+ - spec/integration/fixtures/subdir/another_file.txt
114
+ - spec/integration/fixtures/subdir/foo.txt
115
+ - spec/integration/fixtures/subdir/subsubdir/deep.txt
116
+ - spec/integration/spec_helper.rb
117
+ - spec/integration/upload_to_test_bucket_spec.rb
30
118
  homepage: https://github.com/moredip/microstatic
31
119
  licenses: []
32
120
  post_install_message:
@@ -42,14 +130,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
42
130
  required_rubygems_version: !ruby/object:Gem::Requirement
43
131
  none: false
44
132
  requirements:
45
- - - ! '>'
133
+ - - ! '>='
46
134
  - !ruby/object:Gem::Version
47
- version: 1.3.1
135
+ version: '0'
48
136
  requirements: []
49
137
  rubyforge_project:
50
138
  rubygems_version: 1.8.24
51
139
  signing_key:
52
140
  specification_version: 3
53
141
  summary: Generate static sites from git and deploy them to an S3 bucket.
54
- test_files: []
55
- has_rdoc:
142
+ test_files:
143
+ - spec/integration/fixtures/example_file.txt
144
+ - spec/integration/fixtures/subdir/another_file.txt
145
+ - spec/integration/fixtures/subdir/foo.txt
146
+ - spec/integration/fixtures/subdir/subsubdir/deep.txt
147
+ - spec/integration/spec_helper.rb
148
+ - spec/integration/upload_to_test_bucket_spec.rb