sigimera 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -16,3 +16,5 @@ tmp
16
16
  .yardoc
17
17
  _yardoc
18
18
  doc/
19
+
20
+ rspec.xml
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --format RspecJunitFormatter
3
+ --out rspec.xml
data/Gemfile.lock CHANGED
@@ -1,26 +1,31 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sigimera (0.0.1)
4
+ sigimera (0.1.0)
5
5
  json
6
6
  nokogiri
7
7
 
8
8
  GEM
9
9
  remote: http://rubygems.org/
10
10
  specs:
11
+ builder (3.1.4)
11
12
  diff-lcs (1.1.3)
12
13
  json (1.7.5)
13
- multi_json (1.3.7)
14
+ multi_json (1.4.0)
14
15
  nokogiri (1.5.5)
15
16
  rake (10.0.2)
16
17
  rspec (2.12.0)
17
18
  rspec-core (~> 2.12.0)
18
19
  rspec-expectations (~> 2.12.0)
19
20
  rspec-mocks (~> 2.12.0)
20
- rspec-core (2.12.0)
21
+ rspec-core (2.12.1)
21
22
  rspec-expectations (2.12.0)
22
23
  diff-lcs (~> 1.1.3)
23
24
  rspec-mocks (2.12.0)
25
+ rspec_junit_formatter (0.1.4)
26
+ builder
27
+ rspec (~> 2.0)
28
+ rspec-core (!= 2.12.0)
24
29
  simplecov (0.7.1)
25
30
  multi_json (~> 1.0)
26
31
  simplecov-html (~> 0.7.1)
@@ -33,6 +38,7 @@ PLATFORMS
33
38
  DEPENDENCIES
34
39
  rake
35
40
  rspec
41
+ rspec_junit_formatter
36
42
  sigimera!
37
43
  simplecov
38
44
  spork
data/README.md CHANGED
@@ -3,6 +3,8 @@ Sigimera Client
3
3
 
4
4
  [![Build
5
5
  Status](https://secure.travis-ci.org/Sigimera/sigimera-ruby-client.png?branch=master)](https://travis-ci.org/Sigimera/sigimera-ruby-client) [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/Sigimera/sigimera-ruby-client)
6
+ [![Dependency
7
+ Status](https://gemnasium.com/Sigimera/sigimera-ruby-client.png)](https://gemnasium.com/Sigimera/sigimera-ruby-client)
6
8
 
7
9
  The following ruby gem encapsulates access to the Sigimera REST API under
8
10
  http://api.sigimera.org. It includes the needed SSL certificate for the
data/Rakefile CHANGED
@@ -10,7 +10,7 @@ Bundler::GemHelper.install_tasks
10
10
  require 'rspec/core/rake_task'
11
11
  RSpec::Core::RakeTask.new(:spec) do |t|
12
12
  t.fail_on_error = true
13
- t.rspec_opts = "--colour --format documentation -b"
13
+ t.rspec_opts = "--colour --format documentation --format RspecJunitFormatter --out rspec.xml"
14
14
  end
15
15
 
16
16
  task :default => :spec
data/bin/sigimera ADDED
@@ -0,0 +1,90 @@
1
+ #!/usr/bin/env ruby
2
+ #####
3
+ # Copyright (c) 2012 by Sigimera
4
+ # All rights reserved.
5
+ # See MIT-LICENSE for permissions.
6
+ #####
7
+ require 'rubygems'
8
+ require 'optparse'
9
+
10
+ begin
11
+ require 'sigimera'
12
+ rescue LoadError
13
+ STDERR.puts "Install the missing library:\n\t \e[0;36m$\e[m \e[0;32mgem install sigimera\e[m"
14
+ exit
15
+ end
16
+
17
+ begin
18
+ file = File.join(Dir.home, ".sigimera")
19
+ Dir.mkdir(File.join(Dir.home, ".sigimera"), 0700) unless File.directory? file
20
+ credentials = JSON.parse(File.read(File.join(file, "credentials.json")))
21
+ @auth_token = credentials['auth_token']
22
+ rescue => e
23
+ STDERR.puts "Please execute:"
24
+ STDERR.puts "\t$ curl -X POST -u youremail@example.org https://api.sigimera.org/v1/tokens.json > ~/.sigimera/credentials.json"
25
+ exit 1
26
+ end
27
+
28
+
29
+ def make_api_call(options)
30
+ if @auth_token
31
+ @client = Sigimera::Client.new @auth_token
32
+ yield
33
+ else
34
+ STDERR.puts "Please execute:"
35
+ STDERR.puts "\t$ curl -X POST -u youremail@example.org https://api.sigimera.org/v1/tokens.json > ~/.sigimera/credentials.json"
36
+ end
37
+ end
38
+
39
+ options = {}
40
+
41
+ opt_parser = OptionParser.new do |opt|
42
+ opt.banner = "Usage: sigimera COMMAND [OPTIONS] [ID]"
43
+ opt.separator ""
44
+ opt.separator "Commands"
45
+ opt.separator " get_latest_crises: retrieves the latest 10 crises"
46
+ opt.separator " get_crisis: retrieves a single crisis with [ID]"
47
+ opt.separator ""
48
+ opt.separator "Options"
49
+
50
+ opt.on("-h","--help","help") do
51
+ STDOUT.puts opt_parser
52
+ exit
53
+ end
54
+ end
55
+
56
+ opt_parser.parse!
57
+
58
+ case ARGV[0]
59
+ when "get_latest_crises"
60
+ make_api_call(options) do
61
+ crises = @client.get_latest_crises :output => "short"
62
+ crises.each do |crisis|
63
+ STDOUT.puts "--------"
64
+ STDOUT.puts "ID : #{crisis['_id']}"
65
+ STDOUT.puts "Title : #{crisis['dc_title']}"
66
+ STDOUT.puts "Date : #{crisis['dc_date']}"
67
+ STDOUT.puts ""
68
+ end
69
+ end
70
+ when "get_crisis"
71
+ if ARGV[1]
72
+ make_api_call(options) do
73
+ crisis = @client.get_crisis ARGV[1]
74
+ if crisis
75
+ STDOUT.puts "============"
76
+ STDOUT.puts "ID | #{crisis['_id']}"
77
+ STDOUT.puts "Title | #{crisis['dc_title']}"
78
+ STDOUT.puts "Date | #{crisis['dc_date']}"
79
+ STDOUT.puts "Description| #{crisis['dc_description']}"
80
+ STDOUT.puts ""
81
+ else
82
+ STDOUT.puts "No crisis could be found with the ID '#{ARGV[1]}'"
83
+ end
84
+ end
85
+ else
86
+ STDERR.puts "Please specify the identifier of the crisis."
87
+ end
88
+ else
89
+ STDOUT.puts opt_parser
90
+ end
data/lib/sigimera.rb CHANGED
@@ -10,10 +10,12 @@ module Sigimera
10
10
  # The Sigimera REST API Host
11
11
  API_HOST = "https://api.sigimera.org"
12
12
 
13
- # The used SSL certificate for the HTTPS encrpytion
13
+ # The used SSL certificate for the HTTPS connection
14
14
  CACERT_FILE = File.expand_path("../../certs/cacert.crt", __FILE__)
15
15
  end
16
16
 
17
17
  require "sigimera/version"
18
18
  require "sigimera/http_helper"
19
19
  require "sigimera/client"
20
+
21
+ require "sigimera/data/crisis"
@@ -30,7 +30,7 @@ module Sigimera
30
30
  def self.get_public_crises
31
31
  client = Sigimera::Client.new
32
32
  response = client.get("/public/crises.json")
33
- JSON.parse response.body if response
33
+ Client.json_array_to_crisis_array(JSON.parse(response.body)) if response
34
34
  end
35
35
 
36
36
  # This method returns the latest 10 crises as RSS feed,
@@ -66,7 +66,7 @@ module Sigimera
66
66
  endpoint = "/v1/crises.json?auth_token=#{@auth_token}"
67
67
  endpoint += "&#{URI.encode_www_form params}" if params
68
68
  response = self.get(endpoint.to_s)
69
- JSON.parse response.body if response and response.body
69
+ Client.json_array_to_crisis_array(JSON.parse(response.body)) if response and response.body
70
70
  end
71
71
 
72
72
  # This method returns a single crisis.
@@ -78,7 +78,7 @@ module Sigimera
78
78
  endpoint = "/v1/crises/#{identifier}.json?auth_token=#{@auth_token}"
79
79
  endpoint += "&#{URI.encode_www_form params}" if params
80
80
  response = self.get(endpoint)
81
- JSON.parse response.body if response and response.body
81
+ Sigimera::Crisis.new JSON.parse response.body if response and response.body
82
82
  end
83
83
 
84
84
  # This method returns statistic information about the crises.
@@ -101,5 +101,13 @@ module Sigimera
101
101
  # The authentication token that is used for the API calls.
102
102
  attr_reader :auth_token
103
103
 
104
+ # Converts a JSON array into an array of #{Crisis} objects
105
+ def self.json_array_to_crisis_array json_array
106
+ crises_array = Array.new
107
+ json_array.each do |crisis|
108
+ crises_array << Sigimera::Crisis.new(crisis)
109
+ end
110
+ end
111
+
104
112
  end
105
113
  end
@@ -0,0 +1,30 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # This library encapsulates the Sigimera REST API access. For more information
4
+ # about the API see http://api.sigimera.org
5
+ #
6
+ # Author:: Alex Oberhauser (mailto:alex.oberhauser@sigimera.org)
7
+ # Copyright:: Copyright (c) 2012 Sigimera
8
+ # License:: MIT
9
+ module Sigimera
10
+ # This class encapsulates the access to crisis JSON objects.
11
+ # Additional it simulates the access syntax of JSON objects.
12
+ # For future use this class can implemente different type of checks.
13
+ class Crisis
14
+
15
+ def initialize json_object
16
+ @crisis = json_object
17
+ end
18
+
19
+ # Simulates the same access as for JSON objects
20
+ def [](key)
21
+ @crisis[key.to_s] if @crisis and @crisis.class.eql?(Hash)
22
+ end
23
+
24
+ # Provides for each json key an instance method
25
+ def method_missing(method)
26
+ @crisis[method.to_s] if @crisis and @crisis.class.eql?(Hash) and @crisis.key?(method.to_s)
27
+ end
28
+
29
+ end
30
+ end
@@ -7,10 +7,10 @@ module Sigimera
7
7
  MAJOR = 0
8
8
 
9
9
  # The minor version number indicates that new features were added.
10
- MINOR = 0
10
+ MINOR = 1
11
11
 
12
12
  # The tiny number stands for bug fixes.
13
- TINY = 1
13
+ TINY = 0
14
14
 
15
15
  # The extra string marks the version as beta, alpha, rcX, ...
16
16
  EXTRA = nil
data/sigimera.gemspec CHANGED
@@ -15,6 +15,7 @@ Gem::Specification.new do |gem|
15
15
  gem.description = "This is the official ruby library for the Sigimera REST API. It encapsulates the authentication process in a secure way and simplifies the access to the Crises Information Platform."
16
16
  gem.files = `git ls-files`.split("\n")
17
17
  gem.require_paths = [ "lib" ]
18
+ gem.executables << "sigimera"
18
19
 
19
20
  gem.add_runtime_dependency "json"
20
21
  gem.add_runtime_dependency "nokogiri" # XML Parsing
@@ -23,4 +24,5 @@ Gem::Specification.new do |gem|
23
24
  gem.add_development_dependency "rspec"
24
25
  gem.add_development_dependency "spork"
25
26
  gem.add_development_dependency "simplecov"
27
+ gem.add_development_dependency "rspec_junit_formatter"
26
28
  end
@@ -96,7 +96,7 @@ describe Sigimera::Client do
96
96
  sleep 1 # Respect the courtesy limit and wait for one second
97
97
  id = "a8763f7e2c432ebe897a68706dcf8dd49243774d"
98
98
  crisis = @client.get_crisis(id)
99
- crisis.class.should eql(Hash)
99
+ crisis.class.should eql(Sigimera::Crisis)
100
100
  crisis['_id'].should eql(id)
101
101
  crisis['dc_title'].should eql("Green flood alert in Australia")
102
102
  crisis['dc_subject'].class.should eql(Array)
@@ -115,7 +115,7 @@ describe Sigimera::Client do
115
115
  sleep 1 # Respect the courtesy limit and wait for one second
116
116
  id = "a8763f7e2c432ebe897a68706dcf8dd49243774d"
117
117
  crisis = @client.get_crisis(id, { :output => 'short' })
118
- crisis.class.should eql(Hash)
118
+ crisis.class.should eql(Sigimera::Crisis)
119
119
  crisis['_id'].should eql(id)
120
120
  crisis['subject'].class.should eql(String)
121
121
  crisis['subject'].should eql("flood")
@@ -10,6 +10,7 @@ describe Sigimera::Client do
10
10
 
11
11
  it ".get_auth_token(username, password)" do
12
12
  if @username and @password
13
+ sleep 1 # Respect the courtesy limit and wait for one second
13
14
  auth_token = Sigimera::Client.get_auth_token(username = @username, password = @password)
14
15
  auth_token.class.should eql(String)
15
16
  auth_token.should_not be_empty
@@ -41,5 +42,5 @@ describe Sigimera::Client do
41
42
  crises.xpath("/rss/channel/link/text()").to_s.should eql("http://www.sigimera.org/")
42
43
  crises.xpath("/rss/channel/item").size.should == 10
43
44
  end
44
-
45
+
45
46
  end
@@ -0,0 +1,66 @@
1
+ # encoding: UTF-8
2
+ require "spec_helper"
3
+
4
+ describe Sigimera::Crisis do
5
+
6
+ it "#new crisis_as_json" do
7
+ json = {
8
+ "_id" => "1234567890ABCDEFG",
9
+ "dc_subject" => "cyclone",
10
+ "test_hash" => {
11
+ "key1" => "value1",
12
+ "key2" => "value2"
13
+ }
14
+ }
15
+ crisis = Sigimera::Crisis.new json
16
+
17
+ # Access the fields with the help of ruby methods
18
+ crisis._id.class.should eql(String)
19
+ crisis._id.should eql("1234567890ABCDEFG")
20
+
21
+ crisis.dc_subject.class.should eql(String)
22
+ crisis.dc_subject.should eql("cyclone")
23
+
24
+ test_hash = crisis.test_hash
25
+ test_hash.class.should eql(Hash)
26
+ test_hash['key1'].class.should eql(String)
27
+ test_hash['key1'].should eql("value1")
28
+ test_hash['key2'].class.should eql(String)
29
+ test_hash['key2'].should eql("value2")
30
+
31
+ crisis.no_method.should eql(nil)
32
+
33
+ # Simulate JSON object behavior
34
+ crisis['_id'].class.should eql(String)
35
+ crisis['_id'].should eql("1234567890ABCDEFG")
36
+
37
+ crisis['dc_subject'].class.should eql(String)
38
+ crisis['dc_subject'].should eql("cyclone")
39
+
40
+ test_hash = crisis['test_hash']
41
+ test_hash.class.should eql(Hash)
42
+ test_hash['key1'].class.should eql(String)
43
+ test_hash['key1'].should eql("value1")
44
+ test_hash['key2'].class.should eql(String)
45
+ test_hash['key2'].should eql("value2")
46
+ end
47
+
48
+ it "#new nil" do
49
+ crisis = Sigimera::Crisis.new nil
50
+ crisis.no_method.should eql(nil)
51
+ crisis['no_key'].should eql(nil)
52
+ end
53
+
54
+ it "#new 'some string'" do
55
+ crisis = Sigimera::Crisis.new "some string"
56
+ crisis.no_method.should eql(nil)
57
+ crisis['no_key'].should eql(nil)
58
+ end
59
+
60
+ it "#new 23" do
61
+ crisis = Sigimera::Crisis.new 23
62
+ crisis.no_method.should eql(nil)
63
+ crisis['no_key'].should eql(nil)
64
+ end
65
+
66
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sigimera
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
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-11-28 00:00:00.000000000 Z
12
+ date: 2012-12-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
@@ -107,31 +107,52 @@ dependencies:
107
107
  - - ! '>='
108
108
  - !ruby/object:Gem::Version
109
109
  version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: rspec_junit_formatter
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
110
126
  description: This is the official ruby library for the Sigimera REST API. It encapsulates
111
127
  the authentication process in a secure way and simplifies the access to the Crises
112
128
  Information Platform.
113
129
  email:
114
130
  - alex.oberhauser@sigimera.org
115
- executables: []
131
+ executables:
132
+ - sigimera
116
133
  extensions: []
117
134
  extra_rdoc_files: []
118
135
  files:
119
136
  - .gitignore
137
+ - .rspec
120
138
  - .rvmrc
121
139
  - Gemfile
122
140
  - Gemfile.lock
123
141
  - MIT-LICENSE
124
142
  - README.md
125
143
  - Rakefile
144
+ - bin/sigimera
126
145
  - certs/cacert.crt
127
146
  - lib/sigimera.rb
128
147
  - lib/sigimera/client.rb
148
+ - lib/sigimera/data/crisis.rb
129
149
  - lib/sigimera/http_helper.rb
130
150
  - lib/sigimera/version.rb
131
151
  - sigimera.gemspec
132
152
  - spec/api/client_crises_spec.rb
133
153
  - spec/api/client_static_spec.rb
134
154
  - spec/api/client_stats_spec.rb
155
+ - spec/data/crisis_spec.rb
135
156
  - spec/spec_helper.rb
136
157
  homepage: https://github.com/Sigimera/sigimera-ruby-client
137
158
  licenses:
@@ -148,7 +169,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
148
169
  version: '0'
149
170
  segments:
150
171
  - 0
151
- hash: -1539845786022213272
172
+ hash: 336144546145436383
152
173
  required_rubygems_version: !ruby/object:Gem::Requirement
153
174
  none: false
154
175
  requirements:
@@ -157,7 +178,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
157
178
  version: '0'
158
179
  segments:
159
180
  - 0
160
- hash: -1539845786022213272
181
+ hash: 336144546145436383
161
182
  requirements: []
162
183
  rubyforge_project:
163
184
  rubygems_version: 1.8.24