seajs-rails 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.
- data/.gitattributes +22 -0
 - data/.gitignore +18 -0
 - data/Gemfile +4 -0
 - data/LICENSE.txt +22 -0
 - data/README.md +85 -0
 - data/Rakefile +1 -0
 - data/app/helpers/seajs_helper.rb +36 -0
 - data/lib/seajs-rails.rb +1 -0
 - data/lib/seajs/rails.rb +5 -0
 - data/lib/seajs/rails/config.rb +32 -0
 - data/lib/seajs/rails/engine.rb +31 -0
 - data/lib/seajs/rails/version.rb +6 -0
 - data/lib/tasks/seajs-rails.rake +76 -0
 - data/lib/tasks/template/Gruntfile.js +30 -0
 - data/lib/tasks/template/seajs_config.yml +6 -0
 - data/seajs-rails.gemspec +23 -0
 - metadata +84 -0
 
    
        data/.gitattributes
    ADDED
    
    | 
         @@ -0,0 +1,22 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Auto detect text files and perform LF normalization
         
     | 
| 
      
 2 
     | 
    
         
            +
            * text=auto
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            # Custom for Visual Studio
         
     | 
| 
      
 5 
     | 
    
         
            +
            *.cs     diff=csharp
         
     | 
| 
      
 6 
     | 
    
         
            +
            *.sln    merge=union
         
     | 
| 
      
 7 
     | 
    
         
            +
            *.csproj merge=union
         
     | 
| 
      
 8 
     | 
    
         
            +
            *.vbproj merge=union
         
     | 
| 
      
 9 
     | 
    
         
            +
            *.fsproj merge=union
         
     | 
| 
      
 10 
     | 
    
         
            +
            *.dbproj merge=union
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            # Standard to msysgit
         
     | 
| 
      
 13 
     | 
    
         
            +
            *.doc	 diff=astextplain
         
     | 
| 
      
 14 
     | 
    
         
            +
            *.DOC	 diff=astextplain
         
     | 
| 
      
 15 
     | 
    
         
            +
            *.docx diff=astextplain
         
     | 
| 
      
 16 
     | 
    
         
            +
            *.DOCX diff=astextplain
         
     | 
| 
      
 17 
     | 
    
         
            +
            *.dot  diff=astextplain
         
     | 
| 
      
 18 
     | 
    
         
            +
            *.DOT  diff=astextplain
         
     | 
| 
      
 19 
     | 
    
         
            +
            *.pdf  diff=astextplain
         
     | 
| 
      
 20 
     | 
    
         
            +
            *.PDF	 diff=astextplain
         
     | 
| 
      
 21 
     | 
    
         
            +
            *.rtf	 diff=astextplain
         
     | 
| 
      
 22 
     | 
    
         
            +
            *.RTF	 diff=astextplain
         
     | 
    
        data/.gitignore
    ADDED
    
    
    
        data/Gemfile
    ADDED
    
    
    
        data/LICENSE.txt
    ADDED
    
    | 
         @@ -0,0 +1,22 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            Copyright (c) 2013 TODO: Write your name
         
     | 
| 
      
 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,85 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Sea.js for Rails 3.x
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            Integrates Sea.js into the Rails 3 Asset Pipeline.
         
     | 
| 
      
 4 
     | 
    
         
            +
            提供一种将 Sea.js 与 Asset Pipeline 结合起来的方式,底层通过 spm-chaos-build 来实现
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            ## 安装
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            首先请安装好 spm-chaos-build ,参见 https://github.com/edokeh/spm-chaos-build
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                $ npm install spm -g
         
     | 
| 
      
 11 
     | 
    
         
            +
                $ npm install spm-chaos-build -g
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            然后在 Gemfile 中添加这个 gem
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                gem 'seajs-rails'
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            并执行命令
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                $ bundle
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            ## 使用方式
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            ### 初始化
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            执行以下命令初始化项目
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                $ rake seajs:setup
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            这会安装最新版本的 Sea.js 到相应目录下,并在 config 目录生成 seajs_config.yml
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            配置文件说明:
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
            ```yaml
         
     | 
| 
      
 34 
     | 
    
         
            +
            seajs_path: seajs/seajs/2.0.0/sea.js  # 这是配置 seajs 的路径
         
     | 
| 
      
 35 
     | 
    
         
            +
            family: klog  # 与打包合并有关的参数,自动生成为项目的名称,一般不需要修改
         
     | 
| 
      
 36 
     | 
    
         
            +
            output:  # 合并策略,具体参见 spm-chaos-build
         
     | 
| 
      
 37 
     | 
    
         
            +
              relative:
         
     | 
| 
      
 38 
     | 
    
         
            +
                - application.js
         
     | 
| 
      
 39 
     | 
    
         
            +
              all: []
         
     | 
| 
      
 40 
     | 
    
         
            +
            ```
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
            ouput 项其实就是 package.json 中的 spm.output
         
     | 
| 
      
 43 
     | 
    
         
            +
            支持 relative(只合并相对路径), all(合并所有路径) 两种方式
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
            目录说明:
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                your-rails
         
     | 
| 
      
 48 
     | 
    
         
            +
                ├─app
         
     | 
| 
      
 49 
     | 
    
         
            +
                │  ├─assets
         
     | 
| 
      
 50 
     | 
    
         
            +
                │  │  ├─images
         
     | 
| 
      
 51 
     | 
    
         
            +
                │  │  ├─javascripts
         
     | 
| 
      
 52 
     | 
    
         
            +
                │  │  │  ├─a.js    <-- your js code
         
     | 
| 
      
 53 
     | 
    
         
            +
                │  │  │  └─sea-modules    <-- seajs base 目录
         
     | 
| 
      
 54 
     | 
    
         
            +
                │  │  │      ├─gallery
         
     | 
| 
      
 55 
     | 
    
         
            +
                │  │  │      ├─jquery
         
     | 
| 
      
 56 
     | 
    
         
            +
                │  │  │      └─seajs
         
     | 
| 
      
 57 
     | 
    
         
            +
                │  │  │          └─seajs
         
     | 
| 
      
 58 
     | 
    
         
            +
                │  │  │              └─2.0.0
         
     | 
| 
      
 59 
     | 
    
         
            +
                │  │  └─stylesheets
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
            与普通的开发基本一致,只是在 javascripts 目录下多了一个 sea-modules 作为 Sea.js 的 base 目录
         
     | 
| 
      
 62 
     | 
    
         
            +
            普通的业务代码依然放置在 javascripts 目录下(非 CMD 模块的 JS 也放在这里)
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
            ### 使用
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
            提供两个 helper 方法:seajs_tag 与 seajs_use
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
            ```erb
         
     | 
| 
      
 69 
     | 
    
         
            +
            <%= seajs_tag %>
         
     | 
| 
      
 70 
     | 
    
         
            +
            <%= seajs_use 'blogs/show' %>
         
     | 
| 
      
 71 
     | 
    
         
            +
            ```
         
     | 
| 
      
 72 
     | 
    
         
            +
            seajs_tag 用于引入 seajs ,并且会根据是否合并引入必要的配置
         
     | 
| 
      
 73 
     | 
    
         
            +
            seajs_use 用于加载 CMD 模块,支持传递多个模块名称
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
            ### 合并
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
            这个 gem 会将 seajs 的打包合并过程嵌入到 assets:precompile 任务中,所以执行这个命令
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                $ rake assets:precompile
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
            Sea.js 的合并过程不会与原有的 assets pipeline 冲突,但是请将配置分开
         
     | 
| 
      
 82 
     | 
    
         
            +
            * 需要合并的 CMD 模块文件请在 seajs_config.yml 中配置
         
     | 
| 
      
 83 
     | 
    
         
            +
            * 而非 CMD 模块的文件请依然通过 `config.assets.precompile` 配置
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
            合并完成后,不需要改动页面,两个 helper 方法能够自动处理
         
     | 
    
        data/Rakefile
    ADDED
    
    | 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "bundler/gem_tasks"
         
     | 
| 
         @@ -0,0 +1,36 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module SeajsHelper
         
     | 
| 
      
 2 
     | 
    
         
            +
              # generate seajs.use()
         
     | 
| 
      
 3 
     | 
    
         
            +
              def seajs_use(*modules)
         
     | 
| 
      
 4 
     | 
    
         
            +
                seajs_config = Rails.application.config.seajs
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                if seajs_config.compiled?
         
     | 
| 
      
 7 
     | 
    
         
            +
                  modules.map! { |m| seajs_config.family + '/' + m }
         
     | 
| 
      
 8 
     | 
    
         
            +
                else
         
     | 
| 
      
 9 
     | 
    
         
            +
                  modules.map! { |m| '/assets/' + m }
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                html = <<-html
         
     | 
| 
      
 13 
     | 
    
         
            +
                <script>
         
     | 
| 
      
 14 
     | 
    
         
            +
                seajs.use(#{modules.to_s})
         
     | 
| 
      
 15 
     | 
    
         
            +
                </script>
         
     | 
| 
      
 16 
     | 
    
         
            +
                html
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                html.html_safe
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              # include seajs script and map config
         
     | 
| 
      
 22 
     | 
    
         
            +
              def seajs_tag
         
     | 
| 
      
 23 
     | 
    
         
            +
                seajs_config = Rails.application.config.seajs
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                html = <<-html
         
     | 
| 
      
 26 
     | 
    
         
            +
                  <script src="/assets/sea-modules/#{seajs_config.seajs_path}"></script>
         
     | 
| 
      
 27 
     | 
    
         
            +
                  <script>
         
     | 
| 
      
 28 
     | 
    
         
            +
                  seajs.config({
         
     | 
| 
      
 29 
     | 
    
         
            +
                    map: #{seajs_config.map_json || '[]'}
         
     | 
| 
      
 30 
     | 
    
         
            +
                  })
         
     | 
| 
      
 31 
     | 
    
         
            +
                  </script>
         
     | 
| 
      
 32 
     | 
    
         
            +
                html
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                html.html_safe
         
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/seajs-rails.rb
    ADDED
    
    | 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'seajs/rails'
         
     | 
    
        data/lib/seajs/rails.rb
    ADDED
    
    
| 
         @@ -0,0 +1,32 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'active_support/ordered_options'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'yaml'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module Seajs::Rails
         
     | 
| 
      
 5 
     | 
    
         
            +
              class Config < ::ActiveSupport::OrderedOptions
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                def initialize
         
     | 
| 
      
 8 
     | 
    
         
            +
                  super
         
     | 
| 
      
 9 
     | 
    
         
            +
                  # config/seajs_config.yml
         
     | 
| 
      
 10 
     | 
    
         
            +
                  self.config_path = ::Rails.root.join('config', 'seajs_config.yml')
         
     | 
| 
      
 11 
     | 
    
         
            +
                  # public/assets/seajs_map.json
         
     | 
| 
      
 12 
     | 
    
         
            +
                  self.map_path = File.join(::Rails.public_path, ::Rails.application.config.assets.prefix, "seajs-map.json")
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                def load_config_from_file
         
     | 
| 
      
 16 
     | 
    
         
            +
                  if File.exist?(self.config_path)
         
     | 
| 
      
 17 
     | 
    
         
            +
                    self.merge! YAML.load_file(self.config_path).symbolize_keys
         
     | 
| 
      
 18 
     | 
    
         
            +
                  end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                  if File.exist?(self.map_path)
         
     | 
| 
      
 21 
     | 
    
         
            +
                    self.map_json = File.open(map_path).read
         
     | 
| 
      
 22 
     | 
    
         
            +
                    self.is_compiled = true
         
     | 
| 
      
 23 
     | 
    
         
            +
                  else
         
     | 
| 
      
 24 
     | 
    
         
            +
                    self.is_compiled = false
         
     | 
| 
      
 25 
     | 
    
         
            +
                  end
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                def compiled?
         
     | 
| 
      
 29 
     | 
    
         
            +
                  is_compiled
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,31 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'seajs/rails/config'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Seajs
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Rails
         
     | 
| 
      
 5 
     | 
    
         
            +
                class Engine < ::Rails::Engine
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                  config.before_configuration do
         
     | 
| 
      
 8 
     | 
    
         
            +
                    config.seajs = Seajs::Rails::Config.new
         
     | 
| 
      
 9 
     | 
    
         
            +
                  end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  config.before_initialize do |app|
         
     | 
| 
      
 12 
     | 
    
         
            +
                    config = app.config
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                    # find the default precompile filter and modify it
         
     | 
| 
      
 15 
     | 
    
         
            +
                    index = config.assets.precompile.find_index do |filter|
         
     | 
| 
      
 16 
     | 
    
         
            +
                      filter.respond_to?(:call) && filter.call('sea.js.map')
         
     | 
| 
      
 17 
     | 
    
         
            +
                    end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                    if index
         
     | 
| 
      
 20 
     | 
    
         
            +
                      # add filter,don't precompile app/javascripts/sea-modules/
         
     | 
| 
      
 21 
     | 
    
         
            +
                      filter = Proc.new do |path|
         
     | 
| 
      
 22 
     | 
    
         
            +
                        !File.extname(path).in?(['.js', '.css']) and !path.start_with?('sea-modules/')
         
     | 
| 
      
 23 
     | 
    
         
            +
                      end
         
     | 
| 
      
 24 
     | 
    
         
            +
                      config.assets.precompile[index] = filter
         
     | 
| 
      
 25 
     | 
    
         
            +
                    end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                    config.seajs.load_config_from_file
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,76 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'seajs/rails/version'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            namespace :seajs do
         
     | 
| 
      
 4 
     | 
    
         
            +
              desc "Check whether spm & spm-chaos-build is ok"
         
     | 
| 
      
 5 
     | 
    
         
            +
              task :test_env do
         
     | 
| 
      
 6 
     | 
    
         
            +
                begin
         
     | 
| 
      
 7 
     | 
    
         
            +
                  `spm-chaos-build -h`
         
     | 
| 
      
 8 
     | 
    
         
            +
                rescue Errno::ENOENT
         
     | 
| 
      
 9 
     | 
    
         
            +
                  puts 'Please intall spm-chaos-build first.'
         
     | 
| 
      
 10 
     | 
    
         
            +
                  exit 1
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              desc 'init setup'
         
     | 
| 
      
 15 
     | 
    
         
            +
              task :setup => :test_env do
         
     | 
| 
      
 16 
     | 
    
         
            +
                # install seajs
         
     | 
| 
      
 17 
     | 
    
         
            +
                path = Rails.root.join('app', 'assets', 'javascripts')
         
     | 
| 
      
 18 
     | 
    
         
            +
                `cd #{path} && spm install seajs@#{Seajs::Rails::SEAJS_VERSION}`
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                # generate seajs config file
         
     | 
| 
      
 21 
     | 
    
         
            +
                File.open(Rails.root.join('config', 'seajs_config.yml'), 'w') do |f|
         
     | 
| 
      
 22 
     | 
    
         
            +
                  config_temp = File.expand_path('../template/seajs_config.yml', __FILE__)
         
     | 
| 
      
 23 
     | 
    
         
            +
                  templ = Erubis::Eruby.new(File.open(config_temp).read)
         
     | 
| 
      
 24 
     | 
    
         
            +
                  f.write templ.result(:seajs_path => "seajs/seajs/#{Seajs::Rails::SEAJS_VERSION}/sea.js",
         
     | 
| 
      
 25 
     | 
    
         
            +
                                       :family => Rails.application.class.parent_name.downcase)
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
              end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              namespace :compile do
         
     | 
| 
      
 30 
     | 
    
         
            +
                task :external do
         
     | 
| 
      
 31 
     | 
    
         
            +
                  ruby_rake_task "seajs:compile:all"
         
     | 
| 
      
 32 
     | 
    
         
            +
                end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                task :all => ["seajs:compile:prepare_dir",
         
     | 
| 
      
 35 
     | 
    
         
            +
                              "seajs:compile:generate_json",
         
     | 
| 
      
 36 
     | 
    
         
            +
                              "seajs:compile:build",
         
     | 
| 
      
 37 
     | 
    
         
            +
                              "seajs:compile:clean"]
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                desc 'copy `app/assets/javascripts` to ``/public/assets/``'
         
     | 
| 
      
 40 
     | 
    
         
            +
                task :prepare_dir do
         
     | 
| 
      
 41 
     | 
    
         
            +
                  cp_r Rails.root.join('app', 'assets', 'javascripts'), File.join(Rails.public_path, 'assets'), :remove_destination => true
         
     | 
| 
      
 42 
     | 
    
         
            +
                  cp File.expand_path('../template/Gruntfile.js', __FILE__), File.join(Rails.public_path, 'assets')
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                desc 'generate package.json by seajs_config.yml'
         
     | 
| 
      
 46 
     | 
    
         
            +
                task :generate_json do
         
     | 
| 
      
 47 
     | 
    
         
            +
                  File.open(File.join(Rails.public_path, 'assets', 'javascripts', 'package.json'), 'w') do |f|
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                    seajs_config = Rails.application.config.seajs
         
     | 
| 
      
 50 
     | 
    
         
            +
                    seajs_config.load_config_from_file
         
     | 
| 
      
 51 
     | 
    
         
            +
                    pkg = {:family => seajs_config.family, :spm => {:output => seajs_config.output}}
         
     | 
| 
      
 52 
     | 
    
         
            +
                    f.write pkg.to_json
         
     | 
| 
      
 53 
     | 
    
         
            +
                  end
         
     | 
| 
      
 54 
     | 
    
         
            +
                end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                desc 'run chaos-build in assets for `javascripts` dir'
         
     | 
| 
      
 57 
     | 
    
         
            +
                task :build do
         
     | 
| 
      
 58 
     | 
    
         
            +
                  path = File.join(Rails.public_path, 'assets')
         
     | 
| 
      
 59 
     | 
    
         
            +
                  `cd #{path} && spm chaos-build javascripts`
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                  unless $?.success?
         
     | 
| 
      
 62 
     | 
    
         
            +
                    raise RuntimeError, "spm chaos-build failed."
         
     | 
| 
      
 63 
     | 
    
         
            +
                  end
         
     | 
| 
      
 64 
     | 
    
         
            +
                end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                task :clean do
         
     | 
| 
      
 67 
     | 
    
         
            +
                  cp_r File.join(Rails.public_path, 'assets', 'javascripts', 'sea-modules', '.'), File.join(Rails.public_path, 'assets', 'sea-modules')
         
     | 
| 
      
 68 
     | 
    
         
            +
                  rm_rf File.join(Rails.public_path, 'assets', 'javascripts')
         
     | 
| 
      
 69 
     | 
    
         
            +
                  rm_rf File.join(Rails.public_path, 'assets', 'Gruntfile.js')
         
     | 
| 
      
 70 
     | 
    
         
            +
                end
         
     | 
| 
      
 71 
     | 
    
         
            +
              end
         
     | 
| 
      
 72 
     | 
    
         
            +
            end
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
            Rake::Task["assets:precompile"].enhance do
         
     | 
| 
      
 75 
     | 
    
         
            +
              Rake::Task["seajs:compile:external"].invoke
         
     | 
| 
      
 76 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,30 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            var chaosBuild = require('spm-chaos-build');
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module.exports = function (grunt) {
         
     | 
| 
      
 4 
     | 
    
         
            +
                chaosBuild.loadTasks(grunt);
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                var config = chaosBuild.getConfig('javascripts', {
         
     | 
| 
      
 7 
     | 
    
         
            +
                    outputDirectory : 'javascripts/sea-modules',
         
     | 
| 
      
 8 
     | 
    
         
            +
                    gzip : 'all'
         
     | 
| 
      
 9 
     | 
    
         
            +
                });
         
     | 
| 
      
 10 
     | 
    
         
            +
                grunt.initConfig(config);
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                grunt.registerTask('write-manifest', function () {
         
     | 
| 
      
 13 
     | 
    
         
            +
                    var mapArr = grunt.config.get('md5map');
         
     | 
| 
      
 14 
     | 
    
         
            +
                    var family = config.family;
         
     | 
| 
      
 15 
     | 
    
         
            +
                    grunt.file.write('seajs-map.json', JSON.stringify(mapArr, null, '\t'));
         
     | 
| 
      
 16 
     | 
    
         
            +
                });
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                grunt.registerTask('chaos-build', [
         
     | 
| 
      
 19 
     | 
    
         
            +
                    'clean:dist', // delete dist direcotry first
         
     | 
| 
      
 20 
     | 
    
         
            +
                    'transport:spm',  // src/* -> .build/src/*
         
     | 
| 
      
 21 
     | 
    
         
            +
                    'concat:relative',  // .build/src/* -> .build/dist/*.js
         
     | 
| 
      
 22 
     | 
    
         
            +
                    'concat:all',
         
     | 
| 
      
 23 
     | 
    
         
            +
                    'uglify:js',  // .build/dist/*.js -> .build/dist/*.js
         
     | 
| 
      
 24 
     | 
    
         
            +
                    'md5:js', // .build/dist/*.js -> dist/*-md5.js
         
     | 
| 
      
 25 
     | 
    
         
            +
                    'clean:spm',
         
     | 
| 
      
 26 
     | 
    
         
            +
                    'spm-newline',
         
     | 
| 
      
 27 
     | 
    
         
            +
                    'compress',
         
     | 
| 
      
 28 
     | 
    
         
            +
                    'write-manifest'
         
     | 
| 
      
 29 
     | 
    
         
            +
                ]);
         
     | 
| 
      
 30 
     | 
    
         
            +
            };
         
     | 
    
        data/seajs-rails.gemspec
    ADDED
    
    | 
         @@ -0,0 +1,23 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # -*- encoding: utf-8 -*-
         
     | 
| 
      
 2 
     | 
    
         
            +
            lib = File.expand_path('../lib', __FILE__)
         
     | 
| 
      
 3 
     | 
    
         
            +
            $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'seajs/rails/version'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            Gem::Specification.new do |gem|
         
     | 
| 
      
 7 
     | 
    
         
            +
              gem.name          = "seajs-rails"
         
     | 
| 
      
 8 
     | 
    
         
            +
              gem.version       = Seajs::Rails::VERSION
         
     | 
| 
      
 9 
     | 
    
         
            +
              gem.authors       = ["edokeh"]
         
     | 
| 
      
 10 
     | 
    
         
            +
              gem.email         = ["edokeh@163.com"]
         
     | 
| 
      
 11 
     | 
    
         
            +
              gem.description   = %q{Integrates Sea.js into the Rails 3 Asset Pipeline.}
         
     | 
| 
      
 12 
     | 
    
         
            +
              gem.summary       = %q{This gem provides Sea.js support for your Rails 3 application.}
         
     | 
| 
      
 13 
     | 
    
         
            +
              gem.homepage      = "https://github.com/edokeh/seajs-rails"
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              gem.files         = `git ls-files`.split($/)
         
     | 
| 
      
 16 
     | 
    
         
            +
              gem.executables   = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
         
     | 
| 
      
 17 
     | 
    
         
            +
              gem.test_files    = gem.files.grep(%r{^(test|spec|features)/})
         
     | 
| 
      
 18 
     | 
    
         
            +
              gem.require_paths = ["lib"]
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              gem.add_dependency "railties", ">= 3.1.1", "< 4.1"
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              gem.requirements << "spm-chaos-build is required for 'rake assets:precompile'. See https://github.com/edokeh/spm-chaos-build"
         
     | 
| 
      
 23 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    ADDED
    
    | 
         @@ -0,0 +1,84 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- !ruby/object:Gem::Specification
         
     | 
| 
      
 2 
     | 
    
         
            +
            name: seajs-rails
         
     | 
| 
      
 3 
     | 
    
         
            +
            version: !ruby/object:Gem::Version
         
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.1
         
     | 
| 
      
 5 
     | 
    
         
            +
              prerelease: 
         
     | 
| 
      
 6 
     | 
    
         
            +
            platform: ruby
         
     | 
| 
      
 7 
     | 
    
         
            +
            authors:
         
     | 
| 
      
 8 
     | 
    
         
            +
            - edokeh
         
     | 
| 
      
 9 
     | 
    
         
            +
            autorequire: 
         
     | 
| 
      
 10 
     | 
    
         
            +
            bindir: bin
         
     | 
| 
      
 11 
     | 
    
         
            +
            cert_chain: []
         
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2013-05-31 00:00:00.000000000 Z
         
     | 
| 
      
 13 
     | 
    
         
            +
            dependencies:
         
     | 
| 
      
 14 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 15 
     | 
    
         
            +
              name: railties
         
     | 
| 
      
 16 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 17 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 18 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 19 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 20 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 21 
     | 
    
         
            +
                    version: 3.1.1
         
     | 
| 
      
 22 
     | 
    
         
            +
                - - <
         
     | 
| 
      
 23 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 24 
     | 
    
         
            +
                    version: '4.1'
         
     | 
| 
      
 25 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 26 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 27 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 28 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 29 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 30 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 31 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 32 
     | 
    
         
            +
                    version: 3.1.1
         
     | 
| 
      
 33 
     | 
    
         
            +
                - - <
         
     | 
| 
      
 34 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 35 
     | 
    
         
            +
                    version: '4.1'
         
     | 
| 
      
 36 
     | 
    
         
            +
            description: Integrates Sea.js into the Rails 3 Asset Pipeline.
         
     | 
| 
      
 37 
     | 
    
         
            +
            email:
         
     | 
| 
      
 38 
     | 
    
         
            +
            - edokeh@163.com
         
     | 
| 
      
 39 
     | 
    
         
            +
            executables: []
         
     | 
| 
      
 40 
     | 
    
         
            +
            extensions: []
         
     | 
| 
      
 41 
     | 
    
         
            +
            extra_rdoc_files: []
         
     | 
| 
      
 42 
     | 
    
         
            +
            files:
         
     | 
| 
      
 43 
     | 
    
         
            +
            - .gitattributes
         
     | 
| 
      
 44 
     | 
    
         
            +
            - .gitignore
         
     | 
| 
      
 45 
     | 
    
         
            +
            - Gemfile
         
     | 
| 
      
 46 
     | 
    
         
            +
            - LICENSE.txt
         
     | 
| 
      
 47 
     | 
    
         
            +
            - README.md
         
     | 
| 
      
 48 
     | 
    
         
            +
            - Rakefile
         
     | 
| 
      
 49 
     | 
    
         
            +
            - app/helpers/seajs_helper.rb
         
     | 
| 
      
 50 
     | 
    
         
            +
            - lib/seajs-rails.rb
         
     | 
| 
      
 51 
     | 
    
         
            +
            - lib/seajs/rails.rb
         
     | 
| 
      
 52 
     | 
    
         
            +
            - lib/seajs/rails/config.rb
         
     | 
| 
      
 53 
     | 
    
         
            +
            - lib/seajs/rails/engine.rb
         
     | 
| 
      
 54 
     | 
    
         
            +
            - lib/seajs/rails/version.rb
         
     | 
| 
      
 55 
     | 
    
         
            +
            - lib/tasks/seajs-rails.rake
         
     | 
| 
      
 56 
     | 
    
         
            +
            - lib/tasks/template/Gruntfile.js
         
     | 
| 
      
 57 
     | 
    
         
            +
            - lib/tasks/template/seajs_config.yml
         
     | 
| 
      
 58 
     | 
    
         
            +
            - seajs-rails.gemspec
         
     | 
| 
      
 59 
     | 
    
         
            +
            homepage: https://github.com/edokeh/seajs-rails
         
     | 
| 
      
 60 
     | 
    
         
            +
            licenses: []
         
     | 
| 
      
 61 
     | 
    
         
            +
            post_install_message: 
         
     | 
| 
      
 62 
     | 
    
         
            +
            rdoc_options: []
         
     | 
| 
      
 63 
     | 
    
         
            +
            require_paths:
         
     | 
| 
      
 64 
     | 
    
         
            +
            - lib
         
     | 
| 
      
 65 
     | 
    
         
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 66 
     | 
    
         
            +
              none: false
         
     | 
| 
      
 67 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 68 
     | 
    
         
            +
              - - ! '>='
         
     | 
| 
      
 69 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 70 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 71 
     | 
    
         
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 72 
     | 
    
         
            +
              none: false
         
     | 
| 
      
 73 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 74 
     | 
    
         
            +
              - - ! '>='
         
     | 
| 
      
 75 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 76 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 77 
     | 
    
         
            +
            requirements:
         
     | 
| 
      
 78 
     | 
    
         
            +
            - spm-chaos-build is required for 'rake assets:precompile'. See https://github.com/edokeh/spm-chaos-build
         
     | 
| 
      
 79 
     | 
    
         
            +
            rubyforge_project: 
         
     | 
| 
      
 80 
     | 
    
         
            +
            rubygems_version: 1.8.25
         
     | 
| 
      
 81 
     | 
    
         
            +
            signing_key: 
         
     | 
| 
      
 82 
     | 
    
         
            +
            specification_version: 3
         
     | 
| 
      
 83 
     | 
    
         
            +
            summary: This gem provides Sea.js support for your Rails 3 application.
         
     | 
| 
      
 84 
     | 
    
         
            +
            test_files: []
         
     |