bower 0.0.1

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.
Files changed (64) hide show
  1. data/.gemtest +0 -0
  2. data/.gitignore +40 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +8 -0
  5. data/.yardopts +3 -0
  6. data/Gemfile +24 -0
  7. data/Guardfile +6 -0
  8. data/LICENSE.md +20 -0
  9. data/README.md +65 -0
  10. data/Rakefile +17 -0
  11. data/bower.gemspec +21 -0
  12. data/lib/bower.rb +19 -0
  13. data/lib/bower/environment.rb +43 -0
  14. data/lib/bower/railtie.rb +10 -0
  15. data/lib/bower/version.rb +3 -0
  16. data/lib/generators/bower/install_generator.rb +23 -0
  17. data/lib/generators/templates/bowerrc +6 -0
  18. data/lib/generators/templates/component.json +17 -0
  19. data/spec/bower/environment_spec.rb +71 -0
  20. data/spec/bower_spec.rb +25 -0
  21. data/spec/dummy/.bowerrc +6 -0
  22. data/spec/dummy/README.rdoc +261 -0
  23. data/spec/dummy/Rakefile +7 -0
  24. data/spec/dummy/app/assets/javascripts/application.js +14 -0
  25. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  26. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  27. data/spec/dummy/app/controllers/static_controller.rb +3 -0
  28. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  29. data/spec/dummy/app/mailers/.gitkeep +0 -0
  30. data/spec/dummy/app/models/.gitkeep +0 -0
  31. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  32. data/spec/dummy/app/views/static/home.html.erb +1 -0
  33. data/spec/dummy/components/component.json +7 -0
  34. data/spec/dummy/components/coolio/component.json +9 -0
  35. data/spec/dummy/components/coolio/coolio.js +1 -0
  36. data/spec/dummy/config.ru +4 -0
  37. data/spec/dummy/config/application.rb +64 -0
  38. data/spec/dummy/config/boot.rb +10 -0
  39. data/spec/dummy/config/database.yml +25 -0
  40. data/spec/dummy/config/environment.rb +5 -0
  41. data/spec/dummy/config/environments/development.rb +37 -0
  42. data/spec/dummy/config/environments/production.rb +67 -0
  43. data/spec/dummy/config/environments/test.rb +37 -0
  44. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  45. data/spec/dummy/config/initializers/inflections.rb +15 -0
  46. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  47. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  48. data/spec/dummy/config/initializers/session_store.rb +8 -0
  49. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  50. data/spec/dummy/config/locales/en.yml +5 -0
  51. data/spec/dummy/config/routes.rb +3 -0
  52. data/spec/dummy/db/test.sqlite3 +0 -0
  53. data/spec/dummy/lib/assets/.gitkeep +0 -0
  54. data/spec/dummy/log/.gitkeep +0 -0
  55. data/spec/dummy/public/404.html +26 -0
  56. data/spec/dummy/public/422.html +26 -0
  57. data/spec/dummy/public/500.html +25 -0
  58. data/spec/dummy/public/favicon.ico +0 -0
  59. data/spec/dummy/script/rails +6 -0
  60. data/spec/features/bower_integration_spec.rb +25 -0
  61. data/spec/fixtures/.bowerrc +4 -0
  62. data/spec/generators/bower/install_generator_spec.rb +24 -0
  63. data/spec/spec_helper.rb +38 -0
  64. metadata +159 -0
File without changes
@@ -0,0 +1,40 @@
1
+ *.gem
2
+ *.rbc
3
+ *.sw[a-p]
4
+ *.tmproj
5
+ *.tmproject
6
+ *.un~
7
+ *~
8
+ .DS_Store
9
+ .Spotlight-V100
10
+ .Trashes
11
+ ._*
12
+ .bundle
13
+ .config
14
+ .directory
15
+ .elc
16
+ .emacs.desktop
17
+ .emacs.desktop.lock
18
+ .redcar
19
+ .yardoc
20
+ Desktop.ini
21
+ Gemfile.lock
22
+ Icon?
23
+ InstalledFiles
24
+ Session.vim
25
+ Thumbs.db
26
+ \#*\#
27
+ _yardoc
28
+ auto-save-list
29
+ coverage
30
+ doc
31
+ lib/bundler/man
32
+ pkg
33
+ pkg/*
34
+ rdoc
35
+ spec/reports
36
+ test/tmp
37
+ test/version_tmp
38
+ tmp
39
+ tmtags
40
+ tramp
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --format=nested
3
+ --backtrace
@@ -0,0 +1,8 @@
1
+ rvm:
2
+ - 1.8.7
3
+ - 1.9.2
4
+ - 1.9.3
5
+ - jruby
6
+ - rbx
7
+ - ree
8
+ - ruby-head
@@ -0,0 +1,3 @@
1
+ --markup markdown
2
+ -
3
+ LICENSE.md
data/Gemfile ADDED
@@ -0,0 +1,24 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rake'
4
+ gem 'yard'
5
+ gem 'multi_json'
6
+
7
+ group :development do
8
+ gem 'kramdown'
9
+ gem 'guard-rspec'
10
+ end
11
+
12
+ group :test do
13
+ gem 'json', :platforms => :ruby_18
14
+ gem 'rspec-rails'
15
+ gem 'capybara'
16
+ gem 'jquery-rails'
17
+ gem "sprockets", "2.2.2.backport1"
18
+ gem 'rails', '~> 3.2.12'
19
+ gem 'sqlite3'
20
+ gem 'generator_spec'
21
+ gem 'simplecov', :require => false
22
+ end
23
+
24
+ gemspec
@@ -0,0 +1,6 @@
1
+ guard 'rspec', :version => 2 do
2
+ watch(%r{^spec/.+_spec\.rb$})
3
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
4
+ watch('spec/spec_helper.rb') { "spec" }
5
+ end
6
+
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2013 Steve Agalloco
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,65 @@
1
+ # Bower
2
+
3
+ [Bower](http://twitter.github.com/bower/) integration for your ruby apps.
4
+
5
+ ## Usage with Sprockets
6
+
7
+ ### Rails
8
+
9
+ Add `bower` to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'bower'
13
+ ```
14
+
15
+ Rails 4 ships with an updated version of Sprockets that supports bower's `component.json` file. If you are running, Rails 3, then you need to require Sprockets [`2.2.2.backport1`](http://rubygems.org/gems/sprockets/versions/2.2.2.backport1):
16
+
17
+ ```ruby
18
+ gem 'sprockets', '2.2.2.backport1'
19
+ ```
20
+
21
+ The gem includes a generator that sets up your project:
22
+
23
+ rails generate bower:install
24
+
25
+ This will install a `.bowerrc` file to your project's root directory that looks like this:
26
+
27
+ ```json
28
+ {
29
+ "directory" : "components",
30
+ "json" : "components/component.json",
31
+ "endpoint" : "https://bower.herokuapp.com",
32
+ "searchpath" : []
33
+ }
34
+
35
+ ```
36
+
37
+ Add your dependencies to `components/component.json` then use bower (`bower install`, etc.) as you would in any other project.
38
+
39
+ ### Non-Rails Projects
40
+
41
+ While offering less capability than when used in Rails' asset pipeline, you can still use the `bower` gem in a non-Rails project. Just require the gem and append the corresponding directory to Sprocket's load path:
42
+
43
+ ```ruby
44
+ require 'sprockets'
45
+ require 'bower'
46
+
47
+ environment = Sprockets::Environment.new
48
+ environment.append_path Bower.environment.directory
49
+ ```
50
+
51
+ ## How this gem differs from other techniques
52
+
53
+ For Rails apps, integrating bower components into `lib/assets` and/or `vendor/assets` seems like the wrong approach. Since bower can support multiple searchpaths, the need to make a distinction between external dependencies and frameworks does not exist. It can all be managed in once place. This gem takes a more opinionated approach and installs components to `components/` in your project's root by default. You can always change it someplace
54
+
55
+ ## TODO
56
+
57
+ When used with Sprockets, you still need to use a `require` directive in order to require a component's files. This seems like something that should just work.
58
+
59
+ ## Contributing
60
+
61
+ Pull requests welcome: fork, make a topic branch, commit (squash when possible) *with tests* and I'll happily consider.
62
+
63
+ ## Copyright
64
+
65
+ Copyright (c) 2013 Steve Agalloco. See [LICENSE](LICENSE.md) for details.
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env rake
2
+
3
+ require 'bundler/gem_tasks'
4
+
5
+ require 'rspec/core/rake_task'
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ task :default => :spec
9
+ task :test => :spec
10
+
11
+ require 'yard'
12
+ namespace :doc do
13
+ YARD::Rake::YardocTask.new do |task|
14
+ task.files = ['LICENSE.md', 'lib/**/*.rb']
15
+ task.options = ['--markup', 'markdown']
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'bower/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = 'bower'
8
+ gem.version = Bower::VERSION
9
+ gem.homepage = 'https://github.com/spagalloco/bower'
10
+
11
+ gem.author = "Steve Agalloco"
12
+ gem.email = 'steve.agalloco@gmail.com'
13
+ gem.description = 'Bower integration for your ruby projects.'
14
+ gem.summary = 'Bower integration for your ruby projects.'
15
+
16
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{|f| File.basename(f)}
17
+ gem.files = `git ls-files`.split("\n")
18
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+
20
+ gem.require_paths = ['lib']
21
+ end
@@ -0,0 +1,19 @@
1
+ require 'bower/environment'
2
+
3
+ module Bower
4
+ extend self
5
+
6
+ def install
7
+ environment.install
8
+ end
9
+
10
+ def update
11
+ environment.update
12
+ end
13
+
14
+ def environment
15
+ @environment ||= Bower::Environment.setup('.bowerrc')
16
+ end
17
+
18
+ require "bower/railtie" if defined?(::Rails)
19
+ end
@@ -0,0 +1,43 @@
1
+ require 'multi_json'
2
+
3
+ module Bower
4
+ class Environment
5
+ attr_accessor :directory, :json
6
+
7
+ DEFAULT_DIRECTORY = 'components'
8
+ DEFAULT_JSON = 'component.json'
9
+
10
+ def self.setup(bowerrc=nil)
11
+ if bowerrc && File.exists?(bowerrc)
12
+ conf = MultiJson.load(File.open(bowerrc))
13
+ Environment.new(conf)
14
+ else
15
+ Environment.new
16
+ end
17
+ end
18
+
19
+ def initialize(config={})
20
+ @directory = config['directory'] || DEFAULT_DIRECTORY
21
+ @json = config['json'] || DEFAULT_JSON
22
+ end
23
+
24
+ def install
25
+ run('bower install')
26
+ end
27
+
28
+ def update
29
+ run('bower update')
30
+ end
31
+
32
+ private
33
+
34
+ def run(cmd)
35
+ return unless Dir.exists?(directory)
36
+
37
+ Dir.chdir(directory) do
38
+ `#{cmd}` if File.exists?(json)
39
+ end
40
+ end
41
+
42
+ end
43
+ end
@@ -0,0 +1,10 @@
1
+ require 'bower'
2
+ require 'rails'
3
+
4
+ module Bower
5
+ class Railtie < Rails::Railtie
6
+ initializer 'bower' do |app|
7
+ app.config.assets.paths << Rails.root.join(Bower.environment.directory)
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,3 @@
1
+ module Bower
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,23 @@
1
+ require 'securerandom'
2
+
3
+ module Bower
4
+ module Generators
5
+ class InstallGenerator < Rails::Generators::Base
6
+ source_root File.expand_path("../../templates", __FILE__)
7
+
8
+ desc "Creates a Devise initializer and copy locale files to your application."
9
+
10
+ def create_components_directory
11
+ empty_directory 'components/javascripts'
12
+ end
13
+
14
+ def copy_component_json
15
+ copy_file 'component.json', 'components/javascripts/component.json'
16
+ end
17
+
18
+ def copy_config
19
+ copy_file "bowerrc", ".bowerrc"
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,6 @@
1
+ {
2
+ "directory" : "components",
3
+ "json" : "components/component.json",
4
+ "endpoint" : "https://bower.herokuapp.com",
5
+ "searchpath" : []
6
+ }
@@ -0,0 +1,17 @@
1
+ // Define your dependencies below, here's an example:
2
+
3
+ // {
4
+ // "name": "myProject",
5
+ // "version": "1.0.0",
6
+ // "main": "./path/to/main.css",
7
+ // "dependencies": {
8
+ // "jquery": "~1.7.2"
9
+ // }
10
+ // }
11
+
12
+ {
13
+ "name": "",
14
+ "version": "",
15
+ "main": "",
16
+ "dependencies": {}
17
+ }
@@ -0,0 +1,71 @@
1
+ require 'spec_helper'
2
+
3
+ describe Bower::Environment do
4
+ context 'when initializing from a file' do
5
+ subject { Bower::Environment.setup(File.join(fixture_path, '.bowerrc')) }
6
+
7
+ it 'uses the specified directory' do
8
+ expect(subject.directory).to eq('lib/assets/javascripts')
9
+ end
10
+
11
+ it 'uses the specified json' do
12
+ expect(subject.json).to eq('bower.json')
13
+ end
14
+ end
15
+
16
+ context 'defaults' do
17
+ subject { Bower::Environment.setup }
18
+
19
+ it 'uses a default directory' do
20
+ expect(subject.directory).to eq('components')
21
+ end
22
+
23
+ it 'uses a default json' do
24
+ expect(subject.json).to eq('component.json')
25
+ end
26
+ end
27
+
28
+ describe '#install' do
29
+ subject { Bower::Environment.new }
30
+
31
+ it 'invokes "bower update"' do
32
+ subject.should_receive(:run).with('bower install').and_return(true)
33
+ subject.install
34
+ end
35
+ end
36
+
37
+ describe '#update' do
38
+ subject { Bower::Environment.new }
39
+
40
+ it 'invokes "bower update"' do
41
+ subject.should_receive(:run).with('bower update').and_return(true)
42
+ subject.update
43
+ end
44
+ end
45
+
46
+ describe '#run' do
47
+ subject { Bower::Environment.new }
48
+ it 'returns nil when the directory does not exist' do
49
+ Dir.stub(:exists?).and_return(false)
50
+
51
+ expect(subject.send(:run, 'bower update')).to be_nil
52
+ end
53
+
54
+ it 'returns nil when the component file does not exist' do
55
+ Dir.stub(:exists?).with(subject.directory).and_return(true)
56
+ Dir.should_receive(:chdir).with(subject.directory).and_yield
57
+ File.stub(:exists?).and_return(false)
58
+
59
+ expect(subject.send(:run, 'bower update')).to be_nil
60
+ end
61
+
62
+ it 'invokes the shell command wheh the component file exists' do
63
+ Dir.stub(:exists?).with(subject.directory).and_return(true)
64
+ Dir.stub(:chdir).with(subject.directory).and_yield
65
+ File.stub(:exists?).and_return(true)
66
+ subject.should_receive(:`).and_return
67
+
68
+ expect(subject.send(:run, 'bower update')).to be_nil
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe Bower do
4
+
5
+ describe '.install' do
6
+ it 'invokes install on the environment' do
7
+ Bower.environment.should_receive(:install).and_return
8
+ Bower.install
9
+ end
10
+ end
11
+
12
+ describe '.update' do
13
+ it 'invokes update on the environment' do
14
+ Bower.environment.should_receive(:update).and_return
15
+ Bower.update
16
+ end
17
+ end
18
+
19
+ describe '.environment' do
20
+ it 'returns a Bower::Environment' do
21
+ Bower.environment.should be_a(Bower::Environment)
22
+ end
23
+ end
24
+
25
+ end