qiita 1.0.3 → 1.0.4
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/CHANGELOG.md +3 -0
- data/lib/qiita/resource_based_methods.rb +7 -0
- data/lib/qiita/version.rb +1 -1
- data/script/generate-objc +152 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0f6eca33e49eb4d3e65ade2c99c3660212fd1d94
|
4
|
+
data.tar.gz: a01378d0df082e39e694fa2e485f4050ca7ac2e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 861e2f18dffa7617c16b70517dd0dc9c132f93abb4622f5d0855ef8201e6eeeb233642a1ba0400d7877c0b576a13f291a702e43800ffe0dbb35b4621ed57a7f3
|
7
|
+
data.tar.gz: ce4024eec88826e162ec5eb5030aac264e8174fddb2418244a6e6d383084d2b0d529f71216e85a7a41588efbc63f1d0fd6137b8289f09cbc183a421731117374
|
data/CHANGELOG.md
CHANGED
@@ -210,6 +210,13 @@ module Qiita
|
|
210
210
|
get("/api/v2/users/#{user_id}/following_tags", params, headers)
|
211
211
|
end
|
212
212
|
|
213
|
+
# ### Qiita::Client#list_teams(params = nil, headers = nil)
|
214
|
+
# 現在のリクエストで認証されているユーザが所属している全てのチームを返します。
|
215
|
+
#
|
216
|
+
def list_teams(params = nil, headers = nil)
|
217
|
+
get("/api/v2/teams", params, headers)
|
218
|
+
end
|
219
|
+
|
213
220
|
# ### Qiita::Client#list_templates(params = nil, headers = nil)
|
214
221
|
# 全てのテンプレート一覧を返します。
|
215
222
|
#
|
data/lib/qiita/version.rb
CHANGED
@@ -0,0 +1,152 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# # script/generate-objc
|
3
|
+
# Generates a subclass of AFHTTPSessionManager from given JSON Schema.
|
4
|
+
#
|
5
|
+
# ## Usage
|
6
|
+
# Run this script with a path to JSON Schema of Qiita API v2, available only for staff.
|
7
|
+
#
|
8
|
+
# ```sh
|
9
|
+
# bundle exec ./script/generate-objc [-h|-m] INCQiitaSessionManager /path/to/json/schema > INCQiitaSessionManager.[h|m]
|
10
|
+
# ```
|
11
|
+
#
|
12
|
+
require "active_support/core_ext/object/try"
|
13
|
+
require "active_support/core_ext/string/indent"
|
14
|
+
require "active_support/core_ext/string/inflections"
|
15
|
+
require "active_support/core_ext/string/strip"
|
16
|
+
require "json_schema"
|
17
|
+
require "optparse"
|
18
|
+
require "ostruct"
|
19
|
+
require "yaml"
|
20
|
+
|
21
|
+
# View object class to generate String representation of each method.
|
22
|
+
method_class = Class.new(OpenStruct) do
|
23
|
+
def to_s
|
24
|
+
if header?
|
25
|
+
<<-EOS.strip_heredoc
|
26
|
+
/// #{description}
|
27
|
+
#{return_type_marker}#{wrapped_method_signature(return_type_marker.length).indent(8).strip};
|
28
|
+
EOS
|
29
|
+
else
|
30
|
+
<<-EOS.strip_heredoc
|
31
|
+
#{return_type_marker}#{wrapped_method_signature(return_type_marker.length).indent(8).strip} {
|
32
|
+
NSString *path = [NSString stringWithFormat:#{path_format_and_arguments}];
|
33
|
+
return [self #{request_method}:path parameters:parameters success:success failure:failure];
|
34
|
+
}
|
35
|
+
EOS
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def return_type_marker
|
42
|
+
"- (NSURLSessionDataTask *)"
|
43
|
+
end
|
44
|
+
|
45
|
+
def wrapped_method_signature(offset)
|
46
|
+
components = method_signature.split(/ (?=[0-9A-Za-z_]+:)/)
|
47
|
+
colon_position = offset + components[0].index(":")
|
48
|
+
aligned = [components[0]]
|
49
|
+
components[1..-1].each do |component|
|
50
|
+
aligned << " " * (colon_position - component.index(":")) + component
|
51
|
+
end
|
52
|
+
aligned.join("\n")
|
53
|
+
end
|
54
|
+
|
55
|
+
def method_signature
|
56
|
+
camelize_objcish(method_name) + with_arguments
|
57
|
+
end
|
58
|
+
|
59
|
+
def with_arguments
|
60
|
+
arguments = required_argument_names.map {|name|
|
61
|
+
camelize_objcish(name) + ":(NSString *)" + camelize_objcish(name)
|
62
|
+
}
|
63
|
+
arguments << "parameters:(NSDictionary *)parameters"
|
64
|
+
arguments << "success:(void (^)(NSURLSessionDataTask *task, id responseObject))success"
|
65
|
+
arguments << "failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure"
|
66
|
+
"With" + upcase_first(arguments.join(" "))
|
67
|
+
end
|
68
|
+
|
69
|
+
def camelize_objcish(name)
|
70
|
+
name = name.split(/_/).map {|component|
|
71
|
+
case component
|
72
|
+
when "id" then "i_d" # to camelize into "ID"
|
73
|
+
else component
|
74
|
+
end
|
75
|
+
}.join("_")
|
76
|
+
name =~ /^i_d/ ? name.camelize : name.camelize(:lower)
|
77
|
+
end
|
78
|
+
|
79
|
+
def upcase_first(s)
|
80
|
+
s[0].upcase + s[1..-1]
|
81
|
+
end
|
82
|
+
|
83
|
+
def path_format_and_arguments
|
84
|
+
placeholder_pattern = %r<{\(.*/([^/]+)\)}>
|
85
|
+
format = %Q<@"#{href.gsub(placeholder_pattern, '%@')}">
|
86
|
+
keys = href.scan(placeholder_pattern).flatten
|
87
|
+
arguments = keys.map {|key| camelize_objcish(key) }
|
88
|
+
([format] + arguments).join(", ")
|
89
|
+
end
|
90
|
+
|
91
|
+
def path
|
92
|
+
?" + href.gsub(%r<{\(.*/([^/]+)\)}>, '#{\1}') + ?"
|
93
|
+
end
|
94
|
+
|
95
|
+
def header?
|
96
|
+
_generates_header
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
opt = OptionParser.new
|
101
|
+
opt.on("-h CLASS") {|c| $class_name = c; $generates_header = true }
|
102
|
+
opt.on("-m CLASS") {|c| $class_name = c; $generates_header = false }
|
103
|
+
opt.parse!(ARGV)
|
104
|
+
unless $class_name
|
105
|
+
abort "Neither -h nor -m given. Aborted."
|
106
|
+
end
|
107
|
+
path_to_json_schema = ARGV[0]
|
108
|
+
hash = YAML.load_file(path_to_json_schema)
|
109
|
+
schema = JsonSchema.parse!(hash).tap(&:expand_references!)
|
110
|
+
links = schema.properties.values.map(&:links).flatten
|
111
|
+
methods = links.map do |link|
|
112
|
+
method_class.new(
|
113
|
+
_generates_header: $generates_header,
|
114
|
+
available_parameters: (link.schema.try(:properties) || {}).map do |name, property|
|
115
|
+
{
|
116
|
+
description: property.description,
|
117
|
+
name: name,
|
118
|
+
type: property.type,
|
119
|
+
}
|
120
|
+
end,
|
121
|
+
description: link.description,
|
122
|
+
href: link.href,
|
123
|
+
method_name: link.title,
|
124
|
+
request_method: link.method.upcase,
|
125
|
+
required_argument_names: link.href.scan(%r<{\(.*/([^/]+)\)}>).flatten,
|
126
|
+
)
|
127
|
+
end
|
128
|
+
if $generates_header
|
129
|
+
puts <<-EOS.strip_heredoc
|
130
|
+
#import <AFNetworking/AFHTTPSessionManager.h>
|
131
|
+
|
132
|
+
@interface #{$class_name} : AFHTTPSessionManager
|
133
|
+
|
134
|
+
#{methods.join("\n").indent(4).strip}
|
135
|
+
|
136
|
+
@end
|
137
|
+
EOS
|
138
|
+
else
|
139
|
+
puts <<-EOS.strip_heredoc
|
140
|
+
#import "#{$class_name}.h"
|
141
|
+
|
142
|
+
@implementation #{$class_name}
|
143
|
+
|
144
|
+
+ (instancetype)manager {
|
145
|
+
return [[[self class] alloc] initWithBaseURL:[NSURL URLWithString:@"https://qiita.com"]];
|
146
|
+
}
|
147
|
+
|
148
|
+
#{methods.join("\n").indent(4).strip}
|
149
|
+
|
150
|
+
@end
|
151
|
+
EOS
|
152
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qiita
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryo Nakamura
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -225,6 +225,7 @@ files:
|
|
225
225
|
- lib/qiita/version.rb
|
226
226
|
- qiita.gemspec
|
227
227
|
- script/generate
|
228
|
+
- script/generate-objc
|
228
229
|
- spec/qiita/client_spec.rb
|
229
230
|
- spec/spec_helper.rb
|
230
231
|
homepage: https://github.com/increments/qiita-rb
|