gradients 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.
@@ -0,0 +1,15 @@
1
+ = Gradients
2
+
3
+ Make fun gradients, and then find colours within them:
4
+
5
+ Gradients.new('#000000', '#ffffff').at(0.5).to_s
6
+ => '808080'
7
+ Gradients.new('#000000', '#ffffff').at(0.5).to_s(:whex)
8
+ => '#808080'
9
+
10
+ Or, add lots of colours:
11
+
12
+ Gradients.new('#000000', '#ff0000', #ffffff').at(0.75).to_s(:whex)
13
+ => '#ff8080'
14
+
15
+ And so forth...
@@ -0,0 +1,26 @@
1
+ require 'rubygems'
2
+ require 'spec'
3
+ require 'spec/rake/spectask'
4
+ Spec::Rake::SpecTask.new(:spec) do |t|
5
+ t.spec_opts ||= []
6
+ t.spec_opts << "--options" << "spec/spec.opts"
7
+ t.spec_files = FileList['spec/**/*_spec.rb']
8
+ end
9
+
10
+ begin
11
+ require 'code_stats'
12
+ CodeStats::Tasks.new
13
+ rescue LoadError
14
+ end
15
+
16
+ require 'rake/rdoctask'
17
+ desc "Generate documentation"
18
+ Rake::RDocTask.new do |rd|
19
+ rd.main = "README.rdoc"
20
+ rd.rdoc_files.include("README.rdoc", "lib/**/*.rb")
21
+ rd.rdoc_dir = 'rdoc'
22
+ end
23
+
24
+ require 'ext/gem_rake'
25
+
26
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,126 @@
1
+ module Bundler
2
+ class GemHelper
3
+
4
+ def self.install_tasks
5
+ dir = caller.find{|c| /Rakefile:/}[/^(.*?)\/Rakefile:/, 1]
6
+ GemHelper.new(dir).install
7
+ end
8
+
9
+ attr_reader :spec_path, :base, :name
10
+
11
+ def initialize(base, name = nil)
12
+ @base = base
13
+ @name = name || interpolate_name
14
+ @spec_path = File.join(@base, "#{@name}.gemspec")
15
+ end
16
+
17
+ def install
18
+ desc 'Build your gem into the pkg directory'
19
+ task 'build' do
20
+ build_gem
21
+ end
22
+
23
+ desc 'Install your gem into the pkg directory'
24
+ task 'install' do
25
+ install_gem
26
+ end
27
+
28
+ desc 'Push your gem to rubygems'
29
+ task 'push' do
30
+ push_gem
31
+ end
32
+ end
33
+
34
+ def build_gem
35
+ file_name = nil
36
+ sh("gem build #{spec_path}") {
37
+ file_name = File.basename(built_gem_path)
38
+ FileUtils.mkdir_p(File.join(base, 'pkg'))
39
+ FileUtils.mv(built_gem_path, 'pkg')
40
+ }
41
+ File.join(base, 'pkg', file_name)
42
+ end
43
+
44
+ def install_gem
45
+ built_gem_path = build_gem
46
+ sh("gem install #{built_gem_path}")
47
+ end
48
+
49
+ def push_gem
50
+ guard_clean
51
+ guard_already_tagged
52
+ tag_version {
53
+ git_push
54
+ rubygem_push(build_gem)
55
+ }
56
+ end
57
+
58
+ protected
59
+ def rubygem_push(path)
60
+ sh("gem push #{path}")
61
+ end
62
+
63
+ def built_gem_path
64
+ Dir[File.join(base, "#{name}-*.gem")].sort_by{|f| File.mtime(f)}.last
65
+ end
66
+
67
+ def interpolate_name
68
+ gemspecs = Dir[File.join(base, "*.gemspec")]
69
+ raise "Unable to determine name from existing gemspec." unless gemspecs.size == 1
70
+
71
+ File.basename(gemspecs.first)[/^(.*)\.gemspec$/, 1]
72
+ end
73
+
74
+ def git_push
75
+ sh "git push --all"
76
+ sh "git push --tags"
77
+ end
78
+
79
+ def guard_already_tagged
80
+ sh('git tag').split(/\n/).include?(current_version_tag) and raise("This tag has already been committed to the repo.")
81
+ end
82
+
83
+ def guard_clean
84
+ clean? or raise("There are files that need to be committed first.")
85
+ end
86
+
87
+ def clean?
88
+ sh("git ls-files -dm").split("\n").size.zero?
89
+ end
90
+
91
+ def tag_version
92
+ sh "git tag #{current_version_tag}"
93
+ yield if block_given?
94
+ rescue
95
+ sh "git tag -d #{current_version_tag}"
96
+ raise
97
+ end
98
+
99
+ def current_version
100
+ raise("Version file could not be found at #{version_file_path}") unless File.exist?(version_file_path)
101
+ File.read(version_file_path)[/V(ERSION|ersion)\s*=\s*(["'])(.*?)\2/, 3]
102
+ end
103
+
104
+ def version_file_path
105
+ File.join(base, 'lib', name, 'version.rb')
106
+ end
107
+
108
+ def current_version_tag
109
+ "v#{current_version}"
110
+ end
111
+
112
+ def sh(cmd, &block)
113
+ output, code = sh_with_code(cmd, &block)
114
+ code == 0 ? output : raise(output)
115
+ end
116
+
117
+ def sh_with_code(cmd, &block)
118
+ output = ''
119
+ Dir.chdir(base) {
120
+ output = `#{cmd}`
121
+ block.call if block and $? == 0
122
+ }
123
+ [output, $?]
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,36 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require File.join(File.dirname(__FILE__), 'lib', 'gradients', 'version')
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'gradients'
7
+ s.version = Gradients::VERSION
8
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
9
+ s.authors = ["Joshua Hull"]
10
+ s.date = '2010-07-31'
11
+ s.description = s.summary = "Colours! Colours! The creeping chaos fucks my mind. Generate gradients because colors are fun."
12
+ s.email = %q{joshbuddy@gmail.com}
13
+ s.extra_rdoc_files = ['README.rdoc']
14
+ s.files = `git ls-files`.split("\n")
15
+ s.homepage = %q{http://github.com/joshbuddy/gradients}
16
+ s.rdoc_options = ["--charset=UTF-8"]
17
+ s.require_paths = ["lib"]
18
+ s.rubygems_version = %q{1.3.7}
19
+ s.test_files = `git ls-files`.split("\n").select{|f| f =~ /^spec/}
20
+ s.rubyforge_project = 'gradients'
21
+
22
+ # dependencies
23
+ s.add_development_dependency 'rspec'
24
+ s.add_development_dependency 'rake'
25
+
26
+ if s.respond_to? :specification_version then
27
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
28
+ s.specification_version = 3
29
+
30
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
31
+ else
32
+ end
33
+ else
34
+ end
35
+ end
36
+
@@ -0,0 +1,24 @@
1
+ require 'gradients/version'
2
+ require 'gradients/color'
3
+
4
+ class Gradients
5
+ def initialize(*colors)
6
+ if colors.size < 2
7
+ raise "you probably want at least 2 colors"
8
+ end
9
+ @colors = colors.map{|c| Color.parse(c)}
10
+ end
11
+
12
+ def at(position)
13
+ raise unless (0.0..1.0).include?(position)
14
+ start_color_index = (position * (@colors.size - 1)).to_i - (position == 1 ? 1 : 0)
15
+ start_color = @colors[start_color_index]
16
+ end_color = @colors[start_color_index + 1]
17
+ mapped_position = (position * (@colors.size - 1)) - start_color_index
18
+ Color.new(
19
+ (end_color.r - start_color.r) * mapped_position + start_color.r,
20
+ (end_color.g - start_color.g) * mapped_position + start_color.g,
21
+ (end_color.b - start_color.b) * mapped_position + start_color.b
22
+ )
23
+ end
24
+ end
@@ -0,0 +1,26 @@
1
+ class Gradients
2
+ class Color
3
+ attr_accessor :r, :g, :b
4
+ def self.parse(val)
5
+ case val
6
+ when /^#?[0-9a-f]{6}$/i
7
+ new(*val[-6, 6].map{|a|a.scan(/../).map{|b|(b.hex.to_f / 255)}}.flatten)
8
+ end
9
+ end
10
+
11
+ def initialize(r, g, b)
12
+ @r, @g, @b = r, g, b
13
+ end
14
+
15
+ def to_s(format = :hex)
16
+ case format
17
+ when :whex
18
+ "##{to_s(:hex)}"
19
+ when :hex
20
+ sprintf("%02x%02x%02x", (@r * 255).round, (@g * 255).round, (@b * 255).round)
21
+ else
22
+ raise 'format not supported'
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,3 @@
1
+ class Gradients
2
+ VERSION = '0.0.1'.freeze
3
+ end
@@ -0,0 +1,69 @@
1
+ require 'spec_helper'
2
+ describe "Gradients" do
3
+ context "should calculate a gradient of two colors" do
4
+ before(:each) do
5
+ @gradient = Gradients.new('#000000', '#ffffff')
6
+ end
7
+
8
+ it "should find the half way point" do
9
+ @gradient.at(0.5).to_s.should == '808080'
10
+ end
11
+
12
+ it "should find the beginning" do
13
+ @gradient.at(0.0).to_s.should == '000000'
14
+ end
15
+
16
+ it "should find the end" do
17
+ @gradient.at(1.0).to_s.should == 'ffffff'
18
+ end
19
+
20
+ it "should find an arbitrary position" do
21
+ @gradient.at(0.76).to_s.should == 'c2c2c2'
22
+ end
23
+ end
24
+
25
+ context "should calculate a gradient of two weird colors" do
26
+ before(:each) do
27
+ @gradient = Gradients.new('#f56510', '#a09981')
28
+ end
29
+
30
+ it "should find the half way point" do
31
+ @gradient.at(0.5).to_s.should == 'cb7f49'
32
+ end
33
+
34
+ it "should find the beginning" do
35
+ @gradient.at(0.0).to_s.should == 'f56510'
36
+ end
37
+
38
+ it "should find the end" do
39
+ @gradient.at(1.0).to_s.should == 'a09981'
40
+ end
41
+
42
+ it "should find an arbitrary position" do
43
+ @gradient.at(0.76).to_s.should == 'b48d66'
44
+ end
45
+ end
46
+
47
+ context "should calculate a gradient of three weird colors" do
48
+ before(:each) do
49
+ @gradient = Gradients.new('#f56510', '#a09981', '#000000')
50
+ end
51
+
52
+ it "should find the half way point" do
53
+ @gradient.at(0.5).to_s.should == 'a09981'
54
+ end
55
+
56
+ it "should find the beginning" do
57
+ @gradient.at(0.0).to_s.should == 'f56510'
58
+ end
59
+
60
+ it "should find the end" do
61
+ @gradient.at(1.0).to_s.should == '000000'
62
+ end
63
+
64
+ it "should find an arbitrary position" do
65
+ @gradient.at(0.76).to_s.should == '4d493e'
66
+ end
67
+ end
68
+
69
+ end
@@ -0,0 +1,7 @@
1
+ --colour
2
+ --format
3
+ specdoc
4
+ --loadby
5
+ mtime
6
+ --reverse
7
+ --backtrace
@@ -0,0 +1,3 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'rubygems'
3
+ require 'gradients'
metadata ADDED
@@ -0,0 +1,105 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gradients
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Joshua Hull
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-07-31 00:00:00 -07:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rspec
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :development
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: rake
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :development
48
+ version_requirements: *id002
49
+ description: Colours! Colours! The creeping chaos fucks my mind. Generate gradients because colors are fun.
50
+ email: joshbuddy@gmail.com
51
+ executables: []
52
+
53
+ extensions: []
54
+
55
+ extra_rdoc_files:
56
+ - README.rdoc
57
+ files:
58
+ - README.rdoc
59
+ - Rakefile
60
+ - ext/gem_rake.rb
61
+ - gradients.gemspec
62
+ - lib/gradients.rb
63
+ - lib/gradients/color.rb
64
+ - lib/gradients/version.rb
65
+ - spec/gradients_spec.rb
66
+ - spec/spec.opts
67
+ - spec/spec_helper.rb
68
+ has_rdoc: true
69
+ homepage: http://github.com/joshbuddy/gradients
70
+ licenses: []
71
+
72
+ post_install_message:
73
+ rdoc_options:
74
+ - --charset=UTF-8
75
+ require_paths:
76
+ - lib
77
+ required_ruby_version: !ruby/object:Gem::Requirement
78
+ none: false
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ hash: 3
83
+ segments:
84
+ - 0
85
+ version: "0"
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ hash: 3
92
+ segments:
93
+ - 0
94
+ version: "0"
95
+ requirements: []
96
+
97
+ rubyforge_project: gradients
98
+ rubygems_version: 1.3.7
99
+ signing_key:
100
+ specification_version: 3
101
+ summary: Colours! Colours! The creeping chaos fucks my mind. Generate gradients because colors are fun.
102
+ test_files:
103
+ - spec/gradients_spec.rb
104
+ - spec/spec.opts
105
+ - spec/spec_helper.rb