spritopia 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/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in spritopia.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require 'minitest/unit'
4
+ require 'rake/testtask'
5
+
6
+ Rake::TestTask.new do |t|
7
+ t.pattern = "test/test_*.rb"
8
+ end
9
+
10
+ task :default => :test
11
+
data/bin/spritopia ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+
4
+ require 'spritopia'
5
+
6
+ Spritopia::CLI.start
data/lib/spritopia.rb ADDED
@@ -0,0 +1,89 @@
1
+ require "spritopia/version"
2
+ require 'chunky_png'
3
+ require 'json'
4
+
5
+ module Spritopia
6
+ extend self
7
+ include ChunkyPNG
8
+
9
+ module CLI
10
+ extend self
11
+
12
+ def start
13
+ if ARGV.size != 1
14
+ show_usage
15
+ exit -1
16
+ else
17
+ Spritopia.process_file(ARGV.first)
18
+ end
19
+ end
20
+
21
+
22
+ private
23
+
24
+ def show_usage
25
+ puts "usage: #{$0} filename.sprite\n\n" <<
26
+ "\tfilename.sprite should be a file with a list of files, relatives to itself.\n" <<
27
+ "\tThe files should be .png"
28
+
29
+
30
+ end
31
+
32
+ end
33
+
34
+
35
+ def process_file(file)
36
+ raise "File should be a .sprite file" unless file =~ /\.sprite$/
37
+ basename = File.basename(file, ".sprite")
38
+ dir = File.dirname(file)
39
+ basefilename = File.join(dir, basename)
40
+
41
+ File.file?(file) or raise "The file #{file} did not exists"
42
+
43
+ # Get the list of the images
44
+
45
+ files = File.read(file).split("\n").map{|f| f.strip}
46
+
47
+ # Calculate height and width
48
+ sizes = files.map do |f|
49
+ image = Image.from_file(File.join(dir,f))
50
+ [image.width, image.height]
51
+ end
52
+
53
+ height = sizes.inject( 0 ) { |memo,i| memo+i[1] }
54
+ width = sizes.inject( 0 ) { |memo,i| memo > i[0] ? memo : i[0] }
55
+
56
+
57
+ # Generate the sprite
58
+ canvas = Image.new(width,height)
59
+
60
+ file_info = {}
61
+
62
+ files.inject(0) { |current_height, filename|
63
+ new_image = Image.from_file(File.join(dir,filename))
64
+ canvas.replace!(new_image, 0, current_height)
65
+
66
+ file_info[filename] = {:width => new_image.width, :height => new_image.height, :x => 0, :y => current_height, :x2 => new_image.width, :y2 => new_image.height + current_height }
67
+
68
+
69
+ current_height + new_image.height
70
+ }
71
+
72
+ # Save the sprite
73
+
74
+ puts File.basename(file,".sprite")
75
+
76
+ canvas.save(basefilename+".png")
77
+
78
+ # Save the json
79
+
80
+ File.open(basefilename + ".json", "w") do |f|
81
+ f.write file_info.to_json
82
+ end
83
+
84
+ true
85
+
86
+ end
87
+
88
+
89
+ end
@@ -0,0 +1,3 @@
1
+ module Spritopia
2
+ VERSION = "0.0.1"
3
+ end
data/spritopia.gemspec ADDED
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "spritopia/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "spritopia"
7
+ s.version = Spritopia::VERSION
8
+ s.authors = ["Guillermo Álvarez"]
9
+ s.email = ["guillermo@cientifico.net"]
10
+ s.homepage = ""
11
+ s.summary = %q{A sprite generator that don't output in css}
12
+ s.description = %q{Maybe some day it can, but not for the moment}
13
+
14
+ s.rubyforge_project = "spritopia"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_development_dependency "minitest"
22
+ s.add_development_dependency "rake"
23
+ s.add_runtime_dependency "chunky_png"
24
+ s.add_runtime_dependency "oily_png"
25
+ s.add_runtime_dependency "json"
26
+ s.add_runtime_dependency "thor"
27
+ end
@@ -0,0 +1,3 @@
1
+ images/100x100.png
2
+ images/20x20.png
3
+ images/350x150.png
Binary file
Binary file
Binary file
@@ -0,0 +1,27 @@
1
+ require 'spritopia'
2
+ require 'minitest/autorun'
3
+
4
+ class SpritopiaTest < MiniTest::Unit::TestCase
5
+
6
+ def test_true
7
+ assert true
8
+ end
9
+
10
+ def test_it_works
11
+ sprite_file = full_path('cats.sprite')
12
+
13
+ assert_equal true, Spritopia.process_file(sprite_file), "Spritopia should return true"
14
+
15
+ assert_file_exists "cats.png", "cats.png should be generated"
16
+ assert_file_exists "cats.json", "cats.json should be generated"
17
+ end
18
+
19
+
20
+ def assert_file_exists(filename, message = nil)
21
+ assert File.file?(full_path(filename)), message
22
+ end
23
+
24
+ def full_path(filename)
25
+ File.expand_path("../sample/#{filename}",__FILE__)
26
+ end
27
+ end
metadata ADDED
@@ -0,0 +1,129 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spritopia
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Guillermo Álvarez
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-09-29 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: minitest
16
+ requirement: &2157225040 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *2157225040
25
+ - !ruby/object:Gem::Dependency
26
+ name: rake
27
+ requirement: &2157224620 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *2157224620
36
+ - !ruby/object:Gem::Dependency
37
+ name: chunky_png
38
+ requirement: &2157224200 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *2157224200
47
+ - !ruby/object:Gem::Dependency
48
+ name: oily_png
49
+ requirement: &2157223780 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *2157223780
58
+ - !ruby/object:Gem::Dependency
59
+ name: json
60
+ requirement: &2157223360 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *2157223360
69
+ - !ruby/object:Gem::Dependency
70
+ name: thor
71
+ requirement: &2157222900 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: *2157222900
80
+ description: Maybe some day it can, but not for the moment
81
+ email:
82
+ - guillermo@cientifico.net
83
+ executables:
84
+ - spritopia
85
+ extensions: []
86
+ extra_rdoc_files: []
87
+ files:
88
+ - .gitignore
89
+ - Gemfile
90
+ - Rakefile
91
+ - bin/spritopia
92
+ - lib/spritopia.rb
93
+ - lib/spritopia/version.rb
94
+ - spritopia.gemspec
95
+ - test/sample/cats.sprite
96
+ - test/sample/images/100x100.png
97
+ - test/sample/images/20x20.png
98
+ - test/sample/images/350x150.png
99
+ - test/test_spritopia.rb
100
+ homepage: ''
101
+ licenses: []
102
+ post_install_message:
103
+ rdoc_options: []
104
+ require_paths:
105
+ - lib
106
+ required_ruby_version: !ruby/object:Gem::Requirement
107
+ none: false
108
+ requirements:
109
+ - - ! '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ required_rubygems_version: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ requirements: []
119
+ rubyforge_project: spritopia
120
+ rubygems_version: 1.8.6
121
+ signing_key:
122
+ specification_version: 3
123
+ summary: A sprite generator that don't output in css
124
+ test_files:
125
+ - test/sample/cats.sprite
126
+ - test/sample/images/100x100.png
127
+ - test/sample/images/20x20.png
128
+ - test/sample/images/350x150.png
129
+ - test/test_spritopia.rb