calatrava 0.5.0 → 0.6.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.
- data/CHANGES.markdown +40 -0
- data/README.md +5 -0
- data/calatrava.gemspec +2 -3
- data/lib/calatrava/apache.rb +126 -0
- data/lib/calatrava/app.rb +2 -2
- data/lib/calatrava/app_builder.rb +68 -0
- data/lib/calatrava/configuration.rb +73 -0
- data/lib/calatrava/droid_app.rb +46 -0
- data/lib/calatrava/ios_app.rb +40 -0
- data/lib/calatrava/kernel.rb +79 -0
- data/lib/calatrava/manifest.rb +34 -11
- data/lib/calatrava/mobile_web_app.rb +74 -0
- data/lib/calatrava/project.rb +7 -191
- data/lib/calatrava/project_script.rb +186 -0
- data/lib/calatrava/shell.rb +43 -0
- data/lib/calatrava/tasks/assets.rb +4 -0
- data/lib/calatrava/tasks/automation.rb +4 -10
- data/lib/calatrava/tasks/haml.rb +9 -10
- data/lib/calatrava/tasks.rb +9 -85
- data/lib/calatrava/templates/config/templates/httpd.conf.erb +9 -9
- data/lib/calatrava/templates/droid/app/bridge.coffee +3 -0
- data/lib/calatrava/templates/droid/calatrava/src/com/calatrava/CalatravaPlugin.java +13 -0
- data/lib/calatrava/templates/droid/calatrava/src/com/calatrava/bridge/AlertPlugin.java +61 -0
- data/lib/calatrava/templates/droid/calatrava/src/com/calatrava/bridge/AnnotationRegistrar.java +71 -0
- data/lib/calatrava/templates/droid/calatrava/src/com/calatrava/bridge/KernelBridge.java +3 -4
- data/lib/calatrava/templates/droid/calatrava/src/com/calatrava/bridge/Launcher.java +2 -1
- data/lib/calatrava/templates/droid/calatrava/src/com/calatrava/bridge/PageRegistry.java +8 -29
- data/lib/calatrava/templates/droid/calatrava/src/com/calatrava/bridge/PluginCommand.java +8 -0
- data/lib/calatrava/templates/droid/calatrava/src/com/calatrava/bridge/PluginRegistry.java +112 -0
- data/lib/calatrava/templates/droid/calatrava/src/com/calatrava/bridge/RegisteredActivity.java +3 -14
- data/lib/calatrava/templates/droid/calatrava/src/com/calatrava/bridge/RegisteredPlugin.java +10 -0
- data/lib/calatrava/templates/droid/calatrava/src/com/calatrava/bridge/Registration.java +8 -0
- data/lib/calatrava/templates/droid/calatrava/src/com/calatrava/bridge/RhinoService.java +1 -0
- data/lib/calatrava/templates/droid/calatrava/src/com/calatrava/shell/WebViewActivity.java +1 -1
- data/lib/calatrava/templates/ios/Podfile.calatrava +6 -1
- data/lib/calatrava/templates/ios/src/ConversionFormViewController.m +1 -1
- data/lib/calatrava/templates/kernel/app/calatrava.coffee +32 -5
- data/lib/calatrava/templates/kernel/app/converter/controller.converter.coffee +11 -4
- data/lib/calatrava/templates/kernel/plugins/alert.coffee +9 -0
- data/lib/calatrava/templates/shell/layouts/single_page.haml +3 -3
- data/lib/calatrava/templates/web/app/source/alert.web.coffee +13 -0
- data/lib/calatrava/templates/web/app/source/bridge.coffee +10 -0
- data/lib/calatrava/templates/web/app/views/index.haml +5 -5
- data/lib/calatrava/version.rb +1 -1
- data/lib/calatrava.rb +15 -1
- data/spec/app_builder_spec.rb +46 -0
- data/spec/kernel_spec.rb +51 -0
- data/spec/manifest_spec.rb +62 -0
- data/spec/mobile_web_app_spec.rb +49 -0
- data/spec/shell_spec.rb +54 -0
- data/spec/spec_helper.rb +4 -0
- metadata +60 -49
- data/Plans.md +0 -20
- data/lib/calatrava/tasks/apache.rb +0 -54
- data/lib/calatrava/tasks/build.rb +0 -1
- data/lib/calatrava/tasks/configuration.rb +0 -41
- data/lib/calatrava/tasks/droid.rb +0 -83
- data/lib/calatrava/tasks/ios.rb +0 -73
- data/lib/calatrava/tasks/kernel.rb +0 -52
- data/lib/calatrava/tasks/shell.rb +0 -17
- data/lib/calatrava/tasks/web.rb +0 -87
data/lib/calatrava/project.rb
CHANGED
@@ -1,19 +1,7 @@
|
|
1
|
-
require 'mustache'
|
2
|
-
require 'yaml'
|
3
|
-
require 'xcoder'
|
4
|
-
require 'xcodeproj'
|
5
|
-
|
6
|
-
require 'calatrava/resources_build_phase'
|
7
|
-
|
8
1
|
module Calatrava
|
9
2
|
|
10
3
|
class Project
|
11
4
|
|
12
|
-
def sh(cmd)
|
13
|
-
$stdout.puts cmd
|
14
|
-
system(cmd)
|
15
|
-
end
|
16
|
-
|
17
5
|
def self.here(directory)
|
18
6
|
@@current = Project.new(directory)
|
19
7
|
end
|
@@ -22,7 +10,7 @@ module Calatrava
|
|
22
10
|
@@current
|
23
11
|
end
|
24
12
|
|
25
|
-
attr_reader :name
|
13
|
+
attr_reader :name, :config, :kernel, :mobile_web, :ios, :droid
|
26
14
|
|
27
15
|
def initialize(name, overrides = {})
|
28
16
|
@name = name
|
@@ -35,185 +23,13 @@ module Calatrava
|
|
35
23
|
@name = @options[:project_name]
|
36
24
|
end
|
37
25
|
@options.merge! overrides
|
38
|
-
end
|
39
|
-
|
40
|
-
def dev?
|
41
|
-
@options[:is_dev]
|
42
|
-
end
|
43
|
-
|
44
|
-
def create(template)
|
45
|
-
create_project(template)
|
46
|
-
create_directory_tree(template)
|
47
|
-
create_files(template)
|
48
|
-
|
49
|
-
create_android_tree(template)
|
50
|
-
create_ios_tree(template)
|
51
|
-
end
|
52
|
-
|
53
|
-
def create_project(template)
|
54
|
-
FileUtils.mkdir_p @name
|
55
|
-
File.open(File.join(@name, 'calatrava.yml'), "w+") do |f|
|
56
|
-
f.print({:project_name => @name}.to_yaml)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def target_item(item)
|
61
|
-
item.gsub("CALATRAVA_TMPL", @name)
|
62
|
-
end
|
63
|
-
|
64
|
-
def create_directory_tree(template)
|
65
|
-
template.walk_directories do |dir|
|
66
|
-
FileUtils.mkdir_p(File.join(@name, target_item(dir)))
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
def create_files(template)
|
71
|
-
template.walk_files do |file_info|
|
72
|
-
target_name = target_item(file_info[:name])
|
73
|
-
if File.extname(file_info[:name]) == ".calatrava"
|
74
|
-
File.open(File.join(@name, target_name.gsub(".calatrava", "")), "w+") do |f|
|
75
|
-
expanded = Mustache.render(IO.read(file_info[:path]),
|
76
|
-
:project_name => @name,
|
77
|
-
:project_slug => @slug,
|
78
|
-
:project_title => @title,
|
79
|
-
:dev? => dev?)
|
80
|
-
f.print(expanded)
|
81
|
-
end
|
82
|
-
else
|
83
|
-
FileUtils.cp(file_info[:path], File.join(@name, target_name))
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
def create_android_tree(template)
|
89
|
-
Dir.chdir(File.join(@name, "droid")) do
|
90
|
-
sh "android create project --name '#{@slug}' --path '#{@name}' --package com.#{@slug} --target android-10 --activity #{@title}"
|
91
|
-
|
92
|
-
Dir.walk("calatrava") do |item|
|
93
|
-
target_item = item.sub('calatrava', @name)
|
94
|
-
FileUtils.mkdir_p(target_item) if File.directory? item
|
95
|
-
FileUtils.cp(item, target_item) if File.file? item
|
96
|
-
end
|
97
|
-
Dir.chdir "#{@name}" do
|
98
|
-
Dir.chdir "#{@name}" do
|
99
|
-
FileUtils.mv "build.xml", "../build.xml"
|
100
|
-
FileUtils.mv "AndroidManifest.xml", "../AndroidManifest.xml"
|
101
|
-
end
|
102
|
-
FileUtils.rm_rf "#{@name}"
|
103
|
-
Dir.chdir "src/com/#{@name}" do
|
104
|
-
FileUtils.mv "Title.java", "#{@title}.java"
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
FileUtils.rm_rf "calatrava"
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
def create_ios_project
|
113
|
-
Xcodeproj::Project.new.tap do |proj|
|
114
|
-
%w{Foundation UIKit CoreGraphics}.each { |fw| proj.add_system_framework fw }
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
def create_ios_project_groups(base_dir, proj, target)
|
119
|
-
source_files_for_target = []
|
120
|
-
|
121
|
-
walker = lambda do |item, group|
|
122
|
-
if item.directory?
|
123
|
-
group_name = item.basename
|
124
|
-
child_group = group.create_group group_name
|
125
|
-
item.each_child { |item| walker.call(item, child_group) }
|
126
|
-
elsif item.file?
|
127
|
-
file_path = item.relative_path_from(base_dir)
|
128
|
-
group.create_file file_path.to_s
|
129
|
-
source_files_for_target << Xcodeproj::Project::Object::PBXNativeTarget::SourceFileDescription.new(file_path, "", nil)
|
130
|
-
else
|
131
|
-
raise 'what is it then?!'
|
132
|
-
end
|
133
|
-
end
|
134
|
-
(base_dir + "src").each_child { |item| walker.call(item, proj.main_group) }
|
135
|
-
target.add_source_files source_files_for_target
|
136
|
-
end
|
137
|
-
|
138
|
-
def create_ios_folder_references(base_dir, proj, target)
|
139
|
-
FileUtils.mkdir_p "ios/public"
|
140
|
-
public_folder = proj.main_group.create_file "public"
|
141
|
-
public_folder.last_known_file_type = 'folder'
|
142
|
-
build_file = public_folder.build_files.new
|
143
|
-
|
144
|
-
shared_phase = Xcodeproj::Project::Object::PBXResourcesBuildPhase.new(proj,nil,{})
|
145
|
-
|
146
|
-
shared_phase << build_file
|
147
|
-
target.build_phases << shared_phase
|
148
|
-
|
149
|
-
end
|
150
|
-
|
151
|
-
def create_ios_project_target(proj)
|
152
|
-
target = Xcodeproj::Project::Object::PBXNativeTarget.new(proj,
|
153
|
-
nil,
|
154
|
-
'productType' => 'com.apple.product-type.application',
|
155
|
-
'productName' => @name)
|
156
|
-
|
157
|
-
target.build_configurations.each do |config|
|
158
|
-
config.build_settings.merge!(Xcodeproj::Project::Object::XCBuildConfiguration::COMMON_BUILD_SETTINGS[:ios])
|
159
|
-
|
160
|
-
# E.g. [:ios, :release]
|
161
|
-
extra_settings_key = [:ios, config.name.downcase.to_sym]
|
162
|
-
if extra_settings = Xcodeproj::Project::Object::XCBuildConfiguration::COMMON_BUILD_SETTINGS[extra_settings_key]
|
163
|
-
config.build_settings.merge!(extra_settings)
|
164
|
-
end
|
165
|
-
|
166
|
-
config.build_settings.merge!({
|
167
|
-
"GCC_PREFIX_HEADER" => "src/#{@name}-Prefix.pch",
|
168
|
-
"OTHER_LDFLAGS" => ['-ObjC', '-all_load'],
|
169
|
-
"INFOPLIST_FILE" => "src/#{@name}-Info.plist",
|
170
|
-
"SKIP_INSTALL" => "NO",
|
171
|
-
"IPHONEOS_DEPLOYMENT_TARGET" => "5.0",
|
172
|
-
})
|
173
|
-
config.build_settings.delete "DSTROOT"
|
174
|
-
config.build_settings.delete "INSTALL_PATH"
|
175
|
-
|
176
|
-
end
|
177
|
-
|
178
|
-
calatrava_phase = Xcodeproj::Project::Object::PBXShellScriptBuildPhase.new(proj,nil,{})
|
179
|
-
target.build_phase_references.insert(0,calatrava_phase.uuid) # hacky manual way to get build phase inserted in the right place
|
180
|
-
|
181
|
-
calatrava_phase.name = "Build Calatrava Kernel & Shell"
|
182
|
-
calatrava_phase.shell_script = <<-EOS.split("\n").collect(&:strip).join("\n")
|
183
|
-
source ${SRCROOT}/../build_env.sh
|
184
|
-
bundle exec rake ios:xcode:prebuild
|
185
|
-
EOS
|
186
|
-
|
187
|
-
proj.targets << target
|
188
|
-
target
|
189
|
-
end
|
190
|
-
|
191
|
-
def create_ios_tree(template)
|
192
|
-
proj = create_ios_project
|
193
|
-
base_dir = Pathname.new(@name) + "ios"
|
194
|
-
|
195
|
-
target = create_ios_project_target(proj)
|
196
|
-
create_ios_project_groups(base_dir, proj, target)
|
197
|
-
create_ios_folder_references(base_dir, proj, target)
|
198
|
-
|
199
|
-
proj.save_as (base_dir + "#{@name}.xcodeproj").to_s
|
200
|
-
end
|
201
|
-
|
202
|
-
def modules
|
203
|
-
Dir[File.join(@path, 'kernel/app/*')].select { |n| File.directory? n }.collect { |n| File.basename n }
|
204
|
-
end
|
205
|
-
|
206
|
-
def src_paths
|
207
|
-
modules.collect { |m| "app/#{m}" }.join(':')
|
208
|
-
end
|
209
26
|
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
builder.package
|
27
|
+
@config = Configuration.new
|
28
|
+
@kernel = Kernel.new(@path)
|
29
|
+
@shell = Shell.new(@path)
|
30
|
+
@mobile_web = MobileWebApp.new(@path, Manifest.new(@path, 'web', @kernel, @shell))
|
31
|
+
@ios = IosApp.new(@path, Manifest.new(@path, 'ios', @kernel, @shell))
|
32
|
+
@droid = DroidApp.new(@path, @name, Manifest.new(@path, 'droid', @kernel, @shell))
|
217
33
|
end
|
218
34
|
|
219
35
|
end
|
@@ -0,0 +1,186 @@
|
|
1
|
+
require 'mustache'
|
2
|
+
require 'yaml'
|
3
|
+
require 'xcodeproj'
|
4
|
+
|
5
|
+
module Calatrava
|
6
|
+
|
7
|
+
class ProjectScript
|
8
|
+
|
9
|
+
attr_reader :name
|
10
|
+
|
11
|
+
def initialize(name, overrides = {})
|
12
|
+
@name = name
|
13
|
+
@slug = name.gsub(" ", "_").downcase
|
14
|
+
@title = @name[0..0].upcase + @name[1..-1]
|
15
|
+
@options = overrides
|
16
|
+
end
|
17
|
+
|
18
|
+
def sh(cmd)
|
19
|
+
$stdout.puts cmd
|
20
|
+
system(cmd)
|
21
|
+
end
|
22
|
+
|
23
|
+
def dev?
|
24
|
+
@options[:is_dev]
|
25
|
+
end
|
26
|
+
|
27
|
+
def create(template)
|
28
|
+
create_project(template)
|
29
|
+
create_directory_tree(template)
|
30
|
+
create_files(template)
|
31
|
+
|
32
|
+
create_android_tree(template)
|
33
|
+
create_ios_tree(template)
|
34
|
+
end
|
35
|
+
|
36
|
+
def create_project(template)
|
37
|
+
FileUtils.mkdir_p @name
|
38
|
+
File.open(File.join(@name, 'calatrava.yml'), "w+") do |f|
|
39
|
+
f.print({:project_name => @name}.to_yaml)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def target_item(item)
|
44
|
+
item.gsub("CALATRAVA_TMPL", @name)
|
45
|
+
end
|
46
|
+
|
47
|
+
def create_directory_tree(template)
|
48
|
+
template.walk_directories do |dir|
|
49
|
+
FileUtils.mkdir_p(File.join(@name, target_item(dir)))
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def create_files(template)
|
54
|
+
template.walk_files do |file_info|
|
55
|
+
target_name = target_item(file_info[:name])
|
56
|
+
if File.extname(file_info[:name]) == ".calatrava"
|
57
|
+
File.open(File.join(@name, target_name.gsub(".calatrava", "")), "w+") do |f|
|
58
|
+
expanded = Mustache.render(IO.read(file_info[:path]),
|
59
|
+
:project_name => @name,
|
60
|
+
:project_slug => @slug,
|
61
|
+
:project_title => @title,
|
62
|
+
:dev? => dev?)
|
63
|
+
f.print(expanded)
|
64
|
+
end
|
65
|
+
else
|
66
|
+
FileUtils.cp(file_info[:path], File.join(@name, target_name))
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def create_android_tree(template)
|
72
|
+
Dir.chdir(File.join(@name, "droid")) do
|
73
|
+
sh "android create project --name '#{@slug}' --path '#{@name}' --package com.#{@slug} --target android-10 --activity #{@title}"
|
74
|
+
|
75
|
+
Dir.walk("calatrava") do |item|
|
76
|
+
target_item = item.sub('calatrava', @name)
|
77
|
+
FileUtils.mkdir_p(target_item) if File.directory? item
|
78
|
+
FileUtils.cp(item, target_item) if File.file? item
|
79
|
+
end
|
80
|
+
Dir.chdir "#{@name}" do
|
81
|
+
Dir.chdir "#{@name}" do
|
82
|
+
FileUtils.mv "build.xml", "../build.xml"
|
83
|
+
FileUtils.mv "AndroidManifest.xml", "../AndroidManifest.xml"
|
84
|
+
end
|
85
|
+
FileUtils.rm_rf "#{@name}"
|
86
|
+
Dir.chdir "src/com/#{@name}" do
|
87
|
+
FileUtils.mv "Title.java", "#{@title}.java"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
FileUtils.rm_rf "calatrava"
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def create_ios_project
|
96
|
+
Xcodeproj::Project.new.tap do |proj|
|
97
|
+
%w{Foundation UIKit CoreGraphics}.each { |fw| proj.add_system_framework fw }
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def create_ios_project_groups(base_dir, proj, target)
|
102
|
+
source_files_for_target = []
|
103
|
+
|
104
|
+
walker = lambda do |item, group|
|
105
|
+
if item.directory?
|
106
|
+
group_name = item.basename
|
107
|
+
child_group = group.create_group group_name
|
108
|
+
item.each_child { |item| walker.call(item, child_group) }
|
109
|
+
elsif item.file?
|
110
|
+
file_path = item.relative_path_from(base_dir)
|
111
|
+
group.create_file file_path.to_s
|
112
|
+
source_files_for_target << Xcodeproj::Project::Object::PBXNativeTarget::SourceFileDescription.new(file_path, "", nil)
|
113
|
+
else
|
114
|
+
raise 'what is it then?!'
|
115
|
+
end
|
116
|
+
end
|
117
|
+
(base_dir + "src").each_child { |item| walker.call(item, proj.main_group) }
|
118
|
+
target.add_source_files source_files_for_target
|
119
|
+
end
|
120
|
+
|
121
|
+
def create_ios_folder_references(base_dir, proj, target)
|
122
|
+
public_folder = proj.main_group.create_file "public"
|
123
|
+
public_folder.last_known_file_type = 'folder'
|
124
|
+
build_file = public_folder.build_files.new
|
125
|
+
|
126
|
+
shared_phase = Xcodeproj::Project::Object::PBXResourcesBuildPhase.new(proj,nil,{})
|
127
|
+
|
128
|
+
shared_phase << build_file
|
129
|
+
target.build_phases << shared_phase
|
130
|
+
|
131
|
+
end
|
132
|
+
|
133
|
+
def create_ios_project_target(proj)
|
134
|
+
target = Xcodeproj::Project::Object::PBXNativeTarget.new(proj,
|
135
|
+
nil,
|
136
|
+
'productType' => 'com.apple.product-type.application',
|
137
|
+
'productName' => @name)
|
138
|
+
|
139
|
+
target.build_configurations.each do |config|
|
140
|
+
config.build_settings.merge!(Xcodeproj::Project::Object::XCBuildConfiguration::COMMON_BUILD_SETTINGS[:ios])
|
141
|
+
|
142
|
+
# E.g. [:ios, :release]
|
143
|
+
extra_settings_key = [:ios, config.name.downcase.to_sym]
|
144
|
+
if extra_settings = Xcodeproj::Project::Object::XCBuildConfiguration::COMMON_BUILD_SETTINGS[extra_settings_key]
|
145
|
+
config.build_settings.merge!(extra_settings)
|
146
|
+
end
|
147
|
+
|
148
|
+
config.build_settings.merge!({
|
149
|
+
"GCC_PREFIX_HEADER" => "src/#{@name}-Prefix.pch",
|
150
|
+
"OTHER_LDFLAGS" => ['-ObjC', '-all_load'],
|
151
|
+
"INFOPLIST_FILE" => "src/#{@name}-Info.plist",
|
152
|
+
"SKIP_INSTALL" => "NO",
|
153
|
+
"IPHONEOS_DEPLOYMENT_TARGET" => "5.0",
|
154
|
+
})
|
155
|
+
config.build_settings.delete "DSTROOT"
|
156
|
+
config.build_settings.delete "INSTALL_PATH"
|
157
|
+
|
158
|
+
end
|
159
|
+
|
160
|
+
calatrava_phase = Xcodeproj::Project::Object::PBXShellScriptBuildPhase.new(proj,nil,{})
|
161
|
+
target.build_phase_references.insert(0,calatrava_phase.uuid) # hacky manual way to get build phase inserted in the right place
|
162
|
+
|
163
|
+
calatrava_phase.name = "Build Calatrava Kernel & Shell"
|
164
|
+
calatrava_phase.shell_path = '/bin/bash'
|
165
|
+
calatrava_phase.shell_script = <<-EOS.split("\n").collect(&:strip).join("\n")
|
166
|
+
source ${SRCROOT}/../build_env.sh
|
167
|
+
bundle exec rake ios:xcode:prebuild
|
168
|
+
EOS
|
169
|
+
|
170
|
+
proj.targets << target
|
171
|
+
target
|
172
|
+
end
|
173
|
+
|
174
|
+
def create_ios_tree(template)
|
175
|
+
proj = create_ios_project
|
176
|
+
base_dir = Pathname.new(@name) + "ios"
|
177
|
+
|
178
|
+
target = create_ios_project_target(proj)
|
179
|
+
create_ios_project_groups(base_dir, proj, target)
|
180
|
+
create_ios_folder_references(base_dir, proj, target)
|
181
|
+
|
182
|
+
proj.save_as (base_dir + "#{@name}.xcodeproj").to_s
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Calatrava
|
2
|
+
|
3
|
+
class Shell
|
4
|
+
def initialize(proj_path)
|
5
|
+
@path = proj_path
|
6
|
+
end
|
7
|
+
|
8
|
+
def coffee_files
|
9
|
+
Dir.chdir @path do
|
10
|
+
Dir["shell/support/*.coffee"] + Dir["shell/support/*.coffee"]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def haml_files
|
15
|
+
Dir.chdir @path do
|
16
|
+
Dir["shell/support/*.haml"]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def css_files
|
21
|
+
Dir.chdir @path do
|
22
|
+
Dir["shell/stylesheets/*.sass"] + Dir["shell/stylesheets/*.css"]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def features
|
27
|
+
Dir.chdir @path do
|
28
|
+
Dir["shell/pages/*"].collect do |f|
|
29
|
+
if File.directory?(f)
|
30
|
+
{
|
31
|
+
:name => File.basename(f),
|
32
|
+
:coffee => Dir["#{f}/*.coffee"],
|
33
|
+
:haml => Dir["#{f}/*.haml"]
|
34
|
+
}
|
35
|
+
else
|
36
|
+
nil
|
37
|
+
end
|
38
|
+
end.compact
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -1,21 +1,15 @@
|
|
1
|
+
FEATURES_DIR = File.join('.', 'features').freeze
|
2
|
+
FEATURE_RESULTS_DIR = File.join('.', 'results').freeze
|
3
|
+
|
1
4
|
namespace :automation do
|
2
5
|
namespace :web do
|
3
6
|
desc "Runs cucumber tests against the web app"
|
4
|
-
task :features, [:file] => [:
|
7
|
+
task :features, [:file] => [:create_sim_link, :copy_steps_file, :clean_up_results_dir] do |t, args|
|
5
8
|
ENV['PATH'] = "#{ROOT_DIR}/web/features:#{ENV['PATH']}"
|
6
9
|
features_to_be_run = args[:file] ? "#{FEATURES_DIR}/#{args[:file]}" : FEATURES_DIR
|
7
10
|
sh "cucumber --strict --tags @all,@web --tags ~@wip #{features_to_be_run} --format html --out #{FEATURE_RESULTS_DIR}/report.html --format pretty"
|
8
11
|
end
|
9
12
|
|
10
|
-
desc "launch a daemon apache instance on port 8888 which will serve the features and mock the backend services"
|
11
|
-
task :apache_for_features => ['web:build', APACHE_LOGS_DIR] do
|
12
|
-
create_plist
|
13
|
-
configure_apache
|
14
|
-
`launchctl unload #{APACHE_DIR}/com.jenkins.calatrava.apache.plist`
|
15
|
-
`launchctl load -w #{APACHE_DIR}/com.jenkins.calatrava.apache.plist`
|
16
|
-
`sleep 5`
|
17
|
-
end
|
18
|
-
|
19
13
|
desc "create sim link for the ios step_definitions and support folder"
|
20
14
|
task :create_sim_link do
|
21
15
|
sh "rm -rf #{FEATURES_DIR}/step_definitions"
|
data/lib/calatrava/tasks/haml.rb
CHANGED
@@ -6,9 +6,9 @@ module HamlSupport
|
|
6
6
|
|
7
7
|
attr_reader :page_name
|
8
8
|
|
9
|
-
def initialize(
|
10
|
-
@
|
11
|
-
@page_name =
|
9
|
+
def initialize(page_path = nil)
|
10
|
+
@page_path = page_path
|
11
|
+
@page_name = File.basename(@page_path, '.haml') if @page_path
|
12
12
|
end
|
13
13
|
|
14
14
|
def content_for(named_chunk)
|
@@ -23,13 +23,13 @@ module HamlSupport
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def render_partial(partial_name, locals = {})
|
26
|
-
|
26
|
+
partial_name = "#{partial_name}.haml" unless partial_name =~ /haml$/
|
27
|
+
partial_template = IO.read partial_name
|
27
28
|
Haml::Engine.new(partial_template).render(self, locals)
|
28
29
|
end
|
29
30
|
|
30
|
-
def render_page(
|
31
|
-
|
32
|
-
page_template = IO.read(File.join('shell/pages', "#{page_name}.haml"))
|
31
|
+
def render_page(locals = {})
|
32
|
+
page_template = IO.read(@page_path)
|
33
33
|
Haml::Engine.new(page_template).render(self, locals)
|
34
34
|
end
|
35
35
|
|
@@ -37,10 +37,10 @@ module HamlSupport
|
|
37
37
|
|
38
38
|
class << self
|
39
39
|
|
40
|
-
def compile_hybrid_page(
|
40
|
+
def compile_hybrid_page(page_path, output_path, options = {})
|
41
41
|
puts "haml page: #{page_path} -> #{output_path}"
|
42
42
|
|
43
|
-
options[:helper] = Helper.new(
|
43
|
+
options[:helper] = Helper.new(page_path)
|
44
44
|
options[:template] = "shell/layouts/single_page.haml"
|
45
45
|
options[:out] = File.join(output_path, File.basename(page_path, '.*') + '.html')
|
46
46
|
|
@@ -63,7 +63,6 @@ module HamlSupport
|
|
63
63
|
|
64
64
|
html = Haml::Engine.new(template).render(options[:helper])
|
65
65
|
|
66
|
-
html.gsub!("file:///android_asset/hybrid", "../assets") if options[:platform] == 'ios'
|
67
66
|
IO.write(html_path, html)
|
68
67
|
end
|
69
68
|
end
|
data/lib/calatrava/tasks.rb
CHANGED
@@ -3,91 +3,15 @@ require 'calatrava'
|
|
3
3
|
|
4
4
|
Calatrava::Project.here('.')
|
5
5
|
|
6
|
-
|
7
|
-
cp Dir[source], dest_dir
|
8
|
-
end
|
9
|
-
|
10
|
-
ROOT_DIR = "."
|
11
|
-
BUILD_DIR = File.join(ROOT_DIR, 'build').freeze
|
12
|
-
|
13
|
-
SHELL_DIR = File.join(ROOT_DIR, 'shell').freeze
|
14
|
-
SHELL_LAYOUTS_DIR = File.join(SHELL_DIR, 'layouts').freeze
|
15
|
-
SHELL_VIEWS_DIR = File.join(SHELL_DIR, 'views').freeze
|
16
|
-
SHELL_PARTIALS_DIR = File.join(SHELL_DIR, 'partials').freeze
|
17
|
-
SHELL_JS_DIR = File.join(SHELL_DIR, 'support').freeze
|
18
|
-
|
19
|
-
FEATURES_DIR = File.join(ROOT_DIR, 'features').freeze
|
20
|
-
FEATURE_RESULTS_DIR = File.join(ROOT_DIR, 'results').freeze
|
21
|
-
|
22
|
-
|
23
|
-
KERNEL_DIR = File.join(ROOT_DIR, 'kernel').freeze
|
24
|
-
KERNEL_JS_DIR = File.join(KERNEL_DIR, 'app').freeze
|
25
|
-
KERNEL_SPEC_DIR = File.join(KERNEL_DIR, 'spec').freeze
|
26
|
-
|
27
|
-
BUILD_CORE_DIR = File.join(BUILD_DIR, 'core').freeze
|
28
|
-
BUILD_CORE_KERNEL_DIR = File.join(BUILD_CORE_DIR, 'kernel').freeze
|
29
|
-
BUILD_CORE_CSS_DIR = File.join(BUILD_CORE_DIR, 'stylesheets').freeze
|
30
|
-
|
31
|
-
ASSETS_DIR = File.join(ROOT_DIR, 'assets').freeze
|
32
|
-
ASSETS_IMG_DIR = File.join(ASSETS_DIR, 'images').freeze
|
33
|
-
ASSETS_LIB_DIR = File.join(ASSETS_DIR, 'lib').freeze
|
34
|
-
ASSETS_CSS_DIR = File.join(ASSETS_DIR, 'stylesheets').freeze
|
35
|
-
ASSETS_FONTS_DIR = File.join(ASSETS_DIR, 'fonts').freeze
|
36
|
-
|
37
|
-
APACHE_DIR = File.join(ROOT_DIR, 'web', 'apache').freeze
|
38
|
-
WEB_DIR = File.join(ROOT_DIR, 'web').freeze
|
39
|
-
APACHE_LOGS_DIR = File.join(APACHE_DIR, 'logs').freeze
|
40
|
-
|
41
|
-
CONFIG_DIR = File.join(ROOT_DIR, 'config').freeze
|
42
|
-
CONFIG_YAML = File.join(CONFIG_DIR, 'environments.yml').freeze
|
43
|
-
CONFIG_TEMPLATE_DIR = File.join(CONFIG_DIR, 'templates').freeze
|
44
|
-
CONFIG_RESULT_DIR = File.join(CONFIG_DIR, 'result').freeze
|
45
|
-
directory CONFIG_RESULT_DIR
|
46
|
-
|
47
|
-
CONFIG = {}
|
48
|
-
|
49
|
-
[:ios, :droid, :web].each do |os|
|
50
|
-
CONFIG[os] = {}
|
51
|
-
CONFIG[os][:root] = File.join(ROOT_DIR, os.to_s)
|
52
|
-
CONFIG[os][:public] = case os
|
53
|
-
when :droid
|
54
|
-
File.join(CONFIG[os][:root], Calatrava::Project.current.name, 'assets', 'hybrid').freeze
|
55
|
-
else
|
56
|
-
File.join(CONFIG[os][:root], 'public').freeze
|
57
|
-
end
|
58
|
-
CONFIG[os][:html] = File.join(CONFIG[os][:public], 'views').freeze
|
59
|
-
CONFIG[os][:assets] = case os
|
60
|
-
when :ios
|
61
|
-
File.join(CONFIG[os][:public], 'assets').freeze
|
62
|
-
else
|
63
|
-
CONFIG[os][:public]
|
64
|
-
end
|
65
|
-
CONFIG[os][:imgs] = File.join(CONFIG[os][:assets], 'images').freeze
|
66
|
-
CONFIG[os][:js] = File.join(CONFIG[os][:assets], 'scripts').freeze
|
67
|
-
CONFIG[os][:css] = File.join(CONFIG[os][:assets], 'styles').freeze
|
68
|
-
CONFIG[os][:fonts] = File.join(CONFIG[os][:assets], 'fonts').freeze
|
69
|
-
CONFIG[os][:layout] = File.join(CONFIG[os][:root], "app", "views").freeze
|
70
|
-
|
71
|
-
directory CONFIG[os][:public]
|
72
|
-
directory CONFIG[os][:html]
|
73
|
-
directory CONFIG[os][:assets]
|
74
|
-
directory CONFIG[os][:imgs]
|
75
|
-
directory CONFIG[os][:js]
|
76
|
-
directory CONFIG[os][:css]
|
77
|
-
directory CONFIG[os][:fonts]
|
78
|
-
end
|
79
|
-
|
80
|
-
CONFIG[:ios][:project_name] = Calatrava::Project.current.name
|
81
|
-
CONFIG[:ios][:app_dir] = File.join(CONFIG[:ios][:root], 'Source', Calatrava::Project.current.name)
|
82
|
-
CONFIG[:ios][:cucumber] = FEATURES_DIR
|
6
|
+
Dir["#{File.join(File.dirname(__FILE__), 'tasks')}/*.rb"].each { |t| require t }
|
83
7
|
|
84
|
-
|
85
|
-
|
86
|
-
|
8
|
+
namespace(:kernel) { Calatrava::Project.current.kernel.install_tasks }
|
9
|
+
namespace(:configure) { Calatrava::Project.current.config.install_tasks }
|
10
|
+
namespace(:droid) { Calatrava::Project.current.droid.install_tasks }
|
11
|
+
namespace(:ios) { Calatrava::Project.current.ios.install_tasks }
|
12
|
+
namespace(:web) { Calatrava::Project.current.mobile_web.install_tasks }
|
87
13
|
|
88
|
-
|
14
|
+
desc "Clean all apps"
|
15
|
+
task :clean => ['web:clean', 'ios:clean', 'droid:clean']
|
89
16
|
|
90
|
-
|
91
|
-
task :clean => ["core:clean", "ios:clean", "bb:clean", "web:clean", "artifact:clean", "droid:clean"] do
|
92
|
-
rm_rf BUILD_DIR
|
93
|
-
end
|
17
|
+
task :build => ['web:build', 'ios:build', 'droid:build']
|
@@ -1,13 +1,13 @@
|
|
1
|
-
LoadModule ssl_module <%=
|
2
|
-
LoadModule proxy_module <%=
|
3
|
-
LoadModule proxy_http_module <%=
|
4
|
-
LoadModule headers_module <%=
|
5
|
-
<% if
|
6
|
-
LoadModule log_config_module <%=
|
1
|
+
LoadModule ssl_module <%=configuration[:modules_path]%>/mod_ssl.so
|
2
|
+
LoadModule proxy_module <%=configuration[:modules_path]%>/mod_proxy.so
|
3
|
+
LoadModule proxy_http_module <%=configuration[:modules_path]%>/mod_proxy_http.so
|
4
|
+
LoadModule headers_module <%=configuration[:modules_path]%>/mod_headers.so
|
5
|
+
<% if configuration[:load_log_module] %>
|
6
|
+
LoadModule log_config_module <%=configuration[:modules_path]%>/mod_log_config.so
|
7
7
|
<% end %>
|
8
|
-
LoadModule mime_module <%=
|
9
|
-
LoadModule dir_module <%=
|
10
|
-
LoadModule alias_module <%=
|
8
|
+
LoadModule mime_module <%=configuration[:modules_path]%>/mod_mime.so
|
9
|
+
LoadModule dir_module <%=configuration[:modules_path]%>/mod_dir.so
|
10
|
+
LoadModule alias_module <%=configuration[:modules_path]%>/mod_alias.so
|
11
11
|
|
12
12
|
ErrorLog "logs/error.log"
|
13
13
|
LogLevel Debug
|
@@ -0,0 +1,13 @@
|
|
1
|
+
package com.calatrava;
|
2
|
+
|
3
|
+
import java.lang.annotation.Target;
|
4
|
+
import java.lang.annotation.ElementType;
|
5
|
+
import java.lang.annotation.Retention;
|
6
|
+
import java.lang.annotation.RetentionPolicy;
|
7
|
+
|
8
|
+
@Target(ElementType.TYPE)
|
9
|
+
@Retention(RetentionPolicy.RUNTIME)
|
10
|
+
public @interface CalatravaPlugin
|
11
|
+
{
|
12
|
+
String name();
|
13
|
+
}
|