afmotion 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (133) hide show
  1. data/.gitignore +16 -0
  2. data/AFMotion.gemspec +19 -0
  3. data/Gemfile +4 -0
  4. data/Gemfile.lock +53 -0
  5. data/README.md +135 -0
  6. data/Rakefile +14 -0
  7. data/app/app_delegate.rb +6 -0
  8. data/examples/AppDotNet/.gitignore +13 -0
  9. data/examples/AppDotNet/Gemfile +4 -0
  10. data/examples/AppDotNet/Gemfile.lock +48 -0
  11. data/examples/AppDotNet/Rakefile +10 -0
  12. data/examples/AppDotNet/app/app_delegate.rb +28 -0
  13. data/examples/AppDotNet/app/global_timeline_view_controller.rb +84 -0
  14. data/examples/AppDotNet/app/post.rb +23 -0
  15. data/examples/AppDotNet/app/post_table_view_cell.rb +44 -0
  16. data/examples/AppDotNet/app/user.rb +9 -0
  17. data/examples/AppDotNet/resources/profile-image-placeholder.png +0 -0
  18. data/examples/AppDotNet/resources/profile-image-placeholder@2x.png +0 -0
  19. data/examples/AppDotNet/spec/main_spec.rb +9 -0
  20. data/examples/AppDotNet/vendor/Podfile.lock +11 -0
  21. data/examples/AppDotNet/vendor/Pods/AFNetworking/AFNetworking/AFHTTPClient.h +574 -0
  22. data/examples/AppDotNet/vendor/Pods/AFNetworking/AFNetworking/AFHTTPClient.m +1187 -0
  23. data/examples/AppDotNet/vendor/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.h +133 -0
  24. data/examples/AppDotNet/vendor/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.m +341 -0
  25. data/examples/AppDotNet/vendor/Pods/AFNetworking/AFNetworking/AFImageRequestOperation.h +108 -0
  26. data/examples/AppDotNet/vendor/Pods/AFNetworking/AFNetworking/AFImageRequestOperation.m +237 -0
  27. data/examples/AppDotNet/vendor/Pods/AFNetworking/AFNetworking/AFJSONRequestOperation.h +71 -0
  28. data/examples/AppDotNet/vendor/Pods/AFNetworking/AFNetworking/AFJSONRequestOperation.m +136 -0
  29. data/examples/AppDotNet/vendor/Pods/AFNetworking/AFNetworking/AFNetworkActivityIndicatorManager.h +75 -0
  30. data/examples/AppDotNet/vendor/Pods/AFNetworking/AFNetworking/AFNetworkActivityIndicatorManager.m +131 -0
  31. data/examples/AppDotNet/vendor/Pods/AFNetworking/AFNetworking/AFNetworking.h +44 -0
  32. data/examples/AppDotNet/vendor/Pods/AFNetworking/AFNetworking/AFPropertyListRequestOperation.h +68 -0
  33. data/examples/AppDotNet/vendor/Pods/AFNetworking/AFNetworking/AFPropertyListRequestOperation.m +145 -0
  34. data/examples/AppDotNet/vendor/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.h +295 -0
  35. data/examples/AppDotNet/vendor/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.m +652 -0
  36. data/examples/AppDotNet/vendor/Pods/AFNetworking/AFNetworking/AFXMLRequestOperation.h +89 -0
  37. data/examples/AppDotNet/vendor/Pods/AFNetworking/AFNetworking/AFXMLRequestOperation.m +169 -0
  38. data/examples/AppDotNet/vendor/Pods/AFNetworking/AFNetworking/UIImageView+AFNetworking.h +78 -0
  39. data/examples/AppDotNet/vendor/Pods/AFNetworking/AFNetworking/UIImageView+AFNetworking.m +180 -0
  40. data/examples/AppDotNet/vendor/Pods/AFNetworking/AFNetworking.podspec +28 -0
  41. data/examples/AppDotNet/vendor/Pods/AFNetworking/LICENSE +19 -0
  42. data/examples/AppDotNet/vendor/Pods/AFNetworking/README.md +179 -0
  43. data/examples/AppDotNet/vendor/Pods/BuildHeaders/AFNetworking/AFHTTPClient.h +574 -0
  44. data/examples/AppDotNet/vendor/Pods/BuildHeaders/AFNetworking/AFHTTPRequestOperation.h +133 -0
  45. data/examples/AppDotNet/vendor/Pods/BuildHeaders/AFNetworking/AFImageRequestOperation.h +108 -0
  46. data/examples/AppDotNet/vendor/Pods/BuildHeaders/AFNetworking/AFJSONRequestOperation.h +71 -0
  47. data/examples/AppDotNet/vendor/Pods/BuildHeaders/AFNetworking/AFNetworkActivityIndicatorManager.h +75 -0
  48. data/examples/AppDotNet/vendor/Pods/BuildHeaders/AFNetworking/AFNetworking.h +44 -0
  49. data/examples/AppDotNet/vendor/Pods/BuildHeaders/AFNetworking/AFPropertyListRequestOperation.h +68 -0
  50. data/examples/AppDotNet/vendor/Pods/BuildHeaders/AFNetworking/AFURLConnectionOperation.h +295 -0
  51. data/examples/AppDotNet/vendor/Pods/BuildHeaders/AFNetworking/AFXMLRequestOperation.h +89 -0
  52. data/examples/AppDotNet/vendor/Pods/BuildHeaders/AFNetworking/UIImageView+AFNetworking.h +78 -0
  53. data/examples/AppDotNet/vendor/Pods/Headers/AFNetworking/AFHTTPClient.h +574 -0
  54. data/examples/AppDotNet/vendor/Pods/Headers/AFNetworking/AFHTTPRequestOperation.h +133 -0
  55. data/examples/AppDotNet/vendor/Pods/Headers/AFNetworking/AFImageRequestOperation.h +108 -0
  56. data/examples/AppDotNet/vendor/Pods/Headers/AFNetworking/AFJSONRequestOperation.h +71 -0
  57. data/examples/AppDotNet/vendor/Pods/Headers/AFNetworking/AFNetworkActivityIndicatorManager.h +75 -0
  58. data/examples/AppDotNet/vendor/Pods/Headers/AFNetworking/AFNetworking.h +44 -0
  59. data/examples/AppDotNet/vendor/Pods/Headers/AFNetworking/AFPropertyListRequestOperation.h +68 -0
  60. data/examples/AppDotNet/vendor/Pods/Headers/AFNetworking/AFURLConnectionOperation.h +295 -0
  61. data/examples/AppDotNet/vendor/Pods/Headers/AFNetworking/AFXMLRequestOperation.h +89 -0
  62. data/examples/AppDotNet/vendor/Pods/Headers/AFNetworking/UIImageView+AFNetworking.h +78 -0
  63. data/examples/AppDotNet/vendor/Pods/Pods-Acknowledgements.markdown +26 -0
  64. data/examples/AppDotNet/vendor/Pods/Pods-Acknowledgements.plist +56 -0
  65. data/examples/AppDotNet/vendor/Pods/Pods-prefix.pch +12 -0
  66. data/examples/AppDotNet/vendor/Pods/Pods-resources.sh +19 -0
  67. data/examples/AppDotNet/vendor/Pods/Pods.bridgesupport +617 -0
  68. data/examples/AppDotNet/vendor/Pods/Pods.xcconfig +7 -0
  69. data/examples/AppDotNet/vendor/Pods/Pods.xcodeproj/project.pbxproj +998 -0
  70. data/examples/AppDotNet/vendor/Pods/PodsDummy_Pods.m +4 -0
  71. data/lib/afmotion/http.rb +55 -0
  72. data/lib/afmotion/http_client.rb +121 -0
  73. data/lib/afmotion/http_result.rb +25 -0
  74. data/lib/afmotion/image.rb +10 -0
  75. data/lib/afmotion/operation.rb +65 -0
  76. data/lib/afmotion/patch/NSString_NSUrl.rb +11 -0
  77. data/lib/afmotion/version.rb +5 -0
  78. data/lib/afmotion.rb +16 -0
  79. data/pkg/afmotion-0.0.1.gem +0 -0
  80. data/spec/http_client_spec.rb +104 -0
  81. data/spec/http_spec.rb +26 -0
  82. data/spec/operation_spec.rb +41 -0
  83. data/vendor/Podfile.lock +11 -0
  84. data/vendor/Pods/AFNetworking/AFNetworking/AFHTTPClient.h +574 -0
  85. data/vendor/Pods/AFNetworking/AFNetworking/AFHTTPClient.m +1187 -0
  86. data/vendor/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.h +133 -0
  87. data/vendor/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.m +341 -0
  88. data/vendor/Pods/AFNetworking/AFNetworking/AFImageRequestOperation.h +108 -0
  89. data/vendor/Pods/AFNetworking/AFNetworking/AFImageRequestOperation.m +237 -0
  90. data/vendor/Pods/AFNetworking/AFNetworking/AFJSONRequestOperation.h +71 -0
  91. data/vendor/Pods/AFNetworking/AFNetworking/AFJSONRequestOperation.m +136 -0
  92. data/vendor/Pods/AFNetworking/AFNetworking/AFNetworkActivityIndicatorManager.h +75 -0
  93. data/vendor/Pods/AFNetworking/AFNetworking/AFNetworkActivityIndicatorManager.m +131 -0
  94. data/vendor/Pods/AFNetworking/AFNetworking/AFNetworking.h +44 -0
  95. data/vendor/Pods/AFNetworking/AFNetworking/AFPropertyListRequestOperation.h +68 -0
  96. data/vendor/Pods/AFNetworking/AFNetworking/AFPropertyListRequestOperation.m +145 -0
  97. data/vendor/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.h +295 -0
  98. data/vendor/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.m +652 -0
  99. data/vendor/Pods/AFNetworking/AFNetworking/AFXMLRequestOperation.h +89 -0
  100. data/vendor/Pods/AFNetworking/AFNetworking/AFXMLRequestOperation.m +169 -0
  101. data/vendor/Pods/AFNetworking/AFNetworking/UIImageView+AFNetworking.h +78 -0
  102. data/vendor/Pods/AFNetworking/AFNetworking/UIImageView+AFNetworking.m +180 -0
  103. data/vendor/Pods/AFNetworking/AFNetworking.podspec +28 -0
  104. data/vendor/Pods/AFNetworking/LICENSE +19 -0
  105. data/vendor/Pods/AFNetworking/README.md +179 -0
  106. data/vendor/Pods/BuildHeaders/AFNetworking/AFHTTPClient.h +574 -0
  107. data/vendor/Pods/BuildHeaders/AFNetworking/AFHTTPRequestOperation.h +133 -0
  108. data/vendor/Pods/BuildHeaders/AFNetworking/AFImageRequestOperation.h +108 -0
  109. data/vendor/Pods/BuildHeaders/AFNetworking/AFJSONRequestOperation.h +71 -0
  110. data/vendor/Pods/BuildHeaders/AFNetworking/AFNetworkActivityIndicatorManager.h +75 -0
  111. data/vendor/Pods/BuildHeaders/AFNetworking/AFNetworking.h +44 -0
  112. data/vendor/Pods/BuildHeaders/AFNetworking/AFPropertyListRequestOperation.h +68 -0
  113. data/vendor/Pods/BuildHeaders/AFNetworking/AFURLConnectionOperation.h +295 -0
  114. data/vendor/Pods/BuildHeaders/AFNetworking/AFXMLRequestOperation.h +89 -0
  115. data/vendor/Pods/BuildHeaders/AFNetworking/UIImageView+AFNetworking.h +78 -0
  116. data/vendor/Pods/Headers/AFNetworking/AFHTTPClient.h +574 -0
  117. data/vendor/Pods/Headers/AFNetworking/AFHTTPRequestOperation.h +133 -0
  118. data/vendor/Pods/Headers/AFNetworking/AFImageRequestOperation.h +108 -0
  119. data/vendor/Pods/Headers/AFNetworking/AFJSONRequestOperation.h +71 -0
  120. data/vendor/Pods/Headers/AFNetworking/AFNetworkActivityIndicatorManager.h +75 -0
  121. data/vendor/Pods/Headers/AFNetworking/AFNetworking.h +44 -0
  122. data/vendor/Pods/Headers/AFNetworking/AFPropertyListRequestOperation.h +68 -0
  123. data/vendor/Pods/Headers/AFNetworking/AFURLConnectionOperation.h +295 -0
  124. data/vendor/Pods/Headers/AFNetworking/AFXMLRequestOperation.h +89 -0
  125. data/vendor/Pods/Headers/AFNetworking/UIImageView+AFNetworking.h +78 -0
  126. data/vendor/Pods/Pods-Acknowledgements.markdown +26 -0
  127. data/vendor/Pods/Pods-Acknowledgements.plist +56 -0
  128. data/vendor/Pods/Pods-prefix.pch +12 -0
  129. data/vendor/Pods/Pods-resources.sh +19 -0
  130. data/vendor/Pods/Pods.bridgesupport +617 -0
  131. data/vendor/Pods/Pods.xcconfig +7 -0
  132. data/vendor/Pods/PodsDummy_Pods.m +4 -0
  133. metadata +218 -0
data/.gitignore ADDED
@@ -0,0 +1,16 @@
1
+ .repl_history
2
+ build
3
+ .build
4
+ libPods.a
5
+ vendor/Pods/Pods.xcodeproj
6
+ tags
7
+ resources/*.nib
8
+ resources/*.momd
9
+ resources/*.storyboardc
10
+ .DS_Store
11
+ nbproject
12
+ .redcar
13
+ #*#
14
+ *~
15
+ *.sw[po]
16
+ .eprj
data/AFMotion.gemspec ADDED
@@ -0,0 +1,19 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/afmotion/version', __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "afmotion"
6
+ s.version = AFMotion::VERSION
7
+ s.authors = ["Clay Allsopp"]
8
+ s.email = ["clay.allsopp@gmail.com"]
9
+ s.homepage = "https://github.com/clayallsopp/AFMotion"
10
+ s.summary = "A RubyMotion Wrapper for AFNetworking"
11
+ s.description = "A RubyMotion Wrapper for AFNetworking"
12
+
13
+ s.files = `git ls-files`.split($\)
14
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
15
+ s.require_paths = ["lib"]
16
+
17
+ s.add_dependency "motion-cocoapods", ">= 1.2.1"
18
+ s.add_development_dependency 'rake'
19
+ end
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in motion-settings.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,53 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ afmotion (0.0.1)
5
+ motion-cocoapods (>= 1.2.1)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ activesupport (3.2.8)
11
+ i18n (~> 0.6)
12
+ multi_json (~> 1.0)
13
+ addressable (2.3.2)
14
+ cocoapods (0.15.2)
15
+ activesupport (~> 3.2.6)
16
+ colored (~> 1.2)
17
+ escape (~> 0.0.4)
18
+ faraday (~> 0.8.1)
19
+ json (~> 1.7.3)
20
+ octokit (~> 1.7)
21
+ open4 (~> 1.3.0)
22
+ rake (~> 0.9.0)
23
+ xcodeproj (~> 0.3.5)
24
+ colored (1.2)
25
+ escape (0.0.4)
26
+ faraday (0.8.4)
27
+ multipart-post (~> 1.1)
28
+ faraday_middleware (0.9.0)
29
+ faraday (>= 0.7.4, < 0.9)
30
+ hashie (1.2.0)
31
+ i18n (0.6.1)
32
+ json (1.7.5)
33
+ motion-cocoapods (1.2.1)
34
+ cocoapods (>= 0.14.0)
35
+ multi_json (1.3.6)
36
+ multipart-post (1.1.5)
37
+ octokit (1.18.0)
38
+ addressable (~> 2.2)
39
+ faraday (~> 0.8)
40
+ faraday_middleware (~> 0.8)
41
+ hashie (~> 1.2)
42
+ multi_json (~> 1.3)
43
+ open4 (1.3.0)
44
+ rake (0.9.2.2)
45
+ xcodeproj (0.3.5)
46
+ activesupport (~> 3.2.6)
47
+
48
+ PLATFORMS
49
+ ruby
50
+
51
+ DEPENDENCIES
52
+ afmotion!
53
+ rake
data/README.md ADDED
@@ -0,0 +1,135 @@
1
+ # AFMotion
2
+
3
+ AFMotion is a thin RubyMotion wrapper for [AFNetworking](https://github.com/AFNetworking/AFNetworking), the absolute best networking library on iOS.
4
+
5
+ ## Usage
6
+
7
+ AFMotion can be used with standalone URL requests:
8
+
9
+ ```ruby
10
+ AFMotion::HTTP.get("http://google.com") do |result|
11
+ p result.body
12
+ end
13
+
14
+ AFMotion::JSON.get("http://jsonip.com") do |result|
15
+ p result.object["ip"]
16
+ end
17
+ ```
18
+
19
+ ### Web Services
20
+
21
+ If you're interacting with a web service, you can use `AFHTTPClient` with this nice wrapper:
22
+
23
+ ```ruby
24
+ # DSL Mapping to properties of AFHTTPClient
25
+
26
+ AFMotion::Client.build_shared("https://alpha-api.app.net/") do
27
+ header "Accept", "application/json"
28
+
29
+ operation :json
30
+ end
31
+
32
+ AFMotion::Client.shared.get("stream/0/posts/stream/global") do |result|
33
+ if result.success?
34
+ p result.object
35
+ elsif result.failure?
36
+ p result.error.localizedDescription
37
+ end
38
+ end
39
+ ```
40
+
41
+ ### Images
42
+
43
+ Loading images from the internet is pretty common. AFNetworking's existing methods aren't bad at all, but just incase you want extra Ruby:
44
+
45
+ ```ruby
46
+ image_view = UIImageView.alloc.initWithFrame CGRectMake(0, 0, 100, 100)
47
+ image_view.url = "http://i.imgur.com/r4uwx.jpg"
48
+
49
+ # or
50
+
51
+ placeholder = UIImage.imageNamed "placeholder-avatar"
52
+ image_view.url = {url: "http://i.imgur.com/r4uwx.jpg", placeholder: placeholder}
53
+ ```
54
+
55
+ ## Overview
56
+
57
+ ### Results
58
+
59
+ Each AFMotion wrapper callback yields an `AFMotion::HTTPResult` object. This object has properties like so:
60
+
61
+ ```ruby
62
+ AFMotion::some_function do |result|
63
+ # result.operation is the AFURLConnectionOperation instance
64
+ p result.operation.inspect
65
+
66
+ if result.success?
67
+ # result.object depends on the type of operation.
68
+ # For JSON and PLIST, this is usually a Hash.
69
+ # For XML, this is an NSXMLParser
70
+ # For HTTP, this is an NSURLResponse
71
+ p result.object
72
+
73
+ elsif result.failure?
74
+ # result.error is an NSError
75
+ p result.error.localizedDescription
76
+ end
77
+ end
78
+ ```
79
+
80
+ ### Operations
81
+
82
+ There are wrappers for each `AFURLConnectionOperation` subclass, each of the form:
83
+
84
+ ```ruby
85
+ AFMotion::Operation::[Operation Type].for_request(ns_url_request) do |result|
86
+ ...
87
+ end
88
+ ```
89
+
90
+ - `AFMotion::Operation::HTTP.for_request...`
91
+ - `AFMotion::Operation::JSON.for_request...`
92
+ - `AFMotion::Operation::XML.for_request...`
93
+ - `AFMotion::Operation::PLIST.for_request...`
94
+
95
+ ### One-off Requests
96
+
97
+ There are wrappers which automatically run a URL request for a given URL and HTTP method, of the form:
98
+
99
+ ```ruby
100
+ AFMotion::[Operation Type].[HTTP method](url) do |result|
101
+ ...
102
+ end
103
+ ```
104
+
105
+ - `AFMotion::HTTP.get/post/put/patch/delete(url)...`
106
+ - `AFMotion::JSON.get/post/put/patch/delete(url)...`
107
+ - `AFMotion::XML.get/post/put/patch/delete(url)...`
108
+ - `AFMotion::PLIST.get/post/put/patch/delete(url)...`
109
+
110
+ ### HTTP Client
111
+
112
+ If you're constantly accesing a web service, it's a good idea to use an `AFHTTPClient`. Things lets you add a common base URL and request headers to all the requests issued through it, like so:
113
+
114
+ ```ruby
115
+ client = AFMotion::Client.build("https://alpha-api.app.net/") do
116
+ header "Accept", "application/json"
117
+
118
+ operation :json
119
+ end
120
+
121
+ client.get("stream/0/posts/stream/global") do |result|
122
+ ...
123
+ end
124
+ ```
125
+
126
+ If you're constantly used one web service, you can use the `AFMotion::Client.shared` variable have a common reference. It can be set like a normal variable or created with `AFMotion::Client.build_shared`.
127
+
128
+ #### Client Building DSL
129
+
130
+ The `AFMotion::Client` DSL allows the following properties:
131
+
132
+ - `header(header, value)`
133
+ - `authorization(username: ___, password: ____)` for HTTP Basic auth, or `authorization(token: ____)` for Token based auth.
134
+ - `operation(operation_type)`. Allows you to set a common operation class for all your client's requests. So if your API is always going to be JSON, you should set `operation(:json)`. Accepts `:json`, `:plist`, `:xml`, or `:http`
135
+ - `parameter_encoding(encoding)`. Allows you to set a body format for requests parameters. For example, when you send a POST request you might want the parameters to be encoding as a JSON object instead of the traditional `key=val` format. Accepts `:json`, `:plist`, and `:form` (normal encoding).
data/Rakefile ADDED
@@ -0,0 +1,14 @@
1
+ # -*- coding: utf-8 -*-
2
+ $:.unshift("/Library/RubyMotion/lib")
3
+ require 'motion/project'
4
+ require "bundler/gem_tasks"
5
+ require "bundler/setup"
6
+ Bundler.require :default
7
+
8
+ $:.unshift("./lib/")
9
+ require './lib/afmotion'
10
+
11
+ Motion::Project::App.setup do |app|
12
+ # Use `rake config' to see complete project settings.
13
+ app.name = 'AFMotion'
14
+ end
@@ -0,0 +1,6 @@
1
+ class AppDelegate
2
+ def application(application, didFinishLaunchingWithOptions:launchOptions)
3
+
4
+ true
5
+ end
6
+ end
@@ -0,0 +1,13 @@
1
+ .repl_history
2
+ build
3
+ tags
4
+ resources/*.nib
5
+ resources/*.momd
6
+ resources/*.storyboardc
7
+ .DS_Store
8
+ nbproject
9
+ .redcar
10
+ #*#
11
+ *~
12
+ *.sw[po]
13
+ .eprj
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in motion-settings.gemspec
4
+ gem 'afmotion'
@@ -0,0 +1,48 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ activesupport (3.2.8)
5
+ i18n (~> 0.6)
6
+ multi_json (~> 1.0)
7
+ addressable (2.3.2)
8
+ afmotion (0.0.1)
9
+ motion-cocoapods (>= 1.2.1)
10
+ cocoapods (0.15.2)
11
+ activesupport (~> 3.2.6)
12
+ colored (~> 1.2)
13
+ escape (~> 0.0.4)
14
+ faraday (~> 0.8.1)
15
+ json (~> 1.7.3)
16
+ octokit (~> 1.7)
17
+ open4 (~> 1.3.0)
18
+ rake (~> 0.9.0)
19
+ xcodeproj (~> 0.3.5)
20
+ colored (1.2)
21
+ escape (0.0.4)
22
+ faraday (0.8.4)
23
+ multipart-post (~> 1.1)
24
+ faraday_middleware (0.9.0)
25
+ faraday (>= 0.7.4, < 0.9)
26
+ hashie (1.2.0)
27
+ i18n (0.6.1)
28
+ json (1.7.5)
29
+ motion-cocoapods (1.2.1)
30
+ cocoapods (>= 0.14.0)
31
+ multi_json (1.3.6)
32
+ multipart-post (1.1.5)
33
+ octokit (1.18.0)
34
+ addressable (~> 2.2)
35
+ faraday (~> 0.8)
36
+ faraday_middleware (~> 0.8)
37
+ hashie (~> 1.2)
38
+ multi_json (~> 1.3)
39
+ open4 (1.3.0)
40
+ rake (0.9.2.2)
41
+ xcodeproj (0.3.5)
42
+ activesupport (~> 3.2.6)
43
+
44
+ PLATFORMS
45
+ ruby
46
+
47
+ DEPENDENCIES
48
+ afmotion
@@ -0,0 +1,10 @@
1
+ # -*- coding: utf-8 -*-
2
+ $:.unshift("/Library/RubyMotion/lib")
3
+ require 'motion/project'
4
+ $:.unshift("../../lib")
5
+ require 'afmotion'
6
+
7
+ Motion::Project::App.setup do |app|
8
+ # Use `rake config' to see complete project settings.
9
+ app.name = 'AppDotNet'
10
+ end
@@ -0,0 +1,28 @@
1
+ class AppDelegate
2
+ attr_accessor :navigationController, :window
3
+ def application(application, didFinishLaunchingWithOptions:launchOptions)
4
+
5
+ AFMotion::Client.build_shared("https://alpha-api.app.net/") do
6
+ header "Accept", "application/json"
7
+
8
+ operation :json
9
+ end
10
+
11
+ url_cache = NSURLCache.alloc.initWithMemoryCapacity(4 * 1024 * 1024, diskCapacity:20 * 1024 * 1024,diskPath:nil)
12
+ NSURLCache.setSharedURLCache(url_cache)
13
+
14
+ AFNetworkActivityIndicatorManager.sharedManager.enabled = true
15
+
16
+ viewController = GlobalTimelineViewController.alloc.initWithStyle(UITableViewStylePlain)
17
+
18
+ self.navigationController = UINavigationController.alloc.initWithRootViewController(viewController)
19
+ self.navigationController.navigationBar.tintColor = UIColor.darkGrayColor
20
+
21
+ self.window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)
22
+ self.window.backgroundColor = UIColor.whiteColor
23
+ self.window.rootViewController = self.navigationController
24
+ self.window.makeKeyAndVisible
25
+
26
+ true
27
+ end
28
+ end
@@ -0,0 +1,84 @@
1
+ class GlobalTimelineViewController < UITableViewController
2
+ attr_accessor :posts
3
+ attr_accessor :activityIndicatorView
4
+
5
+ def reload
6
+ self.activityIndicatorView.startAnimating
7
+ self.navigationItem.rightBarButtonItem.enabled = true
8
+
9
+ Post.fetchGlobalTimelinePosts do |posts, error|
10
+ if (error)
11
+ UIAlertView.alloc.initWithTitle("Error",
12
+ message:error.localizedDescription,
13
+ delegate:nil,
14
+ cancelButtonTitle:nil,
15
+ otherButtonTitles:"OK", nil).show
16
+ else
17
+ self.posts = posts
18
+ end
19
+
20
+ self.activityIndicatorView.stopAnimating
21
+ self.navigationItem.rightBarButtonItem.enabled = true
22
+ end
23
+ end
24
+
25
+ def posts
26
+ @posts ||= []
27
+ end
28
+
29
+ def posts=(posts)
30
+ @posts = posts
31
+ self.tableView.reloadData
32
+ @posts
33
+ end
34
+
35
+ def loadView
36
+ super
37
+
38
+ self.activityIndicatorView = UIActivityIndicatorView.alloc.initWithActivityIndicatorStyle(UIActivityIndicatorViewStyleWhite)
39
+ self.activityIndicatorView.hidesWhenStopped = true
40
+ end
41
+
42
+ def viewDidLoad
43
+ super
44
+
45
+ self.title = "AFMotion"
46
+
47
+ self.navigationItem.leftBarButtonItem = UIBarButtonItem.alloc.initWithCustomView(self.activityIndicatorView)
48
+ self.navigationItem.rightBarButtonItem = UIBarButtonItem.alloc.initWithBarButtonSystemItem(UIBarButtonSystemItemRefresh, target:self, action: 'reload')
49
+
50
+ self.tableView.rowHeight = 70
51
+
52
+ self.reload
53
+ end
54
+
55
+ def viewDidUnload
56
+ self.activityIndicatorView = nil
57
+
58
+ super
59
+ end
60
+
61
+ def tableView(tableView, numberOfRowsInSection:section)
62
+ self.posts.count
63
+ end
64
+
65
+ def tableView(tableView, cellForRowAtIndexPath:indexPath)
66
+ @@identifier ||= "Cell"
67
+
68
+ cell = tableView.dequeueReusableCellWithIdentifier(@@identifier) || begin
69
+ PostTableViewCell.alloc.initWithStyle(UITableViewCellStyleSubtitle, reuseIdentifier:@@identifier)
70
+ end
71
+
72
+ cell.post = self.posts[indexPath.row]
73
+
74
+ cell
75
+ end
76
+
77
+ def tableView(tableView, heightForRowAtIndexPath:indexPath)
78
+ PostTableViewCell.heightForCellWithPost(self.posts[indexPath.row])
79
+ end
80
+
81
+ def tableView(tableView, didSelectRowAtIndexPath:indexPath)
82
+ tableView.deselectRowAtIndexPath(indexPath, animated:true)
83
+ end
84
+ end
@@ -0,0 +1,23 @@
1
+ class Post
2
+ attr_accessor :id, :text, :user
3
+
4
+ def initialize(attributes = {})
5
+ self.id = attributes["id"].to_i
6
+ self.text = attributes["text"].to_s
7
+ self.user = User.new(attributes["user"])
8
+ end
9
+
10
+ def self.fetchGlobalTimelinePosts(&callback)
11
+ AFMotion::Client.shared.get("stream/0/posts/stream/global") do |result|
12
+ if result.success?
13
+ posts = []
14
+ result.object["data"].each do |attributes|
15
+ posts << Post.new(attributes)
16
+ end
17
+ callback.call(posts, nil)
18
+ else
19
+ callback.call([], result.error)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,44 @@
1
+ class PostTableViewCell < UITableViewCell
2
+ attr_accessor :post
3
+
4
+ def initWithStyle(style, reuseIdentifier:reuseIdentifier)
5
+ super
6
+
7
+ self.textLabel.adjustsFontSizeToFitWidth = true
8
+ self.textLabel.textColor = UIColor.darkGrayColor
9
+ self.detailTextLabel.font = UIFont.systemFontOfSize 12
10
+ self.detailTextLabel.numberOfLines = 0
11
+ self.selectionStyle = UITableViewCellSelectionStyleGray
12
+
13
+ self
14
+ end
15
+
16
+ def post=(post)
17
+ @post = post
18
+
19
+ self.textLabel.text = self.post.user.username
20
+ self.detailTextLabel.text = self.post.text
21
+ self.imageView.url = {url: self.post.user.avatar_url.to_url, placeholder: UIImage.imageNamed("profile-image-placeholder")}
22
+
23
+ self.setNeedsLayout
24
+
25
+ @post
26
+ end
27
+
28
+ def self.heightForCellWithPost(post)
29
+ sizeToFit = post.text.sizeWithFont(UIFont.systemFontOfSize(12), constrainedToSize: CGSizeMake(220, Float::MAX), lineBreakMode:UILineBreakModeWordWrap)
30
+
31
+ return [70, sizeToFit.height + 45].max
32
+ end
33
+
34
+ def layoutSubviews
35
+ super
36
+
37
+ self.imageView.frame = CGRectMake(10, 10, 50, 50);
38
+ self.textLabel.frame = CGRectMake(70, 10, 240, 20);
39
+
40
+ detailTextLabelFrame = CGRectOffset(self.textLabel.frame, 0, 25);
41
+ detailTextLabelFrame.size.height = self.class.heightForCellWithPost(self.post) - 45
42
+ self.detailTextLabel.frame = detailTextLabelFrame
43
+ end
44
+ end
@@ -0,0 +1,9 @@
1
+ class User
2
+ attr_accessor :id, :username, :avatar_url
3
+
4
+ def initialize(attributes = {})
5
+ self.id = attributes["id"].to_i
6
+ self.username = attributes["username"]
7
+ self.avatar_url = attributes.valueForKeyPath("avatar_image.url")
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ describe "Application 'AppDotNet'" do
2
+ before do
3
+ @app = UIApplication.sharedApplication
4
+ end
5
+
6
+ it "has one window" do
7
+ @app.windows.size.should == 1
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+
2
+ PODS:
3
+ - AFNetworking (1.0.1)
4
+
5
+ DEPENDENCIES:
6
+ - AFNetworking
7
+
8
+ SPEC CHECKSUMS:
9
+ AFNetworking: 4c11f857c9a18d65f4257c90a1e74ac49f0ac422
10
+
11
+ COCOAPODS: 0.15.2