leggy 0.1.0 → 0.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d821476efbbb756a5949745fc9d89e5fc2cb8e81
4
- data.tar.gz: 1efd59068a8971bb13be63aeff08c2f4e7cfbd39
3
+ metadata.gz: da3232fa74362931ad5aa06fb886c8856d0610ce
4
+ data.tar.gz: 037b56a7930324f3eeb96531f9ded4dda49d7f41
5
5
  SHA512:
6
- metadata.gz: 3ecc733d027635fa516a2db0c0b36fa2fdfd46504440b5dcb7f51a685288958f52707a0efc6785b081c284bd2848fe177380235615f031b8339dc34130b6b4b3
7
- data.tar.gz: c93468c7b2dc7359a546889a2d0d097c3730a9c7dc93ac46962b4d6665857ee89df71ffbe672f47641caf6bdf8beee9adb885cc302c6362e84f72753a4d9d80c
6
+ metadata.gz: ccef3a3674b165cc70eccd23826ae59bab1d75a2f1a9a3b030fb9d85f3c78acdc10b453113c0d7af54806b16bb9525be84421e332e8c3010f21e78d5db5a1c8d
7
+ data.tar.gz: c0d16ac47813fd6e09f1e7e5190cf1897af33083de8b69989a0b18d66bdb460f2ad7bebf5fb8567ad394882fc8f87b062485fa78e6c54d84d37548d7e1395184
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --format progress
3
+
@@ -0,0 +1,33 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ # Note: The cmd option is now required due to the increasing number of ways
5
+ # rspec may be run, below are examples of the most common uses.
6
+ # * bundler: 'bundle exec rspec'
7
+ # * bundler binstubs: 'bin/rspec'
8
+ # * spring: 'bin/rsspec' (This will use spring if running and you have
9
+ # installed the spring binstubs per the docs)
10
+ # * zeus: 'zeus rspec' (requires the server to be started separetly)
11
+ # * 'just' rspec: 'rspec'
12
+ guard :rspec, cmd: 'bundle exec rspec' do
13
+ watch(%r{^spec/.+_spec\.rb$})
14
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
15
+ watch('spec/spec_helper.rb') { "spec" }
16
+
17
+ # Rails example
18
+ watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
19
+ watch(%r{^app/(.*)(\.erb|\.haml|\.slim)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
20
+ watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
21
+ watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
22
+ watch('config/routes.rb') { "spec/routing" }
23
+ watch('app/controllers/application_controller.rb') { "spec/controllers" }
24
+ watch('spec/rails_helper.rb') { "spec" }
25
+
26
+ # Capybara features specs
27
+ watch(%r{^app/views/(.+)/.*\.(erb|haml|slim)$}) { |m| "spec/features/#{m[1]}_spec.rb" }
28
+
29
+ # Turnip features and steps
30
+ watch(%r{^spec/acceptance/(.+)\.feature$})
31
+ watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
32
+ end
33
+
Binary file
@@ -9,6 +9,22 @@ require "active_support/concern"
9
9
  require "active_support/core_ext/hash/slice"
10
10
  require "ostruct"
11
11
 
12
+ require "leggy/helpers"
13
+ require "leggy/user"
14
+ require "leggy/app"
15
+ require "leggy/url"
16
+ require "leggy/crawl_options"
17
+ require "leggy/crawl"
18
+ require "leggy/mapping/user"
19
+ require "leggy/mapping/app"
20
+ require "leggy/mapping/url"
21
+ require "leggy/mapping/crawl_options"
22
+ require "leggy/mapping/crawl"
23
+ require "leggy/resource/user"
24
+ require "leggy/resource/app"
25
+ require "leggy/resource/url"
26
+ require "leggy/resource/crawl"
27
+
12
28
  Dotenv.load
13
29
 
14
30
  module Leggy
@@ -69,27 +85,5 @@ module Leggy
69
85
  options
70
86
  end
71
87
 
72
- autoload :Helpers, 'leggy/helpers'
73
- autoload :User, 'leggy/user'
74
- autoload :App, 'leggy/app'
75
- autoload :Url, 'leggy/url'
76
- autoload :CrawlOptions, 'leggy/crawl_options'
77
- autoload :Crawl, 'leggy/crawl'
78
-
79
- module Mapping
80
- autoload :User, 'leggy/mapping/user'
81
- autoload :App, 'leggy/mapping/app'
82
- autoload :Url, 'leggy/mapping/url'
83
- autoload :CrawlOptions, 'leggy/mapping/crawl_options'
84
- autoload :Crawl, 'leggy/mapping/crawl'
85
- end
86
-
87
- module Resource
88
- autoload :User, 'leggy/resource/user'
89
- autoload :App, 'leggy/resource/app'
90
- autoload :Url, 'leggy/resource/url'
91
- autoload :Crawl, 'leggy/resource/crawl'
92
- end
93
-
94
88
  end
95
89
 
@@ -0,0 +1,13 @@
1
+ module Leggy
2
+ class App
3
+ include Leggy::Helpers
4
+
5
+ attr_accessor(
6
+ :name,
7
+ :user,
8
+ :location,
9
+ :date_created
10
+ )
11
+
12
+ end
13
+ end
@@ -0,0 +1,23 @@
1
+ module Leggy
2
+ class Crawl
3
+ include Leggy::Helpers
4
+
5
+ attr_accessor(
6
+ :name,
7
+ :app,
8
+ :user,
9
+ :id,
10
+ :urllist,
11
+ :data,
12
+ :user_agent,
13
+ :depth,
14
+ :max_depth,
15
+ :urls_crawled,
16
+ :maxUrls,
17
+ :status,
18
+ :results
19
+ )
20
+
21
+ end
22
+ end
23
+
@@ -0,0 +1,18 @@
1
+ module Leggy
2
+ class CrawlOptions
3
+ include Leggy::Helpers
4
+
5
+ def initialize(attrs = {})
6
+ attrs.slice(*Leggy::CrawlOptions.attr_accessors).each { |k,v| send("#{k}=",v) }
7
+ end
8
+
9
+ attr_accessor(
10
+ :app,
11
+ :urllist,
12
+ :data,
13
+ :max_depth,
14
+ :max_urls
15
+ )
16
+
17
+ end
18
+ end
@@ -0,0 +1,40 @@
1
+ module Leggy
2
+ module Helpers
3
+ extend ActiveSupport::Concern
4
+
5
+ module ClassMethods
6
+
7
+ def attr_reader(*params)
8
+ @attr_readers ||= []
9
+ @attr_readers.concat params
10
+ super(*params)
11
+ end
12
+
13
+ def attr_writer(*params)
14
+ @attr_writers ||= []
15
+ @attr_writers.concat params
16
+ super(*params)
17
+ end
18
+
19
+ def attr_accessor(*params)
20
+ @attr_accessors ||= []
21
+ @attr_accessors.concat params
22
+ super(*params)
23
+ end
24
+
25
+ def attr_readers
26
+ @attr_readers
27
+ end
28
+
29
+ def attr_writers
30
+ @attr_writers
31
+ end
32
+
33
+ def attr_accessors
34
+ @attr_accessors
35
+ end
36
+
37
+ end
38
+
39
+ end
40
+ end
@@ -0,0 +1,18 @@
1
+ module Leggy
2
+ module Mapping
3
+ class App
4
+ include Kartograph::DSL
5
+
6
+ kartograph do
7
+ mapping Leggy::App
8
+
9
+ property *Leggy::App.attr_accessors, scopes: :read
10
+ end
11
+ end
12
+ end
13
+ end
14
+
15
+ # name string The name given to the app.
16
+ # user string The user the app is associated with.
17
+ # location string The internal location for the app.
18
+ # date_created date The date the app was uploaded.
@@ -0,0 +1,13 @@
1
+ module Leggy
2
+ module Mapping
3
+ class Crawl
4
+ include Kartograph::DSL
5
+
6
+ kartograph do
7
+ mapping Leggy::Crawl
8
+
9
+ property *Leggy::Crawl.attr_accessors, scopes: :read
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Leggy
2
+ module Mapping
3
+ class CrawlOptions
4
+ include Kartograph::DSL
5
+
6
+ kartograph do
7
+ mapping Leggy::CrawlOptions
8
+
9
+ property *Leggy::CrawlOptions.attr_accessors, scopes: :create
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ module Leggy
2
+ module Mapping
3
+ class Url
4
+ include Kartograph::DSL
5
+
6
+ kartograph do
7
+ mapping Leggy::Url
8
+
9
+ property *Leggy::Url.attr_accessors, scopes: :read
10
+ end
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,14 @@
1
+ module Leggy
2
+ module Mapping
3
+ class User
4
+ include Kartograph::DSL
5
+
6
+ kartograph do
7
+ mapping Leggy::User
8
+
9
+ property *Leggy::User.attr_accessors, scopes: :read
10
+ end
11
+
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,55 @@
1
+ module Leggy
2
+ module Resource
3
+ class App < ResourceKit::Resource
4
+
5
+ resources do
6
+
7
+ default_handler do |response|
8
+ raise "ERROR #{response.status}: #{response.body}"
9
+ end
10
+
11
+ # GET https://api_token:@api.80legs.com/v2/apps
12
+ #
13
+ action :all do
14
+ verb :get
15
+ path '/v2/apps'
16
+ handler(200) { |response| Leggy::Mapping::App.extract_collection(response.body, :read) }
17
+ end
18
+
19
+ # PUT https://api_token:@api.80legs.com/v2/apps/{APP_NAME}
20
+ #
21
+ action :create do
22
+ before_request :set_content_type_for_uploads
23
+ verb :put
24
+ path '/v2/apps/:name'
25
+ body { |object| File.file?(object[:body]) ? File.read(object[:body]) : object[:body] }
26
+ handler(204) { |response| true }
27
+ end
28
+
29
+ # GET https://api_token:@api.80legs.com/v2/apps/{APP_NAME}
30
+ #
31
+ action :find do
32
+ verb :get
33
+ path '/v2/apps/:name'
34
+ handler(200) { |response| response.body }
35
+ end
36
+
37
+ # DELETE https://api_token:@api.80legs.com/v2/apps/{APP_NAME}
38
+ #
39
+ action :delete do
40
+ verb :delete
41
+ path '/v2/apps/:name'
42
+ handler(204) { |response| true }
43
+ end
44
+
45
+ end
46
+
47
+ private
48
+
49
+ def set_content_type_for_uploads(*args, request)
50
+ request.headers['Content-Type'] = 'application/octet-stream'
51
+ end
52
+
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,49 @@
1
+ module Leggy
2
+ module Resource
3
+ class Crawl < ResourceKit::Resource
4
+
5
+ resources do
6
+
7
+ default_handler do |response|
8
+ raise "ERROR #{response.status}: #{response.body}"
9
+ end
10
+
11
+ # POST https://api_token:@api.80legs.com/v2/crawls/{CRAWL_NAME}
12
+ #
13
+ action :start do
14
+ verb :post
15
+ path '/v2/crawls/:name'
16
+ body { |object| object.slice(*Leggy::CrawlOptions.attr_accessors).to_json }
17
+ handler(204) { |response| true }
18
+ end
19
+
20
+ # GET https://api_token:@api.80legs.com/v2/crawls/{CRAWL_NAME}
21
+ #
22
+ action :status do
23
+ verb :get
24
+ path '/v2/crawls/:name'
25
+ handler(200) { |response| Leggy::Mapping::Crawl.extract_single(response.body, :read) }
26
+ end
27
+
28
+ # DELETE https://api_token:@api.80legs.com/v2/crawls/{CRAWL_NAME}
29
+ #
30
+ action :cancel do
31
+ verb :delete
32
+ path '/v2/crawls/:name'
33
+ handler(204) { |response| true }
34
+ end
35
+
36
+ # GET https://api_token:@api.80legs.com/v2/results/{CRAWL_NAME}
37
+ #
38
+ action :results do
39
+ verb :get
40
+ path '/v2/results/:name'
41
+ handler(200) { |response| JSON.parse(response.body) }
42
+ end
43
+
44
+ end
45
+
46
+ end
47
+ end
48
+ end
49
+
@@ -0,0 +1,55 @@
1
+ module Leggy
2
+ module Resource
3
+ class Url < ResourceKit::Resource
4
+
5
+ resources do
6
+
7
+ default_handler do |response|
8
+ raise "ERROR #{response.status}: #{response.body}"
9
+ end
10
+
11
+ # GET https://api_token:@api.80legs.com/v2/urllists
12
+ #
13
+ action :all do
14
+ verb :get
15
+ path '/v2/urllists'
16
+ handler(200) { |response| Leggy::Mapping::Url.extract_collection(response.body, :read) }
17
+ end
18
+
19
+ # PUT https://api_token:@api.80legs.com/v2/urllists/{URLS_NAME}
20
+ #
21
+ action :create do
22
+ before_request :set_content_type_for_uploads
23
+ verb :put
24
+ path '/v2/urllists/:name'
25
+ body { |object| File.file?(object[:body]) ? File.read(object[:body]) : object[:body] }
26
+ handler(204) { |response| true }
27
+ end
28
+
29
+ # GET https://api_token:@api.80legs.com/v2/urllists/{URLS_NAME}
30
+ #
31
+ action :find do
32
+ verb :get
33
+ path '/v2/urllists/:name'
34
+ handler(200) { |response| JSON.parse(response.body) }
35
+ end
36
+
37
+ # DELETE https://api_token:@api.80legs.com/v2/urllists/{URLS_NAME}
38
+ #
39
+ action :delete do
40
+ verb :delete
41
+ path '/v2/urllists/:name'
42
+ handler(204) { |response| true }
43
+ end
44
+
45
+ end
46
+
47
+ private
48
+
49
+ def set_content_type_for_uploads(*args, request)
50
+ request.headers['Content-Type'] = 'application/octet-stream'
51
+ end
52
+
53
+ end
54
+ end
55
+ end