g5_integrations_updatable 0.0.1

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.
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: []