sweetie 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +4 -2
- data/Gemfile +1 -0
- data/lib/sweetie.rb +0 -0
- data/lib/sweetie/bitbucket.rb +149 -85
- data/lib/sweetie/conversion.rb +0 -1
- data/lib/sweetie/version.rb +1 -1
- data/spec/source/bitbucket/user_repositories.json +149 -131
- data/spec/source/bitbucket/user_repositories_expectation.txt +1 -0
- data/spec/sweetie_bitbucket_spec.rb +9 -16
- data/sweetie.gemspec +9 -10
- metadata +7 -25
- data/.rspec +0 -3
- data/spec/source/bitbucket/user_changeset.json +0 -30
- data/spec/source/bitbucket/user_changeset_expectation.txt +0 -1
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/lib/sweetie.rb
CHANGED
File without changes
|
data/lib/sweetie/bitbucket.rb
CHANGED
@@ -3,6 +3,7 @@ module Sweetie
|
|
3
3
|
|
4
4
|
class Bitbucket
|
5
5
|
require 'json'
|
6
|
+
|
6
7
|
@@config = "_config.yml"
|
7
8
|
|
8
9
|
class << self
|
@@ -18,126 +19,189 @@ module Sweetie
|
|
18
19
|
@@config = config
|
19
20
|
end
|
20
21
|
|
21
|
-
# Wrapper to start all the other methods
|
22
|
-
#
|
22
|
+
# Public: Wrapper to start all the other methods
|
23
|
+
#
|
24
|
+
# user - The String of the bitbucket user
|
25
|
+
#
|
26
|
+
# Example:
|
27
|
+
#
|
28
|
+
# bitbucket('wikimatze')
|
29
|
+
#
|
30
|
+
# Returns nothing but write the changes in the _config.yml file
|
23
31
|
def bitbucket(user)
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
repositories_names = read_repositories(json_repositories)
|
29
|
-
|
30
|
-
# get the hash with repository-name and last changes
|
31
|
-
repositories_changes_hash = repositories_changes(user, repositories_names)
|
32
|
+
json_repositories = get_repositories(user)
|
33
|
+
repositories_change_hashs = get_repositories_changes(json_repositories)
|
34
|
+
write_repository_changes(repositories_change_hashs)
|
35
|
+
end
|
32
36
|
|
33
|
-
|
34
|
-
|
37
|
+
# Public: Fire up curl request to bitbucket
|
38
|
+
#
|
39
|
+
# user - The String of the bitbucket user
|
40
|
+
#
|
41
|
+
# Example:
|
42
|
+
#
|
43
|
+
# bitbucket('wikimatze')
|
44
|
+
#
|
45
|
+
# # =>
|
46
|
+
# {
|
47
|
+
# "repositories": [
|
48
|
+
# {
|
49
|
+
# "scm": "git",
|
50
|
+
# "has_wiki": false,
|
51
|
+
# "last_updated": "2012-07-01 07:03:08",
|
52
|
+
# "creator": null,
|
53
|
+
# "created_on": "2012-07-01 07:03:08",
|
54
|
+
# "owner": "wikimatze",
|
55
|
+
# "logo": null,
|
56
|
+
# "email_mailinglist": "",
|
57
|
+
# "is_mq": false,
|
58
|
+
# "size": 580,
|
59
|
+
# "read_only": false,
|
60
|
+
# "fork_of": null,
|
61
|
+
# "mq_of": null,
|
62
|
+
# "followers_count": 1,
|
63
|
+
# "state": "available",
|
64
|
+
# "utc_created_on": "2012-07-01 05:03:08+00:00",
|
65
|
+
# "website": "",
|
66
|
+
# "description": "",
|
67
|
+
# "has_issues": false,
|
68
|
+
# "is_fork": false,
|
69
|
+
# "slug": "knoppix-6-01",
|
70
|
+
# "is_private": false,
|
71
|
+
# "name": "knoppix-6-01",
|
72
|
+
# "language": "",
|
73
|
+
# "utc_last_updated": "2012-07-01 05:03:08+00:00",
|
74
|
+
# "email_writers": true,
|
75
|
+
# "no_public_forks": false,
|
76
|
+
# "resource_uri": "/1.0/repositories/wikimatze/knoppix-6-01"
|
77
|
+
# },
|
78
|
+
# ... other repositories
|
79
|
+
# }
|
80
|
+
# ],
|
81
|
+
# "user": {
|
82
|
+
# "username": "wikimatze",
|
83
|
+
# "first_name": "Matthias",
|
84
|
+
# "last_name": "Guenther",
|
85
|
+
# "avatar": "https://secure.gravatar.com/avatar/208673d619b63131cbfd7205366ad16e?d=identicon&s=32",
|
86
|
+
# "resource_uri": "/1.0/users/wikimatze"
|
87
|
+
# }
|
88
|
+
# }
|
89
|
+
#
|
90
|
+
# Returns a json representation the specified user
|
91
|
+
def get_repositories(user)
|
92
|
+
`curl -s https://api.bitbucket.org/1.0/users/#{user}/`
|
35
93
|
end
|
36
94
|
|
37
|
-
#
|
38
|
-
#
|
39
|
-
#
|
40
|
-
|
95
|
+
# Public: Grab for each repository the recent update
|
96
|
+
#
|
97
|
+
# json_repositories: A json object of the bitbucket API response
|
98
|
+
#
|
99
|
+
# Example:
|
100
|
+
#
|
101
|
+
# get_repositories_changes(wikimatze_json)
|
102
|
+
# # => {"pmwiki-headlineimage-recipe"=>"2011-10-29", "pmwiki-linkicons-recipe"=>"2011-10-29"}
|
103
|
+
#
|
104
|
+
# Returns a hash of the form {repository_name => last_updated}
|
105
|
+
def get_repositories_changes(json_repositories)
|
41
106
|
repository_hash = parse_json(json_repositories)
|
42
|
-
|
107
|
+
repositories_changsets = {}
|
43
108
|
|
44
|
-
repository_hash["repositories"].each do |
|
45
|
-
|
109
|
+
repository_hash["repositories"].each do |repository|
|
110
|
+
repository_name = repository['name']
|
111
|
+
repository_last_updated = parse_timestamp(repository['last_updated'])
|
112
|
+
repositories_changsets.merge!({repository_name => repository_last_updated})
|
46
113
|
end
|
47
114
|
|
48
|
-
|
49
|
-
end
|
50
|
-
|
51
|
-
# Get the last changes for each repository and the name
|
52
|
-
# @param [user] a valid bitbucket user
|
53
|
-
# @param [repositories] array with names of all repositories of a user
|
54
|
-
# @return hash with all the repositories of the user and the last changes
|
55
|
-
def repositories_changes(user, repositories)
|
56
|
-
repositories_lastmodifications = {}
|
57
|
-
repositories.each do |repository|
|
58
|
-
changeset = repository_changeset(user, repository)
|
59
|
-
repositories_lastmodifications.merge(repository_last_modification(repository, changeset))
|
60
|
-
end
|
61
|
-
|
62
|
-
repositories_lastmodifications
|
63
|
-
end
|
64
|
-
|
65
|
-
# Get the last modification of a repository
|
66
|
-
# @param [repository_name] a valid repository name
|
67
|
-
# @param [repository_json] json representation of the repository
|
68
|
-
def repository_last_modification(repository_name, repository_json)
|
69
|
-
changeset_parsed = parse_json(repository_json)
|
70
|
-
timestamp = changeset_parsed["changesets"].last["timestamp"]
|
71
|
-
|
72
|
-
# create the hash
|
73
|
-
{repository_name => parse_timestamp(timestamp)}
|
74
|
-
end
|
75
|
-
|
76
|
-
# Parse JSON file to format be read by ruby
|
77
|
-
def parse_json(file)
|
78
|
-
JSON.parse file
|
79
|
-
end
|
80
|
-
|
81
|
-
# Get the changeset of a repository
|
82
|
-
# @param [user] a valid bitbucket user
|
83
|
-
# @param [repository] a repository of a user
|
84
|
-
# @return information about the repository in json
|
85
|
-
def repository_changeset(user, repository)
|
86
|
-
`curl -s https://api.bitbucket.org/1.0/repositories/#{user}/#{repository}/changesets/`
|
115
|
+
repositories_changsets
|
87
116
|
end
|
88
117
|
|
89
|
-
#
|
90
|
-
#
|
91
|
-
#
|
92
|
-
|
93
|
-
|
118
|
+
# Public: Wrapper for calling the json_parsing
|
119
|
+
#
|
120
|
+
# file: A String in JSON format
|
121
|
+
#
|
122
|
+
# Example:
|
123
|
+
#
|
124
|
+
# json = {
|
125
|
+
# "user": {
|
126
|
+
# "username": "wikimatze",
|
127
|
+
# "first_name": "Matthias",
|
128
|
+
# "last_name": "Guenther",
|
129
|
+
# "resource_uri": "/1.0/users/wikimatze"
|
130
|
+
# }
|
131
|
+
# }
|
132
|
+
|
133
|
+
# parse_json(json)
|
134
|
+
# # => {"user"=>{"username"=>"wikimatze", "first_name"=>"Matthias", "last_name"=>"Guenther", "resource_uri"=>"/1.0/users/wikimatze"}}
|
135
|
+
#
|
136
|
+
# Returns Parse JSON file to format be read by ruby
|
137
|
+
def parse_json(json)
|
138
|
+
JSON.parse(json)
|
94
139
|
end
|
95
140
|
|
96
|
-
# Parse timestamp
|
97
|
-
#
|
98
|
-
#
|
141
|
+
# Public: Parse a timestamp in a wanted format
|
142
|
+
#
|
143
|
+
# timestamp - A string in the form 2011-04-20 11:31:39
|
144
|
+
#
|
145
|
+
# Example:
|
146
|
+
#
|
147
|
+
# parse_timestamp("2011-04-20 11:31:39")
|
148
|
+
# # => 2011-04-20
|
149
|
+
#
|
150
|
+
# Returns a string in the format "yyyy-mm-dd"
|
99
151
|
def parse_timestamp(timestamp)
|
100
152
|
regex = Regexp.new(/(\d+)-(\d+)-(\d+)/)
|
101
153
|
regex.match(timestamp)[0]
|
102
154
|
end
|
103
155
|
|
104
|
-
#
|
105
|
-
#
|
156
|
+
# Public: Parse a hash and write its key/value pairs in a file
|
157
|
+
#
|
158
|
+
# repositories - A hash in the form {<name> => <last_updated}
|
159
|
+
#
|
160
|
+
# Example:
|
161
|
+
#
|
162
|
+
# write_repository_changes({"svn" => "2011-10-26", "pmwiki" => "2011-10-26"})
|
163
|
+
# # => svn: 2011-10-26\npmwiki: 2011-10-26
|
164
|
+
#
|
165
|
+
# Returns nothing but writes the information in the specified _config.yml file
|
106
166
|
def write_repository_changes(repositories)
|
107
|
-
repositories.each do |
|
167
|
+
repositories.each do |name, last_updated|
|
108
168
|
file = File.open(@@config)
|
109
169
|
text = ""
|
110
170
|
match = false
|
111
171
|
while line = file.gets
|
112
|
-
if line.match(/#{
|
172
|
+
if line.match(/#{name}/)
|
113
173
|
match = true
|
114
174
|
# create string and replace this line with the new changes
|
115
|
-
text <<
|
175
|
+
text << entry_text(name, last_updated) + "\n"
|
116
176
|
else
|
117
177
|
text << line
|
118
178
|
end
|
119
179
|
end
|
120
180
|
|
121
|
-
# append the
|
122
|
-
text <<
|
181
|
+
# append the name if it is not in there
|
182
|
+
text << entry_text(name, last_updated) unless match
|
123
183
|
|
124
184
|
file.close
|
125
|
-
|
126
185
|
write_config(@@config, text)
|
127
186
|
end
|
128
187
|
end
|
129
188
|
|
130
|
-
# Create a string representation of a repository entry
|
131
|
-
#
|
132
|
-
#
|
133
|
-
#
|
134
|
-
|
135
|
-
|
189
|
+
# Public: Create a string representation of a repository entry
|
190
|
+
#
|
191
|
+
# name - A string containing the name of the repository
|
192
|
+
# last_updated - A string containing the date of the last change of the repo
|
193
|
+
#
|
194
|
+
# Example:
|
195
|
+
#
|
196
|
+
# entry_text({"pmwiki" => "2011-10-26"}
|
197
|
+
# # => "pmwiki: 2011-10-26"
|
198
|
+
#
|
199
|
+
# Return a string in the form "<name>: <last_updated>"
|
200
|
+
def entry_text(name, last_updated)
|
201
|
+
"#{name}: #{last_updated}"
|
136
202
|
end
|
137
203
|
|
138
|
-
end
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
end
|
204
|
+
end # self
|
205
|
+
end # Bitbucket
|
206
|
+
end # Sweetie
|
143
207
|
|
data/lib/sweetie/conversion.rb
CHANGED
data/lib/sweetie/version.rb
CHANGED
@@ -1,143 +1,161 @@
|
|
1
1
|
{
|
2
2
|
"repositories": [
|
3
3
|
{
|
4
|
-
"
|
5
|
-
"
|
6
|
-
"
|
7
|
-
"
|
8
|
-
"
|
9
|
-
"
|
10
|
-
"
|
11
|
-
"
|
12
|
-
"
|
13
|
-
|
4
|
+
"scm": "git",
|
5
|
+
"has_wiki": false,
|
6
|
+
"last_updated": "2011-10-29 15:27:33",
|
7
|
+
"creator": null,
|
8
|
+
"created_on": "2011-10-07 23:18:03",
|
9
|
+
"owner": "wikimatze",
|
10
|
+
"logo": null,
|
11
|
+
"email_mailinglist": "",
|
12
|
+
"is_mq": false,
|
13
|
+
"size": 51772,
|
14
|
+
"read_only": false,
|
15
|
+
"fork_of": null,
|
16
|
+
"mq_of": null,
|
17
|
+
"followers_count": 1,
|
18
|
+
"state": "available",
|
19
|
+
"utc_created_on": "2011-10-07 21:18:03+00:00",
|
20
|
+
"website": "",
|
21
|
+
"description": "",
|
22
|
+
"has_issues": false,
|
23
|
+
"is_fork": false,
|
24
|
+
"slug": "pmwiki-headlineimage-recipe",
|
25
|
+
"is_private": false,
|
26
|
+
"name": "pmwiki-headlineimage-recipe",
|
27
|
+
"language": "",
|
28
|
+
"utc_last_updated": "2011-10-29 13:27:33+00:00",
|
29
|
+
"email_writers": true,
|
30
|
+
"no_public_forks": false,
|
31
|
+
"resource_uri": "/1.0/repositories/wikimatze/pmwiki-headlineimage-recipe"
|
32
|
+
},
|
14
33
|
{
|
15
|
-
"
|
16
|
-
"
|
17
|
-
"
|
18
|
-
"
|
19
|
-
"
|
20
|
-
"
|
21
|
-
"
|
22
|
-
"
|
23
|
-
"
|
24
|
-
|
34
|
+
"scm": "git",
|
35
|
+
"has_wiki": false,
|
36
|
+
"last_updated": "2011-10-29 15:46:59",
|
37
|
+
"creator": null,
|
38
|
+
"created_on": "2011-10-07 23:01:39",
|
39
|
+
"owner": "wikimatze",
|
40
|
+
"logo": null,
|
41
|
+
"email_mailinglist": "",
|
42
|
+
"is_mq": false,
|
43
|
+
"size": 25278,
|
44
|
+
"read_only": false,
|
45
|
+
"fork_of": null,
|
46
|
+
"mq_of": null,
|
47
|
+
"followers_count": 1,
|
48
|
+
"state": "available",
|
49
|
+
"utc_created_on": "2011-10-07 21:01:39+00:00",
|
50
|
+
"website": "",
|
51
|
+
"description": "",
|
52
|
+
"has_issues": false,
|
53
|
+
"is_fork": false,
|
54
|
+
"slug": "pmwiki-linkicons-recipe",
|
55
|
+
"is_private": false,
|
56
|
+
"name": "pmwiki-linkicons-recipe",
|
57
|
+
"language": "",
|
58
|
+
"utc_last_updated": "2011-10-29 13:46:59+00:00",
|
59
|
+
"email_writers": true,
|
60
|
+
"no_public_forks": false,
|
61
|
+
"resource_uri": "/1.0/repositories/wikimatze/pmwiki-linkicons-recipe"
|
62
|
+
},
|
25
63
|
{
|
26
|
-
"
|
27
|
-
"
|
28
|
-
"
|
29
|
-
"
|
30
|
-
"
|
31
|
-
"
|
32
|
-
"
|
33
|
-
"
|
34
|
-
"
|
35
|
-
|
64
|
+
"scm": "git",
|
65
|
+
"has_wiki": false,
|
66
|
+
"last_updated": "2011-10-29 15:34:33",
|
67
|
+
"creator": null,
|
68
|
+
"created_on": "2011-10-07 23:15:50",
|
69
|
+
"owner": "wikimatze",
|
70
|
+
"logo": null,
|
71
|
+
"email_mailinglist": "",
|
72
|
+
"is_mq": false,
|
73
|
+
"size": 19055,
|
74
|
+
"read_only": false,
|
75
|
+
"fork_of": null,
|
76
|
+
"mq_of": null,
|
77
|
+
"followers_count": 1,
|
78
|
+
"state": "available",
|
79
|
+
"utc_created_on": "2011-10-07 21:15:50+00:00",
|
80
|
+
"website": "",
|
81
|
+
"description": "",
|
82
|
+
"has_issues": false,
|
83
|
+
"is_fork": false,
|
84
|
+
"slug": "pmwiki-dropcaps-recipe",
|
85
|
+
"is_private": false,
|
86
|
+
"name": "pmwiki-dropcaps-recipe",
|
87
|
+
"language": "",
|
88
|
+
"utc_last_updated": "2011-10-29 13:34:33+00:00",
|
89
|
+
"email_writers": true,
|
90
|
+
"no_public_forks": false,
|
91
|
+
"resource_uri": "/1.0/repositories/wikimatze/pmwiki-dropcaps-recipe"
|
92
|
+
},
|
36
93
|
{
|
37
|
-
"
|
38
|
-
"
|
39
|
-
"
|
40
|
-
"
|
41
|
-
"
|
42
|
-
"
|
43
|
-
"
|
44
|
-
"
|
45
|
-
"
|
46
|
-
|
94
|
+
"scm": "git",
|
95
|
+
"has_wiki": false,
|
96
|
+
"last_updated": "2011-10-29 16:02:00",
|
97
|
+
"creator": null,
|
98
|
+
"created_on": "2011-10-07 23:37:43",
|
99
|
+
"owner": "wikimatze",
|
100
|
+
"logo": null,
|
101
|
+
"email_mailinglist": "",
|
102
|
+
"is_mq": false,
|
103
|
+
"size": 115972,
|
104
|
+
"read_only": false,
|
105
|
+
"fork_of": null,
|
106
|
+
"mq_of": null,
|
107
|
+
"followers_count": 1,
|
108
|
+
"state": "available",
|
109
|
+
"utc_created_on": "2011-10-07 21:37:43+00:00",
|
110
|
+
"website": "",
|
111
|
+
"description": "",
|
112
|
+
"has_issues": false,
|
113
|
+
"is_fork": false,
|
114
|
+
"slug": "pmwiki-syntaxlove-recipe",
|
115
|
+
"is_private": false,
|
116
|
+
"name": "pmwiki-syntaxlove-recipe",
|
117
|
+
"language": "",
|
118
|
+
"utc_last_updated": "2011-10-29 14:02:00+00:00",
|
119
|
+
"email_writers": true,
|
120
|
+
"no_public_forks": false,
|
121
|
+
"resource_uri": "/1.0/repositories/wikimatze/pmwiki-syntaxlove-recipe"
|
122
|
+
},
|
47
123
|
{
|
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
|
-
"resource_uri": "/api/1.0/repositories/wikimatze/git",
|
77
|
-
"slug": "git",
|
78
|
-
"description": ""
|
79
|
-
},
|
80
|
-
{
|
81
|
-
"website": "",
|
82
|
-
"scm": "git",
|
83
|
-
"name": "pmwiki-twitter-recipe",
|
84
|
-
"followers_count": 1,
|
85
|
-
"owner": "wikimatze",
|
86
|
-
"logo": null,
|
87
|
-
"resource_uri": "/api/1.0/repositories/wikimatze/pmwiki-twitter-recipe",
|
88
|
-
"slug": "pmwiki-twitter-recipe",
|
89
|
-
"description": ""
|
90
|
-
},
|
91
|
-
{
|
92
|
-
"website": "",
|
93
|
-
"scm": "git",
|
94
|
-
"name": "pmwiki-syntaxlove-recipe",
|
95
|
-
"followers_count": 1,
|
96
|
-
"owner": "wikimatze",
|
97
|
-
"logo": null,
|
98
|
-
"resource_uri": "/api/1.0/repositories/wikimatze/pmwiki-syntaxlove-recipe",
|
99
|
-
"slug": "pmwiki-syntaxlove-recipe",
|
100
|
-
"description": ""
|
101
|
-
},
|
102
|
-
{
|
103
|
-
"website": "",
|
104
|
-
"scm": "git",
|
105
|
-
"name": "pmwiki-linkicons-recipe",
|
106
|
-
"followers_count": 1,
|
107
|
-
"owner": "wikimatze",
|
108
|
-
"logo": null,
|
109
|
-
"resource_uri": "/api/1.0/repositories/wikimatze/pmwiki-linkicons-recipe",
|
110
|
-
"slug": "pmwiki-linkicons-recipe",
|
111
|
-
"description": ""
|
112
|
-
},
|
113
|
-
{
|
114
|
-
"website": "",
|
115
|
-
"scm": "git",
|
116
|
-
"name": "pmwiki-headlineimage-recipe",
|
117
|
-
"followers_count": 1,
|
118
|
-
"owner": "wikimatze",
|
119
|
-
"logo": null,
|
120
|
-
"resource_uri": "/api/1.0/repositories/wikimatze/pmwiki-headlineimage-recipe",
|
121
|
-
"slug": "pmwiki-headlineimage-recipe",
|
122
|
-
"description": ""
|
123
|
-
},
|
124
|
-
{
|
125
|
-
"website": "",
|
126
|
-
"scm": "git",
|
127
|
-
"name": "pmwiki-dropcaps-recipe",
|
128
|
-
"followers_count": 1,
|
129
|
-
"owner": "wikimatze",
|
130
|
-
"logo": null,
|
131
|
-
"resource_uri": "/api/1.0/repositories/wikimatze/pmwiki-dropcaps-recipe",
|
132
|
-
"slug": "pmwiki-dropcaps-recipe",
|
133
|
-
"description": ""
|
124
|
+
"scm": "git",
|
125
|
+
"has_wiki": false,
|
126
|
+
"last_updated": "2011-10-29 16:19:34",
|
127
|
+
"creator": null,
|
128
|
+
"created_on": "2011-10-07 23:38:22",
|
129
|
+
"owner": "wikimatze",
|
130
|
+
"logo": null,
|
131
|
+
"email_mailinglist": "",
|
132
|
+
"is_mq": false,
|
133
|
+
"size": 45329,
|
134
|
+
"read_only": false,
|
135
|
+
"fork_of": null,
|
136
|
+
"mq_of": null,
|
137
|
+
"followers_count": 1,
|
138
|
+
"state": "available",
|
139
|
+
"utc_created_on": "2011-10-07 21:38:22+00:00",
|
140
|
+
"website": "",
|
141
|
+
"description": "",
|
142
|
+
"has_issues": false,
|
143
|
+
"is_fork": false,
|
144
|
+
"slug": "pmwiki-twitter-recipe",
|
145
|
+
"is_private": false,
|
146
|
+
"name": "pmwiki-twitter-recipe",
|
147
|
+
"language": "",
|
148
|
+
"utc_last_updated": "2011-10-29 14:19:34+00:00",
|
149
|
+
"email_writers": true,
|
150
|
+
"no_public_forks": false,
|
151
|
+
"resource_uri": "/1.0/repositories/wikimatze/pmwiki-twitter-recipe"
|
134
152
|
}
|
135
|
-
],
|
153
|
+
],
|
136
154
|
"user": {
|
137
|
-
"username": "wikimatze",
|
138
|
-
"first_name": "Matthias",
|
139
|
-
"last_name": "
|
140
|
-
"avatar": "https://secure.gravatar.com/avatar/208673d619b63131cbfd7205366ad16e?d=identicon&s=32",
|
155
|
+
"username": "wikimatze",
|
156
|
+
"first_name": "Matthias",
|
157
|
+
"last_name": "Guenther",
|
158
|
+
"avatar": "https://secure.gravatar.com/avatar/208673d619b63131cbfd7205366ad16e?d=identicon&s=32",
|
141
159
|
"resource_uri": "/1.0/users/wikimatze"
|
142
160
|
}
|
143
161
|
}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"repositories"=>[{"scm"=>"git", "has_wiki"=>false, "last_updated"=>"2011-10-29 15:27:33", "creator"=>nil, "created_on"=>"2011-10-07 23:18:03", "owner"=>"wikimatze", "logo"=>nil, "email_mailinglist"=>"", "is_mq"=>false, "size"=>51772, "read_only"=>false, "fork_of"=>nil, "mq_of"=>nil, "followers_count"=>1, "state"=>"available", "utc_created_on"=>"2011-10-07 21:18:03+00:00", "website"=>"", "description"=>"", "has_issues"=>false, "is_fork"=>false, "slug"=>"pmwiki-headlineimage-recipe", "is_private"=>false, "name"=>"pmwiki-headlineimage-recipe", "language"=>"", "utc_last_updated"=>"2011-10-29 13:27:33+00:00", "email_writers"=>true, "no_public_forks"=>false, "resource_uri"=>"/1.0/repositories/wikimatze/pmwiki-headlineimage-recipe"}, {"scm"=>"git", "has_wiki"=>false, "last_updated"=>"2011-10-29 15:46:59", "creator"=>nil, "created_on"=>"2011-10-07 23:01:39", "owner"=>"wikimatze", "logo"=>nil, "email_mailinglist"=>"", "is_mq"=>false, "size"=>25278, "read_only"=>false, "fork_of"=>nil, "mq_of"=>nil, "followers_count"=>1, "state"=>"available", "utc_created_on"=>"2011-10-07 21:01:39+00:00", "website"=>"", "description"=>"", "has_issues"=>false, "is_fork"=>false, "slug"=>"pmwiki-linkicons-recipe", "is_private"=>false, "name"=>"pmwiki-linkicons-recipe", "language"=>"", "utc_last_updated"=>"2011-10-29 13:46:59+00:00", "email_writers"=>true, "no_public_forks"=>false, "resource_uri"=>"/1.0/repositories/wikimatze/pmwiki-linkicons-recipe"}, {"scm"=>"git", "has_wiki"=>false, "last_updated"=>"2011-10-29 15:34:33", "creator"=>nil, "created_on"=>"2011-10-07 23:15:50", "owner"=>"wikimatze", "logo"=>nil, "email_mailinglist"=>"", "is_mq"=>false, "size"=>19055, "read_only"=>false, "fork_of"=>nil, "mq_of"=>nil, "followers_count"=>1, "state"=>"available", "utc_created_on"=>"2011-10-07 21:15:50+00:00", "website"=>"", "description"=>"", "has_issues"=>false, "is_fork"=>false, "slug"=>"pmwiki-dropcaps-recipe", "is_private"=>false, "name"=>"pmwiki-dropcaps-recipe", "language"=>"", "utc_last_updated"=>"2011-10-29 13:34:33+00:00", "email_writers"=>true, "no_public_forks"=>false, "resource_uri"=>"/1.0/repositories/wikimatze/pmwiki-dropcaps-recipe"}, {"scm"=>"git", "has_wiki"=>false, "last_updated"=>"2011-10-29 16:02:00", "creator"=>nil, "created_on"=>"2011-10-07 23:37:43", "owner"=>"wikimatze", "logo"=>nil, "email_mailinglist"=>"", "is_mq"=>false, "size"=>115972, "read_only"=>false, "fork_of"=>nil, "mq_of"=>nil, "followers_count"=>1, "state"=>"available", "utc_created_on"=>"2011-10-07 21:37:43+00:00", "website"=>"", "description"=>"", "has_issues"=>false, "is_fork"=>false, "slug"=>"pmwiki-syntaxlove-recipe", "is_private"=>false, "name"=>"pmwiki-syntaxlove-recipe", "language"=>"", "utc_last_updated"=>"2011-10-29 14:02:00+00:00", "email_writers"=>true, "no_public_forks"=>false, "resource_uri"=>"/1.0/repositories/wikimatze/pmwiki-syntaxlove-recipe"}, {"scm"=>"git", "has_wiki"=>false, "last_updated"=>"2011-10-29 16:19:34", "creator"=>nil, "created_on"=>"2011-10-07 23:38:22", "owner"=>"wikimatze", "logo"=>nil, "email_mailinglist"=>"", "is_mq"=>false, "size"=>45329, "read_only"=>false, "fork_of"=>nil, "mq_of"=>nil, "followers_count"=>1, "state"=>"available", "utc_created_on"=>"2011-10-07 21:38:22+00:00", "website"=>"", "description"=>"", "has_issues"=>false, "is_fork"=>false, "slug"=>"pmwiki-twitter-recipe", "is_private"=>false, "name"=>"pmwiki-twitter-recipe", "language"=>"", "utc_last_updated"=>"2011-10-29 14:19:34+00:00", "email_writers"=>true, "no_public_forks"=>false, "resource_uri"=>"/1.0/repositories/wikimatze/pmwiki-twitter-recipe"}], "user"=>{"username"=>"wikimatze", "first_name"=>"Matthias", "last_name"=>"Guenther", "avatar"=>"https://secure.gravatar.com/avatar/208673d619b63131cbfd7205366ad16e?d=identicon&s=32", "resource_uri"=>"/1.0/users/wikimatze"}}
|
@@ -4,31 +4,29 @@ describe Sweetie::Bitbucket do
|
|
4
4
|
|
5
5
|
let(:current_dir) {File.dirname(__FILE__)}
|
6
6
|
let(:user_repositories) {File.join(current_dir, 'source', 'bitbucket', 'user_repositories.json')}
|
7
|
-
let(:
|
7
|
+
let(:user_repositories_expectation) {File.join(current_dir, 'source', 'bitbucket', 'user_repositories_expectation.txt')}
|
8
8
|
let(:site_dir) {File.join(current_dir, 'source', 'site')}
|
9
|
-
let(:user_changeset_expectation) {File.join(current_dir, 'source', 'bitbucket', 'user_changeset_expectation.txt')}
|
10
9
|
let(:config) {File.join(current_dir, "source", "_config.yml")}
|
11
10
|
let(:svn_hash) {{"svn" => "2011-10-16"}}
|
12
11
|
|
13
12
|
let(:bitbucket) {Sweetie::Bitbucket}
|
14
13
|
|
15
14
|
it "should parse a json file" do
|
16
|
-
changeset = File.open(
|
15
|
+
changeset = File.open(user_repositories).read
|
17
16
|
# gsub replace trailing newline at the end of the file
|
18
|
-
changeset_expectation = File.open(
|
17
|
+
changeset_expectation = File.open(user_repositories_expectation).read.gsub("\n", "")
|
19
18
|
changeset = bitbucket.parse_json(changeset).to_s
|
20
19
|
changeset.should == changeset_expectation
|
21
20
|
end
|
22
21
|
|
23
22
|
it "should get the names of the repositories" do
|
24
23
|
json_repositories = File.open(user_repositories).read
|
25
|
-
names = %w(
|
26
|
-
git pmwiki-twitter-recipe
|
27
|
-
pmwiki-syntaxlove-recipe
|
24
|
+
names = %w(pmwiki-headlineimage-recipe
|
28
25
|
pmwiki-linkicons-recipe
|
29
|
-
pmwiki-
|
30
|
-
pmwiki-
|
31
|
-
|
26
|
+
pmwiki-dropcaps-recipe
|
27
|
+
pmwiki-syntaxlove-recipe
|
28
|
+
pmwiki-twitter-recipe)
|
29
|
+
bitbucket.get_repositories_changes(json_repositories).keys.should == names
|
32
30
|
end
|
33
31
|
|
34
32
|
it "should parse a timestamp" do
|
@@ -38,12 +36,7 @@ describe Sweetie::Bitbucket do
|
|
38
36
|
|
39
37
|
it "should create a string representation of a repository" do
|
40
38
|
repository = {"pmwiki" => "2011-10-26"}
|
41
|
-
bitbucket.
|
42
|
-
end
|
43
|
-
|
44
|
-
it "should create last modification of each repository" do
|
45
|
-
repo = File.open(user_changeset).read
|
46
|
-
bitbucket.repository_last_modification("svn", repo).should == svn_hash
|
39
|
+
bitbucket.entry_text(repository.keys.first, repository.values.first).should == "pmwiki: 2011-10-26"
|
47
40
|
end
|
48
41
|
|
49
42
|
it "should repositories changes write_repository_changes" do
|
data/sweetie.gemspec
CHANGED
@@ -5,30 +5,29 @@ require 'sweetie/version'
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = 'sweetie'
|
7
7
|
s.version = Sweetie::VERSION
|
8
|
-
s.date = '2012-
|
8
|
+
s.date = '2012-07-15'
|
9
9
|
s.authors = ['Matthias Guenther']
|
10
10
|
s.email = 'matthias.guenther@wikimatze.de'
|
11
11
|
s.homepage = 'https://github.com/matthias-guenther/sweetie'
|
12
12
|
|
13
13
|
s.summary = %q{Count links, images, number of html pages, and last-build time of a
|
14
|
-
jekyll project
|
14
|
+
jekyll project. In addition it can get last updates of all bitbucket
|
15
|
+
repositories of a user.}
|
16
|
+
|
15
17
|
s.description = %q{Sweetie counts the links, images, number of html pages, and last-build
|
16
18
|
time of a jekyll project. In addition it can get the last changes of all
|
17
|
-
bitbuckets repositories of a
|
18
|
-
|
19
|
-
# the files included in the gem
|
19
|
+
bitbuckets repositories of a user.}
|
20
20
|
s.files = `git ls-files`.split("\n")
|
21
21
|
# files that are used for the gem (the line supports TestUnit, MiniTest, RSpec, and Cucumber
|
22
22
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
23
|
-
s.require_paths = [
|
23
|
+
s.require_paths = ['lib']
|
24
24
|
|
25
|
-
s.extra_rdoc_files = [
|
25
|
+
s.extra_rdoc_files = ['README.md']
|
26
26
|
|
27
|
-
s.add_runtime_dependency 'nokogiri',
|
28
|
-
s.add_runtime_dependency 'json',
|
27
|
+
s.add_runtime_dependency 'nokogiri', '>= 1.4.6'
|
28
|
+
s.add_runtime_dependency 'json', '>= 1.6.1'
|
29
29
|
s.add_development_dependency 'rake'
|
30
30
|
s.add_development_dependency 'rspec'
|
31
|
-
s.add_development_dependency 'yard'
|
32
31
|
|
33
32
|
end
|
34
33
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sweetie
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-07-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -75,26 +75,9 @@ dependencies:
|
|
75
75
|
- - ! '>='
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '0'
|
78
|
-
- !ruby/object:Gem::Dependency
|
79
|
-
name: yard
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
|
-
requirements:
|
83
|
-
- - ! '>='
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
version: '0'
|
86
|
-
type: :development
|
87
|
-
prerelease: false
|
88
|
-
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
|
-
requirements:
|
91
|
-
- - ! '>='
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: '0'
|
94
78
|
description: ! "Sweetie counts the links, images, number of html pages, and last-build\n
|
95
79
|
\ time of a jekyll project. In addition it can get the
|
96
|
-
last changes of all\n bitbuckets repositories of a
|
97
|
-
user."
|
80
|
+
last changes of all\n bitbuckets repositories of a user."
|
98
81
|
email: matthias.guenther@wikimatze.de
|
99
82
|
executables: []
|
100
83
|
extensions: []
|
@@ -102,7 +85,6 @@ extra_rdoc_files:
|
|
102
85
|
- README.md
|
103
86
|
files:
|
104
87
|
- .gitignore
|
105
|
-
- .rspec
|
106
88
|
- .travis.yml
|
107
89
|
- Gemfile
|
108
90
|
- README.md
|
@@ -113,9 +95,8 @@ files:
|
|
113
95
|
- lib/sweetie/helper.rb
|
114
96
|
- lib/sweetie/version.rb
|
115
97
|
- spec/source/_config.yml
|
116
|
-
- spec/source/bitbucket/user_changeset.json
|
117
|
-
- spec/source/bitbucket/user_changeset_expectation.txt
|
118
98
|
- spec/source/bitbucket/user_repositories.json
|
99
|
+
- spec/source/bitbucket/user_repositories_expectation.txt
|
119
100
|
- spec/source/site/404.html
|
120
101
|
- spec/source/site/about.html
|
121
102
|
- spec/source/site/archiv.html
|
@@ -180,10 +161,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
180
161
|
version: '0'
|
181
162
|
requirements: []
|
182
163
|
rubyforge_project:
|
183
|
-
rubygems_version: 1.8.
|
164
|
+
rubygems_version: 1.8.24
|
184
165
|
signing_key:
|
185
166
|
specification_version: 3
|
186
167
|
summary: Count links, images, number of html pages, and last-build time of a jekyll
|
187
|
-
project
|
168
|
+
project. In addition it can get last updates of all bitbucket repositories of a
|
169
|
+
user.
|
188
170
|
test_files: []
|
189
171
|
has_rdoc:
|
data/.rspec
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"count": 1,
|
3
|
-
"start": null,
|
4
|
-
"limit": 15,
|
5
|
-
"changesets": [
|
6
|
-
{
|
7
|
-
"node": "0b1b929fac46",
|
8
|
-
"files": [
|
9
|
-
{
|
10
|
-
"type": "added",
|
11
|
-
"file": "svn.pdf"
|
12
|
-
},
|
13
|
-
{
|
14
|
-
"type": "added",
|
15
|
-
"file": "svn.tex"
|
16
|
-
}
|
17
|
-
],
|
18
|
-
"raw_author": "Matthias Guenther <matthias.guenther@wikimatze.de>",
|
19
|
-
"utctimestamp": "2011-10-16 19:24:53+00:00",
|
20
|
-
"author": "wikimatze",
|
21
|
-
"timestamp": "2011-10-16 21:24:53",
|
22
|
-
"raw_node": "0b1b929fac46825ab9a445ccc307d078df8ea342",
|
23
|
-
"parents": [],
|
24
|
-
"branch": "master",
|
25
|
-
"message": "initial commit\n",
|
26
|
-
"revision": null,
|
27
|
-
"size": -1
|
28
|
-
}
|
29
|
-
]
|
30
|
-
}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"count"=>1, "start"=>nil, "limit"=>15, "changesets"=>[{"node"=>"0b1b929fac46", "files"=>[{"type"=>"added", "file"=>"svn.pdf"}, {"type"=>"added", "file"=>"svn.tex"}], "raw_author"=>"Matthias Guenther <matthias.guenther@wikimatze.de>", "utctimestamp"=>"2011-10-16 19:24:53+00:00", "author"=>"wikimatze", "timestamp"=>"2011-10-16 21:24:53", "raw_node"=>"0b1b929fac46825ab9a445ccc307d078df8ea342", "parents"=>[], "branch"=>"master", "message"=>"initial commit\n", "revision"=>nil, "size"=>-1}]}
|