assetify 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -7,6 +7,6 @@ source "http://rubygems.org"
7
7
  group :development do
8
8
  gem "rspec", ">= 2.3.0"
9
9
  gem "bundler", ">= 1.0.0"
10
- gem "jeweler", ">= 1.6.0"
10
+ gem "jeweler" #, ">= 1.6.0"
11
11
  gem "webmock", ">= 0"
12
12
  end
data/Gemfile.lock CHANGED
@@ -5,19 +5,19 @@ GEM
5
5
  crack (0.1.8)
6
6
  diff-lcs (1.1.2)
7
7
  git (1.2.5)
8
- jeweler (1.6.0)
9
- bundler (~> 1.0.0)
8
+ jeweler (1.6.2)
9
+ bundler (~> 1.0)
10
10
  git (>= 1.2.5)
11
11
  rake
12
- rake (0.8.7)
13
- rspec (2.5.0)
14
- rspec-core (~> 2.5.0)
15
- rspec-expectations (~> 2.5.0)
16
- rspec-mocks (~> 2.5.0)
17
- rspec-core (2.5.2)
18
- rspec-expectations (2.5.0)
12
+ rake (0.9.2)
13
+ rspec (2.6.0)
14
+ rspec-core (~> 2.6.0)
15
+ rspec-expectations (~> 2.6.0)
16
+ rspec-mocks (~> 2.6.0)
17
+ rspec-core (2.6.4)
18
+ rspec-expectations (2.6.0)
19
19
  diff-lcs (~> 1.1.2)
20
- rspec-mocks (2.5.0)
20
+ rspec-mocks (2.6.0)
21
21
  webmock (1.6.4)
22
22
  addressable (~> 2.2, > 2.2.5)
23
23
  crack (>= 0.1.7)
@@ -27,6 +27,6 @@ PLATFORMS
27
27
 
28
28
  DEPENDENCIES
29
29
  bundler (>= 1.0.0)
30
- jeweler (>= 1.6.0)
30
+ jeweler
31
31
  rspec (>= 2.3.0)
32
32
  webmock
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.4.0
data/assetify.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{assetify}
8
- s.version = "0.3.0"
8
+ s.version = "0.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Marcos Piccinini"]
12
- s.date = %q{2011-06-04}
12
+ s.date = %q{2011-06-30}
13
13
  s.default_executable = %q{assetify}
14
14
  s.description = %q{Downloads/updates assets based on a Jsfile. Any framework.}
15
15
  s.email = %q{x@nofxx.com}
@@ -57,18 +57,18 @@ Gem::Specification.new do |s|
57
57
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
58
58
  s.add_development_dependency(%q<rspec>, [">= 2.3.0"])
59
59
  s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
60
- s.add_development_dependency(%q<jeweler>, [">= 1.6.0"])
60
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
61
61
  s.add_development_dependency(%q<webmock>, [">= 0"])
62
62
  else
63
63
  s.add_dependency(%q<rspec>, [">= 2.3.0"])
64
64
  s.add_dependency(%q<bundler>, [">= 1.0.0"])
65
- s.add_dependency(%q<jeweler>, [">= 1.6.0"])
65
+ s.add_dependency(%q<jeweler>, [">= 0"])
66
66
  s.add_dependency(%q<webmock>, [">= 0"])
67
67
  end
68
68
  else
69
69
  s.add_dependency(%q<rspec>, [">= 2.3.0"])
70
70
  s.add_dependency(%q<bundler>, [">= 1.0.0"])
71
- s.add_dependency(%q<jeweler>, [">= 1.6.0"])
71
+ s.add_dependency(%q<jeweler>, [">= 0"])
72
72
  s.add_dependency(%q<webmock>, [">= 0"])
73
73
  end
74
74
  end
data/bin/assetify CHANGED
@@ -16,12 +16,15 @@ Commands:
16
16
  update - Outdated assets
17
17
  check - Prints changes
18
18
 
19
+ Commands are matched by regex, e.g. "up -> update".
20
+
19
21
  Options:
20
22
 
21
23
  BANNER
22
24
 
23
25
 
24
26
  o.on('-h', "Show help") { puts o; exit }
27
+ o.on('-d', "Verbose (Debug)") { Opt[:debug] = true }
25
28
  o.parse!
26
29
  end
27
30
 
data/lib/assetify.rb CHANGED
@@ -7,6 +7,10 @@ require "assetify/pkg"
7
7
 
8
8
  module Assetify
9
9
 
10
+ TSIZE = 80
11
+ LINE = TUI.new
12
+ ASSETS = [:javascripts, :stylesheets, :images]
13
+
10
14
  class NoJSFile < StandardError
11
15
  end
12
16
 
@@ -18,11 +22,12 @@ module Assetify
18
22
  :newname => true
19
23
  }
20
24
 
21
- TSIZE = 80
22
- LINE = TUI.new
23
25
 
24
26
  class << self
25
27
 
28
+ #
29
+ # Jsfile stuff
30
+ #
26
31
  def no_jsfile!
27
32
  print "Jsfile not found, create one? [Y/n] "
28
33
  res = gets.chomp
@@ -65,6 +70,10 @@ TXT
65
70
  DSL.parse code.join(";")
66
71
  end
67
72
 
73
+ #
74
+ # Text Interface
75
+ #
76
+
68
77
  def check_param params, string
69
78
  unless string.include? params[0]
70
79
  puts "Did you mean #{string}?"
@@ -4,7 +4,7 @@ require 'fileutils'
4
4
  module Assetify
5
5
  class Asset
6
6
  include Helpers
7
- attr_accessor :type, :name, :url, :ns, :pkg
7
+ attr_accessor :type, :name, :url, :ns, :pkg, :ver
8
8
  alias :ext :type
9
9
 
10
10
  def initialize(type, name, url, ver = nil, params={})
@@ -21,7 +21,7 @@ module Assetify
21
21
  def filename
22
22
  return @filename if @filename
23
23
  @filename = Opt[:newname] ? name : url.split("/").last
24
- @filename += ".#{type}" unless @filename =~ /\.#{type}$/
24
+ @filename += ".#{type}" unless @filename =~ /\.\w{1,6}$/
25
25
  @filename
26
26
  end
27
27
 
@@ -45,8 +45,9 @@ module Assetify
45
45
  end
46
46
 
47
47
  def print_version
48
- v = find_version(@data)
49
- v ? "v#{v[0]} " : nil
48
+ return "" unless ver
49
+ ver_str = ver.size > 10 ? ver[0..10] : ver[0]
50
+ "v#{ver_str} "
50
51
  end
51
52
 
52
53
  def data
@@ -54,6 +55,11 @@ module Assetify
54
55
  @data ||= @pkg ? @pkg.get(url, :force).values.first : get_data(url)
55
56
  end
56
57
 
58
+ def ver
59
+ return nil unless @data
60
+ @ver ||= find_version(@data)
61
+ end
62
+
57
63
  def install!(force = false)
58
64
  LINE.p "-> #{name}.#{type}"
59
65
  if !force && check?
@@ -1,20 +1,46 @@
1
- require 'pry'
1
+ # require 'pry'
2
+ require 'digest/md5'
3
+
4
+ class String
5
+ #
6
+ # From ptools - http://rdoc.info/gems/ptools/1.2.1/File.binary%3F
7
+ #
8
+ def binary?
9
+ #s = (File.read(file, File.stat(file).blksize) || "").split(//)
10
+ s = (self[0..4096].force_encoding("binary") || "") #.split(//)
11
+ ratio = s.gsub(/\d|\w|\s|[-~\.]/,'').size / s.size.to_f
12
+ # if Opt[:debug]
13
+ # print "Detecting #{s}"
14
+ # puts "Ratio #{ratio}"
15
+ # end
16
+ ratio > 0.3
17
+ end
18
+ end
2
19
 
3
20
  module Assetify
4
21
  module Helpers
5
- private
6
22
 
7
23
  #
8
24
  # Detects numerical software version from text.
9
25
  #
10
26
  def find_version(txt)
11
27
  return unless txt
12
- version = txt.match /(?:(\d+)\.)?(?:(\d+)\.)?(\d+)?\.?(\d+)/
28
+ txt.binary? ? find_version_from_bin(txt) : find_version_from_txt(txt)
29
+ end
30
+
31
+ private
32
+
33
+ def find_version_from_txt blob
34
+ version = blob.match(/(?:(\d+)\.)?(?:(\d+)\.)?(\d+)?\.?(\d+)/)
13
35
  # If matches a dot, it`s text. Otherwise make it number.
14
36
  v = version.to_a.reject(&:nil?).map { |d| d =~ /\./ ? d : d.to_i }
15
37
  v.empty? || 0 == v[0] ? nil : v
16
38
  end
17
39
 
40
+ def find_version_from_bin blob
41
+ Digest::MD5.hexdigest blob
42
+ end
43
+
18
44
  def download url_str, limit = 10
19
45
  raise ArgumentError, 'HTTP redirect too deep' if limit == 0
20
46
  uri = URI.parse url_str
@@ -27,7 +53,7 @@ module Assetify
27
53
  when Net::HTTPSuccess then @data = response
28
54
  when Net::HTTPRedirection then download(redirect_url(response), limit - 1)
29
55
  else
30
- p "response code: #{response.code}!"
56
+ puts "response code: #{response.code}!"
31
57
  response.error!
32
58
  end
33
59
  end
@@ -20,11 +20,14 @@ describe Asset do
20
20
  end
21
21
 
22
22
  it "should detect version" do
23
- # as.instance_variable_set :data,
24
- # as.find_version.should eql("1.6")
23
+ as.instance_variable_set "@data", "/* foo v 1.5.6 */"
24
+ as.ver[0].should eql("1.5.6")
25
25
  end
26
26
 
27
-
27
+ it "should print version" do
28
+ as.instance_variable_set "@data", "\u001F\x8B\b\u0000\xF5\u0000"
29
+ as.print_version.should eql("v537c8396f74 ")
30
+ end
28
31
  end
29
32
 
30
33
  end
@@ -2,12 +2,24 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
 
3
3
  describe DSL do
4
4
 
5
- it "should group and use a namespace" do
5
+ it "should parse js nicely" do
6
6
  a = Assetify::DSL.parse("js 'foo', 'foolink'")[0]
7
7
  a.should be_an Asset
8
8
  a.fullpath.should eql("public/javascripts/foo.js")
9
9
  end
10
10
 
11
+ it "should parse css nicely" do
12
+ a = Assetify::DSL.parse("css 'foo', 'foolink'")[0]
13
+ a.should be_an Asset
14
+ a.fullpath.should eql("public/stylesheets/foo.css")
15
+ end
16
+
17
+ it "should parse img nicely (gif)" do
18
+ a = Assetify::DSL.parse("img 'foo.gif', 'foolink'")[0]
19
+ a.should be_an Asset
20
+ a.fullpath.should eql("public/images/foo.gif")
21
+ end
22
+
11
23
  it "should accept a especific location with :to" do
12
24
  Dir.should_receive(:pwd).and_return("/home/nofxx/git/assetify")
13
25
  a = Assetify::DSL.parse("rb 'foo', 'foolink', :to => 'spec/rock'")[0]
@@ -88,7 +100,7 @@ describe DSL do
88
100
  as = Assetify::DSL.parse "pkg 'complex', 'http://complex.tgz' do; dir 'images/', :to => 'images/complex/'; end"
89
101
  as[0].name.should eql("two")
90
102
  as[0].ext.should eql("png")
91
- as[0].fullpath.should eql("png")
103
+ as[0].fullpath.should eql("/home/nofxx/git/assetify/images/complex/two.png")
92
104
  end
93
105
 
94
106
 
@@ -1,10 +1,18 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
 
3
3
  describe Helpers do
4
+ BINDATA = File.read(File.join(File.dirname(__FILE__), "..", "fixtures", "complex.tgz"))
5
+
4
6
  include Helpers
5
- it "download stuff" do
6
7
 
8
+ it "should detect text as not binary" do
9
+ "I'm not a cylon!".should_not be_binary
10
+ "/*** Comment nice for v1.4.5 ***/".should_not be_binary
11
+ end
7
12
 
13
+ it "should detect robot talk as binary" do
14
+ BINDATA.should be_binary
15
+ "\u001F\x8B\b\u0000\xF5\u0000".should be_binary
8
16
  end
9
17
 
10
18
  it "should find from a long version" do
@@ -20,6 +28,10 @@ describe Helpers do
20
28
  should eql(["1.6", 1, 6])
21
29
  end
22
30
 
31
+ it "should find version from binary" do
32
+ find_version(BINDATA).should eql("c29b335e572251b1b79b88bf8c2847ec")
33
+ end
34
+
23
35
  it "should rescue fine if there isn`t version" do
24
36
  find_version("/* -------------------------------------------------------------- reset.css * Resets default browser CSS.").
25
37
  should be_nil
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 3
7
+ - 4
8
8
  - 0
9
- version: 0.3.0
9
+ version: 0.4.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Marcos Piccinini
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-06-04 00:00:00 -03:00
17
+ date: 2011-06-30 00:00:00 -03:00
18
18
  default_executable: assetify
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -55,10 +55,8 @@ dependencies:
55
55
  - - ">="
56
56
  - !ruby/object:Gem::Version
57
57
  segments:
58
- - 1
59
- - 6
60
58
  - 0
61
- version: 1.6.0
59
+ version: "0"
62
60
  type: :development
63
61
  prerelease: false
64
62
  version_requirements: *id003
@@ -123,7 +121,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
123
121
  requirements:
124
122
  - - ">="
125
123
  - !ruby/object:Gem::Version
126
- hash: -2700940674252686388
124
+ hash: -3303407953126557976
127
125
  segments:
128
126
  - 0
129
127
  version: "0"