frizz 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -12,19 +12,30 @@ Frizz is a utility for deploying static sites to S3.
12
12
 
13
13
  Add this line to your application's Gemfile:
14
14
 
15
- gem "frizz"
15
+ ```ruby
16
+ gem "frizz"
17
+ ```
16
18
 
17
19
  And then execute:
18
20
 
19
- $ bundle
21
+ ```bash
22
+ $ bundle
23
+ ```
20
24
 
21
25
  Or install it yourself as:
22
26
 
23
- $ gem install frizz
27
+ ```bash
28
+ $ gem install frizz
29
+ ```
24
30
 
25
31
  ## Usage
26
32
 
27
- ### Configure AWS
33
+ ### Configuration
34
+
35
+ #### AWS
36
+
37
+ Frizz will automatically look for this in ENV vars: `AWS_ACCESS_KEY_ID`
38
+ and `AWS_SECRET_ACCESS_KEY`. Or you can optionally configure manually:
28
39
 
29
40
  ```ruby
30
41
  Frizz.configure do |config|
@@ -33,13 +44,101 @@ Frizz.configure do |config|
33
44
  end
34
45
  ```
35
46
 
36
- ### Setup your site and deploy!
47
+ ### Basic deploys
37
48
 
38
49
  ```ruby
39
50
  site = Frizz::Site.new("my-bucket-name.com")
40
51
  site.deploy!
41
52
  ```
42
53
 
54
+ ## Usage With Middleman
55
+
56
+ Managing more than the basic two environments (dev and build) in a Middleman app
57
+ can be a pain, which is why Frizz comes with optional Middleman-specific
58
+ functionality to make things fun again!
59
+
60
+ ### `frizz.yml`
61
+
62
+ Create a `frizz.yml` in the root of your project. This is how Frizz will know
63
+ what you want in each of your environments and where you want to deploy them
64
+ to.
65
+
66
+ ### Rake tasks
67
+
68
+ Based on your `frizz.yml`, Frizz will create useful Rake tasks for you.
69
+
70
+ #### Configuration
71
+
72
+ Add it to your `Rakefile`:
73
+
74
+ ```ruby
75
+ require "frizz/middleman/tasks"
76
+ ```
77
+
78
+ #### Usage
79
+
80
+ With the following `frizz.yml`:
81
+
82
+ ```yaml
83
+ environments:
84
+ staging:
85
+ bucket: "staging.example.com"
86
+ production:
87
+ bucket: "example.com"
88
+ ```
89
+
90
+ Frizz would give us the following Rake tasks:
91
+
92
+ ```bash
93
+ $ rake -T
94
+ rake frizz:build:production # Build production
95
+ rake frizz:build:staging # Build staging
96
+ rake frizz:deploy:production # Build and deploy production
97
+ rake frizz:deploy:staging # Build and deploy staging
98
+ ```
99
+
100
+ ### Settings and Variables for each of your environments
101
+
102
+ Ever built a frontend app and wanted to hit a different API for dev, staging,
103
+ and production environments? Frizz lets you specify arbitrary environment-specific
104
+ configurations in `frizz.yml` and access them later in your Middleman app's views.
105
+
106
+ #### Configuration
107
+
108
+ Add it to your `config.rb`:
109
+
110
+ ```ruby
111
+ require "frizz/middleman/view_helpers"
112
+ helpers Frizz::Middleman::ViewHelpers
113
+ ```
114
+
115
+ #### Usage
116
+
117
+ With the following `frizz.yml`:
118
+
119
+ ```yaml
120
+ environments:
121
+ staging:
122
+ bucket: "staging.example.com"
123
+ api_root: http://api.staging.example.com/v0
124
+ welcome_message: I'm A Staging Server
125
+ production:
126
+ bucket: "example.com"
127
+ api_root: http://api.example.com/v0
128
+ welcome_message: I'm A Production Server
129
+ development:
130
+ api_root: http://localhost:3000/v0
131
+ welcome_message: Developers! Developers! Developers!
132
+ ```
133
+
134
+ You would be able to access your variables from views like so:
135
+
136
+ ```html
137
+ <script type="text/javascript">MyApp.config.apiRoot = "<%= frizz.api_root %>";</script>
138
+ <h1><%= frizz.welcome_message %></h1>
139
+ <h2><%= "And hi QA team!" if frizz.staging? %></h2>
140
+ ```
141
+
43
142
  ## Contributing
44
143
 
45
144
  1. Fork it
@@ -0,0 +1,40 @@
1
+ module Frizz
2
+ class Configuration
3
+ YAML_FILENAME = "frizz.yml"
4
+
5
+ attr_accessor :access_key_id, :secret_access_key, :environments,
6
+ :current_environment
7
+
8
+ def initialize
9
+ self.environments = {}
10
+
11
+ # Attempt to load defaults from ENV
12
+ self.access_key_id = ENV["AWS_ACCESS_KEY_ID"]
13
+ self.secret_access_key = ENV["AWS_SECRET_ACCESS_KEY"]
14
+ self.current_environment = ENV["FRIZZ_ENV"] || "development"
15
+
16
+ # Allow to be overridden in yaml
17
+ load_yaml!
18
+ end
19
+
20
+ def environment
21
+ environments[current_environment]
22
+ end
23
+
24
+ def environments=(environments_data)
25
+ @environments = environments_data.each_with_object({}) do |(name, data), obj|
26
+ obj[name] = Environment.new(name, data)
27
+ end
28
+ end
29
+
30
+ private
31
+
32
+ def load_yaml!
33
+ return unless File.exists?(YAML_FILENAME)
34
+
35
+ YAML.load_file(YAML_FILENAME).each do |key, value|
36
+ send "#{key}=", value
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,24 @@
1
+ module Frizz
2
+ class Environment
3
+ attr_reader :name
4
+
5
+ def initialize(name, data)
6
+ @name = name
7
+
8
+ data.each do |attribute, value|
9
+ ivar_name = "@#{attribute}"
10
+ instance_variable_set(ivar_name, value)
11
+
12
+ self.class.send :define_method, attribute do
13
+ instance_variable_get(ivar_name)
14
+ end
15
+ end
16
+ end
17
+
18
+ # This is a creative way to allow for calling frizz.production? or
19
+ # frizz.staging? from the Middleman view helpers
20
+ def method_missing(meth, args, &block)
21
+ name == meth.to_s
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,53 @@
1
+ require "frizz"
2
+
3
+ module Frizz
4
+ module Middleman
5
+ module CmdHelper
6
+ def self.run_with_live_output(cmd)
7
+ IO.popen(cmd) do |io|
8
+ io.each do |line|
9
+ puts line
10
+ end
11
+ end
12
+ end
13
+ end
14
+
15
+ class Tasks
16
+ include Rake::DSL
17
+
18
+ def self.install!
19
+ new.install
20
+ end
21
+
22
+ def install
23
+ namespace :frizz do
24
+ namespace :build do
25
+ relevant_environments.each do |name, env|
26
+ desc "Build #{env.name}"
27
+ task env.name do
28
+ CmdHelper.run_with_live_output "FRIZZ_ENV=#{env.name} middleman build"
29
+ end
30
+ end
31
+ end
32
+
33
+ namespace :deploy do
34
+ relevant_environments.each do |name, env|
35
+ desc "Build and deploy #{env.name}"
36
+ task env.name => ["frizz:build:#{env.name}"] do
37
+ Frizz::Site.new(env.bucket).deploy!
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+
44
+ private
45
+
46
+ def relevant_environments
47
+ Frizz.configuration.environments.reject { |name, env| name == "development" }
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ Frizz::Middleman::Tasks.install!
@@ -0,0 +1,9 @@
1
+ module Frizz
2
+ module Middleman
3
+ module ViewHelpers
4
+ def frizz
5
+ Frizz.configuration.environment
6
+ end
7
+ end
8
+ end
9
+ end
data/lib/frizz/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Frizz
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/frizz.rb CHANGED
@@ -6,8 +6,8 @@ module Frizz
6
6
  autoload :Local, "frizz/local"
7
7
  autoload :Remote, "frizz/remote"
8
8
  autoload :Sync, "frizz/sync"
9
-
10
- Configuration = Struct.new(:access_key_id, :secret_access_key)
9
+ autoload :Configuration, "frizz/configuration"
10
+ autoload :Environment, "frizz/environment"
11
11
 
12
12
  class << self
13
13
  def configure
metadata CHANGED
@@ -2,14 +2,14 @@
2
2
  name: frizz
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.1
5
+ version: 0.0.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - patbenatar
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-09-30 00:00:00.000000000 Z
12
+ date: 2013-10-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  prerelease: false
@@ -105,7 +105,11 @@ files:
105
105
  - Rakefile
106
106
  - frizz.gemspec
107
107
  - lib/frizz.rb
108
+ - lib/frizz/configuration.rb
109
+ - lib/frizz/environment.rb
108
110
  - lib/frizz/local.rb
111
+ - lib/frizz/middleman/tasks.rb
112
+ - lib/frizz/middleman/view_helpers.rb
109
113
  - lib/frizz/remote.rb
110
114
  - lib/frizz/site.rb
111
115
  - lib/frizz/sync.rb
@@ -123,7 +127,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
123
127
  - !ruby/object:Gem::Version
124
128
  segments:
125
129
  - 0
126
- hash: -3366162893133711877
130
+ hash: 2336966259519313102
127
131
  version: '0'
128
132
  none: false
129
133
  required_rubygems_version: !ruby/object:Gem::Requirement
@@ -132,7 +136,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
132
136
  - !ruby/object:Gem::Version
133
137
  segments:
134
138
  - 0
135
- hash: -3366162893133711877
139
+ hash: 2336966259519313102
136
140
  version: '0'
137
141
  none: false
138
142
  requirements: []