ki 0.3.3 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (170) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.rspec +1 -1
  4. data/.ruby-gemset +1 -0
  5. data/.ruby-version +1 -0
  6. data/Gemfile +2 -21
  7. data/Gemfile.lock +60 -100
  8. data/Guardfile +1 -1
  9. data/LICENSE.md +21 -0
  10. data/README.md +63 -0
  11. data/Rakefile +3 -45
  12. data/bin/ki +1 -1
  13. data/ki.gemspec +31 -137
  14. data/lib/ki.rb +21 -21
  15. data/lib/ki/api_error.rb +28 -0
  16. data/lib/ki/base_request.rb +34 -0
  17. data/lib/ki/helpers.rb +55 -0
  18. data/lib/ki/ki.rb +40 -0
  19. data/lib/ki/ki_cli.rb +46 -0
  20. data/lib/ki/ki_config.rb +20 -0
  21. data/lib/ki/middleware.rb +155 -0
  22. data/lib/ki/model.rb +70 -0
  23. data/lib/{modules → ki/modules}/callbacks.rb +0 -0
  24. data/lib/ki/modules/format_of.rb +10 -0
  25. data/lib/{modules → ki/modules}/model_helpers.rb +0 -12
  26. data/lib/ki/modules/public_file_helper.rb +13 -0
  27. data/lib/ki/modules/query_interface.rb +36 -0
  28. data/lib/{modules → ki/modules}/restrictions.rb +0 -30
  29. data/lib/ki/modules/view_helper.rb +13 -0
  30. data/lib/ki/orm.rb +65 -0
  31. data/lib/ki/version.rb +3 -0
  32. data/spec/examples/base/.ruby-gemset +1 -0
  33. data/spec/examples/base/.ruby-version +1 -0
  34. data/spec/examples/base/Gemfile +4 -0
  35. data/spec/examples/base/app.rb +1 -0
  36. data/{examples → spec/examples}/base/config.ru +0 -3
  37. data/spec/examples/base/config.yml +17 -0
  38. data/spec/examples/base/public/favicon.ico +0 -0
  39. data/spec/examples/base/public/javascripts/.gitkeep +0 -0
  40. data/spec/examples/base/public/stylesheets/.gitkeep +0 -0
  41. data/spec/examples/base/views/index.haml +6 -0
  42. data/spec/examples/couch-lock/.ruby-gemset +1 -0
  43. data/spec/examples/couch-lock/.ruby-version +1 -0
  44. data/spec/examples/couch-lock/Gemfile +4 -0
  45. data/spec/examples/couch-lock/Gemfile.lock +48 -0
  46. data/spec/examples/couch-lock/app.rb +42 -0
  47. data/spec/examples/couch-lock/config.ru +3 -0
  48. data/spec/examples/couch-lock/config.yml +17 -0
  49. data/spec/examples/couch-lock/install.sh +3 -0
  50. data/spec/examples/couch-lock/public/favicon.ico +0 -0
  51. data/spec/examples/couch-lock/public/javascripts/.gitkeep +0 -0
  52. data/spec/examples/couch-lock/public/stylesheets/.gitkeep +0 -0
  53. data/spec/examples/couch-lock/views/index.haml +18 -0
  54. data/spec/examples/json.northpole.ro/.ruby-gemset +1 -0
  55. data/spec/examples/json.northpole.ro/.ruby-version +1 -0
  56. data/spec/examples/json.northpole.ro/Capfile +25 -0
  57. data/spec/examples/json.northpole.ro/Gemfile +6 -0
  58. data/spec/examples/json.northpole.ro/Gemfile.lock +68 -0
  59. data/spec/examples/json.northpole.ro/app.rb +79 -0
  60. data/spec/examples/json.northpole.ro/client.rb +25 -0
  61. data/spec/examples/json.northpole.ro/config.ru +3 -0
  62. data/spec/examples/json.northpole.ro/config.yml +17 -0
  63. data/spec/examples/json.northpole.ro/config/deploy.rb +59 -0
  64. data/spec/examples/json.northpole.ro/config/deploy/production.rb +39 -0
  65. data/spec/examples/json.northpole.ro/foo.rb +10 -0
  66. data/spec/examples/json.northpole.ro/public/JNorthPole.jar +0 -0
  67. data/spec/examples/json.northpole.ro/public/favicon.ico +0 -0
  68. data/spec/examples/json.northpole.ro/public/font/FontAwesome.otf +0 -0
  69. data/spec/examples/json.northpole.ro/public/font/fontawesome-webfont.eot +0 -0
  70. data/spec/examples/json.northpole.ro/public/font/fontawesome-webfont.svg +284 -0
  71. data/spec/examples/json.northpole.ro/public/font/fontawesome-webfont.ttf +0 -0
  72. data/spec/examples/json.northpole.ro/public/font/fontawesome-webfont.woff +0 -0
  73. data/spec/examples/json.northpole.ro/public/images/bear.png +0 -0
  74. data/spec/examples/json.northpole.ro/public/images/bg.png +0 -0
  75. data/spec/examples/json.northpole.ro/public/images/cloud.png +0 -0
  76. data/spec/examples/json.northpole.ro/public/images/dotnet.png +0 -0
  77. data/spec/examples/json.northpole.ro/public/images/dotnet_small.png +0 -0
  78. data/spec/examples/json.northpole.ro/public/images/footer.png +0 -0
  79. data/spec/examples/json.northpole.ro/public/images/glyphicons-halflings-white.png +0 -0
  80. data/spec/examples/json.northpole.ro/public/images/glyphicons-halflings.png +0 -0
  81. data/spec/examples/json.northpole.ro/public/images/ice.png +0 -0
  82. data/spec/examples/json.northpole.ro/public/images/java.png +0 -0
  83. data/spec/examples/json.northpole.ro/public/images/java_small.png +0 -0
  84. data/spec/examples/json.northpole.ro/public/images/json.png +0 -0
  85. data/spec/examples/json.northpole.ro/public/images/json_small.png +0 -0
  86. data/spec/examples/json.northpole.ro/public/images/logo.png +0 -0
  87. data/spec/examples/json.northpole.ro/public/images/mobile.png +0 -0
  88. data/spec/examples/json.northpole.ro/public/images/php.png +0 -0
  89. data/spec/examples/json.northpole.ro/public/images/php_small.png +0 -0
  90. data/spec/examples/json.northpole.ro/public/images/python.png +0 -0
  91. data/spec/examples/json.northpole.ro/public/images/python_small.png +0 -0
  92. data/spec/examples/json.northpole.ro/public/images/ruby.png +0 -0
  93. data/spec/examples/json.northpole.ro/public/images/ruby_small.png +0 -0
  94. data/spec/examples/json.northpole.ro/public/images/shell.png +0 -0
  95. data/spec/examples/json.northpole.ro/public/images/shell_small.png +0 -0
  96. data/spec/examples/json.northpole.ro/public/javascripts/analytics.js +9 -0
  97. data/spec/examples/json.northpole.ro/public/javascripts/app.coffee +133 -0
  98. data/spec/examples/json.northpole.ro/public/javascripts/docs.min.js +16 -0
  99. data/spec/examples/json.northpole.ro/public/javascripts/jnorthpole.coffee +34 -0
  100. data/spec/examples/json.northpole.ro/public/javascripts/util.coffee +31 -0
  101. data/spec/examples/json.northpole.ro/public/stylesheets/app.sass +23 -0
  102. data/spec/examples/json.northpole.ro/public/stylesheets/application.sass +222 -0
  103. data/spec/examples/json.northpole.ro/public/stylesheets/cover.css +154 -0
  104. data/spec/examples/json.northpole.ro/views/curl.haml +19 -0
  105. data/spec/examples/json.northpole.ro/views/doc.haml +16 -0
  106. data/spec/examples/json.northpole.ro/views/doc_table.haml +45 -0
  107. data/spec/examples/json.northpole.ro/views/dotnet.haml +24 -0
  108. data/spec/examples/json.northpole.ro/views/examples.haml +28 -0
  109. data/spec/examples/json.northpole.ro/views/faq.haml +32 -0
  110. data/spec/examples/json.northpole.ro/views/foo.haml +7 -0
  111. data/spec/examples/json.northpole.ro/views/index.haml +4 -0
  112. data/spec/examples/json.northpole.ro/views/java.haml +0 -0
  113. data/spec/examples/json.northpole.ro/views/layout.haml +42 -0
  114. data/spec/examples/json.northpole.ro/views/php.haml +37 -0
  115. data/spec/examples/json.northpole.ro/views/playground.haml +38 -0
  116. data/spec/examples/json.northpole.ro/views/python.haml +17 -0
  117. data/spec/examples/json.northpole.ro/views/ruby.haml +12 -0
  118. data/spec/examples/json.northpole.ro/views/signup.haml +2 -0
  119. data/spec/examples/json.northpole.ro/views/thanks.haml +12 -0
  120. data/spec/functional_spec.rb +4 -0
  121. data/spec/lib/ki/base_request_spec.rb +88 -0
  122. data/spec/lib/ki/helpers_spec.rb +12 -0
  123. data/spec/lib/ki/ki_config_spec.rb +7 -0
  124. data/spec/lib/ki/middleware_spec.rb +11 -0
  125. data/spec/lib/ki/model_spec.rb +100 -0
  126. data/spec/lib/ki/modules/format_of_spec.rb +15 -0
  127. data/spec/lib/ki/orm_spec.rb +83 -0
  128. data/spec/spec_helper.rb +18 -5
  129. data/spec/util_spec.rb +7 -36
  130. metadata +269 -193
  131. data/.document +0 -5
  132. data/.rvmrc +0 -1
  133. data/LICENSE.txt +0 -20
  134. data/README.rdoc +0 -3
  135. data/VERSION +0 -1
  136. data/examples/base/Gemfile +0 -3
  137. data/examples/base/Gemfile.lock +0 -24
  138. data/examples/base/app.rb +0 -4
  139. data/examples/base/config.yml +0 -16
  140. data/gfx/colors.xcf +0 -0
  141. data/gfx/ki3.eps +0 -0
  142. data/gfx/logo.png +0 -0
  143. data/ki_wrap.rb +0 -35
  144. data/lib/conf.rb +0 -28
  145. data/lib/db.rb +0 -73
  146. data/lib/helpers.rb +0 -34
  147. data/lib/ki_cli.rb +0 -76
  148. data/lib/mockreq.rb +0 -45
  149. data/lib/model.rb +0 -110
  150. data/lib/modules/email.rb +0 -51
  151. data/lib/modules/query_interface.rb +0 -42
  152. data/lib/req.rb +0 -57
  153. data/lib/resp.rb +0 -70
  154. data/lib/static_file.rb +0 -68
  155. data/lib/util.rb +0 -114
  156. data/lib/views/404.haml +0 -1
  157. data/lib/views/406.haml +0 -1
  158. data/lib/views/index.haml +0 -7
  159. data/lib/views/layout.haml +0 -1
  160. data/spec/conf_spec.rb +0 -6
  161. data/spec/db_spec.rb +0 -93
  162. data/spec/integration/integration_spec.rb +0 -114
  163. data/spec/ki_spec.rb +0 -7
  164. data/spec/model_spec.rb +0 -91
  165. data/spec/modules/callbacks_spec.rb +0 -25
  166. data/spec/modules/email_spec.rb +0 -19
  167. data/spec/modules/query_interface_spec.rb +0 -93
  168. data/spec/modules/restrictions_spec.rb +0 -110
  169. data/spec/performance/performance.sh +0 -1
  170. data/spec/req_spec.rb +0 -29
@@ -0,0 +1,154 @@
1
+ /*
2
+ * Globals
3
+ */
4
+
5
+ /* Links */
6
+ a,
7
+ a:focus,
8
+ a:hover {
9
+ color: #fff;
10
+ }
11
+
12
+
13
+ /*
14
+ * Base structure
15
+ */
16
+
17
+ html,
18
+ body {
19
+ height: 100%;
20
+ background-color: #333;
21
+ }
22
+ body {
23
+ text-align: center;
24
+ text-shadow: 0 1px 3px rgba(0,0,0,.5);
25
+ box-shadow: inset 0 0 100px rgba(0,0,0,.5);
26
+ }
27
+
28
+ /* Extra markup and styles for table-esque vertical and horizontal centering */
29
+ .site-wrapper {
30
+ display: table;
31
+ width: 100%;
32
+ height: 100%; /* For at least Firefox */
33
+ min-height: 100%;
34
+ }
35
+ .site-wrapper-inner {
36
+ display: table-cell;
37
+ vertical-align: top;
38
+ }
39
+ .cover-container {
40
+ margin-right: auto;
41
+ margin-left: auto;
42
+ }
43
+
44
+ /* Padding for spacing */
45
+ .inner {
46
+ padding: 30px;
47
+ }
48
+
49
+
50
+ /*
51
+ * Header
52
+ */
53
+ .masthead-brand {
54
+ margin-top: 10px;
55
+ margin-bottom: 10px;
56
+ }
57
+
58
+ .masthead-brand > a:hover {
59
+ text-decoration: none;
60
+ }
61
+
62
+ .masthead-nav > li {
63
+ display: inline-block;
64
+ }
65
+ .masthead-nav > li + li {
66
+ margin-left: 20px;
67
+ }
68
+ .masthead-nav > li > a {
69
+ padding-right: 0;
70
+ padding-left: 0;
71
+ font-size: 16px;
72
+ font-weight: bold;
73
+ color: #fff; /* IE8 proofing */
74
+ color: rgba(255,255,255,.75);
75
+ border-bottom: 2px solid transparent;
76
+ }
77
+ .masthead-nav > li > a:hover,
78
+ .masthead-nav > li > a:focus {
79
+ background-color: transparent;
80
+ border-bottom-color: rgba(255,255,255,.25);
81
+ }
82
+ .masthead-nav > .active > a,
83
+ .masthead-nav > .active > a:hover,
84
+ .masthead-nav > .active > a:focus {
85
+ color: #fff;
86
+ border-bottom-color: #fff;
87
+ }
88
+
89
+ @media (min-width: 768px) {
90
+ .masthead-brand {
91
+ float: left;
92
+ }
93
+ .masthead-nav {
94
+ float: right;
95
+ }
96
+ }
97
+
98
+
99
+ /*
100
+ * Cover
101
+ */
102
+
103
+ .cover {
104
+ padding: 0 20px;
105
+ }
106
+ .cover .btn-lg {
107
+ padding: 10px 20px;
108
+ font-weight: bold;
109
+ }
110
+
111
+
112
+ /*
113
+ * Footer
114
+ */
115
+
116
+ .mastfoot {
117
+ color: #999; /* IE8 proofing */
118
+ color: rgba(255,255,255,.5);
119
+ }
120
+
121
+
122
+ /*
123
+ * Affix and center
124
+ */
125
+
126
+ @media (min-width: 768px) {
127
+ /* Pull out the header and footer */
128
+ .masthead {
129
+ position: fixed;
130
+ top: 0;
131
+ }
132
+ .mastfoot {
133
+ position: fixed;
134
+ bottom: 0;
135
+ }
136
+ /* Start the vertical centering */
137
+ .site-wrapper-inner {
138
+ vertical-align: middle;
139
+ }
140
+ /* Handle the widths */
141
+ .masthead,
142
+ .mastfoot,
143
+ .cover-container {
144
+ width: 100%; /* Must be percentage or pixels for horizontal alignment */
145
+ }
146
+ }
147
+
148
+ @media (min-width: 992px) {
149
+ .masthead,
150
+ .mastfoot,
151
+ .cover-container {
152
+ width: 700px;
153
+ }
154
+ }
@@ -0,0 +1,19 @@
1
+ %pre.code
2
+ = preserve do
3
+ :escaped
4
+ curl -X POST -d '{"api_key":"#{NP_GUEST_API_KEY}","secret":"#{NP_GUEST_SECRET}","storage":["milk","eggs","bacon"]}' '#{NP_URL}/storage.json'
5
+
6
+ %pre.code
7
+ = preserve do
8
+ :escaped
9
+ curl -X GET -d '{"api_key":"#{NP_GUEST_API_KEY}","secret":"#{NP_GUEST_SECRET}","storage":["milk","eggs","bacon"]}' '#{NP_URL}/storage.json'
10
+
11
+ %pre.code
12
+ = preserve do
13
+ :escaped
14
+ curl -X PUT -d '{"api_key":"#{NP_GUEST_API_KEY}","secret":"#{NP_GUEST_SECRET}","storage":["milk","eggs"],"id": "OBJECT_ID"}' '#{NP_URL}/storage.json'
15
+
16
+ %pre.code
17
+ = preserve do
18
+ :escaped
19
+ curl -X DELETE -d '{"api_key":"#{NP_GUEST_API_KEY}","secret":"#{NP_GUEST_SECRET}","storage":["milk","eggs"]}' '#{NP_URL}/storage.json'
@@ -0,0 +1,16 @@
1
+ %p Create
2
+ %pre.code
3
+ = preserve do
4
+ curl -X <b>POST</b> -d <b>'{"api_key":"#{NP_GUEST_API_KEY}","secret":"#{NP_GUEST_SECRET}","namespace":"shopping_list","storage":["milk","eggs","bacon"]}'</b> '#{NP_URL}/storage.json'
5
+ %br
6
+ %p Read
7
+ %p.code{:style => 'text-align: left; background-color: #f5f5f5; color: #333; padding: 9.5px; font-family: Menlo,Monaco,Consolas,"Courier New",monospace;'}
8
+ curl -X <b>GET</b> -d <b>'{"api_key":"#{NP_GUEST_API_KEY}","secret":"#{NP_GUEST_API_KEY}","id":"534569007047d56e11000002"}'</b> '#{NP_URL}/storage.json'
9
+ %br
10
+ %p Update
11
+ %pre.code.shell
12
+ curl -X <b>PUT</b> -d <b>'{"api_key":"#{NP_GUEST_API_KEY}","secret":"#{NP_GUEST_SECRET}","food":[],"id":"534569007047d56e11000002"}'</b> '#{NP_URL}/storage.json'
13
+ %br
14
+ %p Delete
15
+ %pre.code.shell
16
+ curl -X <b>DELETE</b> -d <b>'{"api_key":"#{NP_GUEST_API_KEY}","secret":"#{NP_GUEST_SECRET}","id":"534569007047d56e11000002"}'</b> '#{NP_URL}/storage.json'
@@ -0,0 +1,45 @@
1
+ %table.table.table-striped
2
+ %thead
3
+ %tr
4
+ %th Resource
5
+ %th HTTP Verb
6
+ %th Content-Type
7
+ %th Required Params
8
+ %th{'style' => 'width: 50%'} Description
9
+ %tbody
10
+ %tr
11
+ %td /user
12
+ %td GET, SEARCH
13
+ %td application/json
14
+ %td api_key, secret
15
+ %td Finds a user and any info related to the user json object
16
+ %tr
17
+ %td /user
18
+ %td POST
19
+ %td application/json
20
+ %td api_key, secret
21
+ %td Creates a new user
22
+ %tr
23
+ %td /storage
24
+ %td GET, SEARCH
25
+ %td application/json
26
+ %td api_key, secret
27
+ %td Finds stored json objects. Results are always returned in an array
28
+ %tr
29
+ %td /storage
30
+ %td POST
31
+ %td application/json
32
+ %td api_key, secret
33
+ %td Creates a new json object
34
+ %tr
35
+ %td /storage
36
+ %td PUT
37
+ %td application/json
38
+ %td api_key, secret, id
39
+ %td Updates a json object. All attributes of the json object are replaced with the json found in the body of the request
40
+ %tr
41
+ %td /storage
42
+ %td DELETE
43
+ %td application/json
44
+ %td api_key, secret
45
+ %td Deletes json objects
@@ -0,0 +1,24 @@
1
+ %p
2
+ Thank you Rares for contributing with the
3
+ %a{:href => 'https://github.com/northpole-api/NorthPoleNetWrapper/'} .net wrapper
4
+ \.
5
+ %p
6
+ If you would like to dive in code imediatley, I suggest you take a look at the
7
+ %a{:href => 'https://github.com/northpole-api/NorthPoleNetWrapper/blob/master/NorthPoleNetWrapperTest/StorageTestSuite.cs'} tests
8
+ \.
9
+ %pre.code.dotnet
10
+ = preserve do
11
+ :escaped
12
+ JObject jsonObject = new JObject();
13
+ jsonObject.Add("#{NP_API_KEY}", "#{NP_GUEST_API_KEY}");
14
+ jsonObject.Add("#{NP_SECRET}", "#{NP_GUEST_SECRET}");
15
+
16
+ JArray items = new JArray();
17
+ items.Add("milk");
18
+ items.Add("eggs");
19
+ items.Add("sugar");
20
+
21
+ jsonObject.Add("list", items);
22
+
23
+ Storage storage = new Storage(jsonObject);
24
+ JObject result = storage.Create();
@@ -0,0 +1,28 @@
1
+ = partial "doc_table"
2
+
3
+ %ul#myTab.nav.nav-tabs
4
+ %li.active
5
+ %a{"data-toggle" => "tab", href: "#curl"} curl
6
+ %li
7
+ %a{"data-toggle" => "tab", href: "#ruby"} ruby
8
+ %li
9
+ %a{"data-toggle" => "tab", href: "#python"} python
10
+ %li
11
+ %a{"data-toggle" => "tab", href: "#php"} php
12
+ %li
13
+ %a{"data-toggle" => "tab", href: "#java"} java
14
+ %li
15
+ %a{"data-toggle" => "tab", href: "#dotnet"} .net
16
+ .tab-content
17
+ #curl.tab-pane.fade.in.active
18
+ = partial 'curl'
19
+ #ruby.tab-pane.fade
20
+ = partial 'ruby'
21
+ #python.tab-pane.fade
22
+ = partial 'python'
23
+ #php.tab-pane.fade
24
+ = partial 'php'
25
+ #java.tab-pane.fade
26
+ = partial 'java'
27
+ #dotnet.tab-pane.fade
28
+ = partial 'dotnet'
@@ -0,0 +1,32 @@
1
+ %a{'href' => '#what'} What is json.northpole.ro?
2
+ %br
3
+ %a{'href' => '#how'} How do I use the API?
4
+ %br
5
+ %a{'href' => '#storage'} What can I store?
6
+ %br
7
+ %a{'href' => '#where'} Where do I sign up for my free account?
8
+ %br
9
+ %a{'href' => '#question'} I have a question
10
+ %br
11
+ %h3#what What is json.northpole.ro
12
+ %p
13
+ json.northpole.ro is a JSON cloud storage service. It is designed to be simple, fast and easy to use. It uses a documented oriented database in the backend to store your objects and provides you with a RESTful http layer to manage the data you store.
14
+ %h3#how How do I use the API?
15
+ %p
16
+ The API communicates through HTTP. #{NP_URL} has client libraries but you can write your own - if you want to. As long as your device is connected to the internet, you can use the API
17
+ %p
18
+ To get an idea of how the API works, you can
19
+ %a{:href => '/try'}
20
+ try it in your browser
21
+ %h3#storage What can I store?
22
+ %p
23
+ Any valid json object. The object can contain keys, arrays and hashes. By default, each object will get an id and some extra attributes - like created_at
24
+ %h3#where Where do I signup for my free account?
25
+ %p
26
+ %a{:href => "/signup"} Signing up
27
+ is quick and easy. You will get an email containing your api_key and secet.
28
+ %h3#question I have a question
29
+ %p
30
+ If it concerns the API, I suggest you use
31
+ %a{'href' => 'http://github.com/northpole-api/northpole.ro/issues'}
32
+ github issues
@@ -0,0 +1,7 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %title Hello
5
+ %body
6
+ %p hello world
7
+ = User.find_or_create({ NP_API_KEY => NP_GUEST_API_KEY, NP_SECRET => NP_GUEST_SECRET })
@@ -0,0 +1,4 @@
1
+ .jumbotron
2
+ %a{:href => '/'}
3
+ %img.bear.img-responsive{:src => '/images/bear.png', :alt => 'bear'}
4
+ %h3.text-center manage JSON objects through HTTP requests
@@ -0,0 +1,42 @@
1
+ !!!
2
+ %html{lang: "en"}
3
+ %head
4
+ %meta{charset: "utf-8"}/
5
+ %meta{content: "IE=edge", "http-equiv" => "X-UA-Compatible"}/
6
+ %meta{content: "width=device-width, initial-scale=1", name: "viewport"}/
7
+ %meta{content: "", name: "description"}/
8
+ %meta{content: "", name: "author"}/
9
+
10
+ %link{href: "/favicon.ico", rel: "shortcut icon"}/
11
+
12
+ %title json cloud storage
13
+
14
+ %link{href: "//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css", rel: "stylesheet"}/
15
+ = css "/stylesheets/app.css"
16
+ / HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries
17
+ /[if lt IE 9]
18
+ <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
19
+ <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
20
+ %body
21
+ .container
22
+ .navbar.navbar-default{role: "navigation"}
23
+ .container-fluid
24
+ .navbar-header
25
+ %button.navbar-toggle{"data-target" => ".navbar-collapse", "data-toggle" => "collapse", type: "button"}
26
+ %span.sr-only Toggle navigation
27
+ %span.icon-bar
28
+ %span.icon-bar
29
+ %span.icon-bar
30
+ %a.navbar-brand{href: "/"} {"json": ["cloud", "storage"]}
31
+ .navbar-collapse.collapse
32
+ %ul.nav.navbar-nav.navbar-right
33
+ %li.playground
34
+ %a{href: "/playground"} playground
35
+ %li.examples
36
+ %a{href: "/examples"} examples
37
+ = yield
38
+
39
+ = js "https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"
40
+ = js "//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"
41
+ = js "/javascripts/jnorthpole.js"
42
+ = js "/javascripts/app.js"
@@ -0,0 +1,37 @@
1
+ %pre.code.php
2
+ = preserve do
3
+ :escaped
4
+ <?php
5
+
6
+ $apiKey = '#{NP_GUEST_API_KEY}';
7
+ $secret = '#{NP_GUEST_SECRET}';
8
+ $url = '#{NP_URL}/storage.json';
9
+
10
+ $curlPost = curl_init();
11
+ curl_setopt($curlPost, CURLOPT_URL, $url);
12
+ curl_setopt($curlPost, CURLOPT_RETURNTRANSFER, 1);
13
+ curl_setopt($curlPost, CURLOPT_POSTFIELDS, '{"#{NP_API_KEY}":"' . $apiKey . '","#{NP_SECRET}":"' . $secret . '","food":"pizza"}');
14
+ $response = curl_exec($curlPost);
15
+
16
+ $resource = json_decode($response);
17
+ $resourceId = $resource->{'id'};
18
+
19
+ $curlGet = curl_init();
20
+ curl_setopt($curlGet, CURLOPT_URL, $url . '?#{NP_API_KEY}=' . $apiKey . '&#{NP_SECRET}='. $secret .'&id=' . $resourceId);
21
+ curl_setopt($curlGet, CURLOPT_RETURNTRANSFER, 1);
22
+ $response = curl_exec($curlGet);
23
+
24
+ $curlPut = curl_init();
25
+ curl_setopt($curlPut, CURLOPT_URL, $url . '?#{NP_API_KEY}=' . $apiKey . '&#{NP_SECRET}='. $secret .'&id=' . $resourceId . '&food=salad');
26
+ curl_setopt($curlPut, CURLOPT_RETURNTRANSFER, 1);
27
+ curl_setopt($curlPut, CURLOPT_CUSTOMREQUEST, "PUT");
28
+ $response = curl_exec($curlPut);
29
+ var_dump($response);
30
+
31
+ $curlDelete = curl_init();
32
+ curl_setopt($curlDelete, CURLOPT_URL, $url . '?#{NP_API_KEY}=' . $apiKey . '&#{NP_SECRET}=' . $secret . '&id=' . $resourceId);
33
+ curl_setopt($curlDelete, CURLOPT_RETURNTRANSFER, 1);
34
+ curl_setopt($curlDelete, CURLOPT_CUSTOMREQUEST, "DELETE");
35
+ $response = curl_exec($curlDelete);
36
+
37
+ ?>
@@ -0,0 +1,38 @@
1
+ .row
2
+ .col-md-6
3
+ %textarea#playground{:style => "width: 100%; height: 300px; color: #333; padding: 15px; font-family: Menlo,Monaco,Consolas,'Courier New',monospace; background-color: #f5f5f5"}
4
+ = preserve do
5
+ {
6
+ \ "api_key":"guest",
7
+ \ "secret":"guest"
8
+ }
9
+ .text-center
10
+ .btn-group
11
+ %button.btn.btn-default.dropdown-toggle{"data-toggle" => "dropdown", type: "button"}
12
+ %span#resource Storage
13
+ %span.caret
14
+ %ul.dropdown-menu{role: "menu"}
15
+ %li
16
+ %a{href: "#"} Storage
17
+ %li
18
+ %a{href: "#"} User
19
+ .btn-group
20
+ %button.btn.btn-default.dropdown-toggle{"data-toggle" => "dropdown", type: "button"}
21
+ %span#verb GET
22
+ %span.caret
23
+ %ul.dropdown-menu{role: "menu"}
24
+ %li
25
+ %a{href: "#"} GET
26
+ %li
27
+ %a{href: "#"} POST
28
+ %li
29
+ %a{href: "#"} PUT
30
+ %li
31
+ %a{href: "#"} DELETE
32
+ .btn-group
33
+ %button#npAction.btn.btn-default Execute Request
34
+ .col-md-6{:style => 'height: 100%'}
35
+ %pre#parsedJson{:style => 'text-align: left;'}
36
+ {}
37
+ .row
38
+ .col-md-12