grammer 0.1.0.edge

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3186086c6b4c56b0aa46f5ea3578324783750d01
4
+ data.tar.gz: 41e4c66758aa2caad094bba82fa83b4663f20cf0
5
+ SHA512:
6
+ metadata.gz: 518755629c23e64dbe0c5e53559c6d2586fa8303018fce20c77af60cb31b2496bec74e9cd5fdfbf8b23d2a8db8572bacea250c3972e3dc507e2ef7a426b2587a
7
+ data.tar.gz: 7c8324ef8481fa9c9caa3780dd23defc587d6fc7b64b15a738ec99f3ced38834f172c3a59910e81b7ce60627edfd2f071e07975c94f56f25faf612fdcb0e11ef
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Grammer
4
+ # Handles Ig Requests
5
+ class IgService
6
+ include HTTParty
7
+ base_uri 'https://www.instagram.com'
8
+
9
+ def node(username)
10
+ page = self.class.get("/#{username}")
11
+ json = Nokogiri.parse(page)
12
+ .at('body script')
13
+ .text.match(/({.*})/)[1]
14
+ JSON.parse(json)
15
+ .dig('entry_data', 'ProfilePage', 0, 'graphql', 'user') || {}
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Adds class macros to top level module
4
+ module Grammer
5
+ def self.included(klass)
6
+ klass.extend(Macros)
7
+ end
8
+
9
+ # Defines class macros
10
+ module Macros
11
+ def get_or_set_const(module_name)
12
+ const_set(module_name, Module.new) unless const_defined?(module_name)
13
+ const_get(module_name)
14
+ end
15
+
16
+ def grammed_by(method, options = {})
17
+ mod = get_or_set_const(:"GammerMod#{object_id}")
18
+ mod.class_eval do
19
+ target_attribute = options[:on]
20
+ define_method(target_attribute) do
21
+ username = send(method)
22
+ instance_var = "@#{target_attribute}"
23
+
24
+ instance_var_value = instance_variable_get(instance_var)
25
+ unless instance_var_value
26
+ instance_variable_set(
27
+ instance_var,
28
+ Node.new(username, service: options[:service])
29
+ )
30
+ end
31
+ instance_var_value
32
+ end
33
+ end
34
+ prepend mod
35
+ end
36
+
37
+ def grammed_by_class_method(*methods)
38
+ singleton_class.class_eval do
39
+ include Grammer
40
+ grammed_by(*methods)
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Grammer
4
+ # Represents Instagram nodes (Users)
5
+ class Node
6
+ attr_reader :data, :service
7
+
8
+ def initialize(username, attr = {})
9
+ @service = attr[:service] || IgService.new
10
+ @data = service.node(username)
11
+ end
12
+
13
+ def biography
14
+ @data.dig('biography')
15
+ end
16
+
17
+ def followers_count
18
+ @data.dig('edge_followed_by', 'count')
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Grammer
4
+ # Describes version for gemspec
5
+ module VERSION
6
+ MAJOR = 0
7
+ MINOR = 1
8
+ PATCH = 0
9
+ BUILD = 'edge'
10
+
11
+ STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
12
+
13
+ def self.version
14
+ STRING
15
+ end
16
+ end
17
+ end
data/lib/grammer.rb ADDED
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Main Module
4
+ module Grammer
5
+ require 'httparty'
6
+ require 'nokogiri'
7
+
8
+ require 'grammer/ig_service'
9
+ require 'grammer/macros'
10
+ require 'grammer/node'
11
+ end
metadata ADDED
@@ -0,0 +1,158 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: grammer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0.edge
5
+ platform: ruby
6
+ authors:
7
+ - Caio Andrade
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-01-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: httparty
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.16'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.16.3
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '0.16'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.16.3
33
+ - !ruby/object:Gem::Dependency
34
+ name: nokogiri
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.8'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 1.8.2
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.8'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 1.8.2
53
+ - !ruby/object:Gem::Dependency
54
+ name: pry-byebug
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '3.6'
60
+ type: :development
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '3.6'
67
+ - !ruby/object:Gem::Dependency
68
+ name: reek
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: '4.8'
74
+ type: :development
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: '4.8'
81
+ - !ruby/object:Gem::Dependency
82
+ name: rspec
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: '3.0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: '3.0'
95
+ - !ruby/object:Gem::Dependency
96
+ name: rubocop
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: 0.62.0
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
107
+ - !ruby/object:Gem::Version
108
+ version: 0.62.0
109
+ - !ruby/object:Gem::Dependency
110
+ name: simplecov
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - "~>"
114
+ - !ruby/object:Gem::Version
115
+ version: 0.16.1
116
+ type: :development
117
+ prerelease: false
118
+ version_requirements: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - "~>"
121
+ - !ruby/object:Gem::Version
122
+ version: 0.16.1
123
+ description: Provides a simple way to connect objects to the info on a Instagram account.
124
+ email: caioertai@gmail.com
125
+ executables: []
126
+ extensions: []
127
+ extra_rdoc_files: []
128
+ files:
129
+ - lib/grammer.rb
130
+ - lib/grammer/ig_service.rb
131
+ - lib/grammer/macros.rb
132
+ - lib/grammer/node.rb
133
+ - lib/grammer/version.rb
134
+ homepage: http://rubygems.org/gems/grammer
135
+ licenses:
136
+ - MIT
137
+ metadata: {}
138
+ post_install_message:
139
+ rdoc_options: []
140
+ require_paths:
141
+ - lib
142
+ required_ruby_version: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ required_rubygems_version: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">"
150
+ - !ruby/object:Gem::Version
151
+ version: 1.3.1
152
+ requirements: []
153
+ rubyforge_project:
154
+ rubygems_version: 2.6.14.1
155
+ signing_key:
156
+ specification_version: 4
157
+ summary: Instragram basic info scraping handler.
158
+ test_files: []