m4assets 0.1.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 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,8 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ group :development do
6
+ gem 'rake'
7
+ end
8
+
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Tobias Svensson
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.rdoc ADDED
@@ -0,0 +1,92 @@
1
+ = M4Assets
2
+
3
+ Sprockets support for the {M4}[http://www.gnu.org/software/m4/] preprocessor.
4
+
5
+ ---
6
+
7
+ M4Assets adds support for the GNU {M4}[http://www.gnu.org/software/m4/] general
8
+ purpose macro processor to sprockets, allowing you to use textual macros in eg.
9
+ your JavaScript, CoffeeScript, CSS or SCSS code.
10
+
11
+ == Installation
12
+
13
+ The best way to install M4Assets is with RubyGems:
14
+
15
+ $ [sudo] gem install m4assets
16
+
17
+ Or add it to your Gemfile:
18
+
19
+ gem 'm4assets'
20
+
21
+ And then execute:
22
+
23
+ $ bundle install
24
+
25
+ If you're installing from source, you can use Bundler to pick up all the gems,
26
+ including those required for running the tests and creating coverage reports:
27
+
28
+ $ bundle install
29
+
30
+ Consult the online documentation for more information on
31
+ {Bundler}[http://gembundler.com/]
32
+
33
+ == Dependencies
34
+
35
+ * {Sprockets}[http://github.com/sstephenson/sprockets]
36
+
37
+ == Getting started
38
+
39
+ M4Assets uses +which+ to configure itself. You may, however, override the
40
+ auto-detected location of the m4 binary:
41
+
42
+ M4Assets.configure do |config|
43
+ config.path = "/path/to/m4"
44
+ end
45
+
46
+ Next you need to register M4Assets. If you are using Rails and you want to
47
+ use m4 macros in your JavaScript code, you would create the following
48
+ initializer:
49
+
50
+ Rails.application.assets.register_preprocessor 'application/javascript',
51
+ M4Assets::Processor
52
+
53
+ == Contributing
54
+
55
+ If you'd like to contribute to Tweedle, start by forking the repo on GitHub:
56
+
57
+ {http://github.com/tobiassvn/m4assets}[http://github.com/tobiassvn/m4assets]
58
+
59
+ To get all of the dependencies, install the gem first. The best way to
60
+ getyour changes merged back into core is as follows:
61
+
62
+ * Clone down your fork.
63
+ * Create a thoughtfully named topic branch to contain your change.
64
+ * Hack away.
65
+ * Add tests and make sure everything still passes by running rake.
66
+ * If you are adding new functionality, document it in the README.
67
+ * Do not change the version number, I will do that on my end.
68
+ * If necessary, rebase your commits into logical chunks, without errors
69
+ * Push the branch up to GitHub
70
+ * Send a pull request to the tobiassvn/m4assets project.
71
+
72
+ == License
73
+
74
+ Copyright (c) 2012 Tobias Svensson.
75
+
76
+ Permission is hereby granted, free of charge, to any person obtaining a copy
77
+ of this software and associated documentation files (the "Software"), to deal
78
+ in the Software without restriction, including without limitation the rights
79
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
80
+ copies of the Software, and to permit persons to whom the Software is
81
+ furnished to do so, subject to the following conditions:
82
+
83
+ The above copyright notice and this permission notice shall be included in
84
+ all copies or substantial portions of the Software.
85
+
86
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
87
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
88
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
89
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
90
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
91
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
92
+ THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.pattern = "test/test_*.rb"
6
+ end
7
+
8
+ task :default => :test
@@ -0,0 +1,5 @@
1
+ module M4Assets
2
+ class Error < StandardError
3
+ end
4
+ end
5
+
@@ -0,0 +1,19 @@
1
+ module M4Assets
2
+ class Processor < Sprockets::Processor
3
+ def evaluate(context, locals)
4
+ stdin, stdout, stderr, wait_thr = Open3.popen3(M4Assets.config.path)
5
+ stdin.puts(data)
6
+ stdin.close
7
+
8
+ # Exit status is 0 for success, 1 for failure, 63 for frozen file version
9
+ # mismatch, or whatever value was passed to the m4exit macro.
10
+ if exitstatus = wait_thr.value.exitstatus != 0
11
+ raise Error.new("m4 exit status #{exitstatus}. stderr: #{stderr.read}")
12
+ end
13
+
14
+ # Trim dangling newline.
15
+ stdout.read[0..-2]
16
+ end
17
+ end
18
+ end
19
+
@@ -0,0 +1,3 @@
1
+ module M4Assets
2
+ VERSION = '0.1.0'
3
+ end
data/lib/m4assets.rb ADDED
@@ -0,0 +1,20 @@
1
+ require 'sprockets'
2
+ require 'open3'
3
+ require 'm4assets/version'
4
+ require 'm4assets/error'
5
+ require 'm4assets/processor'
6
+
7
+ module M4Assets
8
+ class << self
9
+ attr_writer :config
10
+
11
+ def configure
12
+ yield config
13
+ end
14
+
15
+ def config
16
+ @config ||= OpenStruct.new(path: `which m4`)
17
+ end
18
+ end
19
+ end
20
+
data/m4assets.gemspec ADDED
@@ -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 'm4assets/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "m4assets"
8
+ gem.version = M4Assets::VERSION
9
+ gem.authors = ["Tobias Svensson"]
10
+ gem.email = ["tob@tobiassvensson.co.uk"]
11
+ gem.description = "Sprockets support for the M4 preprocessor"
12
+ gem.summary = gem.description
13
+ gem.homepage = "http://github.com/tobiassvn/m4assets"
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_runtime_dependency "sprockets"
21
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,2 @@
1
+ require 'minitest/autorun'
2
+ require 'm4assets'
@@ -0,0 +1,20 @@
1
+ require_relative 'helper'
2
+
3
+ class TestConfig < MiniTest::Unit::TestCase
4
+ def setup
5
+ @old_config = M4Assets.config.dup
6
+ end
7
+
8
+ def teardown
9
+ M4Assets.config = @old_config
10
+ end
11
+
12
+ def test_configure
13
+ M4Assets.configure do |config|
14
+ config.path = 'foo'
15
+ end
16
+
17
+ assert_equal M4Assets.config.path, 'foo'
18
+ end
19
+ end
20
+
@@ -0,0 +1,39 @@
1
+ require_relative 'helper'
2
+
3
+ class TestProcessor < MiniTest::Unit::TestCase
4
+ class Context
5
+ attr_accessor :logical_path
6
+
7
+ def initialize(lpath)
8
+ @logical_path = lpath
9
+ end
10
+ end
11
+
12
+ def context
13
+ Context.new('/assets/javascripts/test.coffee.m4')
14
+ end
15
+
16
+ def process(string)
17
+ processor = M4Assets::Processor.new { string }
18
+ processor.evaluate(context, {})
19
+ end
20
+
21
+ def test_empty_data
22
+ assert_equal '', process('')
23
+ end
24
+
25
+ def test_string
26
+ assert_equal 'test', process('test')
27
+ end
28
+
29
+ def test_macro
30
+ assert_equal '5', process('incr(4)')
31
+ end
32
+
33
+ def test_error_handling
34
+ assert_raises(M4Assets::Error) do
35
+ process('m4exit(1)')
36
+ end
37
+ end
38
+ end
39
+
metadata ADDED
@@ -0,0 +1,77 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: m4assets
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Tobias Svensson
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-12-03 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: sprockets
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ description: Sprockets support for the M4 preprocessor
31
+ email:
32
+ - tob@tobiassvensson.co.uk
33
+ executables: []
34
+ extensions: []
35
+ extra_rdoc_files: []
36
+ files:
37
+ - .gitignore
38
+ - Gemfile
39
+ - LICENSE.txt
40
+ - README.rdoc
41
+ - Rakefile
42
+ - lib/m4assets.rb
43
+ - lib/m4assets/error.rb
44
+ - lib/m4assets/processor.rb
45
+ - lib/m4assets/version.rb
46
+ - m4assets.gemspec
47
+ - test/helper.rb
48
+ - test/test_config.rb
49
+ - test/test_processor.rb
50
+ homepage: http://github.com/tobiassvn/m4assets
51
+ licenses: []
52
+ post_install_message:
53
+ rdoc_options: []
54
+ require_paths:
55
+ - lib
56
+ required_ruby_version: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ required_rubygems_version: !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ! '>='
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ requirements: []
69
+ rubyforge_project:
70
+ rubygems_version: 1.8.23
71
+ signing_key:
72
+ specification_version: 3
73
+ summary: Sprockets support for the M4 preprocessor
74
+ test_files:
75
+ - test/helper.rb
76
+ - test/test_config.rb
77
+ - test/test_processor.rb