sigimera 0.0.1 → 0.1.0

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.
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