yacht 0.2.7 → 0.3.0

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/.gitignore CHANGED
@@ -1,7 +1,12 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
1
5
  coverage
2
6
  tmp
3
7
  doc
4
8
  .yardoc
5
- *.gem
6
9
  .DS_Store
7
- Gemfile.lock
10
+
11
+ .rvmrc
12
+ .rbenv*
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.2
5
+ - ree
data/HISTORY.md CHANGED
@@ -1,3 +1,18 @@
1
+ ## [0.3.0](https://github.com/attinteractive/yacht/compare/0.2.7...0.3.0)
2
+
3
+ ### Less features
4
+ * Remove some unnecessary Rails support features ([#18](https://github.com/attinteractive/yacht/issues/18))
5
+
6
+ ### Add Travis CI to github repo
7
+
8
+ ## [0.2.7](https://github.com/attinteractive/yacht/compare/0.2.6...0.2.7)
9
+
10
+ ### Bugfixes
11
+ * Compatibility with ruby 1.8.7 ([#16](https://github.com/attinteractive/yacht/issues/16) Mani Tadayon)
12
+
13
+ ### New features
14
+ * Don't monkeypatch Hash, use a module instead ([#11](https://github.com/attinteractive/yacht/issues/11) Mani Tadayon)
15
+
1
16
  ## [0.2.6](https://github.com/attinteractive/yacht/compare/0.2.5...0.2.6)
2
17
 
3
18
  ### Bugfixes
data/LICENSE CHANGED
@@ -10,8 +10,6 @@ so, subject to the following conditions:
10
10
  The above copyright notice and this permission notice shall be included in all
11
11
  copies or substantial portions of the Software.
12
12
 
13
- The Software shall be used for Good, not Evil.
14
-
15
13
  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
14
  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
15
  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -1,4 +1,4 @@
1
- = Yacht
1
+ = Yacht {<img src="https://secure.travis-ci.org/attinteractive/yacht.png" alt="Build Status" />}[http://travis-ci.org/attinteractive/yacht]
2
2
 
3
3
  Yacht is an application configuration gem that lets you define settings for multiple environments in YAML files. It is similar to AppConfig[https://github.com/cjbottaro/app_config] with additional features like:
4
4
  * use of ClassyStruct for improved performance over OpenStruct
@@ -55,8 +55,7 @@ First create one or more of the following YAML files in the same directory to de
55
55
  # config/yacht/local.yml (optional)
56
56
  # any values set in local.yml will override values set in base.yml
57
57
  # useful for development and testing
58
- production:
59
- cdn_host: localhost
58
+ cdn_host: localhost
60
59
 
61
60
  === Step 2: Use +Yacht.my_key+ or <tt>Yacht['my_key']</tt> in ruby
62
61
 
@@ -78,12 +77,12 @@ First create one or more of the following YAML files in the same directory to de
78
77
  === <tt>Yacht::Loader.to_js_snippet</tt> export to javascript
79
78
  If you would like to access values stored in Yacht inside of javascript, there is a helper for that. First, create a YAML file to tell Yacht which keys should be exported:
80
79
 
81
- # config/yacht/base_keys.yml
80
+ # config/yacht/js_keys.yml
82
81
  # only keys listed here will be available in javascript
83
82
  # remember that any values exported to javascript will be visible to all visitors to your site
84
83
  - cookie_domain
85
84
 
86
- Then use +Yacht::Loader#to_js_snippet+ to create a string that can be eval'd or included in the DOM:
85
+ Then use <tt>Yacht::Loader#to_js_snippet</tt> to create a string that can be eval'd or included in the DOM:
87
86
 
88
87
  Yacht::Loader.to_js_snippet
89
88
  # => ";var Yacht = {\"cookie_domain\":\"example.com\"};"
@@ -94,27 +93,31 @@ You can also add in extra values from outside of Yacht using the :merge option,
94
93
  # => ";var Yacht = {\"cookie_domain\":\"example.com\",\"current_time\":\"06/29/2011\"};"
95
94
 
96
95
 
97
- === +yacht_js_snippet+ Rails helper
96
+ === Rails
97
+
98
+ To use Yacht inside of Rails, just add an initializer to <tt>config/initializers</tt>:
98
99
 
99
- When using Yacht inside of a Rails application, you can use the +yacht_js_snippet+ method to wrap the string from +Yacht::Loader#to_js_snippet+ in a script tag using Rails' +javascript_tag+ helper.
100
+ # config/initializers/00_yacht_init.rb
100
101
 
101
- Yacht.rails_env
102
- # => "development" # Yacht automatically adds the current Rails environment in ruby
103
- # If you want rails_env included in javascript, just add it to js_keys.yml
102
+ # Yacht needs to know where to find its YAML files...
103
+ # ...and the current Rails environment
104
+ Yacht::Loader.dir = Rails.root.join('config', 'yacht')
105
+ Yacht::Loader.environment = Rails.env
106
+
107
+ When used inside of a Rails application, the <tt>yacht_js_snippet</tt> Rails helper is included in the global <tt>ApplicationHelper</tt> so you can use it in views. <tt>yacht_js_snippet</tt> wraps the string from <tt>Yacht::Loader#to_js_snippet</tt> in a script tag using Rails' +javascript_tag+ helper.
104
108
 
105
109
  # inside a view or helper:
106
110
  yacht_js_snippet
107
- # => "<script type=\"text/javascript\">\n//<![CDATA[\n;var Yacht = {\"cookie_domain\":\"localhost\",\"rails_env\":\"development\"};\n//]]>\n</script>"
111
+ # => "<script type=\"text/javascript\">\n//<![CDATA[\n;var Yacht = {\"cookie_domain\":\"localhost\"\n//]]>\n</script>"
108
112
 
109
- # you can also pass options to yacht_js_snippet:
110
- yacht_js_snippet(:merge => {:current_time => Time.now.to_s})
113
+ # you can also pass options to yacht_js_snippet, like the the current Rails environment:
114
+ yacht_js_snippet(:merge => {:current_time => Time.now.to_s, :rails_env => Rails.env})
111
115
  # => "<script type=\"text/javascript\">\n//<![CDATA[\n;var Yacht = {\"cookie_domain\":\"localhost\",\"rails_env\":\"development\",\"current_time\":\"06/29/2011\"};\n//]]>\n</script>"
112
116
 
113
-
114
117
  == Ruby compatibility
115
118
 
116
119
  Yacht works with ruby 1.8.7 and 1.9.2.
117
120
 
118
121
  == License
119
122
 
120
- Yacht is licensed under the MIT License with one addition: The Software shall be used for Good, not Evil.
123
+ Yacht is licensed under the MIT License.
data/Rakefile CHANGED
@@ -1,8 +1,4 @@
1
- # encoding: utf-8
2
- require 'rubygems'
3
- require 'bundler'
4
- Bundler.setup
5
- Bundler::GemHelper.install_tasks
1
+ require 'bundler/gem_tasks'
6
2
 
7
3
  Dir['gem_tasks/**/*.rake'].each { |rake| load rake }
8
4
 
@@ -80,7 +80,6 @@ Feature: Load configuration settings
80
80
  }
81
81
  """
82
82
 
83
- @js
84
83
  Scenario: Generate a javascript snippet
85
84
  Given a file named "yacht/js_keys.yml" with:
86
85
  """
@@ -1,8 +1,6 @@
1
1
  module Yacht::RailsHelper
2
2
  # Create a string with a javascript version of Yacht values intended for inclusion in an HTML page
3
3
  #
4
- # @note environment will be set to Rails.env by default
5
- #
6
4
  # @example Set custom environment
7
5
  # yacht_js_snippet(:env => 'local_development')
8
6
  # # => "<script type=\"text/javascript\">;var Yacht = {\"foo\":\"bar\"};</script>"
@@ -1,12 +1,9 @@
1
1
  require "yacht/version"
2
2
 
3
- # require 'monkeypatches/hash'
4
-
5
3
  require "yacht/base"
6
4
  require "yacht/loader"
7
5
 
8
6
  if Object.const_defined?(:Rails)
9
- require "yacht/rails"
10
7
  require "monkeypatches/rails_helper"
11
8
  end
12
9
 
@@ -10,7 +10,7 @@ class Yacht::Loader
10
10
  attr_accessor :dir
11
11
 
12
12
  def full_file_path_for_config(config_type)
13
- raise Yacht::LoadError.new "No directory set" unless dir
13
+ raise Yacht::LoadError.new "No directory set" unless self.dir
14
14
 
15
15
  File.join( self.dir, "#{config_type}.yml" )
16
16
  end
@@ -1,3 +1,3 @@
1
1
  class Yacht
2
- VERSION = "0.2.7"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -17,7 +17,7 @@ describe 'Yacht::RailsHelper' do
17
17
  }
18
18
 
19
19
  before do
20
- Rails = stub('Rails')
20
+ Kernel.stub('Rails')
21
21
 
22
22
  require "monkeypatches/rails_helper"
23
23
 
@@ -7,6 +7,8 @@ Bundler.setup
7
7
 
8
8
  require 'yacht'
9
9
 
10
+ Dir['./spec/support/**/*.rb'].map {|f| require f}
11
+
10
12
  RSpec.configure do |config|
11
13
  config.before :all do
12
14
  # ==============
@@ -0,0 +1,57 @@
1
+ # Mock a constant within the passed block
2
+ # @example mock RAILS_ENV constant
3
+ # it "does not allow links to be added in production environment" do
4
+ # with_constants :RAILS_ENV => 'production' do
5
+ # get :add, @nonexistent_link.url
6
+ # response.should_not be_success
7
+ # end
8
+ # end
9
+ # @note adapted from:
10
+ # * http://stackoverflow.com/a/7849835/457819
11
+ # * http://digitaldumptruck.jotabout.com/?p=551
12
+ def with_constants(constants)
13
+ @constants_to_restore = {}
14
+ @constants_to_unset = []
15
+
16
+ constants.each do |name, val|
17
+ if Object.const_defined?(name)
18
+ @constants_to_restore[name] = Object.const_get(name)
19
+ else
20
+ @constants_to_unset << name
21
+ end
22
+
23
+ Object.const_set( name, val )
24
+ end
25
+
26
+ begin
27
+ yield
28
+ ensure
29
+ @constants_to_restore.each do |name, val|
30
+ Object.const_set( name, val )
31
+ end
32
+
33
+ @constants_to_unset.each do |name|
34
+ Object.send(:remove_const, name)
35
+ end
36
+ end
37
+ end
38
+
39
+ def without_constants(constants)
40
+ @constants_to_restore = {}
41
+
42
+ constants.each do |name, val|
43
+ if Object.const_defined?(name)
44
+ @constants_to_restore[name] = Object.const_get(name)
45
+ end
46
+
47
+ Object.send(:remove_const, name)
48
+ end
49
+
50
+ begin
51
+ yield
52
+ ensure
53
+ @constants_to_restore.each do |name, val|
54
+ Object.const_set( name, val )
55
+ end
56
+ end
57
+ end
@@ -26,7 +26,13 @@ describe Yacht::Loader do
26
26
  subject.stub(:to_hash).and_return(:foo => 'bar', :baz => 'snafu')
27
27
  subject.stub(:js_keys).and_return(:baz)
28
28
 
29
- subject.to_js_snippet(:merge => {:request_id => 123}).should == ';var Yacht = {"baz":"snafu","request_id":123};'
29
+ correct_snippets = [ # hash key order is random in ruby 1.8.7
30
+ ';var Yacht = {"baz":"snafu","request_id":123};',
31
+ ';var Yacht = {"request_id":123,"baz":"snafu"};'
32
+ ]
33
+
34
+ actual = subject.to_js_snippet(:merge => {:request_id => 123})
35
+ correct_snippets.should include(actual)
30
36
  end
31
37
  end
32
38
 
@@ -1,6 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
- lib = File.expand_path('../lib/', __FILE__)
3
- $:.unshift lib unless $:.include?(lib)
2
+ $:.push File.expand_path("../lib", __FILE__)
4
3
 
5
4
  require 'yacht/version'
6
5
 
@@ -8,28 +7,22 @@ Gem::Specification.new do |s|
8
7
  s.name = "yacht"
9
8
  s.version = Yacht::VERSION
10
9
  s.authors = ["Mani Tadayon", "Rico Rodriquez Collins"]
11
- s.description = "Yacht is Yet Another Configuration Helper Tool."
12
- s.summary = "yacht-#{s.version}"
13
10
  s.email = ["mtadayon@atti.com", "rcollins@atti.com"]
14
11
  s.homepage = "https://github.com/attinteractive/yacht"
12
+ s.summary = "yacht-#{s.version}"
13
+ s.description = "Yacht is Yet Another Configuration Helper Tool."
15
14
 
16
- s.platform = Gem::Platform::RUBY
17
-
18
- s.add_dependency "classy_struct", ">= 0.3.2"
15
+ s.add_dependency "classy_struct", "~> 0.3.2"
19
16
  s.add_dependency "json"
20
17
 
21
- s.add_development_dependency "gherkin", '>= 2.4.0'
18
+ s.add_development_dependency "gherkin", '~> 2.4.0'
22
19
  s.add_development_dependency "cucumber", '~> 1.0'
23
20
  s.add_development_dependency 'aruba'
24
- s.add_development_dependency "rspec", '>= 2.6.0'
25
- s.add_development_dependency "simplecov", '>= 0.4.1'
26
-
27
-
28
-
29
- s.required_rubygems_version = ">= 1.3.7"
30
- s.files = `git ls-files`.split("\n")
31
- s.test_files = `git ls-files -- spec/*`.split("\n")
32
- s.extra_rdoc_files = ["LICENSE", "README.rdoc"]
33
- s.rdoc_options = ["--charset=UTF-8"]
34
- s.require_path = "lib"
35
- end
21
+ s.add_development_dependency "rspec", '~> 2.6.0'
22
+ s.add_development_dependency "simplecov", '~> 0.4.1'
23
+
24
+ s.files = `git ls-files`.split("\n")
25
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
26
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
27
+ s.require_paths = ["lib"]
28
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yacht
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 2
9
- - 7
10
- version: 0.2.7
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Mani Tadayon
@@ -16,7 +16,8 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2011-07-27 00:00:00 Z
19
+ date: 2012-01-06 00:00:00 -08:00
20
+ default_executable:
20
21
  dependencies:
21
22
  - !ruby/object:Gem::Dependency
22
23
  name: classy_struct
@@ -24,7 +25,7 @@ dependencies:
24
25
  requirement: &id001 !ruby/object:Gem::Requirement
25
26
  none: false
26
27
  requirements:
27
- - - ">="
28
+ - - ~>
28
29
  - !ruby/object:Gem::Version
29
30
  hash: 23
30
31
  segments:
@@ -54,7 +55,7 @@ dependencies:
54
55
  requirement: &id003 !ruby/object:Gem::Requirement
55
56
  none: false
56
57
  requirements:
57
- - - ">="
58
+ - - ~>
58
59
  - !ruby/object:Gem::Version
59
60
  hash: 31
60
61
  segments:
@@ -99,7 +100,7 @@ dependencies:
99
100
  requirement: &id006 !ruby/object:Gem::Requirement
100
101
  none: false
101
102
  requirements:
102
- - - ">="
103
+ - - ~>
103
104
  - !ruby/object:Gem::Version
104
105
  hash: 23
105
106
  segments:
@@ -115,7 +116,7 @@ dependencies:
115
116
  requirement: &id007 !ruby/object:Gem::Requirement
116
117
  none: false
117
118
  requirements:
118
- - - ">="
119
+ - - ~>
119
120
  - !ruby/object:Gem::Version
120
121
  hash: 13
121
122
  segments:
@@ -133,13 +134,12 @@ executables: []
133
134
 
134
135
  extensions: []
135
136
 
136
- extra_rdoc_files:
137
- - LICENSE
138
- - README.rdoc
137
+ extra_rdoc_files: []
138
+
139
139
  files:
140
140
  - .gitignore
141
141
  - .rspec
142
- - .rvmrc
142
+ - .travis.yml
143
143
  - .yardopts
144
144
  - Gemfile
145
145
  - HISTORY.md
@@ -164,22 +164,22 @@ files:
164
164
  - lib/yacht/hash_helper.rb
165
165
  - lib/yacht/javascript.rb
166
166
  - lib/yacht/loader.rb
167
- - lib/yacht/rails.rb
168
167
  - lib/yacht/version.rb
169
168
  - spec/monkeypatches/rails_helper_spec.rb
170
169
  - spec/spec_helper.rb
170
+ - spec/support/constants.rb
171
171
  - spec/yacht/base_spec.rb
172
172
  - spec/yacht/classy_struct_spec.rb
173
173
  - spec/yacht/javascript_spec.rb
174
174
  - spec/yacht/loader_spec.rb
175
- - spec/yacht/rails_spec.rb
176
175
  - yacht.gemspec
176
+ has_rdoc: true
177
177
  homepage: https://github.com/attinteractive/yacht
178
178
  licenses: []
179
179
 
180
180
  post_install_message:
181
- rdoc_options:
182
- - --charset=UTF-8
181
+ rdoc_options: []
182
+
183
183
  require_paths:
184
184
  - lib
185
185
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -196,24 +196,31 @@ required_rubygems_version: !ruby/object:Gem::Requirement
196
196
  requirements:
197
197
  - - ">="
198
198
  - !ruby/object:Gem::Version
199
- hash: 21
199
+ hash: 3
200
200
  segments:
201
- - 1
202
- - 3
203
- - 7
204
- version: 1.3.7
201
+ - 0
202
+ version: "0"
205
203
  requirements: []
206
204
 
207
205
  rubyforge_project:
208
- rubygems_version: 1.8.6
206
+ rubygems_version: 1.6.2
209
207
  signing_key:
210
208
  specification_version: 3
211
- summary: yacht-0.2.7
209
+ summary: yacht-0.3.0
212
210
  test_files:
211
+ - features/load.feature
212
+ - features/missing_yaml_files.feature
213
+ - features/step_definitions/aruba_extension_steps.rb
214
+ - features/step_definitions/debugger_steps.rb
215
+ - features/step_definitions/error_handling_steps.rb
216
+ - features/step_definitions/javascript_steps.rb
217
+ - features/step_definitions/loader_steps.rb
218
+ - features/support/cleanup.rb
219
+ - features/support/env.rb
213
220
  - spec/monkeypatches/rails_helper_spec.rb
214
221
  - spec/spec_helper.rb
222
+ - spec/support/constants.rb
215
223
  - spec/yacht/base_spec.rb
216
224
  - spec/yacht/classy_struct_spec.rb
217
225
  - spec/yacht/javascript_spec.rb
218
226
  - spec/yacht/loader_spec.rb
219
- - spec/yacht/rails_spec.rb
data/.rvmrc DELETED
@@ -1,23 +0,0 @@
1
- #!/usr/bin/env bash
2
-
3
- # adapted from: http://rvm.beginrescueend.com/workflow/rvmrc/
4
-
5
- ruby_string="1.9.2-p0"
6
- gemset_name="yacht"
7
-
8
- if rvm list strings | grep -q "${ruby_string}" ; then
9
-
10
- # Load or create the specified environment
11
- if [[ -d "${rvm_path:-$HOME/.rvm}/environments" \
12
- && -s "${rvm_path:-$HOME/.rvm}/environments/${ruby_string}@${gemset_name}" ]] ; then
13
- \. "${rvm_path:-$HOME/.rvm}/environments/${ruby_string}@${gemset_name}"
14
- else
15
- rvm --create "${ruby_string}@${gemset_name}"
16
- fi
17
-
18
- else
19
-
20
- # Notify the user to install the desired interpreter before proceeding.
21
- echo "${ruby_string} was not found, please run 'rvm install ${ruby_string}' and then cd back into the project directory."
22
-
23
- fi
@@ -1,25 +0,0 @@
1
- class Yacht::Loader
2
- class << self
3
- # use the current rails environment by default
4
- def environment
5
- @environment ||= Rails.env
6
- end
7
-
8
- def dir
9
- @dir ||= Rails.root.join('config', 'yacht')
10
- end
11
-
12
- def full_file_path_for_config(config_type)
13
- dir.join("#{config_type}.yml")
14
- end
15
-
16
- # Add current Rails environment to defined keys
17
- def all_with_rails_env
18
- all_without_rails_env.merge('rails_env' => Rails.env)
19
- end
20
- # alias_method_chain is wonky in rspec with ruby 1.8.7
21
- alias_method :all_without_rails_env, :all
22
- alias_method :all, :all_with_rails_env
23
-
24
- end
25
- end
@@ -1,47 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "Rails support" do
4
- subject { Yacht::Loader }
5
-
6
- before do
7
- Rails = stub("Rails")
8
- Object.stub(:alias_method_chain).as_null_object
9
- require "yacht/rails"
10
- @yacht_dir = "/path/to/rails/config/yacht"
11
- end
12
-
13
- describe :environment do
14
- it "uses the current rails environment by default" do
15
- Rails.should_receive(:env).and_return('awesome')
16
-
17
- subject.environment.should == 'awesome'
18
- end
19
- end
20
-
21
- describe :dir do
22
- it "uses config/yacht by default" do
23
- Rails.stub_chain(:root, :join).and_return(@yacht_dir)
24
-
25
- subject.dir.should == @yacht_dir
26
- end
27
- end
28
-
29
- describe :full_file_path_for_config do
30
- it "calls dir.join" do
31
- fake_dir = stub("dir stub")
32
- subject.stub(:dir).and_return(fake_dir)
33
- fake_dir.should_receive(:join).with("some.yml")
34
-
35
- subject.full_file_path_for_config("some")
36
- end
37
- end
38
-
39
- describe :all_with_rails_env do
40
- it "adds the current Rails environment to super" do
41
- subject.stub(:all_without_rails_env).and_return(:foo => :bar)
42
-
43
- Rails.stub(:env).and_return(:awesome)
44
- subject.all_with_rails_env.should == {:foo => :bar, 'rails_env' => :awesome}
45
- end
46
- end
47
- end