20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
# File 'lib/nested/integration/angular.rb', line 20
def self.angular_add_functions(app, js, resource)
resource.actions.each do |e|
method, action, block = e.values_at :method, :action, :block
block_args = block.parameters.map(&:last)
fun_name = Nested::Js::generate_function_name(resource, method, action)
args = Nested::Js::function_arguments(resource)
route_args = args.inject({}) do |memo, e|
idx = args.index(e)
memo[:"#{e}_id"] = "'+(typeof(values[#{idx}]) == 'number' ? values[#{idx}].toString() : (values[#{idx}].id || values[#{idx}]))+'"
memo
end
route = "#{app.config[:prefix]}" + resource.route_replace(resource.route(action), route_args)
when_args = args.map{|a| "$q.when(#{a})"}
js << " impl.#{fun_name}Url = function(#{args.join(',')}){"
js << " var deferred = $q.defer()"
js << " $q.all([#{when_args.join(',')}]).then(function(values){"
js << " deferred.resolve('#{route}')"
js << " })"
js << " return deferred.promise"
js << " }"
if [:get, :delete].include?(method)
args << "data" if !block_args.empty?
js << " impl.#{fun_name} = function(#{args.join(',')}){"
js << " var deferred = $q.defer()"
js << " $q.all([#{when_args.join(',')}]).then(function(values){"
js << " $http({"
js << " method: '#{method}', "
js << (" url: '#{route}'" + (block_args.empty? ? "" : ","))
js << " params: data" unless block_args.empty?
js << " })"
js << " .success(function(responseData){"
js << " deferred[responseData.ok ? 'resolve' : 'reject'](responseData.data)"
js << " })"
js << " .error(function(){ deferred.reject() })"
js << " });"
js << " return deferred.promise"
js << " }"
elsif method == :post
js << " impl.#{fun_name} = function(#{(args+['data']).join(',')}){"
js << " var deferred = $q.defer()"
js << " $q.all([#{when_args.join(',')}]).then(function(values){"
js << " $http({method: '#{method}', url: '#{route}', data: data})"
js << " .success(function(responseData){"
js << " deferred[responseData.ok ? 'resolve' : 'reject'](responseData.data)"
js << " })"
js << " .error(function(){ deferred.reject() })"
js << " });"
js << " return deferred.promise"
js << " }"
elsif method == :put
args << "data" if args.empty? || !block_args.empty?
js << " impl.#{fun_name} = function(#{args.join(',')}){"
js << " var deferred = $q.defer()"
js << " $q.all([#{when_args.join(',')}]).then(function(values){"
js << " $http({method: '#{method}', url: '#{route}', data: #{args.last}})"
js << " .success(function(responseData){"
js << " deferred[responseData.ok ? 'resolve' : 'reject'](responseData.data)"
js << " })"
js << " .error(function(){ deferred.reject() })"
js << " });"
js << " return deferred.promise"
js << " }"
end
end
resource.resources.each {|r| angular_add_functions(app, js, r) }
end
|