airenv 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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b2f8733f5c5f755b5132359959e60e2a678a29d0
4
+ data.tar.gz: 873c868df8753881884f328b0fd21f01e7fe10bf
5
+ SHA512:
6
+ metadata.gz: ac28e50aa1c2e0a678f47208446d98960dac8d6d27b180901cd8f7cdf69625cdc2c335b360b7d4ec5e951be78ba715d615d888d2a96f9ace1e9b2dd688ab5b4b
7
+ data.tar.gz: 7a805da497cc99b090a8db106bc676e064357fc01c59a2210333be8ecaea5277464c5019e77bd617e4ae70d0a8f28c84ea41b1c8750a2bbf9be0564cd22ae880
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in airenv.gemspec
4
+ gemspec
data/Guardfile ADDED
@@ -0,0 +1,24 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard :rspec do
5
+ watch(%r{^spec/.+_spec\.rb$})
6
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
7
+ watch('spec/spec_helper.rb') { "spec" }
8
+
9
+ # Rails example
10
+ watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
11
+ watch(%r{^app/(.*)(\.erb|\.haml|\.slim)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
12
+ watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
13
+ watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
14
+ watch('config/routes.rb') { "spec/routing" }
15
+ watch('app/controllers/application_controller.rb') { "spec/controllers" }
16
+
17
+ # Capybara features specs
18
+ watch(%r{^app/views/(.+)/.*\.(erb|haml|slim)$}) { |m| "spec/features/#{m[1]}_spec.rb" }
19
+
20
+ # Turnip features and steps
21
+ watch(%r{^spec/acceptance/(.+)\.feature$})
22
+ watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
23
+ end
24
+
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Toshiyuki Hirooka
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # Airenv
2
+
3
+ Automatically download, archive, switch airsdk for flash builder on mac.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'airenv'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install airenv
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/airenv.gemspec ADDED
@@ -0,0 +1,36 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'airenv/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "airenv"
8
+ spec.version = Airenv::VERSION
9
+ spec.authors = ["Toshiyuki Hirooka", "Hidenori Doi"]
10
+ spec.email = ["toshi.hirooka@gmail.com", "mewlist@mewlist.com"]
11
+ spec.description = %q{Automatically download, archive, switch AIR SDK for flash builder on mac.}
12
+ spec.summary = %q{Adobe AIR SDK package manager}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "thor"
22
+ spec.add_dependency "active_support"
23
+ spec.add_dependency "i18n"
24
+ spec.add_dependency "progressbar"
25
+ spec.add_dependency "configuration"
26
+ spec.add_dependency "rubyzip"
27
+ spec.add_dependency "archive-tar-minitar"
28
+ spec.add_dependency "bzip2-ruby-rb20"
29
+
30
+ spec.add_development_dependency "bundler", "~> 1.3"
31
+ spec.add_development_dependency "rake"
32
+ spec.add_development_dependency "rspec"
33
+ spec.add_development_dependency "guard"
34
+ spec.add_development_dependency "guard-rspec"
35
+ spec.add_development_dependency "pry"
36
+ end
data/bin/airenv ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ libdir = File.join(File.dirname(__FILE__), '..', 'lib')
4
+ $LOAD_PATH.unshift(libdir)
5
+ require 'airenv'
6
+
7
+ Airenv::CLI.load_thorfiles(File.join(libdir, 'airenv', 'commands'))
8
+ Airenv::CLI.start(ARGV)
data/lib/airenv.rb ADDED
@@ -0,0 +1,10 @@
1
+ module Airenv
2
+ end
3
+
4
+ require "airenv/version"
5
+ require "airenv/configuration"
6
+ require 'airenv/commands'
7
+ require 'airenv/downloader'
8
+ require 'airenv/sdk_description'
9
+ require 'airenv/sdk'
10
+ require 'airenv/cli'
data/lib/airenv/cli.rb ADDED
@@ -0,0 +1,19 @@
1
+ require 'thor'
2
+ require 'active_support/inflector'
3
+
4
+ class Airenv::CLI < Thor
5
+
6
+ desc 'version', 'Prints Airenv version'
7
+ def version
8
+ puts "Airenv #{Airenv::VERSION}"
9
+ end
10
+
11
+ def self.load_thorfiles(dir)
12
+ thor_files = Dir.glob('**/*.thor').delete_if { |x| not File.file?(x) }
13
+ thor_files.each do |f|
14
+ load f
15
+ include f.to_s.gsub('lib/', '').gsub('.thor', '').camelize.constantize
16
+ end
17
+ end
18
+
19
+ end
@@ -0,0 +1,4 @@
1
+ module Airenv
2
+ module Commands
3
+ end
4
+ end
@@ -0,0 +1,16 @@
1
+ module Airenv
2
+ module Commands
3
+ module Fetch
4
+ def self.included(thor)
5
+ thor.class_eval do
6
+ desc 'fetch', 'Fetches a AIR SDK of specified version'
7
+ def fetch(version_id)
8
+ sdk = Airenv::Sdk.new version_id
9
+ sdk.fetch
10
+ puts "#{sdk.description.name} fetched."
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,31 @@
1
+ require 'shellwords'
2
+
3
+ module Airenv
4
+ module Commands
5
+ module Init
6
+ def self.included(thor)
7
+ thor.class_eval do
8
+ desc 'init', 'Initialize Airenv for first use'
9
+ def init
10
+ puts "To attempt to remove Flash Builder system directory then making a symbolic link instead of the directory."
11
+ puts " REMOVES: #{Settings.flash_builder_airsdk_path}"
12
+ puts " SYMLINK: #{Settings.flash_builder_airsdk_path} -> #{Settings.current_sdk_symlink_path}"
13
+ puts "Do you permit to do it? [yN]"
14
+ answer = STDIN.gets.chomp
15
+ if ['y', 'Y'].include? answer
16
+ if File.symlink?(Settings.flash_builder_airsdk_path)
17
+ File.delete(Settings.flash_builder_airsdk_path)
18
+ else
19
+ File.rename(Settings.flash_builder_airsdk_path, "#{Settings.flash_builder_airsdk_path}_bak")
20
+ end
21
+ File.symlink(Settings.current_sdk_symlink_path, Settings.flash_builder_airsdk_path)
22
+ puts "Airenv is initialized for your environment."
23
+ else
24
+ puts "All are cancelled. Did nothing."
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,15 @@
1
+ module Airenv
2
+ module Commands
3
+ module Install
4
+ def self.included(thor)
5
+ thor.class_eval do
6
+ desc 'install', 'Fetch and use a AIR SDK of specified version'
7
+ def install(version_id)
8
+ fetch version_id
9
+ use version_id
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,19 @@
1
+ require 'pathname'
2
+
3
+ module Airenv
4
+ module Commands
5
+ module List
6
+ def self.included(thor)
7
+ thor.class_eval do
8
+ desc 'list', 'List fetched SDKs up'
9
+ def list
10
+ Airenv::SdkDescription.installed_versions.each do |version_id|
11
+ sdk = Airenv::Sdk.new(version_id)
12
+ puts "#{sdk.description.version} (#{sdk.simple_version})"
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,21 @@
1
+ module Airenv
2
+ module Commands
3
+ module Use
4
+ def self.included(thor)
5
+ thor.class_eval do
6
+ desc 'use', 'Change current to ready to use a AIR SDK of specified version'
7
+ def use(version_id)
8
+ if Airenv::SdkDescription.usable?(version_id)
9
+ normalized_version_id = Airenv::SdkDescription.normalize_version_id(version_id)
10
+ sdk = Airenv::Sdk.new normalized_version_id
11
+ sdk.use
12
+ puts "Switched to #{sdk.description.name}."
13
+ else
14
+ puts "The version #{version_id} is not installed on your system. Please use 'install' command to get the version."
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,44 @@
1
+ require 'configuration'
2
+
3
+ module Airenv
4
+ module Configuration
5
+ def temporary_sdk_file_path(simple_name)
6
+ File.expand_path("#{temporary_sdk_file_directory}/#{simple_name}.tbz2")
7
+ end
8
+
9
+ def temporary_sdk_file_extracted_directory
10
+ File.expand_path("#{temporary_sdk_file_directory}/temporary_sdk")
11
+ end
12
+
13
+ def temporary_sdk_file_directory
14
+ File.expand_path("#{envdir}/tmp/sdks/")
15
+ end
16
+
17
+ def sdks_directory
18
+ File.expand_path("#{envdir}/sdks/")
19
+ end
20
+
21
+ def current_sdk_symlink_path
22
+ "#{sdks_directory}/current"
23
+ end
24
+ end
25
+ end
26
+
27
+ def default_config_string
28
+ <<EOS
29
+ Settings = Configuration.for('config') {
30
+ envdir '~/.airenv'
31
+ flash_builder_airsdk_path '/Applications/Adobe Flash Builder 4.7/eclipse/plugins/com.adobe.flash.compiler_4.7.0.349722/AIRSDK'
32
+ }
33
+ EOS
34
+ end
35
+
36
+ path = File.expand_path '~/.airenvconfig.rb'
37
+ unless File.exists? path
38
+ File.open(path, 'w') do |file|
39
+ file.write(default_config_string)
40
+ end
41
+ end
42
+
43
+ Kernel.load(path)
44
+ Configuration.__send__(:include, Airenv::Configuration)
@@ -0,0 +1,48 @@
1
+ require 'active_support/core_ext'
2
+ require 'progressbar'
3
+ require 'net/http'
4
+ require 'uri'
5
+ require 'fileutils'
6
+
7
+ class Airenv::Downloader
8
+
9
+ def initialize(uri, simple_name)
10
+ @uri = URI.parse(uri)
11
+ @simple_name = simple_name
12
+ end
13
+
14
+ def start
15
+ FileUtils.mkdir_p Settings.temporary_sdk_file_directory
16
+
17
+ bar = nil
18
+
19
+ Net::HTTP.start(@uri.host, @uri.port) do |http|
20
+ request = Net::HTTP::Get.new(@uri.request_uri)
21
+
22
+ http.request(request) do |response|
23
+ size = response["Content-Length"].to_f
24
+ bar = ProgressBar.new(@simple_name, size) if bar.blank?
25
+
26
+ File.open(temporary_sdk_file_path, "wb") do |file|
27
+ response.read_body do |data|
28
+ file.write data
29
+ bar.set(file.tell)
30
+ end
31
+
32
+ if file.tell == size
33
+ bar.finish
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+
40
+ def temporary_sdk_file_path
41
+ Settings.temporary_sdk_file_path(@simple_name)
42
+ end
43
+
44
+ def archive_exists?
45
+ File.exists?(temporary_sdk_file_path)
46
+ end
47
+
48
+ end
data/lib/airenv/sdk.rb ADDED
@@ -0,0 +1,117 @@
1
+ require 'active_support/core_ext'
2
+ require 'progressbar'
3
+ require 'archive/tar/minitar'
4
+ require 'fileutils'
5
+ require 'bzip2'
6
+ require 'shellwords'
7
+
8
+ class Airenv::Sdk
9
+
10
+ include Comparable
11
+
12
+ attr_accessor :description
13
+
14
+ def initialize(version_id=nil)
15
+ self.description = Airenv::SdkDescription.new
16
+ parse_version_id(version_id) if version_id.present?
17
+ parse_sdk_description if archive_extracted?
18
+ end
19
+
20
+ def parse_version_id(version_id)
21
+ self.description.version, build = *version_id.split('-b')
22
+ self.description.build = build.to_i if build.present?
23
+ end
24
+
25
+ def package_uri
26
+ "http://airdownload.adobe.com/air/mac/download/#{simple_version}/AIRSDK_Compiler.tbz2"
27
+ end
28
+
29
+ def simple_version
30
+ description.version.split('.')[0..1].join('.')
31
+ end
32
+
33
+ def package_name
34
+ "AIRSDK_#{description.id}"
35
+ end
36
+
37
+ def simple_name
38
+ "AIRSDK_#{simple_version}"
39
+ end
40
+
41
+ def fetch
42
+ puts "Downloading..."
43
+ download
44
+ puts "Archive extracting..."
45
+ extract_archive
46
+ parse_sdk_description_from_temporary_sdk
47
+ move_to_sdks_directory
48
+ end
49
+
50
+ def download
51
+ downloader = Airenv::Downloader.new(package_uri, simple_name)
52
+ if downloader.archive_exists?
53
+ puts "Skipped downloading because the archive exists."
54
+ else
55
+ downloader.start
56
+ end
57
+ end
58
+
59
+ def extracted_dir
60
+ "#{Settings.sdks_directory}/#{package_name}"
61
+ end
62
+
63
+ def temporary_extracted_dir
64
+ "#{Settings.temporary_sdk_file_extracted_directory}"
65
+ end
66
+
67
+ def extract_archive
68
+ FileUtils.mkdir_p(temporary_extracted_dir)
69
+ system("tar zxf #{Shellwords.escape(Settings.temporary_sdk_file_path(simple_name))} -C #{temporary_extracted_dir}")
70
+ end
71
+
72
+ def sdk_description_xml_path
73
+ "#{extracted_dir}/air-sdk-description.xml"
74
+ end
75
+
76
+ def archive_extracted?
77
+ File.exists?(extracted_dir)
78
+ end
79
+
80
+ def sdk_description_xml
81
+ File.read("#{sdk_description_xml_path}")
82
+ end
83
+
84
+ def parse_sdk_description
85
+ self.description.load(sdk_description_xml)
86
+ end
87
+
88
+ def temporary_sdk_description_xml_path
89
+ "#{temporary_extracted_dir}/air-sdk-description.xml"
90
+ end
91
+
92
+ def temporary_sdk_description_xml
93
+ File.read("#{temporary_sdk_description_xml_path}")
94
+ end
95
+
96
+ def parse_sdk_description_from_temporary_sdk
97
+ self.description.load(temporary_sdk_description_xml)
98
+ end
99
+
100
+ def move_to_sdks_directory
101
+ FileUtils.mkdir_p(Settings.sdks_directory)
102
+ File.rename(temporary_extracted_dir, extracted_dir)
103
+ end
104
+
105
+ def current_sdk_symlink_exists?
106
+ File.exists?(Settings.current_sdk_symlink_path)
107
+ end
108
+
109
+ def use
110
+ File.delete(Settings.current_sdk_symlink_path) if current_sdk_symlink_exists?
111
+ File.symlink(extracted_dir, Settings.current_sdk_symlink_path)
112
+ end
113
+
114
+ def <=>(other)
115
+ self.description <=> other.description
116
+ end
117
+ end
@@ -0,0 +1,77 @@
1
+ require 'rexml/document'
2
+ require 'digest/md5'
3
+
4
+ class Airenv::SdkDescription
5
+ include Comparable
6
+
7
+ attr_accessor :name
8
+ attr_accessor :version
9
+ attr_accessor :build
10
+
11
+ def initialize(name=nil, version=nil, build=nil)
12
+ self.name = name
13
+ self.version = version
14
+ self.build = build
15
+ end
16
+
17
+ def load(xml)
18
+ @doc = parse(xml)
19
+ root = @doc.elements['air-sdk-description']
20
+ self.name = root.elements['name'].text
21
+ self.version = root.elements['version'].text
22
+ self.build = root.elements['build'].text.to_i
23
+ end
24
+
25
+ def parse(xml)
26
+ REXML::Document.new xml
27
+ end
28
+
29
+ def id
30
+ "#{version}-b#{build}"
31
+ end
32
+
33
+ def digest
34
+ Digest::MD5.digest(id)
35
+ end
36
+
37
+ def <=>(other)
38
+ result = self.version <=> other.version
39
+ if result == 0
40
+ self.build <=> other.build
41
+ else
42
+ result
43
+ end
44
+ end
45
+
46
+ class << self
47
+ def normalize_version_id(version_id)
48
+ if simple_version?(version_id)
49
+ installed_sdks.select {|sdk|
50
+ sdk.simple_version == version_id
51
+ }.sort.last.description.id
52
+ else
53
+ version_id
54
+ end
55
+ end
56
+
57
+ def usable?(version_id)
58
+ installed_sdks.map {|sdk| [sdk.description.id, sdk.simple_version] }.flatten.include? version_id
59
+ end
60
+
61
+ def installed_sdks
62
+ installed_versions.map {|version| Airenv::Sdk.new(version) }
63
+ end
64
+
65
+ def simple_version?(version_id)
66
+ not version_id.include?("-b")
67
+ end
68
+
69
+ def installed_versions
70
+ Dir.glob("#{Settings.sdks_directory}/*").map {|f|
71
+ Pathname.new(f).basename.to_s
72
+ }.reject {|basename| basename == 'current' }.map {|basename|
73
+ basename.to_s.gsub("AIRSDK_", '')
74
+ }
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,3 @@
1
+ module Airenv
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+ require 'airenv/sdk'
3
+
4
+ describe Airenv::Downloader do
5
+ end
@@ -0,0 +1,180 @@
1
+ require 'spec_helper'
2
+
3
+ describe Airenv::SdkDescription do
4
+ subject { Airenv::SdkDescription.new }
5
+ describe 'properties' do
6
+ before do
7
+ subject.name = "AIR 1.2.3"
8
+ subject.version = "1.2.3"
9
+ subject.build = 1234
10
+ end
11
+
12
+ its(:name) { should be_an_instance_of(String) }
13
+ its(:version) { should be_an_instance_of(String) }
14
+ its(:build) { should be_an_instance_of(Fixnum) }
15
+ end
16
+
17
+ describe '#load' do
18
+ let(:xml) do
19
+ <<-EOS
20
+ <?xml version="1.0"?>
21
+ <air-sdk-description>
22
+ <name>AIR 4.5.6</name>
23
+ <version>4.5.6</version>
24
+ <build>5678</build>
25
+ </air-sdk-description>
26
+ EOS
27
+ end
28
+ before do
29
+ subject.load xml
30
+ end
31
+
32
+ its(:name) { should == "AIR 4.5.6" }
33
+ its(:version) { should == "4.5.6" }
34
+ its(:build) { should == 5678 }
35
+ end
36
+
37
+ describe '#digest' do
38
+ let(:another) { Airenv::SdkDescription.new }
39
+ before do
40
+ subject.name = "foo"
41
+ subject.version = "bar"
42
+ subject.build = 3141
43
+
44
+ another.name = "hoge"
45
+ another.version = "fuga"
46
+ another.build = 5926
47
+ end
48
+ its(:digest) { should_not == another.digest }
49
+ end
50
+
51
+ describe '#id' do
52
+ before do
53
+ subject.name = "AIR 4.5.6"
54
+ subject.version = "4.5.6"
55
+ subject.build = 3141
56
+ end
57
+
58
+ its(:id) { should == "4.5.6-b3141" }
59
+ end
60
+
61
+ describe '#<=>' do
62
+ let(:left) { Airenv::SdkDescription.new }
63
+ let(:right) { Airenv::SdkDescription.new }
64
+
65
+ context 'when right version is bigger' do
66
+ before do
67
+ left.version = "4.5.6"
68
+ left.build = 4567
69
+
70
+ right.version = "4.5.8"
71
+ right.build = 1234
72
+ end
73
+
74
+ subject { left <=> right }
75
+ it { should == -1 }
76
+ end
77
+
78
+ context 'when left version is bigger' do
79
+ before do
80
+ left.version = "4.5.8"
81
+ left.build = 4567
82
+
83
+ right.version = "4.5.4"
84
+ right.build = 1234
85
+ end
86
+
87
+ subject { left <=> right }
88
+ it { should == 1 }
89
+ end
90
+
91
+ context 'when left build version is bigger' do
92
+ before do
93
+ left.version = "4.5.8"
94
+ left.build = 1235
95
+
96
+ right.version = "4.5.8"
97
+ right.build = 1234
98
+ end
99
+
100
+ subject { left <=> right }
101
+ it { should == 1 }
102
+ end
103
+
104
+ context 'when right build version is bigger' do
105
+ before do
106
+ left.version = "4.5.8"
107
+ left.build = 1235
108
+
109
+ right.version = "4.5.8"
110
+ right.build = 1236
111
+ end
112
+
113
+ subject { left <=> right }
114
+ it { should == -1 }
115
+ end
116
+
117
+ context 'when version and build version is same' do
118
+ before do
119
+ left.version = "4.5.8"
120
+ left.build = 1235
121
+
122
+ right.version = "4.5.8"
123
+ right.build = 1235
124
+ end
125
+
126
+ subject { left <=> right }
127
+ it { should == 0 }
128
+ end
129
+ end
130
+
131
+ describe '.usable?' do
132
+ subject { Airenv::SdkDescription.usable?(version_id) }
133
+ before do
134
+ Airenv::SdkDescription.stub(:installed_versions).and_return(['1.2.3-b456', '1.2.4-b123'])
135
+ end
136
+ context do
137
+ let(:version_id) { '1.2' }
138
+ it { should be_true }
139
+ end
140
+ context do
141
+ let(:version_id) { '1.3' }
142
+ it { should be_false }
143
+ end
144
+ context do
145
+ let(:version_id) { '1.2.4-b123' }
146
+ it { should be_true }
147
+ end
148
+ context do
149
+ let(:version_id) { '1.2.2-b987' }
150
+ it { should be_false }
151
+ end
152
+ end
153
+
154
+ describe '.normalize_version_id' do
155
+ subject { Airenv::SdkDescription.normalize_version_id(version_id) }
156
+ before do
157
+ Airenv::SdkDescription.stub(:installed_versions).and_return(['1.2.3-b456', '1.2.4-b123'])
158
+ end
159
+ context do
160
+ let(:version_id) { '1.2' }
161
+ it { should == '1.2.4-b123' }
162
+ end
163
+ context do
164
+ let(:version_id) { '1.2.3-b456' }
165
+ it { should == '1.2.3-b456' }
166
+ end
167
+ end
168
+
169
+ describe '.simple_version?' do
170
+ subject { Airenv::SdkDescription.simple_version?(version_id) }
171
+ context do
172
+ let(:version_id) { '1.2' }
173
+ it { should be_true }
174
+ end
175
+ context do
176
+ let(:version_id) { '1.2.2-b987' }
177
+ it { should be_false }
178
+ end
179
+ end
180
+ end
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+ require 'airenv/sdk'
3
+
4
+ describe Airenv::Sdk do
5
+ subject { Airenv::Sdk.new }
6
+ let(:description) { Airenv::SdkDescription.new("AIR 4.5.6", "4.5.6", 5678) }
7
+
8
+ describe '#package_uri' do
9
+ before do
10
+ subject.description = description
11
+ end
12
+
13
+ its(:package_uri) { should == "http://airdownload.adobe.com/air/mac/download/4.5/AIRSDK_Compiler.tbz2" }
14
+ end
15
+
16
+ describe '#simple_version' do
17
+ before do
18
+ subject.description = description
19
+ end
20
+
21
+ its(:simple_version) { should == "4.5" }
22
+ end
23
+
24
+ describe '#parse_version_id' do
25
+ context 'given build number' do
26
+ before do
27
+ subject.description = description
28
+ subject.parse_version_id("4.5-b1234")
29
+ end
30
+
31
+ its(:simple_version) { should == "4.5" }
32
+ its("description.build") { should == 1234 }
33
+ end
34
+
35
+ context 'not given build number' do
36
+ before do
37
+ subject.parse_version_id("4.6")
38
+ end
39
+
40
+ its(:simple_version) { should == "4.6" }
41
+ its("description.build") { should be_nil }
42
+ end
43
+ end
44
+
45
+ describe '#package_name' do
46
+ before do
47
+ subject.description = description
48
+ end
49
+
50
+ its(:package_name) { should == "AIRSDK_4.5.6-b5678" }
51
+ end
52
+
53
+ describe '#simple_name' do
54
+ before do
55
+ subject.description = description
56
+ end
57
+
58
+ its(:simple_name) { should == "AIRSDK_4.5" }
59
+ end
60
+ end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe Airenv do
4
+ it 'should have a version number' do
5
+ Airenv::VERSION.should_not be_nil
6
+ end
7
+ end
@@ -0,0 +1,2 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+ require 'airenv'
metadata ADDED
@@ -0,0 +1,277 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: airenv
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Toshiyuki Hirooka
8
+ - Hidenori Doi
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-02-24 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: thor
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - '>='
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - '>='
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: active_support
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: i18n
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: progressbar
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: configuration
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: rubyzip
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - '>='
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: archive-tar-minitar
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - '>='
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :runtime
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: bzip2-ruby-rb20
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :runtime
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: bundler
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ~>
131
+ - !ruby/object:Gem::Version
132
+ version: '1.3'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ~>
138
+ - !ruby/object:Gem::Version
139
+ version: '1.3'
140
+ - !ruby/object:Gem::Dependency
141
+ name: rake
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - '>='
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ - !ruby/object:Gem::Dependency
155
+ name: rspec
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - '>='
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ type: :development
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - '>='
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ - !ruby/object:Gem::Dependency
169
+ name: guard
170
+ requirement: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - '>='
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
175
+ type: :development
176
+ prerelease: false
177
+ version_requirements: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - '>='
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ - !ruby/object:Gem::Dependency
183
+ name: guard-rspec
184
+ requirement: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - '>='
187
+ - !ruby/object:Gem::Version
188
+ version: '0'
189
+ type: :development
190
+ prerelease: false
191
+ version_requirements: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - '>='
194
+ - !ruby/object:Gem::Version
195
+ version: '0'
196
+ - !ruby/object:Gem::Dependency
197
+ name: pry
198
+ requirement: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - '>='
201
+ - !ruby/object:Gem::Version
202
+ version: '0'
203
+ type: :development
204
+ prerelease: false
205
+ version_requirements: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - '>='
208
+ - !ruby/object:Gem::Version
209
+ version: '0'
210
+ description: Automatically download, archive, switch AIR SDK for flash builder on
211
+ mac.
212
+ email:
213
+ - toshi.hirooka@gmail.com
214
+ - mewlist@mewlist.com
215
+ executables:
216
+ - airenv
217
+ extensions: []
218
+ extra_rdoc_files: []
219
+ files:
220
+ - .gitignore
221
+ - .rspec
222
+ - .travis.yml
223
+ - Gemfile
224
+ - Guardfile
225
+ - LICENSE.txt
226
+ - README.md
227
+ - Rakefile
228
+ - airenv.gemspec
229
+ - bin/airenv
230
+ - lib/airenv.rb
231
+ - lib/airenv/cli.rb
232
+ - lib/airenv/commands.rb
233
+ - lib/airenv/commands/fetch.thor
234
+ - lib/airenv/commands/init.thor
235
+ - lib/airenv/commands/install.thor
236
+ - lib/airenv/commands/list.thor
237
+ - lib/airenv/commands/use.thor
238
+ - lib/airenv/configuration.rb
239
+ - lib/airenv/downloader.rb
240
+ - lib/airenv/sdk.rb
241
+ - lib/airenv/sdk_description.rb
242
+ - lib/airenv/version.rb
243
+ - spec/airenv/downloader_spec.rb
244
+ - spec/airenv/sdk_description_spec.rb
245
+ - spec/airenv/sdk_spec.rb
246
+ - spec/airenv_spec.rb
247
+ - spec/spec_helper.rb
248
+ homepage: ''
249
+ licenses:
250
+ - MIT
251
+ metadata: {}
252
+ post_install_message:
253
+ rdoc_options: []
254
+ require_paths:
255
+ - lib
256
+ required_ruby_version: !ruby/object:Gem::Requirement
257
+ requirements:
258
+ - - '>='
259
+ - !ruby/object:Gem::Version
260
+ version: '0'
261
+ required_rubygems_version: !ruby/object:Gem::Requirement
262
+ requirements:
263
+ - - '>='
264
+ - !ruby/object:Gem::Version
265
+ version: '0'
266
+ requirements: []
267
+ rubyforge_project:
268
+ rubygems_version: 2.0.3
269
+ signing_key:
270
+ specification_version: 4
271
+ summary: Adobe AIR SDK package manager
272
+ test_files:
273
+ - spec/airenv/downloader_spec.rb
274
+ - spec/airenv/sdk_description_spec.rb
275
+ - spec/airenv/sdk_spec.rb
276
+ - spec/airenv_spec.rb
277
+ - spec/spec_helper.rb