sow 0.4.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.
Files changed (94) hide show
  1. data/COPYING +622 -0
  2. data/HISTORY +14 -0
  3. data/MANIFEST +138 -0
  4. data/NOTES +86 -0
  5. data/README +157 -0
  6. data/bin/sow +4 -0
  7. data/lib/sow.rb +12 -0
  8. data/lib/sow/command.rb +201 -0
  9. data/lib/sow/context.rb +29 -0
  10. data/lib/sow/core_ext.rb +47 -0
  11. data/lib/sow/generators/base.rb +321 -0
  12. data/lib/sow/generators/create.rb +111 -0
  13. data/lib/sow/generators/delete.rb +50 -0
  14. data/lib/sow/generators/update.rb +47 -0
  15. data/lib/sow/logger.rb +73 -0
  16. data/lib/sow/manager.rb +101 -0
  17. data/lib/sow/metadata.rb +115 -0
  18. data/lib/sow/plugin.rb +484 -0
  19. data/lib/sow/script.rb +186 -0
  20. data/lib/sow/session.rb +150 -0
  21. data/meta/authors +1 -0
  22. data/meta/contact +1 -0
  23. data/meta/description +1 -0
  24. data/meta/homepage +1 -0
  25. data/meta/loadpath +2 -0
  26. data/meta/package +1 -0
  27. data/meta/project +1 -0
  28. data/meta/repository +1 -0
  29. data/meta/requires +2 -0
  30. data/meta/ruby +2 -0
  31. data/meta/version +1 -0
  32. data/plug/sow/seeds/bin/.meta/created +1 -0
  33. data/plug/sow/seeds/bin/.meta/description +1 -0
  34. data/plug/sow/seeds/bin/.meta/license +1 -0
  35. data/plug/sow/seeds/bin/.meta/package +1 -0
  36. data/plug/sow/seeds/bin/.meta/requires +1 -0
  37. data/plug/sow/seeds/bin/.meta/title +1 -0
  38. data/plug/sow/seeds/bin/.meta/version +1 -0
  39. data/plug/sow/seeds/bin/SCRIPT.rb +22 -0
  40. data/plug/sow/seeds/bin/template/bin/command.rb +12 -0
  41. data/plug/sow/seeds/hoe/SCRIPT.rb +28 -0
  42. data/plug/sow/seeds/hoe/template/History.txt +7 -0
  43. data/plug/sow/seeds/hoe/template/Manifest.txt +8 -0
  44. data/plug/sow/seeds/hoe/template/README.txt +49 -0
  45. data/plug/sow/seeds/hoe/template/Rakefile +13 -0
  46. data/plug/sow/seeds/hoe/template/bin/__name__ +0 -0
  47. data/plug/sow/seeds/hoe/template/lib/__name__.rb +4 -0
  48. data/plug/sow/seeds/hoe/template/test/test___name__.rb +1 -0
  49. data/plug/sow/seeds/license/SCRIPT.rb +27 -0
  50. data/plug/sow/seeds/license/template/META/license +1 -0
  51. data/plug/sow/seeds/license/template/gpl/LICENSE +622 -0
  52. data/plug/sow/seeds/license/template/lgpl/LICENSE +789 -0
  53. data/plug/sow/seeds/license/template/mit/LICENSE +22 -0
  54. data/plug/sow/seeds/ruby/COPY.yml +14 -0
  55. data/plug/sow/seeds/ruby/DATA.yml +8 -0
  56. data/plug/sow/seeds/ruby/USAGE.txt +8 -0
  57. data/plug/sow/seeds/ruby/script.sow.rb +17 -0
  58. data/plug/sow/seeds/ruby/template/COPYING +622 -0
  59. data/plug/sow/seeds/ruby/template/History.rdoc +18 -0
  60. data/plug/sow/seeds/ruby/template/README.rdoc +43 -0
  61. data/plug/sow/seeds/ruby/template/README.rdoc.till +43 -0
  62. data/plug/sow/seeds/ruby/template/Rakefile +1 -0
  63. data/plug/sow/seeds/ruby/template/bin/__package__ +2 -0
  64. data/plug/sow/seeds/ruby/template/lib/__package__.rb +3 -0
  65. data/plug/sow/seeds/ruby/template/meta/created +1 -0
  66. data/plug/sow/seeds/ruby/template/meta/description +1 -0
  67. data/plug/sow/seeds/ruby/template/meta/license +1 -0
  68. data/plug/sow/seeds/ruby/template/meta/package +1 -0
  69. data/plug/sow/seeds/ruby/template/meta/requires +1 -0
  70. data/plug/sow/seeds/ruby/template/meta/title +1 -0
  71. data/plug/sow/seeds/ruby/template/meta/version +1 -0
  72. data/plug/sow/seeds/ruby/template/setup.rb +1467 -0
  73. data/plug/sow/seeds/ruby/template/test/template.rb +17 -0
  74. data/plug/sow/seeds/testunit/COPY.yml +12 -0
  75. data/plug/sow/seeds/testunit/DATA.yml +23 -0
  76. data/plug/sow/seeds/testunit/USAGE.txt +11 -0
  77. data/plug/sow/seeds/testunit/_SCRIPT.rb +42 -0
  78. data/plug/sow/seeds/testunit/template/form/testunit +24 -0
  79. data/plug/sow/seeds/testunit/template/test/test_template.rb +15 -0
  80. data/plug/sow/seeds/website/template/assets/styles/color.css +0 -0
  81. data/plug/sow/seeds/website/template/assets/styles/font.css +0 -0
  82. data/plug/sow/seeds/website/template/assets/styles/index.css +4 -0
  83. data/plug/sow/seeds/website/template/assets/styles/reset.css +0 -0
  84. data/plug/sow/seeds/website/template/assets/styles/struct.css +0 -0
  85. data/plug/sow/seeds/website/template/index.html +15 -0
  86. data/test/features/scaffold.feature +13 -0
  87. data/test/features/step_definitions/cli_steps.rb +0 -0
  88. data/test/features/step_definitions/fixture_steps.rb +72 -0
  89. data/test/features/support/env.rb +41 -0
  90. data/test/unit/fixtures/README +5 -0
  91. data/test/unit/helper.rb +23 -0
  92. data/test/unit/test_metadata.rb +17 -0
  93. data/test/unit/test_scaffold.rb +37 -0
  94. metadata +178 -0
data/lib/sow/script.rb ADDED
@@ -0,0 +1,186 @@
1
+ module Sow
2
+
3
+ # A Sow Script provides a simple DSL for specifying
4
+ # arguments, a copylist and the various specificities
5
+ # needed to define a scaffold generator proccess.
6
+ #
7
+ # Note: This is the old way of building a plugin.
8
+
9
+ class Script
10
+
11
+ # Script registery/
12
+
13
+ def self.registry
14
+ @registry ||= {}
15
+ end
16
+
17
+ # If inherited, register the script by it's class basename downcased.
18
+
19
+ def self.inherited(base)
20
+ registry[base.basename.downcase] = base
21
+ end
22
+
23
+ # Setup procedure, used to setup metadata.
24
+
25
+ def self.setup(&block)
26
+ define_method(:setup,&block)
27
+ end
28
+
29
+ # Manifest procedure, used to invoke #copy.
30
+
31
+ def self.manifest(&block)
32
+ define_method(:manifest,&block)
33
+ end
34
+
35
+ # Specify a valid option.
36
+
37
+ def self.option(name)
38
+ attr_accessor(name)
39
+ end
40
+
41
+ # Give the main argument a name.
42
+
43
+ def self.argument(name)
44
+ define_method(name){ argument }
45
+ end
46
+
47
+ # Override and setup metadata and validate.
48
+ # If something does jive, then use #abort to
49
+ # terminate execution.
50
+ def setup
51
+ end
52
+
53
+ # Override and place copy statment in this method.
54
+ #
55
+ def manifest
56
+ copy '**/*', '.'
57
+ end
58
+
59
+ # Instance of Session.
60
+
61
+ attr :session
62
+
63
+ #
64
+
65
+ attr :options
66
+
67
+ # Copylist contains the a list of transfer operations as
68
+ # compiled from the plugin.
69
+
70
+ attr :copylist
71
+
72
+ #
73
+ def initialize(session, options)
74
+ @session = session
75
+ @options = options
76
+
77
+ @copylist = []
78
+ end
79
+
80
+ # Main argument.
81
+
82
+ def argument
83
+ options.argument
84
+ end
85
+
86
+ # Access to Metadata. When the script is initially executed,
87
+ # ie. toplevel and argument blocks, this is an OpenStruct.
88
+ # Use it to assign values to the metadata, which is used to
89
+ # render the file templates. When the scaffold block is
90
+ # finally executed, this is reassigned to the destinations
91
+ # metadata, so that it can be used in the copy calls, if
92
+ # needed.
93
+
94
+ def metadata
95
+ session.metadata
96
+ end
97
+
98
+ # Destiation pathname. This is used by some plugins,
99
+ # particularly full-project scaffolds, as a default
100
+ # package name. It is the basename of the output directory.
101
+
102
+ def destination
103
+ session.destination
104
+ end
105
+
106
+ #def values
107
+ # @values
108
+ #end
109
+
110
+ #def location=(path)
111
+ # @location = Pathname.new(path)
112
+ #end
113
+
114
+ # Describe the purpose of this generator.
115
+ def about(text)
116
+ @about = text
117
+ end
118
+
119
+ # Give a one line usage template.
120
+ # Eg. '--reap=<name>'
121
+ # "Usage: sow" is automatically prefixed to this.
122
+ #def usage(usage)
123
+ # @usage = usage
124
+ #end
125
+
126
+ # Define the commandline argument.
127
+ #def argument(name, desc=nil, &valid)
128
+ # @arguments << [name, desc, valid]
129
+ # #argv[name] = @arguments[@argc+=1]
130
+ # #valid.call(argv[name]) if valid
131
+ # #define_method(name) do
132
+ # # @arguments[i]
133
+ # #end
134
+ #end
135
+
136
+ #def option(name, desc=nil, &valid)
137
+ # @options << [name, desc, valid]
138
+ #end
139
+
140
+ # Designate a copying action.
141
+ #
142
+ # call-seq:
143
+ # copy(from, opts)
144
+ # copy(from, to, opts)
145
+ #
146
+ def copy(*from_to_opts)
147
+ opts = Hash===from_to_opts.last ? from_to_opts.pop : {}
148
+ from, to = *from_to_opts
149
+ to = to || '.'
150
+ @copylist << [from, to, opts.rekey(&:to_s)]
151
+ end
152
+
153
+ # This is to allow Plugin access to the internal state.
154
+ def [](var)
155
+ instance_variable_get("@#{var}")
156
+ end
157
+
158
+ # Set ... using a singleton method.
159
+ def []=(var, val)
160
+ quaclass = (class << self; self; end)
161
+ raise "invalid argument name -- #{var}" if quaclass.method_defined?(var)
162
+ quaclass.class_eval do
163
+ define_method(var){ val }
164
+ end
165
+ #@session[var.to_sym] = val
166
+ end
167
+
168
+ # If method missing, routes the call to +session+.
169
+ def method_missing(var,*a)
170
+ if val = @session.__send__(var)
171
+ return val
172
+ else
173
+ super
174
+ end
175
+ end
176
+
177
+ end#class Script
178
+
179
+ #
180
+ module Plugins
181
+ # see Sow::Script
182
+ Script = Sow::Script
183
+ end
184
+
185
+ end#module Sow
186
+
@@ -0,0 +1,150 @@
1
+ require 'sow/metadata'
2
+
3
+ module Sow
4
+
5
+ # Session provides a central store of commandline
6
+ # options and system state related to invocation
7
+ # the +sow+ command. This includes the destination
8
+ # directory, it's metadata and any special sow
9
+ # configurations.
10
+ #
11
+ class Session
12
+
13
+ # Create a new session instance.
14
+
15
+ def initialize(arguments, options)
16
+ @arguments = arguments
17
+ @options = options
18
+
19
+ @trial = options.trial?
20
+ @debug = options.debug?
21
+ @quiet = options.quiet?
22
+ @force = options.force?
23
+ @prompt = options.prompt?
24
+ @skip = options.skip?
25
+
26
+ @create = options.create?
27
+ @update = options.update?
28
+ @delete = options.delete?
29
+
30
+ @destination = Pathname.new(options.destination || Dir.pwd)
31
+
32
+ if file = Dir.glob(File.join(destination, '{,.}config/sow.{yml,yaml}')).first
33
+ @config = YAML.load(File.new(file))
34
+ @sowed = true
35
+ else
36
+ @config = {}
37
+ @sowed = false
38
+ end
39
+ end
40
+
41
+ public
42
+
43
+ # Destination for generated scaffolding.
44
+
45
+ attr :destination
46
+
47
+ # DEPREICATE: Is "output" too generic a name for a tool like Sow?
48
+
49
+ alias_method :output, :destination
50
+
51
+ # Tiral run? (Also know as a +noop+.)
52
+
53
+ def trial? ; @trial ; end
54
+
55
+ # Provide debugging information?
56
+
57
+ def debug? ; @debug ; end
58
+
59
+ # Run silently?
60
+
61
+ def quiet? ; @quiet ; end
62
+
63
+ # Override protected operations.
64
+
65
+ def force? ; @force ; end
66
+
67
+ # Prompot the user for options?
68
+
69
+ def prompt? ; @prompt ; end
70
+
71
+ # Skip overwrites?
72
+
73
+ def skip? ; @skip ; end
74
+
75
+ # Return command mode based on command options.
76
+ # Defaults to +:create+.
77
+ #--
78
+ # TODO: Are their circumstances where mode should defualt to update?
79
+ #++
80
+
81
+ def mode
82
+ return 'create' if @create
83
+ return 'update' if @update
84
+ return 'delete' if @delete
85
+ return 'create' #sowed? ? :update : :create
86
+ end
87
+
88
+ # Creation mode?
89
+
90
+ def create? ; @create ; end
91
+
92
+ # Update mode?
93
+
94
+ def update? ; @update ; end
95
+
96
+ # Delete mode?
97
+
98
+ def delete? ; @delete ; end
99
+
100
+ #
101
+ #def scaffold?
102
+ # mode == :create && !sowed? #|| force? instad of delete and update?
103
+ #end
104
+
105
+ # Sow configuration.
106
+
107
+ def config ; @config ; end
108
+
109
+ # Previously sowed?
110
+
111
+ def sowed? ; @sowed ; end
112
+
113
+ # Does the destination contain any files?
114
+
115
+ def empty?
116
+ @empty ||= Dir[destination + '*'].empty?
117
+ end
118
+
119
+ # Alias for #empty?
120
+
121
+ alias_method :new?, :empty?
122
+
123
+ # Metadata for destination, if any.
124
+ #--
125
+ # TODO: Use POM::Metadata in future?
126
+ #++
127
+
128
+ def metadata
129
+ @metadata ||= Metadata.new(destination)
130
+ end
131
+
132
+ # Destination has metadata?
133
+
134
+ def metadata?
135
+ metadata.exist?
136
+ end
137
+
138
+ # What is the destinations meta directory (+meta+ or +.meta+)?
139
+ # If none then defaults to +.meta+.
140
+
141
+ def metadir
142
+ @meta_directory ||= (Dir[File.join(destination, '{.meta,meta}/')].first || '.meta/').chomp('/')
143
+ end
144
+
145
+ # Alias for meta_directory
146
+ #alias_method :metadir, :meta_directory
147
+
148
+ end
149
+
150
+ end
data/meta/authors ADDED
@@ -0,0 +1 @@
1
+ trans <transfire@gmail.com>
data/meta/contact ADDED
@@ -0,0 +1 @@
1
+ tigerops-community@rubyforge.org
data/meta/description ADDED
@@ -0,0 +1 @@
1
+ Sow is a flexible and straightforward project file generation system.
data/meta/homepage ADDED
@@ -0,0 +1 @@
1
+ http://sow.rubyforge.org
data/meta/loadpath ADDED
@@ -0,0 +1,2 @@
1
+ lib
2
+ plug
data/meta/package ADDED
@@ -0,0 +1 @@
1
+ sow
data/meta/project ADDED
@@ -0,0 +1 @@
1
+ proutils
data/meta/repository ADDED
@@ -0,0 +1 @@
1
+ git://github.com/proutils/sow.git
data/meta/requires ADDED
@@ -0,0 +1,2 @@
1
+ facets >=2.4.3
2
+ xdg
data/meta/ruby ADDED
@@ -0,0 +1,2 @@
1
+ - 1.8.6
2
+ - 1.8.7
data/meta/version ADDED
@@ -0,0 +1 @@
1
+ 0.4.0
@@ -0,0 +1 @@
1
+ <%= Time.now.strftime("%Y-%M-%D") %>
@@ -0,0 +1 @@
1
+ <%= package %> is a __FIX__.
@@ -0,0 +1 @@
1
+ GPL
@@ -0,0 +1 @@
1
+ <%= package %>
@@ -0,0 +1 @@
1
+
@@ -0,0 +1 @@
1
+ <%= package.capitalize %>
@@ -0,0 +1 @@
1
+ 1.0.0
@@ -0,0 +1,22 @@
1
+ module Sow::Plugins
2
+
3
+ # Scaffold a ruby bin/ file.
4
+ #
5
+ class Bin < Script
6
+
7
+ option :name
8
+
9
+ setup do
10
+ @name = argument || destination
11
+ abort "Exectuable name is required." unless name
12
+ abort "Executable name must be a single word." if /\w/ !~ name
13
+ end
14
+
15
+ manifest do
16
+ copy 'bin/command.rb', "bin/#{@name}", :chmod => 0754
17
+ end
18
+
19
+ end
20
+
21
+ end
22
+
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Created <%= "by #{author} " if author %>on <%= (now = Time.now).year %>-<%= now.month %>-<%= now.day %>.
4
+ # Copyright (c) <%= now.year %>. All rights reserved.
5
+ #
6
+ # TODO: write executable
7
+ #
8
+ # It might be something like the following.
9
+
10
+ require '<%= package %>/command.rb'
11
+ <%= title %>::Command.execute
12
+
@@ -0,0 +1,28 @@
1
+ # How plugin, to make up for the fact the Sow clobber's
2
+ # Hoe's +sow+ command.
3
+ #
4
+ # It's silly for Hoe to have a command called +sow+ when
5
+ # it could just as well used +hoe+ andyway.
6
+
7
+ module Sow::Plugins
8
+
9
+ # Scaffold a new Hoe-ready project
10
+ #
11
+ class Hoe < Script
12
+
13
+ option :name
14
+
15
+ setup do
16
+ name = name() || argument
17
+ abort "Project name argument required." unless name
18
+ metadata.name = name
19
+ end
20
+
21
+ manifest do
22
+ copy "**/*", '.'
23
+ end
24
+
25
+ end
26
+
27
+ end
28
+