krl 0.1.68 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
data/bin/krl CHANGED
@@ -1,34 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'rubygems'
3
- #$DEBUG = true
4
- LIB_DIR = File.dirname(__FILE__) + "/../lib/"
5
-
6
- COMMANDS = {
7
- "help" => lambda { |args| require LIB_DIR + 'help'; KRL_CMD::Help.go },
8
- "apps" => lambda { |args| require LIB_DIR + 'apps'; KRL_CMD::Apps.go },
9
- "checkout" => lambda { |args| require LIB_DIR + 'checkout'; KRL_CMD::Checkout.go(args) },
10
- "create" => lambda { |args| require LIB_DIR + 'create'; KRL_CMD::Create.go(args) },
11
- "update" => lambda { |args| require LIB_DIR + 'update'; KRL_CMD::Update.go(args) },
12
- "versions" => lambda { |args| require LIB_DIR + 'versions'; KRL_CMD::Versions.go(args) },
13
- "deploy" => lambda { |args| require LIB_DIR + 'deploy'; KRL_CMD::Deploy.go(args) },
14
- "commit" => lambda { |args| require LIB_DIR + 'commit'; KRL_CMD::Commit.go(args) },
15
- "show" => lambda { |args| require LIB_DIR + 'show'; KRL_CMD::Show.go(args) },
16
- "note" => lambda { |args| require LIB_DIR + 'note'; KRL_CMD::Note.go(args) },
17
- "check" => lambda { |args| require LIB_DIR + 'check'; KRL_CMD::Check.go(args) },
18
- "generate" => lambda { |args| require LIB_DIR + 'generate'; KRL_CMD::Generate.go(args) },
19
- "test" => lambda { |args| require LIB_DIR + 'test'; KRL_CMD::Test.go(args) },
20
- "info" => lambda { |args| require LIB_DIR + 'info'; KRL_CMD::Info.go(args) }
21
- }
3
+ require 'thor'
4
+ require 'kynetx_am_api'
5
+ require 'ap'
22
6
 
23
- banner = "Usage: krl <command> <args>\nUse 'krl help' for more information."
7
+ #$DEBUG = true
24
8
 
25
- cmd = ARGV.shift
26
- if COMMANDS.keys.include? cmd
27
- begin
28
- COMMANDS[cmd].call(ARGV)
29
- rescue Exception => e
30
- puts "Error: #{e.message}"
31
- end
32
- else
33
- puts banner
34
- end
9
+ require File.dirname(__FILE__) + "/../lib/cli"
10
+ KRL_CMD::CLI.start
data/bin/krl-connect CHANGED
File without changes
data/lib/apps.rb CHANGED
@@ -1,8 +1,6 @@
1
1
  module KRL_CMD
2
2
  class Apps
3
3
  def self.go
4
- require LIB_DIR + 'user'
5
- require LIB_DIR + 'common'
6
4
  user = User.new
7
5
  KRL_COMMON::pretty_table(user.applications["apps"], [
8
6
  {:field => "Ruleset ID", :value => lambda { |r| r["appid"] }},
@@ -11,4 +9,4 @@ module KRL_CMD
11
9
  ])
12
10
  end
13
11
  end
14
- end
12
+ end
data/lib/check.rb CHANGED
@@ -1,15 +1,14 @@
1
+ require 'json'
1
2
  module KRL_CMD
2
3
  class Check
3
- def self.go(args)
4
- require LIB_DIR + 'common'
5
- require 'json'
4
+ def self.go(options)
6
5
  app = KRL_COMMON::get_app
7
6
  krl_file = File.join(Dir.pwd, app.application_id + ".krl")
8
7
  raise "Cannot find .krl file." unless File.exists?(krl_file)
9
- if args.to_s == ""
10
- apiurl = "http://krl.kobj.net/manage/parse/ruleset"
8
+ if options["parser"]
9
+ apiurl = options["parser"]
11
10
  else
12
- apiurl = args.to_s
11
+ apiurl = "http://krl.kobj.net/manage/parse/ruleset"
13
12
  end
14
13
  apiargs = { "krl" => File.open(krl_file, 'r') { |f| f.read } }
15
14
  validateresponse = KRL_COMMON::long_post_form(URI.parse(apiurl), apiargs).body.to_s
data/lib/checkout.rb CHANGED
@@ -1,32 +1,67 @@
1
- require LIB_DIR + 'user'
2
1
  require 'fileutils'
3
2
 
4
3
  module KRL_CMD
5
4
  class Checkout
6
- def self.go(args)
7
- require LIB_DIR + 'common'
5
+
6
+ def self.go(ruleset, options)
7
+ begin
8
+ c = self.new(ruleset, options)
9
+ c.checkout
10
+ rescue Exception => e
11
+ puts e.message
12
+ ap e.backtrace if $DEBUG
13
+ end
14
+ end
15
+
16
+ def initialize(ruleset, options)
17
+ @user = User.new
18
+ @ruleset = ruleset
19
+ @include_title = options["title"]
20
+ @all = options["all"]
8
21
  app = KRL_COMMON::get_app rescue nil
9
- raise "You are already in an application: #{app.application_id}" if app
10
-
11
- ruleset_id = args.to_s
12
- puts "Checking out: #{ruleset_id}"
13
- raise "Please specify a ruleset id." if ruleset_id.empty?
14
- root_dir = Dir.pwd + "/#{ruleset_id}"
15
- raise "Directory already exists." if File.exists?(root_dir)
16
- user = User.new
17
- app = user.find_application({:application_id => ruleset_id})
18
-
19
- puts "Creating directory: #{root_dir}"
20
- FileUtils.mkdir root_dir
21
- app_details = {
22
- :name => app.name,
23
- :ruleset_id => app.application_id,
24
- :role => user.owns_current? ? "owner" : "developer"
25
- }
26
- File.open(root_dir + "/.app", "w") { |f| f.print(app_details.to_yaml) }
27
- File.open(root_dir + "/#{ruleset_id}.krl", "w") { |f| f.print(app.krl) }
22
+ raise "You are already in an application directory: #{app.application_id}" if app
23
+ end
24
+
25
+ def checkout
26
+
27
+ if @all
28
+ @user.applications["apps"].each do |app|
29
+ begin
30
+ @ruleset = app["appid"]
31
+ do_checkout
32
+ rescue => e
33
+ puts e.message
34
+ end
35
+ end
36
+ else
37
+ do_checkout
38
+ end
28
39
 
29
40
 
30
41
  end
42
+
43
+ private
44
+
45
+ def do_checkout
46
+ app = @user.find_application({:application_id => @ruleset})
47
+ if app
48
+ dir_name = @include_title && app.name ? "#{@ruleset}-#{app.name}" : @ruleset
49
+ puts "Checking out: #{dir_name}"
50
+ root_dir = Dir.pwd + "/#{dir_name}"
51
+ raise "Directory already exists (#{root_dir})." if File.exists?(root_dir)
52
+
53
+ puts "Creating directory: #{root_dir}"
54
+ FileUtils.mkdir root_dir
55
+ app_details = {
56
+ :name => app.name,
57
+ :ruleset_id => app.application_id,
58
+ :role => @user.owns_current? ? "owner" : "developer"
59
+ }
60
+ File.open(root_dir + "/.app", "w") { |f| f.print(app_details.to_yaml) }
61
+ File.open(root_dir + "/#{app.application_id}.krl", "w") { |f| f.print(app.krl) }
62
+ else
63
+ puts "Unable to find ruleset #{@ruleset}. You probably don't have permission to check it out."
64
+ end
65
+ end
31
66
  end
32
67
  end
data/lib/cli.rb ADDED
@@ -0,0 +1,229 @@
1
+ module KRL_CMD
2
+ LIB_DIR = File.dirname(__FILE__) + "/../lib/"
3
+ %w(user apps checkout create update versions deploy
4
+ commit show note check generate test info stats).each do |cmd|
5
+ autoload cmd.capitalize.to_sym, LIB_DIR + cmd
6
+ end
7
+ autoload :KRL_COMMON, LIB_DIR + 'common'
8
+
9
+
10
+ class CLI < Thor
11
+
12
+ desc "apps", "Display a list of apps"
13
+ def apps
14
+ KRL_CMD::Apps.go
15
+ end
16
+
17
+ desc "checkout [RULESET]", "Creates a directory structure with the rulesets you have checked out."
18
+ #method_option :type => :string, :required => true
19
+ method_option :title, :type => :boolean, :default => false, :aliases => "-t", :banner => "Include the title in the name of the directory."
20
+ method_option :all, :type => :boolean, :default => false, :aliases => "-a", :banner => "Checkout all of your rulesets into this directory."
21
+ #method_option :ruleset, :type => :string, :default => false, :aliases => "-r", :banner => "Ruleset ID, example: a1x1"
22
+ def checkout(ruleset="")
23
+ if ruleset.empty? && options["all"].nil?
24
+ say "Please specify either --ruleset or --all", :red
25
+ say help "checkout"
26
+ else
27
+ KRL_CMD::Checkout.go(ruleset, options)
28
+ end
29
+ end
30
+
31
+ desc "create [NAME]", "Creates a new ruleset and checks it out into the the directory."
32
+ method_option :title, :type => :boolean, :default => false, :aliases => "-t", :banner => "Include the name of the ruleset in the directory name"
33
+ method_option :description, :type => :string, :required => false, :aliases => "-d", :banner => "Description for the ruleset"
34
+ def create(name)
35
+ KRL_CMD::Create.go(name, options)
36
+ end
37
+
38
+ desc "update", "Updates the krl in the ruleset directory to the a specified version."
39
+ method_option :version, :type => :string, :required => false, :default => "development", :aliases => "-v", :banner => "Version number or 'production' or 'development'"
40
+ method_option :save, :type => :boolean, :default => false, :aliases => '-s', :banner => "Save a copy of the existing .krl file"
41
+ def update
42
+ begin
43
+ KRL_CMD::Update.go(options)
44
+ rescue => e
45
+ say e.message, :red
46
+ end
47
+ end
48
+
49
+ desc "versions", "Displays a list of the ruleset versions."
50
+ method_option :limit, :type => :numeric, :default => 0, :aliases => "-l", :banner => "Limit the number of versions to show. 0 will show all available versions."
51
+ def versions
52
+ begin
53
+ KRL_CMD::Versions.go(options)
54
+ rescue => e
55
+ say e.message, :red
56
+ end
57
+ end
58
+
59
+ desc "deploy", "Deploys a given version to production. If no version is supplied, the latest version is deployed."
60
+ method_option :version, :type => :numeric, :required => false, :aliases => "-v", :banner => "Version to be deployed."
61
+ def deploy
62
+ begin
63
+ KRL_CMD::Deploy.go(options)
64
+ rescue => e
65
+ say e.message, :red
66
+ end
67
+ end
68
+
69
+ desc "commit", "Commits or saves the .krl file to the Kynetx platform."
70
+ method_option :note, :type => :string, :required => false, :aliases => "-n", :banner => "Add a note to the commit"
71
+ method_option :deploy, :type => :boolean, :required => false, :aliases => "-d", :banner => "Deploy the ruleset after it has been committed."
72
+ def commit
73
+ begin
74
+ KRL_CMD::Commit.go(options)
75
+ rescue => e
76
+ say e.message, :red
77
+ end
78
+ end
79
+
80
+ desc "show", "Shows the krl for the ruleset for a given version"
81
+ method_option :version, :type => :string, :default => "development", :aliases => "-v", :banner => "Version of the KRL to show."
82
+ def show
83
+ begin
84
+ KRL_CMD::Show.go(options)
85
+ rescue => e
86
+ say e.message, :red
87
+ end
88
+ end
89
+
90
+ desc "note", "Adds a note to a ruleset version"
91
+ method_option :version, :type => :string, :default => "development", :aliases => "-v", :banner => "Version of the KRL to show."
92
+ method_option :note, :type => :string, :required => true, :aliases => "-n", :banner => "Note to be added."
93
+ def note
94
+ begin
95
+ KRL_CMD::Note.go(options)
96
+ rescue => e
97
+ say e.message, :red
98
+ end
99
+ end
100
+
101
+ desc "check", "Performs a syntax check of your KRL file."
102
+ method_option :parser, :type => :string, :required => false, :aliases => "-p", :banner => "Full URL to an alternate parser to check the krl against."
103
+ def check
104
+ begin
105
+ KRL_CMD::Check.go(options)
106
+ rescue => e
107
+ say e.message, :red
108
+ end
109
+ end
110
+
111
+ desc "generate [ENDPOINT]", "Generates an endpoint from the ruleset. Endpoint must be firefox, chrome, ie, bookmarklet, or infocard."
112
+ method_option :environment, :type => :string, :default => "prod", :aliases => "-e", :banner => "Environment. Must be either 'prod' or 'dev'."
113
+ method_option :defaults, :type => :boolean, :default => true, :aliases => "-d", :banner => "Use the defaults and don't prompt for more information."
114
+ method_option :force, :type => :boolean, :default => false, :aliases => "-f", :banner => "Force a rebuild of the endpoint rather than use the cached copy."
115
+ long_desc <<-D
116
+ Generates an endpoint for the ruleset. Endpoints are placed in the ./endpoints directory
117
+ or ./test directory depending on the environment specified. Current endpoints available are:
118
+ firefox (Mozilla Firefox), chrome (Google Chrome), ie (Microsoft Internet Explorer), bookmarklet (HTML Bookmarklet),
119
+ infocard (Info Card, see http://en.wikipedia.org/wiki/Information_Card).
120
+ Infocards generated here are used in the Azigo Card Selector.
121
+ See http://www.azigo.com
122
+ D
123
+ def generate(endpoint)
124
+ begin
125
+ KRL_CMD::Generate.go(endpoint, options)
126
+ rescue => e
127
+ say e.message, :red
128
+ end
129
+ end
130
+
131
+ desc "test", "Test has been deprecated, use 'generate -e dev'"
132
+ def test
133
+ say "'test' has been deprecated. Use 'generate -e dev'", :red
134
+ help "generate"
135
+ end
136
+
137
+ desc "info", "Display information about a ruleset"
138
+ method_option :app, :type => :string, :required => false, :aliases => "-a", :banner => "Ruleset for which to show information"
139
+ def info
140
+ begin
141
+ KRL_CMD::Info.go(options)
142
+ rescue => e
143
+ say e.message, :red
144
+ end
145
+ end
146
+
147
+ desc "stats", "Display basic stats for the ruleset. NOTE: You must be the owner of the app to see stats."
148
+ method_option :range, :type => :string, :default => "previous_day", :aliases => "-r", :banner => "Specify the range for the stats."
149
+ method_option :format, :type => :string, :default => "table", :aliases => "-f", :banner => "Format of the data. (table, json)"
150
+ def stats
151
+ begin
152
+ KRL_CMD::Stats.kpis(options)
153
+ rescue => e
154
+ say e.message, :red
155
+ end
156
+ end
157
+
158
+ desc "stats_interface", "Display the available options for running a stats query."
159
+ def stats_interface
160
+ begin
161
+ KRL_CMD::Stats.interface
162
+ rescue => e
163
+ say e.message, :red
164
+ end
165
+ end
166
+
167
+ desc "account_stats", "Display stats for the Kynetx account."
168
+ method_option :range, :type => :string, :default => "previous_day", :aliases => "-r", :banner => "Specify the range for the stats."
169
+ method_option :format, :type => :string, :default => "table", :aliases => "-f", :banner => "Format of the data. (table, json)"
170
+ def account_stats
171
+ begin
172
+ KRL_CMD::Stats.account_kpis(options)
173
+ rescue => e
174
+ say e.message, :red
175
+ end
176
+ end
177
+
178
+ desc "logging", "Displays values logged with explicit logging for the ruleset"
179
+ method_option :range, :type => :string, :default => "previous_day", :aliases => "-r", :banner => "Specify the range for the stats."
180
+ def logging
181
+ begin
182
+ KRL_CMD::Stats.logging(options)
183
+ rescue => e
184
+ say e.message, :red
185
+ end
186
+ end
187
+
188
+ desc "stats_query", "Build a custom stats query"
189
+ long_desc <<-D
190
+ Allows you to create a custom query for stats. Queries can be helpful for pulling
191
+ custom or ad-hoc data from the Kynetx data warehouse.
192
+
193
+ - Dimensions are fields that can be grouped and specified in a condition.
194
+
195
+ - KPIs, or sometimes called Facts, are data that is aggregated and cannot be included in a condition
196
+
197
+ - Contitions are specified in key value pairs, for example: 'dim:value' separated by a space.
198
+
199
+ - Ranges are preset date ranges for the query. All queries have a default range of 'previous_day'.
200
+
201
+ All available Dimensions, KPIs, and Ranges can be seen by running 'krl stats_interface'
202
+
203
+ Examples:\n
204
+ krl stats_query -k brse -d ruleset day -r last_thirty_days \n
205
+ krl stats_query -k rse brse -d am_pm hour interval_15 -r current_month -c hour:00 \n
206
+ krl stats_query -k rse brse -d am_pm hour interval_15 -r current_month -c hour:00 interval_15:00\n
207
+ krl stats_query -k brse -d day_of_week day -r current_month -c day_of_week_abbr:Wed
208
+
209
+ All data is available as both a table or as JSON. To specify the format, use the --format option.
210
+
211
+ D
212
+ method_option :kpis, :type => :array, :required => true, :aliases => "-k", :banner => ""
213
+ method_option :dims, :type => :array, :required => true, :aliases => "-d", :banner => ""
214
+ method_option :conditions, :type => :hash, :required => false, :aliases => "-c", :banner => "Conditions for the query as 'dim:value'."
215
+ method_option :range, :type => :string, :default => "previous_day", :aliases => "-r", :banner => "Specify the range for the stats."
216
+ method_option :format, :type => :string, :default => "table", :aliases => "-f", :banner => "Format of the data. (table, json)"
217
+ def stats_query
218
+ begin
219
+ KRL_CMD::Stats.query(options)
220
+ rescue => e
221
+ say e.message, :red
222
+ end
223
+ end
224
+
225
+
226
+ end
227
+
228
+
229
+ end
data/lib/commit.rb CHANGED
@@ -1,14 +1,16 @@
1
1
  module KRL_CMD
2
2
  class Commit
3
- def self.go(args)
4
- require LIB_DIR + 'common'
3
+ def self.go(options)
5
4
  app = KRL_COMMON::get_app
6
5
  krl_file = File.join(Dir.pwd, app.application_id + ".krl")
7
6
  if File.exists?(krl_file)
8
7
  begin
9
8
  app.krl = File.open(krl_file, 'r') { |f| f.read }
10
- app.set_version_note(app.version, args.to_s) if args.to_s != ""
11
- puts "Committed version #{app.version}"
9
+ app.set_version_note(app.version, options["note"]) if options["note"]
10
+ puts "Committed version: #{app.version}"
11
+ if options["deploy"]
12
+ KRL_CMD::Deploy.go({"version" => app.version})
13
+ end
12
14
  rescue KRLParseError => e
13
15
  puts "Unable to parse your krl."
14
16
  puts "Errors:"
data/lib/common.rb CHANGED
@@ -1,20 +1,32 @@
1
1
  require 'terminal-table/import'
2
2
  require 'net/http'
3
+ require 'yaml'
3
4
 
4
5
  module KRL_COMMON
5
- def self.pretty_table(collection, fields, limit=0)
6
+ def self.pretty_table(collection, fields, limit=0, limit_last=false)
7
+ raise "Nothing to present" if collection.empty?
6
8
  ptable = table do |t|
7
9
 
8
10
  t.headings = fields.collect{ |h| h[:field] }
9
11
  counter = 0
10
12
  collection.each do |c|
11
- row = []
12
- fields.each do |f|
13
- row << f[:value].call(c)
13
+ show_row = true
14
+
15
+ if limit_last && limit > 0
16
+ # This will make it so that the last items in the table are
17
+ # shown rather than the first when a limit is specified.
18
+ show_row = (counter + 1) > (collection.length - limit)
19
+ end
20
+
21
+ if show_row
22
+ row = []
23
+ fields.each do |f|
24
+ row << f[:value].call(c) if show_row
25
+ end
26
+ t << row
14
27
  end
15
- t << row
16
28
  counter += 1
17
- break if limit > 0 && limit == counter
29
+ break if limit > 0 && limit == counter && ! limit_last
18
30
  end
19
31
 
20
32
  end
@@ -22,10 +34,9 @@ module KRL_COMMON
22
34
  end
23
35
 
24
36
  def self.get_app(version="development")
25
- require LIB_DIR + "user"
26
37
  begin
27
38
  root_dir = Dir.pwd
28
- raise "Please re-checkout your app or make sure you are in the root directory of an app." unless File.exists?(File.join(root_dir, ".app"))
39
+ raise "Please re-checkout your ruleset or make sure you are in the root directory of a ruleset." unless File.exists?(File.join(root_dir, ".app"))
29
40
  config_file = File.join(root_dir, '.app')
30
41
  raise "Unable to get the app information. You need to recheckout your app." unless File.exists?(config_file)
31
42
  config = YAML::load_file(config_file)
@@ -33,7 +44,7 @@ module KRL_COMMON
33
44
  app = user.find_application(:application_id => config[:ruleset_id], :version => version)
34
45
  return app
35
46
  rescue Exception => e
36
- raise "Unable to get app information. #{e.message}"
47
+ raise "Unable to get ruleset information. #{e.message}"
37
48
  end
38
49
 
39
50
  end
data/lib/create.rb CHANGED
@@ -1,15 +1,15 @@
1
1
  module KRL_CMD
2
2
  class Create
3
- def self.go(args)
4
- raise "An application name must be specified" if args.to_s.empty?
5
- name = args.first
6
- desc = args.last # if description wasn't specified, set it to the name
7
- require LIB_DIR + 'user'
8
- require LIB_DIR + 'checkout'
3
+ def self.go(name, options)
4
+ desc = options["description"] ? options["description"] : name
9
5
  user = KRL_CMD::User.new
10
6
  new_app = user.create_application(name, desc)
11
- KRL_CMD::Checkout.go(new_app.application_id)
7
+ checkout_opts = {
8
+ "ruleset" => new_app.application_id,
9
+ "title" => options["title"]
10
+ }
11
+ KRL_CMD::Checkout.go(checkout_opts)
12
12
 
13
13
  end
14
14
  end
15
- end
15
+ end
data/lib/deploy.rb CHANGED
@@ -1,12 +1,10 @@
1
1
  module KRL_CMD
2
2
  class Deploy
3
- def self.go(args)
4
- require LIB_DIR + 'common'
3
+ def self.go(options)
5
4
  app = KRL_COMMON::get_app
6
- prod_version = args.to_s.empty? ? app.version : args.to_s.to_i
5
+ prod_version = options["version"] ? options["version"] : app.version
7
6
  app.production_version = prod_version
8
7
  puts "Deployed version: #{app.production_version}"
9
-
10
8
  end
11
9
  end
12
- end
10
+ end
data/lib/generate.rb CHANGED
@@ -7,48 +7,68 @@ require 'launchy'
7
7
 
8
8
  module KRL_CMD
9
9
  class Generate
10
- def self.go(args)
11
- raise "Please specify an endpoint to generate" if args.to_s.empty?
12
- type = args.shift
10
+ include Thor::Shell
11
+ def self.go(endpoint, options)
12
+ g = self.new(endpoint,options)
13
+ end
14
+
15
+ def initialize(endpoint, options)
16
+ @shell = Basic.new
17
+ @endpoint = endpoint
18
+ @environment = options["environment"]
19
+ @use_defaults = options["defaults"]
20
+ @force = options["force"]
21
+ @app = KRL_COMMON::get_app
22
+ @user = KRL_CMD::User.new
13
23
  endpoints = {
14
- "firefox" => lambda {gen_extension(type, args)},
15
- "chrome" => lambda {gen_extension(type, args)},
16
- "ie" => lambda {gen_extension(type, args)},
17
- "bookmarklet" => lambda {gen_bookmarklet(args)},
18
- "infocard" => lambda {gen_infocard(args)}
24
+ "firefox" => lambda {gen_extension},
25
+ "chrome" => lambda {gen_extension},
26
+ "ie" => lambda {gen_extension},
27
+ "bookmarklet" => lambda {gen_bookmarklet},
28
+ "infocard" => lambda {gen_infocard}
19
29
  }
20
- if endpoints[type]
21
- endpoints[type].call
30
+ if endpoints[@endpoint]
31
+ endpoints[@endpoint].call
22
32
  else
23
- raise "Unknown endpoint specified (#{type})"
33
+ raise "Unknown endpoint specified (#{@endpoint})"
24
34
  end
35
+
25
36
 
26
37
  end
27
38
 
28
- def self.gen_extension(type, args, env='prod')
29
- puts "Generating Extension (#{type.to_s}) #{args.join(', ')}"
30
- # ext = app.extension(type, args[0] || "", args[1] || "", args[2] || "" )
31
- # write_file(ext, "prod")
39
+ def gen_extension
40
+ puts "Generating Extension (#{@endpoint} - #{@environment})"
41
+
42
+ if @use_defaults
43
+ extname, extauthor, extdesc = "", "", ""
44
+ else
45
+ extname = @shell.ask("Name of the extension (#{@app.name}):")
46
+ extauthor = @shell.ask("Name of the author (#{@user.name}):")
47
+ extdesc = @shell.ask("Description:")
48
+ end
32
49
 
33
50
  opts = {}
34
- opts[:extname] = args[0] if args[0]
35
- opts[:extauthor] = args[1] if args[1]
36
- opts[:extdesc] = args[2] if args[2]
37
- opts[:env] = env
51
+ opts[:extname] = extname unless extname.empty?
52
+ opts[:extauthor] = extauthor unless extauthor.empty?
53
+ opts[:extdesc] = extdesc unless extdesc.empty?
54
+ opts[:env] = @environment
55
+ opts[:force_build] = @force ? "Y" : "N"
38
56
  opts[:format] = 'url'
39
57
 
40
- ext = app.endpoint(type, opts)
41
- write_file(ext, env)
58
+ ext = @app.endpoint(@endpoint, opts)
59
+ write_file(ext)
42
60
  end
43
61
 
44
- def self.gen_bookmarklet(args, env="prod")
45
- puts "Generating Bookmarklet (#{env})"
62
+ def gen_bookmarklet
63
+ puts "Generating Bookmarklet (#{@environment})"
46
64
  bm = ""
47
65
  opts = {}
48
- opts[:env] = env
49
- opts[:runtime] = args.to_s unless args.to_s.empty?
66
+ opts[:env] = @environment
67
+ if ! @use_defaults
68
+ opts[:runtime] = @shell.ask("Runtime to use for the bookmarklet (blank for default):")
69
+ end
50
70
 
51
- endpoint = app.endpoint(:bookmarklet, opts)
71
+ endpoint = @app.endpoint(:bookmarklet, opts)
52
72
 
53
73
  if endpoint["errors"].empty?
54
74
  bm = endpoint["data"]
@@ -56,10 +76,10 @@ module KRL_CMD
56
76
  raise "Invalid bookmark generated. \n#{endpoint.errors.join("\n")}"
57
77
  end
58
78
 
59
- bm_file = File.join(get_endpoint_dir(env), env + "_bookmarklet.html")
79
+ bm_file = File.join(get_endpoint_dir, @environment + "_bookmarklet.html")
60
80
  File.open(bm_file, 'w') do |f|
61
81
  f.print("<textarea rows='5' cols='100'>#{bm}</textarea><br><br>")
62
- link = env == "prod" ? app.name : env + "_" + app.name
82
+ link = @environment == "prod" ? @app.name : @environment + "_" + @app.name
63
83
  f.print("<a href=\"#{bm.gsub('"', '&quot;')}\">#{link}</a>")
64
84
  end
65
85
  puts "BOOKMARKLET:"
@@ -69,36 +89,40 @@ module KRL_CMD
69
89
  Launchy::Browser.run('file://' + bm_file)
70
90
  end
71
91
 
72
- def self.gen_infocard(args, env="prod")
73
- raise "You must specify a name for the card" if args.empty?
74
- puts "Generating Infocard (#{env})"
92
+ def gen_infocard
93
+ puts "Generating Infocard (#{@environment})"
94
+
95
+ if @use_defaults
96
+ extname = ""
97
+ datasets = ""
98
+ else
99
+ extname = @shell.ask("Name of the infocard (#{@app.name}):")
100
+ datasets = @shell.ask("Datasets:")
101
+ end
102
+
75
103
  opts = {}
76
- opts[:extname] = args[0] if args[0]
77
- opts[:datasets] = args[1] if args[1]
78
- opts[:env] = env
104
+ opts[:extname] = extname unless extname.empty?
105
+ opts[:datasets] = datasets unless datasets.empty?
106
+ opts[:env] = @environment
79
107
  opts[:format] = 'url'
80
108
 
81
- icard = app.endpoint(:info_card, opts)
82
- write_file(icard, env)
109
+ icard = @app.endpoint(:info_card, opts)
110
+ write_file(icard)
83
111
  end
84
112
 
85
- def self.app
86
- return @@app if defined?@@app
87
- require LIB_DIR + 'common'
88
- @@app = KRL_COMMON::get_app
89
- return @@app
90
- end
91
-
92
- def self.get_endpoint_dir(env)
93
- dir_name = env == "prod" ? "/endpoints" : "/test"
113
+ private
114
+
115
+ def get_endpoint_dir
116
+ dir_name = @environment == "prod" ? "/endpoints" : "/test"
94
117
  endpoint_dir = Dir.pwd + dir_name
95
118
  FileUtils.mkdir(endpoint_dir) unless File.directory?(endpoint_dir)
96
119
  return endpoint_dir
97
120
  end
98
121
 
99
- def self.write_file(ext, env)
122
+
123
+ def write_file(ext)
100
124
  if ext["errors"].empty?
101
- endpoint_dir = get_endpoint_dir(env)
125
+ endpoint_dir = get_endpoint_dir
102
126
  ext_file_name = File.join(endpoint_dir, ext["file_name"])
103
127
  url = URI.parse(ext["data"])
104
128
 
data/lib/info.rb CHANGED
@@ -1,17 +1,14 @@
1
1
  module KRL_CMD
2
2
  class Info
3
- def self.go(args)
4
- require LIB_DIR + 'user'
5
- require LIB_DIR + 'common'
6
- require 'pp'
3
+ def self.go(options)
7
4
  user = User.new
8
5
  app_id = nil
9
- if(args.length > 0)
10
- app_id = args[0]
6
+ if(options["app"] && options["app"].length > 0)
7
+ app_id = options["app"]
11
8
  else
12
9
  app_id = KRL_COMMON::get_app().application_id rescue nil
13
10
  end
14
- raise "Unable to determine the application id. use 'krl help' for more information." unless app_id
11
+ raise "Unable to determine the application id. Use 'krl help info' for more information." unless app_id
15
12
 
16
13
  app_info = user.api.get_app_info(app_id)
17
14
  app_details = user.api.get_app_details(app_id)
@@ -43,4 +40,4 @@ module KRL_CMD
43
40
  end
44
41
  end
45
42
  end
46
- end
43
+ end
data/lib/note.rb CHANGED
@@ -1,13 +1,11 @@
1
1
  module KRL_CMD
2
2
  class Note
3
- def self.go(args)
4
- raise "Please supply a version and a note. (note must be enclosed in quotes)" unless args.length == 2
5
- version = args.first.to_i
6
- note = args.last.to_s
7
- require LIB_DIR + 'common'
3
+ def self.go(options)
8
4
  app = KRL_COMMON::get_app
5
+ version = options["version"] ? options["version"] : app.version
6
+ note = options["note"]
9
7
  app.set_version_note(version, note)
10
8
  puts "Done."
11
9
  end
12
10
  end
13
- end
11
+ end
data/lib/show.rb CHANGED
@@ -1,11 +1,10 @@
1
1
  module KRL_CMD
2
2
  class Show
3
- def self.go(args)
4
- version = args.to_s.empty? ? "development" : args.to_s.to_i
5
- require LIB_DIR + 'common'
3
+ def self.go(options)
4
+ version = options["version"]
6
5
  app = KRL_COMMON::get_app
7
6
  puts "KRL for version #{version}"
8
7
  puts app.krl(version)
9
8
  end
10
9
  end
11
- end
10
+ end
data/lib/stats.rb ADDED
@@ -0,0 +1,110 @@
1
+ require 'json'
2
+ module KRL_CMD
3
+ class Stats
4
+ def self.interface
5
+ user = KRL_CMD::User.new
6
+ begin
7
+ p_interface = user.stats_interface
8
+ puts "-- Dimensions --"
9
+ p_interface["dims"].each {|s| puts "\t" + s}
10
+ puts
11
+ puts "-- KPIS --"
12
+ p_interface["kpis"].each {|s| puts "\t" + s}
13
+ puts
14
+ puts "-- Ranges --"
15
+ p_interface["ranges"].each {|s| puts "\t" + s}
16
+ rescue
17
+ raise "There was an error trying to retrieve the stats interface"
18
+ end
19
+ end
20
+
21
+ def self.kpis(options)
22
+ app = KRL_COMMON::get_app
23
+ begin
24
+ data = app.kpis(options["range"])
25
+ display_stats(data, %w(DAY RSE BRSE CALLBACKS RULES RULES_FIRED ACTIONS), options["format"])
26
+ rescue => e
27
+ ap e.message if $DEBUG
28
+ ap e.backtrace if $DEBUG
29
+ raise e.message
30
+ end
31
+
32
+ end
33
+
34
+ def self.account_kpis(options)
35
+ user = KRL_CMD::User.new
36
+ begin
37
+ data = user.kpis([], options["range"])
38
+ display_stats(data, %w(RULESET DAY RSE BRSE CALLBACKS RULES RULES_FIRED ACTIONS), options["format"])
39
+ rescue => e
40
+ ap e.message if $DEBUG
41
+ ap e.backtrace if $DEBUG
42
+ raise e.message
43
+ end
44
+ end
45
+
46
+ def self.logging(options)
47
+ app = KRL_COMMON::get_app
48
+ begin
49
+ data = app.logging(options["range"])
50
+ display_stats(data, [], "json")
51
+ rescue => e
52
+ ap e.message if $DEBUG
53
+ ap e.backtrace if $DEBUG
54
+ raise e.message
55
+ end
56
+ end
57
+
58
+ def self.query(options)
59
+ user = KRL_CMD::User.new
60
+ if options["conditions"]
61
+ conditions = []
62
+ options["conditions"].each {|k,v| conditions << {:field => k, :value => v}}
63
+ else
64
+ conditions = nil
65
+ end
66
+ begin
67
+ data = user.api.get_stats_query(
68
+ options["kpis"].join(","),
69
+ options["dims"].join(","),
70
+ conditions,
71
+ options["range"]
72
+ )
73
+ fields = []
74
+ (options["dims"] + options["kpis"]).each {|v| fields << v.upcase}
75
+ display_stats(data, fields, options["format"])
76
+
77
+ rescue => e
78
+ ap e.message #if $DEBUG
79
+ ap e.backtrace #if $DEBUG
80
+ raise "Unable to retrieve query results. #{e.message}"
81
+ end
82
+ end
83
+
84
+
85
+ private
86
+
87
+
88
+ def self.display_stats(data, fields, format)
89
+ field_opts = []
90
+ fields.each do |field|
91
+ field_opts << {:field => field, :value => lambda { |r| r[field].to_s }}
92
+ end
93
+ if data["valid"] == true
94
+ if format == "table"
95
+ KRL_COMMON.pretty_table(data["data"], field_opts)
96
+ elsif format == "json"
97
+ puts JSON.pretty_generate(data["data"])
98
+ else
99
+ raise "Unknown format (#{format})"
100
+ end
101
+
102
+ else
103
+ raise data["error"]
104
+ end
105
+
106
+
107
+ end
108
+
109
+ end
110
+ end
data/lib/update.rb CHANGED
@@ -1,12 +1,20 @@
1
+ require 'fileutils'
1
2
  module KRL_CMD
2
3
  class Update
3
- def self.go(args)
4
- version = args.to_s.empty? ? "development" : args.to_s.to_i
5
- require LIB_DIR + 'common'
4
+ def self.go(options)
5
+ version = options["version"]
6
6
  app = KRL_COMMON::get_app
7
7
  root_dir = Dir.pwd
8
- File.open(File.join(Dir.pwd, app.application_id + ".krl"), "w") { |f| f.print(app.krl(version)) }
8
+ krl_file = File.join(Dir.pwd, app.application_id + ".krl")
9
+
10
+ if File.exists?(krl_file) && options["save"]
11
+ backup_file = app.application_id + ".saved.krl"
12
+ raise "Backup file already exists (#{backup_file}). Your krl was not updated. Please rename or delete your existing backup file." if File.exists?(backup_file)
13
+ FileUtils.cp(krl_file, backup_file)
14
+ end
15
+
16
+ File.open(krl_file, "w") { |f| f.print(app.krl(version)) }
9
17
  puts "Updated to version: #{version}"
10
18
  end
11
19
  end
12
- end
20
+ end
data/lib/versions.rb CHANGED
@@ -1,8 +1,7 @@
1
1
  module KRL_CMD
2
2
  class Versions
3
- def self.go(args)
4
- require LIB_DIR + 'common'
5
- limit = args.to_s.to_i
3
+ def self.go(options)
4
+ limit = options["limit"]
6
5
  app = KRL_COMMON::get_app
7
6
  p_version = app.production_version.to_i
8
7
  KRL_COMMON::pretty_table(app.versions.reverse, [
@@ -11,7 +10,7 @@ module KRL_CMD
11
10
  {:field => "Date", :value => lambda { |r| r["created"].to_s }},
12
11
  {:field => "Note", :value => lambda { |r| r["note"].to_s }},
13
12
  {:field => "Production", :value => lambda { |r| r["version"] == p_version ? "Yes" : "No" }}
14
- ], limit)
13
+ ], limit, ! limit.nil?)
15
14
  end
16
15
  end
17
16
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: krl
3
3
  version: !ruby/object:Gem::Version
4
- hash: 147
4
+ hash: 17
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 68
10
- version: 0.1.68
8
+ - 2
9
+ - 3
10
+ version: 0.2.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Michael Farmer, Cid Dennis
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-13 00:00:00 -06:00
18
+ date: 2010-12-20 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -26,12 +26,12 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- hash: 33
29
+ hash: 39
30
30
  segments:
31
31
  - 0
32
32
  - 1
33
- - 29
34
- version: 0.1.29
33
+ - 30
34
+ version: 0.1.30
35
35
  type: :runtime
36
36
  version_requirements: *id001
37
37
  - !ruby/object:Gem::Dependency
@@ -80,7 +80,7 @@ dependencies:
80
80
  type: :runtime
81
81
  version_requirements: *id004
82
82
  - !ruby/object:Gem::Dependency
83
- name: rspec
83
+ name: awesome_print
84
84
  prerelease: false
85
85
  requirement: &id005 !ruby/object:Gem::Requirement
86
86
  none: false
@@ -91,8 +91,38 @@ dependencies:
91
91
  segments:
92
92
  - 0
93
93
  version: "0"
94
- type: :development
94
+ type: :runtime
95
95
  version_requirements: *id005
96
+ - !ruby/object:Gem::Dependency
97
+ name: thor
98
+ prerelease: false
99
+ requirement: &id006 !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ hash: 43
105
+ segments:
106
+ - 0
107
+ - 14
108
+ - 6
109
+ version: 0.14.6
110
+ type: :runtime
111
+ version_requirements: *id006
112
+ - !ruby/object:Gem::Dependency
113
+ name: rspec
114
+ prerelease: false
115
+ requirement: &id007 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ hash: 3
121
+ segments:
122
+ - 0
123
+ version: "0"
124
+ type: :development
125
+ version_requirements: *id007
96
126
  description: " Build your Kynetx applications with the IDE of your choice! Installing the krl gem will give you \n command line tools that provides a simple interface that is similar to git or svn.\n"
97
127
  email: mjf@kynetx.com
98
128
  executables:
@@ -106,6 +136,7 @@ files:
106
136
  - lib/apps.rb
107
137
  - lib/check.rb
108
138
  - lib/checkout.rb
139
+ - lib/cli.rb
109
140
  - lib/commit.rb
110
141
  - lib/common.rb
111
142
  - lib/create.rb
@@ -115,6 +146,7 @@ files:
115
146
  - lib/info.rb
116
147
  - lib/note.rb
117
148
  - lib/show.rb
149
+ - lib/stats.rb
118
150
  - lib/test.rb
119
151
  - lib/update.rb
120
152
  - lib/user.rb