middleman-target 0.0.1 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Middleman-Target
2
2
 
3
- Middleman-Target is an extension to [MIDDLEMAN] 2.0.x to allow you to specify a build target and generate the content accordingly.
3
+ Middleman-Target is an extension to [MIDDLEMAN] 3.0.x to allow you to specify a build target and generate the content accordingly.
4
4
 
5
5
  You can use Middleman-Target in your Middleman project to build multiple versions of your source from one source tree.
6
6
 
@@ -41,11 +41,13 @@ If you wanted a particular condition to apply to more than one target you may do
41
41
 
42
42
  ..but that can get ugly. Instead we have the concept of "build target maps". They are declared in the config.rb:
43
43
 
44
- set_build_targets({
45
- "phonegap" => {
46
- :includes => %w[android ios]
44
+ active :target do |t|
45
+ t.build_targets = {
46
+ "phonegap" => {
47
+ :includes => %w[android ios]
48
+ }
47
49
  }
48
- })
50
+ end
49
51
 
50
52
  ..this means that if my current built target is "android", a query like:
51
53
 
@@ -73,22 +75,49 @@ To build the target of "aardvark" you would run:
73
75
 
74
76
  # TODO:
75
77
 
78
+ * repace target.build_targets with something more extensible
76
79
  * write rdoc
80
+ * validate the hash passed in to set_build_targets()
77
81
  * set build target on the command line as "middleman build TARGET"
78
82
  * use app.set instead of always reading ENV for build target
79
83
  * not allowed to use a build target from the command line if that build_target if specified as a first-order entry in set_build_targets()
80
84
 
81
85
  # REQUIREMENTS AND INSTALLATION
82
86
 
83
- Middleman-Target was developed against [MIDDLEMAN] 2.0.15. Compatibility with other versions is not guaranteed. When Middleman 3.0 is released this will likely not work with it.
87
+ This new version is for [MIDDLEMAN] 3.0.x ONLY. For compatibility with Middleman 2.0.x, please see version 0.0.1 of this gem.
84
88
 
85
- ## Gem Version Hell
89
+ ## Installing in to Middleman tree
86
90
 
87
- Because gem authors don't specify minimal and maximal version of dependencies, installing Middleman 2.0.15 can put you in dependency version hell. To rememdy this, install gems in this order:
91
+ Add the following near the top of your config.rb:
88
92
 
89
- gem install multi_json -v="1.0.3"
90
- gem install execjs -v="1.2.7"
91
- gem install middleman -v="2.0.15"
92
- gem install middleman-target
93
+ require 'rubygems' # may not be needed depending on ruby ver
94
+ require 'middleman-target'
95
+ activate :target
96
+
97
+ To specify a build target map, pass a block in to the "active" method as:
98
+
99
+ active :target do |t|
100
+ t.build_targets = { ... }
101
+ end
102
+
103
+ Please see /examples for a working usage example.
104
+
105
+ # Contributing
106
+
107
+ If there is any thing you'd like to contribute or fix, please:
108
+
109
+ * Fork the repo
110
+ * Make your changes
111
+ * Add Cucumber tests for any new functionality
112
+ * Verify all existing tests work properly
113
+ * Make a pull request
114
+
115
+ The Cucumber features for this project assume the gem is installed, so to make any changes you will need to build and install the gem locally with your changes.
116
+
117
+ # Misc
118
+
119
+ The middleman-target gem is Copyright 2012-2013 Matthew Nielsen, distributed under the MIT License.
120
+
121
+ Thanks to jtwalters@github for patches and motivation to add Middleman 3 compatibility.
93
122
 
94
123
  [MIDDLEMAN]: https://github.com/middleman/middleman/
data/examples/config.rb CHANGED
@@ -1,13 +1,13 @@
1
- require '../lib/middleman-target'
2
- activate :target
1
+ require 'middleman-target'
2
+ activate :target do |target|
3
3
 
4
- set_build_targets({
5
- "phonegap" => {
6
- :includes => %w[android ios]
4
+ target.build_targets = {
5
+ "phonegap" => {
6
+ :includes => %w[android ios]
7
+ }
7
8
  }
8
- })
9
9
 
10
- disable :layout
10
+ end
11
11
 
12
12
  configure :build do
13
13
 
@@ -0,0 +1,18 @@
1
+ ENV["TEST"] = "true"
2
+ ENV["AUTOLOAD_SPROCKETS"] = "false"
3
+
4
+ PROJECT_ROOT_PATH = File.dirname(File.dirname(File.dirname(__FILE__)))
5
+ require "middleman-core"
6
+ require "middleman-core/step_definitions"
7
+ # require File.join(PROJECT_ROOT_PATH, 'lib', 'middleman-target')
8
+
9
+ require 'middleman-target'
10
+
11
+ After do
12
+ ENV['MIDDLEMAN_BUILD_TARGET'] = nil
13
+ end
14
+
15
+
16
+ Given /^build target is "(.*?)"$/ do |target_name|
17
+ ENV['MIDDLEMAN_BUILD_TARGET'] = target_name
18
+ end
@@ -0,0 +1,35 @@
1
+ Feature: Target
2
+
3
+ Scenario: build target name
4
+ Given build target is "foo"
5
+ And the Server is running at "build_target"
6
+ When I go to "/build_target.html"
7
+ Then I should see "current build target: foo"
8
+
9
+ Scenario: build target map
10
+ Given the Server is running at "build_targets"
11
+ When I go to "/build_targets.html"
12
+ Then I should see 'build target map: {"phonegap"=>{:includes=>["android", "ios"]}}'
13
+
14
+ Scenario: build target is "phonegap" which includes "ios"
15
+ Given build target is "ios"
16
+ And the Server is running at "build_target_includes"
17
+ When I go to "/build_target_includes.html"
18
+ Then I should see "Specified target ios is included in phonegap target."
19
+
20
+ Scenario: build target is "phonegap" which does not include "windows_phone"
21
+ Given build target is "windows_phone"
22
+ And the Server is running at "build_target_includes"
23
+ When I go to "/build_target_includes.html"
24
+ Then I should see "Specified target windows_phone is not included in phonegap target."
25
+
26
+ Scenario: no target or using default build target
27
+ Given the Server is running at "build_target_default"
28
+ When I go to "/build_target_default.html"
29
+ Then I should see "Using the default build target, or no target specified."
30
+
31
+ Scenario: target specified, not using default build target
32
+ Given build target is "foo"
33
+ Given the Server is running at "build_target_default"
34
+ When I go to "/build_target_default.html"
35
+ Then I should see "A build target has been specified that is not the default."
@@ -0,0 +1 @@
1
+ activate :target
@@ -0,0 +1 @@
1
+ <p>current build target: <%= build_target %></p>
@@ -0,0 +1 @@
1
+ activate :target
@@ -0,0 +1,7 @@
1
+ <p>
2
+ <% if default_target? || no_target? %>
3
+ Using the default build target, or no target specified.
4
+ <% else %>
5
+ A build target has been specified that is not the default.
6
+ <% end %>
7
+ </p>
@@ -0,0 +1,9 @@
1
+ activate :target do |target|
2
+
3
+ target.build_targets = {
4
+ "phonegap" => {
5
+ :includes => %w[android ios]
6
+ }
7
+ }
8
+
9
+ end
@@ -0,0 +1,2 @@
1
+ <p>Specified target <%= build_target %> <% if target?(:phonegap) %>is<% else %>is not<% end %> included in phonegap target.</p>
2
+
@@ -0,0 +1,9 @@
1
+ activate :target do |target|
2
+
3
+ target.build_targets = {
4
+ "phonegap" => {
5
+ :includes => %w[android ios]
6
+ }
7
+ }
8
+
9
+ end
@@ -0,0 +1 @@
1
+ <p>build target map: <%= build_targets.inspect %></p>
@@ -0,0 +1,71 @@
1
+ module Middleman
2
+ module Target
3
+
4
+ # Options class copied from
5
+ # https://github.com/middleman/middleman-blog/blob/master/lib/middleman-blog/extension.rb
6
+ class Options
7
+ KEYS = [ :build_targets ]
8
+
9
+ KEYS.each do |name|
10
+ attr_accessor name
11
+ end
12
+
13
+ def initialize(options={})
14
+ options.each do |k,v|
15
+ self.send(:"#{k}=", v)
16
+ end
17
+ end
18
+ end
19
+
20
+ class << self
21
+ def registered(app, options_hash={}, &block)
22
+ # app.set :build_targets, {}
23
+ app.helpers HelperMethods
24
+
25
+ options = Options.new(options_hash)
26
+ yield options if block_given?
27
+
28
+ if options.build_targets
29
+ raise "#build_targets must be a hash" unless options.build_targets.class == Hash
30
+ app.set :build_target_definitions, options.build_targets
31
+ end
32
+ end
33
+ alias :included :registered
34
+ end
35
+
36
+ module HelperMethods
37
+ DEFAULT_BUILD_TARGET = :default
38
+
39
+ def build_targets
40
+ @build_target ||= build_target_definitions
41
+ end
42
+
43
+ def build_target
44
+ @middleman_build_target ||= if ENV['MIDDLEMAN_BUILD_TARGET']
45
+ ENV['MIDDLEMAN_BUILD_TARGET'].downcase.to_sym
46
+ else
47
+ DEFAULT_BUILD_TARGET
48
+ end
49
+ end
50
+
51
+ def build_target_is?(target_name)
52
+ if build_targets.empty?
53
+ build_target == target_name
54
+ else
55
+ if !build_targets[target_name.to_s].nil?
56
+ if (build_targets[target_name.to_s][:includes] || []).include?(build_target.to_s)
57
+ return true
58
+ end
59
+ end
60
+ return false
61
+ end
62
+ end
63
+ alias :target? :build_target_is?
64
+
65
+ def default_target?
66
+ build_target == DEFAULT_BUILD_TARGET
67
+ end
68
+ alias :no_target? :default_target?
69
+ end
70
+ end
71
+ end
@@ -1,53 +1,6 @@
1
- module Middleman::Features::Target
1
+ require "middleman-core"
2
2
 
3
- class << self
4
- def registered(app)
5
- app.set :build_targets, {}
6
- app.extend ClassMethods
7
- app.helpers HelperMethods
8
- end
9
- alias :included :registered
10
- end
11
-
12
- module ClassMethods
13
- def set_build_targets(targets={})
14
- raise "#set_build_targets() argument must be a hash" unless targets.class == Hash
15
- settings.build_targets = targets
16
- end
17
- end
18
-
19
- module HelperMethods
20
- DEFAULT_BUILD_TARGET = :default
21
-
22
- def build_targets
23
- @build_target ||= settings.build_targets
24
- end
25
-
26
- def build_target
27
- @middleman_build_target ||= if ENV['MIDDLEMAN_BUILD_TARGET']
28
- ENV['MIDDLEMAN_BUILD_TARGET'].downcase.to_sym
29
- else
30
- DEFAULT_BUILD_TARGET
31
- end
32
- end
33
-
34
- def build_target_is?(target_name)
35
- if build_targets.empty?
36
- build_target == target_name
37
- else
38
- if !build_targets[target_name.to_s].nil?
39
- if (build_targets[target_name.to_s][:includes] || []).include?(build_target.to_s)
40
- return true
41
- end
42
- end
43
- return false
44
- end
45
- end
46
- alias :target? :build_target_is?
47
-
48
- def default_target?
49
- build_target == DEFAULT_BUILD_TARGET
50
- end
51
- alias :no_target? :default_target?
52
- end
53
- end
3
+ ::Middleman::Extensions.register(:target) do
4
+ require "middleman-target/extension"
5
+ ::Middleman::Target
6
+ end
@@ -0,0 +1 @@
1
+ require "middleman-target"
metadata CHANGED
@@ -1,95 +1,125 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: middleman-target
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 0
8
- - 1
9
- version: 0.0.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - Matthew Nielsen
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2012-04-12 00:00:00 -06:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2013-02-04 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: middleman
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- requirements:
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
25
19
  - - ~>
26
- - !ruby/object:Gem::Version
27
- segments:
28
- - 2
29
- - 0
30
- - 15
31
- version: 2.0.15
20
+ - !ruby/object:Gem::Version
21
+ version: 3.0.11
32
22
  type: :runtime
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: rspec
36
23
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
38
- requirements:
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 3.0.11
30
+ - !ruby/object:Gem::Dependency
31
+ name: cucumber
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 1.1.0
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.1.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: aruba
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
39
51
  - - ~>
40
- - !ruby/object:Gem::Version
41
- segments:
42
- - 2
43
- - 9
44
- - 0
45
- version: 2.9.0
52
+ - !ruby/object:Gem::Version
53
+ version: 0.4.11
46
54
  type: :development
47
- version_requirements: *id002
48
- description: Allows you specify different targets for a middleman build so you can build different versions of a site from the same source tree.
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 0.4.11
62
+ - !ruby/object:Gem::Dependency
63
+ name: rspec
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 2.12.0
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 2.12.0
78
+ description: Allows you specify different targets for a middleman build so you can
79
+ build different versions of a site from the same source tree.
49
80
  email: xunker@pyxidis.org
50
81
  executables: []
51
-
52
82
  extensions: []
53
-
54
83
  extra_rdoc_files: []
55
-
56
- files:
84
+ files:
57
85
  - README.md
58
86
  - examples/config.rb
59
87
  - examples/source/index.html.erb
88
+ - lib/middleman-target/extension.rb
60
89
  - lib/middleman-target.rb
61
- - spec/spec.opts
62
- - spec/spec_helper.rb
63
- - spec/lib/middleman-target_spec.rb
64
- has_rdoc: true
90
+ - lib/middleman_extension.rb
91
+ - fixtures/build_target/config.rb
92
+ - fixtures/build_target/source/build_target.html.erb
93
+ - fixtures/build_target_default/config.rb
94
+ - fixtures/build_target_default/source/build_target_default.html.erb
95
+ - fixtures/build_target_includes/config.rb
96
+ - fixtures/build_target_includes/source/build_target_includes.html.erb
97
+ - fixtures/build_targets/config.rb
98
+ - fixtures/build_targets/source/build_targets.html.erb
99
+ - features/support/env.rb
100
+ - features/target.feature
65
101
  homepage: https://github.com/xunker/middleman-target
66
102
  licenses: []
67
-
68
103
  post_install_message:
69
104
  rdoc_options: []
70
-
71
- require_paths:
105
+ require_paths:
72
106
  - lib
73
- required_ruby_version: !ruby/object:Gem::Requirement
74
- requirements:
75
- - - ">="
76
- - !ruby/object:Gem::Version
77
- segments:
78
- - 0
79
- version: "0"
80
- required_rubygems_version: !ruby/object:Gem::Requirement
81
- requirements:
82
- - - ">="
83
- - !ruby/object:Gem::Version
84
- segments:
85
- - 0
86
- version: "0"
107
+ required_ruby_version: !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ! '>='
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
113
+ required_rubygems_version: !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ! '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
87
119
  requirements: []
88
-
89
120
  rubyforge_project:
90
- rubygems_version: 1.3.6
121
+ rubygems_version: 1.8.24
91
122
  signing_key:
92
123
  specification_version: 3
93
124
  summary: Ability to specify build targets for Middleman projects
94
125
  test_files: []
95
-
@@ -1,155 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Middleman
4
- module Features
5
- require 'lib/middleman-target'
6
- end
7
- end
8
-
9
- class HelperMethodTest
10
- include Middleman::Features::Target::HelperMethods
11
- end
12
-
13
- class ClassMethodTest
14
- include Middleman::Features::Target::ClassMethods
15
- end
16
-
17
- ###
18
-
19
- describe Middleman::Features do
20
- describe Middleman::Features::Target do
21
- describe '.registered' do
22
- pending "Not sure how to test this guy"
23
- end
24
- end
25
-
26
- describe Middleman::Features::Target::ClassMethods do
27
- before(:each) do
28
- @base = ClassMethodTest.new
29
- end
30
-
31
- describe '#set_build_targets' do
32
- it 'should set the build_targets setting to be the passed value' do
33
- # expect
34
- @base.stub!(:settings).and_return(mock('settings'))
35
- @base.settings.should_receive(:build_targets=).once.with({:foo => 'bar'})
36
-
37
- # when
38
- @base.set_build_targets({:foo => 'bar'})
39
- end
40
-
41
- it 'should only accept hashes as arguments' do
42
- lambda {
43
- @base.set_build_targets('string')
44
- }.should raise_error(RuntimeError)
45
- end
46
- end
47
- end
48
-
49
- describe Middleman::Features::Target::HelperMethods do
50
- before(:each) do
51
- @base = HelperMethodTest.new
52
- end
53
-
54
- describe '#build_target_is?' do
55
- before(:each) do
56
- @base.stub!(:settings).and_return(mock('settings', :build_targets => {}))
57
- end
58
-
59
- it 'should be true if build target matches passed argument' do
60
- # given
61
- @base.stub!(:build_target).and_return(:foo)
62
-
63
- # expect
64
- @base.build_target_is?(:foo).should be_true
65
- end
66
-
67
- it 'should be false if build target does not match passed argument' do
68
- # given
69
- @base.stub!(:build_target).and_return(:bar)
70
-
71
- # expect
72
- @base.build_target_is?(:foo).should be_false
73
- end
74
-
75
- it 'should be true if build_targets defines a target that "includes" this target' do
76
- # given
77
- @base.stub!(:build_target).and_return(:android)
78
-
79
- @base.stub!(:settings).and_return(
80
- mock('settings', :build_targets => {
81
- "phonegap" => {
82
- :includes => %w[android ios]
83
- }
84
- })
85
- )
86
-
87
- # expect
88
- @base.build_target_is?(:phonegap).should be_true
89
- end
90
-
91
- it 'should be false if build_targets is defined but does "include" target in any definition' do
92
- # given
93
- @base.stub!(:build_target).and_return(:winmo6)
94
-
95
- @base.stub!(:settings).and_return(
96
- mock('settings', :build_targets => {
97
- "phonegap" => {
98
- :includes => %w[android ios]
99
- }
100
- })
101
- )
102
-
103
- # expect
104
- @base.build_target_is?(:phonegap).should be_false
105
- end
106
- end
107
-
108
- describe '#default_target?' do
109
- it 'should be true if the current target is the default target' do
110
- # given
111
- @base.stub!(:build_target).and_return(
112
- Middleman::Features::Target::HelperMethods::DEFAULT_BUILD_TARGET
113
- )
114
-
115
- # expect
116
- @base.default_target?.should be_true
117
- end
118
- it 'should be false if the current target is not the default target' do
119
- # given
120
- @base.stub!(:build_target).and_return(:something)
121
-
122
- # expect
123
- @base.default_target?.should be_false
124
- end
125
- end
126
-
127
- describe '#build_target' do
128
- before(:each) do
129
- @base.stub!(:settings).and_return(mock('settings', :build_targets => {}))
130
- end
131
- it 'should return the specified build target if one was given' do
132
- # given
133
- ENV['MIDDLEMAN_BUILD_TARGET'] = 'something'
134
-
135
- # expect
136
- @base.build_target.should == :something
137
- end
138
- it 'should downcase and symbolize the given build target' do
139
- # given
140
- ENV['MIDDLEMAN_BUILD_TARGET'] = 'SoMeThInG'
141
-
142
- # expect
143
- @base.build_target.should == :something
144
- end
145
- it 'should return the default build target if one was given' do
146
- # given
147
- ENV['MIDDLEMAN_BUILD_TARGET'] = nil
148
-
149
- # expect
150
- @base.build_target.should == Middleman::Features::Target::HelperMethods::DEFAULT_BUILD_TARGET
151
- end
152
- end
153
-
154
- end
155
- end
data/spec/spec.opts DELETED
@@ -1,4 +0,0 @@
1
- --colour
2
- --format progress
3
- --loadby mtime
4
- --reverse
data/spec/spec_helper.rb DELETED
File without changes