sprites 0.0.1.rc2 → 0.0.1.rc3

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 (151) hide show
  1. data/.gitignore +3 -0
  2. data/Gemfile +0 -8
  3. data/MIT-LICENSE +20 -0
  4. data/README.md +76 -1
  5. data/Rakefile +4 -39
  6. data/bin/sprites +5 -7
  7. data/features/cli.feature +1 -1
  8. data/features/step_definitions/common_steps.rb +10 -8
  9. data/lib/sprites.rb +123 -13
  10. data/lib/sprites/cli/cli_application.rb +6 -4
  11. data/lib/sprites/cli/command_line_option_parser.rb +16 -16
  12. data/lib/sprites/configuration.rb +26 -7
  13. data/lib/sprites/railtie.rb +56 -0
  14. data/lib/sprites/sprite.rb +80 -46
  15. data/lib/sprites/sprite_generators/chunky_png_generator.rb +14 -8
  16. data/lib/sprites/sprite_piece.rb +20 -9
  17. data/lib/sprites/sprite_pieces.rb +10 -10
  18. data/lib/sprites/test/sprite_generator_tester.rb +23 -12
  19. data/lib/sprites/version.rb +2 -2
  20. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/bas/bar.png +0 -0
  21. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/bas/bas.png +0 -0
  22. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/bas/bkgd_main_copy.png +0 -0
  23. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/bas/foo.png +0 -0
  24. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/bas/fubar.png +0 -0
  25. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-black-default-28.png +0 -0
  26. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-black-default-cap-28.png +0 -0
  27. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-black-default-cap-long.png +0 -0
  28. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-black-default.png +0 -0
  29. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-black-onclick-28.png +0 -0
  30. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-black-onclick-cap-28.png +0 -0
  31. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-black-onclick-cap-long.png +0 -0
  32. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-black-onclick.png +0 -0
  33. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-black-rollover-28.png +0 -0
  34. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-black-rollover-cap-28.png +0 -0
  35. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-black-rollover-cap-long.png +0 -0
  36. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-black-rollover.png +0 -0
  37. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-blackarrow-default.png +0 -0
  38. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-blackarrow-onclick.png +0 -0
  39. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-blackarrow-rollover.png +0 -0
  40. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-blue-default-cap.png +0 -0
  41. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-blue-default-drop.png +0 -0
  42. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-blue-default-edge.png +0 -0
  43. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-blue-default.png +0 -0
  44. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-blue-onclick-cap.png +0 -0
  45. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-blue-onclick-drop.png +0 -0
  46. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-blue-onclick-edge.png +0 -0
  47. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-blue-onclick.png +0 -0
  48. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-blue-rollover-cap.png +0 -0
  49. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-blue-rollover-drop.png +0 -0
  50. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-blue-rollover-edge.png +0 -0
  51. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-blue-rollover.png +0 -0
  52. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-green-default-cap.png +0 -0
  53. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-green-default-drop.png +0 -0
  54. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-green-default-edge.png +0 -0
  55. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-green-default.png +0 -0
  56. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-green-onclick-cap.png +0 -0
  57. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-green-onclick-drop.png +0 -0
  58. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-green-onclick-edge.png +0 -0
  59. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-green-onclick.png +0 -0
  60. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-green-rollover-cap.png +0 -0
  61. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-green-rollover-drop.png +0 -0
  62. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-green-rollover-edge.png +0 -0
  63. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-green-rollover.png +0 -0
  64. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-red-default-cap.png +0 -0
  65. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-red-default-drop.png +0 -0
  66. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-red-default-edge.png +0 -0
  67. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-red-default.png +0 -0
  68. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-red-onclick-cap.png +0 -0
  69. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-red-onclick-drop.png +0 -0
  70. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-red-onclick-edge.png +0 -0
  71. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-red-onclick.png +0 -0
  72. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-red-rollover-cap.png +0 -0
  73. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-red-rollover-drop.png +0 -0
  74. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-red-rollover-edge.png +0 -0
  75. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-red-rollover.png +0 -0
  76. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-trans-default-cap.png +0 -0
  77. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-trans-default-drop.png +0 -0
  78. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-trans-default-edge.png +0 -0
  79. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-trans-default.png +0 -0
  80. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-trans-onclick-cap.png +0 -0
  81. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-trans-onclick-drop.png +0 -0
  82. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-trans-onclick-edge.png +0 -0
  83. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-trans-onclick.png +0 -0
  84. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-trans-rollover-cap.png +0 -0
  85. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-trans-rollover-drop.png +0 -0
  86. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-trans-rollover-edge.png +0 -0
  87. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-trans-rollover.png +0 -0
  88. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-white-default-cap.png +0 -0
  89. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-white-default-drop.png +0 -0
  90. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-white-default-edge.png +0 -0
  91. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-white-default.png +0 -0
  92. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-white-onclick-cap.png +0 -0
  93. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-white-onclick-drop.png +0 -0
  94. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-white-onclick-edge.png +0 -0
  95. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-white-onclick.png +0 -0
  96. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-white-rollover-cap.png +0 -0
  97. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-white-rollover-drop.png +0 -0
  98. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-white-rollover-edge.png +0 -0
  99. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-white-rollover.png +0 -0
  100. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-yellow-default-cap.png +0 -0
  101. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-yellow-default-drop.png +0 -0
  102. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-yellow-default-edge.png +0 -0
  103. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-yellow-default.png +0 -0
  104. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-yellow-onclick-cap.png +0 -0
  105. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-yellow-onclick-drop.png +0 -0
  106. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-yellow-onclick-edge.png +0 -0
  107. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-yellow-onclick.png +0 -0
  108. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-yellow-rollover-cap.png +0 -0
  109. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-yellow-rollover-drop.png +0 -0
  110. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-yellow-rollover-edge.png +0 -0
  111. data/spec/fixtures/{rails_project2 → fake_engine}/app/assets/images/sprite_images/buttons/btn-yellow-rollover.png +0 -0
  112. data/spec/fixtures/fake_engine/config/sprites.rb +91 -0
  113. data/spec/fixtures/fake_engine/lib/fake_engine.rb +5 -0
  114. data/spec/fixtures/project1/config/sprites.rb +143 -145
  115. data/spec/fixtures/rails_project1/config/application.rb +4 -3
  116. data/spec/fixtures/rails_project1/config/sprites.rb +90 -92
  117. data/spec/integration/rails/rails_spec.rb +46 -13
  118. data/spec/lib/sprites/configuration_spec.rb +11 -5
  119. data/spec/lib/sprites/sprite_generators/chunky_png_generator_spec.rb +10 -9
  120. data/spec/lib/sprites/sprite_piece_spec.rb +25 -24
  121. data/spec/lib/sprites/sprite_pieces_spec.rb +5 -2
  122. data/spec/lib/sprites/sprite_spec.rb +30 -33
  123. data/spec/lib/sprites/test/sprite_generator_tester_spec.rb +37 -9
  124. data/spec/lib/sprites_spec.rb +163 -8
  125. data/spec/spec_helper.rb +4 -4
  126. data/spec/support/sprites_helper.rb +1 -1
  127. data/sprites.gemspec +6 -5
  128. metadata +134 -660
  129. data/lib/sprites/application.rb +0 -60
  130. data/lib/sprites/autoload.rb +0 -1
  131. data/lib/sprites/autoloader.rb +0 -16
  132. data/lib/sprites/notifier.rb +0 -4
  133. data/lib/sprites/rails.rb +0 -20
  134. data/lib/sprites/rails/autoload.rb +0 -13
  135. data/lib/sprites/rails/sprites.rake +0 -15
  136. data/lib/sprites/sprites.rb +0 -47
  137. data/lib/sprites/stylesheet.rb +0 -26
  138. data/spec/fixtures/rails_project1/Rakefile +0 -5
  139. data/spec/fixtures/rails_project1/config/boot.rb +0 -6
  140. data/spec/fixtures/rails_project1/config/environment.rb +0 -7
  141. data/spec/fixtures/rails_project2/Rakefile +0 -5
  142. data/spec/fixtures/rails_project2/config/application.rb +0 -61
  143. data/spec/fixtures/rails_project2/config/boot.rb +0 -6
  144. data/spec/fixtures/rails_project2/config/environment.rb +0 -7
  145. data/spec/fixtures/rails_project2/config/sprites.rb +0 -93
  146. data/spec/lib/sprites/application_spec.rb +0 -50
  147. data/spec/lib/sprites/autoloader_spec.rb +0 -21
  148. data/spec/lib/sprites/cli/command_line_option_parser_spec.rb +0 -5
  149. data/spec/lib/sprites/notifier_spec.rb +0 -5
  150. data/spec/lib/sprites/sprites_spec.rb +0 -100
  151. data/spec/lib/sprites/stylesheet_spec.rb +0 -24
data/.gitignore CHANGED
@@ -10,4 +10,7 @@ doc
10
10
 
11
11
  spec/fixtures/project1/public/images/sprites/*.png
12
12
  spec/fixtures/project1/public/stylesheets/sprites/*.css
13
+ spec/fixtures/rails_project1/log
14
+ spec/fixtures/rails_project1/app/assets/images/sprites
15
+ spec/fixtures/rails_project1/app/assets/stylesheets
13
16
 
data/Gemfile CHANGED
@@ -2,11 +2,3 @@ source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in sprites.gemspec
4
4
  gemspec
5
-
6
- platforms :mri_18 do
7
- gem 'ruby-debug'
8
- end
9
-
10
- platforms :mri_19 do
11
- gem 'ruby-debug19'
12
- end
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010-2012 Sam Woodard - http://github.com/shwoodard
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -2,7 +2,21 @@
2
2
 
3
3
  Sprites is a library that let's you define the sprites for your application with configuration or convention. Sprites will generate your sprites, and a corresponding stylesheet for each using either the cli or from within a Rails application.
4
4
 
5
- ## Project Structure
5
+ ## The DSL for sprites.rb
6
+
7
+ ``` ruby
8
+ sprite :bas
9
+
10
+ sprite :buttons, :path => "buttons.png", :stylesheet_path => "buttons.css", :autoload => false do
11
+ sprite_piece 'buttons/btn-black-default-28.png', 'a.black.button > span, button.black.submit span'
12
+ sprite_piece 'buttons/btn-black-default-cap-28.png', 'a.black.button, button.black.submit', :x => 'right'
13
+ ...
14
+ end
15
+ ```
16
+
17
+ ## For the cli
18
+
19
+ ### Project Structure
6
20
 
7
21
  |
8
22
  |\_config
@@ -16,3 +30,64 @@ Sprites is a library that let's you define the sprites for your application with
16
30
  \_sprite_name2
17
31
  |\_blue_icon.png
18
32
  \_green_icon.png
33
+
34
+ gem install sprites
35
+
36
+ execute:
37
+
38
+ cd PROJECT_ROOT
39
+ sprites
40
+
41
+ For usage
42
+
43
+ sprites --help
44
+
45
+
46
+ ## In your Rails app
47
+
48
+ #### Gemfile
49
+
50
+ ``` ruby
51
+ gem 'sprites'
52
+ ```
53
+
54
+ #### application.rb
55
+
56
+ ``` ruby
57
+ config.uses_sprites = true
58
+ ```
59
+
60
+ Optionally include a `config/sprites.rb` (see above). Otherwise _Sprites_ will use it's auto-load feature. Example, if you have `app/assets/images/sprite_images/foo/bar.png` and `app/assets/images/sprite_images/foo/bas.png`, _Sprites_ will create `app/assets/stylesheets/sprites/foo.css` and `app/assets/images/sprites/foo.png`. The class for `bar.png` will be `.bar` and for `bas.png`, `.bas`, etc.
61
+
62
+
63
+ rake sprites
64
+
65
+ to generate.
66
+
67
+ ## In your Rails Engine
68
+
69
+ #### engine.rb
70
+
71
+ ``` ruby
72
+ module MyGem
73
+ class Engine < Rails::Engine
74
+ config.uses_sprites = true
75
+ end
76
+ end
77
+ ```
78
+
79
+ Use `app/assets` in your gem like you would your rails app and use the asset pipeline.
80
+
81
+ From your rails root
82
+
83
+ ENGINES=true rake sprites
84
+
85
+ Note: this will generate your sprites for your _Sprites_ enabled Engines _and_ your _Sprites_ enabled Rails app.
86
+
87
+ ## Contributing
88
+
89
+ 1. Fork it
90
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
91
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
92
+ 4. Push to the branch (`git push origin my-new-feature`)
93
+ 5. Create new Pull Request
data/Rakefile CHANGED
@@ -1,44 +1,9 @@
1
1
  require "bundler/gem_tasks"
2
2
  require 'rspec/core/rake_task'
3
+ require 'cucumber/rake/task'
3
4
 
4
- desc "Run specs"
5
- RSpec::Core::RakeTask.new do |t|
6
- t.pattern = "./spec/**/*_spec.rb" # don't need this, it's default.
7
- # Put spec opts in a file named .rspec in root
8
- end
5
+ RSpec::Core::RakeTask.new :spec
6
+ Cucumber::Rake::Task.new
9
7
 
10
- desc "Generate code coverage"
11
- RSpec::Core::RakeTask.new(:coverage) do |t|
12
- t.pattern = "./spec/**/*_spec.rb" # don't need this, it's default.
13
- t.rcov = true
14
- t.rcov_opts = ['--exclude', 'spec']
15
- end
16
-
17
-
18
- namespace :spec do
19
- desc 'Create spec'
20
- task :create, :path do |t, args|
21
- spec_path = File.join('spec', args[:path].gsub(%r{.rb$}, '_spec.rb'))
22
- klass = File.basename(args[:path], File.extname(args[:path])).split('_').map {|s| "#{s[0,1].upcase}#{s[1..-1]}" }.join
23
- mkdir_p File.dirname(spec_path)
24
-
25
- spec_doc = <<-EOS
26
- require 'spec_helper'
27
-
28
- describe #{klass} do
29
- end
30
- EOS
31
-
32
- File.open(spec_path, 'w+') do |f|
33
- f.puts spec_doc
34
- end
35
-
36
- puts spec_doc
37
- end
38
- end
39
-
40
- desc "Run cucumber"
41
- task(:cucumber) { sh 'cucumber' }
42
-
43
- desc 'Default: run specs.'
8
+ desc 'Default: run specs and features.'
44
9
  task :default => [:spec, :cucumber]
data/bin/sprites CHANGED
@@ -3,16 +3,14 @@
3
3
  require 'sprites'
4
4
  require 'sprites/cli'
5
5
 
6
- include Sprites
7
-
8
6
  begin
9
- options = CommandLineOptionParser.new(ARGV)
7
+ options = Sprites::CommandLineOptionParser.new(ARGV)
10
8
  options.parse
11
9
 
12
10
  sprite_definition_file_path = options.definition_file_path
13
- configuration = Configuration.new_for_command_line_options(options.options)
11
+ configuration = Sprites::Configuration.new_for_command_line_options(options.options)
14
12
 
15
- CliApplication.run(sprite_definition_file_path, configuration)
16
- rescue CliApplication::DefinitionFileNotFound
17
- abort 'No Sprite Definition File found. Please supply a path or place your definition file in `pwd` or `pwd/config`'
13
+ Sprites::CliApplication.run(sprite_definition_file_path, configuration)
14
+ rescue Sprites::CliApplication::DefinitionFileNotFound
15
+ abort 'No Sprite Definition File found. Please supply a path or place your definition file in `pwd/config`'
18
16
  end
data/features/cli.feature CHANGED
@@ -7,5 +7,5 @@ Feature: Creating sprites and stylesheets
7
7
  Given a project folder
8
8
  And it contains a sprites dsl definition file
9
9
  And it contains sprite images
10
- When I run the executable "sprites"
10
+ When I run the executable "sprites" with flags "-r spec/fixtures/project1"
11
11
  Then I should get valid sprites
@@ -14,23 +14,25 @@ Given(/^it contains sprite images$/) do
14
14
  Dir['public/images/sprite_images/**/*.png'].should_not be_empty
15
15
  end
16
16
 
17
- When(/^I run the executable "([^"]*)"$/) do |bin|
18
- `#{GEM_ROOT}/bin/#{bin}`
17
+ When /^I run the executable "([^"]*)" with flags "([^"]*)"$/ do |bin, flags|
18
+ `#{GEM_ROOT}/bin/#{bin} #{flags}`
19
19
  $?.to_i.should be(0)
20
20
  end
21
21
 
22
22
  Then(/^I should get valid sprites$/) do
23
- options = CommandLineOptionParser.new($*)
23
+ options = Sprites::CommandLineOptionParser.new($*)
24
24
  options.parse
25
25
 
26
26
  sprite_definition_file_path = options.definition_file_path
27
- configuration = Configuration.new_for_command_line_options(options.options)
27
+ configuration = Sprites::Configuration.new_for_command_line_options(options.options)
28
28
 
29
- load sprite_definition_file_path
29
+ sprites = Sprites.new
30
+ sprites.configure configuration.to_options
31
+ sprites.load
30
32
 
31
- tester = SpriteGeneratorTester.new(Sprites.application.sprites[:buttons], configuration)
33
+ tester = Sprites::SpriteGeneratorTester.new(sprites[:buttons])
32
34
  tester.should be_accurate
33
35
 
34
- FileUtils.rm Sprite.sprite_full_path(configuration, Sprites.application.sprites[:buttons])
35
- FileUtils.rm Stylesheet.stylesheet_full_path(configuration, Sprites.application.sprites[:buttons].stylesheet)
36
+ FileUtils.rm sprites[:buttons].path
37
+ FileUtils.rm sprites[:buttons].stylesheet_path
36
38
  end
data/lib/sprites.rb CHANGED
@@ -2,32 +2,142 @@ require 'active_support'
2
2
  require 'active_support/core_ext'
3
3
  require "sprites/version"
4
4
 
5
- module Sprites
5
+ require 'forwardable'
6
+
7
+ class Sprites
6
8
  extend ActiveSupport::Autoload
7
9
 
8
- autoload :Application
9
10
  autoload :Configuration
10
- autoload :Sprites
11
11
  autoload :Sprite
12
12
  autoload :SpritePieces
13
13
  autoload :SpritePiece
14
14
  autoload :Stylesheet
15
15
  autoload :ChunkyPngGenerator, 'sprites/sprite_generators/chunky_png_generator'
16
16
 
17
- class << self
18
- def application
19
- @application ||= Application.new(configuration)
17
+ include Enumerable
18
+ extend Forwardable
19
+ def_delegators :@sprites, :clear, :empty?, :count, :[]
20
+
21
+ attr_reader :configuration
22
+
23
+ def initialize(configuration = Configuration.new)
24
+ @configuration = configuration
25
+
26
+ @sprites = Hash.new do |sprites, name|
27
+ sprites[name] = Sprite.new(name, self)
20
28
  end
29
+ @loaded = false
30
+ end
21
31
 
22
- def define(&blk)
23
- application.define(&blk)
32
+ def [](sprite_identifier)
33
+ @sprites[sprite_identifier] if @sprites.has_key?(sprite_identifier)
34
+ end
35
+
36
+ def each(&blk)
37
+ @sprites.values.each(&blk)
38
+ end
39
+
40
+ def configure(options)
41
+ configuration.configure(options)
42
+ end
43
+
44
+ # The +sprite+ method adds sprites to the sprites collection
45
+ #
46
+ # === Examples ===
47
+ # sprite :foo
48
+ # sprite :foo, :orientation => :horizontal, :css_prefix => '.foo '
49
+ #
50
+ # options:
51
+ # => :orientation - sprite orientation
52
+ # default: :vertical
53
+ # => :path - path to which to write the sprite relative to config.sprites_path
54
+ # default: public/images/sprites/{name}.png
55
+ # => :stylesheet_path - path to which to write the stylesheet relative to config.sprite_stylesheets_path
56
+ # default: public/stylesheets/sprites/{name}.css
57
+ # => :url - path to use in background attribute in stylesheet
58
+ # default: /images/sprites/{name}.png
59
+ # => :autoload - whether or not to auto-define the sprite based on directory contents
60
+ # default: true
61
+ # => :css_prefix - a css string to prepend to all css classes define or autogenerated
62
+ # examples: '.icon', '.contacts '
63
+ # default: ''
64
+ #
65
+ def sprite(name, options = {}, &blk)
66
+ sprite = @sprites[name.to_sym]
67
+ sprite.configure(options, &blk)
68
+ end
69
+
70
+ def add(sprite)
71
+ @sprites[sprite.name] = sprite
72
+ end
73
+
74
+ def loaded?
75
+ @loaded
76
+ end
77
+
78
+ def load
79
+ return if loaded?
80
+ if configuration.definition_file
81
+ load_file configuration.definition_file
82
+ elsif configuration.autoload
83
+ auto_load
24
84
  end
85
+ @loaded = true
86
+ end
25
87
 
26
- def configure(&blk)
27
- @configuration ||= Configuration.new
28
- @configuration.configure(&blk) if block_given?
29
- @configuration
88
+ def auto_load
89
+ Dir[File.join(configuration.sprite_pieces_path, '*')].each do |sprite_path|
90
+ sprite(File.basename(sprite_path).intern) if File.directory?(sprite_path)
30
91
  end
31
- alias_method :configuration, :configure
92
+ end
93
+
94
+ def load_file(path)
95
+ instance_eval File.read(path), path, 0
96
+ end
97
+
98
+ alias define instance_eval
99
+ public :define
100
+
101
+ def reset!
102
+ clear
103
+ @configuration = Configuration.new
104
+ @loaded = false
105
+ end
106
+
107
+ def all_files
108
+ files = {}
109
+
110
+ all_files = []
111
+ if configuration.definition_file
112
+ files[configuration.definition_file] = all_files
113
+ end
114
+
115
+ @sprites.each do |name, sprite|
116
+ all_files.concat sprite.all_sprite_piece_files
117
+ files[sprite.stylesheet_path] = sprite.all_sprite_piece_files
118
+ files[sprite.path] = sprite.all_sprite_piece_files
119
+ end
120
+
121
+ all_files.uniq!
122
+
123
+ files
124
+ end
125
+
126
+ def generate(generator = configuration.generator)
127
+ generator.new(self).generate
128
+ end
129
+
130
+ def define_file_tasks(task_name = :sprites)
131
+ extend Rake::DSL
132
+ all_files.each do |output, inputs|
133
+ FileList[inputs]
134
+ file output => inputs do
135
+ # XXX this will currently run once per output, we need to fix that.
136
+ generate
137
+ end
138
+ end
139
+ task task_name => all_files.keys
32
140
  end
33
141
  end
142
+
143
+ require 'sprites/railtie' if defined?(Rails)
@@ -1,11 +1,13 @@
1
- module Sprites
1
+ class Sprites
2
2
  class CliApplication
3
3
  class DefinitionFileNotFound < StandardError; end
4
4
 
5
5
  def self.run(def_file, configuration)
6
- load def_file
7
- sprite_generator = ChunkyPngGenerator.new(configuration)
8
- sprite_generator.generate(::Sprites.application.sprites)
6
+ sprites = Sprites.new
7
+ sprites.configure(configuration.to_options)
8
+ sprites.load
9
+ sprite_generator = ChunkyPngGenerator.new(sprites)
10
+ sprite_generator.generate
9
11
  end
10
12
  end
11
13
  end
@@ -1,14 +1,13 @@
1
+ require 'pathname'
1
2
  require 'optparse'
2
3
 
3
- module Sprites
4
+ class Sprites
4
5
  class CommandLineOptionParser < OptionParser
5
- PRIMARY_DEF_FILE_LOCATION = 'config/sprites.rb'
6
- SECONDARY_DEF_FILE_LOCATION = 'sprites.rb'
7
-
8
6
  attr_reader :definition_file_path, :options
9
7
 
10
8
  def initialize(arguments)
11
- @definition_file_path, @arguments = extract_sprite_definition_file_path(arguments.clone)
9
+ @arguments, @raw_arguments = arguments.clone, arguments
10
+ @definition_file_path = extract_sprite_definition_file_path(@arguments)
12
11
  @options = Hash.new
13
12
 
14
13
  super do |opts|
@@ -17,25 +16,19 @@ module Sprites
17
16
  end
18
17
 
19
18
  def parse
20
- super(@arguments)
19
+ super(@raw_arguments)
21
20
  end
22
21
 
23
22
  def extract_sprite_definition_file_path(arguments)
24
23
  sprite_def_file_pathname = if arguments[0] =~ %r{^.+\.rb}
25
24
  Pathname(arguments.shift)
26
- elsif file_exists?('config/sprites.rb')
27
- Pathname('config/sprites.rb')
25
+ elsif File.exists?(path = File.join(Dir.pwd, 'config/sprites.rb'))
26
+ Pathname(path)
28
27
  else
29
- raise
28
+ raise CliApplication::DefinitionFileNotFound
30
29
  end
31
30
 
32
- [sprite_def_file_pathname.realpath.to_s, arguments]
33
- rescue
34
- raise CliApplication::DefinitionFileNotFound
35
- end
36
-
37
- def file_exists?(path)
38
- Pathname(path).exist?
31
+ sprite_def_file_pathname.realpath.to_s
39
32
  end
40
33
 
41
34
  def setup_parser(opts)
@@ -44,6 +37,13 @@ module Sprites
44
37
  opts.separator ""
45
38
  opts.separator "Specific options:"
46
39
 
40
+ opts.on("-r", "--project_root", <<-EOS
41
+ Define the path to the root of the project. DEFAULT: pwd
42
+ EOS
43
+ ) do |path|
44
+ @options[:project_root] = path || Dir.pwd
45
+ end
46
+
47
47
  opts.on("-s", "--sprites_path", <<-EOS
48
48
  Define the path to where the sprites should be placed. DEFAULT: 'public/images/sprites'
49
49
  EOS