bowerinstaller 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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: fd56802130b32ca9054317368df9ad420b81d20b
4
+ data.tar.gz: ee9bae0d7c83d5256d7d1dab1c2e62ec5e9bfc1e
5
+ SHA512:
6
+ metadata.gz: a61ae26f89608852881662e62d1bae6a89c2ce33ea1601fbf03b98dcaee247cec5f9f893994d3f8e097bc184b287a3be0b98155ff19b7df2b28883d9832d33b1
7
+ data.tar.gz: 8950e0ce0479ae9a42f38834db62e682db9e4a1a70d92252f41844eb4bea503dca16ec412bbb5673d3880f6a63f75010172b1b8c17b959e1cbbbfecebbedf0e7
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in bowerinstaller.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Gary Lin
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,50 @@
1
+ # Bowerinstaller
2
+
3
+ rake task to install bower packages to rails. This project is inspired by
4
+ bower, bower-installer, and bower-rails. The rake task uses bower to
5
+ manage the package dependencies and download the required bower packages.
6
+ Then it follows the mechanism similar to bower-installer to install js/css
7
+ to the proper location. Once that is done, it will then generate a
8
+ component.js and component.css file to require all the installed js/css file.
9
+ component.js/css can then be included by application.js/css.
10
+
11
+ ## Requirement
12
+
13
+ * [node](http://nodejs.org) ([on github](https://github.com/joyent/node))
14
+ * [bower](https://github.com/twitter/bow) installed with npm
15
+
16
+ ## Install
17
+ Add this line to your application's Gemfile:
18
+
19
+ gem 'bowerinstaller'
20
+
21
+ ## bower.rb
22
+ Instead of using bower.json, bowerinstaller uses a DSL approach, similar to
23
+ Gemfile. bower.rb must be created in your Rails application's root directory.
24
+ Here is an example:
25
+
26
+ ``` ruby
27
+ group :vendor do # install package under vendor folder
28
+ package :jquery, "1.8" do # require jquery, version 1.8
29
+ do_not_install # tell bowerinstall only download jquery for dependency check, we use do_not_install to tell bower that we will include jquery ourselves
30
+ end
31
+ package :handlebars, "1.0.0-rc.3" do
32
+ source 'handlebars.js' # we want to install handlebars.js only.
33
+ end
34
+ package :datatables, "1.9.4" # we do not explicitly say what source to install. This will install the files as specified in package's package.json's main attribute
35
+ end
36
+ ```
37
+ The other support group is :lib.
38
+
39
+ ## Available command
40
+
41
+ rake bower:install # install bower packages
42
+ rake bower:unindstall # uninstall bower packages
43
+
44
+ ## Note
45
+ After you run bower:install, the required js/css will be installed under
46
+ /vendor/assets/components folder. It will also generate
47
+ /app/assets/javascripts/components.js and /app/assets/stylesheets/components.js.
48
+ You can explicitly require these two files in your application.js and application.css.
49
+ This will ensure any vendor packages you add in the future will be automatically
50
+ included into your app.
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'bowerinstaller/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "bowerinstaller"
8
+ spec.version = Bowerinstaller::VERSION
9
+ spec.authors = ["Gary Lin"]
10
+ spec.email = ["gary@employees.org"]
11
+ spec.description = "Bower installer for rails"
12
+ spec.summary = "Bower installer for rails"
13
+ spec.homepage = "https://github.com/garylin/bowerinstaller-rails"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+ end
@@ -0,0 +1,92 @@
1
+ require "bowerinstaller/version"
2
+ require 'json'
3
+
4
+ module Bowerinstaller
5
+ extend FileUtils
6
+
7
+ require 'bowerinstaller/railtie' if defined?(Rails)
8
+ require "bowerinstaller/dsl"
9
+
10
+ def self.packages_order_by_dependencies
11
+ bower_map = JSON.parse(`bower list --map`)
12
+ dep_info = {}
13
+ bower_map.each do |pkg_name, pkg_info|
14
+ deps = pkg_info['dependencies']
15
+ dep_info[pkg_name] = deps ? deps.map { |k, v| k } : []
16
+ end
17
+ dep_order = []
18
+
19
+ while !dep_info.empty?
20
+ dep_order += dep_info.map do |pkg_name, deps|
21
+ dep_info[pkg_name] = deps -= dep_order;
22
+ deps.empty? ? pkg_name : nil
23
+ end.compact
24
+ dep_order.each { |pkg_name| dep_info.delete(pkg_name) }
25
+ end
26
+ dep_order
27
+ end
28
+
29
+ def self.sourc_type(filename)
30
+ File.extname(filename).gsub(/^\./, '');
31
+ end
32
+
33
+ def self.write_file(name, content)
34
+ File.open(Rails.root.join(name), 'w') { |file| file.write(content) }
35
+ end
36
+
37
+ def self.install(bower_config)
38
+ write_file('bower.json', bower_config.to_bower_json)
39
+
40
+ # get dependency
41
+ sh 'bower install'
42
+
43
+ # perform installation
44
+ default_source_list = JSON.parse(`bower list --paths`)
45
+ install_log = {}
46
+ bower_config.groups.each do|grp|
47
+ grp[:packages].each do |pkg|
48
+ srcs = pkg[:sources] || [default_source_list[pkg[:name].to_s]].flatten || []
49
+ srcs.each do |src|
50
+ src_path = Rails.root.join('components', pkg[:name].to_s)
51
+ s = pkg[:sources] ? src_path.join(src) : Rails.root.join(src)
52
+ s_relative_path = s.sub(/^#{src_path}\//, '')
53
+ t = Rails.root.join(grp[:name].to_s, 'assets', 'components', pkg[:name].to_s, s_relative_path)
54
+ puts "Copy #{pkg[:name].to_s}/#{s_relative_path}"
55
+ FileUtils.mkdir_p t.dirname.to_s
56
+ FileUtils.cp s, t
57
+ (install_log[pkg[:name]] ||= []) << "#{pkg[:name].to_s}/#{s_relative_path}"
58
+ end
59
+ end
60
+ end
61
+
62
+ reference_files = {};
63
+ packages_order_by_dependencies.each do |pkg_name|
64
+ (install_log[pkg_name] || []).each do |source|
65
+ (reference_files[sourc_type(source)] ||= []) << source
66
+ end
67
+ end
68
+
69
+ reference_files.each do |source_type, sources|
70
+ if (source_type.to_s == 'js')
71
+ path = 'javascripts'
72
+ content = sources.map {|s| "//= require #{s}"}.join("\n");
73
+ elsif (source_type.to_s == 'css')
74
+ path = 'stylesheets'
75
+ content = "/*\n" + sources.map {|s| " *= require #{s}"}.join("\n") + "\n */";
76
+ end
77
+
78
+ write_file(Rails.root.join('app','assets', path, "components.#{source_type}"), content) if path
79
+ end
80
+ rm_rf 'bower.json'
81
+
82
+ end
83
+
84
+ def self.uninstall(bower_config)
85
+ ['vendor', 'lib'].each do |grp|
86
+ rm_rf Rails.root.join('grp[:name].to_s', 'assets', 'components').to_s
87
+ end
88
+ rm_rf Rails.root.join("components")
89
+ rm_rf Rails.root.join('app','assets', "javascripts", "components.js")
90
+ rm_rf Rails.root.join('app','assets', "stylesheets", "components.css")
91
+ end
92
+ end
@@ -0,0 +1,53 @@
1
+ require 'json'
2
+ module Bowerinstaller
3
+ class Dsl
4
+ def initialize
5
+ @default_options = {}
6
+ eval_file(Rails.root.join('bower.rb'))
7
+ end
8
+
9
+ def group name, options={}
10
+ @context = {:packages => []}
11
+ yield
12
+ (@groups ||= []) << @default_options.merge({ :name => name, :packages => @context[:packages]})
13
+ end
14
+
15
+ def eval_file(file)
16
+ contents = File.open(file,"r").read
17
+ instance_eval(contents, file.to_s, 1)
18
+ end
19
+
20
+ def package name, version=nil, &dsl
21
+ @context[:sources] = [];
22
+ if dsl
23
+ dsl.call()
24
+ else
25
+ @context[:sources] = nil # use default install method
26
+ end
27
+ (@context[:packages] || []) << {:name => name.to_s, :version => version, :sources => @context[:sources]}
28
+ end
29
+
30
+ def do_not_install
31
+ @context[:sources] = []
32
+ end
33
+
34
+ def source src
35
+ (@context[:sources] ||= []) << src
36
+ end
37
+
38
+ def groups
39
+ @groups
40
+ end
41
+
42
+ def to_bower_json
43
+ dependencies = {};
44
+
45
+ groups.each do|grp|
46
+ grp[:packages].each do |pkg|
47
+ dependencies[pkg[:name]] = pkg[:version] || 'latest'
48
+ end
49
+ end
50
+ return JSON.pretty_generate( {:dependencies => dependencies} )
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,17 @@
1
+ require 'bowerinstaller'
2
+ require 'rails'
3
+ module BowerInstaller
4
+ class Railtie < Rails::Railtie
5
+ railtie_name :bowerinstaller
6
+
7
+ config.after_initialize do |app|
8
+ ["lib", "vendor"].each do |dir|
9
+ app.config.assets.paths << Rails.root.join(dir, 'assets', 'components')
10
+ end
11
+ end
12
+
13
+ rake_tasks do
14
+ load "tasks/bowerinstaller.rake"
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,3 @@
1
+ module Bowerinstaller
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,19 @@
1
+ namespace :bower do
2
+ desc "Run bower"
3
+
4
+ bower_config = Bowerinstaller::Dsl.new
5
+
6
+ task :install do
7
+ Bowerinstaller.install(bower_config)
8
+ end
9
+
10
+ # task :update do
11
+ # gittler.install "#{Rails.root}"
12
+ # end
13
+
14
+ task :uninstall do
15
+ Bowerinstaller.uninstall(bower_config)
16
+ end
17
+
18
+ end
19
+
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bowerinstaller
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Gary Lin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-05-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: Bower installer for rails
42
+ email:
43
+ - gary@employees.org
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - .gitignore
49
+ - Gemfile
50
+ - LICENSE.txt
51
+ - README.md
52
+ - Rakefile
53
+ - bowerinstaller.gemspec
54
+ - lib/bowerinstaller.rb
55
+ - lib/bowerinstaller/dsl.rb
56
+ - lib/bowerinstaller/railtie.rb
57
+ - lib/bowerinstaller/version.rb
58
+ - lib/tasks/bowerinstaller.rake
59
+ homepage: https://github.com/garylin/bowerinstaller-rails
60
+ licenses:
61
+ - MIT
62
+ metadata: {}
63
+ post_install_message:
64
+ rdoc_options: []
65
+ require_paths:
66
+ - lib
67
+ required_ruby_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - '>='
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ required_rubygems_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ requirements: []
78
+ rubyforge_project:
79
+ rubygems_version: 2.0.0
80
+ signing_key:
81
+ specification_version: 4
82
+ summary: Bower installer for rails
83
+ test_files: []