g5_integrations_updatable 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (28) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +116 -0
  4. data/Rakefile +32 -0
  5. data/app/assets/javascripts/g5_integrations_updatable/application.js +13 -0
  6. data/app/assets/stylesheets/g5_integrations_updatable/application.css +15 -0
  7. data/app/concerns/g5_integrations_updatable/find_or_create_from_feed.rb +23 -0
  8. data/app/concerns/g5_integrations_updatable/first_class_properties.rb +25 -0
  9. data/app/controllers/g5_integrations_updatable/application_controller.rb +4 -0
  10. data/app/controllers/g5_integrations_updatable/feeds_controller.rb +9 -0
  11. data/app/helpers/g5_integrations_updatable/application_helper.rb +4 -0
  12. data/app/models/g5_integrations_updatable/location_setting.rb +20 -0
  13. data/app/views/layouts/g5_integrations_updatable/application.html.erb +14 -0
  14. data/config/routes.rb +3 -0
  15. data/db/migrate/20141119204321_create_location_settings.rb +20 -0
  16. data/lib/g5_integrations_updatable.rb +13 -0
  17. data/lib/g5_integrations_updatable/engine.rb +12 -0
  18. data/lib/g5_integrations_updatable/error.rb +3 -0
  19. data/lib/g5_integrations_updatable/feed_fetcher.rb +31 -0
  20. data/lib/g5_integrations_updatable/feed_processor.rb +31 -0
  21. data/lib/g5_integrations_updatable/record_not_found_exception.rb +2 -0
  22. data/lib/g5_integrations_updatable/rspec.rb +3 -0
  23. data/lib/g5_integrations_updatable/rspec/factories.rb +19 -0
  24. data/lib/g5_integrations_updatable/version.rb +3 -0
  25. data/lib/generators/g5_integrations_updatable/install/USAGE +8 -0
  26. data/lib/generators/g5_integrations_updatable/install/install_generator.rb +7 -0
  27. data/lib/tasks/g5_integrations_updatable_tasks.rake +12 -0
  28. metadata +210 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 95760517c607f058ad9edc83bc8639bd867cb965
4
+ data.tar.gz: 72a6ed7096aaa3e55bee4dafa06cda74e1a59725
5
+ SHA512:
6
+ metadata.gz: 4cd5448e44b1e2ccd2c53865ef44779cbd61e08d978faa0e8b6e98afb2f37e564bb0771780d251014e22d40b2276c6a177a99eee13dbc3bd98685080cd114627
7
+ data.tar.gz: 61da01171e0cc5b7bb5ad8ac2dea1701ab9197ffa471fcf07028210d9de6b1b343e5ff1f23439247591901d11cb8afa65f5cca82406db690487bc3cc37932cad
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2014 YOURNAME
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,116 @@
1
+ # G5 Integrations Updatable
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/g5_integrations_updatable.svg)](http://badge.fury.io/rb/g5_integrations_updatable)
4
+ [![Build Status](https://travis-ci.org/G5/g5_integrations_updatable.png?branch=master)](https://travis-ci.org/G5/g5_integrations_updatable)
5
+
6
+ G5 Integrations Updatable provides a solution for automatic updates of client and location
7
+ data when modified or created in the G5 Hub.
8
+
9
+ ## Requirements
10
+
11
+ G5 Integrations Updatable makes use of PostgrSQL's `json` field type, and so only supports implementing apps that also use PostgreSQL.
12
+
13
+ ## Installation
14
+
15
+ 1. Add this line to your application's Gemfile:
16
+
17
+ ```ruby
18
+ gem 'g5_integrations_updatable'
19
+ ```
20
+
21
+ 2. And then execute:
22
+
23
+ ```console
24
+ bundle
25
+ ```
26
+ 3. Run the generator.
27
+
28
+ ```ruby
29
+ rails g g5_integrations_updatable:install
30
+ ```
31
+
32
+ This mounts the engine at `/g5_integrations_updatable`.
33
+
34
+ 3. And copy the engine's migrations to your application:
35
+
36
+ ```console
37
+ rake g5_integrations_updatable:install:migrations
38
+ ```
39
+ 3. Optional: load all of G5-Hub's data into your database
40
+
41
+ ```console
42
+ rake g5_integrations_updatable:load_all
43
+ ```
44
+ Note, all of the G5_AUTH env variables need to be set for this to work.
45
+
46
+ ## Usage
47
+
48
+ G5 Integrations Updatable exposes a POST route at `/g5_integrations_updatable/create` that accepts a
49
+ `client_setting_uid` parameter (the URL for the client's detail page within the G5
50
+ Hub). When the route is hit, it will update/create all location_settings under the client_setting.
51
+
52
+
53
+ ### Spec Helpers
54
+
55
+ The engine provides a helper files that can be included in your project to bring in some testing support.
56
+
57
+ ```ruby
58
+ require 'g5_integrations_updatable/rspec'
59
+ ```
60
+
61
+ ## Authors
62
+
63
+ * Perry Hertler / [@perryqh](https://github.com/perryqh)
64
+
65
+ ## Contributing
66
+
67
+ 1. [Fork it](https://github.com/G5/g5_integrations_updatable/fork)
68
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
69
+ 3. Write your code and **specs**
70
+ 4. Commit your changes (`git commit -am 'Add some feature'`)
71
+ 5. Push to the branch (`git push origin my-new-feature`)
72
+ 6. Create a new Pull Request
73
+
74
+ If you find bugs, have feature requests or questions, please
75
+ [file an issue](https://github.com/G5/g5_integrations_updatable/issues).
76
+
77
+ ## Specs
78
+
79
+ The `database.yml` for the dummy app must be created and modified to match your
80
+ PostgreSQL configuration. If you are using the [G5 Orion
81
+ Vagrant](https://github.com/G5/g5-orion-vagrant) image, the sample file should
82
+ just work. You can copy it into place with:
83
+ ```bash
84
+ $ cp spec/dummy/config/database.sample.yml spec/dummy/config/database.yml
85
+ ```
86
+
87
+ Run specs via `rspec` with:
88
+
89
+ ```bash
90
+ $ rspec spec
91
+ ```
92
+
93
+ ## License
94
+
95
+ Copyright (c) 2014 G5
96
+
97
+ MIT License
98
+
99
+ Permission is hereby granted, free of charge, to any person obtaining
100
+ a copy of this software and associated documentation files (the
101
+ "Software"), to deal in the Software without restriction, including
102
+ without limitation the rights to use, copy, modify, merge, publish,
103
+ distribute, sublicense, and/or sell copies of the Software, and to
104
+ permit persons to whom the Software is furnished to do so, subject to
105
+ the following conditions:
106
+
107
+ The above copyright notice and this permission notice shall be
108
+ included in all copies or substantial portions of the Software.
109
+
110
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
111
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
112
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
113
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
114
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
115
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
116
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,32 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'G5IntegrationsUpdatable'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.md')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
18
+ load 'rails/tasks/engine.rake'
19
+
20
+
21
+
22
+ Bundler::GemHelper.install_tasks
23
+
24
+ require 'rspec/core'
25
+ require 'rspec/core/rake_task'
26
+
27
+ Dir[File.join(File.dirname(__FILE__), 'tasks/**/*.rake')].each {|f| load f }
28
+
29
+ desc "Run all specs in spec directory (excluding plugin specs)"
30
+
31
+ RSpec::Core::RakeTask.new(:spec => 'app:db:test:prepare')
32
+ task :default => :spec
@@ -0,0 +1,13 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // compiled file.
9
+ //
10
+ // Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
11
+ // about supported directives.
12
+ //
13
+ //= require_tree .
@@ -0,0 +1,15 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
+ * compiled file so the styles you add here take precedence over styles defined in any styles
10
+ * defined in the other CSS/SCSS files in this directory. It is generally better to create a new
11
+ * file per style scope.
12
+ *
13
+ *= require_tree .
14
+ *= require_self
15
+ */
@@ -0,0 +1,23 @@
1
+ module G5IntegrationsUpdatable::FindOrCreateFromFeed
2
+ extend ActiveSupport::Concern
3
+
4
+ module ClassMethods
5
+ def find_or_create_from_feed(location_settings_hash)
6
+ hash = location_settings_hash.dup
7
+ setting = find_or_initialize_by(uid: hash.delete('uid'))
8
+ setting.update_attributes(
9
+ urn: hash.delete('urn'),
10
+ location_uid: hash.delete('location_uid'),
11
+ location_urn: hash.delete('location_urn'),
12
+ location_name: hash.delete('location_name'),
13
+ client_uid: hash.delete('client_uid'),
14
+ client_urn: hash.delete('client_urn'),
15
+ client_name: hash.delete('client_name'),
16
+ vendor_action: hash.delete('vendor_action'),
17
+ job_frequency_in_minutes: hash.delete('job_frequency_in_minutes'),
18
+ properties: hash
19
+ )
20
+ setting
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,25 @@
1
+ module G5IntegrationsUpdatable::FirstClassProperties
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ after_initialize :define_methods_for_properties
6
+ end
7
+
8
+ def properties=(hash)
9
+ write_attribute("properties", hash)
10
+ define_methods_for_properties
11
+ end
12
+
13
+ protected
14
+
15
+ def define_methods_for_properties
16
+ return unless properties.present?
17
+
18
+ properties.each do |key, value|
19
+ next if respond_to?(key)
20
+ define_singleton_method(key) do
21
+ properties[key.to_s] if properties.present?
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,4 @@
1
+ module G5IntegrationsUpdatable
2
+ class ApplicationController < ActionController::Base
3
+ end
4
+ end
@@ -0,0 +1,9 @@
1
+ class G5IntegrationsUpdatable::FeedsController < ApplicationController
2
+ skip_before_filter :authenticate_user!
3
+ skip_before_filter :verify_authenticity_token
4
+
5
+ def create
6
+ G5IntegrationsUpdatable::FeedProcessor.new(client_setting_uid: params[:client_setting_uid]).process
7
+ render json: {}, status: 201
8
+ end
9
+ end
@@ -0,0 +1,4 @@
1
+ module G5IntegrationsUpdatable
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,20 @@
1
+ module G5IntegrationsUpdatable
2
+ class LocationSetting < ActiveRecord::Base
3
+ include G5IntegrationsUpdatable::FirstClassProperties
4
+ include G5IntegrationsUpdatable::FindOrCreateFromFeed
5
+
6
+ validates :uid, :urn, presence: true
7
+ validates :urn, :urn, presence: true
8
+
9
+ INVENTORY = 'inventory'
10
+ LEAD = 'lead'
11
+
12
+ scope :by_vendor_action, -> (vendor_action) { where(vendor_action: vendor_action) }
13
+ scope :by_inventory, -> { by_vendor_action(INVENTORY) }
14
+ scope :by_lead, -> { by_vendor_action(LEAD) }
15
+
16
+ def to_param
17
+ urn
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>G5IntegrationsUpdatable</title>
5
+ <%= stylesheet_link_tag "g5_integrations_updatable/application", media: "all" %>
6
+ <%= javascript_include_tag "g5_integrations_updatable/application" %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= yield %>
12
+
13
+ </body>
14
+ </html>
data/config/routes.rb ADDED
@@ -0,0 +1,3 @@
1
+ G5IntegrationsUpdatable::Engine.routes.draw do
2
+ resources :feeds, only: :create
3
+ end
@@ -0,0 +1,20 @@
1
+ class CreateLocationSettings < ActiveRecord::Migration
2
+ def change
3
+ create_table :g5_integrations_updatable_location_settings do |t|
4
+ t.string :uid
5
+ t.string :urn
6
+ t.string :location_uid
7
+ t.string :location_urn
8
+ t.string :location_name
9
+ t.string :client_uid
10
+ t.string :client_urn
11
+ t.string :client_name
12
+ t.string :vendor_action
13
+ t.integer :job_frequency_in_minutes
14
+ t.json :properties
15
+ t.timestamps
16
+ end
17
+ add_index :g5_integrations_updatable_location_settings, :uid, unique: true
18
+ add_index :g5_integrations_updatable_location_settings, :urn, unique: true
19
+ end
20
+ end
@@ -0,0 +1,13 @@
1
+ require 'g5_integrations_updatable/engine'
2
+ require 'g5_authentication_client'
3
+ require 'httparty'
4
+
5
+
6
+ module G5IntegrationsUpdatable
7
+ end
8
+
9
+ require 'g5_integrations_updatable/version'
10
+ require 'g5_integrations_updatable/error'
11
+ require 'g5_integrations_updatable/record_not_found_exception'
12
+ require 'g5_integrations_updatable/feed_fetcher'
13
+ require 'g5_integrations_updatable/feed_processor'
@@ -0,0 +1,12 @@
1
+ module G5IntegrationsUpdatable
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace G5IntegrationsUpdatable
4
+ config.autoload_paths << G5IntegrationsUpdatable::Engine.root.join("lib")
5
+
6
+ config.generators do |g|
7
+ g.test_framework :rspec
8
+ g.assets false
9
+ g.helper false
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,3 @@
1
+ class G5IntegrationsUpdatable::Error < StandardError
2
+
3
+ end
@@ -0,0 +1,31 @@
1
+ module G5IntegrationsUpdatable
2
+ class FeedFetcher
3
+ def initialize(uri, options={})
4
+ @uri = uri
5
+ @options = options
6
+ end
7
+
8
+ def root_key
9
+ @options.fetch(:root_key, 'location_settings')
10
+ end
11
+
12
+ def process
13
+ response = HTTParty.get(@uri, {query: {access_token: access_token},
14
+ headers: {'Content-Type' => 'application/json',
15
+ 'Accept' => 'application/json'}})
16
+
17
+ case response.code.to_i
18
+ when 200
19
+ JSON.parse(response.body)[root_key]
20
+ when 404
21
+ raise G5IntegrationsUpdatable::RecordNotFoundException.new("Couldn't find record at URL '#{@uri}'")
22
+ else
23
+ raise G5IntegrationsUpdatable::Error.new("I got an unexpected response code '#{response.code}'")
24
+ end
25
+ end
26
+
27
+ def access_token
28
+ @access_token ||= G5AuthenticationClient::Client.new.get_access_token
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,31 @@
1
+ module G5IntegrationsUpdatable
2
+ class FeedProcessor
3
+ attr_accessor :client_setting_uid
4
+
5
+ def initialize(params={})
6
+ self.client_setting_uid = params[:client_setting_uid]
7
+ end
8
+
9
+ class << self
10
+ def load_all_settings(all_uri)
11
+ result_hash = G5IntegrationsUpdatable::FeedFetcher.new(all_uri, root_key: 'entries').process
12
+ find_or_create_all result_hash
13
+ end
14
+
15
+ def find_or_create_all(feed_array)
16
+ feed_array.each do |location_setting_hash|
17
+ G5IntegrationsUpdatable::LocationSetting.find_or_create_from_feed(location_setting_hash)
18
+ end
19
+ end
20
+ end
21
+
22
+ def process
23
+ self.class.find_or_create_all feed_hash_array
24
+ end
25
+
26
+ private
27
+ def feed_hash_array
28
+ G5IntegrationsUpdatable::FeedFetcher.new(self.client_setting_uid).process
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,2 @@
1
+ class G5IntegrationsUpdatable::RecordNotFoundException < G5IntegrationsUpdatable::Error
2
+ end
@@ -0,0 +1,3 @@
1
+ if defined?(FactoryGirl)
2
+ require 'g5_integrations_updatable/rspec/factories'
3
+ end
@@ -0,0 +1,19 @@
1
+ FactoryGirl.define do
2
+ factory :location_setting, class: G5IntegrationsUpdatable::LocationSetting do
3
+ sequence :uid do |n|
4
+ "http://client/location-setting#{n}"
5
+ end
6
+ sequence :urn do |n|
7
+ "location-setting-urn-#{n}"
8
+ end
9
+ end
10
+
11
+ factory :inventory_location_setting, parent: :location_setting do
12
+ vendor_action { G5IntegrationsUpdatable::LocationSetting::INVENTORY }
13
+ job_frequency_in_minutes 5
14
+ end
15
+
16
+ factory :lead_location_setting, parent: :location_setting do
17
+ vendor_action { G5IntegrationsUpdatable::LocationSetting::LEAD }
18
+ end
19
+ end
@@ -0,0 +1,3 @@
1
+ module G5IntegrationsUpdatable
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Installs the g5_integrations_updatable engine
3
+
4
+ Example:
5
+ rails generate g5_integrations_updatable:install
6
+
7
+ This will modify:
8
+ config/routes.rb
@@ -0,0 +1,7 @@
1
+ require 'rails/generators'
2
+
3
+ class G5IntegrationsUpdatable::InstallGenerator < Rails::Generators::Base
4
+ def mount_engine
5
+ route "mount G5IntegrationsUpdatable::Engine => '/g5_integrations_updatable'"
6
+ end
7
+ end
@@ -0,0 +1,12 @@
1
+ namespace :g5_integrations_updatable do
2
+ DEFAULT_G5_INTEGRATIONS_URL = 'https://g5-integrations-staging.herokuapp.com/entries.json'
3
+
4
+ desc 'loads all of g5-integrations into local DB. Note: the ENV variables for G5-Auth need to be set!'
5
+ task load_all: :environment do
6
+ clients_url = ENV['DEFAULT_G5_INTEGRATIONS_URL'] || DEFAULT_G5_INTEGRATIONS_URL
7
+ puts "loading clients from #{clients_url}...."
8
+
9
+ G5IntegrationsUpdatable::FeedProcessor.load_all_settings(clients_url)
10
+ puts 'Success!!'
11
+ end
12
+ end
metadata ADDED
@@ -0,0 +1,210 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: g5_integrations_updatable
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Perry Hertler
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 4.1.7
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 4.1.7
27
+ - !ruby/object:Gem::Dependency
28
+ name: pg
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: active_model_serializers
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.8'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.8'
55
+ - !ruby/object:Gem::Dependency
56
+ name: virtus
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: g5_authentication_client
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: httparty
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec-rails
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 3.0.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 3.0.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec-its
113
+ requirement: !ruby/object:Gem::Requirement
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
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: factory_girl
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: generator_spec
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ description: Retrieves and stores integration models from g5-integrations-dashboard.
154
+ email:
155
+ - perry@hertler.org
156
+ executables: []
157
+ extensions: []
158
+ extra_rdoc_files: []
159
+ files:
160
+ - MIT-LICENSE
161
+ - README.md
162
+ - Rakefile
163
+ - app/assets/javascripts/g5_integrations_updatable/application.js
164
+ - app/assets/stylesheets/g5_integrations_updatable/application.css
165
+ - app/concerns/g5_integrations_updatable/find_or_create_from_feed.rb
166
+ - app/concerns/g5_integrations_updatable/first_class_properties.rb
167
+ - app/controllers/g5_integrations_updatable/application_controller.rb
168
+ - app/controllers/g5_integrations_updatable/feeds_controller.rb
169
+ - app/helpers/g5_integrations_updatable/application_helper.rb
170
+ - app/models/g5_integrations_updatable/location_setting.rb
171
+ - app/views/layouts/g5_integrations_updatable/application.html.erb
172
+ - config/routes.rb
173
+ - db/migrate/20141119204321_create_location_settings.rb
174
+ - lib/g5_integrations_updatable.rb
175
+ - lib/g5_integrations_updatable/engine.rb
176
+ - lib/g5_integrations_updatable/error.rb
177
+ - lib/g5_integrations_updatable/feed_fetcher.rb
178
+ - lib/g5_integrations_updatable/feed_processor.rb
179
+ - lib/g5_integrations_updatable/record_not_found_exception.rb
180
+ - lib/g5_integrations_updatable/rspec.rb
181
+ - lib/g5_integrations_updatable/rspec/factories.rb
182
+ - lib/g5_integrations_updatable/version.rb
183
+ - lib/generators/g5_integrations_updatable/install/USAGE
184
+ - lib/generators/g5_integrations_updatable/install/install_generator.rb
185
+ - lib/tasks/g5_integrations_updatable_tasks.rake
186
+ homepage: ''
187
+ licenses:
188
+ - MIT
189
+ metadata: {}
190
+ post_install_message:
191
+ rdoc_options: []
192
+ require_paths:
193
+ - lib
194
+ required_ruby_version: !ruby/object:Gem::Requirement
195
+ requirements:
196
+ - - ">="
197
+ - !ruby/object:Gem::Version
198
+ version: '0'
199
+ required_rubygems_version: !ruby/object:Gem::Requirement
200
+ requirements:
201
+ - - ">="
202
+ - !ruby/object:Gem::Version
203
+ version: '0'
204
+ requirements: []
205
+ rubyforge_project:
206
+ rubygems_version: 2.2.0
207
+ signing_key:
208
+ specification_version: 4
209
+ summary: Retrieves and stores integration models from g5-integrations-dashboard.
210
+ test_files: []