ib 0.3.5 → 0.4.0
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 +4 -4
- data/.travis.yml +7 -0
- data/README.md +1 -0
- data/Rakefile +28 -0
- data/lib/ib/dependency_resolver.rb +83 -0
- data/lib/ib/parser.rb +4 -1
- data/lib/ib/project.rb +7 -1
- data/lib/ib/version.rb +1 -1
- data/spec/fixtures/{app_delegate.rb → common/app_delegate.rb} +0 -0
- data/spec/fixtures/{custom_view.rb → common/custom_view.rb} +0 -0
- data/spec/fixtures/{empty_view.rb → common/empty_view.rb} +0 -0
- data/spec/fixtures/{simple_class.rb → common/simple_class.rb} +0 -0
- data/spec/fixtures/dependency_test/sub_class_1.rb +2 -0
- data/spec/fixtures/dependency_test/sub_class_2.rb +2 -0
- data/spec/fixtures/dependency_test/super_class.rb +2 -0
- data/spec/lib/ib/dependency_resolver_spec.rb +113 -0
- data/spec/{generator_spec.rb → lib/ib/generator_spec.rb} +4 -3
- data/spec/{parser_spec.rb → lib/ib/parser_spec.rb} +9 -3
- data/spec/lib/ib/project_spec.rb +23 -0
- metadata +26 -16
- data/spec/project_spec.rb +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1eea4e011091e08436b55716cc61bb6f9bb6fa1b
|
4
|
+
data.tar.gz: 5295da9a7c934346ec69f3af30cfcab2fd81b70c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a1c760308f730307b0be44476244016190da663eacac8d5811cb64e351b7dc1ced20cfd85f86c3c2de7a54972548072eff7726cab9d0defe67b5bca5359cfbf6
|
7
|
+
data.tar.gz: 74d07a792b9a2ae8d3ea8a4e672604598048206c64e28112173e81c89fc2923c37ac63cc040dd1060a8be44212c70e63bfb54d223eb04970a1fb870868883841
|
data/.travis.yml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
# cite from https://github.com/CocoaPods/Xcodeproj/blob/master/.travis.yml
|
2
|
+
language: objective-c
|
3
|
+
env:
|
4
|
+
- RVM_RUBY_VERSION=ruby-1.9.3-p392 NOEXEC_DISABLE=1 CI=true RUBY_VERSION_SPECIFIC='sudo ln -s /usr/bin/llvm-gcc-4.2 /usr/bin/gcc-4.2 && curl http://curl.haxx.se/ca/cacert.pem -o /usr/local/share/cacert.pem' SSL_CERT_FILE=/usr/local/share/cacert.pem
|
5
|
+
before_install: source ~/.rvm/scripts/rvm && rvm use $RVM_RUBY_VERSION
|
6
|
+
install: eval $RUBY_VERSION_SPECIFIC && rake bootstrap[use_bundle_dir]
|
7
|
+
script: bundle exec rake spec
|
data/README.md
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
RubyMotion interface builder support (yes, with outlets)
|
4
4
|
|
5
5
|
<a href='http://spellhub.com/projects/project/7'><img src="http://spellhub.com/projects/status/7" height="18"></a>
|
6
|
+
[](https://travis-ci.org/yury/ib)
|
6
7
|
|
7
8
|
[**Change Log**](https://github.com/yury/ib/wiki/Change-Log)
|
8
9
|
|
data/Rakefile
CHANGED
@@ -1,2 +1,30 @@
|
|
1
1
|
#!/usr/bin/env rake
|
2
2
|
require "bundler/gem_tasks"
|
3
|
+
|
4
|
+
# Travis support
|
5
|
+
# cite from https://github.com/CocoaPods/Xcodeproj/blob/master/Rakefile
|
6
|
+
def on_rvm?
|
7
|
+
`which ruby`.strip.include?('.rvm')
|
8
|
+
end
|
9
|
+
|
10
|
+
def rvm_ruby_dir
|
11
|
+
@rvm_ruby_dir ||= File.expand_path('../..', `which ruby`.strip)
|
12
|
+
end
|
13
|
+
|
14
|
+
desc 'Install dependencies'
|
15
|
+
task :bootstrap, :use_bundle_dir? do |t, args|
|
16
|
+
options = []
|
17
|
+
options << "--without=documentation"
|
18
|
+
options << "--path ./travis_bundle_dir" if args[:use_bundle_dir?]
|
19
|
+
sh "bundle install #{options * ' '}"
|
20
|
+
end
|
21
|
+
|
22
|
+
begin
|
23
|
+
require 'rspec/core/rake_task'
|
24
|
+
|
25
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
26
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
27
|
+
spec.rspec_opts = ['-cfs']
|
28
|
+
end
|
29
|
+
rescue LoadError => e
|
30
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'tsort'
|
2
|
+
|
3
|
+
module IB
|
4
|
+
class DependencyResolver
|
5
|
+
|
6
|
+
class TSortHash < ::Hash
|
7
|
+
include TSort
|
8
|
+
|
9
|
+
alias tsort_each_node each_key
|
10
|
+
|
11
|
+
def tsort_each_child(node, &block)
|
12
|
+
fetch(node).each(&block)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
attr_reader :class_nodes, :files
|
17
|
+
|
18
|
+
def initialize(files)
|
19
|
+
@files = files
|
20
|
+
@class_nodes = struct_class_node
|
21
|
+
end
|
22
|
+
|
23
|
+
def sort_classes
|
24
|
+
@class_nodes.tsort
|
25
|
+
end
|
26
|
+
|
27
|
+
def sort_files
|
28
|
+
sort_classes.map do |klass|
|
29
|
+
files.select do |file, class_definitions|
|
30
|
+
has_class_in_file?(klass, class_definitions)
|
31
|
+
end.first
|
32
|
+
end.map do |file, _|
|
33
|
+
file
|
34
|
+
end.uniq.compact
|
35
|
+
end
|
36
|
+
|
37
|
+
def sort
|
38
|
+
sorted_files = {}
|
39
|
+
sort_files.each do |file|
|
40
|
+
sorted_files.store(file, @files[file])
|
41
|
+
end
|
42
|
+
sorted_files
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
def has_class_in_file?(klass, class_definitions)
|
47
|
+
!class_definitions.select do |x|
|
48
|
+
x[:class][0][0] == klass
|
49
|
+
end.empty?
|
50
|
+
end
|
51
|
+
|
52
|
+
def has_super_class?(class_definition)
|
53
|
+
class_definition[:class][0].size == 2
|
54
|
+
end
|
55
|
+
|
56
|
+
def struct_class_node
|
57
|
+
list_of_hash = @files.map do |file, class_definitions|
|
58
|
+
class_definitions.map do |class_definition| create_node(class_definition) end
|
59
|
+
end.flatten
|
60
|
+
|
61
|
+
list_of_hash.inject(TSortHash.new) do |sum, x|
|
62
|
+
sum.merge!(x)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def create_node(class_definition)
|
67
|
+
has_super_class?(class_definition) ?
|
68
|
+
node_with_super_class(class_definition):
|
69
|
+
node_without_super_class(class_definition)
|
70
|
+
end
|
71
|
+
|
72
|
+
def node_with_super_class(class_definition)
|
73
|
+
{
|
74
|
+
class_definition[:class][0][0] => [class_definition[:class][0][1]],
|
75
|
+
class_definition[:class][0][1] => [],
|
76
|
+
}
|
77
|
+
end
|
78
|
+
|
79
|
+
def node_without_super_class(class_definition)
|
80
|
+
{ class_definition[:class][0][0] => [] }
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
data/lib/ib/parser.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'ib/dependency_resolver'
|
2
|
+
|
1
3
|
class IB::Parser
|
2
4
|
NAME_REGEX = /[a-zA-Z][_a-zA-Z0-9]*/
|
3
5
|
CLASS_REGEX = /^[ \t]*class[ \t]+(#{NAME_REGEX})([ \t]*<[ \t]*(#{NAME_REGEX}))?/
|
@@ -23,7 +25,8 @@ class IB::Parser
|
|
23
25
|
all[file] = infos
|
24
26
|
end
|
25
27
|
end
|
26
|
-
|
28
|
+
|
29
|
+
IB::DependencyResolver.new(all).sort
|
27
30
|
end
|
28
31
|
|
29
32
|
def find(path)
|
data/lib/ib/project.rb
CHANGED
@@ -17,6 +17,12 @@ class IB::Project
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
+
def app_files
|
21
|
+
Motion::Project::App.config.files.select do |file|
|
22
|
+
file =~ /^(\.\/)?app\//
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
20
26
|
def write
|
21
27
|
ib_project = "ib.xcodeproj"
|
22
28
|
project = Xcodeproj::Project.new(ib_project)
|
@@ -32,7 +38,7 @@ class IB::Project
|
|
32
38
|
pods.path = pods_headers_path
|
33
39
|
|
34
40
|
generator = IB::Generator.new(detect_platform)
|
35
|
-
generator.write(
|
41
|
+
generator.write(app_files, ib_project)
|
36
42
|
|
37
43
|
support.new_file "ib.xcodeproj/Stubs.h"
|
38
44
|
file = support.new_file "ib.xcodeproj/Stubs.m"
|
data/lib/ib/version.rb
CHANGED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,113 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'ib/dependency_resolver'
|
3
|
+
|
4
|
+
describe IB::DependencyResolver do
|
5
|
+
context 'init with simple dependency' do
|
6
|
+
before do
|
7
|
+
@files = {
|
8
|
+
'aaa.rb' => [{
|
9
|
+
class: [['SubClass1', 'SubClass2']],
|
10
|
+
}],
|
11
|
+
'bbb.rb' => [{
|
12
|
+
class: [['SubClass2', 'SuperClass']],
|
13
|
+
}],
|
14
|
+
'ccc.rb' => [{
|
15
|
+
class: [['SuperClass', 'UIViewController']],
|
16
|
+
}],
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
describe 'new' do
|
21
|
+
it 'create a instance IB::DependencyResolver' do
|
22
|
+
resolver = IB::DependencyResolver.new(@files)
|
23
|
+
expect(
|
24
|
+
resolver.class_nodes.kind_of?(IB::DependencyResolver::TSortHash)
|
25
|
+
).to be_true
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe 'sort_classes' do
|
30
|
+
it 'create a instance IB::DependencyResolver' do
|
31
|
+
resolver = IB::DependencyResolver.new(@files)
|
32
|
+
expect(
|
33
|
+
resolver.sort_classes
|
34
|
+
).to eq(['UIViewController', 'SuperClass', 'SubClass2', 'SubClass1'])
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe 'sort_files' do
|
39
|
+
it 'create a instance IB::DependencyResolver' do
|
40
|
+
resolver = IB::DependencyResolver.new(@files)
|
41
|
+
expect(
|
42
|
+
resolver.sort_files
|
43
|
+
).to eq(['ccc.rb', 'bbb.rb', 'aaa.rb'])
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'init with no dependencies' do
|
49
|
+
before do
|
50
|
+
@files = {
|
51
|
+
'aaa.rb' => [{
|
52
|
+
class: [['SubClass1']],
|
53
|
+
}],
|
54
|
+
'bbb.rb' => [{
|
55
|
+
class: [['SubClass2']],
|
56
|
+
}],
|
57
|
+
'ccc.rb' => [{
|
58
|
+
class: [['SuperClass']],
|
59
|
+
}],
|
60
|
+
}
|
61
|
+
end
|
62
|
+
|
63
|
+
describe 'sort_classes' do
|
64
|
+
it 'create a instance IB::DependencyResolver' do
|
65
|
+
resolver = IB::DependencyResolver.new(@files)
|
66
|
+
expect(
|
67
|
+
resolver.sort_classes
|
68
|
+
).to eq(['SubClass1', 'SubClass2', 'SuperClass'])
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe 'sort_files' do
|
73
|
+
it 'create a instance IB::DependencyResolver' do
|
74
|
+
resolver = IB::DependencyResolver.new(@files)
|
75
|
+
expect(
|
76
|
+
resolver.sort_files
|
77
|
+
).to eq(['aaa.rb', 'bbb.rb', 'ccc.rb'])
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context 'init with dependency in one file' do
|
83
|
+
before do
|
84
|
+
@files = {
|
85
|
+
'aaa.rb' => [{
|
86
|
+
class: [['SubClass1', 'SubClass2']],
|
87
|
+
},{
|
88
|
+
class: [['SubClass2', 'SuperClass']],
|
89
|
+
},{
|
90
|
+
class: [['SuperClass']],
|
91
|
+
}]
|
92
|
+
}
|
93
|
+
end
|
94
|
+
|
95
|
+
describe 'sort_classes' do
|
96
|
+
it 'create a instance IB::DependencyResolver' do
|
97
|
+
resolver = IB::DependencyResolver.new(@files)
|
98
|
+
expect(
|
99
|
+
resolver.sort_classes
|
100
|
+
).to eq(['SuperClass', 'SubClass2', 'SubClass1'])
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
describe 'sort_files' do
|
105
|
+
it 'create a instance IB::DependencyResolver' do
|
106
|
+
resolver = IB::DependencyResolver.new(@files)
|
107
|
+
expect(
|
108
|
+
resolver.sort_files
|
109
|
+
).to eq(['aaa.rb'])
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
@@ -4,7 +4,7 @@ require "ib/generator"
|
|
4
4
|
|
5
5
|
describe IB::Generator do
|
6
6
|
it "generates stubs header with ios platform" do
|
7
|
-
files = IB::Parser.new.find_all("spec/fixtures")
|
7
|
+
files = IB::Parser.new.find_all("spec/fixtures/common")
|
8
8
|
stubs = IB::Generator.new(:ios).render_stub_file('generator/templates/Stubs.h.erb', files)
|
9
9
|
|
10
10
|
stubs.should == <<-OBJC
|
@@ -54,7 +54,7 @@ OBJC
|
|
54
54
|
end
|
55
55
|
|
56
56
|
it "generates stubs header with osx platform" do
|
57
|
-
files = IB::Parser.new.find_all("spec/fixtures")
|
57
|
+
files = IB::Parser.new.find_all("spec/fixtures/common")
|
58
58
|
stubs = IB::Generator.new(:osx).render_stub_file('generator/templates/Stubs.h.erb', files)
|
59
59
|
|
60
60
|
stubs.should == <<-OBJC
|
@@ -104,7 +104,8 @@ OBJC
|
|
104
104
|
end
|
105
105
|
|
106
106
|
it "generates stubs implement" do
|
107
|
-
files = IB::Parser.new.find_all("spec/fixtures")
|
107
|
+
files = IB::Parser.new.find_all("spec/fixtures/common")
|
108
|
+
|
108
109
|
stubs = IB::Generator.new(:ios).render_stub_file('generator/templates/Stubs.m.erb', files)
|
109
110
|
|
110
111
|
stubs.should == <<-OBJC
|
@@ -4,7 +4,7 @@ require "ib/parser"
|
|
4
4
|
|
5
5
|
describe IB::Parser do
|
6
6
|
it "finds outlets and actions" do
|
7
|
-
info = IB::Parser.new.find("spec/fixtures/custom_view.rb").first
|
7
|
+
info = IB::Parser.new.find("spec/fixtures/common/custom_view.rb").first
|
8
8
|
info[:class].should == [["CustomView", "UIView"]]
|
9
9
|
info[:outlets].should == [
|
10
10
|
["greenLabel", "UIGreenLabel"],
|
@@ -30,10 +30,16 @@ describe IB::Parser do
|
|
30
30
|
end
|
31
31
|
|
32
32
|
it "detects simple classes" do
|
33
|
-
IB::Parser.new.find("spec/fixtures/simple_class.rb").length.should == 0
|
33
|
+
IB::Parser.new.find("spec/fixtures/common/simple_class.rb").length.should == 0
|
34
34
|
end
|
35
35
|
|
36
36
|
it "finds all infos" do
|
37
|
-
|
37
|
+
infos = IB::Parser.new.find_all("spec/fixtures/dependency_test")
|
38
|
+
expect(infos.size).to eq 3
|
39
|
+
end
|
40
|
+
|
41
|
+
it "finds all sorted infos" do
|
42
|
+
infos = IB::Parser.new.find_all("spec/fixtures/dependency_test")
|
43
|
+
expect(infos.size).to eq 3
|
38
44
|
end
|
39
45
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
require "ib/project"
|
4
|
+
|
5
|
+
describe IB::Project do
|
6
|
+
it "generates xcode project" do
|
7
|
+
IB::Project.new(app_path:"spec/fixtures/common").write()
|
8
|
+
end
|
9
|
+
|
10
|
+
it "app_files" do
|
11
|
+
Motion::Project::App.config.stub('files').and_return(
|
12
|
+
[
|
13
|
+
'/usr/local/xxx/gems/xxx/lib/xxxx.rb',
|
14
|
+
'User/xxx/gems/xxx/lib/motion/xxxx.rb',
|
15
|
+
'./app/aaa.rb',
|
16
|
+
'./app/controllers/bbb.rb',
|
17
|
+
]
|
18
|
+
)
|
19
|
+
expect(IB::Project.new(app_path:"spec/fixtures/common").app_files).to eq(
|
20
|
+
['./app/aaa.rb', './app/controllers/bbb.rb',]
|
21
|
+
)
|
22
|
+
end
|
23
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yury Korolev
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-10-
|
12
|
+
date: 2013-10-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: xcodeproj
|
@@ -92,6 +92,7 @@ extra_rdoc_files: []
|
|
92
92
|
files:
|
93
93
|
- .gitignore
|
94
94
|
- .rspec
|
95
|
+
- .travis.yml
|
95
96
|
- Gemfile
|
96
97
|
- LICENSE
|
97
98
|
- README.md
|
@@ -99,6 +100,7 @@ files:
|
|
99
100
|
- bin/ib
|
100
101
|
- ib.gemspec
|
101
102
|
- lib/ib.rb
|
103
|
+
- lib/ib/dependency_resolver.rb
|
102
104
|
- lib/ib/generator.rb
|
103
105
|
- lib/ib/generator/rendering_helper.rb
|
104
106
|
- lib/ib/generator/templates/Stubs.h.erb
|
@@ -108,13 +110,17 @@ files:
|
|
108
110
|
- lib/ib/project.rb
|
109
111
|
- lib/ib/tasks.rb
|
110
112
|
- lib/ib/version.rb
|
111
|
-
- spec/fixtures/app_delegate.rb
|
112
|
-
- spec/fixtures/custom_view.rb
|
113
|
-
- spec/fixtures/empty_view.rb
|
114
|
-
- spec/fixtures/simple_class.rb
|
115
|
-
- spec/
|
116
|
-
- spec/
|
117
|
-
- spec/
|
113
|
+
- spec/fixtures/common/app_delegate.rb
|
114
|
+
- spec/fixtures/common/custom_view.rb
|
115
|
+
- spec/fixtures/common/empty_view.rb
|
116
|
+
- spec/fixtures/common/simple_class.rb
|
117
|
+
- spec/fixtures/dependency_test/sub_class_1.rb
|
118
|
+
- spec/fixtures/dependency_test/sub_class_2.rb
|
119
|
+
- spec/fixtures/dependency_test/super_class.rb
|
120
|
+
- spec/lib/ib/dependency_resolver_spec.rb
|
121
|
+
- spec/lib/ib/generator_spec.rb
|
122
|
+
- spec/lib/ib/parser_spec.rb
|
123
|
+
- spec/lib/ib/project_spec.rb
|
118
124
|
- spec/spec_helper.rb
|
119
125
|
- template/controller.erb
|
120
126
|
- template/controller_helper.erb
|
@@ -143,11 +149,15 @@ signing_key:
|
|
143
149
|
specification_version: 4
|
144
150
|
summary: Small portion of love to interface builder with rubymotion
|
145
151
|
test_files:
|
146
|
-
- spec/fixtures/app_delegate.rb
|
147
|
-
- spec/fixtures/custom_view.rb
|
148
|
-
- spec/fixtures/empty_view.rb
|
149
|
-
- spec/fixtures/simple_class.rb
|
150
|
-
- spec/
|
151
|
-
- spec/
|
152
|
-
- spec/
|
152
|
+
- spec/fixtures/common/app_delegate.rb
|
153
|
+
- spec/fixtures/common/custom_view.rb
|
154
|
+
- spec/fixtures/common/empty_view.rb
|
155
|
+
- spec/fixtures/common/simple_class.rb
|
156
|
+
- spec/fixtures/dependency_test/sub_class_1.rb
|
157
|
+
- spec/fixtures/dependency_test/sub_class_2.rb
|
158
|
+
- spec/fixtures/dependency_test/super_class.rb
|
159
|
+
- spec/lib/ib/dependency_resolver_spec.rb
|
160
|
+
- spec/lib/ib/generator_spec.rb
|
161
|
+
- spec/lib/ib/parser_spec.rb
|
162
|
+
- spec/lib/ib/project_spec.rb
|
153
163
|
- spec/spec_helper.rb
|